+++ /dev/null
-#include "benchmarks.h"
-#include <drv/timer.h>
-#include <string.h>
-
-static uint8_t buf[512];
-
-void hash_benchmark(Hash *h, const char *hname, int numk)
-{
- memset(buf, 0x12, sizeof(buf));
- ticks_t t = timer_clock();
-
- for (int j=0;j<64;++j) {
- hash_begin(h);
- for (int i=0; i<numk*2; ++i)
- hash_update(h, buf, 512);
- hash_final(h);
- }
-
- t = timer_clock() - t;
-
- utime_t usec = ticks_to_us(t) / 64;
- kprintf("%s @ %ldMhz: %s of %dKiB of data: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numk, (usec/1000), (usec % 1000));
-}
-
-void prng_benchmark(PRNG *prng, const char *hname, int numbytes)
-{
- memset(buf, 0x12, sizeof(buf));
-
- ASSERT(sizeof(buf) >= prng_seed_len(prng));
- prng_reseed(prng, buf);
-
- ticks_t t = timer_clock();
- enum { CYCLES = 2048 };
-
- for (int j=0;j<CYCLES;++j)
- {
- for (int i=0; i<(numbytes+511)/512-1; ++i)
- prng_generate(prng, buf, 512);
- if (numbytes % 512)
- prng_generate(prng, buf, numbytes%512);
- }
-
- t = timer_clock() - t;
-
- utime_t usec = ticks_to_us(t) / CYCLES;
- kprintf("%s @ %ldMhz: %s generation of %d random bytes: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numbytes, (usec/1000), (usec % 1000));
- kprintf("Sample of random data:\n");
- kdump(buf, MIN(numbytes, 64));
-}
-
-void cipher_benchmark(BlockCipher *c, const char *cname, int numbytes)
-{
- memset(buf, 0x12, sizeof(buf));
-
- ASSERT(sizeof(buf) >= cipher_key_len(c));
- cipher_set_key(c, buf);
-
- uint8_t iv[cipher_block_len(c)];
- memset(iv, 0, sizeof(iv));
-
- ticks_t t = timer_clock();
- enum { CYCLES = 64 };
-
- for (int j=0;j<CYCLES;++j)
- {
- cipher_cbc_begin(c, iv);
- int numblocks = (numbytes / cipher_block_len(c)) + 1;
- for (int i=0; i<numblocks; ++i)
- cipher_cbc_encrypt(c, buf);
- }
-
- t = timer_clock() - t;
-
- utime_t usec = ticks_to_us(t) / CYCLES;
- kprintf("%s @ %ldMhz: Encryption with %s-CBC of %d bytes: %lu.%lu ms\n",
- CPU_CORE_NAME, CPU_FREQ/1000000,
- cname, numbytes,
- (usec/1000), (usec % 1000));
-}
+++ /dev/null
-#ifndef SEC_BENCHMARKS_H
-#define SEC_BENCHMARKS_H
-
-#include <sec/hash.h>
-#include <sec/prng.h>
-#include <sec/cipher.h>
-
-void hash_benchmark(Hash *h, const char *hname, int numk);
-void prng_benchmark(PRNG *prng, const char *hname, int numk);
-void cipher_benchmark(BlockCipher *c, const char *cname, int msg_len);
-
-#endif /* SEC_BENCHMARKS_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for symmetric block ciphers.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "cipher.h"
-#include <sec/util.h>
-
-void cipher_cbc_encrypt(BlockCipher *c, void *block)
-{
- xor_block(c->buf, c->buf, block, c->block_len);
- c->enc_block(c, c->buf);
- memcpy(block, c->buf, c->block_len);
-}
-
-void cipher_cbc_decrypt(BlockCipher *c, void *block)
-{
- uint8_t temp[c->block_len];
- memcpy(temp, block, c->block_len);
-
- c->dec_block(c, block);
- xor_block(block, block, c->buf, c->block_len);
-
- memcpy(c->buf, temp, c->block_len);
-}
-
-static void ctr_increment(void *buf, size_t len)
-{
- uint8_t *data = (uint8_t*)buf;
- while (len--)
- if (LIKELY(++data[len] != 0))
- return;
-}
-
-void cipher_ctr_step(BlockCipher *c, void *block)
-{
- memcpy(block, c->buf, c->block_len);
- c->enc_block(c, block);
- ctr_increment(c->buf, c->block_len);
-}
-
-void cipher_ctr_encrypt(BlockCipher *c, void *block)
-{
- uint8_t temp[c->block_len];
-
- cipher_ctr_step(c, temp);
- xor_block(block, block, temp, c->block_len);
-
- PURGE(temp);
-}
-
-void cipher_ctr_decrypt(BlockCipher *c, void *block)
-{
- cipher_ctr_encrypt(c, block);
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for symmetric block ciphers.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_CIPHER_H
-#define SEC_CIPHER_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct BlockCipher
-{
- void (*set_key)(struct BlockCipher *c, const void *key, size_t len);
- void (*enc_block)(struct BlockCipher *c, void *block);
- void (*dec_block)(struct BlockCipher *c, void *block);
-
- void *buf;
- uint8_t key_len;
- uint8_t block_len;
-} BlockCipher;
-
-
-/**
- * Return the key length (in bytes).
- *
- * In case of ciphers that allow a variabile key size with a fixed state
- * (eg: Blowfish), this returns the preferred key length.
- */
-INLINE size_t cipher_key_len(BlockCipher *c)
-{
- return c->key_len;
-}
-
-/**
- * Return the block length (in bytes)
- */
-INLINE size_t cipher_block_len(BlockCipher *c)
-{
- return c->block_len;
-}
-
-/**
- * Set the current key used by the cipher.
- *
- * \note the buffer pointed by \a key is not modified and it is
- * not needed anymore after this call returns. Its lenght must match
- * the value returned by \a cipher_key_len().
- */
-INLINE void cipher_set_key(BlockCipher *c, const void *key)
-{
- ASSERT(c->set_key);
- c->set_key(c, key, c->key_len);
-}
-
-/**
- * Set the current key (of variable size) used by the cipher.
- *
- * This function is useful for ciphers that allow a variable size for the key
- * (even with a fixed state). For all the other ciphers, the length must
- * match the value returned by \a cipher_key_len().
- *
- * \note the buffer pointed by \a key is not modified and it is
- * not needed anymore after this call returns.
- */
-INLINE void cipher_set_vkey(BlockCipher *c, const void *key, size_t len)
-{
- ASSERT(c->set_key);
- c->set_key(c, key, len);
-}
-
-/*********************************************************************************/
-/* ECB mode */
-/*********************************************************************************/
-
-/**
- * Encrypt a block (in-place) using the current key in ECB mode.
- */
-INLINE void cipher_ecb_encrypt(BlockCipher *c, void *block)
-{
- ASSERT(c->enc_block);
- c->enc_block(c, block);
-}
-
-/**
- * Decrypt a block (in-place) using the current key in ECB mode.
- */
-INLINE void cipher_ecb_decrypt(BlockCipher *c, void *block)
-{
- ASSERT(c->dec_block);
- c->dec_block(c, block);
-}
-
-
-/*********************************************************************************/
-/* CBC mode */
-/*********************************************************************************/
-
-/**
- * Initialize CBC by setting the IV.
- *
- * \note the memory pointed by \a iv will be used and modified by the CBC
- * functions. It is caller's responsibility to keep it available until there is
- * no more CBC work to do.
- */
-INLINE void cipher_cbc_begin(BlockCipher *c, void *iv)
-{
- c->buf = iv;
-}
-
-/**
- * Encrypt a block (in-place) using the current key in CBC mode.
- */
-void cipher_cbc_encrypt(BlockCipher *c, void *block);
-
-/**
- * Decrypt a block (in-place) using the current key in CBC mode.
- */
-void cipher_cbc_decrypt(BlockCipher *c, void *block);
-
-
-
-/*********************************************************************************/
-/* CTR mode */
-/*********************************************************************************/
-
-/**
- * Initialize CTR by setting the counter.
- *
- * \note the memory pointed by \a counter will be used and modified (incremented)
- * by the CTR functions. It is caller's responsibility to keep it available until
- * there is no more CTR work to do.
- */
-INLINE void cipher_ctr_begin(BlockCipher *c, void *counter)
-{
- c->buf = counter;
-}
-
-/**
- * Encrypt a block (in-place) using the current key in CTR mode.
- */
-void cipher_ctr_encrypt(BlockCipher *c, void *block);
-
-/**
- * Decrypt a block (in-place) using the current key in CTR mode.
- */
-void cipher_ctr_decrypt(BlockCipher *c, void *block);
-
-/**
- * Generate the crypted stream block in CTR mode for the current
- * counter, and then bump it.
- *
- * This function is basically the core CTR operation, without the final
- * XOR pass with the plaintext or ciphertext. For normal CTR usage,
- * you never need to call it.
- */
-void cipher_ctr_step(BlockCipher *c, void *block);
-
-#endif /* SEC_CIPHER_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief AES Advanced Encryption Standard implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "aes"
- */
-
-// advanced encryption standard
-// author: karl malbrain, malbrain@yahoo.com
-/*
-This work, including the source code, documentation
-and related data, is placed into the public domain.
-
-The orginal author is Karl Malbrain.
-
-THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY
-OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF
-MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE,
-ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE
-RESULTING FROM THE USE, MODIFICATION, OR
-REDISTRIBUTION OF THIS SOFTWARE.
-*/
-
-#include "aes.h"
-#include <cfg/compiler.h>
-
-#include <string.h>
-
-// AES only supports Nb=4
-#define Nb 4 // number of columns in the state & expanded key
-
-typedef struct
-{
- BlockCipher c;
- int num_rounds;
- uint8_t expkey[0];
-} AES_Context;
-
-static uint8_t Sbox[256] = { // forward s-box
-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 uint8_t InvSbox[256] = { // inverse s-box
-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};
-
-// combined Xtimes2[Sbox[]]
-static uint8_t Xtime2Sbox[256] = {
-0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec,
-0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b,
-0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a,
-0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea,
-0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13,
-0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85,
-0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b,
-0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf,
-0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6,
-0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad,
-0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2,
-0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10,
-0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f,
-0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27,
-0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5,
-0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c
-};
-
-// combined Xtimes3[Sbox[]]
-static uint8_t Xtime3Sbox[256] = {
-0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a,
-0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b,
-0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f,
-0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f,
-0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97,
-0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a,
-0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3,
-0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d,
-0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95,
-0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76,
-0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b,
-0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18,
-0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85,
-0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9,
-0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a,
-0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a
-};
-
-// modular multiplication tables
-// based on:
-
-// Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x)
-// Xtime3[x] = x^Xtime2[x];
-#if 0
-static uint8_t Xtime2[256] = {
-0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
-0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
-0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
-0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,
-0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,
-0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
-0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
-0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,
-0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
-0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25,
-0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45,
-0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
-0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
-0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
-0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
-0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5};
-#endif
-
-static uint8_t Xtime9[256] = {
-0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
-0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
-0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
-0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc,
-0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01,
-0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
-0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a,
-0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa,
-0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
-0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b,
-0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0,
-0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
-0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
-0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
-0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
-0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46};
-
-static uint8_t XtimeB[256] = {
-0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
-0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
-0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
-0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2,
-0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f,
-0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
-0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4,
-0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54,
-0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
-0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e,
-0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5,
-0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
-0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
-0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
-0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
-0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3};
-
-static uint8_t XtimeD[256] = {
-0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
-0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
-0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
-0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20,
-0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26,
-0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
-0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d,
-0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d,
-0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
-0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41,
-0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a,
-0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
-0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
-0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
-0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
-0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97};
-
-static uint8_t XtimeE[256] = {
-0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
-0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
-0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
-0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61,
-0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7,
-0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
-0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c,
-0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc,
-0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
-0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb,
-0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0,
-0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
-0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
-0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
-0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
-0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d};
-
-// exchanges columns in each of 4 rows
-// row0 - unchanged, row1- shifted left 1,
-// row2 - shifted left 2 and row3 - shifted left 3
-static void ShiftRows (uint8_t *state)
-{
- uint8_t tmp;
-
- // just substitute row 0
- state[0] = Sbox[state[0]], state[4] = Sbox[state[4]];
- state[8] = Sbox[state[8]], state[12] = Sbox[state[12]];
-
- // rotate row 1
- tmp = Sbox[state[1]], state[1] = Sbox[state[5]];
- state[5] = Sbox[state[9]], state[9] = Sbox[state[13]], state[13] = tmp;
-
- // rotate row 2
- tmp = Sbox[state[2]], state[2] = Sbox[state[10]], state[10] = tmp;
- tmp = Sbox[state[6]], state[6] = Sbox[state[14]], state[14] = tmp;
-
- // rotate row 3
- tmp = Sbox[state[15]], state[15] = Sbox[state[11]];
- state[11] = Sbox[state[7]], state[7] = Sbox[state[3]], state[3] = tmp;
-}
-
-// restores columns in each of 4 rows
-// row0 - unchanged, row1- shifted right 1,
-// row2 - shifted right 2 and row3 - shifted right 3
-static void InvShiftRows (uint8_t *state)
-{
- uint8_t tmp;
-
- // restore row 0
- state[0] = InvSbox[state[0]], state[4] = InvSbox[state[4]];
- state[8] = InvSbox[state[8]], state[12] = InvSbox[state[12]];
-
- // restore row 1
- tmp = InvSbox[state[13]], state[13] = InvSbox[state[9]];
- state[9] = InvSbox[state[5]], state[5] = InvSbox[state[1]], state[1] = tmp;
-
- // restore row 2
- tmp = InvSbox[state[2]], state[2] = InvSbox[state[10]], state[10] = tmp;
- tmp = InvSbox[state[6]], state[6] = InvSbox[state[14]], state[14] = tmp;
-
- // restore row 3
- tmp = InvSbox[state[3]], state[3] = InvSbox[state[7]];
- state[7] = InvSbox[state[11]], state[11] = InvSbox[state[15]], state[15] = tmp;
-}
-
-// recombine and mix each row in a column
-static void MixSubColumns (uint8_t *state)
-{
- uint8_t tmp[4 * Nb];
-
- // mixing column 0
- tmp[0] = Xtime2Sbox[state[0]] ^ Xtime3Sbox[state[5]] ^ Sbox[state[10]] ^ Sbox[state[15]];
- tmp[1] = Sbox[state[0]] ^ Xtime2Sbox[state[5]] ^ Xtime3Sbox[state[10]] ^ Sbox[state[15]];
- tmp[2] = Sbox[state[0]] ^ Sbox[state[5]] ^ Xtime2Sbox[state[10]] ^ Xtime3Sbox[state[15]];
- tmp[3] = Xtime3Sbox[state[0]] ^ Sbox[state[5]] ^ Sbox[state[10]] ^ Xtime2Sbox[state[15]];
-
- // mixing column 1
- tmp[4] = Xtime2Sbox[state[4]] ^ Xtime3Sbox[state[9]] ^ Sbox[state[14]] ^ Sbox[state[3]];
- tmp[5] = Sbox[state[4]] ^ Xtime2Sbox[state[9]] ^ Xtime3Sbox[state[14]] ^ Sbox[state[3]];
- tmp[6] = Sbox[state[4]] ^ Sbox[state[9]] ^ Xtime2Sbox[state[14]] ^ Xtime3Sbox[state[3]];
- tmp[7] = Xtime3Sbox[state[4]] ^ Sbox[state[9]] ^ Sbox[state[14]] ^ Xtime2Sbox[state[3]];
-
- // mixing column 2
- tmp[8] = Xtime2Sbox[state[8]] ^ Xtime3Sbox[state[13]] ^ Sbox[state[2]] ^ Sbox[state[7]];
- tmp[9] = Sbox[state[8]] ^ Xtime2Sbox[state[13]] ^ Xtime3Sbox[state[2]] ^ Sbox[state[7]];
- tmp[10] = Sbox[state[8]] ^ Sbox[state[13]] ^ Xtime2Sbox[state[2]] ^ Xtime3Sbox[state[7]];
- tmp[11] = Xtime3Sbox[state[8]] ^ Sbox[state[13]] ^ Sbox[state[2]] ^ Xtime2Sbox[state[7]];
-
- // mixing column 3
- tmp[12] = Xtime2Sbox[state[12]] ^ Xtime3Sbox[state[1]] ^ Sbox[state[6]] ^ Sbox[state[11]];
- tmp[13] = Sbox[state[12]] ^ Xtime2Sbox[state[1]] ^ Xtime3Sbox[state[6]] ^ Sbox[state[11]];
- tmp[14] = Sbox[state[12]] ^ Sbox[state[1]] ^ Xtime2Sbox[state[6]] ^ Xtime3Sbox[state[11]];
- tmp[15] = Xtime3Sbox[state[12]] ^ Sbox[state[1]] ^ Sbox[state[6]] ^ Xtime2Sbox[state[11]];
-
- memcpy (state, tmp, sizeof(tmp));
-}
-
-// restore and un-mix each row in a column
-static void InvMixSubColumns (uint8_t *state)
-{
- uint8_t tmp[4 * Nb];
- int i;
-
- // restore column 0
- tmp[0] = XtimeE[state[0]] ^ XtimeB[state[1]] ^ XtimeD[state[2]] ^ Xtime9[state[3]];
- tmp[5] = Xtime9[state[0]] ^ XtimeE[state[1]] ^ XtimeB[state[2]] ^ XtimeD[state[3]];
- tmp[10] = XtimeD[state[0]] ^ Xtime9[state[1]] ^ XtimeE[state[2]] ^ XtimeB[state[3]];
- tmp[15] = XtimeB[state[0]] ^ XtimeD[state[1]] ^ Xtime9[state[2]] ^ XtimeE[state[3]];
-
- // restore column 1
- tmp[4] = XtimeE[state[4]] ^ XtimeB[state[5]] ^ XtimeD[state[6]] ^ Xtime9[state[7]];
- tmp[9] = Xtime9[state[4]] ^ XtimeE[state[5]] ^ XtimeB[state[6]] ^ XtimeD[state[7]];
- tmp[14] = XtimeD[state[4]] ^ Xtime9[state[5]] ^ XtimeE[state[6]] ^ XtimeB[state[7]];
- tmp[3] = XtimeB[state[4]] ^ XtimeD[state[5]] ^ Xtime9[state[6]] ^ XtimeE[state[7]];
-
- // restore column 2
- tmp[8] = XtimeE[state[8]] ^ XtimeB[state[9]] ^ XtimeD[state[10]] ^ Xtime9[state[11]];
- tmp[13] = Xtime9[state[8]] ^ XtimeE[state[9]] ^ XtimeB[state[10]] ^ XtimeD[state[11]];
- tmp[2] = XtimeD[state[8]] ^ Xtime9[state[9]] ^ XtimeE[state[10]] ^ XtimeB[state[11]];
- tmp[7] = XtimeB[state[8]] ^ XtimeD[state[9]] ^ Xtime9[state[10]] ^ XtimeE[state[11]];
-
- // restore column 3
- tmp[12] = XtimeE[state[12]] ^ XtimeB[state[13]] ^ XtimeD[state[14]] ^ Xtime9[state[15]];
- tmp[1] = Xtime9[state[12]] ^ XtimeE[state[13]] ^ XtimeB[state[14]] ^ XtimeD[state[15]];
- tmp[6] = XtimeD[state[12]] ^ Xtime9[state[13]] ^ XtimeE[state[14]] ^ XtimeB[state[15]];
- tmp[11] = XtimeB[state[12]] ^ XtimeD[state[13]] ^ Xtime9[state[14]] ^ XtimeE[state[15]];
-
- for( i=0; i < 4 * Nb; i++ )
- state[i] = InvSbox[tmp[i]];
-}
-
-// encrypt/decrypt columns of the key
-// n.b. you can replace this with
-// byte-wise xor if you wish.
-
-static void AddRoundKey (uint32_t *state, uint32_t *key)
-{
- int idx;
-
- for( idx = 0; idx < 4; idx++ )
- state[idx] ^= key[idx];
-}
-
-static uint8_t Rcon[11] =
-{
- 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36
-};
-
-#include <cpu/byteorder.h>
-
-// produce Nb bytes for each round
-static void AES_expandKey(BlockCipher *c_, const void *key, size_t len)
-{
- AES_Context *c = (AES_Context *)c_;
- ASSERT(len == c->c.key_len);
-
- uint8_t tmp0, tmp1, tmp2, tmp3, tmp4;
- uint32_t idx, idx_mod_nk, idx_div_nk;
- int Nk = c->c.key_len/4;
- int Nr = c->num_rounds;
-
- memcpy (c->expkey, key, Nk*4);
-
- for( idx = Nk, idx_mod_nk = 0, idx_div_nk = 1; idx < Nb * (Nr + 1); idx++ ) {
- tmp0 = c->expkey[4*idx - 4];
- tmp1 = c->expkey[4*idx - 3];
- tmp2 = c->expkey[4*idx - 2];
- tmp3 = c->expkey[4*idx - 1];
-
- if( idx_mod_nk == 0 ) {
- tmp4 = tmp3;
- tmp3 = Sbox[tmp0];
- tmp0 = Sbox[tmp1] ^ Rcon[idx_div_nk];
- tmp1 = Sbox[tmp2];
- tmp2 = Sbox[tmp4];
- } else if( Nk > 6 && idx_mod_nk == 4 ) {
- tmp0 = Sbox[tmp0];
- tmp1 = Sbox[tmp1];
- tmp2 = Sbox[tmp2];
- tmp3 = Sbox[tmp3];
- }
-
- c->expkey[4*idx+0] = c->expkey[4*idx - 4*Nk + 0] ^ tmp0;
- c->expkey[4*idx+1] = c->expkey[4*idx - 4*Nk + 1] ^ tmp1;
- c->expkey[4*idx+2] = c->expkey[4*idx - 4*Nk + 2] ^ tmp2;
- c->expkey[4*idx+3] = c->expkey[4*idx - 4*Nk + 3] ^ tmp3;
-
- idx_mod_nk += 1;
- if (idx_mod_nk == Nk)
- {
- idx_mod_nk = 0;
- ++idx_div_nk;
- }
- }
-}
-
-// encrypt one 128 bit block
-static void AES_encrypt(BlockCipher *c_, void *block)
-{
- AES_Context *c = (AES_Context *)c_;
- uint8_t Nr = c->num_rounds;
- uint32_t round;
-
- AddRoundKey ((uint32_t *)block, (uint32_t *)c->expkey);
-
- for( round = 1; round < Nr + 1; round++ ) {
- if( round < Nr )
- MixSubColumns (block);
- else
- ShiftRows (block);
-
- AddRoundKey ((uint32_t *)block, (uint32_t *)c->expkey + round * Nb);
- }
-}
-
-static void AES_decrypt(BlockCipher *c_, void *block)
-{
- AES_Context *c = (AES_Context *)c_;
- uint8_t Nr = c->num_rounds;
- uint32_t round;
-
- AddRoundKey ((uint32_t *)block, (uint32_t *)c->expkey + Nr * Nb);
- InvShiftRows(block);
-
- for( round = Nr; round--; )
- {
- AddRoundKey ((uint32_t *)block, (uint32_t *)c->expkey + round * Nb);
- if( round )
- InvMixSubColumns (block);
- }
-}
-
-/******************************************************************************/
-
-void AES128_init(AES128_Context *aes)
-{
- aes->c.set_key = AES_expandKey;
- aes->c.enc_block = AES_encrypt;
- aes->c.dec_block = AES_decrypt;
- aes->c.block_len = Nb*4;
- aes->c.key_len = 16;
- aes->num_rounds = 10;
-}
-
-void AES192_init(AES192_Context *aes)
-{
- aes->c.set_key = AES_expandKey;
- aes->c.enc_block = AES_encrypt;
- aes->c.dec_block = AES_decrypt;
- aes->c.block_len = Nb*4;
- aes->c.key_len = 24;
- aes->num_rounds = 12;
-}
-
-void AES256_init(AES256_Context *aes)
-{
- aes->c.set_key = AES_expandKey;
- aes->c.enc_block = AES_encrypt;
- aes->c.dec_block = AES_decrypt;
- aes->c.block_len = Nb*4;
- aes->c.key_len = 32;
- aes->num_rounds = 14;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief AES Advanced Encryption Standard implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "aes"
- */
-
-#ifndef SEC_CIPHER_AES_H
-#define SEC_CIPHER_AES_H
-
-#include <sec/cipher.h>
-#include <alloca.h>
-
-typedef struct
-{
- BlockCipher c;
- int num_rounds;
- uint8_t expkey[44*4];
-} AES128_Context;
-
-typedef struct
-{
- BlockCipher c;
- int num_rounds;
- uint8_t expkey[52*4];
-} AES192_Context;
-
-typedef struct
-{
- BlockCipher c;
- int num_rounds;
- uint8_t expkey[60*4];
-} AES256_Context;
-
-void AES128_init(AES128_Context *c);
-void AES192_init(AES192_Context *c);
-void AES256_init(AES256_Context *c);
-
-#define AES128_stackinit(...) \
- ({ AES128_Context *ctx = alloca(sizeof(AES128_Context)); AES128_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-#define AES192_stackinit(...) \
- ({ AES192_Context *ctx = alloca(sizeof(AES192_Context)); AES192_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-#define AES256_stackinit(...) \
- ({ AES256_Context *ctx = alloca(sizeof(AES256_Context)); AES256_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-int AES_testSetup(void);
-int AES_testRun(void);
-int AES_testTearDown(void);
-
-#endif /* SEC_CIPHER_AES_H */
+++ /dev/null
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "aes.h"
-#include <string.h>
-
-int AES_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int AES_testTearDown(void)
-{
- return 0;
-}
-
-static const struct ECB128_Test
-{
- uint8_t key[16];
- uint8_t pt[16];
- uint8_t ct[16];
-}
-ECB128_Tests[] =
-{
-{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0e\xdd\x33\xd3\xc6\x21\xe5\x46\x45\x5b\xd8\xba\x14\x18\xbe\xc8", },
-{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\xc3\xf8\x83\x45\x0c\x11\x3c\x64\xca\x42\xe1\x11\x2a\x9e\x87", },
-{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xa1\xda\x77\x0f\x5d\x7a\xc4\xc9\xef\x94\xd8\x22\xaf\xfd\x97", },
-{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x00\x14\xd6\x34\xe2\xb7\x65\x07\x77\xe8\xe8\x4d\x03\xcc\xd8", },
-{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\x7e\x79\xae\xd0\xdb\x7e\x27\x9e\x95\x5b\x5f\x49\x38\x75\xa7", },
-{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9e\xd5\xa7\x51\x36\xa9\x40\xd0\x96\x3d\xa3\x79\xdb\x4a\xf2\x6a", },
-{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x29\x5f\x83\x46\x5c\x77\x55\xe8\xfa\x36\x4b\xac\x6a\x7e\xa5", },
-{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xd7\x58\x25\x6b\x28\xfd\x85\x0a\xd4\x94\x42\x08\xcf\x11\x55", },
-{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xff\xb3\x4c\x74\x3d\xe4\xd8\x8c\xa3\x80\x11\xc9\x90\x89\x0b", },
-{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x58\xf0\xec\xea\x8b\x21\x72\xc0\xc1\x99\x5f\x91\x82\xc0\xf3", },
-{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\x6d\x77\x98\xfa\xc2\x0f\x82\xa8\x82\x3f\x98\x4d\x06\xf7\xf5", },
-{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x1b\xf4\x4f\x2d\x16\xbe\x92\x8c\xa4\x4a\xaf\x7b\x9b\x10\x6b", },
-{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xf1\xa3\x3e\x50\xd4\x0d\x10\x37\x64\xc7\x6b\xd4\xc6\xb6\xf8", },
-{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x37\x05\x0c\x9f\xc0\xd4\x81\x7e\x2d\x69\xde\x87\x8a\xee\x8d", },
-{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x3e\xcb\xe4\xa4\x53\x26\x9a\x0d\xd2\x60\x69\x46\x7f\xb5\xb5", },
-{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xd0\x75\x4f\xe6\x8f\x11\xb9\xe3\x75\xd0\x70\xa6\x08\xc8\x84", },
-{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\xa0\xb3\xe9\x98\xd0\x50\x68\xa5\x39\x97\x78\x40\x52\x00\xb4", },
-{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\x55\x6a\x33\x43\x8d\xb8\x7b\xc4\x1b\x17\x52\xc5\x5e\x5e\x49", },
-{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\xfb\x12\x8d\x3a\x1a\xf6\xe5\x48\x52\x1b\xb9\x62\xbf\x1f\x05", },
-{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x29\x8e\x9c\x1d\xb5\x17\xc2\x15\xfa\xdf\xb7\xd2\xa8\xd6\x91", },
-{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa6\xcb\x76\x1d\x61\xf8\x29\x2d\x0d\xf3\x93\xa2\x79\xad\x03\x80", },
-{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x12\xac\xd8\x9b\x13\xcd\x5f\x87\x26\xe3\x4d\x44\xfd\x48\x61\x08", },
-{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xb1\x70\x3f\xc5\x7b\xa0\x9f\xe0\xc3\x58\x0f\xeb\xdd\x7e\xd4", },
-{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xde\x11\x72\x2d\x89\x3e\x9f\x91\x21\xc3\x81\xbe\xcc\x1d\xa5\x9a", },
-{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6d\x11\x4c\xcb\x27\xbf\x39\x10\x12\xe8\x97\x4c\x54\x6d\x9b\xf2", },
-{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5c\xe3\x7e\x17\xeb\x46\x46\xec\xfa\xc2\x9b\x9c\xc3\x8d\x93\x40", },
-{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\xc1\xb6\xe2\x15\x71\x22\x05\x6d\x02\x43\xd8\xa1\x65\xcd\xdb", },
-{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x69\x3e\x6a\x59\xd1\x36\x6c\x74\xd8\x23\x56\x2d\x7e\x14\x31", },
-{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x7c\x64\xdc\x84\xa8\xbb\xa7\x58\xed\x17\xeb\x02\x5a\x57\xe3", },
-{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe1\x7b\xc7\x9f\x30\xea\xab\x2f\xac\x2c\xbb\xe3\x45\x8d\x68\x7a", },
-{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x14\xbc\x20\x28\x00\x9b\x92\x3f\x0b\x01\x91\x5c\xe5\xe7\xc4", },
-{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\x28\x52\x4a\x16\xa1\xe1\xc1\x45\x29\x71\xca\xa8\xd1\x34\x76", },
-{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\x62\xe1\x63\x63\x63\x83\x60\xfd\xd6\xad\x62\x11\x27\x94\xf0", },
-{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5a\x86\x88\xf0\xb2\xa2\xc1\x62\x24\xc1\x61\x65\x8f\xfd\x40\x44", },
-{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\xf7\x10\x84\x2b\x9b\xb9\xc3\x2f\x26\x64\x8c\x78\x68\x07\xca", },
-{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xa9\x8b\xf1\x1e\x16\x3f\x63\x2c\x47\xec\x6a\x49\x68\x3a\x89", },
-{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0f\x18\xaf\xf9\x42\x74\x69\x6d\x9b\x61\x84\x8b\xd5\x0a\xc5\xe5", },
-{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x40\x85\x71\xc3\xe2\x42\x45\x40\x20\x7f\x83\x3b\x6d\xda\x69", },
-{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x3f\xf9\x96\x94\x7f\x0c\x7d\x1f\x43\xc8\xf3\x02\x7b\x9b\x75", },
-{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\xf4\xda\xf4\xad\x29\xa3\x61\x5a\x9b\x6e\xce\x5c\x99\x51\x8a", },
-{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc7\x29\x54\xa4\x8d\x07\x74\xdb\x0b\x49\x71\xc5\x26\x26\x04\x15", },
-{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xf9\xb7\x61\x12\xdc\x65\x31\xe0\x7d\x2c\xfd\xa0\x44\x11\xf0", },
-{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\x4d\x8e\x69\x91\x19\xe1\xfc\x87\x54\x5a\x64\x7f\xb1\xd3\x4f", },
-{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\xc4\x80\x7a\xe1\x1f\x36\xf0\x91\xc5\x7d\x9f\xb6\x85\x48\xd1", },
-{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xbf\x73\xaa\xd4\x9c\x82\x00\x7f\x77\xa5\xc1\xcc\xec\x6a\xb4", },
-{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xb2\x88\xcc\x20\x40\x04\x90\x01\xd2\xc7\x58\x5a\xd1\x23\xfc", },
-{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\x49\x71\x10\xef\xb9\xdc\xeb\x13\xe2\xb1\x3f\xb4\x46\x55\x64", },
-{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x55\x0e\x6c\xb5\xa8\x8e\x49\x63\x4c\x9a\xb6\x9e\xda\x04\x30", },
-{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x76\x84\x73\xce\x98\x43\xea\x66\xa8\x14\x05\xdd\x50\xb3\x45", },
-{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x2f\x43\x03\x83\xf9\x08\x4e\x03\xa6\x53\x57\x1e\x06\x5d\xe6", },
-{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x4e\x66\xc0\x7b\xae\x3e\x79\xfb\x7d\x21\x08\x47\xa3\xb0\xba", },
-{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x90\x78\x51\x25\x50\x5f\xad\x59\xb1\x3c\x18\x6d\xd6\x6c\xe3", },
-{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x52\x7a\x6a\xeb\xda\xec\x9e\xae\xf8\xed\xa2\xcb\x77\x83\xe5", },
-{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\xfd\xaf\x53\xeb\xbc\x98\x80\xc2\x28\x61\x7d\x6a\x9b\x54\x8b", },
-{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x78\x61\x04\xb9\x74\x4b\x98\xf0\x52\xc4\x6f\x1c\x85\x0d\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xab\x30\x13\xdd\x1e\x61\xdf\x06\xcb\xaf\x34\xca\x2a\xee\x78", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x74\x70\x46\x9b\xe9\x72\x30\x30\xfd\xcc\x73\xa8\xcd\x4f\xbb\x10", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa3\x5a\x63\xf5\x34\x3e\xbe\x9e\xf8\x16\x7b\xcb\x48\xad\x12\x2e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\x86\x87\xf0\x75\x7a\x21\x0e\x9f\xdf\x18\x12\x04\xc3\x08\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\x18\x1e\x84\xbd\x54\x57\xd2\x6a\x88\xfb\xae\x96\x01\x8f\xb0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x65\x33\x17\xb9\x36\x2b\x6f\x9b\x9e\x1a\x58\x0e\x68\xd4\x94\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x5c\x9d\xc0\xb6\x89\xf0\x3c\x45\x86\x7b\x5f\xaa\x5c\x18\xd1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xa4\xd9\x6d\x56\xdd\xa3\x98\xb9\xaa\xbe\xcf\xc7\x57\x29\xfd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xbe\x19\xe0\x53\x63\x5f\x09\xf2\x66\x5e\x7b\xae\x85\xb4\x2d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\xcd\x65\x28\x42\x92\x6a\xea\x4a\xa6\x13\x7b\xb2\xbe\x2b\x5e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x3d\x4a\x4f\x38\xeb\xb3\x37\xd1\x0a\xa8\x4e\x91\x71\xa5\x54", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\xbf\xf7\xff\x45\x4b\x0e\xc5\xa4\xa2\xa6\x95\x66\xe2\xcb\x84", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\x35\xd5\x65\xac\xe3\xf3\x1e\xb2\x49\xba\x2c\xc6\x76\x5d\x7a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf6\x0e\x91\xfc\x32\x69\xee\xcf\x32\x31\xc6\xe9\x94\x56\x97\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x69\xcf\xad\xf5\x1f\x8e\x60\x4d\x9c\xc3\x71\x82\xf6\x63\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\x66\x37\x3f\x24\xa0\xb6\xed\x56\xe0\xd9\x6f\xcd\xaf\xb8\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xa4\x48\xc2\xaa\xc9\x54\xf5\xd8\x12\xe9\xd7\x84\x94\x44\x6a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\xc5\x59\x9d\xd8\xac\x02\x23\x9a\x0f\xef\x4a\x36\xdd\x16\x68", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x76\x44\x68\xbb\x10\x38\x28\xcf\x7e\x14\x73\xce\x89\x50\x73", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x0d\x02\x89\x36\x83\xb9\xf1\x80\x45\x8e\x4a\xa6\xb7\x39\x82", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xd9\xb0\x17\xd3\x02\xdf\x41\x0a\x93\x7d\xcd\xb8\xbb\x6e\x43", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x16\x23\xcc\x44\x31\x3c\xff\x44\x0b\x15\x94\xa7\xe2\x1c\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x28\x4c\xa2\xfa\x35\x80\x7b\x8b\x0a\xe4\xd1\x9e\x11\xd7\xdb\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xe9\x76\x87\x57\x55\xf9\x40\x1d\x54\xf3\x6e\x2a\x23\xa5\x94", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xec\x19\x8a\x18\xe1\x0e\x53\x24\x03\xb7\xe2\x08\x87\xc8\xdd\x80", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x54\x5d\x50\xeb\xd9\x19\xe4\xa6\x94\x9d\x96\xad\x47\xe4\x6a\x80", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\xdf\xb5\x27\x06\x0e\x0a\x71\x00\x9c\x7b\xb0\xc6\x8f\x1d\x44", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\xfa\x13\x22\xea\x33\xda\x21\x73\xa0\x24\xf2\xff\x0d\x89\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\x85\xb1\xa7\x5b\x0f\x3b\xd9\x58\xdc\xd0\xe2\x93\x18\xc5\x21", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x38\xf6\x7b\x9e\x98\xe4\xa9\x7b\x6d\xf0\x30\xa9\xfc\xdd\x01\x04", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x2a\xff\xfb\x2c\x88\x0e\x82\xb0\x59\x26\xd0\xfc\x6c\x44\x8b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\x79\x80\xce\x7b\x10\x5c\xf5\x30\x95\x2d\x74\xda\xaf\x79\x8c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x36\x95\xe1\x35\x1b\x9d\x68\x58\xbd\x95\x8c\xf5\x13\xef\x6c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6d\xa0\x49\x0b\xa0\xba\x03\x43\xb9\x35\x68\x1d\x2c\xce\x5b\xa1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\xea\x23\xaf\x08\x53\x40\x11\xc6\x00\x09\xab\x29\xad\xa2\xf1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x13\x80\x6c\xf1\x9c\xc3\x87\x21\x55\x4d\x7c\x0f\xcd\xcd\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x38\xaf\x1f\x4f\x69\xba\xe9\xd8\x5d\xd1\x88\xdc\xdf\x06\x88", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xcf\x44\xc9\x2d\x55\x0b\xfb\x1e\xd2\x8e\xf5\x83\xdd\xf5\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd0\x6e\x31\x95\xb5\x37\x6f\x10\x9d\x5c\x4e\xc6\xc5\xd6\x2c\xed", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x40\xde\x01\x4d\x3d\x61\x07\x07\x27\x9b\x13\x24\x2a\x5c\x36", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\xc5\xc6\xff\xa5\xe0\xbd\x3a\x94\xc8\x8f\x6b\x6f\x7c\x16\xb9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\x40\xc3\x90\x1c\xd7\xef\xfc\x22\xbf\xfc\x35\xde\xe0\xb4\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x33\x05\xc7\x2b\xed\xfa\xb9\x73\x82\xc4\x06\xd0\xc4\x9b\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xbb\xaa\xb2\x2a\x6b\xd4\x92\x5a\x99\xa2\xb4\x08\xd2\xdb\xae", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x7c\x5b\x8f\xcd\x05\x33\xab\x98\xbc\x51\xe2\x7a\x6c\xe4\x61", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x9c\x04\xff\x4c\x07\x51\x3c\x0b\x3e\xf0\x5c\x03\xe3\x37\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\x7a\xf0\xe8\x95\xdd\xa5\xeb\x98\xef\xc6\x80\x66\xe8\x4c\x54", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x71\x67\xf3\x81\x2a\xff\xf1\xff\xac\xb4\xa9\x34\x37\x9f\xc3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xb1\xdc\x3a\x9c\x72\x97\x2e\x42\x5a\xe2\xef\x3e\xb5\x97\xcd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xae\xaa\x3a\x21\x3e\x96\x8d\x4b\x5b\x67\x9d\x3a\x2c\x97\xfe", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x92\x41\xda\xca\x4f\xdd\x03\x4a\x82\x37\x2d\xb5\x0e\x1a\x0f\x3f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\x45\x74\xd9\xcd\x00\xcf\x2b\x5a\x7f\x77\xe5\x3c\xd5\x78\x85", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x79\x3d\xe3\x92\x36\x57\x0a\xba\x83\xab\x9b\x73\x7c\xb5\x21\xc9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x16\x59\x1c\x0f\x27\xd6\x0e\x29\xb8\x5a\x96\xc3\x38\x61\xa7\xef", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xfb\x5c\x4d\x4f\x5c\xb7\x9b\xe5\xc1\x74\xa3\xb1\xc9\x73\x48", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x4d\x2b\x61\x63\x3d\x16\x2b\xe5\x9d\xde\x04\x22\x2f\x47\x40", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\x75\x0f\xf2\x63\xa6\x5e\x1f\x9e\x92\x4c\xcf\xd9\x8f\x3e\x37", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\xd0\x66\x2d\x6e\xae\xdd\xed\xeb\xae\x7f\x7e\xa3\xa4\xf6\xb6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\xc4\x6b\xb3\x06\x92\xbe\x65\x7f\x7e\xaa\x93\xeb\xad\x98\x97", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\x39\x94\xcf\xb9\xda\x28\x5a\x5d\x96\x42\xe1\x75\x9b\x22\x4a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xbf\x57\x87\x7b\x7b\x17\x38\x5c\x85\xd0\xb5\x48\x51\xe3\x71", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\xa5\xc0\x97\xcd\xc1\x53\x2a\xc0\x71\xd5\x7b\x1d\x28\xd1\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x0c\x53\xfa\x37\x31\x1f\xc1\x0b\xd2\xa9\x98\x1f\x51\x31\x74", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x4f\x97\x0c\x0a\x25\xc4\x18\x14\xbd\xae\x2e\x50\x6b\xe3\xb4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2d\xce\x3a\xcb\x72\x7c\xd1\x3c\xcd\x76\xd4\x25\xea\x56\xe4\xf6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\x60\x47\x4d\x50\x4b\x9b\x3e\xef\xb6\x8d\x35\xf2\x45\xf4\xb3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xa8\xa9\x47\x76\x66\x35\xde\xc3\x75\x53\xd9\xa6\xc0\xcb\xb7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x25\xd6\xcf\xe6\x88\x1f\x2b\xf4\x97\xdd\x14\xcd\x4d\xdf\x44\x5b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xc7\x8c\x13\x5e\xd9\xe9\x8c\x09\x66\x40\x64\x72\x65\xda\x1e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5a\x4d\x40\x4d\x89\x17\xe3\x53\xe9\x2a\x21\x07\x2c\x3b\x23\x05", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xbc\x96\x84\x6b\x3f\xdc\x71\x64\x3f\x38\x4c\xd3\xcc\x3e\xaf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\xa4\xa9\x14\x3f\x4e\x5d\x40\x48\x52\x1c\x4f\x88\x77\xd8\x8e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\xd7\x8e\x72\x6c\x1e\xc0\x2b\x7e\xbf\xe9\x2b\x23\xd9\xec\x34", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xe5\x93\x9c\x8e\xfd\xf2\xf0\x4e\x60\xb9\xfe\x71\x17\xb2\xc2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x31\xd4\xd7\x4f\x5d\xcb\xf3\x9d\xaa\xf8\xca\x3a\xf6\xe5\x27", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xd9\xfd\x5c\xc4\xf0\x74\x41\x72\x7d\xf0\xf3\x3e\x40\x1a\x36", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\xcc\xdb\x04\x46\x46\xd7\xe1\xf3\xcc\xea\x3d\xca\x08\xb8\xc0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x16\xae\x4c\xe5\x04\x2a\x67\xee\x8e\x17\x7b\x7c\x58\x7e\xcc\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\xda\x0b\xb1\x1a\x23\x85\x5d\x9c\x5c\xb1\xb4\xc6\x41\x2e\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x4f\x1a\xa5\x30\x96\x7d\x67\x32\xce\x47\x15\xeb\x0e\xe2\x4b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x17\x38\x25\x26\x21\xdd\x18\x0a\x34\xf3\x45\x5b\x4b\xaa\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xe2\xb5\x08\xdb\x7f\xd8\x92\x34\xca\xf7\x93\x9e\xe5\x62\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\x49\x9c\x25\x1f\x84\x42\xee\x13\xf0\x93\x3b\x68\x8f\xcd\x19", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x51\x35\xf8\xa8\x1f\x25\xc9\xd6\x30\xb1\x75\x02\xf6\x8e\x53", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x87\x14\x5a\x01\xad\x1c\x6c\xed\xe9\x95\xea\x36\x70\x45\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xae\x3b\x10\xa0\xc8\xca\x6d\x1d\x3b\x0f\xa6\x1e\x56\xb0\xb2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x64\xb4\xd6\x29\x81\x0f\xda\x6b\xaf\xdf\x08\xf3\xb0\xd8\xd2\xc5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd7\xe5\xdb\xd3\x32\x45\x95\xf8\xfd\xc7\xd7\xc5\x71\xda\x6c\x2a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\xf7\x23\x75\x26\x4e\x16\x7f\xca\x9d\xe2\xc1\x52\x7d\x96\x06", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xe7\x9d\xd4\xf4\x01\xff\x9b\x7e\xa9\x45\xd8\x66\x66\xc1\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\x35\xce\xa2\x79\x99\x40\xb4\x0d\xb3\xf8\x19\xcb\x94\xc0\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x69\x41\xcb\x6b\x3e\x08\xc2\xb7\xaf\xa5\x81\xeb\xdd\x60\x7b\x87", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\x20\xf4\x39\xf6\xbb\x09\x7b\x29\xb8\xbd\x6d\x99\xaa\xd7\x99", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\x5d\x01\xf0\x58\xe5\x65\xf7\x7a\xe8\x63\x78\xbd\x2c\x49\xb3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\xb5\xfd\x98\x19\x0e\xf4\x5f\xbb\x43\x01\x43\x8d\x09\x59\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x00\x1f\xf5\xd9\x98\x06\xef\xd2\x5d\xa3\x4f\x56\xbe\x85\x4b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x59\x4c\x60\xf5\xc8\x27\x7a\x51\x13\x67\x7f\x94\x20\x8d\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\xc0\xfc\x18\x18\xe4\xaa\x46\xbd\x2e\x39\xd6\x38\xf8\x9e\x05", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x02\x3e\xe9\xc3\xfd\xc4\x5a\x01\x9b\x4e\x98\x5c\x7e\x1a\x54", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xf4\x01\x82\xab\x46\x62\xf3\x02\x3b\xae\xc1\xee\x79\x6b\x57", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\xeb\xba\xd7\x30\x36\x49\xb4\x19\x4a\x69\x45\xc6\xcc\x36\x94", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa2\x12\x4b\xea\x53\xec\x28\x34\x27\x9b\xed\x7f\x7e\xb0\xf9\x38", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb9\xfb\x43\x99\xfa\x4f\xac\xc7\x30\x9e\x14\xec\x98\x36\x0b\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x62\x77\x43\x74\x20\xc5\xd6\x34\xf7\x15\xae\xa8\x1a\x91\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x17\x1a\x0e\x1b\x2d\xd4\x24\xf0\xe0\x89\xaf\x2c\x4c\x10\xf3\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\xad\xbe\x40\x2d\x1b\x20\x8f\xe7\x35\xed\xce\x00\xae\xe7\xce", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\xb0\x2f\xf9\x29\xa1\x48\x5a\xf6\xf5\xc6\xd6\x55\x8b\xaa\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x09\x2f\xaa\xcc\x9b\xf4\x35\x08\xbf\x8f\xa8\x61\x3c\xa7\x5d\xea", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x2b\xf8\x28\x0f\x3f\x97\x42\xc7\xed\x51\x3f\xe8\x02\x62\x9c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x21\x5a\x41\xee\x44\x2f\xa9\x92\xa6\xe3\x23\x98\x6d\xed\x3f\x68", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\x1e\x99\xcf\x4f\x0f\x77\xce\xa8\x36\xe1\x1a\x2f\xe7\x5f\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xe3\xa0\xca\x90\x79\xe6\x46\x33\x1d\xf8\xb4\xe7\x0d\x2c\xd6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4a\xfe\x7f\x12\x0c\xe7\x61\x3f\x74\xfc\x12\xa0\x1a\x82\x80\x73", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x7f\x00\x0e\x75\xe2\xc8\xb9\xd4\x79\xbe\xed\x91\x3f\xe6\x78", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\x83\x0c\x8e\x7a\xae\xfe\x2d\x30\x31\x0e\xf3\x81\xcb\xf6\x91", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x1a\xa0\xf2\xc8\x57\x01\x44\xf3\x86\x57\xea\x40\x85\xeb\xe5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x85\x06\x2c\x2c\x90\x9f\x15\xd9\x26\x9b\x6c\x18\xce\x99\xc4\xf0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x80\x34\xdc\x9e\x41\xb5\xa5\x60\xed\x23\x9e\xea\xb1\xbc\x78", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\xf9\x3a\x4c\xe5\xab\x6d\x5d\x56\xf1\xb9\x3c\xf1\x99\x11\xc1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x31\x12\xbc\xb0\xc1\xdc\xc7\x49\xd7\x99\x74\x36\x91\xbf\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\xc5\x5b\xd7\x5c\x7f\x9c\x88\x19\x89\xd3\xec\x19\x11\xc0\xd4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x2e\x6b\x5e\xf1\x82\xb7\xdf\xf3\x62\x9a\xbd\x6a\x12\x04\x5f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x32\x23\x27\xe0\x17\x80\xb1\x73\x97\xf2\x40\x87\xf8\xcc\x6f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xca\xcb\x5c\xd1\x16\x92\xc3\x73\xb2\x41\x17\x68\x14\x9e\xe7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x8e\x3d\xbb\xca\x57\x78\x60\xda\xb6\xb8\x0d\xa3\x13\x92\x56", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x79\xb6\x1c\x37\xbf\x32\x8e\xcc\xa8\xd7\x43\x26\x5a\x3d\x42\x5c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xd9\x9c\x6b\xcc\x1f\x06\xfd\xa8\xe2\x7e\x8a\xe3\xf1\xcc\xc7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\xfd\x4b\x91\xc7\x01\xfd\x6b\x61\xb7\xf9\x97\x82\x9d\x66\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x00\x5d\x52\xf2\x5f\x16\xbd\xc9\x54\x5a\x87\x6a\x63\x49\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x4d\x35\x4f\x02\xbb\x5a\x5e\x47\xd3\x96\x66\x86\x7f\x24\x6a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x51\xb8\xd6\xe1\xe1\xa0\xeb\xb1\x55\xfb\xbf\x6e\x7b\x7d\xc3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x98\xd4\xf4\x2f\xa7\xba\x6a\x10\xac\x05\xe8\x7b\x9f\x20\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x11\x29\x5e\x73\x9c\xa7\xd9\xb5\x0f\x8e\x4c\x0e\x75\x4a\x3f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\x33\xfc\x7d\x8a\xbe\x3c\xa1\x93\x67\x59\xf8\xf5\xde\xaf\x20", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x5e\x0f\x56\x6d\xc9\x6c\x29\x8f\x0c\x12\x63\x75\x39\xb2\x5c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x07\xc3\xe7\x98\x5f\xe0\xf5\xa5\x0e\x2c\xdb\x25\xc5\x10\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x41\xf9\x92\xa8\x56\xfb\x27\x8b\x38\x9a\x62\xf5\xd2\x74\xd7\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x10\xd3\xed\x7a\x6f\xe1\x5a\xb4\xd9\x1a\xcb\xc7\xd0\x76\x7a\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x21\xfe\xec\xd4\x5b\x2e\x67\x59\x73\xac\x33\xbf\x0c\x54\x24\xfc", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x14\x80\xcb\x39\x55\xba\x62\xd0\x9e\xea\x66\x8f\x7c\x70\x88\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x66\x40\x40\x33\xd6\xb7\x2b\x60\x93\x54\xd5\x49\x6e\x7e\xb5\x11", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x1c\x31\x7a\x22\x0a\x7d\x70\x0d\xa2\xb1\xe0\x75\xb0\x02\x66\xe1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\xab\x3b\x89\x54\x22\x33\xf1\x27\x1b\xf8\xfd\x0c\x0f\x40\x35\x45", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\xd9\x3e\xae\x96\x6f\xac\x46\xdc\xa9\x27\xd6\xb1\x14\xfa\x3f\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x1b\xde\xc5\x21\x31\x65\x03\xd9\xd5\xee\x65\xdf\x3e\xa9\x4d\xdf", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\xee\xf4\x56\x43\x1d\xea\x8b\x4a\xcf\x83\xbd\xae\x37\x17\xf7\x5f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x06\xf2\x51\x9a\x2f\xaf\xaa\x59\x6b\xfe\xf5\xcf\xa1\x5c\x21\xb9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x25\x1a\x7e\xac\x7e\x2f\xe8\x09\xe4\xaa\x8d\x0d\x70\x12\x53\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x3b\xff\xc1\x6e\x4c\x49\xb2\x68\xa2\x0f\x8d\x96\xa6\x0b\x40\x58", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\xe8\x86\xf9\x28\x19\x99\xc5\xbb\x3b\x3e\x88\x62\xe2\xf7\xc9\x88", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x56\x3b\xf9\x0d\x61\xbe\xef\x39\xf4\x8d\xd6\x25\xfc\xef\x13\x61", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x4d\x37\xc8\x50\x64\x45\x63\xc6\x9f\xd0\xac\xd9\xa0\x49\x32\x5b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\xb8\x7c\x92\x1b\x91\x82\x9e\xf3\xb1\x3c\xa5\x41\xee\x11\x30\xa6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x2e\x65\xeb\x6b\x6e\xa3\x83\xe1\x09\xac\xcc\xe8\x32\x6b\x03\x93", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x9c\xa5\x47\xf7\x43\x9e\xdc\x3e\x25\x5c\x0f\x4d\x49\xaa\x89\x90", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\xa5\xe6\x52\x61\x4c\x93\x00\xf3\x78\x16\xb1\xf9\xfd\x0c\x87\xf9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x14\x95\x4f\x0b\x46\x97\x77\x6f\x44\x49\x4f\xe4\x58\xd8\x14\xed", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x7c\x8d\x9a\xb6\xc2\x76\x17\x23\xfe\x42\xf8\xbb\x50\x6c\xbc\xf7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\xdb\x7e\x19\x32\x67\x9f\xdd\x99\x74\x2a\xab\x04\xaa\x0d\x5a\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x4c\x6a\x1c\x83\xe5\x68\xcd\x10\xf2\x7c\x2d\x73\xde\xd1\x9c\x28", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x90\xec\xbe\x61\x77\xe6\x74\xc9\x8d\xe4\x12\x41\x3f\x7a\xc9\x15", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x90\x68\x4a\x2a\xc5\x5f\xe1\xec\x2b\x8e\xbd\x56\x22\x52\x0b\x73", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x74\x72\xf9\xa7\x98\x86\x07\xca\x79\x70\x77\x95\x99\x10\x35\xe6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x56\xaf\xf0\x89\x87\x8b\xf3\x35\x2f\x8d\xf1\x72\xa3\xae\x47\xd8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x65\xc0\x52\x6c\xbe\x40\x16\x1b\x80\x19\xa2\xa3\x17\x1a\xbd\x23", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x37\x7b\xe0\xbe\x33\xb4\xe3\xe3\x10\xb4\xaa\xbd\xa1\x73\xf8\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x94\x02\xe9\xaa\x6f\x69\xde\x65\x04\xda\x8d\x20\xc4\xfc\xaa\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x12\x3c\x1f\x4a\xf3\x13\xad\x8c\x2c\xe6\x48\xb2\xe7\x1f\xb6\xe1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x1f\xfc\x62\x6d\x30\x20\x3d\xcd\xb0\x01\x9f\xb8\x0f\x72\x6c\xf4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x76\xda\x1f\xbe\x3a\x50\x72\x8c\x50\xfd\x2e\x62\x1b\x5a\xd8\x85", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x08\x2e\xb8\xbe\x35\xf4\x42\xfb\x52\x66\x8e\x16\xa5\x91\xd1\xd6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xe6\x56\xf9\xec\xf5\xfe\x27\xec\x3e\x4a\x73\xd0\x0c\x28\x2f\xb3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x2c\xa8\x20\x9d\x63\x27\x4c\xd9\xa2\x9b\xb7\x4b\xcd\x77\x68\x3a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x79\xbf\x5d\xce\x14\xbb\x7d\xd7\x3a\x8e\x36\x11\xde\x7c\xe0\x26", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x3c\x84\x99\x39\xa5\xd2\x93\x99\xf3\x44\xc4\xa0\xec\xa8\xa5\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\xed\x3c\x0a\x94\xd5\x9b\xec\xe9\x88\x35\xda\x7a\xa4\xf0\x7c\xa2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x63\x91\x9e\xd4\xce\x10\x19\x64\x38\xb6\xad\x09\xd9\x9c\xd7\x95", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x76\x78\xf3\xa8\x33\xf1\x9f\xea\x95\xf3\xc6\x02\x9e\x2b\xc6\x10", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x3a\xa4\x26\x83\x10\x67\xd3\x6b\x92\xbe\x7c\x5f\x81\xc1\x3c\x56", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x92\x72\xe2\xd2\xcd\xd1\x10\x50\x99\x8c\x84\x50\x77\xa3\x0e\xa0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x08\x8c\x4b\x53\xf5\xec\x0f\xf8\x14\xc1\x9a\xda\xe7\xf6\x24\x6c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x40\x10\xa5\xe4\x01\xfd\xf0\xa0\x35\x4d\xdb\xcc\x0d\x01\x2b\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\xa8\x7a\x38\x57\x36\xc0\xa6\x18\x9b\xd6\x58\x9b\xd8\x44\x5a\x93", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x54\x5f\x2b\x83\xd9\x61\x6d\xcc\xf6\x0f\xa9\x83\x0e\x9c\xd2\x87", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x4b\x70\x6f\x7f\x92\x40\x63\x52\x39\x40\x37\xa6\xd4\xf4\x68\x8d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\xb7\x97\x2b\x39\x41\xc4\x4b\x90\xaf\xa7\xb2\x64\xbf\xba\x73\x87", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x6f\x45\x73\x2c\xf1\x08\x81\x54\x6f\x0f\xd2\x38\x96\xd2\xbb\x60", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x2e\x35\x79\xca\x15\xaf\x27\xf6\x4b\x3c\x95\x5a\x5b\xfc\x30\xba", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x34\xa2\xc5\xa9\x1a\xe2\xae\xc9\x9b\x7d\x1b\x5f\xa6\x78\x04\x47", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\xa4\xd6\x61\x6b\xd0\x4f\x87\x33\x5b\x0e\x53\x35\x12\x27\xa9\xee", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x7f\x69\x2b\x03\x94\x58\x67\xd1\x61\x79\xa8\xce\xfc\x83\xea\x3f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x3b\xd1\x41\xee\x84\xa0\xe6\x41\x4a\x26\xe7\xa4\xf2\x81\xf8\xa2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\xd1\x78\x8f\x57\x2d\x98\xb2\xb1\x6e\xc5\xd5\xf3\x92\x2b\x99\xbc", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x08\x33\xff\x6f\x61\xd9\x8a\x57\xb2\x88\xe8\xc3\x58\x6b\x85\xa6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x85\x68\x26\x17\x97\xde\x17\x6b\xf0\xb4\x3b\xec\xc6\x28\x5a\xfb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\xf9\xb0\xfd\xa0\xc4\xa8\x98\xf5\xb9\xe6\xf6\x61\xc4\xce\x4d\x07", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x8a\xde\x89\x59\x13\x68\x5c\x67\xc5\x26\x9f\x8a\xae\x42\x98\x3e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x39\xbd\xe6\x7d\x5c\x8e\xd8\xa8\xb1\xc3\x7e\xb8\xfa\x9f\x5a\xc0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x5c\x00\x5e\x72\xc1\x41\x8c\x44\xf5\x69\xf2\xea\x33\xba\x54\xf3", },
-};
-
-static const struct ECB192_Test
-{
- uint8_t key[24];
- uint8_t pt[16];
- uint8_t ct[16];
-}
-ECB192_Tests[] =
-{
-{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xde\x88\x5d\xc8\x7f\x5a\x92\x59\x40\x82\xd0\x2c\xc1\xe1\xb4\x2c", },
-{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x2b\x07\x4e\x80\xf2\xa5\x97\xbf\x5f\xeb\xd8\xea\x5d\xa5\x5e", },
-{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xcc\xed\xf8\xde\x59\x2c\x22\xfb\x81\x34\x7b\x79\xf2\xdb\x1f", },
-{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\x0b\x09\xf2\x67\xc4\x51\x45\xdb\x2f\x82\x6c\x25\x82\xd3\x5c", },
-{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xd8\x07\xef\x76\x52\xd7\xeb\x0e\x13\xc8\xb5\xe1\x5b\x3b\xc0", },
-{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x78\xbc\xf8\xdd\x8f\xd7\x22\x41\x22\x3a\xd2\x4b\x31\xb8\xa4", },
-{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x10\xf6\x54\x34\x3e\x8f\x27\xe1\x2c\x83\xa4\x8d\x24\xff\x81", },
-{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x83\x3f\x71\x25\x8d\x53\x03\x6b\x02\x95\x2c\x76\xc7\x44\xf5\xa1", },
-{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\xa8\x3f\xf2\x00\xcf\xf9\x31\x8a\x92\xf8\x69\x1a\x06\xb0\x9f", },
-{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x62\x0c\xcb\xe9\xf3\x29\x2a\xbd\xf2\x17\x6b\x09\xf0\x4e\xba", },
-{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\xba\xbc\x4b\x3f\x51\x6c\x9a\xaf\xb3\x5f\x41\x40\xb5\x48\xf9", },
-{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\x18\x78\x24\xd9\xc4\x58\x2b\x09\x16\x49\x3e\xcb\xde\x8c\x57", },
-{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x0a\xd5\x53\x17\x7f\xd5\xea\x10\x92\xc9\xd6\x26\xa2\x9d\xc4", },
-{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\xdc\x46\xc3\x72\x61\x19\x41\x24\xec\xae\xbd\x68\x04\x08\xec", },
-{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe4\xf2\xf2\xae\x23\xe9\xb1\x0b\xac\xfa\x58\x60\x15\x31\xba\x54", },
-{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb7\xd6\x7c\xf1\xa1\xe9\x1e\x8f\xf3\xa5\x7a\x17\x2c\x7b\xf4\x12", },
-{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x70\x6b\xe0\x69\x67\x88\x4e\x84\x7d\x13\x71\x28\xce\x47\xb3", },
-{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb2\xf8\xb4\x09\xb0\x58\x59\x09\xaa\xd3\xa7\xb5\xa2\x19\x07\x2a", },
-{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\x4b\x7b\xff\x02\x90\xc7\x83\x44\xc5\x4a\x23\xb7\x22\xcd\x20", },
-{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x09\x36\x57\x55\x2d\x44\x14\x22\x7c\xe1\x61\xe9\xeb\xf7\xdd", },
-{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe1\xaf\x1e\x7d\x8b\xc2\x25\xed\x4d\xff\xb7\x71\xec\xbb\x9e\x67", },
-{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x65\x55\x25\x36\x35\xd8\x43\x21\x56\xcf\xd9\xc1\x1b\x14\x5a", },
-{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x40\x35\x07\x4a\x5d\x42\x60\xc9\x0c\xbd\x6d\xa6\xc3\xfc\xeb", },
-{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\x6e\xe4\x16\xf9\xad\x1c\x10\x3e\xb0\xcc\x96\x75\x1c\x88\xe1", },
-{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x8a\xe2\xa4\x63\x7a\xc0\xa7\x89\x0a\x8f\xd1\x48\x54\x45\xc9", },
-{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x20\x12\xec\x8f\xad\xed\x08\x25\xfb\x2f\xa7\x0a\xb3\x0c\xbd", },
-{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x8a\x64\xb4\x6b\x5d\x88\xbf\x7f\x24\x7d\x4d\xba\xf3\x8f\x05", },
-{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x68\x25\x37\x62\xe2\xcc\x81\xb4\x2d\x1e\x50\x01\x76\x26\x99", },
-{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x41\xf8\x3b\x38\xce\x50\x32\xc6\xcd\x7a\xf9\x8c\xf6\x20\x61", },
-{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\xa8\x99\x90\xcd\x14\x11\x75\x0d\x5f\xb0\xdc\x98\x84\x47\xd4", },
-{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xac\xcc\x8e\xd6\x29\xed\xf8\xc6\x8a\x53\x91\x83\xb1\xea\x82", },
-{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\x6f\xa7\x1f\x84\x6b\x81\xa1\x3f\x36\x1c\x43\xa8\x51\xf2\x90", },
-{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xad\x6e\xfd\xff\x59\x75\xae\xe7\x69\x22\x34\xbc\xd5\x44\x88", },
-{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\xfd\xb0\x5a\x78\x3d\x03\x08\x2d\xfe\x5f\xdd\x80\xa0\x0b\x17", },
-{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\x81\xb5\x84\x76\x69\x97\xaf\x6b\xa5\x52\x9d\x3b\xdd\x86\x09", },
-{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0c\xf4\xff\x4f\x49\xc8\xa0\xca\x06\x0c\x44\x34\x99\xe2\x93\x13", },
-{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x4b\xa8\xa8\xe0\x29\xf8\xb2\x6d\x8a\xff\xf9\xdf\x13\x3b\xb6", },
-{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\xfe\xbf\x64\x36\x0f\x38\xe4\xe6\x35\x58\xf0\xff\xc5\x50\xc3", },
-{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x12\xad\x98\xcb\xf7\x25\x13\x7d\x6a\x81\x08\xc2\xbe\xd9\x93\x22", },
-{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\xfa\xa9\x96\x22\x61\x98\xb3\xe2\x61\x04\x13\xce\x1b\x3f\x78", },
-{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2a\x8c\xe6\x74\x7a\x7e\x39\x36\x78\x28\xe2\x90\x84\x85\x02\xd9", },
-{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x37\x36\xe8\xb8\xf8\x9c\xa1\xe3\x7b\x6d\xea\xb4\x0f\xac\xf1", },
-{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\xf7\x97\xe5\x04\x18\xb9\x5f\xa6\x01\x33\x33\x91\x7a\x94\x80", },
-{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x58\xde\x37\xc2\xec\xe2\xa0\x2c\x73\xc0\x1f\xed\xc9\xa1\x32", },
-{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x9b\x87\xae\x77\xba\xe7\x06\x80\x39\x66\xc6\x6c\x73\xad\xbd", },
-{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\x65\xab\x8d\xf8\xff\xd7\x82\xe3\x58\x12\x1a\x4a\x4f\xc5\x41", },
-{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc8\xdc\xd9\xe6\xf7\x5e\x6c\x36\xc8\xda\xee\x04\x66\xf0\xed\x74", },
-{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc7\x9a\x63\x7b\xeb\x1c\x03\x04\xf1\x40\x14\xc0\x37\xe7\x36\xdd", },
-{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\x5f\x0a\x25\xe8\x4a\xc9\x30\xd9\x96\x28\x1a\x5f\x95\x4d\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xe4\x07\x4b\x29\x27\x97\x3e\x8d\x17\xff\xa9\x2f\x7f\xe6\x15", },
-{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xe2\xa9\xd2\xc1\x82\x44\x49\xc6\x9e\x3e\x03\x98\xf1\x29\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb7\xf2\x9c\x1e\x1f\x62\x84\x7a\x15\x25\x3b\x28\xa1\xe9\xd7\x12", },
-{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xed\x5d\x29\xb9\x03\xf3\x1e\x89\x83\xef\x8b\x0a\x2b\xf9\x90", },
-{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xb8\x07\x02\x70\x81\x0f\x9d\x02\x3f\x9d\xd7\xff\x3b\x4a\xa2", },
-{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\xd4\x6e\x15\x5c\x12\x28\xf6\x1d\x1a\x0d\xb4\x81\x5e\xcc\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x61\x08\xd1\xd9\x80\x71\x42\x8e\xec\xee\xf1\x71\x4b\x96\xdd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x5b\x25\xb7\x1b\x62\x96\xcf\x73\xdd\x2c\xdc\xac\x2f\x70\xb1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xab\xa9\x5e\x8a\x06\xa2\xd9\xd3\x53\x0d\x26\x77\x87\x8c\x80", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\x70\xd2\x0e\x89\xb4\x67\xe8\xf5\x17\x60\x61\xb8\x1d\xd3\x96", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x8f\x44\x67\xa5\xd8\xf1\xe7\x30\x7d\xc3\x0b\x34\xe4\x04\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbc\xea\x28\xe9\x07\x1b\x5a\x23\x02\x97\x0f\xf3\x52\x45\x1b\xc5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x23\xc0\x0b\xc1\x77\xd3\x31\xad\x31\x2e\x09\xc9\x01\x5c\x1c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\xac\x61\xe3\x18\x37\x47\xb3\xf5\x83\x6d\xa2\x1a\x1b\xc4\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x7b\x07\x57\x91\x87\x88\x80\xb4\x41\x89\xd3\x52\x2b\x8c\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x71\x32\xd0\xc0\xe4\xa0\x75\x93\xcf\x12\xeb\xb1\x2b\xe7\x68\x8c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\xfb\xac\x16\x44\xde\xb0\xc7\x84\x27\x5f\xe5\x6e\x19\xea\xd3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x05\x06\x3f\x30\xf4\x22\x8b\x37\x4e\x24\x59\x73\x8f\x26\xbb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x97\x5b\x5f\x48\xbb\x68\xfc\xbb\xc7\xce\xa9\x3b\x45\x2e\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x3f\x25\x76\xe2\xaf\xed\xc7\x4b\xb1\xca\x7e\xee\xc1\xc0\xe7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\xc4\x03\xf5\xf9\x66\xe0\xe3\xd9\xf2\x96\xd6\x22\x6d\xca\x28", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc8\xc2\x09\x08\x24\x9a\xb4\xa3\x4d\x6d\xd0\xa3\x13\x27\xff\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x54\x13\x29\xec\xb6\x15\x9a\xb2\x3b\x7f\xc5\xe6\xa2\x1b\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\xa1\xac\xf1\xa2\xed\x9b\xa7\x2b\xc6\xde\xb3\x1d\x88\xb8\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x8b\xd8\xed\xda\xbb\x6f\x3b\xf0\xd5\xa8\xa2\x7b\xe1\xfe\x8a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x3c\x7d\x76\x85\xe1\x4e\xc6\x6b\xbb\x96\xb8\xf0\x5b\x6d\xdd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\x75\x2e\xef\xc8\xc2\xa9\x3f\x91\xb6\xe7\x3e\xb0\x7c\xca\x6e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x93\xe7\xd6\x2f\x6c\xe5\x02\xc6\x4f\x75\xe2\x81\xf9\xc0\x00", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\xfd\x99\x9b\xe5\xd0\xcf\xa3\x57\x32\xc0\xdd\xc8\x8f\xf5\xa5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\x64\x7c\x76\xa3\x00\xc3\x17\x3b\x84\x14\x87\xeb\x2b\xae\x9f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x17\x2d\xf8\xb0\x2f\x04\xb5\x3a\xda\xb0\x28\xb4\xe0\x1a\xcd\x87", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\x4b\x3b\xf4\x99\x8a\xeb\x05\xaf\xd8\x7e\xc5\x36\x53\x3a\x36", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\x83\xf7\xbf\x44\xc9\x7f\x06\x52\x58\xa6\x66\xca\xe0\x30\x20", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xd4\xc8\xa6\x3f\x80\x95\x41\x04\xde\x7b\x92\xce\xde\x1b\xe1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\xfe\x61\x81\x0f\xd5\x46\x7c\xcd\xac\xb7\x58\x00\xf3\xac\x07", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x83\x0d\x8a\x25\x90\xf7\xd8\xe1\xb5\x5a\x73\x7f\x4a\xf4\x5f\x34", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\xd4\x68\x3f\x85\x80\x58\xe7\x43\x14\x67\x1d\x43\xfa\x2c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x52\x3d\x0b\xab\xbb\x82\xf4\x6e\xbc\x9e\x70\xb1\xcd\x41\xdd\xd0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x34\x4a\xab\x37\x08\x0d\x74\x86\xf7\xd5\x42\xa3\x09\xe5\x3e\xed", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\xc5\x60\x9d\x09\x06\xb2\x3a\xb9\xca\xca\x81\x6f\x5d\xbe\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x26\x02\x6e\xed\xd9\x1a\xdc\x6d\x83\x1c\xdf\x98\x94\xbd\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x88\x33\x0b\xaa\x4f\x2b\x61\x8f\xc9\xd9\xb0\x21\xbf\x50\x3d\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x9e\x0e\xa2\x24\x80\xb0\xba\xc9\x35\xc8\xa8\xeb\xef\xcd\xcf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\xca\x77\x9f\x39\x8f\xb0\x4f\x86\x7d\xa7\xe8\xa4\x47\x56\xcb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\xf8\x9c\x42\x98\x57\x86\xbf\xc4\x3c\x6d\xf8\xad\xa3\x68\x32", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\xc1\xde\x5f\xb8\xf2\x1d\x87\x4e\x91\xc5\x3b\x56\x0c\x50\xe3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\xaa\x90\x58\x49\x0e\xda\x30\x60\x01\xa8\xa9\xf4\x8d\x0c\xa7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x4e\xc7\x1d\x61\x28\xd4\x87\x18\x65\xd6\x17\xc3\x0b\x37\xe3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x14\xbe\x1c\x53\x5b\x17\xca\xbd\x0c\x4d\x93\x52\x9d\x69\xbf\x47", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xef\x67\x75\x65\x07\xbe\xec\x9d\xd3\x86\x28\x83\x47\x80\x44", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\xe2\x31\xfa\x5a\x59\x48\xce\x21\x34\xe9\x2f\xc0\x66\x4d\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x19\x4b\x8e\x5d\xda\x55\x30\xd0\xc6\x78\xc0\xb4\x8f\x5d\x92", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\xbd\x08\x6f\x23\x7c\xc4\xfd\x99\xf4\xd7\x6b\xde\x6b\x48\x26", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x25\x97\x61\xca\x17\x13\x0d\x6e\xd8\x6d\x57\xcd\x79\x51\xee", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd7\xcb\xb3\xf3\x4b\x9b\x45\x0f\x24\xb0\xe8\x51\x8e\x54\xda\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\x5b\x9c\xae\xbe\x9f\x7f\x41\x7f\x40\x68\xd0\xd2\xee\x20\xb3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9d\x92\x4b\x93\x4a\x90\xce\x1f\xd3\x9b\x8a\x97\x94\xf8\x26\x72", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc5\x05\x62\xbf\x09\x45\x26\xa9\x1c\x5b\xc6\x3c\x0c\x22\x49\x95", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xf1\x18\x05\x04\x67\x43\xbd\x74\xf5\x71\x88\xd9\x18\x8d\xf7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\xd2\x74\xbd\x0f\x1b\x58\xae\x34\x5d\x9e\x72\x33\xf9\xb8\xf3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9d\x6b\xdc\x8f\x4c\xe5\xfe\xb0\xf3\xbe\xd2\xe4\xb9\xa9\xbb\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\x55\x48\xbc\xf3\xf4\x25\x65\xf7\xef\xa9\x45\x62\x52\x8d\x46", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xcc\xae\xbd\x3a\x4c\x3e\x80\xb0\x63\x74\x81\x31\xba\x4a\x71", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x3c\xb2\x3d\x9e\x11\xc9\xd9\x3f\x11\x7e\x9c\x0a\x91\xb5\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\xf9\x33\xa2\x08\x1a\xc1\xdb\x84\xf6\x9d\x10\xf4\x52\x3f\xe0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x61\xf7\x41\x2e\xd3\x20\xde\x0e\xdc\x88\x51\xc2\xe2\x43\x6f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\x64\xba\x1c\xd0\x4c\xe6\xba\xb9\x84\x74\x33\x08\x14\xb4\xd4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\x39\x1b\xff\xb9\xcf\xff\x80\xac\x23\x8c\x88\x6e\xf0\xa4\x61", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\xd2\xa6\x7d\xf5\xa9\x99\xfd\xbf\x93\xed\xd0\x34\x32\x96\xc9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xca\x73\x67\x39\x6b\x69\xa2\x21\xbd\x63\x2b\xea\x38\x6e\xec", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x0f\xd5\x02\x0d\xfe\x65\xf5\xf1\x62\x93\xec\x92\xc6\xfd\x89", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x21\x62\x99\x5b\x82\x17\xa6\x7f\x1a\xbc\x34\x2e\x14\x64\x06\xf8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\xa6\x16\x4b\x7a\x60\xba\xe4\xe9\x86\xff\xac\x28\xdf\xad\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x64\xe0\xd7\xf9\x00\xe3\xd9\xc8\x3e\x4b\x8f\x96\x71\x7b\x21\x46", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\xd2\x56\x1d\xe8\xc1\x23\x2f\x5d\x8d\xba\xb4\x73\x9b\x6c\xbb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x96\x89\xe9\xa5\x57\xf5\x8b\x1c\x3b\xf4\x0c\x97\xa9\x09\x64", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x63\x7e\x4a\x5e\x63\x77\xf9\xcc\x5a\x86\x38\x04\x5d\xe0\x29", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x2e\x60\x7e\x5a\xea\x46\x88\x59\x4b\x45\xf3\xae\xe3\xdf\x90", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\xc4\xe4\x38\x1f\xee\xc7\x40\x54\x95\x4c\x05\xb7\x77\xa0\x0a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x91\x54\x95\x14\x60\x5f\x38\x24\x6c\x9b\x72\x4a\xd8\x39\xf0\x1d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x74\xb2\x4e\x3b\x6f\xef\xe4\x0a\x4f\x9e\xf7\xac\x6e\x44\xd7\x6a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x37\xa6\x83\xdc\x5d\x4b\x52\xab\xb4\xa1\x23\xa8\xdf\x86\xc6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbb\x28\x52\xc8\x91\xc5\x94\x7d\x2e\xd4\x40\x32\xc4\x21\xb8\x5f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x9f\x5f\xbd\x5e\x8a\x42\x64\xc0\xa8\x5b\x80\x40\x9a\xfa\x5e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\xda\xb8\x09\xf8\x5a\x91\x7f\xe9\x24\x73\x3f\x42\x4a\xc5\x89", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xef\x5c\x1f\x8d\x60\x51\x92\x64\x66\x95\xce\xad\xc6\x5f\x32", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\xaa\x90\x04\x0b\x4c\x15\xa1\x23\x16\xb7\x8e\x0f\x95\x86\xfc", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xfa\xc8\x29\x7c\xea\xab\xc8\x7d\x45\x43\x50\x60\x1e\x06\x73", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x47\xef\x56\x7a\xc2\x8d\xfe\x48\x84\x92\xf1\x57\xe2\xb2\xe0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x84\x26\x02\x7d\xdb\x96\x2b\x5c\x5b\xa7\xeb\x8b\xc9\xab\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\x17\xfc\x77\xe7\x19\x92\xa1\x2d\xbe\x4c\x18\x06\x8b\xec\x82", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xee\xbb\xc9\x88\x40\xf8\xae\x6d\xaf\x76\x57\x3b\x7e\x56\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4e\x11\xa9\xf7\x42\x05\x12\x5b\x61\xe0\xae\xe0\x47\xec\xa2\x0d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf6\x04\x67\xf5\x5a\x1f\x17\xea\xb8\x8e\x80\x01\x20\xcb\xc2\x84", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x36\x64\x9f\x60\x0b\x44\x9e\xe2\x76\x53\x0f\x0c\xd8\x3c\x11", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\xc0\xe3\x65\x6a\x9e\x3a\xc7\xcd\x37\x8a\x73\x7f\x53\xb6\x37", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6b\xac\xae\x63\xd3\x3b\x92\x8a\xa8\x38\x0f\x8d\x54\xd8\x8c\x17", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x89\x35\xff\xbc\x75\xae\x62\x51\xbf\x8e\x85\x9f\x08\x5a\xdc\xb9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xdc\x49\x70\xfe\x35\xf6\x77\x47\xcb\x05\x62\xc0\x6d\x87\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x14\xf9\xdf\x85\x89\x75\x85\x17\x97\xba\x60\x4f\xb0\xd1\x6c\xc7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xea\x0c\x98\xdc\xa1\x0b\x38\xc2\x1b\x3b\x14\xe8\xd1\xb7\x1f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\x09\x1b\x1b\x5b\x07\x49\xb2\xad\xc8\x03\xe6\x3d\xda\x9b\x72", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\xb3\x89\xe3\x32\x2c\x6d\xa0\x83\x84\x34\x5a\x41\x37\xfd\x08", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x38\x13\x08\xc4\x38\xf3\x5b\x39\x9f\x10\xad\x71\xb0\x50\x27\xd8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\xc2\x30\xfc\xfa\x92\x79\xc3\x40\x9f\xc4\x23\xe2\xac\xbe\x04", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x84\xa4\x75\xac\xb0\x11\xf3\xf5\x9f\x4f\x46\xb7\x62\x74\xc0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\x11\x9b\x68\xcb\x3f\x83\x99\xee\x60\x06\x6b\x56\x11\xa4\xd7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\x23\x76\x2f\x52\x7a\x40\x60\xff\xca\x31\x2d\xcc\xa2\x2a\x16", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x61\xa2\x74\x5a\x33\xf0\x56\xa5\xac\x6a\xce\x2f\x08\xe3\x44", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\xf1\x45\x76\x6e\xca\x84\x9f\x5d\x01\x15\x36\xa6\x55\x7f\xdb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xaf\x27\xb2\xc8\x9c\x9b\x4c\xf4\xa0\xc4\x10\x6a\xc8\x03\x18", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x9c\x4f\x16\xc6\x21\xf4\xea\xb7\xe9\xac\x1d\x75\x51\xdd\x57", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x8e\x06\xfb\xa4\x66\xfa\x70\x85\x4d\x8c\x2e\x52\x4c\xff\xb2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x4b\xc7\x8b\x22\x50\x70\x77\x3f\x04\xc4\x04\x66\xd4\xe9\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x2c\xbf\xf1\xed\x01\x50\xfe\xda\x8a\x47\x99\xbe\x94\x55\x1f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x08\xb3\x0d\x7b\x3f\x27\x96\x27\x09\xa3\x6b\xca\xdf\xb9\x74\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xf6\xd3\x2e\x04\x4d\x77\xad\xcf\x37\xfb\x97\xac\x21\x33\x26", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xcb\x28\x4e\xcd\xcf\xd7\x81\xa8\xaf\xe3\x20\x77\x94\x9e\x88", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x01\x7b\xb0\x2e\xc8\x7b\x2b\x94\xc9\x6e\x40\xa2\x6f\xc7\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc5\xc0\x38\xb6\x99\x06\x64\xab\x08\xa3\xaa\xa5\xdf\x9f\x32\x66", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\x70\x20\xbe\x37\xfa\xb6\x25\x9b\x2a\x27\xf4\xec\x55\x15\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\x13\x67\x03\x37\x4f\x64\xe8\x60\xb4\x8c\xe3\x1f\x93\x07\x16", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x63\xa2\x69\xb1\x4d\x50\x6c\xcc\x40\x1a\xb8\xa9\xf1\xb5\x91", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\x17\xf8\x1d\xc6\xaa\x45\x4a\xee\x4b\xd4\xa5\xa5\xcf\xf4\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xde\xce\xcd\x53\x54\xf0\x4d\x53\x0d\x76\xed\x88\x42\x46\xeb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xc5\x20\x5c\xc8\xfd\x8e\xda\x9a\x3c\xff\xd2\x51\x8f\x36\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x42\xfb\x47\x42\x93\xd9\x6e\xca\x9d\xb1\xb3\x7b\x1b\xa6\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa2\x31\x69\x26\x07\x16\x9b\x4e\xcd\xea\xd5\xcd\x3b\x10\xdb\x3e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\xe4\xb9\x1c\x9c\x66\x9e\x77\xe7\xac\xac\xd1\x98\x59\xed\x49", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\xdb\x7c\xfd\x4a\x7b\x2b\x62\xab\x78\xa4\x8f\x3d\xda\xf4\xaf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\xfa\xba\x2d\x46\xe2\x59\xcf\x48\x0d\x7c\x38\xe4\x57\x2a\x58", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x1c\x45\xbc\x6a\xe1\x6d\xee\x6e\xb7\xbe\xa1\x28\x70\x15\x82", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\xd0\x30\x57\xcf\x13\x64\x42\x0c\x2b\x78\x06\x9a\x3e\x25\x02", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xb5\x05\xe6\xcc\x13\x84\xcb\xae\xc1\xdf\x90\xb8\x0b\xeb\x20", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x74\xa3\xbe\xd2\x7b\xf4\xbd\x36\x22\xf9\xf5\xfe\x20\x83\x06", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x87\xf2\x6a\x89\xcf\xbf\xbb\x8e\x5e\xea\xc5\x40\x55\x31\x5e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\x47\xdd\x32\xd3\xb2\x9a\xb6\xa4\xca\xeb\x60\x6c\x5b\x6f\x78", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\x68\x61\xf8\xbc\x53\x86\xd3\x1f\xb7\x7f\x72\x0c\x32\x26\xe6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xcf\x1e\x6c\x42\x24\xef\xb3\x89\x00\xb1\x85\xab\x1d\xfd\x42", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x41\xaa\xb0\x5a\x42\xd3\x19\xde\x81\xd8\x74\xf5\xc7\xb9\x0d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\xb9\xbc\x75\x9e\x2a\xd8\xd2\x14\x0a\x6c\x76\x2a\xe9\xe1\xab", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\x85\x96\xe1\x5e\x78\xe2\xc0\x64\x15\x9d\xef\xce\x5f\x30\x85", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\xd0\x25\x13\xe8\xd4\xdc\x98\x6b\x4a\xfe\x08\x7a\x60\xbd\x0c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xe1\xf8\xb7\xe3\x06\x27\xc1\xc4\x51\x9e\xad\xa4\x4b\xc4\x36", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x46\xb5\xf8\x7a\xf4\x46\xf5\x79\x6c\x1f\xee\x63\xa2\xda\x24", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2a\x56\x03\x64\xce\x52\x9e\xfc\x21\x78\x87\x79\x56\x8d\x55\x55", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xc1\x47\x18\x37\xaf\x44\x61\x53\xbc\xe5\x5d\x5b\xa7\x2a\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xce\x60\xbc\x52\x38\x62\x34\xf1\x58\xf8\x43\x41\xe5\x34\xcd\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8c\x7c\x27\xff\x32\xbc\xf8\xdc\x2d\xc5\x7c\x90\xc2\x90\x39\x61", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\xbb\x6a\x7e\xc8\x44\x99\xe1\x66\xf9\x36\x00\x3d\x55\xa5\xbb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\xc7\x72\xe5\xc6\x26\x31\xef\x66\x0e\xe1\xd5\x87\x7f\x6d\x1b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x0d\x7e\x5b\x64\xf3\x80\xa7\xe4\xea\x53\x87\xb5\xcd\x7f\x49", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xc9\xa2\x61\x00\x37\x00\x9b\x69\x8f\x11\xbb\x7e\x86\xc8\x3e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x46\x61\x2c\x76\x6d\x18\x40\xc2\x26\x36\x4f\x1f\xa7\xed\x72", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\x80\xc7\xe0\x8f\x27\xbe\xfe\x78\x59\x07\x43\xc0\x5e\x69\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x25\x20\xce\x82\x9a\x26\x57\x7f\x0f\x48\x22\xc4\xec\xc8\x74\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\x65\xe8\xac\xc1\x69\x75\x83\x19\xcb\x46\xdc\x7b\xcf\x3d\xca", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\x8f\x4b\xa4\xf0\x73\xdf\x4b\xaa\x11\x6d\x01\x1d\xc2\x4a\x28", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x78\xf6\x8c\x5d\xbf\x59\xe2\x11\xb3\xa6\x59\xa7\x31\x7d\x94", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x28\x3d\x3b\x06\x9d\x8e\xb9\xfb\x43\x2d\x74\xb9\x6c\xa7\x62\xb4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\xe1\x84\x2e\x8a\x87\x86\x1c\x22\x1a\x50\x08\x83\x24\x5c\x51", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xaa\x27\x04\x71\x88\x1b\xe0\x70\xfb\x52\xc7\x06\x7c\xe7\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\xb0\xf4\x76\xd4\x84\xf4\x3f\x1a\xeb\x6e\xfa\x93\x61\xa8\xac", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x3a\x94\xf1\xc0\x52\xc5\x5c\x2d\x83\x59\xaf\xf2\x16\x3b\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\xa0\x67\xb6\x04\xd5\x37\x3d\x8b\x0f\x2e\x05\xa0\x3b\x34\x1b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x87\x6e\xc8\x7f\x5a\x09\xbf\xea\x42\xc7\x7d\xa3\x0f\xd5\x0e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0c\xf3\xe9\xd3\xa4\x2b\xe5\xb8\x54\xca\x65\xb1\x3f\x35\xf4\x8d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x62\xf6\xbb\xca\xb7\xc3\xe8\x21\xc9\x29\x0f\x08\x89\x2d\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7f\x5e\x05\xbd\x20\x68\x73\x81\x96\xfe\xe7\x9a\xce\x7e\x3a\xec", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\x0e\x0d\x73\x32\x55\xcd\xa9\x2f\xb4\x6e\x84\x2f\xe5\x80\x54", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\x5d\x5b\x1c\x4e\xa1\xb7\xa2\x2e\x55\x83\xac\x2e\x9e\xd8\xa7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xe5\x37\xe8\x9e\x84\x91\xe8\x66\x2a\xae\x3b\xc8\x09\x42\x1d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x7d\xd3\xe9\xf1\x59\x8b\xfa\x73\xf7\x59\x73\xf7\xe9\x3b\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x38\xd4\xf7\x45\x2a\xfe\xfc\xb7\xfc\x72\x12\x44\xe4\xb7\x2e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0b\xe2\xb1\x82\x52\xe7\x74\xdd\xa3\x0c\xdd\xa0\x2c\x69\x06\xe3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x69\x5e\x59\xc2\x03\x61\xd8\x26\x52\xd7\xd5\x8b\x6f\x11\xb2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\x2d\x88\xd1\x3e\xae\x52\x08\x9a\xbd\x61\x43\xcf\xe3\x94\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x9b\xce\xb3\xb8\x23\xfe\xdd\x60\x2c\x30\x53\x45\x73\x4b\xd2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x7b\x1d\xbb\x0f\xfa\x40\xef\x7d\x95\xde\xf4\x21\x23\x3f\xae", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\xa0\xc1\xd9\x33\x56\xd9\xeb\x8a\xa9\x52\x08\x4d\x75\xf9\x13", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xcb\xf9\xcb\x18\x6e\x27\x0d\xd7\xbd\xb0\xc2\x8f\xeb\xc5\x7d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\x43\x37\xc3\x7c\x4e\x79\x0a\xb4\x57\x80\xbd\x9c\x36\x74\xa0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\x35\x58\xc1\x35\x25\x2f\xb9\xc9\xf3\x67\xed\x60\x94\x67\xa1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x72\xee\xae\xe4\x89\x9b\x44\x39\x14\xe5\xb3\xa5\x7f\xba\x92", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\x18\x65\xf9\x1b\xc5\x68\x68\xd0\x51\xe5\x2c\x9e\xfd\x59\xb7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe4\x77\x13\x18\xad\x7a\x63\xdd\x68\x0f\x6e\x58\x3b\x77\x47\xea", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\xe3\xd1\x94\x08\x8d\xc8\xd9\x7e\x9e\x6d\xb3\x74\x57\xea\xc5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xff\x1e\xc9\xcc\xfb\xc3\x49\xe5\xd3\x56\xd0\x63\x69\x3a\xd6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3c\xc9\xe9\xa9\xbe\x8c\xc3\xf6\xfb\x2e\xa2\x40\x88\xe9\xbb\x19", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xe5\xab\x00\x3d\xc8\x72\x2e\x74\x90\x5d\x9a\x8f\xe3\xd3\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x53\x39\x31\x95\x84\xb0\xa4\x12\x41\x28\x69\xd6\xc2\xea\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\xd4\x96\x91\x81\x15\xd1\x4e\xd5\x38\x08\x52\x71\x6c\x88\x14", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x3a\xb2\xf2\xb4\xa3\x66\xa5\x7d\x58\x2a\x33\x93\x13\xc8\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x33\x65\xa9\xff\xbe\x3b\x0c\xa6\x1e\x98\x50\x75\x54\x16\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaf\xa9\x9c\x99\x7a\xc4\x78\xa0\xde\xa4\x11\x9c\x9e\x45\xf8\xb1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x92\x16\x30\x9a\x78\x42\x43\x0b\x83\xff\xb9\x86\x38\x01\x15\x12", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\xab\xc7\x92\x28\x82\x58\x49\x2a\x7c\xb4\x51\x45\xf4\xb7\x59", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x49\x23\xc1\x69\xd5\x04\xd7\x51\x9c\x15\xd3\x0e\x75\x6c\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\xfa\x75\xe0\x5b\xcd\xc7\xe0\x0c\x27\x3f\xa3\x3f\x6e\xe4\x41\xd2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\x35\x0f\xa6\x05\x70\x80\xf1\x08\x6a\x56\xb1\x7e\xc2\x40\xdb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x4e\x4a\x63\x24\xea\x4a\x5c\x39\xa6\x61\xc8\xfe\x5a\xda\x8f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x08\x82\xa1\x6f\x44\x08\x8d\x42\x44\x7a\x29\xac\x09\x0e\xc1\x7e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x3c\x15\xbf\xc1\x1a\x95\x37\xc1\x30\x68\x70\x04\xe1\x36\xee", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\xc0\xa7\x67\x8d\xc6\xd8\xcf\x5c\x8a\x6d\x5a\x99\x60\x76\x7c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\x6b\x09\x80\x9d\x68\xb9\xa4\x56\x43\x2a\x79\xbd\xc2\xe3\x8c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xba\xaf\xfb\x35\xfb\xe7\x39\xc1\x7c\x6a\xc2\x2e\xec\xf1\x8f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\xc8\xaa\x80\xa7\x85\x06\x75\xbc\x00\x7c\x46\xdf\x06\xb4\x98\x68", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x12\xc6\xf3\x87\x7a\xf4\x21\xa9\x18\xa8\x4b\x77\x58\x58\x02\x1d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x33\xf1\x23\x28\x2c\x5d\x63\x39\x24\xf7\xd5\xba\x3f\x3c\xab\x11", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\xa8\xf1\x61\x00\x27\x33\xe9\x3c\xa4\x52\x7d\x22\xc1\xa0\xc5\xbb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\xb7\x2f\x70\xeb\xf3\xe3\xfd\xa2\x3f\x50\x8e\xec\x76\xb4\x2c\x02", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x6a\x9d\x96\x5e\x62\x74\x14\x3f\x25\xaf\xdc\xfc\x88\xff\xd7\x7c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\xa0\xc7\x4f\xd0\xb9\x36\x17\x64\xce\x91\xc5\x20\x0b\x09\x53\x57", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x09\x1d\x1f\xdc\x2b\xd2\xc3\x46\xcd\x50\x46\xa8\xc6\x20\x91\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\xe2\xa3\x75\x80\x11\x6c\xfb\x71\x85\x62\x54\x49\x6a\xb0\xac\xa8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\xe0\xb3\xa0\x07\x85\x91\x7c\x7e\xfc\x9a\xdb\xa3\x22\x81\x35\x71", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x73\x3d\x41\xf4\x72\x7b\x5e\xf0\xdf\x4a\xf4\xcf\x3c\xff\xa0\xcb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\xa9\x9e\xbb\x03\x02\x60\x82\x6f\x98\x1a\xd3\xe6\x44\x90\xaa\x4f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x73\xf3\x4c\x7d\x3e\xae\x5e\x80\x08\x2c\x16\x47\x52\x43\x08\xee", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x40\xeb\xd5\xad\x08\x23\x45\xb7\xa2\x09\x7c\xcd\x34\x64\xda\x02", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x7c\xc4\xae\x9a\x42\x4b\x2c\xec\x90\xc9\x71\x53\xc2\x45\x7e\xc5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x54\xd6\x32\xd0\x3a\xba\x0b\xd0\xf9\x18\x77\xeb\xdd\x4d\x09\xcb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\xd3\x42\x7b\xe7\xe4\xd2\x7c\xd5\x4f\x5f\xe3\x7b\x03\xcf\x08\x97", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\xb2\x09\x97\x95\xe8\x8c\xc1\x58\xfd\x75\xea\x13\x3d\x7e\x7f\xbe", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\xa6\xca\xe4\x6f\xb6\xfa\xdf\xe7\xa2\xc3\x02\xa3\x42\x42\x81\x7b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x02\x6a\x70\x24\xd6\xa9\x02\xe0\xb3\xff\xcc\xba\xa9\x10\xcc\x3f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x15\x6f\x07\x76\x7a\x85\xa4\x31\x23\x21\xf6\x39\x68\x33\x8a\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x15\xee\xc9\xeb\xf4\x2b\x9c\xa7\x68\x97\xd2\xcd\x6c\x5a\x12\xe2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\xdb\x0d\x3a\x6f\xdc\xc1\x3f\x91\x5e\x2b\x30\x2c\xee\xb7\x0f\xd8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x71\xdb\xf3\x7e\x87\xa2\xe3\x4d\x15\xb2\x0e\x8f\x10\xe4\x89\x24", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\xc7\x45\xc4\x51\xe9\x6f\xf3\xc0\x45\xe4\x36\x7c\x83\x3e\x3b\x54", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x34\x0d\xa0\x9c\x2d\xd1\x1c\x3b\x67\x9d\x08\xcc\xd2\x7d\xd5\x95", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x82\x79\xf7\xc0\xc2\xa0\x3e\xe6\x60\xc6\xd3\x92\xdb\x02\x5d\x18", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\xa4\xb2\xc7\xd8\xeb\xa5\x31\xff\x47\xc5\x04\x1a\x55\xfb\xd1\xec", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x74\x56\x9a\x2c\xa5\xa7\xbd\x51\x31\xce\x8d\xc7\xcb\xfb\xf7\x2f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x37\x13\xda\x0c\x02\x19\xb6\x34\x54\x03\x56\x13\xb5\xa4\x03\xdd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x88\x27\x55\x1d\xdc\xc9\xdf\x23\xfa\x72\xa3\xde\x4e\x9f\x0b\x07", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x2e\x3f\xeb\xfd\x62\x5b\xfc\xd0\xa2\xc0\x6e\xb4\x60\xda\x17\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\xee\x82\xe6\xba\x48\x81\x56\xf7\x64\x96\x31\x1d\xa6\x94\x1d\xeb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x47\x70\x44\x6f\x01\xd1\xf3\x91\x25\x6e\x85\xa1\xb3\x0d\x89\xd3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\xaf\x04\xb6\x8f\x10\x4f\x21\xef\x2a\xfb\x47\x67\xcf\x74\x14\x3c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xcf\x35\x79\xa9\xba\x38\xc8\xe4\x36\x53\x17\x3e\x14\xf3\xa4\xc6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\xb3\xbb\xa9\x04\xf4\x95\x3e\x09\xb5\x48\x00\xaf\x2f\x62\xe7\xd4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\xfc\x42\x49\x65\x6e\x14\xb2\x9e\xb9\xc4\x48\x29\xb4\xc5\x9a\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x9b\x31\x56\x8f\xeb\xe8\x1c\xfc\x2e\x65\xaf\x1c\x86\xd1\xa3\x08", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x9c\xa0\x9c\x25\xf2\x73\xa7\x66\xdb\x98\xa4\x80\xce\x8d\xfe\xdc", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\xb9\x09\x92\x57\x86\xf3\x4c\x3c\x92\xd9\x71\x88\x3c\x9f\xbe\xdf", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x82\x64\x7f\x13\x32\xfe\x57\x0a\x9d\x4d\x92\xb2\xee\x77\x1d\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x36\x04\xa7\xe8\x08\x32\xb3\xa9\x99\x54\xbc\xa6\xf5\xb9\xf5\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x88\x46\x07\xb1\x28\xc5\xde\x3a\xb3\x9a\x52\x9a\x1e\xf5\x1b\xef", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x67\x0c\xfa\x09\x3d\x1d\xbd\xb2\x31\x70\x41\x40\x41\x02\x43\x5e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x7a\x86\x71\x95\xf3\xce\x87\x69\xcb\xd3\x36\x50\x2f\xbb\x51\x30", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x52\xef\xcf\x64\xc7\x2b\x2f\x7c\xa5\xb3\xc8\x36\xb1\x07\x8c\x15", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x40\x19\x25\x0f\x6e\xef\xb2\xac\x5c\xcb\xca\xe0\x44\xe7\x5c\x7e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x02\x2c\x4f\x6f\x5a\x01\x7d\x29\x27\x85\x62\x76\x67\xdd\xef\x24", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\xe9\xc2\x10\x78\xa2\xeb\x7e\x03\x25\x0f\x71\x00\x0f\xa9\xe3\xed", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\xa1\x3e\xae\xeb\x9c\xd3\x91\xda\x4e\x2b\x09\x49\x0b\x3e\x7f\xad", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\xc9\x58\xa1\x71\xdc\xa1\xd4\xed\x53\xe1\xaf\x1d\x38\x08\x03\xa9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x21\x44\x2e\x07\xa1\x10\x66\x7f\x25\x83\xea\xee\xee\x44\xdc\x8c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x59\xbb\xb3\x53\xcf\x1d\xd8\x67\xa6\xe3\x37\x37\xaf\x65\x5e\x99", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x43\xcd\x3b\x25\x37\x5d\x0c\xe4\x10\x87\xff\x9f\xe2\x82\x96\x39", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x6b\x98\xb1\x7e\x80\xd1\x11\x8e\x35\x16\xbd\x76\x8b\x28\x5a\x84", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\xae\x47\xed\x36\x76\xca\x0c\x08\xde\xea\x02\xd9\x5b\x81\xdb\x58", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x34\xec\x40\xdc\x20\x41\x37\x95\xed\x53\x62\x8e\xa7\x48\x72\x0b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x4d\xc6\x81\x63\xf8\xe9\x83\x54\x73\x25\x35\x42\xc8\xa6\x5d\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x2a\xab\xb9\x99\xf4\x36\x93\x17\x5a\xf6\x5c\x6c\x61\x2c\x46\xfb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\xe0\x1f\x94\x49\x9d\xac\x35\x47\x51\x5c\x5b\x1d\x75\x6f\x0f\x58", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x9d\x12\x43\x5a\x46\x48\x0c\xe0\x0e\xa3\x49\xf7\x17\x99\xdf\x9a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\xce\xf4\x1d\x16\xd2\x66\xbd\xfe\x46\x93\x8a\xd7\x88\x4c\xc0\xcf", },
-};
-
-static const struct ECB256_Test
-{
- uint8_t key[32];
- uint8_t pt[16];
- uint8_t ct[16];
-}
-ECB256_Tests[] =
-{
-{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x5a\x6d\xcb\x19\xb2\x01\xa0\x1e\xbc\xfa\x8a\xa2\x2b\x57\x59", },
-{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb2\x91\x69\xcd\xcf\x2d\x83\xe8\x38\x12\x5a\x12\xee\x6a\xa4\x00", },
-{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xf3\xa7\x2f\xc3\xcd\xf7\x4d\xfa\xf6\xc3\xe6\xb9\x7b\x2f\xa6", },
-{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x77\x76\x79\xd5\x00\x37\xc7\x94\x91\xa9\x4d\xa7\x6a\x9a\x35", },
-{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\xf4\x89\x3e\xca\xfa\x0a\x02\x47\xa8\x98\xe0\x40\x69\x15\x59", },
-{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\xbb\x41\x37\x03\x73\x53\x26\x31\x0a\x26\x9b\xd3\xaa\x94\xb2", },
-{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\xe3\x22\x46\xbe\xd2\xb0\xe8\x59\xe5\x5c\x1c\xc6\xb2\x65\x02", },
-{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xec\x52\xa2\x12\xf8\x0a\x09\xdf\x63\x17\x02\x1b\xc2\xa9\x81\x9e", },
-{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\x3e\x5b\x60\x0e\xb7\x0d\xbc\xcf\x6c\x0b\x1d\x9a\x68\x18\x2c", },
-{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa3\xf5\x99\xd6\x3a\x82\xa9\x68\xc3\x3f\xe2\x65\x90\x74\x59\x70", },
-{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\xcc\xb9\xb1\x33\x70\x02\xcb\xac\x42\xc5\x20\xb5\xd6\x77\x22", },
-{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x11\x1f\x6c\x37\xcf\x40\xa1\x15\x9d\x00\xfb\x59\xfb\x04\x88", },
-{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x43\xb5\x1a\xb6\x09\x05\x23\x72\x98\x9a\x26\xe9\xcd\xd7\x14", },
-{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4d\xce\xde\x8d\xa9\xe2\x57\x8f\x39\x70\x3d\x44\x33\xdc\x64\x59", },
-{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\x4c\x1c\x26\x3b\xbc\xcf\xaf\xc1\x17\x82\x89\x46\x85\xe3\xa8", },
-{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x7a\xd8\x48\x80\xdb\x50\x61\x34\x23\xd6\xd5\x27\xa2\x82\x3d", },
-{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\x0b\x71\xdf\xc6\x88\xe1\x50\xd8\x15\x2c\x5b\x35\xeb\xc1\x4d", },
-{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xef\x24\x95\xda\xbf\x32\x38\x85\xaa\xb3\x9c\x80\xf1\x8d\x8b", },
-{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x63\x3c\xaf\xea\x39\x5b\xc0\x3a\xda\xe3\xa1\xe2\x06\x8e\x4b\x4e", },
-{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\x1b\x48\x2b\x53\x76\x1c\xf6\x31\x81\x9b\x74\x9a\x6f\x37\x24", },
-{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x6e\x6f\x85\x1a\xb5\x2c\x77\x19\x98\xdb\xb2\xd7\x1c\x75\xa9", },
-{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x85\xf2\xba\x84\xf8\xc3\x07\xcf\x52\x5e\x12\x4c\x3e\x22\xe6\xcc", },
-{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6b\xcc\xa9\x8b\xf6\xa8\x35\xfa\x64\x95\x5f\x72\xde\x41\x15\xfe", },
-{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\x75\xe2\xd3\x6e\xeb\xd6\x54\x11\xf1\x4f\xd0\xeb\x1d\x2a\x06", },
-{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbd\x49\x29\x50\x06\x25\x0f\xfc\xa5\x10\x0b\x60\x07\xa0\xea\xde", },
-{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x90\x52\x7d\x0e\xf7\xc7\x0f\x45\x9c\xd3\x94\x0d\xf3\x16\xec", },
-{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbb\xd1\x09\x7a\x62\x43\x3f\x79\x44\x9f\xa9\x7d\x4e\xe8\x0d\xbf", },
-{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x05\x8e\x40\x8f\x5b\x99\xb0\xe0\xf0\x61\xa1\x76\x1b\x5b\x3b", },
-{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5f\xd1\xf1\x3f\xa0\xf3\x1e\x37\xfa\xbd\xe3\x28\xf8\x94\xea\xc2", },
-{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x4a\xf7\xc9\x48\xdf\x26\xe2\xef\x3e\x01\xc1\xee\x5b\x8f\x6f", },
-{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x9f\xd7\x20\x8f\xb9\x2d\x44\xa0\x74\xa6\x77\xee\x98\x61\xac", },
-{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xad\x9f\xc6\x13\xa7\x03\x25\x1b\x54\xc6\x4a\x0e\x76\x43\x17\x11", },
-{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\xac\x9e\xcc\xc4\xcc\x75\xe2\x71\x16\x18\xf8\x0b\x15\x48\xe8", },
-{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x20\x25\xc7\x4b\x8a\xd8\xf4\xcd\xa1\x7e\xe2\x04\x9c\x4c\x90\x2d", },
-{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x5c\xa0\x5f\xe5\x28\xf1\xce\x9b\x79\x01\x66\xe8\xd5\x51\xe7", },
-{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6f\x62\x38\xd8\x96\x60\x48\xd4\x96\x71\x54\xe0\xda\xd5\xa6\xc9", },
-{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xb2\x1b\x4e\x76\x40\xa9\xb3\x34\x6d\xe8\xb8\x2f\xb4\x1e\x49", },
-{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x36\xf2\x51\xad\x1d\x11\xd4\x9d\xc3\x44\x62\x8b\x18\x84\xe1", },
-{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x7e\x94\x70\xae\x7a\xbe\xa5\xa9\x76\x9d\x49\x18\x26\x28\xc3", },
-{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\xdc\xc2\xd2\x7f\xc9\x86\x56\x33\xf8\x52\x23\xcf\x0d\x61\x1f", },
-{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbe\x66\xcf\xea\x2f\xec\xd6\xbf\x0e\xc7\xb4\x35\x2c\x99\xbc\xaa", },
-{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\x31\x14\x4f\x87\xa2\xef\x52\x3f\xac\xdc\xf2\x1a\x42\x78\x04", },
-{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xbb\x0f\x56\x29\xfb\x6a\xae\x5e\x18\x39\xa3\xc3\x62\x5d\x63", },
-{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3c\x9d\xb3\x33\x53\x06\xfe\x1e\xc6\x12\xbd\xbf\xae\x6b\x60\x28", },
-{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3d\xd5\xc3\x46\x34\xa7\x9d\x3c\xfc\xc8\x33\x97\x60\xe6\xf5\xf4", },
-{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\xbd\xa1\x18\xa3\xed\x7a\xf3\x14\xfa\x2c\xcc\x5c\x07\xb7\x61", },
-{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x37\xa6\x4f\x7d\x4f\x46\xfe\x6f\xea\x3b\x34\x9e\xc7\x8e\x38", },
-{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x5f\x06\x8c\x28\x47\x66\x05\x73\x5a\xd6\x71\xbb\x8f\x39\xf3", },
-{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xae\x68\x2c\x5e\xcd\x71\x89\x8e\x08\x94\x2a\xc9\xaa\x89\x87\x5c", },
-{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\x03\x1c\xb9\xd6\x76\xc3\x02\x2d\x7f\x26\x22\x7e\x85\xc3\x8f", },
-{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x84\x63\xfb\x06\x4d\xb5\xd5\x2b\xb6\x4b\xfe\xf6\x4f\x2d\xda", },
-{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8a\xa9\xb7\x5e\x78\x45\x93\x87\x6c\x53\xa0\x0e\xae\x5a\xf5\x2b", },
-{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x84\x56\x6d\xf2\x3d\xa4\x8a\xf6\x92\x72\x2f\xe9\x80\x57\x3a", },
-{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x31\x69\x0b\x5e\xd4\x1c\x7e\xb4\x2a\x1e\x83\x27\x0a\x7f\xf0\xe6", },
-{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xdd\x77\x02\x64\x6d\x55\xf0\x83\x65\xe4\x77\xd3\x59\x0e\xda", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4c\x02\x2a\xc6\x2b\x3c\xb7\x8d\x73\x9c\xc6\x7b\x3e\x20\xbb\x7e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x09\x2f\xa1\x37\xce\x18\xb5\xdf\xe7\x90\x6f\x55\x0b\xb1\x33\x70", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\x0c\xda\xdf\x2e\x68\x35\x3c\x00\x27\x67\x2c\x97\x14\x4d\xd3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xc4\xb2\x00\xb3\x83\xfc\x1f\x2b\x2e\xa6\x77\x61\x8a\x1d\x27", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x82\x5f\x99\xb0\xe9\xbb\x34\x77\xc1\xc0\x71\x3b\x01\x5a\xac", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\xb9\xff\xfb\x5c\x18\x7f\x7d\xdc\x7a\xb1\x0f\x4f\xb7\x75\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xb4\xe8\x7a\x32\xb3\x7d\x6f\x2c\x83\x28\xd3\xb5\x37\x78\x02", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x76\xc1\x3a\x5d\x22\x0f\x4d\xa9\x22\x4e\x74\x89\x63\x91\xce", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\xef\xe7\xa0\xe2\xe0\x31\xe2\x53\x6d\xa0\x1d\xf7\x99\xc9\x27", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\x8f\xd8\x22\x68\x0a\x85\x97\x4e\x53\xa5\xa8\xeb\x9d\x38\xde", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\xf0\xa9\x1b\x2e\x45\xf8\xcc\x37\xb7\x80\x5a\x30\x42\x58\x8d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\x7a\x62\x52\x25\x5e\x46\xd6\x36\x4d\xbe\xed\xa3\x1e\x27\x9c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf5\x1a\x0f\x69\x44\x42\xb8\xf0\x55\x71\x79\x7f\xec\x7e\xe8\xbf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9f\xf0\x71\xb1\x65\xb5\x19\x8a\x93\xdd\xde\xeb\xc5\x4d\x09\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x0a\x19\xfd\x57\x58\xb0\xc4\xbc\x1a\x5d\xf8\x9c\xf7\x38\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x12\x01\x66\x30\x71\x19\xca\x22\x80\xe9\x31\x56\x68\xe9\x6f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\x3b\x9f\x1e\x09\x9c\x2a\x09\xdc\x09\x1e\x90\xe4\xf1\x8f\x0a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\x04\x0b\x89\x1d\x4b\x37\xf6\x85\x1f\x7e\xc2\x19\xcd\x3f\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9f\x0f\xde\xc0\x8b\x7f\xd7\x9a\xa3\x95\x35\xbe\xa4\x2d\xb9\x2a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x70\xf1\x68\xfc\x74\xbf\x91\x1d\xf2\x40\xbc\xd2\xce\xf2\x36", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x46\x2c\xcd\x7f\x5f\xd1\x10\x8d\xbc\x15\x2f\x3c\xac\xad\x32\x8b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa4\xaf\x53\x4a\x7d\x0b\x64\x3a\x01\x86\x87\x85\xd8\x6d\xfb\x95", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x98\x02\x96\x19\x7e\x1a\x50\x22\x32\x6c\x31\xda\x4b\xf6\xf3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf9\x7d\x57\xb3\x33\x3b\x62\x81\xb0\x7d\x48\x6d\xb2\xd4\xe2\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x3f\xa3\x67\x20\x23\x1a\xfe\x4c\x75\x9a\xde\x6b\xd6\x2e\xb6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xcf\xac\x0c\x02\xca\x53\x83\x43\xc6\x81\x17\xe0\xa1\x59\x38", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xad\x49\x16\xf5\xee\x57\x72\xbe\x76\x4f\xc0\x27\xb8\xa6\xe5\x39", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x16\x87\x3e\x16\x78\x61\x0d\x7e\x14\xc0\x2d\x00\x2e\xa8\x45", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4e\x6e\x62\x7c\x1a\xcc\x51\x34\x00\x53\xa8\x23\x6d\x57\x95\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x0c\x84\x10\xae\xee\xad\x92\xfe\xec\x1e\xb4\x30\xd6\x52\xcb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\x6f\x7e\x23\xe8\x35\xe1\x14\x97\x7f\x60\xe1\xa5\x92\x20\x2e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\x8a\xd5\x05\x5a\x36\x70\x41\xfa\xde\x09\xd9\xa7\x0a\x79\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x91\x82\x3a\x3c\x66\x6b\xb6\x16\x28\x25\xe7\x86\x06\xa7\xfe", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xca\x36\x6a\x9b\xf4\x7b\x7b\x86\x8b\x77\xe2\x5c\x18\xa3\x64", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x4c\x9e\xfc\x23\x7e\x4a\x44\x29\x65\xf8\x4b\xce\x20\x24\x7a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x58\x41\x1f\xfb\xe6\x3f\xdb\x9c\x8a\xa1\xbf\xae\xd6\x7b\x52", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\xbc\x3d\xa2\x17\x9c\x30\x15\x49\x8b\x0e\x03\x91\x0d\xb5\xb8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x07\x1e\xea\xb3\xf9\x35\xdb\xc2\x5d\x00\x84\x14\x60\x26\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0e\xbd\x7c\x30\xed\x20\x16\xe0\x8b\xa8\x06\xdd\xb0\x08\xbc\xc8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x15\xc6\xbe\xcf\x0f\x4c\xec\x71\x29\xcb\xd2\x2d\x1a\x79\xb1\xb8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0a\xee\xde\x5b\x91\xf7\x21\x70\x0e\x9e\x62\xed\xbf\x60\xb7\x81", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x65\x81\xaf\x0d\xcf\xbe\xd1\x58\x5e\x0a\x24\x2c\x64\xb8\xdf", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x66\x93\xdc\x91\x16\x62\xae\x47\x32\x16\xba\x22\x18\x9a\x51\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x76\x06\xfa\x36\xd8\x64\x73\xe6\xfb\x3a\x1b\xb0\xe2\xc0\xad\xf5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x20\x78\xe9\xe1\x1f\xbb\x78\xe2\x6f\xfb\x88\x99\xe9\x6b\x9a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\xb2\x64\xe9\x21\xe9\xe4\xa8\x26\x94\x58\x9e\xf3\x79\x82\x62", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x45\x95\xcb\x4f\xa7\x02\x67\x15\xf5\x5b\xd6\x8e\x28\x82\xf9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\x88\xa3\x02\xbd\xbc\x09\x19\x7d\xf1\xed\xae\x68\x92\x6e\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\xf7\x50\x23\x90\xb8\xa4\xa2\x21\xcf\xec\xd0\x66\x66\x24\xba", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3d\x20\x25\x3a\xdb\xce\x3b\xe2\x37\x37\x67\xc4\xd8\x22\xc5\x66", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa4\x27\x34\xa3\x92\x9b\xf8\x4c\xf0\x11\x6c\x98\x56\xa3\xc1\x8c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\xab\xc4\x93\x94\x57\x42\x2b\xb9\x57\xda\x3c\x56\x93\x8c\x6d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x2b\xdd\x2e\x7c\x52\x51\x30\xfa\xdc\x8f\x76\xfc\x6f\x4b\x3f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xa8\x3d\x7b\x94\xc6\x99\xcb\xcb\x8a\x7d\x9b\x61\xf6\x40\x93", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xce\x61\xd6\x35\x14\xad\xed\x03\xd4\x3e\x6e\xbf\xc3\xa9\x00\x1f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x83\x9d\xd5\x8e\xea\xe6\xb8\xa3\x6a\xf4\x8e\xd6\x3d\x2d\xc9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcd\x5e\xce\x55\xb8\xda\x3b\xf6\x22\xc4\x10\x0d\xf5\xde\x46\xf9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x6f\x46\xf4\x0e\x0a\xc5\xfc\x0a\x9c\x11\x05\xf8\x00\xf4\x8d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x26\xd4\x7d\xa3\xae\xb0\x28\xde\x4f\xb5\xb3\xa8\x54\xa2\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\xf5\x3b\xf6\x20\xd3\x67\x72\x68\x44\x52\x12\x90\x43\x89\xd5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\x61\x7d\x28\xb5\xe0\xf4\x60\x54\x92\xb1\x82\xa5\xd7\xf9\xf6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9a\xae\xc4\xfa\xbb\xf6\xfa\xe2\xa7\x1f\xef\xf0\x2e\x37\x2b\x39", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x90\xc6\x2d\x88\xb5\xc4\x28\x09\xab\xf7\x82\x48\x8e\xd1\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\xf1\xc5\xa4\x08\x99\xe1\x57\x72\x85\x7c\xcb\x65\xc7\xa0\x9a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x08\x43\xd2\x9b\x25\xa3\x89\x7c\x69\x2c\xe1\xdd\x81\xee\x52", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x66\xbc\x65\xb6\x94\x1d\x86\xe8\x42\x0a\x7f\xfb\x09\x64\xdb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x81\x93\xc6\xff\x85\x22\x5c\xed\x42\x55\xe9\x2f\x6e\x07\x8a\x14", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x61\xcb\x24\x24\xd7\xd4\xa3\x80\xd5\x47\xf9\xe7\xec\x1c\xb9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\xf9\x3d\x9e\xc0\x84\x53\xa0\x71\xe2\xe2\x87\x78\x77\xa9\xc8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xee\xfa\x80\xce\x6a\x4a\x9d\x59\x8e\x3f\xec\x36\x54\x34\xd2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd6\x20\x68\x44\x45\x78\xe3\xab\x39\xce\x7e\xc9\x5d\xd0\x45\xdc", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xf7\x1d\x4d\xd9\xa7\x1f\xe5\xd8\xbc\x8b\xa7\xe6\xea\x30\x48", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x25\xa3\x47\xac\x47\x9d\x4f\x9d\x95\xc5\xcb\x8d\x3f\xd7\xe9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x71\x4e\x94\xa5\x77\x89\x55\xcc\x03\x46\x35\x8e\x94\x78\x3a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x36\xb4\x4b\xb2\x9e\x0c\x7d\x89\xfa\x4b\x2d\x4b\x67\x7d\x2a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5d\x45\x4b\x75\x02\x1d\x76\xd4\xb8\x4f\x87\x3a\x8f\x87\x7b\x92", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc3\x49\x8f\x7e\xce\xd2\x09\x53\x14\xfc\x28\x11\x58\x85\xb3\x3f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\x66\x88\x56\x53\x9a\xd8\xe4\x05\xbd\x12\x3f\xe6\xc8\x85\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\x80\xdb\x7f\x3a\x87\xb8\x60\x55\x43\xcf\xdb\xe6\x75\x40\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x5d\x03\xb1\x30\x69\xc3\x65\x8b\x31\x79\xbe\x91\xb0\x80\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x1b\x38\x4a\xc4\xd9\x3e\xda\x00\xc9\x2a\xdd\x09\x95\xea\x5f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbf\x81\x15\x80\x54\x71\x74\x1b\xd5\xad\x20\xa0\x39\x44\x79\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\x4c\x24\xb6\x89\x4b\x03\x8b\x3c\x0d\x09\xb1\xdf\x06\x8b\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x39\x67\xa1\x0c\xff\xe2\x7d\x01\x78\x54\x5f\xbf\x6a\x40\x54\x4b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\x85\xe9\xc9\x5d\xe1\xa9\xec\x5a\x53\x63\xa8\xa0\x53\x47\x2d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa9\xee\xc0\x3c\x8a\xbe\xc7\xba\x68\x31\x5c\x2c\x8c\x23\x16\xe0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\xc8\xe4\x14\xc2\xf3\x88\x22\x7a\xe1\x49\x86\xfc\x98\x35\x24", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5d\x94\x2b\x7f\x46\x22\xce\x05\x6c\x3c\xe3\xce\x5f\x1d\xd9\xd6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x40\xd6\x48\xce\x21\xa3\x02\x02\x82\xc3\xf1\xb5\x28\xa0\xb6", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\xd0\x89\xc3\x6d\x5c\x5a\x4e\xfc\x68\x9e\x3b\x0d\xe1\x0d\xd5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\xda\x5d\xf4\xbe\xcb\x54\x62\xe0\x3a\x0e\xd0\x0d\x29\x56\x29", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xf4\xe1\x29\x13\x6c\x1a\x4b\x7a\x0f\x38\x93\x5c\xc3\x4b\x2b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\xa4\xc7\x61\x8b\x0c\xe4\x8a\x3d\x5a\xee\x1a\x1c\x01\x14\xc4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x35\x2d\xf0\x25\xc6\x5c\x7b\x0b\xf3\x06\xfb\xee\x0f\x36\xba", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\x8a\xca\x23\xfd\x34\x09\xf3\x8a\xf6\x33\x78\xed\x2f\x54\x73", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\x83\x6a\x0e\x06\xa7\x96\x91\xb3\x66\x67\xd5\x38\x0d\x81\x88", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x90\x50\x80\xf7\xac\xf1\xcd\xae\x0a\x91\xfc\x3e\x85\xae\xe4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xc9\xe4\x64\x6d\xbc\x3d\x63\x20\xfc\x66\x89\xd9\x3e\x88\x33", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x77\x41\x3d\xea\x59\x25\xb7\xf5\x41\x7e\xa4\x7f\xf1\x9f\x59", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\xae\x81\x29\xf8\x43\xd8\x6d\xc7\x86\xa0\xfb\x1a\x18\x49\x70", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\xfe\xfb\x53\x41\x00\x79\x6e\xeb\xbd\x99\x02\x06\x75\x4e\x19", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8c\x79\x1d\x5f\xdd\xdf\x47\x0d\xa0\x4f\x3e\x6d\xc4\xa5\xb5\xb5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\x3b\xbd\xc0\x7a\x46\x11\xae\x4b\xb2\x66\xea\x50\x34\xa3\x87", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\x02\xe3\x8e\x48\x9a\xa7\x47\x62\xf3\xef\xc5\xbb\x23\x20\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x20\x14\x81\x66\x5c\xba\xfc\x1f\xcc\x22\x0b\xc5\x45\xfb\x3d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x60\x75\x7e\xc6\xce\x68\xcf\x19\x5e\x45\x4c\xfd\x0f\x32\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\xec\x7c\xe6\xa6\xcb\xd0\x7c\x04\x34\x16\x73\x7f\x1b\xbb\x33", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\xc5\x41\x39\x04\x48\x7a\x80\x5d\x70\xa8\xed\xd9\xc3\x55\x27", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x34\x78\x46\xb2\xb2\xe3\x6f\x1f\x03\x24\xc8\x6f\x7f\x1b\x98\xe2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x2e\xee\x1a\x0c\xbd\x19\xca\x2d\x69\xb4\x26\x89\x40\x44\xf0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\x6b\x5b\x39\x77\xba\x6e\xfa\x51\x28\xef\xbd\xa9\xff\x03\xcd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x14\x45\xee\x94\xc0\xf0\x8c\xde\xe5\xc3\x44\xec\xd1\xe2\x33", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbe\x28\x83\x19\x02\x93\x63\xc2\x62\x2f\xeb\xa4\xb0\x5d\xfd\xfe", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\xd1\x87\x55\x23\xf3\xcd\x21\xc3\x95\x65\x1e\x6e\xe1\x5e\x56", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x5a\x40\x86\x57\x83\x7c\x53\xbf\x16\xf9\xd8\x46\x5d\xce\x19", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x0b\xf4\x2c\xb1\x07\xf5\x5c\xcf\xf2\xfc\x09\xee\x08\xca\x15", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xd9\xbb\xb4\xa7\xdc\x2e\x4a\x23\x53\x6a\x58\x80\xa2\xdb\x67", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xe4\x47\xb3\x62\xc4\x84\x99\x3d\xec\x94\x42\xa3\xb4\x6a\xef", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\xdf\xfb\x05\x90\x4b\xff\x7c\x47\x81\xdf\x78\x0a\xd2\x68\x37", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc3\x3b\xc1\x3e\x8d\xe8\x8a\xc2\x52\x32\xaa\x74\x96\x39\x87\x83", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x35\x9c\x70\x80\x3a\x3b\x2a\x3d\x54\x2e\x87\x81\xde\xa9\x75", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbc\xc6\x5b\x52\x6f\x88\xd0\x5b\x89\xce\x8a\x52\x02\x1f\xdb\x06", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x91\xa3\x88\x55\xc8\xc4\x64\x38\x51\xfb\xfb\x35\x8b\x01\x09", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x6e\x88\x93\xa1\x14\xae\x8e\x27\xd5\xab\x03\xa5\x49\x96\x10", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x66\x29\xd2\xb8\xdf\x97\xda\x72\x8c\xdd\x8b\x1e\x7f\x94\x50\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\x70\xa5\xa1\x8c\xfc\x0d\xd5\x82\xf1\xd8\x8d\x5c\x9a\x17\x20", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xbc\x65\xaa\x8e\x89\x56\x2e\x3f\x27\x4d\x45\xaf\x1c\xd1\x0b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x98\x55\x1d\xa1\xa6\x50\x32\x76\xae\x1c\x77\x62\x5f\x9e\xa6\x15", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xdf\xe5\x1c\xed\x7e\x3f\x4a\xe9\x27\xda\xa3\xfe\x45\x2c\xee", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x82\x62\x51\xe4\xce\x38\x4b\x80\x21\x8b\x0e\x1d\xa1\xdd\x4c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xac\xf7\x28\xb8\x8a\xbb\xad\x70\x11\xed\x0e\x64\xa1\x68\x0c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x0d\x8e\xe7\xc5\x67\x7e\x09\x9a\xc7\x4c\x99\x94\xee\x4c\xfb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xf6\x1a\xe3\x62\xe8\x82\xdd\xc0\x16\x74\x74\xa7\xa7\x7f\x3a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\x68\xb0\x0b\xa7\x85\x9e\x09\x70\xec\xfd\x75\x7e\xfe\xcf\x7c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\x41\x54\x47\x86\x62\x30\xd2\x8b\xb1\xea\x18\xa4\xcd\xfd\x02", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\x61\x83\x39\x2f\x7a\x87\x63\xaf\xec\x68\xa0\x60\x26\x41\x41", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\x56\x5c\x8d\x73\xcf\xd4\x13\x0b\x4a\xa1\x4d\x89\x11\x71\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\x23\x2a\x4e\xd2\x1c\xcc\x27\xc1\x9c\x96\x10\x07\x8c\xab\xac", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x4f\x32\xea\x71\x82\x8c\x7d\x32\x90\x77\xe7\x12\x23\x16\x66", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd6\x44\x24\xf2\x3c\xb9\x72\x15\xe9\xc2\xc6\xf2\x8d\x29\xea\xb7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\x3e\x82\xb5\x33\xf6\x8c\x75\xc2\x38\xce\xbd\xb2\xee\x89\xa2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x3a\x3d\x24\x15\x7a\x51\xf1\xee\x08\x93\xf6\x77\x74\x17\xe7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xec\xac\xfc\xd4\x00\x08\x4d\x07\x86\x12\xb1\x94\x5f\x2e\xf5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xcd\x8b\xb1\x73\x25\x9e\xb3\x3a\x52\x42\xb0\xde\x31\xa4\x55", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xe9\xed\xdb\xc3\x75\xe7\x92\xc1\x99\x92\xc1\x91\x65\x01\x2b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8a\x77\x22\x31\xc0\x1d\xfd\xd7\xc9\x8e\x4c\xfd\xdc\xc0\x80\x7a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xda\x7f\xf6\xb8\x31\x91\x80\xff\x0d\x6e\x65\x62\x9d\x01\xc3", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x67\xef\x0e\x2d\x01\xa9\x93\x94\x4d\xd3\x97\x10\x14\x13\xcb", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\xf8\x0e\x9d\x84\x5b\xcc\x0f\x62\x92\x6a\xf7\x2e\xab\xca\x39", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x02\x99\x07\x27\xaa\x08\x78\x63\x7b\x45\xdc\xd3\xa3\xb0\x74", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x2e\x64\x7d\x53\x60\xe0\x92\x30\xa5\xd7\x38\xca\x33\x47\x1e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x56\x41\x3c\x7a\xdd\x6f\x43\xd1\xd5\x6e\x4f\x02\x19\x03\x30", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x69\xcd\x06\x06\xe1\x5a\xf7\x29\xd6\xbc\xa1\x43\x01\x6d\x98\x42", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x85\xd7\xc1\xa5\x00\x87\x3a\x20\x09\x9c\x4c\xaa\x3c\x3f\x5b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xc0\xd2\x30\xf8\x89\x14\x15\xb8\x7b\x83\xf9\x5f\x2e\x09\xd1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\x27\xd0\x8c\x52\x3d\x8e\xba\x69\x7a\x43\x36\x50\x7d\x1f\x42", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\x15\xaa\xb8\x27\x01\xef\xa5\xae\x36\xab\x1d\x6b\x76\x29\x0f", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5b\xf0\x05\x18\x93\xa1\x8b\xb3\x0e\x13\x9a\x58\xfe\xd0\xfa\x54", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xe8\xad\xf6\x56\x38\xfd\x9c\xdf\x3b\xc2\x2c\x17\xfe\x4d\xbd", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xe6\xee\x32\x65\x83\xa0\x58\x64\x91\xc9\x64\x18\xd1\xa3\x5d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\xb5\x49\xc2\xec\x75\x6f\x82\xec\xc4\x80\x08\xe5\x29\x95\x6b", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x37\x7b\x6d\xa6\x69\xb0\x72\x12\x9e\x05\x7c\xc2\x8e\x9c\xa5", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\x94\xb8\xb0\xcb\x8b\xcc\x91\x90\x72\x26\x2b\x3f\xa0\x5a\xd9", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\xbb\x83\xdf\xd0\xd7\xab\xcb\x05\xcd\x28\xca\xd2\xdf\xb5\x23", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x87\x78\x03\xde\x77\x74\x4b\xb9\x70\xd0\xa9\x1f\x4d\xeb\xae", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x73\x79\xf3\x37\x0c\xf6\xe5\xce\x12\xae\x59\x69\xc8\xee\xa3\x12", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xdc\x99\xfa\x3d\x4f\x98\xce\x80\x98\x5e\x72\x33\x88\x93\x13", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\x38\xe7\x59\x07\x5b\xa5\xca\xb6\x45\x7d\xa5\x18\x44\x29\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\xbe\xd8\xdb\xf6\x15\x86\x8a\x1f\x9d\x9b\x05\xd3\xe7\xa2\x67", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\x4b\x14\x8b\x8c\xb1\xd8\xc3\x2b\x28\x7e\x89\x69\x03\xd1\x50", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x4b\x03\x3d\xf4\xda\x85\x3f\x4b\xe3\xe2\x43\xf7\xe5\x13\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x58\xc9\x50\xf0\x36\x71\x60\xad\xec\x45\xf2\x44\x1e\x74\x11", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\xf6\x55\x53\x6a\x70\x4e\x5a\xce\x18\x2d\x74\x2a\x82\x0c\xf4", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x7b\xd6\xbb\x63\x41\x87\x31\xae\xac\x79\x0f\xe4\x2d\x61\xe8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe7\x4a\x4c\x99\x9b\x4c\x06\x4e\x48\xbb\x1e\x41\x3f\x51\xe5\xea", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x9e\xbe\xfd\xb4\xcc\xf3\x0f\x29\x6c\xec\xb3\xbc\x19\x43\xe8", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x31\x94\x36\x7a\x48\x98\xc5\x02\xc1\x3b\xb7\x47\x86\x40\xa7\x2d", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xda\x79\x77\x13\x26\x3d\x6f\x33\xa5\x47\x8a\x65\xef\x60\xd4\x12", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\xac\x39\xbb\x1e\xf8\x6b\x9c\x13\x44\xf2\x14\x67\x9a\xa3\x76", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\xde\xa9\xe6\x50\x53\x2b\xe5\xbc\x0e\x73\x25\x33\x7f\xd3\x63", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\xa2\x04\xdb\xd9\xc2\xaf\x15\x8b\x6c\xa6\x7a\x51\x56\xce\x4a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x0a\x0e\x75\xa8\xda\x36\x73\x5a\xee\x66\x84\xd9\x65\xa7\x78", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x52\xfc\x3e\x62\x04\x92\xea\x99\x64\x1e\xa1\x68\xda\x5b\x6d\x52", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xe0\xc7\xf1\x5b\x47\x72\x46\x7d\x2c\xfc\x87\x30\x00\xb2\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x35\x31\x13\x5e\x0c\x4d\x70\xa3\x8f\x8b\xdb\x19\x0b\xa0\x4e", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\xa3\x9a\x0f\x56\x63\xf4\xc0\xfe\x5f\x2d\x3c\xaf\xff\x42\x1a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\x4b\x5e\x90\xdb\x35\x4c\x1e\x42\xf6\x1f\xab\xe1\x67\xb2\xc0", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x50\xe6\xd3\xc9\xb6\x69\x8a\x7c\xd2\x76\xf9\x6b\x14\x73\xf3\x5a", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x38\xf0\x8e\x0e\xbe\xe9\x69\x05\xd8\xf2\xe8\x25\x20\x8f\x43", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x37\x8c\x86\x67\x2a\xa5\x4a\x3a\x26\x6b\xa1\x9d\x25\x80\xca", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\xa7\xc3\x08\x6f\x5f\x95\x11\xb3\x12\x33\xda\x7c\xab\x91\x60", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5b\x40\xff\x4e\xc9\xbe\x53\x6b\xa2\x30\x35\xfa\x4f\x06\x06\x4c", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\xeb\x5a\xf8\x41\x6b\x25\x71\x49\x37\x21\x94\xe8\xb8\x87\x49", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\x00\x5a\x8a\xed\x8a\x36\x1c\x92\xe4\x40\xc1\x55\x20\xcb\xd1", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x03\x62\x76\x11\x67\x8a\x99\x77\x17\x57\x88\x07\xa8\x00\xe2", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x78\x61\x8f\x74\xf6\xf3\x69\x6e\x0a\x47\x79\xb9\x0b\x5a\x77", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x72\x03\x71\xa0\x49\x62\xea\xea\x0a\x85\x2e\x69\x97\x28\x58", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x8a\x81\x33\xaa\x8c\xcf\x70\xe2\xbd\x32\x85\x83\x1c\xa6\xb7", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x93\x6b\xd2\x7f\xb1\x46\x8f\xc8\xb4\x8b\xc4\x83\x32\x17\x25", },
-{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb0\x7d\x4f\x3e\x2c\xd2\xef\x2e\xb5\x45\x98\x07\x54\xdf\xea\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xc6\xbf\x79\x0c\x15\x76\x0d\x8d\x9a\xeb\x6f\x9a\x75\xfd\x4e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0a\x6b\xdc\x6d\x4c\x1e\x62\x80\x30\x1f\xd8\xe9\x7d\xdb\xe6\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x80\xee\xfb\x7e\xbe\x2d\x2b\x16\x24\x7a\xa0\xef\xc7\x2f\x5d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7f\x2c\x5e\xce\x07\xa9\x8d\x8b\xee\x13\xc5\x11\x77\x39\x5f\xf7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\x18\xd8\x00\xdc\xf6\xf4\xbe\x1e\x0e\x94\xf4\x03\xd1\xe4\xc2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe7\x4c\xd1\xc9\x2f\x09\x19\xc3\x5a\x03\x24\x12\x3d\x61\x77\xd3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x92\xa4\xdc\xf2\xda\x7e\x77\xe9\x3b\xdd\x37\x1d\xfe\xd8\x2e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\xaf\x6b\x37\x21\x35\xac\xef\x10\x13\x2e\x54\x8f\x21\x7b\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\xcd\x40\xf9\x4e\xbb\x63\xb9\xf7\x90\x96\x76\xe6\x67\xf1\xe7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x1c\xff\xb8\x3f\x45\xdc\xfb\x38\xb2\x9b\xe4\x38\xdb\xd3\xab", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xc5\x8a\x8d\x88\x66\x23\x70\x5a\xec\x15\xcb\x1e\x70\xdc\x0e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x18\xfa\xa1\x60\x56\xbd\x07\x74\xc3\xe8\xd7\x9c\x35\xa5\xe4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\x7b\xba\x83\xf7\xaa\x84\x17\x31\x50\x4e\x01\x22\x08\xfc\x9e", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x8f\x0e\x49\x15\xfd\x81\xba\x70\xa3\x31\x31\x08\x82\xf6\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x15\x69\x85\x9e\xa6\xb7\x20\x6c\x30\xbf\x4f\xd0\xcb\xfa\xc3\x3c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x0a\xde\x92\xf8\x8f\x48\xfa\x2d\xf7\x30\xec\x16\xef\x44\xcd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\xe6\xcc\x3c\x05\x96\x5d\xc0\x8e\xb0\x59\x0c\x95\xac\x71\xd0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\xe8\x58\xea\xaa\x97\xfe\xc3\x81\x11\x27\x5b\x6c\xf5\xab\xc0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x39\x45\x5e\x7a\xfe\x3b\x06\x16\x10\x02\x88\xcc\x5a\x72\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\xe5\x00\xc5\xc8\xd6\x34\x79\x71\x71\x63\xe5\x5c\x5c\x45\x22", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd5\xe3\x8b\xf1\x5f\x16\xd9\x0e\x3e\x21\x40\x41\xd7\x74\xda\xa8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xf4\x06\x6e\x6f\x4f\x18\x7d\xfe\x5f\x2a\xd1\xb1\x78\x19\xd0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xf4\xcc\x4d\xe4\x9b\x11\x06\x5d\x7a\xf2\x90\x98\x54\x79\x4a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\x86\xbc\x60\x6b\x66\x40\xc3\x09\xe7\x82\xf2\x32\xbf\x36\x7f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xaf\xf0\xef\x7b\xf3\x28\x07\x72\xcf\x4c\xac\x80\xa0\xd2\xb2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x8e\xed\xea\x0f\x62\xa1\x40\x6d\x58\xcf\xc3\xec\xea\x72\xcf", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\xf4\x15\x4a\x33\x75\xa1\xd3\xe6\xb1\xd4\x54\x43\x8f\x95\xa6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xf9\x6e\x9d\x60\x7f\x66\x15\xfc\x19\x20\x61\xee\x64\x8b\x07", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x37\xcd\xaa\xa0\xd2\xd5\x36\xc7\x18\x57\x63\x4c\x79\x20\x64", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\xd6\x64\x0c\x80\x24\x5c\x2b\x80\x53\x73\xf1\x30\x70\x31\x27", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x6a\x8a\xfe\x55\xa6\xe4\x81\xba\xda\xe0\xd1\x46\xf4\x36\xdb", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\x49\x81\xf2\x91\x5e\x3e\x68\xaf\x6c\x22\x38\x5d\xd0\x67\x56", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xa1\x13\x6e\x5f\x8d\x8d\x21\xd3\x10\x19\x98\x64\x2d\x57\x3b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x47\x15\x96\xdc\x69\xae\x15\x86\xce\xe6\x15\x8b\x0b\x01\x81", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x36\x65\xc4\xaf\x1e\xff\x33\xaa\x8b\x62\x8b\xf8\x74\x1c\xfd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9a\x68\x2a\xcf\x40\xbe\x01\xf5\xb2\xa4\x19\x3c\x9a\x82\x40\x4d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x54\xfa\xfe\x26\xe4\x28\x7f\x17\xd1\x93\x5f\x87\xeb\x9a\xde\x01", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\xd5\x41\xb2\xe7\x4c\xfe\x73\xe6\xa8\xe8\x22\x5f\x7b\xd4\x49", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\xa4\x55\x30\xf6\x24\xff\x6f\x76\xa1\xb3\x82\x66\x26\xff\x7b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf9\x6b\x0c\x4a\x8b\xc6\xc8\x61\x30\x28\x9f\x60\xb4\x3b\x8f\xba", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\xc7\xd0\xe8\x08\x34\xeb\xdc\x35\xb6\x73\x5f\x76\xb4\x6c\x8b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x63\x53\x1a\xb5\x4d\x66\x95\x5e\x73\xed\xc4\xcb\x8e\xaa\x45", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\x9b\xd8\xe2\x53\x04\x69\x13\x4b\x9d\x5b\x06\x5d\x4f\x56\x5b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x5f\x91\x06\xd0\xe5\x2f\x97\x3d\x48\x90\xe6\xf3\x7e\x8a\x00", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x20\xeb\xc8\x6f\x13\x04\xd2\x72\xe2\xe2\x07\xe5\x9d\xb6\x39\xf0", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\x7a\xe6\x42\x6b\xf9\x52\x6c\x97\x2c\xff\x07\x2b\x52\x25\x2c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\x51\x8d\xdd\xaf\x9e\xfa\x0d\x00\x2c\xc5\x8d\x10\x7e\xdf\xc8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xd7\x31\xaf\x4d\x3a\x2f\xe3\xb3\x4b\xed\x04\x79\x42\xa4\x9f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xd4\xef\xe4\x02\x42\xf8\x3e\x93\xb6\xc8\xd7\xef\xb5\xea\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcd\x2b\x1f\xec\x11\xfd\x90\x6c\x5c\x76\x30\x09\x94\x43\x61\x0a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x85\x3f\xe4\x7f\xe2\x92\x89\xd1\x53\x16\x1d\x06\x38\x7d\x21", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x46\x32\x15\x41\x79\xa5\x55\xc1\x7e\xa6\x04\xd0\x88\x9f\xab\x14", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\x27\xca\xc6\x40\x1a\x02\x2e\x8f\x38\xf9\xf9\x3e\x77\x44\x17", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x90\x31\x3e\xb9\x86\x74\xf3\x5f\x31\x23\x38\x5f\xb9\x5d\x4d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x35\x26\x26\x2b\x92\xf0\x2e\xdc\xe5\x48\xf7\x16\xb9\xf4\x5c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x83\x8d\x1a\x2b\x16\xa7\xc7\xf0\xdf\xcc\x43\x3c\x39\x9c\x33", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\x9a\xc7\x56\xeb\x29\x76\x95\xee\xd4\xd3\x82\xeb\x12\x6d\x26", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\xed\xe9\xdd\xa3\xf6\xf1\x41\xbf\xf1\x75\x7f\xa6\x89\xc3\xe1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x76\x8f\x52\x0e\xfe\x0f\x23\xe6\x1d\x3e\xc8\xad\x9c\xe9\x17\x74", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\x14\x4d\xdf\xa7\x57\x55\x21\x33\x90\xe7\xc5\x96\x66\x04\x90", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\x7c\x0c\x40\x40\xb3\x55\xb9\xd1\x07\xa9\x93\x25\xe3\xb0\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xe2\xbb\x1a\xe8\xee\x3d\xcf\x5b\xf7\xd6\xc3\x8d\xa8\x2a\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\xfa\xf8\x2d\x17\x8a\xf2\x5a\x98\x86\xa4\x7e\x7f\x78\x9b\x98\xd7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x58\xdb\xfd\x77\xfe\x5a\xca\x9c\xfc\x19\x0c\xd1\xb8\x2d\x19", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x77\xf3\x92\x08\x90\x42\xe4\x78\xac\x16\xc0\xc8\x6a\x0b\x5d\xb5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x19\xf0\x8e\x34\x20\xee\x69\xb4\x77\xca\x14\x20\x28\x1c\x47\x82", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\xa1\xb1\x9b\xee\xe4\xe1\x17\x13\x9f\x74\xb3\xc5\x3f\xdc\xb8\x75", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\xa3\x7a\x58\x69\xb2\x18\xa9\xf3\xa0\x86\x8d\x19\xae\xa0\xad\x6a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\xbc\x35\x94\xe8\x65\xbc\xd0\x26\x1b\x13\x20\x27\x31\xf3\x35\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x81\x14\x41\xce\x1d\x30\x9e\xee\x71\x85\xe8\xc7\x52\xc0\x75\x57", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x95\x99\x71\xce\x41\x34\x19\x05\x63\x51\x8e\x70\x0b\x98\x74\xd1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x76\xb5\x61\x4a\x04\x27\x07\xc9\x8e\x21\x32\xe2\xe8\x05\xfe\x63", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x7d\x9f\xa6\xa5\x75\x30\xd0\xf0\x36\xfe\xc3\x1c\x23\x0b\x0c\xc6", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x96\x41\x53\xa8\x3b\xf6\x98\x9a\x4b\xa8\x0d\xaa\x91\xc3\xe0\x81", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\xa0\x13\x01\x4d\x4c\xe8\x05\x4c\xf2\x59\x1d\x06\xf6\xf2\xf1\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\xd1\xc5\xf6\x39\x9b\xf3\x82\x50\x2e\x38\x5e\xee\x14\x74\xa8\x69", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x07\xe2\x0b\x82\x98\xec\x35\x4f\x0f\x5f\xe7\x47\x0f\x36\xbd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\xb9\x5b\xa0\x5b\x33\x2d\xa6\x1e\xf6\x3a\x2b\x31\xfc\xad\x98\x79", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x46\x20\xa4\x9b\xd9\x67\x49\x15\x61\x66\x9a\xb2\x5d\xce\x45\xf4", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x12\xe7\x12\x14\xae\x8e\x04\xf0\xbb\x63\xd7\x42\x5c\x6f\x14\xd5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x4c\xc4\x2f\xc1\x40\x7b\x00\x8f\xe3\x50\x90\x7c\x09\x2e\x80\xac", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x08\xb2\x44\xce\x7c\xbc\x8e\xe9\x7f\xbb\xa8\x08\xcb\x14\x6f\xda", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x39\xb3\x33\xe8\x69\x4f\x21\x54\x6a\xd1\xed\xd9\xd8\x7e\xd9\x5b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x3b\x27\x1f\x8a\xb2\xe6\xe4\xa2\x0b\xa8\x09\x0f\x43\xba\x78\xf3", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x9a\xd9\x83\xf3\xbf\x65\x1c\xd0\x39\x3f\x0a\x73\xcc\xcd\xea\x50", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x8f\x47\x6c\xbf\xf7\x5c\x1f\x72\x5c\xe1\x8e\x4b\xbc\xd1\x9b\x32", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x90\x5b\x62\x67\xf1\xd6\xab\x53\x20\x83\x5a\x13\x3f\x09\x6f\x2a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x14\x5b\x60\xd6\xd0\x19\x3c\x23\xf4\x22\x18\x48\xa8\x92\xd6\x1a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x55\xcf\xb3\xfb\x6d\x75\xca\xd0\x44\x5b\xbc\x8d\xaf\xa2\x5b\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x7b\x8e\x70\x98\xe3\x57\xef\x71\x23\x7d\x46\xd8\xb0\x75\xb0\xf5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x2b\xf2\x72\x29\x90\x1e\xb4\x0f\x2d\xf9\xd8\x39\x8d\x15\x05\xae", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x83\xa6\x34\x02\xa7\x7f\x9a\xd5\xc1\xe9\x31\xa9\x31\xec\xd7\x06", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x6f\x8b\xa6\x52\x11\x52\xd3\x1f\x2b\xad\xa1\x84\x3e\x26\xb9\x73", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\xe5\xc3\xb8\xe3\x0f\xd2\xd8\xe6\x23\x9b\x17\xb4\x4b\xd2\x3b\xbd", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x1a\xc1\xf7\x10\x2c\x59\x93\x3e\x8b\x2d\xdc\x3f\x14\xe9\x4b\xaa", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x21\xd9\xba\x49\xf2\x76\xb4\x5f\x11\xaf\x8f\xc7\x1a\x08\x8e\x3d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x64\x9f\x1c\xdd\xc3\x79\x2b\x46\x38\x63\x5a\x39\x2b\xc9\xba\xde", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\xe2\x77\x5e\x4b\x59\xc1\xbc\x2e\x31\xa2\x07\x8c\x11\xb5\xa0\x8c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x2b\xe1\xfa\xe5\x04\x8a\x25\x58\x2a\x67\x9c\xa1\x09\x05\xeb\x80", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xda\x86\xf2\x92\xc6\xf4\x1e\xa3\x4f\xb2\x06\x8d\xf7\x5e\xcc\x29", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x22\x0d\xf1\x9f\x85\xd6\x9b\x1b\x56\x2f\xa6\x9a\x3c\x5b\xec\xa5", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x1f\x11\xd5\xd0\x35\x5e\x0b\x55\x6c\xcd\xb6\xc7\xf5\x08\x3b\x4d", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x62\x52\x6b\x78\xbe\x79\xcb\x38\x46\x33\xc9\x1f\x83\xb4\x15\x1b", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x90\xdd\xbc\xb9\x50\x84\x35\x92\xdd\x47\xbb\xef\x00\xfd\xc8\x76", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x2f\xd0\xe4\x1c\x5b\x84\x02\x27\x73\x54\xa7\x39\x1d\x26\x18\xe2", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x3c\xdf\x13\xe7\x2d\xee\x4c\x58\x1b\xaf\xec\x70\xb8\x5f\x96\x60", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\xaf\xa2\xff\xc1\x37\x57\x70\x92\xe2\xb6\x54\xfa\x19\x9d\x2c\x43", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x8d\x68\x3e\xe6\x3e\x60\xd2\x08\xe3\x43\xce\x48\xdb\xc4\x4c\xac", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x70\x5a\x4e\xf8\xba\x21\x33\x72\x9c\x20\x18\x5c\x3d\x3a\x47\x63", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x08\x61\xa8\x61\xc3\xdb\x4e\x94\x19\x42\x11\xb7\x7e\xd7\x61\xb9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x4b\x00\xc2\x7e\x8b\x26\xda\x7e\xab\x9d\x3a\x88\xde\xc8\xb0\x31", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x5f\x39\x7b\xf0\x30\x84\x82\x0c\xc8\x81\x0d\x52\xe5\xb6\x66\xe9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x63\xfa\xfa\xbb\x72\xc0\x7b\xfb\xd3\xdd\xc9\xb1\x20\x31\x04\xb8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x68\x3e\x21\x40\x58\x5b\x18\x45\x2d\xd4\xff\xbb\x93\xc9\x5d\xf9", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x28\x68\x94\xe4\x8e\x53\x7f\x87\x63\xb5\x67\x07\xd7\xd1\x55\xc8", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\xa4\x23\xde\xab\xc1\x73\xdc\xf7\xe2\xc4\xc5\x3e\x77\xd3\x7c\xd1", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\xeb\x81\x68\x31\x3e\x1c\xfd\xfd\xb5\xe9\x86\xd5\x42\x9c\xf1\x72", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x27\x12\x7d\xaa\xfc\x9a\xcc\xd2\xfb\x33\x4e\xc3\xeb\xa5\x23\x23", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\xee\x07\x15\xb9\x6f\x72\xe3\xf7\xa2\x2a\x50\x64\xfc\x59\x2f\x4c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x29\xee\x52\x67\x70\xf2\xa1\x1d\xcf\xa9\x89\xd1\xce\x88\x83\x0f", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x04\x93\x37\x0e\x05\x4b\x09\x87\x11\x30\xfe\x49\xaf\x73\x0a\x5a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x9b\x7b\x94\x0f\x6c\x50\x9f\x9e\x44\xa4\xee\x14\x04\x48\xee\x46", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x29\x15\xbe\x4a\x1e\xcf\xdc\xbe\x3e\x02\x38\x11\xa1\x2b\xb6\xc7", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x72\x40\xe5\x24\xbc\x51\xd8\xc4\xd4\x40\xb1\xbe\x55\xd1\x06\x2c", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\xda\x63\x03\x9d\x38\xcb\x46\x12\xb2\xdc\x36\xba\x26\x68\x4b\x93", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x0f\x59\xcb\x5a\x4b\x52\x2e\x2a\xc5\x6c\x1a\x64\xf5\x58\xad\x9a", },
-{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x7b\xfe\x9d\x87\x6c\x6d\x63\xc1\xd0\x35\xda\x8f\xe2\x1c\x40\x9d", },
-};
-
-
-static void AES128_testRun(void)
-{
- uint32_t buf[4];
- BlockCipher *c = AES128_stackinit();
- for (size_t i=0;i<countof(ECB128_Tests);++i)
- {
- const struct ECB128_Test *t = &ECB128_Tests[i];
- cipher_set_key(c, t->key);
-
- memcpy(buf, t->pt, 16);
- cipher_ecb_encrypt(c, buf);
- ASSERT(memcmp(buf, t->ct, 16) == 0);
- cipher_ecb_decrypt(c, buf);
- ASSERT(memcmp(buf, t->pt, 16) == 0);
- }
-
- uint8_t data[16];
- memset(data, 0, 16);
- cipher_set_key(c, "0123456789ABCDEF");
- for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
- for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
- ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0);
-}
-
-static void AES192_testRun(void)
-{
- uint32_t buf[4];
- BlockCipher *c = AES192_stackinit();
- for (size_t i=0;i<countof(ECB192_Tests);++i)
- {
- const struct ECB192_Test *t = &ECB192_Tests[i];
- cipher_set_key(c, t->key);
-
- memcpy(buf, t->pt, 16);
- cipher_ecb_encrypt(c, buf);
- ASSERT(memcmp(buf, t->ct, 16) == 0);
- cipher_ecb_decrypt(c, buf);
- ASSERT(memcmp(buf, t->pt, 16) == 0);
- }
-
- uint8_t data[16];
- memset(data, 0, 16);
- cipher_set_key(c, "0123456789ABCDEF01234567");
- for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
- for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
- ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0);
-}
-
-static void AES256_testRun(void)
-{
- uint32_t buf[4];
- BlockCipher *c = AES256_stackinit();
- for (size_t i=0;i<countof(ECB256_Tests);++i)
- {
- const struct ECB256_Test *t = &ECB256_Tests[i];
- cipher_set_key(c, t->key);
-
- memcpy(buf, t->pt, 16);
- cipher_ecb_encrypt(c, buf);
- ASSERT(memcmp(buf, t->ct, 16) == 0);
- cipher_ecb_decrypt(c, buf);
- ASSERT(memcmp(buf, t->pt, 16) == 0);
- }
-
- uint8_t data[16];
- memset(data, 0, 16);
- cipher_set_key(c, "0123456789ABCDEF0123456789ABCDEF");
- for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
- for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
- ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0);
-}
-
-int AES_testRun(void)
-{
- AES128_testRun();
- AES192_testRun();
- AES256_testRun();
-
- //BlockCipher *c = AES192_stackinit();
- //cipher_set_key(c, "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5\x62\xf8\xea\xd2\x52\x2c\x6b\x7b");
-
- return 0;
-}
-
-TEST_MAIN(AES);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Blowfish implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- *
- */
-
-#include "blowfish.h"
-#include <cfg/macros.h>
-#include <cpu/byteorder.h>
-#include <string.h>
-
-#define N 16
-
-static const uint32_t P[16 + 2] =
-{
- 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,
- 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,
- 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,
- 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,
- 0x9216D5D9L, 0x8979FB1BL
-};
-
-static const uint32_t S[4][256] =
-{
- {
- 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,
- 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,
- 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,
- 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,
- 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,
- 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,
- 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,
- 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,
- 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,
- 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,
- 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,
- 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,
- 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,
- 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,
- 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,
- 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,
- 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,
- 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,
- 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,
- 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,
- 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,
- 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,
- 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,
- 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,
- 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,
- 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,
- 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,
- 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,
- 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,
- 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,
- 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,
- 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,
- 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,
- 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,
- 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,
- 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,
- 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,
- 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,
- 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,
- 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,
- 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,
- 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,
- 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,
- 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,
- 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,
- 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,
- 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,
- 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,
- 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,
- 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,
- 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,
- 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,
- 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,
- 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,
- 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,
- 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,
- 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,
- 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,
- 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,
- 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,
- 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,
- 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,
- 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,
- 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL,
- },
- {
- 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,
- 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,
- 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,
- 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,
- 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,
- 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,
- 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,
- 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,
- 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,
- 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,
- 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,
- 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,
- 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,
- 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,
- 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,
- 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,
- 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,
- 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,
- 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,
- 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,
- 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,
- 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,
- 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,
- 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,
- 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,
- 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,
- 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,
- 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,
- 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,
- 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,
- 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,
- 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,
- 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,
- 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,
- 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,
- 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,
- 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,
- 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,
- 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,
- 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,
- 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,
- 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,
- 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,
- 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,
- 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,
- 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,
- 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,
- 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,
- 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,
- 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,
- 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,
- 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,
- 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,
- 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,
- 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,
- 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,
- 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,
- 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,
- 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,
- 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,
- 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,
- 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,
- 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,
- 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L,
- },
- {
- 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,
- 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,
- 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,
- 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,
- 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,
- 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,
- 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,
- 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,
- 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,
- 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,
- 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,
- 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,
- 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,
- 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,
- 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,
- 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,
- 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,
- 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,
- 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,
- 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,
- 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,
- 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,
- 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,
- 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,
- 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,
- 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,
- 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,
- 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,
- 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,
- 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,
- 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,
- 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,
- 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,
- 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,
- 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,
- 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,
- 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,
- 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,
- 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,
- 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,
- 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,
- 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,
- 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,
- 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,
- 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,
- 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,
- 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,
- 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,
- 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,
- 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,
- 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,
- 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,
- 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,
- 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,
- 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,
- 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,
- 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,
- 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,
- 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,
- 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,
- 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,
- 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,
- 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,
- 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L,
- },
- {
- 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,
- 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,
- 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,
- 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,
- 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,
- 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,
- 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,
- 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,
- 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,
- 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,
- 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,
- 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,
- 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,
- 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,
- 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,
- 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,
- 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,
- 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,
- 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,
- 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,
- 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,
- 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,
- 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,
- 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,
- 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,
- 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,
- 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,
- 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,
- 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,
- 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,
- 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,
- 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,
- 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,
- 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,
- 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,
- 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,
- 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,
- 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,
- 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,
- 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,
- 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,
- 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,
- 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,
- 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,
- 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,
- 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,
- 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,
- 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,
- 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,
- 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,
- 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,
- 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,
- 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,
- 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,
- 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,
- 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,
- 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,
- 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,
- 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,
- 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,
- 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,
- 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,
- 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,
- 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L,
- },
-};
-
-INLINE uint32_t F(uint32_t S[4][256], uint32_t x)
-{
- uint8_t a, b, c, d;
- uint32_t y;
-
- d = x & 0x00FF;
- x >>= 8;
- c = x & 0x00FF;
- x >>= 8;
- b = x & 0x00FF;
- x >>= 8;
- a = x & 0x00FF;
-
- y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d];
-
- return y;
-}
-
-
-static void blowfish_enc(BlockCipher *ctx_, void *block)
-{
- BlowfishContext *ctx = (BlowfishContext *)ctx_;
- uint32_t Xl;
- uint32_t Xr;
-
- Xl = be32_to_cpu(((uint32_t*)block)[0]);
- Xr = be32_to_cpu(((uint32_t*)block)[1]);
-
- for (int i = 0; i < N; ++i) {
- Xl = Xl ^ ctx->P[i];
- Xr = F(ctx->S, Xl) ^ Xr;
-
- SWAP(Xl, Xr);
- }
-
- SWAP(Xl, Xr);
-
- Xr = Xr ^ ctx->P[N];
- Xl = Xl ^ ctx->P[N + 1];
-
- ((uint32_t*)block)[0] = cpu_to_be32(Xl);
- ((uint32_t*)block)[1] = cpu_to_be32(Xr);
-}
-
-static void blowfish_dec(BlockCipher *ctx_, void *block)
-{
- BlowfishContext *ctx = (BlowfishContext *)ctx_;
- uint32_t Xl;
- uint32_t Xr;
-
- Xl = be32_to_cpu(((uint32_t*)block)[0]);
- Xr = be32_to_cpu(((uint32_t*)block)[1]);
-
- for (int i = N + 1; i > 1; --i) {
- Xl = Xl ^ ctx->P[i];
- Xr = F(ctx->S, Xl) ^ Xr;
-
- SWAP(Xl, Xr);
- }
-
- SWAP(Xl, Xr);
-
- Xr = Xr ^ ctx->P[1];
- Xl = Xl ^ ctx->P[0];
-
- ((uint32_t*)block)[0] = cpu_to_be32(Xl);
- ((uint32_t*)block)[1] = cpu_to_be32(Xr);
-}
-
-static void blowfish_setkey(BlockCipher *ctx_, const void *key_, size_t klen)
-{
- BlowfishContext *ctx = (BlowfishContext *)ctx_;
- const uint8_t *key = (const uint8_t*)key_;
- int i, k;
- size_t j;
-
- STATIC_ASSERT(sizeof(P) == sizeof(ctx->P));
- STATIC_ASSERT(sizeof(S) == sizeof(ctx->S));
-
- for (i = 0; i < 4; ++i)
- for (k = 0; k < 256; ++k)
- ctx->S[i][k] = S[i][k];
-
- j = 0;
- for (i = 0; i < N + 2; ++i)
- {
- uint32_t data = 0x00000000;
- for (k = 0; k < 4; ++k)
- {
- data = (data << 8) | key[j];
- j = j + 1;
- if (j >= klen)
- j = 0;
- }
- ctx->P[i] = P[i] ^ data;
- }
-
- uint32_t data[2] = { 0x00000000, 0x00000000 };
-
- for (i = 0; i < N + 2; i += 2)
- {
- blowfish_enc(ctx_, data);
-
- ctx->P[i] = be32_to_cpu(data[0]);
- ctx->P[i + 1] = be32_to_cpu(data[1]);
- }
-
- for (i = 0; i < 4; ++i)
- {
- for (j = 0; j < 256; j += 2)
- {
- blowfish_enc(ctx_, data);
-
- ctx->S[i][j] = be32_to_cpu(data[0]);
- ctx->S[i][j + 1] = be32_to_cpu(data[1]);
- }
- }
-}
-
-/*****************************************************************************/
-
-void blowfish_init(BlowfishContext *ctx)
-{
- ctx->c.set_key = blowfish_setkey;
- ctx->c.enc_block = blowfish_enc;
- ctx->c.dec_block = blowfish_dec;
- ctx->c.key_len = 16;
- ctx->c.block_len = 8;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Blowfish implementation
- *
- * \author Giovanni Bajo <rasky@develer.com>
- *
- *
- */
-
-#ifndef SEC_CIPHER_BLOWFISH_H
-#define SEC_CIPHER_BLOWFISH_H
-
-#include <sec/cipher.h>
-#include <alloca.h>
-
-typedef struct BlowfishContext
-{
- BlockCipher c;
- uint32_t S[4][256];
- uint32_t P[18];
-
-} BlowfishContext;
-
-void blowfish_init(BlowfishContext *ctx);
-
-#define blowfish_stackinit(...) \
- ({ BlowfishContext *ctx = alloca(sizeof(BlowfishContext)); blowfish_init(ctx, ##__VA_ARGS__); &ctx->c; })
-
-int blowfish_testSetup(void);
-int blowfish_testRun(void);
-int blowfish_testTearDown(void);
-
-#endif /* SEC_CIPHER_BLOWFISH_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Blowfish testsuite
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "blowfish.h"
-#include <cpu/byteorder.h>
-#include <string.h>
-
-/*
- * Author : Randy L. Milbert
- * E-mail : rmilbert@mit.edu
- * Date : 18 Jun 97
- * Description: Eric Young's test vectors for Blowfish.
- */
-
-#define NUM_VARIABLE_KEY_TESTS 34
-#define NUM_SET_KEY_TESTS 24
-
-/* plaintext bytes -- left halves */
-static const uint32_t plaintext_l[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
- 0x00000000l, 0xFFFFFFFFl, 0x10000000l, 0x11111111l, 0x11111111l,
- 0x01234567l, 0x00000000l, 0x01234567l, 0x01A1D6D0l, 0x5CD54CA8l,
- 0x0248D438l, 0x51454B58l, 0x42FD4430l, 0x059B5E08l, 0x0756D8E0l,
- 0x762514B8l, 0x3BDD1190l, 0x26955F68l, 0x164D5E40l, 0x6B056E18l,
- 0x004BD6EFl, 0x480D3900l, 0x437540C8l, 0x072D43A0l, 0x02FE5577l,
- 0x1D9D5C50l, 0x30553228l, 0x01234567l, 0x01234567l, 0x01234567l,
- 0xFFFFFFFFl, 0x00000000l, 0x00000000l, 0xFFFFFFFFl, 0xFEDCBA98l,
- 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
- 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
- 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
- 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l,
- 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l };
-
-/* plaintext bytes -- right halves */
-static const uint32_t plaintext_r[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
- 0x00000000l, 0xFFFFFFFFl, 0x00000001l, 0x11111111l, 0x11111111l,
- 0x89ABCDEFl, 0x00000000l, 0x89ABCDEFl, 0x39776742l, 0x3DEF57DAl,
- 0x06F67172l, 0x2DDF440Al, 0x59577FA2l, 0x51CF143Al, 0x774761D2l,
- 0x29BF486Al, 0x49372802l, 0x35AF609Al, 0x4F275232l, 0x759F5CCAl,
- 0x09176062l, 0x6EE762F2l, 0x698F3CFAl, 0x77075292l, 0x8117F12Al,
- 0x18F728C2l, 0x6D6F295Al, 0x89ABCDEFl, 0x89ABCDEFl, 0x89ABCDEFl,
- 0xFFFFFFFFl, 0x00000000l, 0x00000000l, 0xFFFFFFFFl, 0x76543210l,
- 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
- 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
- 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
- 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l,
- 0x76543210l, 0x76543210l, 0x76543210l };
-
-/* key bytes for variable key tests */
-static const uint8_t variable_key[NUM_VARIABLE_KEY_TESTS][8] = {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 },
- { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
- { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 },
- { 0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57 },
- { 0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E },
- { 0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86 },
- { 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E },
- { 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6 },
- { 0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE },
- { 0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6 },
- { 0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE },
- { 0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16 },
- { 0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F },
- { 0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46 },
- { 0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E },
- { 0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76 },
- { 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07 },
- { 0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F },
- { 0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7 },
- { 0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF },
- { 0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6 },
- { 0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF },
- { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
- { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E },
- { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
- { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }};
-
-/* key bytes for set key tests */
-static const uint8_t set_key[24] = {
- 0xF0, 0xE1, 0xD2, 0xC3, 0xB4, 0xA5, 0x96, 0x87,
- 0x78, 0x69, 0x5A, 0x4B, 0x3C, 0x2D, 0x1E, 0x0F,
- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
-
-/* ciphertext bytes -- left halves */
-static const uint32_t ciphertext_l[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
- 0x4EF99745l, 0x51866FD5l, 0x7D856F9Al, 0x2466DD87l, 0x61F9C380l,
- 0x7D0CC630l, 0x4EF99745l, 0x0ACEAB0Fl, 0x59C68245l, 0xB1B8CC0Bl,
- 0x1730E577l, 0xA25E7856l, 0x353882B1l, 0x48F4D088l, 0x432193B7l,
- 0x13F04154l, 0x2EEDDA93l, 0xD887E039l, 0x5F99D04Fl, 0x4A057A3Bl,
- 0x452031C1l, 0x7555AE39l, 0x53C55F9Cl, 0x7A8E7BFAl, 0xCF9C5D7Al,
- 0xD1ABB290l, 0x55CB3774l, 0xFA34EC48l, 0xA7907951l, 0xC39E072Dl,
- 0x014933E0l, 0xF21E9A77l, 0x24594688l, 0x6B5C5A9Cl, 0xF9AD597Cl,
- 0xE91D21C1l, 0xE9C2B70Al, 0xBE1E6394l, 0xB39E4448l, 0x9457AA83l,
- 0x8BB77032l, 0xE87A244El, 0x15750E7Al, 0x122BA70Bl, 0x3A833C9Al,
- 0x9409DA87l, 0x884F8062l, 0x1F85031Cl, 0x79D9373Al, 0x93142887l,
- 0x03429E83l, 0xA4299E27l, 0xAFD5AED1l, 0x10851C0El, 0xE6F51ED7l,
- 0x64A6E14Al, 0x80C7D7D4l, 0x05044B62l };
-
-/* ciphertext bytes -- right halves */
-static const uint32_t ciphertext_r[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = {
- 0x6198DD78l, 0xB85ECB8Al, 0x613063F2l, 0x8B963C9Dl, 0x2281B096l,
- 0xAFDA1EC7l, 0x6198DD78l, 0xC6A0A28Dl, 0xEB05282Bl, 0x250F09A0l,
- 0x8BEA1DA4l, 0xCF2651EBl, 0x09CE8F1Al, 0x4C379918l, 0x8951FC98l,
- 0xD69D1AE5l, 0xFFD39C79l, 0x3C2DA6E3l, 0x5B163969l, 0x24D3977Bl,
- 0xE4FADA8El, 0xF59B87BDl, 0xB49FC019l, 0x937E89A3l, 0x4986ADB5l,
- 0x658BC778l, 0xD13EF201l, 0x47B268B2l, 0x08EA3CAEl, 0x9FAC631Dl,
- 0xCDAFF6E4l, 0xB71C49BCl, 0x5754369Al, 0x5D9E0A5Al, 0x49DB005El,
- 0xD961A6D6l, 0x1BC65CF3l, 0x08640F05l, 0x1BDB1E6El, 0xB1928C0Dl,
- 0xF960629Dl, 0x2CC85E82l, 0x4F4EC577l, 0x3AB64AE0l, 0xFFC537F6l,
- 0xA90F6BF2l, 0x5060B8B4l, 0x19E11968l, 0x714CA34Fl, 0xEE3BE15Cl,
- 0x8CE2D14Bl, 0x469FF67Bl, 0xC1BC96A8l, 0x3858DA9Fl, 0x9B9DB21Fl,
- 0xFD36B46Fl, 0x5A5479ADl, 0xFA52D080l };
-
-
-
-int blowfish_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int blowfish_testTearDown(void)
-{
- return 0;
-}
-
-int blowfish_testRun(void)
-{
- // NOTE: we use a static variable here to avoid stack overflows due to the huge
- // context structure of blowfish.
- static BlowfishContext ctx;
- blowfish_init(&ctx);
- BlockCipher *c = &ctx.c;
-
- for (int i=0; i<NUM_VARIABLE_KEY_TESTS; ++i)
- {
- uint32_t data[2] = { cpu_to_be32(plaintext_l[i]), cpu_to_be32(plaintext_r[i]) };
-
- cipher_set_vkey(c, variable_key[i], 8);
-
- cipher_ecb_encrypt(c, data);
- ASSERT(data[0] == cpu_to_be32(ciphertext_l[i]));
- ASSERT(data[1] == cpu_to_be32(ciphertext_r[i]));
-
- cipher_ecb_decrypt(c, data);
- ASSERT(data[0] == cpu_to_be32(plaintext_l[i]));
- ASSERT(data[1] == cpu_to_be32(plaintext_r[i]));
- }
-
- for (int j=0; j<NUM_SET_KEY_TESTS; ++j)
- {
- int i = j + NUM_VARIABLE_KEY_TESTS;
- uint32_t data[2] = { cpu_to_be32(plaintext_l[i]), cpu_to_be32(plaintext_r[i]) };
-
- cipher_set_vkey(c, &set_key[0], j+1);
-
- cipher_ecb_encrypt(c, data);
- ASSERT(data[0] == cpu_to_be32(ciphertext_l[i]));
- ASSERT(data[1] == cpu_to_be32(ciphertext_r[i]));
-
- cipher_ecb_decrypt(c, data);
- ASSERT(data[0] == cpu_to_be32(plaintext_l[i]));
- ASSERT(data[1] == cpu_to_be32(plaintext_r[i]));
- }
-
- uint8_t data[8];
- memset(data, 0, 8);
- cipher_set_vkey(c, "0123456789", 10);
- for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data);
- for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data);
- ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00", 8) == 0);
-
- return 0;
-}
-
-TEST_MAIN(blowfish);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Entropy pool generic interface
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_ENTROPY_H
-#define SEC_ENTROPY_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-/**
- * Maximum number of different sources of entropy available in BeRTOS.
- *
- * Increasing this value will likely make entropy pools use more RAM for their operations,
- * so it should be kept to the minimum necessary for a given project.
- */
-#define CONFIG_ENTROPY_NUM_SOURCES 8
-
-typedef struct EntropyPool
-{
- void (*add_entropy)(struct EntropyPool *ctx, int source_idx,
- const uint8_t *data, size_t len,
- int entropy);
- bool (*seeding_ready)(struct EntropyPool *ctx);
- void (*make_seed)(struct EntropyPool *ctx, uint8_t *out, size_t len);
-
-} EntropyPool;
-
-
-/**
- * Add some data samples containing entropy into the pool.
- * the samples are in the buffer pointed by \a data for a total of \a len
- * bytes. \a entropy is the number of bits of estimated entropy in the
- * samples. \a source_idx is the index of the entropy source.
- */
-INLINE void entropy_add(EntropyPool *e, int source_idx,
- const uint8_t *data, size_t len,
- int entropy)
-{
- ASSERT(e->add_entropy);
- e->add_entropy(e, source_idx, data, len, entropy);
-}
-
-/**
- * Check if the generator is ready to produce a new seed.
- */
-INLINE bool entropy_seeding_ready(EntropyPool *ctx)
-{
- ASSERT(ctx->seeding_ready);
- return ctx->seeding_ready(ctx);
-}
-
-/**
- * Generate a new seed of the specified length.
- *
- * \note This should not be abused to generate a very long seed, since the pool
- * cannot hold lots of entropy.
- */
-INLINE void entropy_make_seed(EntropyPool *ctx, uint8_t *out, size_t len)
-{
- ASSERT(ctx->make_seed);
- ctx->make_seed(ctx, out, len);
-}
-
-#endif /* SEC_ENTROPY_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow entropy pool
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "yarrow_pool.h"
-#include <cfg/macros.h>
-#include <sec/hash/sha1.h>
-#include <sec/util.h>
-#include <string.h>
-
-#define CONFIG_YARROW_POOL_FAST_RESEEDING_THRESHOLD 100
-#define CONFIG_YARROW_POOL_SLOW_RESEEDING_THRESHOLD 160
-#define CONFIG_YARROW_POOL_MAX_ENTROPY_DENSITY 50 // percent
-#define CONFIG_YARROW_POOL_RESEED_ITERATIONS 80
-
-static void yarrow_fast_reseed(YarrowPoolContext *ctx, uint8_t *out, size_t len)
-{
- Hash *h = &ctx->pools[0].hash.h;
- size_t hlen = hash_digest_len(h);
-
- uint8_t v0[hlen];
- memcpy(v0, hash_final(h), hlen);
-
- uint8_t vcur[hlen];
- memcpy(vcur, v0, hlen);
-
- for (uint32_t i=1;i<=CONFIG_YARROW_POOL_RESEED_ITERATIONS; ++i) {
- hash_begin(h);
- hash_update(h, vcur, hlen);
- hash_update(h, v0, hlen);
- hash_update(h, &i, 4);
- memcpy(vcur, hash_final(h), hlen);
- }
-
-
- // FIXME: yarrow explains how to expand the hash digest if it's
- // smaller than the output size. This is not the case for now,
- // so we it's not implemented here.
- ASSERT(len < hlen);
- memcpy(out, vcur, len);
-
- // Reinitialize the fast pool
- hash_begin(h);
- for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
- ctx->pools[0].entropy[i] = 0;
-
- PURGE(v0);
- PURGE(vcur);
-}
-
-static void yarrow_slow_reseed(YarrowPoolContext *ctx, uint8_t *out, size_t len)
-{
- uint8_t *data = hash_final(&ctx->pools[1].hash.h);
-
- hash_update(&ctx->pools[0].hash.h, data, hash_digest_len(&ctx->pools[1].hash.h));
- yarrow_fast_reseed(ctx, out, len);
-
- // Reinitialize the slow pool
- hash_begin(&ctx->pools[1].hash.h);
- for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
- ctx->pools[1].entropy[i] = 0;
-}
-
-static void yarrow_add_entropy(EntropyPool *ctx_, int source_idx, const uint8_t *data, size_t len, int entropy)
-{
- YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_;
-
- ASSERT(source_idx < CONFIG_ENTROPY_NUM_SOURCES);
-
- int curpool = ctx->sources[source_idx].curpool;
- ctx->sources[source_idx].curpool = 1 - ctx->sources[source_idx].curpool;
-
- // TODO: Yarrow also describes a statistical entropy estimator
- // Currently, we just use the provided entropy and the maximum
- // density.
- entropy = MIN((size_t)entropy, len*8*100/CONFIG_YARROW_POOL_MAX_ENTROPY_DENSITY);
-
- hash_update(&ctx->pools[curpool].hash.h, data, len);
- ctx->pools[curpool].entropy[source_idx] += entropy;
-}
-
-static bool yarrow_fast_reseeding_ready(YarrowPoolContext *ctx)
-{
- for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
- if (ctx->pools[0].entropy[i] >=
- CONFIG_YARROW_POOL_FAST_RESEEDING_THRESHOLD)
- return 1;
- return 0;
-}
-
-static bool yarrow_slow_reseeding_ready(YarrowPoolContext *ctx)
-{
- int count = 0;
-
- for (int i=0; i<CONFIG_ENTROPY_NUM_SOURCES; ++i)
- if (ctx->pools[1].entropy[i] >=
- CONFIG_YARROW_POOL_SLOW_RESEEDING_THRESHOLD) {
- ++count;
- if (count == 2)
- return 1;
- }
-
- return 0;
-}
-
-static bool yarrow_reseeding_ready(EntropyPool *ctx_)
-{
- YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_;
- return yarrow_fast_reseeding_ready(ctx) || yarrow_slow_reseeding_ready(ctx);
-}
-
-static void yarrow_reseed(EntropyPool *ctx_, uint8_t *out, size_t len)
-{
- YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_;
-
- if (yarrow_slow_reseeding_ready(ctx))
- yarrow_slow_reseed(ctx, out, len);
- else {
- ASSERT(yarrow_fast_reseeding_ready(ctx));
- yarrow_fast_reseed(ctx, out, len);
- }
-}
-
-/**********************************************************************/
-
-void yarrowpool_init(YarrowPoolContext *ctx)
-{
- ctx->e.add_entropy = yarrow_add_entropy;
- ctx->e.seeding_ready = yarrow_reseeding_ready;
- ctx->e.make_seed = yarrow_reseed;
-
- for (int i=0; i<2; ++i) {
- memset(ctx->pools[i].entropy, 0, sizeof(ctx->pools[i].entropy));
- SHA1_init(&ctx->pools[i].hash);
- hash_begin(&ctx->pools[i].hash.h);
- }
-
- memset(ctx->sources, 0, sizeof(ctx->sources));
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow pool implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_ENTROPY_YARROW_POOL_H
-#define SEC_ENTROPY_YARROW_POOL_H
-
-#include <sec/entropy.h>
-#include <sec/hash/sha1.h>
-
-typedef struct
-{
- EntropyPool e;
-
- struct YarrowPool
- {
- SHA1_Context hash;
- int entropy[CONFIG_ENTROPY_NUM_SOURCES];
- } pools[2];
-
- struct YarrowSources
- {
- int curpool;
- } sources[CONFIG_ENTROPY_NUM_SOURCES];
-
-} YarrowPoolContext;
-
-void yarrowpool_init(YarrowPoolContext *ctx);
-
-#endif /* SEC_ENTROPY_YARROW_POOL_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for hashing algorithms.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_HASH_H
-#define SEC_HASH_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct Hash
-{
- void (*begin)(struct Hash *h);
- void (*update)(struct Hash *h, const void *data, size_t len);
- uint8_t* (*final)(struct Hash *h);
- uint8_t digest_len;
- uint8_t block_len;
-} Hash;
-
-/**
- * Initialize a hash computation.
- */
-INLINE void hash_begin(Hash *h)
-{
- ASSERT(h->begin);
- h->begin(h);
-}
-
-/**
- * Add some data to the computation.
- */
-INLINE void hash_update(Hash *h, const void* data, size_t len)
-{
- ASSERT(h->update);
- h->update(h, data, len);
-}
-
-/**
- * Finalize the hash computation and return the digest.
- *
- * \note This function must be called exactly once per each computation.
- * Calling it twice leads to undefined behaviour.
- *
- * \note The pointer returned is within the hash context structure \a h, so it
- * has the same lifetime as the hash instance. The data will be invalidated
- * as soon as \a hash_begin is called again on the same instance.
- */
-INLINE uint8_t* hash_final(Hash *h)
-{
- ASSERT(h->final);
- return h->final(h);
-}
-
-/**
- * Return the digest length in bytes.
- */
-INLINE int hash_digest_len(Hash *h)
-{
- return h->digest_len;
-}
-
-/*
- * Return the internal block length in bytes.
- *
- * Hash functions operate on a fixed-size block. This information is useful
- * for composite functions like HMAC to adjust their internal operations.
- */
-INLINE int hash_block_len(Hash *h)
-{
- return h->block_len;
-}
-
-#endif /* SEC_HASH_H */
+++ /dev/null
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest. This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-#include "md5.h"
-#include <sec/util.h>
-#include <cpu/byteorder.h>
-#include <string.h>
-
-static void MD5Transform(uint32_t buf[4], uint32_t in[16]);
-
-static void byteReverse(uint32_t *buf, unsigned longs)
-{
- do {
- *buf = le32_to_cpu(*buf);
- ++buf;
- } while (--longs);
-}
-
-/*
- * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-static void MD5_begin(Hash *h)
-{
- MD5_Context *ctx = (MD5_Context *)h;
-
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
-
- ctx->bits = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-static void MD5_update(Hash *h, const void* vbuf, size_t len)
-{
- MD5_Context *ctx = (MD5_Context *)h;
- const char *buf = (const char *)vbuf;
- uint32_t t;
-
- /* Update bitcount */
- t = (ctx->bits >> 3) & 0x3f; /* Bytes already in shsInfo->data */
- ctx->bits += len*8;
-
- /* Handle any leading odd-sized chunks */
-
- if (t) {
- uint8_t *p = (uint8_t*) ctx->in + t;
-
- t = 64 - t;
- if (len < t) {
- memcpy(p, buf, len);
- return;
- }
- memcpy(p, buf, t);
- byteReverse((uint32_t*)ctx->in, 16);
- MD5Transform(ctx->buf, (uint32_t*)ctx->in);
- buf += t;
- len -= t;
- }
- /* Process data in 64-byte chunks */
-
- while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse((uint32_t*)ctx->in, 16);
- MD5Transform(ctx->buf, (uint32_t*)ctx->in);
- buf += 64;
- len -= 64;
- }
-
- /* Handle any remaining bytes of data. */
- memcpy(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-static uint8_t* MD5_final(struct Hash *h)
-{
- MD5_Context *ctx = (MD5_Context *)h;
- unsigned count;
- unsigned char *p;
-
- /* Compute number of bytes mod 64 */
- count = (ctx->bits >> 3) & 0x3F;
-
- /* Set the first char of padding to 0x80. This is safe since there is
- always at least one byte free */
- p = ctx->in + count;
- *p++ = 0x80;
-
- /* Bytes of padding needed to make 64 bytes */
- count = 64 - 1 - count;
-
- /* Pad out to 56 mod 64 */
- if (count < 8) {
- /* Two lots of padding: Pad the first block to 64 bytes */
- memset(p, 0, count);
- byteReverse((uint32_t*)ctx->in, 16);
- MD5Transform(ctx->buf, (uint32_t *) ctx->in);
-
- /* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
- } else {
- /* Pad block to 56 bytes */
- memset(p, 0, count - 8);
- }
- byteReverse((uint32_t*)ctx->in, 14);
-
- /* Append length in bits and transform */
- ((uint32_t*) ctx->in)[14] = (uint32_t)ctx->bits;
- ((uint32_t*) ctx->in)[15] = (uint32_t)(ctx->bits >> 32);
-
- MD5Transform(ctx->buf, (uint32_t *) ctx->in);
- byteReverse((uint32_t*)ctx->buf, 4);
-
- PURGE(ctx->in);
- PURGE(ctx->bits);
-
- return ctx->buf;
-}
-
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
- ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data. MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void MD5Transform(uint32_t buf[4], uint32_t in[16])
-{
- register uint32_t a, b, c, d;
-
- a = buf[0];
- b = buf[1];
- c = buf[2];
- d = buf[3];
-
- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
- buf[0] += a;
- buf[1] += b;
- buf[2] += c;
- buf[3] += d;
-}
-
-/*******************************************************************/
-
-void MD5_init(MD5_Context *ctx)
-{
- ctx->h.begin = MD5_begin;
- ctx->h.update = MD5_update;
- ctx->h.final = MD5_final;
- ctx->h.digest_len = 16;
- ctx->h.block_len = 64;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief MD5 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "md5"
- */
-
-#ifndef SEC_HASH_MD5_H
-#define SEC_HASH_MD5_H
-
-#include <sec/hash.h>
-#include <cfg/compiler.h>
-#include <alloca.h>
-
-typedef struct
-{
- Hash h;
- uint32_t buf[4];
- uint8_t in[64];
- uint64_t bits;
-
-} MD5_Context;
-
-void MD5_init(MD5_Context *ctx);
-
-#define MD5_stackinit(...) \
- ({ MD5_Context *ctx = alloca(sizeof(MD5_Context)); MD5_init(ctx , ##__VA_ARGS__); &ctx->h; })
-
-int MD5_testSetup(void);
-int MD5_testRun(void);
-int MD5_testTearDown(void);
-
-#endif /* SEC_HASH_MD5_H */
+++ /dev/null
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "md5.h"
-#include <string.h>
-
-int MD5_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int MD5_testTearDown(void)
-{
- return 0;
-}
-
-int MD5_testRun(void)
-{
- int i;
- MD5_Context context;
- MD5_init(&context);
-
- hash_begin(&context.h);
- hash_update(&context.h, "abc", 3);
- ASSERT(memcmp(hash_final(&context.h), "\x90\x01\x50\x98\x3C\xD2\x4F\xB0\xD6\x96\x3F\x7D\x28\xE1\x7F\x72", 16) == 0);
-
- hash_begin(&context.h);
- hash_update(&context.h, "aaa", 3);
- ASSERT(memcmp(hash_final(&context.h), "\x47\xBC\xE5\xC7\x4F\x58\x9F\x48\x67\xDB\xD5\x7E\x9C\xA9\xF8\x08", 16) == 0);
-
- hash_begin(&context.h);
- hash_update(&context.h, "abcdefghijklmnopqrstuvwxyz", 26);
- ASSERT(memcmp(hash_final(&context.h), "\xC3\xFC\xD3\xD7\x61\x92\xE4\x00\x7D\xFB\x49\x6C\xCA\x67\xE1\x3B", 16) == 0);
-
- hash_begin(&context.h);
- hash_update(&context.h, "0123456789", 10);
- ASSERT(memcmp(hash_final(&context.h), "\x78\x1E\x5E\x24\x5D\x69\xB5\x66\x97\x9B\x86\xE2\x8D\x23\xF2\xC7", 16) == 0);
-
- hash_begin(&context.h);
- for (i = 0; i < 1000; i++)
- hash_update(&context.h, "a", 1);
- ASSERT(memcmp(hash_final(&context.h), "\xCA\xBE\x45\xDC\xC9\xAE\x5B\x66\xBA\x86\x60\x0C\xCA\x6B\x8B\xA8", 16) == 0);
-
- hash_begin(&context.h);
- for (i = 0; i < 1000000; i++)
- hash_update(&context.h, "a", 1);
- ASSERT(memcmp(hash_final(&context.h), "\x77\x07\xd6\xae\x4e\x02\x7c\x70\xee\xa2\xa9\x35\xc2\x29\x6f\x21", 16) == 0);
-
- return 0;
-}
-
-TEST_MAIN(MD5);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief RIPEMD-160 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-/*
- *
- * RIPEMD160.c : RIPEMD-160 implementation
- *
- * Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
- *
- * ===================================================================
- * The contents of this file are dedicated to the public domain. To
- * the extent that dedication to the public domain is not available,
- * everyone is granted a worldwide, perpetual, royalty-free,
- * non-exclusive license to exercise all rights associated with the
- * contents of this file for any purpose whatsoever.
- * No rights are reserved.
- * ===================================================================
- */
-
-#include "ripemd.h"
-#include <cfg/debug.h>
-#include <cfg/compiler.h>
-#include <cpu/byteorder.h>
-#include <string.h>
-
-#define RIPEMD160_DIGEST_SIZE 20
-
-
-/* cyclic left-shift the 32-bit word n left by s bits */
-#define ROL(s, n) ROTL(n, s)
-
-/* Initial values for the chaining variables.
- * This is just 0123456789ABCDEFFEDCBA9876543210F0E1D2C3 in little-endian. */
-static const uint32_t initial_h[5] = { 0x67452301u, 0xEFCDAB89u, 0x98BADCFEu, 0x10325476u, 0xC3D2E1F0u };
-
-/* Ordering of message words. Based on the permutations rho(i) and pi(i), defined as follows:
- *
- * rho(i) := { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 }[i] 0 <= i <= 15
- *
- * pi(i) := 9*i + 5 (mod 16)
- *
- * Line | Round 1 | Round 2 | Round 3 | Round 4 | Round 5
- * -------+-----------+-----------+-----------+-----------+-----------
- * left | id | rho | rho^2 | rho^3 | rho^4
- * right | pi | rho pi | rho^2 pi | rho^3 pi | rho^4 pi
- */
-
-/* Left line */
-static const uint8_t RL[5][16] = {
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* Round 1: id */
- { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 }, /* Round 2: rho */
- { 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 }, /* Round 3: rho^2 */
- { 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 }, /* Round 4: rho^3 */
- { 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 } /* Round 5: rho^4 */
-};
-
-/* Right line */
-static const uint8_t RR[5][16] = {
- { 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 }, /* Round 1: pi */
- { 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 }, /* Round 2: rho pi */
- { 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 }, /* Round 3: rho^2 pi */
- { 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 }, /* Round 4: rho^3 pi */
- { 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 } /* Round 5: rho^4 pi */
-};
-
-/*
- * Shifts - Since we don't actually re-order the message words according to
- * the permutations above (we could, but it would be slower), these tables
- * come with the permutations pre-applied.
- */
-
-/* Shifts, left line */
-static const uint8_t SL[5][16] = {
- { 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 }, /* Round 1 */
- { 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 }, /* Round 2 */
- { 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 }, /* Round 3 */
- { 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 }, /* Round 4 */
- { 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 } /* Round 5 */
-};
-
-/* Shifts, right line */
-static const uint8_t SR[5][16] = {
- { 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 }, /* Round 1 */
- { 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 }, /* Round 2 */
- { 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 }, /* Round 3 */
- { 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 }, /* Round 4 */
- { 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 } /* Round 5 */
-};
-
-/* Boolean functions */
-
-#define F1(x, y, z) ((x) ^ (y) ^ (z))
-#define F2(x, y, z) (((x) & (y)) | (~(x) & (z)))
-#define F3(x, y, z) (((x) | ~(y)) ^ (z))
-#define F4(x, y, z) (((x) & (z)) | ((y) & ~(z)))
-#define F5(x, y, z) ((x) ^ ((y) | ~(z)))
-
-/* Round constants, left line */
-static const uint32_t KL[5] = {
- 0x00000000u, /* Round 1: 0 */
- 0x5A827999u, /* Round 2: floor(2**30 * sqrt(2)) */
- 0x6ED9EBA1u, /* Round 3: floor(2**30 * sqrt(3)) */
- 0x8F1BBCDCu, /* Round 4: floor(2**30 * sqrt(5)) */
- 0xA953FD4Eu /* Round 5: floor(2**30 * sqrt(7)) */
-};
-
-/* Round constants, right line */
-static const uint32_t KR[5] = {
- 0x50A28BE6u, /* Round 1: floor(2**30 * cubert(2)) */
- 0x5C4DD124u, /* Round 2: floor(2**30 * cubert(3)) */
- 0x6D703EF3u, /* Round 3: floor(2**30 * cubert(5)) */
- 0x7A6D76E9u, /* Round 4: floor(2**30 * cubert(7)) */
- 0x00000000u /* Round 5: 0 */
-};
-
-static void ripemd160_init(Hash *h)
-{
- RIPEMD_Context *self = (RIPEMD_Context *)h;
-
- memcpy(self->h, initial_h, RIPEMD160_DIGEST_SIZE);
- memset(&self->buf, 0, sizeof(self->buf));
- self->length = 0;
- self->bufpos = 0;
-}
-
-static inline void byteswap_digest(uint32_t *p)
-{
- unsigned int i;
-
- for (i = 0; i < 4; i++) {
- p[0] = SWAB32(p[0]);
- p[1] = SWAB32(p[1]);
- p[2] = SWAB32(p[2]);
- p[3] = SWAB32(p[3]);
- p += 4;
- }
-}
-
-/* The RIPEMD160 compression function. Operates on self->buf */
-static void ripemd160_compress(RIPEMD_Context *self)
-{
- uint8_t w, round;
- uint32_t T;
- uint32_t AL, BL, CL, DL, EL; /* left line */
- uint32_t AR, BR, CR, DR, ER; /* right line */
-
- /* Sanity check */
- ASSERT(self->bufpos == 64);
-
- /* Byte-swap the buffer if we're on a big-endian machine */
-#if CPU_BYTE_ORDER == CPU_BIG_ENDIAN
- byteswap_digest(self->buf.w);
-#endif
-
- /* Load the left and right lines with the initial state */
- AL = AR = self->h[0];
- BL = BR = self->h[1];
- CL = CR = self->h[2];
- DL = DR = self->h[3];
- EL = ER = self->h[4];
-
- /* Round 1 */
- round = 0;
- for (w = 0; w < 16; w++) { /* left line */
- T = ROL(SL[round][w], AL + F1(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
- AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
- }
- for (w = 0; w < 16; w++) { /* right line */
- T = ROL(SR[round][w], AR + F5(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
- AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
- }
-
- /* Round 2 */
- round++;
- for (w = 0; w < 16; w++) { /* left line */
- T = ROL(SL[round][w], AL + F2(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
- AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
- }
- for (w = 0; w < 16; w++) { /* right line */
- T = ROL(SR[round][w], AR + F4(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
- AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
- }
-
- /* Round 3 */
- round++;
- for (w = 0; w < 16; w++) { /* left line */
- T = ROL(SL[round][w], AL + F3(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
- AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
- }
- for (w = 0; w < 16; w++) { /* right line */
- T = ROL(SR[round][w], AR + F3(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
- AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
- }
-
- /* Round 4 */
- round++;
- for (w = 0; w < 16; w++) { /* left line */
- T = ROL(SL[round][w], AL + F4(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
- AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
- }
- for (w = 0; w < 16; w++) { /* right line */
- T = ROL(SR[round][w], AR + F2(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
- AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
- }
-
- /* Round 5 */
- round++;
- for (w = 0; w < 16; w++) { /* left line */
- T = ROL(SL[round][w], AL + F5(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL;
- AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T;
- }
- for (w = 0; w < 16; w++) { /* right line */
- T = ROL(SR[round][w], AR + F1(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER;
- AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T;
- }
-
- /* Final mixing stage */
- T = self->h[1] + CL + DR;
- self->h[1] = self->h[2] + DL + ER;
- self->h[2] = self->h[3] + EL + AR;
- self->h[3] = self->h[4] + AL + BR;
- self->h[4] = self->h[0] + BL + CR;
- self->h[0] = T;
-
- /* Clear the buffer and wipe the temporary variables */
- T = AL = BL = CL = DL = EL = AR = BR = CR = DR = ER = 0;
- memset(&self->buf, 0, sizeof(self->buf));
- self->bufpos = 0;
-}
-
-static void ripemd160_update(Hash *h, const void *data, size_t length)
-{
- RIPEMD_Context *self = (RIPEMD_Context *)h;
- const uint8_t *p = (const uint8_t *)data;
- unsigned int bytes_needed;
-
- /* Some assertions */
- ASSERT(p != NULL);
-
- /* We never leave a full buffer */
- ASSERT(self->bufpos < 64);
-
- while (length > 0) {
- /* Figure out how many bytes we need to fill the internal buffer. */
- bytes_needed = 64 - self->bufpos;
-
- if (length >= bytes_needed) {
- /* We have enough bytes, so copy them into the internal buffer and run
- * the compression function. */
- memcpy(&self->buf.b[self->bufpos], p, bytes_needed);
- self->bufpos += bytes_needed;
- self->length += bytes_needed << 3; /* length is in bits */
- p += bytes_needed;
- ripemd160_compress(self);
- length -= bytes_needed;
- continue;
- }
-
- /* We do not have enough bytes to fill the internal buffer.
- * Copy what's there and return. */
- memcpy(&self->buf.b[self->bufpos], p, length);
- self->bufpos += length;
- self->length += length << 3; /* length is in bits */
- return;
- }
-}
-
-static uint8_t* ripemd160_digest(Hash *h)
-{
- RIPEMD_Context *self = (RIPEMD_Context *)h;
-
- /* Append the padding */
- self->buf.b[self->bufpos++] = 0x80;
-
- if (self->bufpos > 56) {
- self->bufpos = 64;
- ripemd160_compress(self);
- }
-
- /* Append the length */
- self->buf.w[14] = cpu_to_le32((uint32_t)(self->length & 0xFFFFffffu));
- self->buf.w[15] = cpu_to_le32((uint32_t)((self->length >> 32) & 0xFFFFffffu));
-
- self->bufpos = 64;
- ripemd160_compress(self);
-
- /* Copy the final state into the output buffer */
-#if CPU_BYTE_ORDER == CPU_BIG_ENDIAN
- byteswap_digest(self->h);
-#endif
-
- return (uint8_t*)&self->h;
-}
-
-/**************************************************************************************/
-
-
-void RIPEMD_init(RIPEMD_Context *ctx)
-{
- ctx->hash.begin = ripemd160_init;
- ctx->hash.update = ripemd160_update;
- ctx->hash.final = ripemd160_digest;
- ctx->hash.digest_len = RIPEMD160_DIGEST_SIZE;
- ctx->hash.block_len = 64;
-}
+++ /dev/null
-#ifndef SEC_HASH_RIPEMD_H
-#define SEC_HASH_RIPEMD_H
-
-#include <cfg/compiler.h>
-#include <sec/hash.h>
-#include <alloca.h>
-
-typedef struct {
- Hash hash;
- uint32_t h[5]; /* The current hash state */
- uint64_t length; /* Total number of _bits_ (not bytes) added to the
- hash. This includes bits that have been buffered
- but not not fed through the compression function yet. */
- union {
- uint32_t w[16];
- uint8_t b[64];
- } buf;
- uint8_t bufpos; /* number of bytes currently in the buffer */
-
-} RIPEMD_Context;
-
-void RIPEMD_init(RIPEMD_Context *ctx);
-
-#define RIPEMD_stackinit(...) \
- ({ RIPEMD_Context *ctx = alloca(sizeof(RIPEMD_Context)); RIPEMD_init(ctx , ##__VA_ARGS__); &ctx->hash; })
-
-int RIPEMD_testSetup(void);
-int RIPEMD_testRun(void);
-int RIPEMD_testTearDown(void);
-
-
-#endif /* SEC_HASH_RIPEMD_H */
\ No newline at end of file
+++ /dev/null
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "RIPEMD.h"
-#include <string.h>
-
-int RIPEMD_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int RIPEMD_testTearDown(void)
-{
- return 0;
-}
-
-int RIPEMD_testRun(void)
-{
- Hash *h = RIPEMD_stackinit();
-
- hash_begin(h);
- ASSERT(memcmp(hash_final(h), "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31", 20) == 0);
-
- hash_begin(h);
- hash_update(h, "a", 1);
- ASSERT(memcmp(hash_final(h), "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe", 20) == 0);
-
- hash_begin(h);
- hash_update(h, "abc", 3);
- ASSERT(memcmp(hash_final(h), "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc", 20) == 0);
-
- hash_begin(h);
- hash_update(h, "message digest", 14);
- ASSERT(memcmp(hash_final(h), "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36", 20) == 0);
-
- hash_begin(h);
- hash_update(h, "abcdefghijklmnopqrstuvwxyz", 26);
- ASSERT(memcmp(hash_final(h), "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc", 20) == 0);
-
- hash_begin(h);
- hash_update(h, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56);
- ASSERT(memcmp(hash_final(h), "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b", 20) == 0);
-
- hash_begin(h);
- hash_update(h, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62);
- ASSERT(memcmp(hash_final(h), "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89", 20) == 0);
-
- hash_begin(h);
- for (int i=0;i<8;++i)
- hash_update(h, "1234567890", 10);
- ASSERT(memcmp(hash_final(h), "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb", 20) == 0);
-
- hash_begin(h);
- for (int i=0;i<1000000;++i)
- hash_update(h, "a", 1);
- ASSERT(memcmp(hash_final(h), "\x52\x78\x32\x43\xc1\x69\x7b\xdb\xe1\x6d\x37\xf9\x7f\x68\xf0\x83\x25\xdc\x15\x28", 20) == 0);
-
- return 0;
-}
-
-TEST_MAIN(RIPEMD);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief SHA-1 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-/*
- * Derived from:
- * SHA-1 in C
- * By Steve Reid <steve@edmweb.com>
- * 100% Public Domain
- */
-
-/* #define LITTLE_ENDIAN * This should be #define'd if true. */
-/* #define SHA1HANDSOFF * Copies data before messing with it. */
-
-#include "sha1.h"
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-#include <cfg/macros.h>
-#include <cpu/byteorder.h> // CPU_BYTE_ORDER
-#include <string.h>
-#include <stdlib.h>
-#include <sec/util.h>
-
-#define SHA1_BLOCK_LEN 64
-#define SHA1_DIGEST_LEN 20
-
-static void SHA1Transform(uint32_t state[5], const uint8_t buffer[64]);
-
-#define rol(value, bits) ROTL(value, bits)
-
-/* blk0() and blk() perform the initial expand. */
-/* I got the idea of expanding during the round function from SSLeay */
-#define blk0(i) (block[i] = be32_to_cpu(block[i]))
-#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \
- ^block[(i+2)&15]^block[i&15],1))
-
-/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
-#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
-#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
-#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
-#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
-#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
-
-
-/* Hash a single 512-bit block. This is the core of the algorithm. */
-static void SHA1Transform(uint32_t state[5], const uint8_t buffer[64])
-{
- uint32_t a, b, c, d, e;
- uint32_t block[16];
-
- memcpy(&block, buffer, 64);
-
- /* Copy context->state[] to working vars */
- a = state[0];
- b = state[1];
- c = state[2];
- d = state[3];
- e = state[4];
- /* 4 rounds of 20 operations each. Loop unrolled. */
- R0(a,b,c,d,e, 0);
- R0(e,a,b,c,d, 1);
- R0(d,e,a,b,c, 2);
- R0(c,d,e,a,b, 3);
- R0(b,c,d,e,a, 4);
- R0(a,b,c,d,e, 5);
- R0(e,a,b,c,d, 6);
- R0(d,e,a,b,c, 7);
- R0(c,d,e,a,b, 8);
- R0(b,c,d,e,a, 9);
- R0(a,b,c,d,e,10);
- R0(e,a,b,c,d,11);
- R0(d,e,a,b,c,12);
- R0(c,d,e,a,b,13);
- R0(b,c,d,e,a,14);
- R0(a,b,c,d,e,15);
- R1(e,a,b,c,d,16);
- R1(d,e,a,b,c,17);
- R1(c,d,e,a,b,18);
- R1(b,c,d,e,a,19);
- R2(a,b,c,d,e,20);
- R2(e,a,b,c,d,21);
- R2(d,e,a,b,c,22);
- R2(c,d,e,a,b,23);
- R2(b,c,d,e,a,24);
- R2(a,b,c,d,e,25);
- R2(e,a,b,c,d,26);
- R2(d,e,a,b,c,27);
- R2(c,d,e,a,b,28);
- R2(b,c,d,e,a,29);
- R2(a,b,c,d,e,30);
- R2(e,a,b,c,d,31);
- R2(d,e,a,b,c,32);
- R2(c,d,e,a,b,33);
- R2(b,c,d,e,a,34);
- R2(a,b,c,d,e,35);
- R2(e,a,b,c,d,36);
- R2(d,e,a,b,c,37);
- R2(c,d,e,a,b,38);
- R2(b,c,d,e,a,39);
- R3(a,b,c,d,e,40);
- R3(e,a,b,c,d,41);
- R3(d,e,a,b,c,42);
- R3(c,d,e,a,b,43);
- R3(b,c,d,e,a,44);
- R3(a,b,c,d,e,45);
- R3(e,a,b,c,d,46);
- R3(d,e,a,b,c,47);
- R3(c,d,e,a,b,48);
- R3(b,c,d,e,a,49);
- R3(a,b,c,d,e,50);
- R3(e,a,b,c,d,51);
- R3(d,e,a,b,c,52);
- R3(c,d,e,a,b,53);
- R3(b,c,d,e,a,54);
- R3(a,b,c,d,e,55);
- R3(e,a,b,c,d,56);
- R3(d,e,a,b,c,57);
- R3(c,d,e,a,b,58);
- R3(b,c,d,e,a,59);
- R4(a,b,c,d,e,60);
- R4(e,a,b,c,d,61);
- R4(d,e,a,b,c,62);
- R4(c,d,e,a,b,63);
- R4(b,c,d,e,a,64);
- R4(a,b,c,d,e,65);
- R4(e,a,b,c,d,66);
- R4(d,e,a,b,c,67);
- R4(c,d,e,a,b,68);
- R4(b,c,d,e,a,69);
- R4(a,b,c,d,e,70);
- R4(e,a,b,c,d,71);
- R4(d,e,a,b,c,72);
- R4(c,d,e,a,b,73);
- R4(b,c,d,e,a,74);
- R4(a,b,c,d,e,75);
- R4(e,a,b,c,d,76);
- R4(d,e,a,b,c,77);
- R4(c,d,e,a,b,78);
- R4(b,c,d,e,a,79);
- /* Add the working vars back into context.state[] */
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
- state[4] += e;
- /* Wipe variables */
- a = b = c = d = e = 0;
-}
-
-static void SHA1_begin(Hash* h)
-{
- SHA1_Context *context = (SHA1_Context*)h;
- /* SHA1 initialization constants */
- context->state[0] = 0x67452301;
- context->state[1] = 0xEFCDAB89;
- context->state[2] = 0x98BADCFE;
- context->state[3] = 0x10325476;
- context->state[4] = 0xC3D2E1F0;
- context->count[0] = context->count[1] = 0;
-}
-
-/* Run your data through this. */
-
-static void SHA1_update(Hash* h, const void* vdata, size_t len)
-{
- SHA1_Context *context = (SHA1_Context*)h;
- const uint8_t *data = (const uint8_t*)vdata;
- size_t i, j;
-
- j = (context->count[0] >> 3) & 63;
- if ((context->count[0] += len << 3) < (len << 3))
- context->count[1]++;
- context->count[1] += (len >> 29);
- if ((j + len) > 63) {
- memcpy(&context->buffer[j], data, (i = 64-j));
- SHA1Transform(context->state, context->buffer);
- for ( ; i + 63 < len; i += 64) {
- SHA1Transform(context->state, &data[i]);
- }
- j = 0;
- } else
- i = 0;
- memcpy(&context->buffer[j], &data[i], len - i);
-}
-
-
-/* Add padding and return the message digest. */
-
-static uint8_t *SHA1_final(Hash* h)
-{
- SHA1_Context *context = (SHA1_Context*)h;
- uint32_t i;
- uint8_t finalcount[8];
-
- for (i = 0; i < 8; i++)
- finalcount[i] = (uint8_t)((context->count[(i >= 4 ? 0 : 1)]
- >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
-
- SHA1_update(h, "\200", 1);
- while ((context->count[0] & 504) != 448)
- SHA1_update(h, "\0", 1);
- SHA1_update(h, finalcount, 8); /* Should cause a SHA1Transform() */
-
- for (i = 0; i < 20; i++)
- context->buffer[i] = (uint8_t)
- ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
-
- PURGE(i);
- PURGE(finalcount);
- return context->buffer;
-}
-
-
-/*************************************************************/
-
-void SHA1_init(SHA1_Context* ctx)
-{
- ctx->h.block_len = SHA1_BLOCK_LEN;
- ctx->h.digest_len = SHA1_DIGEST_LEN;
- ctx->h.begin = SHA1_begin;
- ctx->h.update = SHA1_update;
- ctx->h.final = SHA1_final;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief SHA-1 Hashing algorithm.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- * $WIZ$ module_name = "sha1"
- */
-
-#ifndef SEC_HASH_SHA1
-#define SEC_HASH_SHA1
-
-#include <cfg/compiler.h>
-#include <sec/hash.h>
-#include <alloca.h>
-
-/**
- * Context for SHA1 computation.
- */
-typedef struct {
- Hash h;
- uint32_t state[5];
- uint32_t count[2];
- uint8_t buffer[64];
-} SHA1_Context;
-
-void SHA1_init(SHA1_Context *context);
-
-#define SHA1_stackinit(...) \
- ({ SHA1_Context *ctx = alloca(sizeof(SHA1_Context)); SHA1_init(ctx, ##__VA_ARGS__); &ctx->h; })
-
-int SHA1_testSetup(void);
-int SHA1_testRun(void);
-int SHA1_testTearDown(void);
-
-#endif
+++ /dev/null
-
-#include <cfg/test.h>
-#include <cfg/debug.h>
-
-#include "sha1.h"
-#include <string.h>
-
-int SHA1_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int SHA1_testTearDown(void)
-{
- return 0;
-}
-
-int SHA1_testRun(void)
-{
- int i;
- SHA1_Context context;
- SHA1_init(&context);
-
- hash_begin(&context.h);
- hash_update(&context.h, "abc", 3);
- ASSERT(memcmp(hash_final(&context.h), "\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E\x25\x71\x78\x50\xC2\x6C\x9C\xD0\xD8\x9D", 20) == 0);
-
- hash_begin(&context.h);
- hash_update(&context.h, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56);
- ASSERT(memcmp(hash_final(&context.h), "\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE\x4A\xA1\xF9\x51\x29\xE5\xE5\x46\x70\xF1", 20) == 0);
-
- hash_begin(&context.h);
- for (i = 0; i < 1000000; i++)
- hash_update(&context.h, "a", 1);
- ASSERT(memcmp(hash_final(&context.h), "\x34\xAA\x97\x3C\xD4\xC4\xDA\xA4\xF6\x1E\xEB\x2B\xDB\xAD\x27\x31\x65\x34\x01\x6F", 20) == 0);
-
- return 0;
-}
-
-TEST_MAIN(SHA1);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for key derivation functions.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_KDF_H
-#define SEC_KDF_H
-
-#include <cfg/compiler.h>
-#include <cfg/macros.h>
-#include <cfg/debug.h>
-#include <string.h>
-
-typedef struct Kdf
-{
- const uint8_t* block;
- size_t block_len;
- size_t to_read;
-
- void (*begin)(struct Kdf *kdf, const char *pwd, size_t pwd_len,
- const uint8_t *salt, size_t salt_len);
- void (*next)(struct Kdf *kdf);
-} Kdf;
-
-/**
- * Initialize the key derivation function, with the specified \a password and \a salt.
- */
-INLINE void kdf_begin(Kdf *kdf, const char *pwd, size_t pwd_len,
- const uint8_t *salt, size_t salt_len)
-{
- ASSERT(kdf->begin);
- kdf->begin(kdf, pwd, pwd_len, salt, salt_len);
-}
-
-/**
- * Extract \a len derived bytes into the \a out buffer.
- *
- * After having initialized the derivation function iwth \a kdf_begin, you can call
- * this function multiple times, to produce several batches of derived data.
- *
- * \note Some algorithms implementing this API might have a maximum length of bytes
- * that can be derived, after which they will simply ASSERT().
- */
-INLINE void kdf_read(Kdf *kdf, uint8_t *out, size_t len)
-{
- do
- {
- if (kdf->to_read == 0)
- {
- kdf->next(kdf);
- ASSERT(kdf->to_read != 0);
- }
-
- size_t c = MIN(len, kdf->to_read);
- memcpy(out, kdf->block, c);
- len -= c;
- out += c;
- kdf->block += c;
- kdf->to_read -= c;
- } while (len);
-}
-
-#endif /* SEC_KDF_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF1 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "pbkdf1.h"
-#include <sec/hash.h>
-#include <sec/util.h>
-
-
-static void PBKDF1_begin(Kdf *ctx_, const char *pwd, size_t pwd_len,
- const uint8_t *salt, size_t salt_len)
-{
- PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_;
-
- hash_begin(ctx->hash);
- hash_update(ctx->hash, pwd, pwd_len);
- hash_update(ctx->hash, salt, salt_len);
-
- ctx->kdf.to_read = 0;
- ctx->kdf.block = NULL;
-}
-
-static void PBKDF1_next(Kdf *ctx_)
-{
- PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_;
-
- // PBKDF1 will generate only one block of data (whose len depends
- // on the underlying hash function). After that, the generation stops
- // with an ASSERT. If you use PKBDF1, you are supposed to be aware
- // of this limit while designing your algorithm.
- ASSERT(ctx->kdf.block == NULL);
-
- int hlen = hash_digest_len(ctx->hash);
- uint8_t temp[hlen];
- uint8_t *final = hash_final(ctx->hash);
-
- for (uint32_t i=0; i<ctx->iterations-1; i++)
- {
- memcpy(temp, final, hlen);
- hash_begin(ctx->hash);
- hash_update(ctx->hash, temp, hlen);
- final = hash_final(ctx->hash);
- }
-
- PURGE(temp);
-
- ctx->kdf.to_read = ctx->kdf.block_len;
- ctx->kdf.block = final;
-}
-
-/**********************************************************************/
-
-// Default iteration count. The RFC does not specify a "good" default
-// value; it just says that this should be a high value to slow down
-// computations. Since slowing down is not much of a concern for an
-// embedded system, we settle for a value which is not too big.
-#define PBKDF1_DEFAULT_ITERATIONS 100
-
-
-void PBKDF1_init(PBKDF1_Context *ctx, Hash *h)
-{
- ctx->hash = h;
- ctx->iterations = PBKDF1_DEFAULT_ITERATIONS;
- ctx->kdf.begin = PBKDF1_begin;
- ctx->kdf.next = PBKDF1_next;
- ctx->kdf.block_len = hash_digest_len(h);
-}
-
-void PBKDF1_set_iterations(Kdf *ctx_, uint32_t iterations)
-{
- PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_;
- ctx->iterations = iterations;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF1 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_KDF_PBKDF1_H
-#define SEC_KDF_PBKDF1_H
-
-#include <sec/kdf.h>
-#include <sec/hash.h>
-
-typedef struct
-{
- Kdf kdf;
- Hash *hash;
- uint32_t iterations;
-} PBKDF1_Context;
-
-void PBKDF1_init(PBKDF1_Context *ctx, Hash *h);
-void PBKDF1_set_iterations(Kdf *kdf, uint32_t iterations);
-
-#define PBKDF1_stackinit(...) \
- ({ PBKDF1_Context *ctx = alloca(sizeof(PBKDF1_Context)); PBKDF1_init(ctx , ##__VA_ARGS__); &ctx->kdf; })
-
-int PBKDF1_testSetup(void);
-int PBKDF1_testRun(void);
-int PBKDF1_testTearDown(void);
-
-#endif /* SEC_KDF_PBKDF1_H */
+++ /dev/null
-#include <string.h>
-#include <cpu/detect.h>
-#include <cfg/test.h>
-#include <cfg/debug.h>
-#include <sec/mac/hmac.h>
-#include <sec/hash/sha1.h>
-#include <sec/kdf/PBKDF1.h>
-
-int PBKDF1_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int PBKDF1_testTearDown(void)
-{
- return 0;
-}
-
-int PBKDF1_testRun(void)
-{
- Kdf *kdf = PBKDF1_stackinit(SHA1_stackinit());
-
- uint8_t res[16];
-
- PBKDF1_set_iterations(kdf, 1000);
- kdf_begin(kdf, "password", 8, (const uint8_t*)"\x78\x57\x8E\x5A\x5D\x63\xCB\x06", 8);
- kdf_read(kdf, res, 16);
- ASSERT(memcmp(res, "\xDC\x19\x84\x7E\x05\xC6\x4D\x2F\xAF\x10\xEB\xFB\x4A\x3D\x2A\x20", 16) == 0);
-
- return 0;
-}
-
-TEST_MAIN(PBKDF1);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF2 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "pbkdf2.h"
-#include <cpu/byteorder.h>
-#include <sec/util.h>
-#include <cfg/debug.h>
-
-static void PBKDF2_begin(Kdf *ctx_, const char *pwd, size_t pwd_len,
- const uint8_t *salt, size_t salt_len)
-{
- PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_;
-
- ASSERT(sizeof(ctx->salt) >= salt_len);
-
- mac_set_key(ctx->mac, (const uint8_t*)pwd, pwd_len);
- ctx->salt_len = salt_len;
- memcpy(ctx->salt, salt, salt_len);
- ctx->c = 0;
- ctx->kdf.to_read = 0;
- ctx->kdf.block = NULL;
-}
-
-static void PBKDF2_next(Kdf *ctx_)
-{
- PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_;
- int dlen = mac_digest_len(ctx->mac);
- uint8_t last[dlen];
-
- ++ctx->c;
- uint32_t bec = cpu_to_be32(ctx->c);
-
- mac_begin(ctx->mac);
- mac_update(ctx->mac, ctx->salt, ctx->salt_len);
- mac_update(ctx->mac, &bec, 4);
- memcpy(last, mac_final(ctx->mac), dlen);
- memcpy(ctx->block, last, dlen);
-
- for (uint32_t i=0; i<ctx->iterations-1; ++i)
- {
- mac_begin(ctx->mac);
- mac_update(ctx->mac, last, dlen);
- memcpy(last, mac_final(ctx->mac), dlen);
- xor_block(ctx->block, ctx->block, last, dlen);
- }
-
- ctx->kdf.to_read = dlen;
- ctx->kdf.block = ctx->block;
-
- PURGE(last);
-}
-
-
-/**********************************************************************/
-
-// Default iteration count. The RFC does not specify a "good" default
-// value; it just says that this should be a high value to slow down
-// computations. Since slowing down is not much of a concern for an
-// embedded system, we settle for a value which is not too big.
-#define PBKDF2_DEFAULT_ITERATIONS 100
-
-
-void PBKDF2_init(PBKDF2_Context *ctx, Mac *mac)
-{
- ctx->salt_len = 0;
- ctx->mac = mac;
- ctx->iterations = PBKDF2_DEFAULT_ITERATIONS;
- ctx->kdf.begin = PBKDF2_begin;
- ctx->kdf.next = PBKDF2_next;
- ctx->kdf.block_len = mac_digest_len(mac);
- ASSERT(ctx->kdf.block_len <= sizeof(ctx->block));
-}
-
-void PBKDF2_set_iterations(Kdf *ctx_, uint32_t iterations)
-{
- PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_;
- ctx->iterations = iterations;
-}
-
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief PBKDF2 implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_KDF_PBKDF2_H
-#define SEC_KDF_PBKDF2_H
-
-#include <sec/kdf.h>
-#include <sec/mac.h>
-
-typedef struct
-{
- Kdf kdf;
- Mac *mac;
- uint8_t block[20];
- uint32_t c;
- uint32_t iterations;
- uint8_t salt_len;
- uint8_t salt[48];
-} PBKDF2_Context;
-
-void PBKDF2_init(PBKDF2_Context *ctx, Mac *mac);
-void PBKDF2_set_iterations(Kdf *kdf, uint32_t iterations);
-
-#define PBKDF2_stackinit(...) \
- ({ PBKDF2_Context *ctx = alloca(sizeof(PBKDF2_Context)); PBKDF2_init(ctx , ##__VA_ARGS__); &ctx->kdf; })
-
-int PBKDF2_testSetup(void);
-int PBKDF2_testRun(void);
-int PBKDF2_testTearDown(void);
-
-#endif /* SEC_KDF_PBKDF2_H */
+++ /dev/null
-#include <string.h>
-#include <cpu/detect.h>
-#include <cfg/test.h>
-#include <cfg/debug.h>
-#include <sec/mac/hmac.h>
-#include <sec/hash/sha1.h>
-#include <sec/kdf/pbkdf2.h>
-
-int PBKDF2_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int PBKDF2_testTearDown(void)
-{
- return 0;
-}
-
-int PBKDF2_testRun(void)
-{
- Kdf *kdf = PBKDF2_stackinit(HMAC_stackinit(SHA1_stackinit()));
-
- uint8_t res[32];
-
- PBKDF2_set_iterations(kdf, 1);
- kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
- kdf_read(kdf, res, 20);
- ASSERT(memcmp(res, "\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6", 20) == 0);
-
- PBKDF2_set_iterations(kdf, 2);
- kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
- kdf_read(kdf, res, 20);
- ASSERT(memcmp(res, "\xea\x6c\x01\x4d\xc7\x2d\x6f\x8c\xcd\x1e\xd9\x2a\xce\x1d\x41\xf0\xd8\xde\x89\x57", 20) == 0);
-
- PBKDF2_set_iterations(kdf, 4096);
- kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
- kdf_read(kdf, res, 20);
- ASSERT(memcmp(res, "\x4b\x00\x79\x01\xb7\x65\x48\x9a\xbe\xad\x49\xd9\x26\xf7\x21\xd0\x65\xa4\x29\xc1", 20) == 0);
-
-#if CPU_X86
- // Too slow for an embedded system...
- PBKDF2_set_iterations(kdf, 16777216);
- kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4);
- kdf_read(kdf, res, 20);
- ASSERT(memcmp(res, "\xee\xfe\x3d\x61\xcd\x4d\xa4\xe4\xe9\x94\x5b\x3d\x6b\xa2\x15\x8c\x26\x34\xe9\x84", 20) == 0);
-#endif
-
- PBKDF2_set_iterations(kdf, 4096);
- kdf_begin(kdf, "pass\0word", 9, (const uint8_t*)"sa\0lt", 5);
- kdf_read(kdf, res, 16);
- ASSERT(memcmp(res, "\x56\xfa\x6a\xa7\x55\x48\x09\x9d\xcc\x37\xd7\xf0\x34\x25\xe0\xc3", 16) == 0);
-
- PBKDF2_set_iterations(kdf, 4096);
- kdf_begin(kdf, "passwordPASSWORDpassword", 24, (const uint8_t*)"saltSALTsaltSALTsaltSALTsaltSALTsalt", 36);
- kdf_read(kdf, res, 25);
- ASSERT(memcmp(res, "\x3d\x2e\xec\x4f\xe4\x1c\x84\x9b\x80\xc8\xd8\x36\x62\xc0\xe4\x4a\x8b\x29\x1a\x96\x4c\xf2\xf0\x70\x38", 25) == 0);
-
- return 0;
-}
-
-TEST_MAIN(PBKDF2);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for message authentication algorithms.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_MAC_H
-#define SEC_MAC_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct Mac {
- uint8_t digest_len;
- uint8_t key_len;
-
- void (*set_key)(struct Mac *m, const void *key, size_t len);
- void (*begin)(struct Mac *m);
- void (*update)(struct Mac *m, const void *data, size_t len);
- uint8_t* (*final)(struct Mac *m);
-} Mac;
-
-INLINE void mac_set_key(Mac *m, const uint8_t* key, size_t len)
-{
- ASSERT(m->set_key);
- m->set_key(m, key, len);
-}
-
-INLINE void mac_begin(Mac *m)
-{
- ASSERT(m->begin);
- m->begin(m);
-}
-
-INLINE void mac_update(Mac *m, const void *data, size_t len)
-{
- ASSERT(m->update);
- m->update(m, data, len);
-}
-
-INLINE uint8_t* mac_final(Mac *m)
-{
- ASSERT(m->final);
- return m->final(m);
-}
-
-INLINE size_t mac_digest_len(Mac *m)
-{
- return m->digest_len;
-}
-
-INLINE size_t mac_key_len(Mac *m)
-{
- return m->key_len;
-}
-
-#endif
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief HMAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "hmac.h"
-#include <sec/util.h>
-#include <string.h>
-
-
-static void hmac_set_key(Mac *m, const void *key, size_t key_len)
-{
- HmacContext *ctx = (HmacContext *)m;
-
- memset(ctx->key, 0, ctx->m.key_len);
- if (key_len <= ctx->m.key_len)
- memcpy(ctx->key, key, key_len);
- else
- {
- hash_begin(ctx->h);
- hash_update(ctx->h, key, key_len);
- memcpy(ctx->key, hash_final(ctx->h), hash_digest_len(ctx->h));
- }
-
- xor_block_const(ctx->key, ctx->key, 0x5C, ctx->m.key_len);
-}
-
-static void hmac_begin(Mac *m)
-{
- HmacContext *ctx = (HmacContext *)m;
- int klen = ctx->m.key_len;
-
- xor_block_const(ctx->key, ctx->key, 0x36^0x5C, klen);
- hash_begin(ctx->h);
- hash_update(ctx->h, ctx->key, klen);
-}
-
-static void hmac_update(Mac *m, const void *data, size_t len)
-{
- HmacContext *ctx = (HmacContext *)m;
- hash_update(ctx->h, data, len);
-}
-
-static uint8_t *hmac_final(Mac *m)
-{
- HmacContext *ctx = (HmacContext *)m;
- int hlen = hash_digest_len(ctx->h);
-
- uint8_t temp[hlen];
- memcpy(temp, hash_final(ctx->h), hlen);
-
- xor_block_const(ctx->key, ctx->key, 0x5C^0x36, ctx->m.key_len);
- hash_begin(ctx->h);
- hash_update(ctx->h, ctx->key, ctx->m.key_len);
- hash_update(ctx->h, temp, hlen);
-
- PURGE(temp);
- return hash_final(ctx->h);
-}
-
-/*********************************************************************/
-
-void hmac_init(HmacContext *ctx, Hash *h)
-{
- ctx->h = h;
- ctx->m.key_len = hash_block_len(h);
- ctx->m.digest_len = hash_digest_len(h);
- ctx->m.set_key = hmac_set_key;
- ctx->m.begin = hmac_begin;
- ctx->m.update = hmac_update;
- ctx->m.final = hmac_final;
- ASSERT(sizeof(ctx->key) >= ctx->m.key_len);
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief HMAC (RFC 2104) implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_MAC_HMAC_H
-#define SEC_MAC_HMAC_H
-
-#include <sec/mac.h>
-#include <sec/hash.h>
-#include <alloca.h>
-
-typedef struct HmacContext
-{
- Mac m;
- Hash *h;
- uint8_t key[64];
-} HmacContext;
-
-void hmac_init(HmacContext* hmac, Hash *h);
-
-#define hmac_stackinit(...) \
- ({ HmacContext *ctx = alloca(sizeof(HmacContext)); hmac_init(ctx, ##__VA_ARGS__); &ctx->m; })
-
-int hmac_testSetup(void);
-int hmac_testRun(void);
-int hmac_testTearDown(void);
-
-#endif /* SEC_MAC_HMAC_H */
+++ /dev/null
-
-#include "hmac.h"
-#include <cfg/test.h>
-#include <cfg/debug.h>
-#include <sec/hash/sha1.h>
-#include <sec/hash/md5.h>
-#include <string.h>
-
-int hmac_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int hmac_testTearDown(void)
-{
- return 0;
-}
-
-struct Test_HMAC
-{
- const char *key;
- size_t key_len;
- const char *data;
- size_t data_len;
- const char *digest;
-};
-
-const struct Test_HMAC tests_hmac_md5[] =
-{
- {
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 16,
- "Hi There", 8,
- "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
- },
- {
- "Jefe", 4,
- "what do ya want for nothing?", 28,
- "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
- },
- {
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 16,
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
- "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
- },
- {
- "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
- "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
- "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79",
- },
- {
- "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 16,
- "Test With Truncation", 20,
- "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
- },
- {
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
- "Test Using Larger Than Block-Size Key - Hash Key First", 54,
- "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
- },
- {
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
- "Test Using Larger Than Block-Size Key and Larger Than One "
- "Block-Size Data", 73,
- "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
- }
-};
-
-const struct Test_HMAC tests_hmac_sha1[] =
-{
- {
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20,
- "Hi There", 8,
- "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00",
- },
- {
- "Jefe", 4,
- "what do ya want for nothing?", 28,
- "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
- },
- {
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20,
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
- "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
- },
- {
- "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
- "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
- },
- {
- "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20,
- "Test With Truncation", 20,
- "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
- },
- {
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
- "Test Using Larger Than Block-Size Key - Hash Key First", 54,
- "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
- },
- {
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
- "Test Using Larger Than Block-Size Key and Larger "
- "Than One Block-Size Data", 73,
- "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
- },
-};
-
-static void algo_run_tests(Mac *mac, const struct Test_HMAC *t, int count)
-{
- for (int i=0; i<count; ++i, ++t)
- {
- mac_set_key(mac, (const uint8_t*)t->key, t->key_len);
- mac_begin(mac);
- mac_update(mac, (const uint8_t*)t->data, t->data_len);
- ASSERT(memcmp(mac_final(mac), t->digest, mac_digest_len(mac)) == 0);
- }
-}
-
-int hmac_testRun(void)
-{
- algo_run_tests(hmac_stackinit(MD5_stackinit()),
- tests_hmac_md5, countof(tests_hmac_md5));
-
- algo_run_tests(hmac_stackinit(SHA1_stackinit()),
- tests_hmac_sha1, countof(tests_hmac_sha1));
-
- return 0;
-}
-
-TEST_MAIN(HMAC);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief OMAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-#include "omac.h"
-#include <cfg/macros.h>
-#include <sec/util.h>
-
-static void omac_set_key(Mac *ctx_, const void* key, size_t len)
-{
- OmacContext *ctx = (OmacContext *)ctx_;
- cipher_set_vkey(ctx->c, key, len);
-}
-
-static void omac_begin(Mac *ctx_)
-{
- OmacContext *ctx = (OmacContext *)ctx_;
-
- ctx->acc = 0;
-
- memset(ctx->Y, 0, cipher_block_len(ctx->c));
- cipher_cbc_begin(ctx->c, ctx->Y);
-}
-
-static void omac_update(Mac *ctx_, const void *data_, size_t len)
-{
- OmacContext *ctx = (OmacContext *)ctx_;
- size_t blen = cipher_block_len(ctx->c);
- const uint8_t *data = (const uint8_t *)data_;
-
- while (len)
- {
- ASSERT(ctx->acc <= blen);
- if (ctx->acc == blen)
- {
- cipher_cbc_encrypt(ctx->c, ctx->accum);
- ctx->acc = 0;
- }
-
- size_t L = MIN(len, blen - ctx->acc);
- memcpy(ctx->accum + ctx->acc, data, L);
- data += L;
- len -= L;
- ctx->acc += L;
- }
-}
-
-static void omac_shift_left(uint8_t *L, size_t len)
-{
- int firstbit = L[0] >> 7;
- size_t i;
-
- for (i=0; i<len-1; ++i)
- L[i] = (L[i] << 1) | (L[i+1] >> 7);
- L[i] <<= 1;
-
- if (firstbit)
- {
- if (len == 16)
- L[i] ^= 0x87;
- else if (len == 8)
- L[i] ^= 0x1B;
- else
- ASSERT(0);
- }
-}
-
-static void omac_shift_right(uint8_t *L, size_t len)
-{
- int firstbit = L[len-1] & 1;
- size_t i;
-
- for (i=len-1; i>0; --i)
- L[i] = (L[i] >> 1) | (L[i-1] << 7);
- L[i] >>= 1;
-
- if (firstbit)
- {
- L[i] |= 0x80;
- if (len == 16)
- L[len-1] ^= 0x43;
- else if (len == 8)
- L[len-1] ^= 0x0D;
- else
- ASSERT(0);
- }
-}
-
-static uint8_t *omac1_final(Mac *ctx_)
-{
- OmacContext *ctx = (OmacContext *)ctx_;
- size_t blen = cipher_block_len(ctx->c);
-
- uint8_t L[blen];
- memset(L, 0, blen);
- cipher_ecb_encrypt(ctx->c, L);
-
- omac_shift_left(L, blen);
- if (ctx->acc < blen)
- {
- ctx->accum[ctx->acc++] = 0x80;
- memset(ctx->accum + ctx->acc, 0, blen - ctx->acc);
- omac_shift_left(L, blen);
- }
-
- xor_block(ctx->accum, ctx->accum, L, blen);
- cipher_cbc_encrypt(ctx->c, ctx->accum);
- return ctx->accum;
-}
-
-static uint8_t *omac2_final(Mac *ctx_)
-{
- OmacContext *ctx = (OmacContext *)ctx_;
- size_t blen = cipher_block_len(ctx->c);
-
- uint8_t L[blen];
- memset(L, 0, blen);
- cipher_ecb_encrypt(ctx->c, L);
-
- if (ctx->acc < blen)
- {
- ctx->accum[ctx->acc++] = 0x80;
- memset(ctx->accum + ctx->acc, 0, blen - ctx->acc);
- omac_shift_right(L, blen);
- }
- else
- omac_shift_left(L, blen);
-
- xor_block(ctx->accum, ctx->accum, L, blen);
- cipher_cbc_encrypt(ctx->c, ctx->accum);
- return ctx->accum;
-}
-
-
-/****************************************************************************/
-
-static void omac_init(OmacContext *ctx, BlockCipher *c)
-{
- ctx->mac.set_key = omac_set_key;
- ctx->mac.begin = omac_begin;
- ctx->mac.update = omac_update;
- ctx->mac.key_len = cipher_key_len(c);
- ctx->mac.digest_len = cipher_block_len(c);
- ctx->c = c;
-
- ASSERT(cipher_block_len(c) == 8 || cipher_block_len(c) == 16);
- ASSERT(sizeof(ctx->Y) >= cipher_block_len(c));
- ASSERT(sizeof(ctx->accum) >= cipher_block_len(c));
-}
-
-void omac1_init(OmacContext *ctx, BlockCipher *c)
-{
- omac_init(ctx, c);
- ctx->mac.final = omac1_final;
-}
-
-void omac2_init(OmacContext *ctx, BlockCipher *c)
-{
- omac_init(ctx, c);
- ctx->mac.final = omac2_final;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief OMAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- */
-
-#ifndef SEC_MAC_OMAC_H
-#define SEC_MAC_OMAC_H
-
-#include <sec/mac.h>
-#include <sec/cipher.h>
-
-typedef struct OmacContext
-{
- Mac mac;
- BlockCipher *c;
- uint8_t Y[16];
- uint8_t accum[16];
- uint8_t acc;
-} OmacContext;
-
-void omac1_init(OmacContext *ctx, BlockCipher *c);
-void omac2_init(OmacContext *ctx, BlockCipher *c);
-
-#define omac1_stackinit(...) \
- ({ OmacContext *ctx = alloca(sizeof(OmacContext)); omac1_init(ctx, ##__VA_ARGS__); &ctx->mac; })
-#define omac2_stackinit(...) \
- ({ OmacContext *ctx = alloca(sizeof(OmacContext)); omac2_init(ctx, ##__VA_ARGS__); &ctx->mac; })
-
-int omac_testSetup(void);
-int omac_testTearDown(void);
-int omac_testRun(void);
-
-#endif /* SEC_MAC_OMAC_H */
+++ /dev/null
-
-#include <sec/mac/omac.h>
-#include <sec/cipher/aes.h>
-#include <cfg/test.h>
-#include <cfg/debug.h>
-#include <string.h>
-
-int omac_testSetup(void)
-{
- kdbg_init();
- return 0;
-}
-
-int omac_testTearDown(void)
-{
- return 0;
-}
-
-struct OmacTest
-{
- void *key;
- size_t klen;
- uint8_t *msg;
- size_t mlen;
- uint8_t digest[16*2];
-};
-
-static const struct OmacTest tests1_aes128[] =
-{
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "", 0,
- "bb1d6929e95937287fa37d129b756746",
- },
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "6bc1bee22e409f96e93d7e117393172a", 16,
- "070a16b46b4d4144f79bdd9dd04a287c",
- },
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411e5fbc1191a0a52ef"
- "f69f2445df4f9b17ad2b417be66c3710", 64,
- "51f0bebf7e3b9d92fc49741779363cfe",
- },
-};
-
-static const struct OmacTest tests1_aes192[] =
-{
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "", 0,
- "d17ddf46adaacde531cac483de7a9367",
- },
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "6bc1bee22e409f96e93d7e117393172a", 16,
- "9e99a7bf31e710900662f65e617c5184",
- },
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411", 40,
- "8a1de5be2eb31aad089a82e6ee908b0e",
- },
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411e5fbc1191a0a52ef"
- "f69f2445df4f9b17ad2b417be66c3710", 64,
- "a1d5df0eed790f794d77589659f39a11",
- },
-};
-
-static const struct OmacTest tests1_aes256[] =
-{
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "", 0,
- "028962f61b7bf89efc6b551f4667d983",
- },
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "6bc1bee22e409f96e93d7e117393172a", 16,
- "28a7023f452e8f82bd4bf28d8c37c35c",
- },
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411", 40,
- "aaf3d8f1de5640c232f5b169b9c911e6",
- },
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411e5fbc1191a0a52ef"
- "f69f2445df4f9b17ad2b417be66c3710", 64,
- "e1992190549f6ed5696a2c056c315410",
- },
-};
-
-static const struct OmacTest tests2_aes128[] =
-{
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "", 0,
- "f6bc6a41f4f84593809e59b719299cfe",
- },
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "6bc1bee22e409f96e93d7e117393172a", 16,
- "070a16b46b4d4144f79bdd9dd04a287c",
- },
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411", 40,
- "23fdaa0831cd314491ce4b25acb6023b",
- },
- {
- "2b7e151628aed2a6abf7158809cf4f3c", 16,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411e5fbc1191a0a52ef"
- "f69f2445df4f9b17ad2b417be66c3710", 64,
- "51f0bebf7e3b9d92fc49741779363cfe",
- },
-};
-
-static const struct OmacTest tests2_aes192[] =
-{
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "", 0,
- "149f579df2129d45a69266898f55aeb2",
- },
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "6bc1bee22e409f96e93d7e117393172a", 16,
- "9e99a7bf31e710900662f65e617c5184",
- },
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411", 40,
- "b35e2d1b73aed49b78bdbdfe61f646df",
- },
- {
- "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411e5fbc1191a0a52ef"
- "f69f2445df4f9b17ad2b417be66c3710", 64,
- "a1d5df0eed790f794d77589659f39a11",
- },
-};
-
-static const struct OmacTest tests2_aes256[] =
-{
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "", 0,
- "47fbde71866eae6080355b5fc7ff704c",
- },
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "6bc1bee22e409f96e93d7e117393172a", 16,
- "28a7023f452e8f82bd4bf28d8c37c35c",
- },
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411", 40,
- "f018e6053611b34bc872d6b7ff24749f",
- },
- {
- "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32,
- "6bc1bee22e409f96e93d7e117393172a"
- "ae2d8a571e03ac9c9eb76fac45af8e51"
- "30c81c46a35ce411e5fbc1191a0a52ef"
- "f69f2445df4f9b17ad2b417be66c3710", 64,
- "e1992190549f6ed5696a2c056c315410",
- },
-};
-
-static void hexunlify(uint8_t *out, const uint8_t *in, size_t len)
-{
- #define TO_DEC(x) ((x >= '0' && x <= '9') ? x-'0' : \
- (x >= 'a' && x <= 'f') ? x-'a'+10 : \
- (x >= 'A' && x <= 'F') ? x-'A'+10 : 0)
- while (len--)
- {
- *out++ = TO_DEC(in[0])*16 + TO_DEC(in[1]);
- in += 2;
- }
-}
-
-static void runTest(Mac *m, const struct OmacTest *t, size_t num)
-{
- for (size_t i=0; i<num; ++i, ++t)
- {
- uint8_t key[t->klen];
- hexunlify(key, t->key, t->klen);
-
- uint8_t msg[t->mlen];
- hexunlify(msg, t->msg, t->mlen);
-
- uint8_t digest[16];
- hexunlify(digest, t->digest, 16);
-
- mac_set_key(m, key, t->klen);
- mac_begin(m);
- mac_update(m, msg, t->mlen);
- uint8_t *result = mac_final(m);
-
- ASSERT(memcmp(result, digest, 16) == 0);
- }
-}
-
-int omac_testRun(void)
-{
- if (1)
- {
- Mac *m = omac1_stackinit(AES128_stackinit());
- runTest(m, tests1_aes128, countof(tests1_aes128));
- }
-
- if (1)
- {
- Mac *m = omac1_stackinit(AES192_stackinit());
- runTest(m, tests1_aes192, countof(tests1_aes192));
- }
-
- if (1)
- {
- Mac *m = omac1_stackinit(AES256_stackinit());
- runTest(m, tests1_aes256, countof(tests1_aes256));
- }
-
- if (1)
- {
- Mac *m = omac2_stackinit(AES128_stackinit());
- runTest(m, tests2_aes128, countof(tests2_aes128));
- }
-
- if (1)
- {
- Mac *m = omac2_stackinit(AES192_stackinit());
- runTest(m, tests2_aes192, countof(tests2_aes192));
- }
-
- if (1)
- {
- Mac *m = omac2_stackinit(AES256_stackinit());
- runTest(m, tests2_aes256, countof(tests2_aes256));
- }
-
- return 0;
-}
-
-TEST_MAIN(omac);
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic interface for cryptographically-secure pseudo-RNG
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_H
-#define SEC_PRNG_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-
-typedef struct PRNG
-{
- void (*reseed)(struct PRNG *ctx, const uint8_t *seed);
- void (*generate)(struct PRNG *ctx, uint8_t *data, size_t len);
- uint8_t seed_len;
- uint8_t seeded;
-} PRNG;
-
-/**
- * Feed a new seed into the PRNG.
- *
- * \note: Being a cryptographically-secure PRNG, the seed will be
- * mixed to the current state of the generator, so it is NOT possible
- * to generate the same sequence simply by using the same seed. If you
- * need such a property, use a normale PRGN like \a rand().
- */
-INLINE void prng_reseed(PRNG *ctx, const uint8_t *seed)
-{
- ASSERT(ctx->reseed);
- ctx->reseed(ctx, seed);
- ctx->seeded = 1;
-}
-
-/**
- * Get the length of the seed in bytes required by this generator.
- */
-INLINE size_t prng_seed_len(PRNG *ctx)
-{
- return ctx->seed_len;
-}
-
-/**
- * Generate some cryptographically-secure random bytes into the specified
- * buffer.
- */
-INLINE void prng_generate(PRNG *ctx, uint8_t *data, size_t len)
-{
- ASSERT(ctx->generate);
- ASSERT(ctx->seeded);
- ctx->generate(ctx, data, len);
-}
-
-
-#endif /* SEC_PRNG_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ISAAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-/*
-------------------------------------------------------------------------------
-rand.c: By Bob Jenkins. My random number generator, ISAAC. Public Domain.
-MODIFIED:
- 960327: Creation (addition of randinit, really)
- 970719: use context, not global variables, for internal state
- 980324: added main (ifdef'ed out), also rearranged randinit()
- 010626: Note that this is public domain
-------------------------------------------------------------------------------
-*/
-
-#include "isaac.h"
-#include <sec/prng.h>
-#include <cfg/compiler.h>
-#include <cfg/macros.h>
-#include <string.h>
-
-typedef uint32_t ub4;
-typedef uint16_t ub2;
-typedef uint8_t ub1;
-
-#define ind(mm,x) (*(ub4 *)((ub1 *)(mm) + ((x) & ((CONFIG_ISAAC_RANDSIZ-1)<<2))))
-#define rngstep(mix,a,b,mm,m,m2,r,x) \
-{ \
- x = *m; \
- a = (a^(mix)) + *(m2++); \
- *(m++) = y = ind(mm,x) + a + b; \
- *(r++) = b = ind(mm,y>>CONFIG_ISAAC_RANDSIZL) + x; \
-}
-
-static void isaac(IsaacContext *ctx)
-{
- register ub4 a,b,x,y,*m,*mm,*m2,*r,*mend;
- mm=ctx->randmem; r=ctx->randrsl;
- a = ctx->randa; b = ctx->randb + (++ctx->randc);
- for (m = mm, mend = m2 = m+(CONFIG_ISAAC_RANDSIZ/2); m<mend; )
- {
- rngstep( a<<13, a, b, mm, m, m2, r, x);
- rngstep( a>>6 , a, b, mm, m, m2, r, x);
- rngstep( a<<2 , a, b, mm, m, m2, r, x);
- rngstep( a>>16, a, b, mm, m, m2, r, x);
- }
- for (m2 = mm; m2<mend; )
- {
- rngstep( a<<13, a, b, mm, m, m2, r, x);
- rngstep( a>>6 , a, b, mm, m, m2, r, x);
- rngstep( a<<2 , a, b, mm, m, m2, r, x);
- rngstep( a>>16, a, b, mm, m, m2, r, x);
- }
- ctx->randb = b; ctx->randa = a;
-}
-
-
-#define mix(a,b,c,d,e,f,g,h) \
-{ \
- a^=b<<11; d+=a; b+=c; \
- b^=c>>2; e+=b; c+=d; \
- c^=d<<8; f+=c; d+=e; \
- d^=e>>16; g+=d; e+=f; \
- e^=f<<10; h+=e; f+=g; \
- f^=g>>4; a+=f; g+=h; \
- g^=h<<8; b+=g; h+=a; \
- h^=a>>9; c+=h; a+=b; \
-}
-
-static void isaac_reseed(PRNG *ctx_, const uint8_t *seed)
-{
- IsaacContext *ctx = (IsaacContext *)ctx_;
- int i;
- ub4 a,b,c,d,e,f,g,h;
- ub4 *m,*r;
-
- // Copy seed over half of randrsl, to reuse half of last-generated
- // data as seed.
- memcpy(ctx->randrsl, seed, sizeof(ctx->randrsl)/2);
-
- ctx->randa = ctx->randb = ctx->randc = 0;
- m=ctx->randmem;
- r=ctx->randrsl;
- a=b=c=d=e=f=g=h=0x9e3779b9; /* the golden ratio */
-
- for (i=0; i<4; ++i) /* scramble it */
- {
- mix(a,b,c,d,e,f,g,h);
- }
-
- /* initialize using the contents of r[] as the seed */
- for (i=0; i<CONFIG_ISAAC_RANDSIZ; i+=8)
- {
- a+=r[i ]; b+=r[i+1]; c+=r[i+2]; d+=r[i+3];
- e+=r[i+4]; f+=r[i+5]; g+=r[i+6]; h+=r[i+7];
- mix(a,b,c,d,e,f,g,h);
- m[i ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
- m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
- }
- /* do a second pass to make all of the seed affect all of m */
- for (i=0; i<CONFIG_ISAAC_RANDSIZ; i+=8)
- {
- a+=m[i ]; b+=m[i+1]; c+=m[i+2]; d+=m[i+3];
- e+=m[i+4]; f+=m[i+5]; g+=m[i+6]; h+=m[i+7];
- mix(a,b,c,d,e,f,g,h);
- m[i ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
- m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
- }
-}
-
-static void isaac_generate(PRNG *ctx_, uint8_t *data, size_t len)
-{
- IsaacContext *ctx = (IsaacContext *)ctx_;
-
- STATIC_ASSERT(sizeof(ctx->randrsl) == CONFIG_ISAAC_RANDSIZ*4);
-
- while (len)
- {
- ASSERT(ctx->randcnt <= CONFIG_ISAAC_RANDSIZ*4);
-
- if (ctx->randcnt == CONFIG_ISAAC_RANDSIZ*4)
- {
- isaac(ctx);
- ctx->randcnt = 0;
- }
-
- size_t L = MIN(len, CONFIG_ISAAC_RANDSIZ*4 - (size_t)ctx->randcnt);
- memcpy(data, (uint8_t*)ctx->randrsl + ctx->randcnt, L);
- data += L;
- ctx->randcnt += L;
- len -= L;
- }
-}
-
-
-/**********************************************************************/
-
-void isaac_init(IsaacContext *ctx)
-{
- ctx->prng.reseed = isaac_reseed;
- ctx->prng.generate = isaac_generate;
- ctx->prng.seed_len = sizeof(ctx->randrsl) / 2;
- ctx->prng.seeded = 0;
-
- ctx->randcnt = CONFIG_ISAAC_RANDSIZ*4;
- memset(ctx->randrsl, 0, sizeof(ctx->randrsl));
-}
-
-
-
-
-#ifdef NEVER
-int main()
-{
- ub4 i,j;
- randctx ctx;
- ctx.randa=ctx.randb=ctx.randc=(ub4)0;
- for (i=0; i<256; ++i) ctx.randrsl[i]=(ub4)0;
- randinit(&ctx, TRUE);
- for (i=0; i<2; ++i)
- {
- isaac(&ctx);
- for (j=0; j<256; ++j)
- {
- printf("%.8lx",ctx.randrsl[j]);
- if ((j&7)==7) printf("\n");
- }
- }
-}
-#endif
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ISAAC implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_ISAAC_H
-#define SEC_PRNG_ISAAC_H
-
-#include <sec/prng.h>
-
-/**
- * Size of the internal ISAAC state (in 32-bit words).
- *
- * ISAAC is known to generate unbiased data as follows:
- * * 3 words: 2^37 unbiased values
- * * 4 words: 2^45 unbiased values
- * * 5 words: 2^53 unbiased values
- * * 6 words: 2^61 unbiased values
- * * 7 words: 2^69 unbiased values
- * * 8 words: 2^77 unbiased values
- *
- * The period of the generator is usually much longer, but it is
- * obviously uninteresting for a CSPRNG.
- */
-#define CONFIG_ISAAC_RANDSIZL (3)
-#define CONFIG_ISAAC_RANDSIZ (1<<(CONFIG_ISAAC_RANDSIZL))
-
-typedef struct IsaacContext
-{
- PRNG prng;
- uint32_t randcnt;
- uint32_t randrsl[CONFIG_ISAAC_RANDSIZ];
- uint32_t randmem[CONFIG_ISAAC_RANDSIZ];
- uint32_t randa;
- uint32_t randb;
- uint32_t randc;
-} IsaacContext;
-
-void isaac_init(IsaacContext *ctx);
-
-#define isaac_stackinit(...) \
- ({ IsaacContext *ctx = alloca(sizeof(IsaacContext)); isaac_init(ctx , ##__VA_ARGS__); &ctx->prng; })
-
-
-#endif /* SEC_PRNG_ISAAC_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ANSI X9.17 PRNG implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "x917.h"
-#include <sec/util.h>
-#include <drv/timer.h>
-#include "hw/hw_timer.h"
-
-static void x917_next(X917Context *ctx, BlockCipher *cipher, uint8_t *out)
-{
- const size_t blen = cipher_block_len(cipher);
-
- struct
- {
- time_t t0;
- hptime_t t1;
- uint8_t padding[blen - sizeof(time_t) - sizeof(hptime_t)];
- } DT;
-
- ASSERT(sizeof(DT) == blen);
-
- memset(&DT, 0, sizeof(DT));
- DT.t0 = timer_clock();
- DT.t1 = timer_hw_hpread();
-
- cipher_ecb_encrypt(cipher, &DT);
-
- xor_block(out, (uint8_t*)&DT, ctx->state, blen);
- cipher_ecb_encrypt(cipher, out);
-
- xor_block(ctx->state, (uint8_t*)&DT, out, blen);
- cipher_ecb_encrypt(cipher, ctx->state);
-
- PURGE(DT);
-}
-
-
-static void x917_generate(PRNG *ctx_, uint8_t *data, size_t len)
-{
- X917Context *ctx = (X917Context *)ctx_;
- BlockCipher *cipher = AES128_stackinit();
-
- const size_t blen = cipher_block_len(cipher);
- uint8_t temp[blen];
-
- ASSERT(len);
- ASSERT(sizeof(ctx->state) >= blen);
- ASSERT(sizeof(ctx->key) >= cipher_key_len(cipher));
-
- cipher_set_key(cipher, ctx->key);
-
- while (len)
- {
- size_t L = MIN(blen, len);
- x917_next(ctx, cipher, temp);
- memcpy(data, temp, L);
- len -= L;
- data += L;
- }
-}
-
-static void x917_reseed(PRNG *ctx_, const uint8_t *seed)
-{
- // The X9.17 standard does not specify reseeding. To avoid external
- // dependencies, we implement it this way:
- // * Generate a new random block, xor it with the first part
- // of the seed, and use the result as new seed.
- // * Generate and throw away a block to update the state.
- X917Context *ctx = (X917Context *)ctx_;
- const size_t klen = sizeof(ctx->key);
- const size_t blen = sizeof(ctx->state);
-
- if (!ctx->rng.seeded)
- {
- memcpy(ctx->key, seed, klen);
- memcpy(ctx->state, seed+klen, blen);
- }
- else
- {
- uint8_t buf[klen];
- x917_generate(ctx_, buf, klen);
-
- xor_block(ctx->key, buf, seed, klen);
- xor_block(ctx->state, ctx->state, seed+klen, blen);
-
- PURGE(buf);
- }
-}
-
-/*********************************************************************/
-
-void x917_init(X917Context *ctx)
-{
- ctx->rng.reseed = x917_reseed;
- ctx->rng.generate = x917_generate;
- ctx->rng.seed_len = sizeof(ctx->key) + sizeof(ctx->state);
- ctx->rng.seeded = 0;
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ANSI X9.17 PRNG implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_X917_H
-#define SEC_PRNG_X917_H
-
-#include <sec/prng.h>
-#include <sec/cipher/aes.h>
-
-typedef struct X917Context
-{
- PRNG rng;
- uint8_t key[16];
- uint8_t state[16];
-
-} X917Context;
-
-void x917_init(X917Context *ctx);
-
-#define x917_stackinit(...) \
- ({ X917Context *ctx = alloca(sizeof(X917Context)); x917_init(ctx, ##__VA_ARGS__); &ctx->rng; })
-
-
-#endif /* SEC_CSPRNG_X917_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "yarrow.h"
-#include <sec/hash/sha1.h>
-#include <cfg/macros.h>
-#include <string.h>
-
-#define CONFIG_YARROW_GENERATOR_GATE 10
-
-static void yarrow_generate(PRNG *ctx_, uint8_t *data, size_t len)
-{
- YarrowContext *ctx = (YarrowContext *)ctx_;
- BlockCipher *cipher = 0;
-
- ASSERT(len != 0);
-
- do
- {
- if (ctx->lastidx == sizeof(ctx->last))
- {
- if (!cipher)
- {
- cipher = AES128_stackinit();
- ASSERT(sizeof(ctx->counter) == cipher_block_len(cipher));
- ASSERT(sizeof(ctx->curkey) == cipher_key_len(cipher));
-
- cipher_set_key(cipher, ctx->curkey);
- cipher_ctr_begin(cipher, ctx->counter);
- }
-
- cipher_ctr_step(cipher, ctx->last);
-
- if (ctx->curkey_gencount == CONFIG_YARROW_GENERATOR_GATE)
- {
- ASSERT(cipher_block_len(cipher) == cipher_key_len(cipher));
- cipher_set_key(cipher, ctx->last);
- ctx->curkey_gencount = 0;
- continue;
- }
-
- ctx->lastidx = 0;
- ctx->curkey_gencount++;
- }
-
- int n = MIN(len, 16U-ctx->lastidx);
- memcpy(data, ctx->last+ctx->lastidx, n);
- data += n;
- len -= n;
- ctx->lastidx += n;
- } while (len);
-}
-
-static void yarrow_reseed(PRNG *ctx_, const uint8_t *seed)
-{
- YarrowContext *ctx = (YarrowContext *)ctx_;
- Hash *h = SHA1_stackinit();
-
- hash_begin(h);
- hash_update(h, seed, ctx->prng.seed_len);
- hash_update(h, ctx->curkey, sizeof(ctx->curkey));
- memcpy(ctx->curkey, hash_final(h), sizeof(ctx->curkey));
-
- // Reset the counter for the sequence
- memset(ctx->counter, 0, sizeof(ctx->counter));
-}
-
-
-/*********************************************************************/
-
-void yarrow_init(YarrowContext *ctx)
-{
- ctx->prng.reseed = yarrow_reseed;
- ctx->prng.generate = yarrow_generate;
- ctx->prng.seed_len = 16;
- ctx->prng.seeded = 0;
-
- ctx->lastidx = sizeof(ctx->last);
- ctx->curkey_gencount = 0;
- memset(ctx->curkey, 0, sizeof(ctx->curkey));
-
- ASSERT(sizeof(ctx->counter) == sizeof(ctx->last));
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Yarrow implementation
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_PRNG_YARROW_H
-#define SEC_PRNG_YARROW_H
-
-#include <sec/prng.h>
-#include <sec/cipher/aes.h>
-
-typedef struct YarrowContext
-{
- PRNG prng;
-
- uint8_t counter[16];
- uint8_t curkey[16];
- uint8_t last[16];
- uint8_t curkey_gencount;
- uint8_t lastidx;
-} YarrowContext;
-
-void yarrow_init(YarrowContext *ctx);
-
-#define yarrow_stackinit(...) \
- ({ YarrowContext *ctx = alloca(sizeof(YarrowContext)); yarrow_init(ctx, ##__VA_ARGS__); &ctx->prng; })
-
-#endif /* SEC_PRNG_YARROW_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief High-level random number generation functions.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "random.h"
-#include "random_p.h"
-
-#include <cfg/macros.h>
-#include <drv/timer.h>
-#include <sec/random.h>
-#include <sec/prng.h>
-#include <sec/entropy.h>
-#include <sec/util.h>
-#include <sec/hash/sha1.h>
-#include <sec/prng/isaac.h>
-#include <sec/prng/x917.h>
-#include <sec/prng/yarrow.h>
-#include <sec/entropy/yarrow_pool.h>
-
-/********************************************************************************/
-/* Configuration of the random module */
-/********************************************************************************/
-
-#define POOL_CONTEXT PP_CAT(PP_CAT(POOL_NAMEU, CONFIG_RANDOM_POOL), Context)
-#define POOL_INIT PP_CAT(PP_CAT(POOL_NAMEL, CONFIG_RANDOM_POOL), _init)
-
-#define EXTRACTOR_STACKINIT PP_CAT(PP_CAT(EXTRACTOR_NAME, CONFIG_RANDOM_EXTRACTOR), _stackinit)
-
-#define PRNG_CONTEXT PP_CAT(PP_CAT(PRNG_NAMEU, CONFIG_RANDOM_PRNG), Context)
-#define PRNG_INIT PP_CAT(PP_CAT(PRNG_NAMEL, CONFIG_RANDOM_PRNG), _init)
-
-
-/********************************************************************************/
-/* Global state */
-/********************************************************************************/
-
-#if CONFIG_RANDOM_POOL != POOL_NONE
-static POOL_CONTEXT epool_ctx;
-static EntropyPool * const epool = (EntropyPool *)&epool_ctx;
-#endif
-
-static PRNG_CONTEXT prng_ctx;
-static PRNG * const prng = (PRNG*)&prng_ctx;
-
-static bool initialized = 0;
-
-
-/********************************************************************************/
-/* Code */
-/********************************************************************************/
-
-/*
- * Reseed the PRNG if there is enough entropy available at this time.
- *
- * Some designs (eg: fortuna) suggest to artificially limit the frequency of
- * this operation to something like 0.1s, to avoid attacks that try to exhaust
- * the entropy pool.
- *
- * We don't believe such attacks are available in an embedded system (as an attacker
- * does not have a way to ask random numbers from the pool) but we will play safe
- * here in case eg. the user does something wrong.
- */
-static void optional_reseeding(void)
-{
-#if CONFIG_RANDOM_POOL != POOL_NONE
- static ticks_t last_reseed = -1000;
-
- // We don't allow more than 10 reseedings per second
- // (as suggested by Fortuna)
- ticks_t current = timer_clock();
- if (ticks_to_ms(current - last_reseed) < 100)
- return;
-
- if (entropy_seeding_ready(epool))
- {
- uint8_t seed[prng_seed_len(prng)];
-
- entropy_make_seed(epool, seed, sizeof(seed));
- prng_reseed(prng, seed);
-
- last_reseed = current;
- PURGE(seed);
- }
-#endif
-}
-
-
-/*
- * Perform the initial seeding of the PRNG.
- *
- * At startup, we want to immediately seed the PRNG to a point where it can
- * generate safe-enough random numbers. To do this, we rely on a hw-dependent
- * function to pull entropy from available hw sources, and then feed it
- * through an extractor (if any is configured).
- */
-static void initial_seeding(void)
-{
-#if CONFIG_RANDOM_POOL != POOL_NONE
-
- // We feed entropy into the pool, until it is ready to perform a seeding.
- do
- {
- uint8_t buf[16];
- random_pull_entropy(buf, sizeof(buf));
- entropy_add(epool, 0, buf, sizeof(buf), sizeof(buf)*8);
- } while (!entropy_seeding_ready(epool));
-
- optional_reseeding();
-
-#elif CONFIG_RANDOM_EXTRACTOR != EXTRACTOR_NONE
-
- uint8_t seed[prng_seed_len(prng)];
- Hash *h = EXTRACTOR_STACKINIT();
-
- // "Randomness Extraction and Key Derivation Using the CBC, Cascade and
- // HMAC Modes" by Yevgeniy Dodis et al. suggests that an padded cascaded hash
- // function with N bits of output must have at least 2n bits of min-entropy as input
- // to be a randomness extractor (it generates an output that is computationally
- // indistiguishable from an uniform distribution).
- size_t hlen = hash_digest_len(h);
- uint8_t buf[hlen*2];
- size_t sidx = 0;
-
- while (sidx < sizeof(seed))
- {
- size_t cnt = MIN(sizeof(seed) - sidx, hlen);
-
- random_pull_entropy(buf, sizeof(buf));
-
- hash_begin(h);
- hash_update(h, buf, sizeof(buf));
- memcpy(seed+sidx, hash_final(h), cnt);
- sidx += cnt;
- }
-
- prng_reseed(prng, seed);
- PURGE(buf);
- PURGE(seed);
-
-#else
-
- // If we have been configured without a proper randomness extractor, we do not
- // have many solutions but feeding the entropy bits directly to the PRNG, and
- // hoping for the best.
- uint8_t seed[prng_seed_len(prng)];
- random_pull_entropy(seed, sizeof(seed));
- prng_reseed(prng, seed);
- PURGE(seed);
-
-#endif
-}
-
-void random_init(void)
-{
-#if CONFIG_RANDOM_POOL != POOL_NONE
- POOL_INIT(&epool_ctx);
-#endif
- PRNG_INIT(&prng_ctx);
-
- initialized = 1;
- initial_seeding();
-}
-
-void random_gen(uint8_t *out, size_t len)
-{
- ASSERT(initialized);
-
- optional_reseeding();
- prng_generate(prng, out, len);
-}
-
-#if CONFIG_RANDOM_POOL != POOL_NONE
-
-void random_add_entropy(enum EntropySource source_idx,
- const uint8_t *data, size_t len,
- int entropy)
-{
- entropy_add(epool, source_idx, data, len, entropy);
-}
-
-#endif
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief High-level random number generation functions.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_RANDOM_H
-#define SEC_RANDOM_H
-
-#include <cfg/compiler.h>
-
-#define RANDOM_SECURITY_MINIMUM 0
-#define RANDOM_SECURITY_MEDIUM 1
-#define RANDOM_SECURITY_STRONG 2
-
-/**
- * Configure the security level required by the application.
- *
- * Application developers are suggested to keep the strongest
- * setting (default) unless there are memory or code size issues.
- *
- * Available settings are:
- *
- * * \a RANDOM_SECURITY_STRONG: The random library will use
- * an entropy pool, automatically feeded by drivers, to gather
- * entropy from hardware sources. Data from the pool will
- * be used to reseed a secure random number generator. Moreover,
- * the generator will be automatically initialised
- * with enough entropy to generate safe random numbers even
- * immediately after hw reset.
- * The overall structure is the same as used by modern
- * desktop PCs for generating secure random numbers.
- *
- * * \a RANDOM_SECURITY_MEDIUM: This intermediate settings will
- * avoid usage of an entropy pool, to reduce memory and code
- * usage. The security of this settings relies only on the
- * good behaviour of the random number generator (even though
- * it will be well-seeded at startup).
- *
- * * \a RANDOM_SECURITY_MINIMUM: This is the lighter setting that
- * allows minimal memory and code usage, and it suggested only
- * for extremely constrained systems, that only generates few
- * random numbers. Even if the generator is still secure on
- * paper, its seeding will not be safe (though still entropic
- * to allow different sequences to be generated after each reset).
- */
-#define RANDOM_SECURITY_LEVEL RANDOM_SECURITY_STRONG
-
-
-void random_init(void);
-
-void random_gen(uint8_t *out, size_t len);
-
-INLINE uint8_t random_gen8(void)
-{
- uint8_t x;
- random_gen(&x, 1);
- return x;
-}
-
-INLINE uint16_t random_gen16(void)
-{
- uint8_t x;
- random_gen(&x, 2);
- return x;
-}
-
-INLINE uint32_t random_gen32(void)
-{
- uint8_t x;
- random_gen(&x, 4);
- return x;
-}
-
-#endif /* SEC_RANDOM_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief LM3 backend implementation entropy pulling.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "random_p.h"
-#include <cpu/power.h>
-#include <io/cm3.h>
-#include <drv/clock_lm3s.h>
-
-/*
- * Return the cpu core temperature in raw format
- */
-INLINE uint16_t hw_readRawTemp(void)
-{
- /* Trig the temperature sampling */
- HWREG(ADC0_BASE + ADC_O_PSSI) |= ADC_PSSI_SS3;
-
- while (!(HWREG(ADC0_BASE + ADC_O_SSFSTAT3) & ADC_SSFSTAT3_FULL))
- cpu_relax();
-
- return (uint16_t)HWREG(ADC0_BASE + ADC_O_SSFIFO3);
-}
-
-INLINE void hw_initIntTemp(void)
-{
- SYSCTL_RCGC0_R |= SYSCTL_RCGC0_ADC0;
-
- lm3s_busyWait(10);
-
- /* Disable all sequence */
- HWREG(ADC0_BASE + ADC_O_ACTSS) = 0;
- /* Set trigger event to programmed (for all sequence) */
- HWREG(ADC0_BASE + ADC_O_EMUX) = 0;
- /* Enalbe read of temperature sensor */
- HWREG(ADC0_BASE + ADC_O_SSCTL3) |= ADC_SSCTL3_TS0;
- /* Enable sequence S03 (single sample on select channel) */
- HWREG(ADC0_BASE + ADC_O_ACTSS) |= ADC_ACTSS_ASEN3;
-}
-
-
-void random_pull_entropy(uint8_t *entropy, size_t len)
-{
- // We use the internal temperature sensor of LM3S as a source of entropy.
- // The last bit of the acquisition is very variable and with a decent distribution
- // to consider it "entropic". It does not really matter because it will
- // go through a randomness extractor anyway.
- hw_initIntTemp();
-
- for (size_t j=0; j<len; j++)
- {
- uint8_t accum = 0;
- for (int b=0; b<8; ++b)
- if (hw_readRawTemp() & 1)
- accum |= 1<<b;
-
- *entropy++ = accum;
- }
-}
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Internal function definitions for random
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#ifndef SEC_RANDOM_P_H
-#define SEC_RANDOM_P_H
-
-#include <cfg/compiler.h>
-#include <sec/random.h>
-
-/********************************************************************************/
-/* Configuration of the random module */
-/********************************************************************************/
-
-#define POOL_NONE 0
-#define POOL_YARROW 1
-#define POOL_NAMEU1 YarrowPool
-#define POOL_NAMEL1 yarrowpool
-
-#define PRNG_ISAAC 1
-#define PRNG_X917 2
-#define PRNG_YARROW 3
-#define PRNG_NAMEU1 Isaac
-#define PRNG_NAMEL1 isaac
-#define PRNG_NAMEU2 X917
-#define PRNG_NAMEL2 x917
-#define PRNG_NAMEU3 Yarrow
-#define PRNG_NAMEL3 yarrow
-
-#define EXTRACTOR_NONE 0
-#define EXTRACTOR_SHA1 1
-#define EXTRACTOR_NAME1 SHA1
-
-#if RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_STRONG
- #define CONFIG_RANDOM_POOL POOL_YARROW
- #define CONFIG_RANDOM_EXTRACTOR EXTRACTOR_NONE // not required with a pool
- #define CONFIG_RANDOM_PRNG PRNG_YARROW
-#elif RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_MEDIUM
- #define CONFIG_RANDOM_POOL POOL_NONE
- #define CONFIG_RANDOM_EXTRACTOR EXTRACTOR_SHA1
- #define CONFIG_RANDOM_PRNG PRNG_X917
-#elif RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_MINIMUM
- #define CONFIG_RANDOM_POOL POOL_NONE
- #define CONFIG_RANDOM_EXTRACTOR EXTRACTOR_NONE
- #define CONFIG_RANDOM_PRNG PRNG_ISAAC
-#else
- #error Unsupported random security level value
-#endif
-
-/***************************************************************************/
-/* Internal functions used by BeRTOS drivers to push data into */
-/* the entropy pool */
-/***************************************************************************/
-
-#if CONFIG_RANDOM_POOL != POOL_NONE
-
-enum EntropySource
-{
- ENTROPY_SOURCE_IRQ,
- ENTROPY_SOURCE_ADC,
-};
-
-/*
- * Add entropy to the global entropy pool.
- */
-void random_add_entropy(enum EntropySource source_idx,
- const uint8_t *data, size_t len,
- int entropy);
-
-
-/*
- * Add entropy to the global interrupt pool based on the IRQ
- * call time.
- *
- * This function can be called from interrupt handlers that are
- * triggered at unpredictable intervals (so it should not be
- * called from clock-driven interrupts like ADC, PWM, etc.).
- *
- */
-void random_add_entropy_irq(int irq);
-
-#endif
-
-/*
- * This hardware-dependent function can be used to pull raw
- * entropy from a hardware source at startup only. It is used
- * for initial seeding of the random generator and should not
- * be used in different situations.
- */
-void random_pull_entropy(uint8_t *entropy, size_t len);
-
-#endif /* SEC_RANDOM_P_H */
+++ /dev/null
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License. This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Generic utilities.
- * \author Giovanni Bajo <rasky@develer.com>
- *
- */
-
-#include "util.h"
-#include <sec/kdf/pbkdf2.h>
-#include <sec/mac/hmac.h>
-#include <sec/hash/sha1.h>
-
-// FIXME: this macros should be generated by the wizard
-#define BERTOS_PROJECT_NAME "bertos_project"
-
-#define SALT (BERTOS_PROJECT_NAME "P2K_SALT")
-
-void password2key(const char *pwd, size_t pwd_len,
- uint8_t *key, size_t key_len)
-{
- Kdf *kdf = PBKDF2_stackinit(hmac_stackinit(SHA1_stackinit()));
-
- kdf_begin(kdf, pwd, pwd_len, (uint8_t*)SALT, sizeof(SALT));
- kdf_read(kdf, key, key_len);
-
- // FIXME: how to purge the stack?
-}
+++ /dev/null
-#ifndef SEC_UTIL_H
-#define SEC_UTIL_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-#include <string.h>
-
-/**
- * Purge local variables, by zeroing them.
- *
- * This can be used to clear stack from intermediate results in crypto
- * calculations that might somehow be leaked.
- */
-#define PURGE(x) \
- memset(&x, 0, sizeof(x))
-
-/**
- * Convert a generic "password" (low-diffused) to a generic "key"
- * (high-diffused).
- *
- * In common terminology, a "password" is a key with weak cryptographic
- * characteristics, such as commonly used password input by an user,
- * which are usually short and use only a few different characters from
- * the 0-255 byte range.
- *
- * This function derives a strong key from the password using a one-way
- * process.
- *
- * \note Uses PBKDF2 as key-derivation function, with a fixed salt that
- * changes for each Bertos project.
- */
-void password2key(const char *pwd, size_t pwd_len,
- uint8_t *key, size_t key_len);
-
-/**
- * Perform a bitwise xor between \a in and \a inout, and store
- * the result into \a inout.
- */
-INLINE void xor_block(uint8_t *out, const uint8_t *in1, const uint8_t* in2, size_t len);
-
-/**
- * Perform a bitwise xor over \a inout with constant \a k.
- */
-INLINE void xor_block_const(uint8_t *out, const uint8_t *in, uint8_t k, size_t len);
-
-
-// FIXME: provide non-32bit fallback
-// FIXME: proper ifdef conditional
-#if 1 // 32-bit optimized versions
-
-// FIXME: this code is currently buggy because it ignores alignment issues.
-INLINE void xor_block(uint8_t *out, const uint8_t *in1, const uint8_t* in2, size_t len)
-{
- ASSERT(((size_t)in1 % 4) == 0);
- ASSERT(((size_t)in2 % 4) == 0);
- ASSERT(((size_t)out % 4) == 0);
-
- const uint32_t *ibuf1 = (const uint32_t *)in1;
- const uint32_t *ibuf2 = (const uint32_t *)in2;
- uint32_t *obuf = (uint32_t *)out;
- size_t rem = (len & 3);
-
- len /= 4;
- while (len--)
- *obuf++ = *ibuf1++ ^ *ibuf2++;
-
- in1 = (const uint8_t*)ibuf1;
- in2 = (const uint8_t*)ibuf2;
- out = (uint8_t*)obuf;
- while (rem--)
- *out++ = *in1++ ^ *in2++;
-}
-
-INLINE void xor_block_const(uint8_t *out, const uint8_t *in, uint8_t k, size_t len)
-{
- ASSERT(((size_t)in % 4) == 0);
- ASSERT(((size_t)out % 4) == 0);
-
- uint32_t k32 = k | ((uint32_t)k<<8) | ((uint32_t)k<<16) | ((uint32_t)k<<24);
- const uint32_t *ibuf = (const uint32_t *)in;
- uint32_t *obuf = (uint32_t *)out;
- size_t rem = (len & 3);
-
- len /= 4;
- while (len--)
- *obuf++ = *ibuf++ ^ k32;
-
- in = (const uint8_t*)ibuf;
- out = (uint8_t*)obuf;
- while (rem--)
- *out++ = *in++ ^ k;
-}
-
-#endif
-
-#endif /* SEC_UTIL_H */