diff --git a/Controller.cpp b/Controller.cpp index 6b600e8..efd8ca9 100644 --- a/Controller.cpp +++ b/Controller.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include "TranscoderPacket.h" #include "Controller.h" #include "Configure.h" @@ -54,7 +53,7 @@ bool CController::Start() imbeFuture = std::async(std::launch::async, &CController::ProcessIMBEThread, this); ambeFuture = std::async(std::launch::async, &CController::ProcessAMBEThread, this); usrpFuture = std::async(std::launch::async, &CController::ProcessUSRPThread, this); - swambe2Future = std::async(std::launch::async, &CController::ProcessSWAMBE2Thread,this); + ambe2Future = std::async(std::launch::async, &CController::ProcessAMBE2Thread, this); return false; } @@ -80,7 +79,6 @@ bool CController::InitVocoders() c2_32[c] = std::unique_ptr(new CCodec2(true)); } - md380_init(); ambe_in_num = calcNumerator(g_Conf.GetGain(EGainType::dmrin)); ambe_out_num = calcNumerator(g_Conf.GetGain(EGainType::dmrout)); dstar_in_num = calcNumerator(g_Conf.GetGain(EGainType::dstarin)); @@ -112,7 +110,7 @@ void CController::ReadReflectorThread() ambe_queue.push(packet); break; case ECodecType::dmr: - swambe2_queue.push(packet); + ambe2_queue.push(packet); break; case ECodecType::p25: imbe_queue.push(packet); @@ -213,7 +211,7 @@ void CController::Codec2toAudio(std::shared_ptr packet) } // the only thing left is to encode the two ambe, so push the packet onto both AMBE queues ambe_queue.push(packet); - swambe2_queue.push(packet); + ambe2_queue.push(packet); imbe_queue.push(packet); usrp_queue.push(packet); } @@ -279,7 +277,7 @@ void CController::AMBEtoAudio(std::shared_ptr packet) } packet->SetAudioSamples(tmp, false); codec2_queue.push(packet); - swambe2_queue.push(packet); + ambe2_queue.push(packet); imbe_queue.push(packet); usrp_queue.push(packet); } @@ -307,7 +305,7 @@ void CController::ProcessAMBEThread() } } -void CController::AudiotoSWAMBE2(std::shared_ptr packet) +void CController::AudiotoAMBE2(std::shared_ptr packet) { uint8_t ambe[9]; const int16_t *p = packet->GetAudioSamples(); @@ -317,10 +315,10 @@ void CController::AudiotoSWAMBE2(std::shared_ptr packet) int16_t tmp[160]; for(int i = 0; i < 160; ++i) tmp[i] = int16_t((p[i] * ambe_in_num) >> 8); - md380_encode_fec(ambe, tmp); + ambevocoder.encode_2450x1150(tmp, ambe); } else - md380_encode_fec(ambe, (int16_t *)p); + ambevocoder.encode_2450x1150((int16_t *)p, ambe); packet->SetDMRData(ambe); @@ -330,11 +328,11 @@ void CController::AudiotoSWAMBE2(std::shared_ptr packet) send_mux.unlock(); } -void CController::SWAMBE2toAudio(std::shared_ptr packet) +void CController::AMBE2toAudio(std::shared_ptr packet) { int16_t tmp[160]; uint8_t ambe[9]; - md380_decode_fec((uint8_t *)packet->GetDMRData(), tmp); + ambevocoder.decode_2450x1150(tmp, (uint8_t *)packet->GetDMRData()); if (ambe_out_num != 256) { for (int i=0; i<160; i++) @@ -347,11 +345,11 @@ void CController::SWAMBE2toAudio(std::shared_ptr packet) usrp_queue.push(packet); } -void CController::ProcessSWAMBE2Thread() +void CController::ProcessAMBE2Thread() { while (keep_running) { - auto packet = swambe2_queue.pop(); + auto packet = ambe2_queue.pop(); switch (packet->GetCodecIn()) { @@ -360,11 +358,11 @@ void CController::ProcessSWAMBE2Thread() case ECodecType::dstar: case ECodecType::p25: case ECodecType::usrp: - AudiotoSWAMBE2(packet); + AudiotoAMBE2(packet); break; case ECodecType::dmr: - SWAMBE2toAudio(packet); + AMBE2toAudio(packet); break; } } @@ -389,7 +387,7 @@ void CController::IMBEtoAudio(std::shared_ptr packet) packet->SetAudioSamples(tmp, false); ambe_queue.push(packet); codec2_queue.push(packet); - swambe2_queue.push(packet); + ambe2_queue.push(packet); usrp_queue.push(packet); } @@ -453,7 +451,7 @@ void CController::USRPtoAudio(std::shared_ptr packet) codec2_queue.push(packet); ambe_queue.push(packet); - swambe2_queue.push(packet); + ambe2_queue.push(packet); imbe_queue.push(packet); } diff --git a/Controller.h b/Controller.h index 2bf7998..ae3f1d6 100644 --- a/Controller.h +++ b/Controller.h @@ -24,7 +24,6 @@ #include #include #include -#include #include "PacketQueue.h" #include "codec2.h" #include "TCSocket.h" @@ -42,7 +41,7 @@ public: protected: std::atomic keep_running; - std::future reflectorFuture, c2Future, imbeFuture, ambeFuture, swambe2Future, usrpFuture; + std::future reflectorFuture, c2Future, imbeFuture, ambeFuture, ambe2Future, usrpFuture; std::unordered_map audio_store; std::unordered_map data_store; CTCClient tcClient; @@ -51,7 +50,7 @@ protected: CPacketQueue codec2_queue; CPacketQueue imbe_queue; CPacketQueue ambe_queue; - CPacketQueue swambe2_queue; + CPacketQueue ambe2_queue; CPacketQueue usrp_queue; std::mutex send_mux; int32_t dstar_in_num, dstar_out_num, ambe_in_num, ambe_out_num, usrp_rx_num, usrp_tx_num; @@ -67,7 +66,7 @@ protected: void ProcessIMBEThread(); void ProcessAMBEThread(); - void ProcessSWAMBE2Thread(); + void ProcessAMBE2Thread(); void ProcessUSRPThread(); void Codec2toAudio(std::shared_ptr packet); void AudiotoCodec2(std::shared_ptr packet); @@ -78,6 +77,6 @@ protected: void USRPtoAudio(std::shared_ptr packet); void AudiotoUSRP(std::shared_ptr packet); void SendToReflector(std::shared_ptr packet); - void SWAMBE2toAudio(std::shared_ptr packet); - void AudiotoSWAMBE2(std::shared_ptr packet); + void AMBE2toAudio(std::shared_ptr packet); + void AudiotoAMBE2(std::shared_ptr packet); }; diff --git a/Makefile b/Makefile index 252f0f2..72f3e61 100644 --- a/Makefile +++ b/Makefile @@ -10,9 +10,9 @@ else CFLAGS = -W -Werror -Icodec2 -MMD -MD -std=c++17 endif -LDFLAGS = -limbe_vocoder -lmd380_vocoder -pthread +LDFLAGS = -pthread -SRCS = $(wildcard *.cpp) $(wildcard codec2/*.cpp) $(wildcard mbe/*.cpp) +SRCS = $(wildcard *.cpp) $(wildcard codec2/*.cpp) $(wildcard imbe_vocoder/*.cpp) $(wildcard mbe/*.cpp) OBJS = $(SRCS:.cpp=.o) DEPS = $(SRCS:.cpp=.d) EXE = tcd diff --git a/README.md b/README.md index 7c3a98e..67c22c6 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,7 @@ Use your favorite text editor to edit the following files: ## Transcoding options -The md380_vocoder library for arm32 linux OS is located here: -https://github.com/nostar/md380_vocoder - -The md380_vocoder library for all Intel/AMD 64-bit and ARM 64-bit platforms (including Android) is located here: -https://github.com/nostar/md380_vocoder_dynarmic +This transcoder is all software with no external library requirements, and no hardware requirements. Since there are no hardware based module restrictions, all 26 modules can be transcoded. ## Installing *tcd* when the transcoder is local diff --git a/imbe_vocoder/aux_sub.cpp b/imbe_vocoder/aux_sub.cpp new file mode 100644 index 0000000..b5bfec9 --- /dev/null +++ b/imbe_vocoder/aux_sub.cpp @@ -0,0 +1,184 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ +#include "typedef.h" +#include "basic_op.h" +#include "imbe.h" +#include "aux_sub.h" +#include "tbls.h" + +//----------------------------------------------------------------------------- +// PURPOSE: +// Return pointer to bit allocation array +// according to the number of harmonics +// +// INPUT: +// num_harms - The number of harmonics +// +// OUTPUT: +// None +// +// RETURN: +// Pointer to bits allocation array +// +//----------------------------------------------------------------------------- +const UWord16 *get_bit_allocation_arr(Word16 num_harms) +{ + UWord16 offset_in_word; + Word16 index; + + if(num_harms == NUM_HARMS_MIN) + return &bit_allocation_tbl[0]; + else + { + index = num_harms - NUM_HARMS_MIN - 1; + offset_in_word = bit_allocation_offset_tbl[index >> 2] + ((3 + (index >> 2)) * (index & 0x3)); + return &bit_allocation_tbl[offset_in_word]; + } +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Unpack bit allocation table's item +// +// INPUT: +// num_harms - The number of harmonics +// ptr - Pointer to buffer to place bit allocation data +// +// OUTPUT: +// Unpacked bit allocation table +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void get_bit_allocation(Word16 num_harms, Word16 *ptr) +{ + const UWord16 *bat_ptr; + UWord16 tmp; + Word16 i; + + bat_ptr = get_bit_allocation_arr(num_harms); + + for(i = 0; i < num_harms - 1; i += 4) + { + tmp = *bat_ptr++; + ptr[3] = tmp & 0xF; tmp >>= 4; + ptr[2] = tmp & 0xF; tmp >>= 4; + ptr[1] = tmp & 0xF; tmp >>= 4; + ptr[0] = tmp & 0xF; + ptr += 4; + } +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Set the elements of a 16 bit input vector to zero. +// +// INPUT: +// vec - Pointer to vector +// n - size of vec +// +// OUTPUT: +// None +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void v_zap(Word16 *vec, Word16 n) +{ + while(n--) + *vec++ = 0; +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Copy the contents of one 16 bit input vector to another +// +// INPUT: +// vec1 - Pointer to the destination vector +// vec2 - Pointer to the source vector +// n - size of data should be copied +// +// OUTPUT: +// Copy of the source vector +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void v_equ(Word16 *vec1, Word16 *vec2, Word16 n) +{ + while(n--) + *vec1++ = *vec2++; +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Compute the sum of square magnitude of a 16 bit input vector +// with saturation and truncation. Output is a 32 bit number. +// +// INPUT: +// vec - Pointer to the vector +// n - size of input vectors +// +// OUTPUT: +// none +// +// RETURN: +// 32 bit long signed integer result +// +//----------------------------------------------------------------------------- +Word32 L_v_magsq(Word16 *vec, Word16 n) +{ + Word32 L_magsq = 0; + + while(n--) + { + L_magsq = L_mac(L_magsq, *vec, *vec); + vec++; + } + return L_magsq; +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Copy the contents of one 16 bit input vector to another with shift +// +// INPUT: +// vec1 - Pointer to the destination vector +// vec2 - Pointer to the source vector +// scale - right shift factor +// n - size of data should be copied +// +// OUTPUT: +// Copy of the source vector +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void v_equ_shr(Word16 *vec1, Word16 *vec2, Word16 scale, Word16 n) +{ + while(n--) + *vec1++ = shr(*vec2++,scale); +} + diff --git a/imbe_vocoder/aux_sub.h b/imbe_vocoder/aux_sub.h new file mode 100644 index 0000000..ada0cd2 --- /dev/null +++ b/imbe_vocoder/aux_sub.h @@ -0,0 +1,133 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _AUX_SUB +#define _AUX_SUB + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Return pointer to bit allocation array +// according to the number of harmonics +// +// INPUT: +// num_harms - The number of harmonics +// +// OUTPUT: +// None +// +// RETURN: +// Pointer to bits allocation array +// +//----------------------------------------------------------------------------- +const UWord16 *get_bit_allocation_arr(Word16 num_harms); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Unpack bit allocation table's item +// +// INPUT: +// num_harms - The number of harmonics +// ptr - Pointer to buffer to place bit allocation data +// +// OUTPUT: +// Unpacked bit allocation table +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void get_bit_allocation(Word16 num_harms, Word16 *ptr); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Set the elements of a 16 bit input vector to zero. +// +// INPUT: +// vec - Pointer to vector +// n - size of vec +// +// OUTPUT: +// None +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void v_zap(Word16 *vec, Word16 n); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Copy the contents of one 16 bit input vector to another +// +// INPUT: +// vec1 - Pointer to the destination vector +// vec2 - Pointer to the source vector +// n - size of data should be copied +// +// OUTPUT: +// Copy of the source vector +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void v_equ(Word16 *vec1, Word16 *vec2, Word16 n); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Compute the sum of square magnitude of a 16 bit input vector +// with saturation and truncation. Output is a 32 bit number. +// +// INPUT: +// vec - Pointer to the vector +// n - size of input vectors +// +// OUTPUT: +// none +// +// RETURN: +// 32 bit long signed integer result +// +//----------------------------------------------------------------------------- +Word32 L_v_magsq(Word16 *vec, Word16 n); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Copy the contents of one 16 bit input vector to another with shift +// +// INPUT: +// vec1 - Pointer to the destination vector +// vec2 - Pointer to the source vector +// scale - right shift factor +// n - size of data should be copied +// +// OUTPUT: +// Copy of the source vector +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void v_equ_shr(Word16 *vec1, Word16 *vec2, Word16 scale, Word16 n); + +#endif diff --git a/imbe_vocoder/basic_op.h b/imbe_vocoder/basic_op.h new file mode 100644 index 0000000..9132ba1 --- /dev/null +++ b/imbe_vocoder/basic_op.h @@ -0,0 +1,85 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ +/*___________________________________________________________________________ + | | + | Constants and Globals | + | | + | $Id $ + |___________________________________________________________________________| +*/ +extern Flag Overflow; +extern Flag Carry; + +#define MAX_32 (Word32)0x7fffffffL +#define MIN_32 (Word32)0x80000000L + +#define MAX_16 (Word16)0x7fff +#define MIN_16 (Word16)0x8000 + +/*___________________________________________________________________________ + | | + | Prototypes for basic arithmetic operators | + |___________________________________________________________________________| +*/ + +Word16 add (Word16 var1, Word16 var2); /* Short add, 1 */ +Word16 sub (Word16 var1, Word16 var2); /* Short sub, 1 */ +Word16 abs_s (Word16 var1); /* Short abs, 1 */ +Word16 shl (Word16 var1, Word16 var2); /* Short shift left, 1 */ +Word16 shr (Word16 var1, Word16 var2); /* Short shift right, 1 */ +Word16 mult (Word16 var1, Word16 var2); /* Short mult, 1 */ +Word32 L_mult (Word16 var1, Word16 var2); /* Long mult, 1 */ +Word16 negate (Word16 var1); /* Short negate, 1 */ +Word16 extract_h (Word32 L_var1); /* Extract high, 1 */ +Word16 extract_l (Word32 L_var1); /* Extract low, 1 */ +Word16 round (Word32 L_var1); /* Round, 1 */ +Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2); /* Mac, 1 */ +Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2); /* Msu, 1 */ +Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2); /* Mac without + sat, 1 */ +Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2); /* Msu without + sat, 1 */ +Word32 L_add (Word32 L_var1, Word32 L_var2); /* Long add, 2 */ +Word32 L_sub (Word32 L_var1, Word32 L_var2); /* Long sub, 2 */ +Word32 L_add_c (Word32 L_var1, Word32 L_var2); /* Long add with c, 2 */ +Word32 L_sub_c (Word32 L_var1, Word32 L_var2); /* Long sub with c, 2 */ +Word32 L_negate (Word32 L_var1); /* Long negate, 2 */ +Word16 mult_r (Word16 var1, Word16 var2); /* Mult with round, 2 */ +Word32 L_shl (Word32 L_var1, Word16 var2); /* Long shift left, 2 */ +Word32 L_shr (Word32 L_var1, Word16 var2); /* Long shift right, 2*/ +Word16 shr_r (Word16 var1, Word16 var2); /* Shift right with + round, 2 */ +Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2); /* Mac with + rounding,2 */ +Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with + rounding,2 */ +Word32 L_deposit_h (Word16 var1); /* 16 bit var1 -> MSB, 2 */ +Word32 L_deposit_l (Word16 var1); /* 16 bit var1 -> LSB, 2 */ + +Word32 L_shr_r (Word32 L_var1, Word16 var2); /* Long shift right with + round, 3 */ +Word32 L_abs (Word32 L_var1); /* Long abs, 3 */ +Word32 L_sat (Word32 L_var1); /* Long saturation, 4 */ +Word16 norm_s (Word16 var1); /* Short norm, 15 */ +Word16 div_s (Word16 var1, Word16 var2); /* Short division, 18 */ +Word16 norm_l (Word32 L_var1); /* Long norm, 30 */ + + diff --git a/imbe_vocoder/basicop2.cpp b/imbe_vocoder/basicop2.cpp new file mode 100644 index 0000000..25a795e --- /dev/null +++ b/imbe_vocoder/basicop2.cpp @@ -0,0 +1,2157 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ +/*___________________________________________________________________________ + | | + | Basic arithmetic operators. | + | | + | $Id $ + |___________________________________________________________________________| +*/ + +/*___________________________________________________________________________ + | | + | Include-Files | + |___________________________________________________________________________| +*/ + +#include +#include +#include "typedef.h" +#include "basic_op.h" + +#if (WMOPS) +#include "count.h" +extern BASIC_OP multiCounter[MAXCOUNTERS]; +extern int currCounter; + +#endif + +/*___________________________________________________________________________ + | | + | Local Functions | + |___________________________________________________________________________| +*/ +Word16 saturate (Word32 L_var1); + +/*___________________________________________________________________________ + | | + | Constants and Globals | + |___________________________________________________________________________| +*/ +Flag Overflow = 0; +Flag Carry = 0; + +/*___________________________________________________________________________ + | | + | Functions | + |___________________________________________________________________________| +*/ + +/*___________________________________________________________________________ + | | + | Function Name : saturate | + | | + | Purpose : | + | | + | Limit the 32 bit input to the range of a 16 bit word. | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 +saturate (Word32 L_var1) +{ + Word16 var_out; + + if (L_var1 > 0X00007fffL) + { + Overflow = 1; + var_out = MAX_16; + } + else if (L_var1 < (Word32) 0xffff8000L) + { + Overflow = 1; + var_out = MIN_16; + } + else + { + var_out = extract_l (L_var1); +#if (WMOPS) + multiCounter[currCounter].extract_l--; +#endif + } + + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : add | + | | + | Purpose : | + | | + | Performs the addition (var1+var2) with overflow control and saturation;| + | the 16 bit result is set at +32767 when overflow occurs or at -32768 | + | when underflow occurs. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 add (Word16 var1, Word16 var2) +{ + Word16 var_out; + Word32 L_sum; + + L_sum = (Word32) var1 + var2; + var_out = saturate (L_sum); +#if (WMOPS) + multiCounter[currCounter].add++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : sub | + | | + | Purpose : | + | | + | Performs the subtraction (var1+var2) with overflow control and satu- | + | ration; the 16 bit result is set at +32767 when overflow occurs or at | + | -32768 when underflow occurs. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 sub (Word16 var1, Word16 var2) +{ + Word16 var_out; + Word32 L_diff; + + L_diff = (Word32) var1 - var2; + var_out = saturate (L_diff); +#if (WMOPS) + multiCounter[currCounter].sub++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : abs_s | + | | + | Purpose : | + | | + | Absolute value of var1; abs_s(-32768) = 32767. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 abs_s (Word16 var1) +{ + Word16 var_out; + + if (var1 == (Word16) 0X8000) + { + var_out = MAX_16; + } + else + { + if (var1 < 0) + { + var_out = -var1; + } + else + { + var_out = var1; + } + } +#if (WMOPS) + multiCounter[currCounter].abs_s++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : shl | + | | + | Purpose : | + | | + | Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill| + | the var2 LSB of the result. If var2 is negative, arithmetically shift | + | var1 right by -var2 with sign extension. Saturate the result in case of | + | underflows or overflows. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 shl (Word16 var1, Word16 var2) +{ + Word16 var_out; + Word32 result; + + if (var2 < 0) + { + if (var2 < -16) + var2 = -16; + var_out = shr (var1, -var2); +#if (WMOPS) + multiCounter[currCounter].shr--; +#endif + } + else + { + result = (Word32) var1 *((Word32) 1 << var2); + + if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result))) + { + Overflow = 1; + var_out = (var1 > 0) ? MAX_16 : MIN_16; + } + else + { + var_out = extract_l (result); +#if (WMOPS) + multiCounter[currCounter].extract_l--; +#endif + } + } +#if (WMOPS) + multiCounter[currCounter].shl++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : shr | + | | + | Purpose : | + | | + | Arithmetically shift the 16 bit input var1 right var2 positions with | + | sign extension. If var2 is negative, arithmetically shift var1 left by | + | -var2 with sign extension. Saturate the result in case of underflows or | + | overflows. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 shr (Word16 var1, Word16 var2) +{ + Word16 var_out; + + if (var2 < 0) + { + if (var2 < -16) + var2 = -16; + var_out = shl (var1, -var2); +#if (WMOPS) + multiCounter[currCounter].shl--; +#endif + } + else + { + if (var2 >= 15) + { + var_out = (var1 < 0) ? -1 : 0; + } + else + { + if (var1 < 0) + { + var_out = ~((~var1) >> var2); + } + else + { + var_out = var1 >> var2; + } + } + } + +#if (WMOPS) + multiCounter[currCounter].shr++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : mult | + | | + | Purpose : | + | | + | Performs the multiplication of var1 by var2 and gives a 16 bit result | + | which is scaled i.e.: | + | mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and | + | mult(-32768,-32768) = 32767. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 mult (Word16 var1, Word16 var2) +{ + Word16 var_out; + Word32 L_product; + + L_product = (Word32) var1 *(Word32) var2; + + L_product = (L_product & (Word32) 0xffff8000L) >> 15; + + if (L_product & (Word32) 0x00010000L) + L_product = L_product | (Word32) 0xffff0000L; + + var_out = saturate (L_product); +#if (WMOPS) + multiCounter[currCounter].mult++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_mult | + | | + | Purpose : | + | | + | L_mult is the 32 bit result of the multiplication of var1 times var2 | + | with one shift left i.e.: | + | L_mult(var1,var2) = L_shl((var1 times var2),1) and | + | L_mult(-32768,-32768) = 2147483647. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_mult (Word16 var1, Word16 var2) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1 *(Word32) var2; + + if (L_var_out != (Word32) 0x40000000L) + { + L_var_out *= 2; + } + else + { + Overflow = 1; + L_var_out = MAX_32; + } + +#if (WMOPS) + multiCounter[currCounter].L_mult++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : negate | + | | + | Purpose : | + | | + | Negate var1 with saturation, saturate in the case where input is -32768:| + | negate(var1) = sub(0,var1). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 negate (Word16 var1) +{ + Word16 var_out; + + var_out = (var1 == MIN_16) ? MAX_16 : -var1; +#if (WMOPS) + multiCounter[currCounter].negate++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : extract_h | + | | + | Purpose : | + | | + | Return the 16 MSB of L_var1. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32 ) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 extract_h (Word32 L_var1) +{ + Word16 var_out; + + var_out = (Word16) (L_var1 >> 16); +#if (WMOPS) + multiCounter[currCounter].extract_h++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : extract_l | + | | + | Purpose : | + | | + | Return the 16 LSB of L_var1. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32 ) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 extract_l (Word32 L_var1) +{ + Word16 var_out; + + var_out = (Word16) L_var1; +#if (WMOPS) + multiCounter[currCounter].extract_l++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : round | + | | + | Purpose : | + | | + | Round the lower 16 bits of the 32 bit input number into the MS 16 bits | + | with saturation. Shift the resulting bits right by 16 and return the 16 | + | bit number: | + | round(L_var1) = extract_h(L_add(L_var1,32768)) | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32 ) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 round (Word32 L_var1) +{ + Word16 var_out; + Word32 L_rounded; + + L_rounded = L_add (L_var1, (Word32) 0x00008000L); +#if (WMOPS) + multiCounter[currCounter].L_add--; +#endif + var_out = extract_h (L_rounded); +#if (WMOPS) + multiCounter[currCounter].extract_h--; + multiCounter[currCounter].round++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_mac | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | + | result to L_var3 with saturation, return a 32 bit result: | + | L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult (var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_mult--; +#endif + L_var_out = L_add (L_var3, L_product); +#if (WMOPS) + multiCounter[currCounter].L_add--; + multiCounter[currCounter].L_mac++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_msu | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | + | bit result to L_var3 with saturation, return a 32 bit result: | + | L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult (var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_mult--; +#endif + L_var_out = L_sub (L_var3, L_product); +#if (WMOPS) + multiCounter[currCounter].L_sub--; + multiCounter[currCounter].L_msu++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_macNs | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | + | result to L_var3 without saturation, return a 32 bit result. Generate | + | carry and overflow values : | + | L_macNs(L_var3,var1,var2) = L_add_c(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | + | In some cases the Carry flag has to be cleared or set before using | + | operators which take into account its value. | + |___________________________________________________________________________| +*/ + +Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) +{ + Word32 L_var_out; + + L_var_out = L_mult (var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_mult--; +#endif + L_var_out = L_add_c (L_var3, L_var_out); +#if (WMOPS) + multiCounter[currCounter].L_add_c--; + multiCounter[currCounter].L_macNs++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_msuNs | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | + | bit result from L_var3 without saturation, return a 32 bit result. Ge- | + | nerate carry and overflow values : | + | L_msuNs(L_var3,var1,var2) = L_sub_c(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | + | In some cases the Carry flag has to be cleared or set before using | + | operators which take into account its value. | + |___________________________________________________________________________| +*/ + +Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) +{ + Word32 L_var_out; + + L_var_out = L_mult (var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_mult--; +#endif + L_var_out = L_sub_c (L_var3, L_var_out); +#if (WMOPS) + multiCounter[currCounter].L_sub_c--; + multiCounter[currCounter].L_msuNs++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_add | + | | + | Purpose : | + | | + | 32 bits addition of the two 32 bits variables (L_var1+L_var2) with | + | overflow control and saturation; the result is set at +2147483647 when | + | overflow occurs or at -2147483648 when underflow occurs. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_add (Word32 L_var1, Word32 L_var2) +{ + Word32 L_var_out; + + L_var_out = L_var1 + L_var2; + + if (((L_var1 ^ L_var2) & MIN_32) == 0) + { + if ((L_var_out ^ L_var1) & MIN_32) + { + L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32; + Overflow = 1; + } + } +#if (WMOPS) + multiCounter[currCounter].L_add++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_sub | + | | + | Purpose : | + | | + | 32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with | + | overflow control and saturation; the result is set at +2147483647 when | + | overflow occurs or at -2147483648 when underflow occurs. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_sub (Word32 L_var1, Word32 L_var2) +{ + Word32 L_var_out; + + L_var_out = L_var1 - L_var2; + + if (((L_var1 ^ L_var2) & MIN_32) != 0) + { + if ((L_var_out ^ L_var1) & MIN_32) + { + L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32; + Overflow = 1; + } + } +#if (WMOPS) + multiCounter[currCounter].L_sub++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_add_c | + | | + | Purpose : | + | | + | Performs 32 bits addition of the two 32 bits variables (L_var1+L_var2+C)| + | with carry. No saturation. Generate carry and Overflow values. The car- | + | ry and overflow values are binary variables which can be tested and as- | + | signed values. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | + | In some cases the Carry flag has to be cleared or set before using | + | operators which take into account its value. | + |___________________________________________________________________________| +*/ +Word32 L_add_c (Word32 L_var1, Word32 L_var2) +{ + Word32 L_var_out; + Word32 L_test; + Flag carry_int = 0; + + L_var_out = L_var1 + L_var2 + Carry; + + L_test = L_var1 + L_var2; + + if ((L_var1 > 0) && (L_var2 > 0) && (L_test < 0)) + { + Overflow = 1; + carry_int = 0; + } + else + { + if ((L_var1 < 0) && (L_var2 < 0)) + { + if (L_test >= 0) + { + Overflow = 1; + carry_int = 1; + } + else + { + Overflow = 0; + carry_int = 1; + } + } + else + { + if (((L_var1 ^ L_var2) < 0) && (L_test >= 0)) + { + Overflow = 0; + carry_int = 1; + } + else + { + Overflow = 0; + carry_int = 0; + } + } + } + + if (Carry) + { + if (L_test == MAX_32) + { + Overflow = 1; + Carry = carry_int; + } + else + { + if (L_test == (Word32) 0xFFFFFFFFL) + { + Carry = 1; + } + else + { + Carry = carry_int; + } + } + } + else + { + Carry = carry_int; + } + +#if (WMOPS) + multiCounter[currCounter].L_add_c++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_sub_c | + | | + | Purpose : | + | | + | Performs 32 bits subtraction of the two 32 bits variables with carry | + | (borrow) : L_var1-L_var2-C. No saturation. Generate carry and Overflow | + | values. The carry and overflow values are binary variables which can | + | be tested and assigned values. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | + | In some cases the Carry flag has to be cleared or set before using | + | operators which take into account its value. | + |___________________________________________________________________________| +*/ + +Word32 L_sub_c (Word32 L_var1, Word32 L_var2) +{ + Word32 L_var_out; + Word32 L_test; + Flag carry_int = 0; + + if (Carry) + { + Carry = 0; + if (L_var2 != MIN_32) + { + L_var_out = L_add_c (L_var1, -L_var2); +#if (WMOPS) + multiCounter[currCounter].L_add_c--; +#endif + } + else + { + L_var_out = L_var1 - L_var2; + if (L_var1 > 0L) + { + Overflow = 1; + Carry = 0; + } + } + } + else + { + L_var_out = L_var1 - L_var2 - (Word32) 0X00000001L; + L_test = L_var1 - L_var2; + + if ((L_test < 0) && (L_var1 > 0) && (L_var2 < 0)) + { + Overflow = 1; + carry_int = 0; + } + else if ((L_test > 0) && (L_var1 < 0) && (L_var2 > 0)) + { + Overflow = 1; + carry_int = 1; + } + else if ((L_test > 0) && ((L_var1 ^ L_var2) > 0)) + { + Overflow = 0; + carry_int = 1; + } + if (L_test == MIN_32) + { + Overflow = 1; + Carry = carry_int; + } + else + { + Carry = carry_int; + } + } + +#if (WMOPS) + multiCounter[currCounter].L_sub_c++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_negate | + | | + | Purpose : | + | | + | Negate the 32 bit variable L_var1 with saturation; saturate in the case | + | where input is -2147483648 (0x8000 0000). | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_negate (Word32 L_var1) +{ + Word32 L_var_out; + + L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1; +#if (WMOPS) + multiCounter[currCounter].L_negate++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : mult_r | + | | + | Purpose : | + | | + | Same as mult with rounding, i.e.: | + | mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and | + | mult_r(-32768,-32768) = 32767. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 mult_r (Word16 var1, Word16 var2) +{ + Word16 var_out; + Word32 L_product_arr; + + L_product_arr = (Word32) var1 *(Word32) var2; /* product */ + L_product_arr += (Word32) 0x00004000L; /* round */ + L_product_arr &= (Word32) 0xffff8000L; + L_product_arr >>= 15; /* shift */ + + if (L_product_arr & (Word32) 0x00010000L) /* sign extend when necessary */ + { + L_product_arr |= (Word32) 0xffff0000L; + } + var_out = saturate (L_product_arr); +#if (WMOPS) + multiCounter[currCounter].mult_r++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_shl | + | | + | Purpose : | + | | + | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | + | fill the var2 LSB of the result. If var2 is negative, arithmetically | + | shift L_var1 right by -var2 with sign extension. Saturate the result in | + | case of underflows or overflows. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_shl (Word32 L_var1, Word16 var2) +{ + Word32 L_var_out=0; + + if (var2 <= 0) + { + if (var2 < -32) + var2 = -32; + L_var_out = L_shr (L_var1, -var2); +#if (WMOPS) + multiCounter[currCounter].L_shr--; +#endif + } + else + { + for (; var2 > 0; var2--) + { + if (L_var1 > (Word32) 0X3fffffffL) + { + Overflow = 1; + L_var_out = MAX_32; + break; + } + else + { + if (L_var1 < (Word32) 0xc0000000L) + { + Overflow = 1; + L_var_out = MIN_32; + break; + } + } + L_var1 *= 2; + L_var_out = L_var1; + } + } +#if (WMOPS) + multiCounter[currCounter].L_shl++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_shr | + | | + | Purpose : | + | | + | Arithmetically shift the 32 bit input L_var1 right var2 positions with | + | sign extension. If var2 is negative, arithmetically shift L_var1 left | + | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | + | in case of underflows or overflows. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_shr (Word32 L_var1, Word16 var2) +{ + Word32 L_var_out; + + if (var2 < 0) + { + if (var2 < -32) + var2 = -32; + L_var_out = L_shl (L_var1, -var2); +#if (WMOPS) + multiCounter[currCounter].L_shl--; +#endif + } + else + { + if (var2 >= 31) + { + L_var_out = (L_var1 < 0L) ? -1 : 0; + } + else + { + if (L_var1 < 0) + { + L_var_out = ~((~L_var1) >> var2); + } + else + { + L_var_out = L_var1 >> var2; + } + } + } +#if (WMOPS) + multiCounter[currCounter].L_shr++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : shr_r | + | | + | Purpose : | + | | + | Same as shr(var1,var2) but with rounding. Saturate the result in case of| + | underflows or overflows : | + | - If var2 is greater than zero : | + | if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1)))) | + | is equal to zero | + | then | + | shr_r(var1,var2) = shr(var1,var2) | + | else | + | shr_r(var1,var2) = add(shr(var1,var2),1) | + | - If var2 is less than or equal to zero : | + | shr_r(var1,var2) = shr(var1,var2). | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 shr_r (Word16 var1, Word16 var2) +{ + Word16 var_out; + + if (var2 > 15) + { + var_out = 0; + } + else + { + var_out = shr (var1, var2); +#if (WMOPS) + multiCounter[currCounter].shr--; +#endif + + if (var2 > 0) + { + if ((var1 & ((Word16) 1 << (var2 - 1))) != 0) + { + var_out++; + } + } + } +#if (WMOPS) + multiCounter[currCounter].shr_r++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : mac_r | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | + | result to L_var3 with saturation. Round the LS 16 bits of the result | + | into the MS 16 bits with saturation and shift the result right by 16. | + | Return a 16 bit result. | + | mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2)) | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) +{ + Word16 var_out; + + L_var3 = L_mac (L_var3, var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_mac--; +#endif + L_var3 = L_add (L_var3, (Word32) 0x00008000L); +#if (WMOPS) + multiCounter[currCounter].L_add--; +#endif + var_out = extract_h (L_var3); +#if (WMOPS) + multiCounter[currCounter].extract_h--; + multiCounter[currCounter].mac_r++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : msu_r | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | + | bit result to L_var3 with saturation. Round the LS 16 bits of the res- | + | ult into the MS 16 bits with saturation and shift the result right by | + | 16. Return a 16 bit result. | + | msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2)) | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) +{ + Word16 var_out; + + L_var3 = L_msu (L_var3, var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_msu--; +#endif + L_var3 = L_add (L_var3, (Word32) 0x00008000L); +#if (WMOPS) + multiCounter[currCounter].L_add--; +#endif + var_out = extract_h (L_var3); +#if (WMOPS) + multiCounter[currCounter].extract_h--; + multiCounter[currCounter].msu_r++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_deposit_h | + | | + | Purpose : | + | | + | Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The | + | 16 LS bits of the output are zeroed. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff 0000. | + |___________________________________________________________________________| +*/ + +Word32 L_deposit_h (Word16 var1) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1 << 16; +#if (WMOPS) + multiCounter[currCounter].L_deposit_h++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_deposit_l | + | | + | Purpose : | + | | + | Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The | + | 16 MS bits of the output are sign extended. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0xFFFF 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ + +Word32 L_deposit_l (Word16 var1) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1; +#if (WMOPS) + multiCounter[currCounter].L_deposit_l++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_shr_r | + | | + | Purpose : | + | | + | Same as L_shr(L_var1,var2) but with rounding. Saturate the result in | + | case of underflows or overflows : | + | - If var2 is greater than zero : | + | if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))| + | is equal to zero | + | then | + | L_shr_r(L_var1,var2) = L_shr(L_var1,var2) | + | else | + | L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1) | + | - If var2 is less than or equal to zero : | + | L_shr_r(L_var1,var2) = L_shr(L_var1,var2). | + | | + | Complexity weight : 3 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_shr_r (Word32 L_var1, Word16 var2) +{ + Word32 L_var_out; + + if (var2 > 31) + { + L_var_out = 0; + } + else + { + L_var_out = L_shr (L_var1, var2); +#if (WMOPS) + multiCounter[currCounter].L_shr--; +#endif + if (var2 > 0) + { + if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0) + { + L_var_out++; + } + } + } +#if (WMOPS) + multiCounter[currCounter].L_shr_r++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_abs | + | | + | Purpose : | + | | + | Absolute value of L_var1; Saturate in case where the input is | + | -214783648 | + | | + | Complexity weight : 3 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_abs (Word32 L_var1) +{ + Word32 L_var_out; + + if (L_var1 == MIN_32) + { + L_var_out = MAX_32; + } + else + { + if (L_var1 < 0) + { + L_var_out = -L_var1; + } + else + { + L_var_out = L_var1; + } + } + +#if (WMOPS) + multiCounter[currCounter].L_abs++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : L_sat | + | | + | Purpose : | + | | + | 32 bit L_var1 is set to 2147483647 if an overflow occured or to | + | -2147483648 if an underflow occured on the most recent L_add_c, | + | L_sub_c, L_macNs or L_msuNs operations. The carry and overflow values | + | are binary values which can be tested and assigned values. | + | | + | Complexity weight : 4 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ + +Word32 L_sat (Word32 L_var1) +{ + Word32 L_var_out; + + L_var_out = L_var1; + + if (Overflow) + { + + if (Carry) + { + L_var_out = MIN_32; + } + else + { + L_var_out = MAX_32; + } + + Carry = 0; + Overflow = 0; + } +#if (WMOPS) + multiCounter[currCounter].L_sat++; +#endif + return (L_var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : norm_s | + | | + | Purpose : | + | | + | Produces the number of left shift needed to normalize the 16 bit varia- | + | ble var1 for positive values on the interval with minimum of 16384 and | + | maximum of 32767, and for negative values on the interval with minimum | + | of -32768 and maximum of -16384; in order to normalize the result, the | + | following operation must be done : | + | norm_var1 = shl(var1,norm_s(var1)). | + | | + | Complexity weight : 15 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 000f. | + |___________________________________________________________________________| +*/ + +Word16 norm_s (Word16 var1) +{ + Word16 var_out; + + if (var1 == 0) + { + var_out = 0; + } + else + { + if (var1 == (Word16) 0xffff) + { + var_out = 15; + } + else + { + if (var1 < 0) + { + var1 = ~var1; + } + for (var_out = 0; var1 < 0x4000; var_out++) + { + var1 <<= 1; + } + } + } + +#if (WMOPS) + multiCounter[currCounter].norm_s++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : div_s | + | | + | Purpose : | + | | + | Produces a result which is the fractional integer division of var1 by | + | var2; var1 and var2 must be positive and var2 must be greater or equal | + | to var1; the result is positive (leading bit equal to 0) and truncated | + | to 16 bits. | + | If var1 = var2 then div(var1,var2) = 32767. | + | | + | Complexity weight : 18 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var1 <= var2 and var2 != 0. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : var1 <= var2 <= 0x0000 7fff and var2 != 0. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | + | It's a Q15 value (point between b15 and b14). | + |___________________________________________________________________________| +*/ + +Word16 div_s (Word16 var1, Word16 var2) +{ + Word16 var_out = 0; + Word16 iteration; + Word32 L_num; + Word32 L_denom; + + if ((var1 > var2) || (var1 < 0) || (var2 < 0)) + { + printf ("Division Error var1=%d var2=%d\n", var1, var2); + abort(); /* exit (0); */ + } + if (var2 == 0) + { + printf ("Division by 0, Fatal error \n"); + abort(); /* exit (0); */ + } + if (var1 == 0) + { + var_out = 0; + } + else + { + if (var1 == var2) + { + var_out = MAX_16; + } + else + { + L_num = L_deposit_l (var1); +#if (WMOPS) + multiCounter[currCounter].L_deposit_l--; +#endif + L_denom = L_deposit_l (var2); +#if (WMOPS) + multiCounter[currCounter].L_deposit_l--; +#endif + + for (iteration = 0; iteration < 15; iteration++) + { + var_out <<= 1; + L_num <<= 1; + + if (L_num >= L_denom) + { + L_num = L_sub (L_num, L_denom); +#if (WMOPS) + multiCounter[currCounter].L_sub--; +#endif + var_out = add (var_out, 1); +#if (WMOPS) + multiCounter[currCounter].add--; +#endif + } + } + } + } + +#if (WMOPS) + multiCounter[currCounter].div_s++; +#endif + return (var_out); +} + +/*___________________________________________________________________________ + | | + | Function Name : norm_l | + | | + | Purpose : | + | | + | Produces the number of left shifts needed to normalize the 32 bit varia-| + | ble L_var1 for positive values on the interval with minimum of | + | 1073741824 and maximum of 2147483647, and for negative values on the in-| + | terval with minimum of -2147483648 and maximum of -1073741824; in order | + | to normalize the result, the following operation must be done : | + | norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). | + | | + | Complexity weight : 30 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 001f. | + |___________________________________________________________________________| +*/ + +Word16 norm_l (Word32 L_var1) +{ + Word16 var_out; + + if (L_var1 == 0) + { + var_out = 0; + } + else + { + if (L_var1 == (Word32) 0xffffffffL) + { + var_out = 31; + } + else + { + if (L_var1 < 0) + { + L_var1 = ~L_var1; + } + for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++) + { + L_var1 <<= 1; + } + } + } + +#if (WMOPS) + multiCounter[currCounter].norm_l++; +#endif + return (var_out); +} + diff --git a/imbe_vocoder/ch_decode.cpp b/imbe_vocoder/ch_decode.cpp new file mode 100644 index 0000000..da0b6cc --- /dev/null +++ b/imbe_vocoder/ch_decode.cpp @@ -0,0 +1,185 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "basic_op.h" +#include "ch_decode.h" +#include "aux_sub.h" + + +void decode_frame_vector(IMBE_PARAM *imbe_param, Word16 *frame_vector) +{ + Word16 bit_stream[BIT_STREAM_LEN]; + Word16 i, vec_num, tmp, tmp1, tmp2, bit_thr, shift; + Word16 *b_ptr, *ba_ptr, index0; + Word32 L_tmp; + + imbe_param->b_vec[0] = (shr(frame_vector[0], 4) & 0xFC) | (shr(frame_vector[7], 1) & 0x3); + + if (imbe_param->b_vec[0] < 0 || imbe_param->b_vec[0] > 207) + return; // If we return here IMBE parameters from previous frame will be used (frame repeating) + + tmp = ((imbe_param->b_vec[0] & 0xFF) << 1) + 0x4F; // Convert b_vec[0] to unsigned Q15.1 format and add 39.5 + + //imbe_param->ff = 4./((double)imbe_param->b_vec[0] + 39.5); + + // Calculate fundamental frequency with higher precession + shift = norm_s(tmp); + tmp1 = tmp << shift; + + tmp2 = div_s(0x4000, tmp1); + imbe_param->fund_freq = L_shr(L_deposit_h(tmp2), 11 - shift); + + L_tmp = L_sub(0x40000000, L_mult(tmp1, tmp2)); + tmp2 = div_s(extract_l(L_shr(L_tmp, 2)), tmp1); + L_tmp = L_shr(L_deposit_l(tmp2), 11 - shift - 2); + imbe_param->fund_freq = L_add(imbe_param->fund_freq, L_tmp); + + //printf("%X %X \n", imbe_param->fund_freq, (Word32)(imbe_param->ff * (double)((UWord32)1<<31))); + + tmp = (tmp + 0x2) >> 3; // Calculate (b0 + 39.5 + 1)/4 + imbe_param->num_harms = ((UWord32)CNST_0_9254_Q0_16 * tmp) >> 16; + + if(imbe_param->num_harms <= 36) + imbe_param->num_bands = extract_h((UWord32)(imbe_param->num_harms + 2) * CNST_0_33_Q0_16); // fix((L+2)/3) + else + imbe_param->num_bands = NUM_BANDS_MAX; + + // Convert input vector (from b_3 to b_L+1) to bit stream + bit_stream[0] = (frame_vector[0] & 0x4)?1:0; + bit_stream[1] = (frame_vector[0] & 0x2)?1:0; + bit_stream[2] = (frame_vector[0] & 0x1)?1:0; + + bit_stream[BIT_STREAM_LEN - 3] = (frame_vector[7] & 0x40)?1:0; + bit_stream[BIT_STREAM_LEN - 2] = (frame_vector[7] & 0x20)?1:0; + bit_stream[BIT_STREAM_LEN - 1] = (frame_vector[7] & 0x10)?1:0; + + + index0 = 3 + 3 * 12 - 1; + for(vec_num = 3; vec_num >= 1; vec_num--) + { + tmp = frame_vector[vec_num]; + for(i = 0; i < 12; i++) + { + bit_stream[index0] = (tmp & 0x1)?1:0; + tmp >>= 1; + index0--; + } + } + + index0 = 3 + 3 * 12 + 3 * 11 - 1; + for(vec_num = 6; vec_num >= 4; vec_num--) + { + tmp = frame_vector[vec_num]; + for(i = 0; i < 11; i++) + { + bit_stream[index0] = (tmp & 0x1)?1:0; + tmp >>= 1; + index0--; + } + } + + // Rebuild b1 + index0 = 3 + 3 * 12; + tmp = 0; + for(i = 0; i < imbe_param->num_bands; i++) + tmp = (tmp << 1) | bit_stream[index0++]; + + imbe_param->b_vec[1] = tmp; + + // Rebuild b2 + tmp = 0; + tmp |= bit_stream[index0++] << 1; + tmp |= bit_stream[index0++]; + imbe_param->b_vec[2] = (frame_vector[0] & 0x38) | (tmp << 1) | (shr(frame_vector[7], 3) & 0x01); + + // Shift the rest of sequence + tmp = imbe_param->num_bands + 2; // shift + for(; index0 < BIT_STREAM_LEN; index0++) + bit_stream[index0 - tmp] = bit_stream[index0]; + + // Priority ReScanning + b_ptr = &imbe_param->b_vec[3]; + ba_ptr = imbe_param->bit_alloc; + for(i = 0; i < B_NUM; i++) + ba_ptr[i] = b_ptr[i] = 0; + + + // Unpack bit allocation table's item + get_bit_allocation(imbe_param->num_harms, imbe_param->bit_alloc); + + index0 = 0; + bit_thr = (imbe_param->num_harms == 0xb)?9:ba_ptr[0]; + + while(index0 < BIT_STREAM_LEN - imbe_param->num_bands - 2) + { + for(i = 0; i < imbe_param->num_harms - 1; i++) + if(bit_thr && bit_thr <= ba_ptr[i]) + b_ptr[i] = (b_ptr[i] << 1) | bit_stream[index0++]; + bit_thr--; + } + + // Synchronization Bit Decoding + imbe_param->b_vec[imbe_param->num_harms + 2] = frame_vector[7] & 1; +} + + +void v_uv_decode(IMBE_PARAM *imbe_param) +{ + Word16 num_harms; + Word16 num_bands; + Word16 vu_vec, *p_v_uv_dsn, mask, i, uv_cnt; + + num_harms = imbe_param->num_harms; + num_bands = imbe_param->num_bands; + vu_vec = imbe_param->b_vec[1]; + + p_v_uv_dsn = imbe_param->v_uv_dsn; + + mask = 1 << (num_bands - 1); + + v_zap(p_v_uv_dsn, NUM_HARMS_MAX); + + i = 0; uv_cnt = 0; + while(num_harms--) + { + if(vu_vec & mask) + *p_v_uv_dsn++ = 1; + else + { + *p_v_uv_dsn++ = 0; + uv_cnt++; + } + + if(++i == 3) + { + if(num_bands > 1) + { + num_bands--; + mask >>= 1; + } + i = 0; + } + } + imbe_param->l_uv = uv_cnt; +} diff --git a/imbe_vocoder/ch_decode.h b/imbe_vocoder/ch_decode.h new file mode 100644 index 0000000..027ab11 --- /dev/null +++ b/imbe_vocoder/ch_decode.h @@ -0,0 +1,32 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#ifndef _CH_DECODE +#define _CH_DECODE + +#include "typedef.h" + +#define BIT_STREAM_LEN (3 + 3*12 + 3*11 + 3) + +void decode_frame_vector(IMBE_PARAM *imbe_param, Word16 *frame_vector); +void v_uv_decode(IMBE_PARAM *imbe_param); + +#endif diff --git a/imbe_vocoder/ch_encode.cpp b/imbe_vocoder/ch_encode.cpp new file mode 100644 index 0000000..6d12083 --- /dev/null +++ b/imbe_vocoder/ch_encode.cpp @@ -0,0 +1,110 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "basic_op.h" +#include "ch_encode.h" +#include "aux_sub.h" + + +void encode_frame_vector(IMBE_PARAM *imbe_param, Word16 *frame_vector) +{ + Word16 bit_stream[EN_BIT_STREAM_LEN], index0, bit_thr, bit_mask, i; + Word16 vec_num, num_harms, num_bands, tmp; + Word16 *ba_ptr, *b_ptr; + + num_harms = imbe_param->num_harms; + num_bands = imbe_param->num_bands; + + v_zap(frame_vector, 8); + + // Unpack bit allocation table's item + get_bit_allocation(num_harms, imbe_param->bit_alloc); + + // Priority Scanning + index0 = 0; + ba_ptr = imbe_param->bit_alloc; + bit_thr = (num_harms == 0xb)?9:ba_ptr[0]; + bit_mask = shl(1, bit_thr - 1); + + while(index0 < EN_BIT_STREAM_LEN - (num_bands - 3)) + { + b_ptr = &imbe_param->b_vec[3]; + for(i = 0; i < num_harms - 1; i++) + if(bit_thr && bit_thr <= ba_ptr[i]) + bit_stream[index0++] = (b_ptr[i] & bit_mask)?1:0; + + bit_thr--; + bit_mask = shr(bit_mask, 1); + } + + frame_vector[0] = shl(imbe_param->b_vec[0] & 0xFC, 4) | (imbe_param->b_vec[2] & 0x38); + + index0 = 0; + frame_vector[0] |= (bit_stream[index0++])?4:0; + frame_vector[0] |= (bit_stream[index0++])?2:0; + frame_vector[0] |= (bit_stream[index0++])?1:0; + + for(vec_num = 1; vec_num <= 3; vec_num++) + { + tmp = 0; + for(i = 0; i < 12; i++) + { + tmp <<= 1; + tmp |= bit_stream[index0++]; + } + frame_vector[vec_num] = tmp; + } + + index0 -= num_bands + 2; + + bit_mask = shl(1, num_bands - 1); + for(i = 0; i < num_bands; i++) + { + bit_stream[index0++] = (imbe_param->b_vec[1] & bit_mask)?1:0; + bit_mask >>= 1; + } + + bit_stream[index0++] = (imbe_param->b_vec[2] & 0x04)?1:0; + bit_stream[index0++] = (imbe_param->b_vec[2] & 0x02)?1:0; + + index0 -= num_bands + 2; + + for(vec_num = 4; vec_num <= 6; vec_num++) + { + tmp = 0; + for(i = 0; i < 11; i++) + { + tmp <<= 1; + tmp |= bit_stream[index0++]; + } + frame_vector[vec_num] = tmp; + } + + frame_vector[7] = shl(imbe_param->b_vec[0] & 0x03, 1) | shl(imbe_param->b_vec[2] & 0x01, 3); + frame_vector[7] |= (bit_stream[index0++])?0x40:0; + frame_vector[7] |= (bit_stream[index0++])?0x20:0; + frame_vector[7] |= (bit_stream[index0++])?0x10:0; + frame_vector[7] |= (imbe_param->b_vec[num_harms + 2])?0x01:0; +} diff --git a/imbe_vocoder/ch_encode.h b/imbe_vocoder/ch_encode.h new file mode 100644 index 0000000..0a9b8de --- /dev/null +++ b/imbe_vocoder/ch_encode.h @@ -0,0 +1,32 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _CH_ENCODE +#define _CH_ENCODE + +#define EN_BIT_STREAM_LEN (3 + 3*12 + 6 + 2*11 + 3) + + +void encode_frame_vector(IMBE_PARAM *imbe_param, Word16 *frame_vector); + + +#endif diff --git a/imbe_vocoder/dc_rmv.cpp b/imbe_vocoder/dc_rmv.cpp new file mode 100644 index 0000000..946174c --- /dev/null +++ b/imbe_vocoder/dc_rmv.cpp @@ -0,0 +1,66 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "aux_sub.h" +#include "basic_op.h" +#include "math_sub.h" +#include "dc_rmv.h" + + +#define CNST_0_99_Q1_15 0x7EB8 + + +//----------------------------------------------------------------------------- +// PURPOSE: +// High-pass filter to remove DC +// +// +// INPUT: +// *sigin - pointer to input signal buffer +// *sigout - pointer to output signal buffer +// *mem - pointer to filter's memory element +// len - number of input signal samples +// +// OUTPUT: +// None +// +// RETURN: +// Saved filter state in mem +// +//----------------------------------------------------------------------------- +void dc_rmv(Word16 *sigin, Word16 *sigout, Word32 *mem, Word16 len) +{ + Word32 L_tmp, L_mem; + + L_mem = *mem; + while(len--) + { + L_tmp = L_deposit_h(*sigin++); + L_mem = L_add(L_mem, L_tmp); + *sigout++ = round(L_mem); + L_mem = L_mpy_ls(L_mem, CNST_0_99_Q1_15); + L_mem = L_sub(L_mem, L_tmp); + } + *mem = L_mem; +} diff --git a/imbe_vocoder/dc_rmv.h b/imbe_vocoder/dc_rmv.h new file mode 100644 index 0000000..d36393b --- /dev/null +++ b/imbe_vocoder/dc_rmv.h @@ -0,0 +1,46 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _DC_RMV +#define _DC_RMV + +//----------------------------------------------------------------------------- +// PURPOSE: +// High-pass filter to remove DC +// +// +// INPUT: +// *sigin - pointer to input signal buffer +// *sigout - pointer to output signal buffer +// *mem - pointer to filter's memory element +// len - number of input signal samples +// +// OUTPUT: +// None +// +// RETURN: +// Saved filter state in mem +// +//----------------------------------------------------------------------------- +void dc_rmv(Word16 *sigin, Word16 *sigout, Word32 *mem, Word16 len); + +#endif diff --git a/imbe_vocoder/decode.cpp b/imbe_vocoder/decode.cpp new file mode 100644 index 0000000..9b80182 --- /dev/null +++ b/imbe_vocoder/decode.cpp @@ -0,0 +1,112 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "ch_decode.h" +#include "sa_decode.h" +#include "sa_enh.h" +#include "v_synt.h" +#include "uv_synt.h" +#include "basic_op.h" +#include "aux_sub.h" +#include "encode.h" +#include "dsp_sub.h" +#include "imbe_vocoder.h" + +#include + +const uint8_t BIT_MASK_TABLE8[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; +#define READ_BIT(p,i) (p[(i)>>3] & BIT_MASK_TABLE8[(i)&7]) + + +void imbe_vocoder::decode_init(IMBE_PARAM *imbe_param) +{ + v_synt_init(); + uv_synt_init(); + sa_decode_init(); + + // Make previous frame for the first frame + memset((char *)imbe_param, 0, sizeof(IMBE_PARAM)); + imbe_param->fund_freq = 0x0cf6474a; + imbe_param->num_harms = 9; + imbe_param->num_bands = 3; + +} + + +void imbe_vocoder::decode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd) +{ + Word16 snd_tmp[FRAME]; + Word16 j; + + decode_frame_vector(imbe_param, frame_vector); + v_uv_decode(imbe_param); + sa_decode(imbe_param); + sa_enh(imbe_param); + v_synt(imbe_param, snd); + uv_synt(imbe_param, snd_tmp); + + for(j = 0; j < FRAME; j++) + snd[j] = add(snd[j], snd_tmp[j]); +} + +void imbe_vocoder::decode_4400(int16_t *snd, uint8_t *imbe) +{ + int16_t frame[8U] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; + unsigned int offset = 0U; + + int16_t mask = 0x0800; + for (unsigned int i = 0U; i < 12U; i++, mask >>= 1, offset++) + frame[0U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0800; + for (unsigned int i = 0U; i < 12U; i++, mask >>= 1, offset++) + frame[1U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0800; + for (unsigned int i = 0U; i < 12U; i++, mask >>= 1, offset++) + frame[2U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0800; + for (unsigned int i = 0U; i < 12U; i++, mask >>= 1, offset++) + frame[3U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0400; + for (unsigned int i = 0U; i < 11U; i++, mask >>= 1, offset++) + frame[4U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0400; + for (unsigned int i = 0U; i < 11U; i++, mask >>= 1, offset++) + frame[5U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0400; + for (unsigned int i = 0U; i < 11U; i++, mask >>= 1, offset++) + frame[6U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + mask = 0x0040; + for (unsigned int i = 0U; i < 7U; i++, mask >>= 1, offset++) + frame[7U] |= READ_BIT(imbe, offset) != 0x00U ? mask : 0x0000; + + imbe_decode(frame, snd); +} + diff --git a/imbe_vocoder/decode.h b/imbe_vocoder/decode.h new file mode 100644 index 0000000..962be53 --- /dev/null +++ b/imbe_vocoder/decode.h @@ -0,0 +1,31 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _DECODE +#define _DECODE +#if 0 +void decode_init(IMBE_PARAM *imbe_param); +void decode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd); +void decode_4400(int16_t *pcm, uint8_t *imbe); +#endif +#endif + diff --git a/imbe_vocoder/dsp_sub.cpp b/imbe_vocoder/dsp_sub.cpp new file mode 100644 index 0000000..2e006e2 --- /dev/null +++ b/imbe_vocoder/dsp_sub.cpp @@ -0,0 +1,278 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "basic_op.h" +#include "imbe.h" +#include "tbls.h" +#include "dsp_sub.h" +#include "math_sub.h" +#include "encode.h" +#include "imbe_vocoder.h" + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform inverse DCT +// +// +// INPUT: +// in - pointer to input data +// m_lim - input data's size +// i_lim - result's size +// out - pointer to save result +// +// OUTPUT: +// None +// +// RETURN: +// Saved in out result of conversion +// +//----------------------------------------------------------------------------- +void imbe_vocoder::idct(Word16 *in, Word16 m_lim, Word16 i_lim, Word16 *out) +{ + UWord16 angl_step, angl_intl, angl_intl_2; + UWord16 angl_acc; + Word32 sum; + Word16 i, m; + + if(m_lim == 1) + { + angl_intl = CNST_0_5_Q1_15; + angl_intl_2 = CNST_1_0_Q1_15; + } + else + { + angl_intl = div_s ((Word16) CNST_0_5_Q5_11, m_lim << 11); // calculate 0.5/m_lim + angl_intl_2 = shl(angl_intl, 1); + } + + angl_step = angl_intl; + for(i = 0; i < i_lim; i++) + { + sum = 0; + angl_acc = angl_step; + for(m = 1; m < m_lim; m++) + { + sum = L_add(sum, L_shr( L_mult(in[m], cos_fxp(angl_acc)), 7)); + angl_acc += angl_step; + } + sum = L_add(sum, L_shr( L_deposit_h(in[0]), 8)); + out[i] = extract_l(L_shr_r (sum, 8)); + angl_step += angl_intl_2; + } +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform DCT +// +// +// INPUT: +// in - pointer to input data +// m_lim - input data's size +// i_lim - result's size +// out - pointer to save result +// +// OUTPUT: +// None +// +// RETURN: +// Saved in out result of conversion +// +//----------------------------------------------------------------------------- +void imbe_vocoder::dct(Word16 *in, Word16 m_lim, Word16 i_lim, Word16 *out) +{ + UWord16 angl_step, angl_intl, angl_intl_2, angl_begin; + UWord16 angl_acc; + Word32 sum; + Word16 i, m; + + if(m_lim == 1) + { + angl_intl = CNST_0_5_Q1_15; + angl_intl_2 = CNST_1_0_Q1_15; + } + else + { + angl_intl = div_s ((Word16) CNST_0_5_Q5_11, m_lim << 11); // calculate 0.5/m_lim + angl_intl_2 = shl(angl_intl, 1); + } + + // Calculate first coefficient + sum = 0; + for(m = 0; m < m_lim; m++) + sum = L_add(sum, L_deposit_l(in[m])); + out[0] = extract_l(L_mpy_ls(sum, angl_intl_2)); + + // Calculate the others coefficients + angl_begin = angl_intl; + angl_step = angl_intl_2; + for(i = 1; i < i_lim; i++) + { + sum = 0; + angl_acc = angl_begin; + for(m = 0; m < m_lim; m++) + { + sum = L_add(sum, L_deposit_l(mult(in[m], cos_fxp(angl_acc)))); + angl_acc += angl_step; + } + out[i] = extract_l(L_mpy_ls(sum, angl_intl_2)); + + angl_step += angl_intl_2; + angl_begin += angl_intl; + } +} + + + + +void imbe_vocoder::fft_init(void) +{ + Word16 i, fft_len2, shift, step, theta; + + fft_len2 = shr(FFTLENGTH, 1); + shift = norm_s(fft_len2); + step = shl(2, shift); + theta = 0; + + for(i = 0; i <= fft_len2; i++) + { + wr_array[i] = cos_fxp(theta); + wi_array[i] = sin_fxp(theta); + if(i >= (fft_len2 - 1)) + theta = ONE_Q15; + else + theta = add(theta, step); + } +} + + +// Subroutine FFT: Fast Fourier Transform +// *************************************************************** +// * Replaces data by its DFT, if isign is 1, or replaces data * +// * by inverse DFT times nn if isign is -1. data is a complex * +// * array of length nn, input as a real array of length 2*nn. * +// * nn MUST be an integer power of two. This is not checked * +// * The real part of the number should be in the zeroeth * +// * of data , and the imaginary part should be in the next * +// * element. Hence all the real parts should have even indeces * +// * and the imaginary parts, odd indeces. * +// * * +// * Data is passed in an array starting in position 0, but the * +// * code is copied from Fortran so uses an internal pointer * +// * which accesses position 0 as position 1, etc. * +// * * +// * This code uses e+jwt sign convention, so isign should be * +// * reversed for e-jwt. * +// *************************************************************** +// +// Q values: +// datam1 - Q14 +// isign - Q15 + +#define SWAP(a,b) temp1 = (a);(a) = (b); (b) = temp1 + +void imbe_vocoder::fft(Word16 *datam1, Word16 nn, Word16 isign) +{ + Word16 n, mmax, m, j, istep, i; + Word16 wr, wi, temp1; + Word32 L_tempr, L_tempi; + Word16 *data; + Word32 L_temp1, L_temp2; + Word16 index, index_step; + + // Use pointer indexed from 1 instead of 0 + data = &datam1[-1]; + + n = shl(nn,1); + j = 1; + for( i = 1; i < n; i+=2 ) + { + if ( j > i) + { + SWAP(data[j],data[i]); + SWAP(data[j+1],data[i+1]); + } + m = nn; + while ( m >= 2 && j > m ) + { + j = sub(j,m); + m = shr(m,1); + } + j = add(j,m); + } + mmax = 2; + + // initialize index step + index_step = nn; + + while ( n > mmax) + { + istep = shl(mmax,1); // istep = 2 * mmax + + index = 0; + index_step = shr(index_step,1); + + wr = ONE_Q15; + wi = 0; + for ( m = 1; m < mmax; m+=2) + { + for ( i = m; i <= n; i += istep) + { + j = i + mmax; + + // tempr = wr * data[j] - wi * data[j+1] + L_temp1 = L_shr(L_mult(wr,data[j]),1); + L_temp2 = L_shr(L_mult(wi,data[j+1]),1); + L_tempr = L_sub(L_temp1,L_temp2); + + // tempi = wr * data[j+1] + wi * data[j] + L_temp1 = L_shr(L_mult(wr,data[j+1]),1); + L_temp2 = L_shr(L_mult(wi,data[j]),1); + L_tempi = L_add(L_temp1,L_temp2); + + + // data[j] = data[i] - tempr + L_temp1 = L_shr(L_deposit_h(data[i]),1); + data[j] = round(L_sub(L_temp1,L_tempr)); + + // data[i] += tempr + data[i] = round(L_add(L_temp1,L_tempr)); + + // data[j+1] = data[i+1] - tempi + L_temp1 = L_shr(L_deposit_h(data[i+1]),1); + data[j+1] = round(L_sub(L_temp1,L_tempi)); + + // data[i+1] += tempi + data[i+1] = round(L_add(L_temp1,L_tempi)); + } + index = add(index,index_step); + wr = wr_array[index]; + if (isign < 0) + wi = negate(wi_array[index]); + else + wi = wi_array[index]; + } + mmax = istep; + } +} + + diff --git a/imbe_vocoder/dsp_sub.h b/imbe_vocoder/dsp_sub.h new file mode 100644 index 0000000..53590e6 --- /dev/null +++ b/imbe_vocoder/dsp_sub.h @@ -0,0 +1,81 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _DSP_SUB +#define _DSP_SUB + + +#define CNST_0_5_Q1_15 0x4000 +#define CNST_0_5_Q5_11 0x0400 +#define CNST_1_0_Q1_15 0x7FFF + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform inverse DCT +// +// +// INPUT: +// in - pointer to input data +// m_lim - input data's size +// i_lim - result's size +// out - pointer to save result +// +// OUTPUT: +// None +// +// RETURN: +// Saved in out result of conversion +// +//----------------------------------------------------------------------------- +void idct(Word16 *in, Word16 m_lim, Word16 i_lim, Word16 *out); + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform DCT +// +// +// INPUT: +// in - pointer to input data +// m_lim - input data's size +// i_lim - result's size +// out - pointer to save result +// +// OUTPUT: +// None +// +// RETURN: +// Saved in out result of conversion +// +//----------------------------------------------------------------------------- +void dct(Word16 *in, Word16 m_lim, Word16 i_lim, Word16 *out); + +#define FFTLENGTH 256 + + +void fft_init(void); +void fft(Word16 *datam1, Word16 nn, Word16 isign); + +void c_fft(Word16 * farray_ptr); + +#endif diff --git a/imbe_vocoder/encode.cpp b/imbe_vocoder/encode.cpp new file mode 100644 index 0000000..6c3efd6 --- /dev/null +++ b/imbe_vocoder/encode.cpp @@ -0,0 +1,142 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "basic_op.h" +#include "dsp_sub.h" +#include "aux_sub.h" +#include "tbls.h" +#include "encode.h" +#include "dc_rmv.h" +#include "pe_lpf.h" +#include "pitch_est.h" +#include "pitch_ref.h" +#include "v_uv_det.h" +#include "sa_encode.h" +#include "ch_encode.h" +#include "imbe_vocoder.h" + +const uint8_t BIT_MASK_TABLE8[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; +#define WRITE_BIT(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE8[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE8[(i)&7]) + + +void imbe_vocoder::encode_init(void) +{ + v_zap(pitch_est_buf, PITCH_EST_BUF_SIZE); + v_zap(pitch_ref_buf, PITCH_EST_BUF_SIZE); + v_zap(pe_lpf_mem, PE_LPF_ORD); + pitch_est_init(); + fft_init(); + dc_rmv_mem = 0; + sa_encode_init(); + pitch_ref_init(); +} + + +void imbe_vocoder::encode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd) +{ + Word16 i; + Word16 *wr_ptr, *sig_ptr; + + for(i = 0; i < PITCH_EST_BUF_SIZE - FRAME; i++) + { + pitch_est_buf[i] = pitch_est_buf[i + FRAME]; + pitch_ref_buf[i] = pitch_ref_buf[i + FRAME]; + } + + dc_rmv(snd, &pitch_ref_buf[PITCH_EST_BUF_SIZE - FRAME], &dc_rmv_mem, FRAME); + pe_lpf(&pitch_ref_buf[PITCH_EST_BUF_SIZE - FRAME], &pitch_est_buf[PITCH_EST_BUF_SIZE - FRAME], pe_lpf_mem, FRAME); + + pitch_est(imbe_param, pitch_est_buf); + + // + // Speech windowing and FFT calculation + // + wr_ptr = (Word16 *)wr; + sig_ptr = &pitch_ref_buf[40]; + for(i = 146; i < 256; i++) + { + fft_buf[i].re = mult(*sig_ptr++, *wr_ptr++); + fft_buf[i].im = 0; + } + fft_buf[0].re = *sig_ptr++; + fft_buf[0].im = 0; + wr_ptr--; + for(i = 1; i < 111; i++) + { + fft_buf[i].re = mult(*sig_ptr++, *wr_ptr--); + fft_buf[i].im = 0; + } + for(i = 111; i < 146; i++) + fft_buf[i].re = fft_buf[i].im = 0; + + fft((Word16 *)&fft_buf, FFTLENGTH, 1); + + pitch_ref(imbe_param, fft_buf); + v_uv_det(imbe_param, fft_buf); + sa_encode(imbe_param); + encode_frame_vector(imbe_param, frame_vector); +} + +void imbe_vocoder::encode_4400(int16_t *pcm, uint8_t *imbe) +{ + int16_t frame_vector[8]; + memset(imbe, 0, 11); + + imbe_encode(frame_vector, pcm); + uint32_t offset = 0U; + int16_t mask = 0x0800; + + for (uint32_t i = 0U; i < 12U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[0U] & mask) != 0); + + mask = 0x0800; + for (uint32_t i = 0U; i < 12U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[1U] & mask) != 0); + + mask = 0x0800; + for (uint32_t i = 0U; i < 12U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[2U] & mask) != 0); + + mask = 0x0800; + for (uint32_t i = 0U; i < 12U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[3U] & mask) != 0); + + mask = 0x0400; + for (uint32_t i = 0U; i < 11U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[4U] & mask) != 0); + + mask = 0x0400; + for (uint32_t i = 0U; i < 11U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[5U] & mask) != 0); + + mask = 0x0400; + for (uint32_t i = 0U; i < 11U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[6U] & mask) != 0); + + mask = 0x0040; + for (uint32_t i = 0U; i < 7U; i++, mask >>= 1, offset++) + WRITE_BIT(imbe, offset, (frame_vector[7U] & mask) != 0); +} + diff --git a/imbe_vocoder/encode.h b/imbe_vocoder/encode.h new file mode 100644 index 0000000..685c6a6 --- /dev/null +++ b/imbe_vocoder/encode.h @@ -0,0 +1,33 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _ENCODE +#define _ENCODE + +#define PITCH_EST_BUF_SIZE 621 +#if 0 +void encode_init(void); +void encode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd); +void encode_4400(int16_t *pcm, uint8_t *imbe); +#endif + +#endif diff --git a/imbe_vocoder/globals.h b/imbe_vocoder/globals.h new file mode 100644 index 0000000..2010e7f --- /dev/null +++ b/imbe_vocoder/globals.h @@ -0,0 +1,62 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _GLOBALS +#define _GLOBALS + + +//#define PI (double)3.1415926535897932384626433832795 + +#define CNST_0_9254_Q0_16 60647 // 0.9254 in unsigned Q0.16 format +#define CNST_0_33_Q0_16 0x5556 // 0.(3) = 1/3 in unsigned Q0.16 format + + +#define CNST_ONE_Q8_24 0x01000000 +#define CNST_0_7_Q1_15 0x599A +#define CNST_0_4_Q1_15 0x3333 +#define CNST_0_03_Q1_15 0x03D7 +#define CNST_0_05_Q1_15 0x0666 + +#define CNST_1_125_Q8_8 0x0120 +#define CNST_0_5_Q8_8 0x0080 +#define CNST_0_125_Q8_8 0x0020 +#define CNST_0_25_Q8_8 0x0040 + +#define CNST_0_8717_Q1_15 0x6F94 +#define CNST_0_0031_Q1_15 0x0064 +#define CNST_0_48_Q4_12 0x07AE +#define CNST_1_00_Q4_12 0x1000 +#define CNST_0_85_Q4_12 0x0D9B +#define CNST_0_4_Q4_12 0x0666 +#define CNST_0_05_Q4_12 0x00CD +#define CNST_0_5882_Q1_15 0x4B4B +#define CNST_0_2857_Q1_15 0x2492 + + +#define HI_BYTE(a) ((a >> 8) & 0xFF) +#define LO_BYTE(a) (a & 0xFF); + + + + + +#endif diff --git a/imbe_vocoder/imbe.h b/imbe_vocoder/imbe.h new file mode 100644 index 0000000..e7f5f3a --- /dev/null +++ b/imbe_vocoder/imbe.h @@ -0,0 +1,69 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _IMBE +#define _IMBE + +#include "typedef.h" + +#define FRAME 160 // Number samples in frame +#define NUM_HARMS_MAX 56 // Maximum number of harmonics +#define NUM_HARMS_MIN 9 // Minimum number of harmonics +#define NUM_BANDS_MAX 12 // Maximum number of bands +#define MAX_BLOCK_LEN 10 // Maximum length of block used during spectral amplitude encoding +#define NUM_PRED_RES_BLKS 6 // Number of Prediction Residual Blocks +#define PE_LPF_ORD 21 // Order of Pitch estimation LPF +#define PITCH_EST_FRAME 301 // Pitch estimation frame size + + +#define B_NUM (NUM_HARMS_MAX - 1) + + +typedef struct +{ + Word16 e_p; + Word16 pitch; // Q14.2 + Word16 ref_pitch; // Q8.8 + Word32 fund_freq; + Word16 num_harms; + Word16 num_bands; + Word16 v_uv_dsn[NUM_HARMS_MAX]; + Word16 b_vec[NUM_HARMS_MAX + 3]; + Word16 bit_alloc[B_NUM + 4]; + Word16 sa[NUM_HARMS_MAX]; + Word16 l_uv; + Word16 div_one_by_num_harm; + Word16 div_one_by_num_harm_sh; +} IMBE_PARAM; + +typedef struct +{ + Word16 re; + Word16 im; +} Cmplx16; + +#if 0 +void decode_init(IMBE_PARAM *imbe_param); +void decode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd); +#endif + +#endif diff --git a/imbe_vocoder/imbe_vocoder.cpp b/imbe_vocoder/imbe_vocoder.cpp new file mode 100644 index 0000000..d976ea5 --- /dev/null +++ b/imbe_vocoder/imbe_vocoder.cpp @@ -0,0 +1,49 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + */ + +#include +#include + +#include "imbe_vocoder.h" + +static bool already_printed = false; + +imbe_vocoder::imbe_vocoder (void) : + prev_pitch(0), + prev_prev_pitch(0), + prev_e_p(0), + prev_prev_e_p(0), + seed(1), + num_harms_prev1(0), + num_harms_prev2(0), + num_harms_prev3(0), + fund_freq_prev(0), + th_max(0), + dc_rmv_mem(0), + d_gain_adjust(0) +{ + memset(wr_array, 0, sizeof(wr_array)); + memset(wi_array, 0, sizeof(wi_array)); + memset(pitch_est_buf, 0, sizeof(pitch_est_buf)); + memset(pitch_ref_buf, 0, sizeof(pitch_ref_buf)); + memset(pe_lpf_mem, 0, sizeof(pe_lpf_mem)); + memset(fft_buf, 0, sizeof(fft_buf)); + memset(sa_prev1, 0, sizeof(sa_prev1)); + memset(sa_prev2, 0, sizeof(sa_prev2)); + memset(uv_mem, 0, sizeof(uv_mem)); + memset(ph_mem, 0, sizeof(ph_mem)); + memset(vu_dsn_prev, 0, sizeof(vu_dsn_prev)); + memset(sa_prev3, 0, sizeof(sa_prev3)); + memset(v_uv_dsn, 0, sizeof(v_uv_dsn)); + + memset(&my_imbe_param, 0, sizeof(IMBE_PARAM)); + + decode_init(&my_imbe_param); + encode_init(); + + // (ambe2 patch: the start-up banner on stderr is gone from the library; the credit stays in this file and in lib/op25/README.md) + (void)already_printed; +} diff --git a/imbe_vocoder/imbe_vocoder.h b/imbe_vocoder/imbe_vocoder.h new file mode 100644 index 0000000..43aba78 --- /dev/null +++ b/imbe_vocoder/imbe_vocoder.h @@ -0,0 +1,95 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + */ +/* -*- c++ -*- */ +#ifndef INCLUDED_IMBE_VOCODER_H +#define INCLUDED_IMBE_VOCODER_H + +#include +#include + +#include "imbe.h" +#include "dsp_sub.h" +#include "basic_op.h" +#include "math_sub.h" +#include "encode.h" +#include "decode.h" + +class imbe_vocoder +{ +public: + imbe_vocoder(void); // constructor + ~imbe_vocoder() {} // destructor + // imbe_encode compresses 160 samples (in unsigned int format) + // outputs u[] vectors as frame_vector[] + void imbe_encode(int16_t *frame_vector, int16_t *snd) { + encode(&my_imbe_param, frame_vector, snd); + } + // imbe_decode decodes IMBE codewords (frame_vector), + // outputs the resulting 160 audio samples (snd) + void imbe_decode(int16_t *frame_vector, int16_t *snd) { + decode(&my_imbe_param, frame_vector, snd); + } + // hack to enable ambe encoder read access to speech parameters + const IMBE_PARAM* param(void) {return &my_imbe_param;} + void set_gain_adjust(float gain_adjust) {d_gain_adjust = gain_adjust;} + void encode_4400(int16_t *snd, uint8_t *imbe); + void decode_4400(int16_t *snd, uint8_t *imbe); +private: + IMBE_PARAM my_imbe_param; + + /* data items originally static (moved from individual c++ sources) */ + Word16 prev_pitch, prev_prev_pitch, prev_e_p, prev_prev_e_p; + UWord32 seed ; + Word16 num_harms_prev1; + Word32 sa_prev1[NUM_HARMS_MAX + 2]; + Word16 num_harms_prev2; + Word32 sa_prev2[NUM_HARMS_MAX + 2]; + Word16 uv_mem[105]; + UWord32 ph_mem[NUM_HARMS_MAX]; + Word16 num_harms_prev3; + Word32 fund_freq_prev; + Word16 vu_dsn_prev[NUM_HARMS_MAX]; + Word16 sa_prev3[NUM_HARMS_MAX]; + Word32 th_max; + Word16 v_uv_dsn[NUM_BANDS_MAX]; + Word16 wr_array[FFTLENGTH / 2 + 1]; + Word16 wi_array[FFTLENGTH / 2 + 1]; + Word16 pitch_est_buf[PITCH_EST_BUF_SIZE]; + Word16 pitch_ref_buf[PITCH_EST_BUF_SIZE]; + Word32 dc_rmv_mem; + Cmplx16 fft_buf[FFTLENGTH]; + Word16 pe_lpf_mem[PE_LPF_ORD]; + float d_gain_adjust; + + /* member functions */ + void idct(Word16 *in, Word16 m_lim, Word16 i_lim, Word16 *out); + void dct(Word16 *in, Word16 m_lim, Word16 i_lim, Word16 *out); + void fft_init(void); + void fft(Word16 *datam1, Word16 nn, Word16 isign); + void encode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd); + void parse(int argc, char **argv); + void pitch_est_init(void); + Word32 autocorr(Word16 *sigin, Word16 shift, Word16 scale_shift); + void e_p(Word16 *sigin, Word16 *res_buf); + void pitch_est(IMBE_PARAM *imbe_param, Word16 *frames_buf); + void sa_decode_init(void); + void sa_decode(IMBE_PARAM *imbe_param); + void sa_encode_init(void); + void sa_encode(IMBE_PARAM *imbe_param); + void uv_synt_init(void); + void uv_synt(IMBE_PARAM *imbe_param, Word16 *snd); + void v_synt_init(void); + void v_synt(IMBE_PARAM *imbe_param, Word16 *snd); + void pitch_ref_init(void); + Word16 voiced_sa_calc(Word32 num, Word16 den); + Word16 unvoiced_sa_calc(Word32 num, Word16 den); + void v_uv_det(IMBE_PARAM *imbe_param, Cmplx16 *fft_buf); + void decode_init(IMBE_PARAM *imbe_param); + void decode(IMBE_PARAM *imbe_param, Word16 *frame_vector, Word16 *snd); + void encode_init(void); +}; + +#endif /* INCLUDED_IMBE_VOCODER_H */ diff --git a/imbe_vocoder/math_sub.cpp b/imbe_vocoder/math_sub.cpp new file mode 100644 index 0000000..6bbc2f8 --- /dev/null +++ b/imbe_vocoder/math_sub.cpp @@ -0,0 +1,355 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "basic_op.h" +#include "math_sub.h" + +//----------------------------------------------------------------------------- +// Table for routine Pow2() table[] = 2^(-1...0) +//----------------------------------------------------------------------------- +static const Word16 pow2_table[33] = +{ + 16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, + 20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, + 25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, + 31379, 32066, 32767 +}; + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes pow(2.0, x) +// +// INPUT: +// x - In signed Q10.22 format +// +// OUTPUT: +// None +// +// RETURN: +// Result in signed Q14.2 format +// +//----------------------------------------------------------------------------- +Word16 Pow2(Word32 x) +{ + Word16 exp, i, a, tmp; + Word32 L_x; + Word16 exponent, fraction; + + exponent = extract_h(L_shr(x, 6)); + if(exponent < 0) + exponent = add(exponent, 1); + fraction = extract_l(L_shr(L_sub(x, L_shl(L_deposit_l(exponent),6 + 16)), 7)); + + if(x < 0) + fraction = negate(fraction); + + L_x = L_mult(fraction, 32); // L_x = fraction<<6 + i = extract_h(L_x); // Extract b10-b16 of fraction + L_x = L_shr(L_x, 1); + a = extract_l(L_x); // Extract b0-b9 of fraction + a = a & (Word16)0x7fff; + + L_x = L_deposit_h (pow2_table[i]); // table[i] << 16 + tmp = sub(pow2_table[i], pow2_table[i + 1]); // table[i] - table[i+1] + L_x = L_msu(L_x, tmp, a); // L_x -= tmp*a*2 + + if(x < 0) + { + L_x = L_deposit_h(div_s(0x4000, extract_h(L_x))); // calculate 1/fraction + exponent = sub(exponent, 1); + } + + exp = sub(12, exponent); + L_x = L_shr_r(L_x, exp); + + return extract_h(L_x); +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Multiply a 32 bit number (L_var2) and a 16 bit +// number (var1) returning a 32 bit result. L_var2 +// is truncated to 31 bits prior to executing the +// multiply. +// +// INPUT: +// L_var2 - A Word32 input variable +// var1 - A Word16 input variable +// +// OUTPUT: +// None +// +// RETURN: +// A Word32 value +// +//----------------------------------------------------------------------------- +Word32 L_mpy_ls(Word32 L_var2, Word16 var1) +{ + Word32 L_varOut; + Word16 swtemp; + + swtemp = shr(extract_l(L_var2), 1); + swtemp = (Word16)32767 & (Word16) swtemp; + + L_varOut = L_mult(var1, swtemp); + L_varOut = L_shr(L_varOut, 15); + L_varOut = L_mac(L_varOut, var1, extract_h(L_var2)); + return (L_varOut); +} + +//----------------------------------------------------------------------------- +// Table for routine cos_fxp() +//----------------------------------------------------------------------------- +static const Word16 cos_table[129] = +{ + 32767, 32766, 32758, 32746, 32729, 32706, 32679, 32647, 32610, + 32568, 32522, 32470, 32413, 32352, 32286, 32214, 32138, 32058, + 31972, 31881, 31786, 31686, 31581, 31471, 31357, 31238, 31114, + 30986, 30853, 30715, 30572, 30425, 30274, 30118, 29957, 29792, + 29622, 29448, 29269, 29086, 28899, 28707, 28511, 28311, 28106, + 27897, 27684, 27467, 27246, 27020, 26791, 26557, 26320, 26078, + 25833, 25583, 25330, 25073, 24812, 24548, 24279, 24008, 23732, + 23453, 23170, 22884, 22595, 22302, 22006, 21706, 21403, 21097, + 20788, 20475, 20160, 19841, 19520, 19195, 18868, 18538, 18205, + 17869, 17531, 17190, 16846, 16500, 16151, 15800, 15447, 15091, + 14733, 14373, 14010, 13646, 13279, 12910, 12540, 12167, 11793, + 11417, 11039, 10660, 10279, 9896, 9512, 9127, 8740, 8351, + 7962, 7571, 7180, 6787, 6393, 5998, 5602, 5205, 4808, + 4410, 4011, 3612, 3212, 2811, 2411, 2009, 1608, 1206, + 804, 402, 0 +}; + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes the cosine of x whose value is expressed in radians/PI. +// +// INPUT: +// x - argument in Q1.15 +// +// OUTPUT: +// None +// +// RETURN: +// Result in Q1.15 +// +//----------------------------------------------------------------------------- +Word16 cos_fxp(Word16 x) +{ + Word16 tx, ty; + Word16 sign; + Word16 index1,index2; + Word16 m; + Word16 temp; + + sign = 0; + if(x < 0) + tx = negate(x); + else + tx = x; + + // if angle > pi/2, cos(angle) = -cos(pi-angle) + if(tx > X05_Q15) + { + tx = sub(ONE_Q15,tx); + sign = -1; + } + // convert input to be within range 0-128 + index1 = shr(tx,7); + index2 = add(index1,1); + + if (index1 == 128) + return (Word16)0; + + m = sub(tx,shl(index1,7)); + // convert decimal part to Q15 + m = shl(m,8); + + temp = sub(cos_table[index2],cos_table[index1]); + temp = mult(m,temp); + ty = add(cos_table[index1],temp); + + if(sign) + return negate(ty); + else + return ty; +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes the sinus of x whose value is expressed in radians/PI. +// +// INPUT: +// x - argument in Q1.15 +// +// OUTPUT: +// None +// +// RETURN: +// Result in Q1.15 +// +//----------------------------------------------------------------------------- +Word16 sin_fxp(Word16 x) +{ + Word16 tx, ty; + Word16 sign; + + sign = 0; + if(x < 0) + { + tx = negate(x); + sign = 1; + } + else + tx = x; + + if(tx > X05_Q15) + tx = sub(tx, X05_Q15); + else + tx = sub(X05_Q15,tx); + + ty = cos_fxp(tx); + + if(sign) + return negate(ty); + else + return ty; +} + + +//----------------------------------------------------------------------------- +// Table for routine sqrt_l_exp() +// table[] = sqrt((i+16)*2^-6) * 2^15, i.e. sqrt(x) scaled Q15 +//----------------------------------------------------------------------------- +static const Word16 sqrt_table[49] = +{ + 16384, 16888, 17378, 17854, 18318, 18770, 19212, 19644, 20066, 20480, + 20886, 21283, 21674, 22058, 22435, 22806, 23170, 23530, 23884, 24232, + 24576, 24915, 25249, 25580, 25905, 26227, 26545, 26859, 27170, 27477, + 27780, 28081, 28378, 28672, 28963, 29251, 29537, 29819, 30099, 30377, + 30652, 30924, 31194, 31462, 31727, 31991, 32252, 32511, 32767 +}; + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes sqrt(L_x), where L_x is positive. +// +// INPUT: +// L_x - argument in Q1.31 +// *exp - pointer to save denormalization exponent +// OUTPUT: +// Right shift to be applied to result, Q16.0 +// +// RETURN: +// Result in Q1.31 +// Right shift should be applied to it! +// +//----------------------------------------------------------------------------- +Word32 sqrt_l_exp(Word32 L_x, Word16 *exp) +{ + Word16 e, i, a, tmp; + Word32 L_y; + + if(L_x <= (Word32)0) + { + *exp = 0; + return (Word32)0; + } + + e = norm_l(L_x) & 0xFFFE; // get next lower EVEN norm. exp + L_x = L_shl(L_x, e); // L_x is normalized to [0.25..1) + *exp = e >> 1; // return 2*exponent (or Q1) + + L_x = L_shr(L_x, 9); + i = extract_h(L_x); // Extract b25-b31, 16 <= i <= 63 because of normalization + L_x = L_shr(L_x, 1); + a = extract_l(L_x); // Extract b10-b24 + a = a & (Word16)0x7fff; + + i = sub(i, 16); // 0 <= i <= 47 + + L_y = L_deposit_h(sqrt_table[i]); // table[i] << 16 + tmp = sub(sqrt_table[i], sqrt_table[i + 1]); // table[i] - table[i+1]) + L_y = L_msu(L_y, tmp, a); // L_y -= tmp*a*2 + + return L_y; +} + +//----------------------------------------------------------------------------- +// Table for routine Log2() +//----------------------------------------------------------------------------- +static const Word16 log_table[33] = +{ + 0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716, + 12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033, + 22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497, + 31266, 32023, 32767 +}; + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes log2 of x +// +// INPUT: +// x - argument in Q14.2 +// +// OUTPUT: +// None +// +// RETURN: +// Result in Q10.22 +// +//----------------------------------------------------------------------------- +Word32 Log2(Word16 x) +{ + Word16 exp, i, a, tmp; + Word32 L_y; + + if(x <= (Word16)0) + return 0; + + exp = norm_s(x); + x = shl(x, exp); + + i = shr(x, 9); // Extract b15-b9 + a = shl(x & 0x1FF, 6); // Extract b8-b0 + i = sub (i, 32); + + L_y = L_deposit_h(log_table[i]); // table[i] << 16 + tmp = sub(log_table[i], log_table[i + 1]); // table[i] - table[i+1] + L_y = L_msu(L_y, tmp, a); // L_y -= tmp*a*2 + + L_y = L_shr(L_y, 9); + + exp = sub(12, exp); + L_y = L_add(L_y, L_deposit_h(shl(exp, 6))); + + return L_y; +} + + + + + + + + + diff --git a/imbe_vocoder/math_sub.h b/imbe_vocoder/math_sub.h new file mode 100644 index 0000000..baf75fe --- /dev/null +++ b/imbe_vocoder/math_sub.h @@ -0,0 +1,130 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _MATH_SUB +#define _MATH_SUB + +#define X05_Q15 16384 // (0.5*(1<<15)) +#define ONE_Q15 32767 // ((1<<15)-1) + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes the cosine of x whose value is expressed in radians/PI. +// +// INPUT: +// x - argument in Q1.15 +// +// OUTPUT: +// None +// +// RETURN: +// Result in Q1.15 +// +//----------------------------------------------------------------------------- +Word16 cos_fxp(Word16 x); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes the sinus of x whose value is expressed in radians/PI. +// +// INPUT: +// x - argument in Q1.15 +// +// OUTPUT: +// None +// +// RETURN: +// Result in Q1.15 +// +//----------------------------------------------------------------------------- +Word16 sin_fxp(Word16 x); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Multiply a 32 bit number (L_var2) and a 16 bit +// number (var1) returning a 32 bit result. L_var2 +// is truncated to 31 bits prior to executing the +// multiply. +// +// INPUT: +// L_var2 - A Word32 input variable +// var1 - A Word16 input variable +// +// OUTPUT: +// None +// +// RETURN: +// A Word32 value +// +//----------------------------------------------------------------------------- +Word32 L_mpy_ls(Word32 L_var2, Word16 var1); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes pow(2.0, x) +// +// INPUT: +// x - In signed Q10.22 format +// +// OUTPUT: +// None +// +// RETURN: +// Result in signed Q14.2 format +// +//----------------------------------------------------------------------------- +Word16 Pow2 (Word32 x); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes sqrt(L_x), where L_x is positive. +// +// INPUT: +// L_x - argument in Q1.31 +// *exp - pointer to save denormalization exponent +// OUTPUT: +// Right shift to be applied to result, Q16.0 +// +// RETURN: +// Result in Q1.31 +// Right shift should be applied to it! +// +//----------------------------------------------------------------------------- +Word32 sqrt_l_exp (Word32 L_x, Word16 *exp); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Computes log2 of x +// +// INPUT: +// x - argument in Q14.2 +// +// OUTPUT: +// None +// +// RETURN: +// Result in Q10.22 +// +//----------------------------------------------------------------------------- +Word32 Log2(Word16 x); + +#endif diff --git a/imbe_vocoder/pe_lpf.cpp b/imbe_vocoder/pe_lpf.cpp new file mode 100644 index 0000000..b16547b --- /dev/null +++ b/imbe_vocoder/pe_lpf.cpp @@ -0,0 +1,74 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "aux_sub.h" +#include "basic_op.h" +#include "math_sub.h" +#include "pe_lpf.h" + + + +static const Word16 lpf_coef[PE_LPF_ORD] = +{ + -94, -92, 185, 543, 288, -883, -1834, -495, 3891, 9141, 11512, + 9141, 3891, -495, -1834, -883, 288, 543, 185, -92, -94 +}; + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Low-pass filter for pitch estimator +// +// +// INPUT: +// *sigin - pointer to input signal buffer +// *sigout - pointer to output signal buffer +// *mem - pointer to filter's memory element +// len - number of input signal samples +// +// OUTPUT: +// None +// +// RETURN: +// Saved filter state in mem +// +//----------------------------------------------------------------------------- +void pe_lpf(Word16 *sigin, Word16 *sigout, Word16 *mem, Word16 len) +{ + Word16 i; + Word32 L_sum; + + while(len--) + { + for(i = 0; i < PE_LPF_ORD - 1; i++) + mem[i] = mem[i + 1]; + mem[PE_LPF_ORD - 1] = *sigin++; + + L_sum = 0; + for(i = 0; i < PE_LPF_ORD; i++) + L_sum = L_mac(L_sum, mem[i], lpf_coef[i]); + + *sigout++ = round(L_sum); + } +} diff --git a/imbe_vocoder/pe_lpf.h b/imbe_vocoder/pe_lpf.h new file mode 100644 index 0000000..54fd017 --- /dev/null +++ b/imbe_vocoder/pe_lpf.h @@ -0,0 +1,47 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#ifndef _PE_LPF +#define _PE_LPF + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Low-pass filter for pitch estimator +// +// +// INPUT: +// *sigin - pointer to input signal buffer +// *sigout - pointer to output signal buffer +// *mem - pointer to filter's memory element +// len - number of input signal samples +// +// OUTPUT: +// None +// +// RETURN: +// Saved filter state in mem +// +//----------------------------------------------------------------------------- +void pe_lpf(Word16 *sigin, Word16 *sigout, Word16 *mem, Word16 len); + + +#endif diff --git a/imbe_vocoder/pitch_est.cpp b/imbe_vocoder/pitch_est.cpp new file mode 100644 index 0000000..08343bb --- /dev/null +++ b/imbe_vocoder/pitch_est.cpp @@ -0,0 +1,350 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "basic_op.h" +#include "aux_sub.h" +#include "math_sub.h" +#include "tbls.h" +#include "pitch_est.h" +#include "encode.h" +#include "dsp_sub.h" +#include "imbe_vocoder.h" + + + +static const UWord16 min_max_tbl[203] = +{ + 0x0008, 0x0009, 0x000a, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0012, 0x0013, + 0x0014, 0x0115, 0x0216, 0x0218, 0x0319, 0x041a, 0x051b, 0x061c, 0x061e, 0x071f, + 0x0820, 0x0921, 0x0a22, 0x0a24, 0x0b25, 0x0c26, 0x0d27, 0x0e28, 0x0e2a, 0x0f2b, + 0x102c, 0x112d, 0x122e, 0x1230, 0x1331, 0x1432, 0x1533, 0x1634, 0x1636, 0x1737, + 0x1838, 0x1939, 0x1a3a, 0x1a3c, 0x1b3d, 0x1c3e, 0x1d3f, 0x1e40, 0x1e42, 0x1f43, + 0x2044, 0x2145, 0x2246, 0x2248, 0x2349, 0x244a, 0x254b, 0x264c, 0x264e, 0x274f, + 0x2850, 0x2951, 0x2a52, 0x2a54, 0x2b55, 0x2c56, 0x2d57, 0x2e58, 0x2e5a, 0x2f5b, + 0x305c, 0x315d, 0x325e, 0x3260, 0x3361, 0x3462, 0x3563, 0x3664, 0x3666, 0x3767, + 0x3868, 0x3969, 0x3a6a, 0x3a6c, 0x3b6d, 0x3c6e, 0x3d6f, 0x3e70, 0x3e72, 0x3f73, + 0x4074, 0x4175, 0x4276, 0x4278, 0x4379, 0x447a, 0x457b, 0x467c, 0x467e, 0x477f, + 0x4880, 0x4981, 0x4a82, 0x4a84, 0x4b85, 0x4c86, 0x4d87, 0x4e88, 0x4e8a, 0x4f8b, + 0x508c, 0x518d, 0x528e, 0x5290, 0x5391, 0x5492, 0x5593, 0x5694, 0x5696, 0x5797, + 0x5898, 0x5999, 0x5a9a, 0x5a9c, 0x5b9d, 0x5c9e, 0x5d9f, 0x5ea0, 0x5ea2, 0x5fa3, + 0x60a4, 0x61a5, 0x62a6, 0x62a8, 0x63a9, 0x64aa, 0x65ab, 0x66ac, 0x66ae, 0x67af, + 0x68b0, 0x69b1, 0x6ab2, 0x6ab4, 0x6bb5, 0x6cb6, 0x6db7, 0x6eb8, 0x6eba, 0x6fbb, + 0x70bc, 0x71bd, 0x72be, 0x72c0, 0x73c1, 0x74c2, 0x75c3, 0x76c4, 0x76c6, 0x77c7, + 0x78c8, 0x79c9, 0x7aca, 0x7aca, 0x7bca, 0x7cca, 0x7dca, 0x7eca, 0x7eca, 0x7fca, + 0x80ca, 0x81ca, 0x82ca, 0x82ca, 0x83ca, 0x84ca, 0x85ca, 0x86ca, 0x86ca, 0x87ca, + 0x88ca, 0x89ca, 0x8aca, 0x8aca, 0x8bca, 0x8cca, 0x8dca, 0x8eca, 0x8eca, 0x8fca, + 0x90ca, 0x91ca, 0x92ca, 0x92ca, 0x93ca, 0x94ca, 0x95ca, 0x96ca, 0x96ca, 0x97ca, + 0x98ca, 0x99ca, 0x9aca +}; + + + + + +void imbe_vocoder::pitch_est_init(void) +{ + prev_pitch = prev_prev_pitch = 158; // 100 + prev_e_p = prev_prev_e_p = 0; +} + + + +Word32 imbe_vocoder::autocorr(Word16 *sigin, Word16 shift, Word16 scale_shift) +{ + Word32 L_sum; + Word16 i; + + L_sum = 0; + for(i = 0; i < PITCH_EST_FRAME - shift; i++) + L_sum = L_add(L_sum, L_shr(L_mult(sigin[i], sigin[i + shift]), scale_shift) ); + + return L_sum; +} + + + +void imbe_vocoder::e_p(Word16 *sigin, Word16 *res_buf) +{ + Word16 i, j, den_part_acc, tmp; + Word32 L_sum, L_num, L_den, L_e0, L_tmp; + Word16 sig_wndwed[PITCH_EST_FRAME]; + Word32 corr[259]; + Word16 index_beg, index_step; + Word16 scale_shift; + + + // Windowing input signal s * wi^2 + for(i = 0 ; i < PITCH_EST_FRAME; i++) + sig_wndwed[i] = mult_r(sigin[i], wi[i]); + + L_sum = 0; + for(i = 0 ; i < PITCH_EST_FRAME; i++) + L_sum = L_add(L_sum, L_mpy_ls( L_mult(sigin[i], sigin[i]), wi[i]) ); // sum(s^2 * wi^2) + + // Check for the overflow + if(L_sum == MAX_32) + { + // Recalculate with scaling + L_sum = 0; + for(i = 0 ; i < PITCH_EST_FRAME; i++) + L_sum = L_add(L_sum, L_mpy_ls( L_shr(L_mult(sigin[i], sigin[i]), 5), wi[i])); + scale_shift = 5; + } + else + scale_shift = 0; + + L_e0 = 0; + for(i = 0 ; i < PITCH_EST_FRAME; i++) + L_e0 = L_add(L_e0, L_shr( L_mult(sig_wndwed[i], sig_wndwed[i]), scale_shift)); // sum(s^2 * wi^4) + + // Calculate correlation for time shift in range 21...150 with step 0.5 + // For integer shifts + for(tmp = 21, i = 0; tmp <= 150; tmp++, i += 2) + corr[i] = autocorr(sig_wndwed, tmp, scale_shift); + // For intermediate shifts + for(i = 1; i < 258; i += 2) + corr[i] = L_shr( L_add(corr[i - 1], corr[i + 1]), 1); + + + // variable to calculate 1 - P * sum(wi ^4) in denominator + den_part_acc = CNST_0_8717_Q1_15; + + index_step = 42; // Note: 42 = 21 in Q15.1 format, so index_step will be used also as p in Q15.1 format + index_beg = 0; + L_e0 = L_shr(L_e0, 7); // divide by 64 to compensate wi scaling + // p = 21...122 by step 0.5 + for(i = 0; i < 203; i++) + { + + // Calculate sum( corr ( n * p) ) + L_tmp = 0; + j = index_beg; + while(j <= 258) + { + L_tmp = L_add(L_tmp, corr[j]); + j += index_step; + } + + L_tmp = L_shr(L_tmp, 6); // compensate wi scaling + L_tmp = L_add(L_tmp, L_e0); // For n = 0 + L_tmp = L_tmp * index_step; + L_num = L_sub(L_sum, L_tmp); + + index_beg++; + index_step++; + + L_den = L_mpy_ls(L_sum, den_part_acc); + + if(L_num < L_den && L_den != 0) + { + //res_buf[i] = (Word16)((double)L_num/(double)L_den * 4096.); // Q4.12 + + if(L_num <= 0) + res_buf[i] = 0; + else + { + tmp = norm_l(L_den); + tmp = div_s(extract_h(L_shl(L_num, tmp)), extract_h(L_shl(L_den, tmp))); + res_buf[i] = shr(tmp, 3); // convert to Q4.12 + } + } + else if(L_num >= L_den) + { + res_buf[i] = CNST_1_00_Q4_12; + //res_buf[i] = (Word16)((double)L_num/(double)L_den * 4096.); // Q4.12 + } + else + res_buf[i] = CNST_1_00_Q4_12; + + den_part_acc = sub(den_part_acc, CNST_0_0031_Q1_15); + } +} + + + + +void imbe_vocoder::pitch_est(IMBE_PARAM *imbe_param, Word16 *frames_buf) +{ + Word16 e_p_arr0[203], e_p_arr1[203], e_p_arr2[203], e1p1_e2p2_est_save[203]; + Word16 min_index, max_index, p, i, p_index; + UWord16 tmp=0, p_fp; + UWord32 UL_tmp; + Word16 e_p_cur, pb, pf, ceb, s_tmp; + Word16 cef_est, cef, p0_est, p0, p1, p2, p1_max_index, p2_max_index, e1p1_e2p2_est, e1p1_e2p2; + Word16 e_p_arr2_min[203]; + + // Calculate E(p) function for current and two future frames + e_p(&frames_buf[0], e_p_arr0); + + // Look-Back Pitch Tracking + min_index = HI_BYTE(min_max_tbl[prev_pitch]); + max_index = LO_BYTE(min_max_tbl[prev_pitch]); + + p = pb = min_index; + e_p_cur = e_p_arr0[min_index]; + while(++p <= max_index) + if(e_p_arr0[p] < e_p_cur) + { + e_p_cur = e_p_arr0[p]; + pb = p; + } + ceb = add(e_p_cur, add(prev_e_p, prev_prev_e_p)); + + + if(ceb <= CNST_0_48_Q4_12) + { + prev_prev_pitch = prev_pitch; + prev_pitch = pb; + prev_prev_e_p = prev_e_p; + prev_e_p = e_p_arr0[pb]; + + imbe_param->pitch = pb + 42; // Result in Q15.1 format + imbe_param->e_p = prev_e_p; + return; + } + + + // Look-Ahead Pitch Tracking + e_p(&frames_buf[FRAME], e_p_arr1); + e_p(&frames_buf[2 * FRAME], e_p_arr2); + + p0_est = p0 = 0; + cef_est = e_p_arr0[p0] + e_p_arr1[p0] + e_p_arr2[p0]; + e1p1_e2p2 = 1; + + p1 = 0; + while(p1 < 203) + { + p2 = HI_BYTE(min_max_tbl[p1]); + p2_max_index = LO_BYTE(min_max_tbl[p1]); + s_tmp = e_p_arr2[p1]; + while(p2 <= p2_max_index) + { + if(e_p_arr2[p2] < s_tmp) + s_tmp = e_p_arr2[p2]; + p2++; + } + e_p_arr2_min[p1] = s_tmp; + p1++; + } + while(p0 < 203) + { + e1p1_e2p2_est = e_p_arr1[p0] + e_p_arr2_min[p0]; + p1 = HI_BYTE(min_max_tbl[p0]); + p1_max_index = LO_BYTE(min_max_tbl[p0]); + while(p1 <= p1_max_index) + { + if(add(e_p_arr1[p1], e_p_arr2_min[p1]) < e1p1_e2p2_est) + e1p1_e2p2_est = add(e_p_arr1[p1], e_p_arr2_min[p1]); + p1++; + } + e1p1_e2p2_est_save[p0] = e1p1_e2p2_est; + cef = add(e_p_arr0[p0], e1p1_e2p2_est); + if(cef < cef_est) + { + cef_est = cef; + p0_est = p0; + } + p0++; + } + + pf = p0_est; + // Sub-multiples analysis + if(pf >= 42) // Check if Sub-multiples are possible + { + if(pf < 84) + i = 1; + else if(pf < 126) + i = 2; + else if(pf < 168) + i = 3; + else + i = 4; + + p_fp = (pf + 42) << 8; // Convert pitch estimation from array index to unsigned Q7.19 format + + while(i--) + { + switch(i) + { + case 0: + tmp = p_fp >> 1; // P_est/2 + break; + + case 1: + UL_tmp = (UWord32)p_fp * 0x5555; // P_est/3 + tmp = UL_tmp >> 16; + break; + + case 2: + tmp = p_fp >> 2; // P_est/4 + break; + + case 3: + UL_tmp = (UWord32)p_fp * 0x3333; // P_est/5 + tmp = UL_tmp >> 16; + break; + } + + p_index = ((tmp + 0x0080) >> 8) - 42; // Convert fixed-point pitch value to integer array index with rounding + + cef = add(e_p_arr0[p_index], e1p1_e2p2_est_save[p_index]); + + if(cef <= CNST_0_85_Q4_12 && mult_r(cef, CNST_0_5882_Q1_15) <= cef_est) // 1/1.7 = 0.5882 + { + pf = p_index; + break; + } + + if(cef <= CNST_0_4_Q4_12 && mult_r(cef, CNST_0_2857_Q1_15) <= cef_est) // 1/3.5 = 0.2857 + { + pf = p_index; + break; + } + + if(cef <= CNST_0_05_Q4_12) + { + pf = p_index; + break; + } + } + } + + cef = add(e_p_arr0[pf], e1p1_e2p2_est_save[pf]); + + if(ceb <= cef) + p = pb; + else + p = pf; + + prev_prev_pitch = prev_pitch; + prev_pitch = p; + prev_prev_e_p = prev_e_p; + prev_e_p = e_p_arr0[p]; + + + imbe_param->pitch = p + 42; // Result in Q15.1 format + imbe_param->e_p = prev_e_p; +} diff --git a/imbe_vocoder/pitch_est.h b/imbe_vocoder/pitch_est.h new file mode 100644 index 0000000..b6b052d --- /dev/null +++ b/imbe_vocoder/pitch_est.h @@ -0,0 +1,29 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _PITCH_EST +#define _PITCH_EST + +void pitch_est_init(void); +void pitch_est(IMBE_PARAM *imbe_param, Word16 *frames_buf); + +#endif diff --git a/imbe_vocoder/pitch_ref.cpp b/imbe_vocoder/pitch_ref.cpp new file mode 100644 index 0000000..85c5a13 --- /dev/null +++ b/imbe_vocoder/pitch_ref.cpp @@ -0,0 +1,167 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "basic_op.h" +#include "aux_sub.h" +#include "math_sub.h" +#include "dsp_sub.h" +#include "tbls.h" +#include "pitch_ref.h" + +#include +#include +#include + + +#define PITCH_REF_FRAME 221 +#define MIN_INDEX 50 + + + + +void pitch_ref(IMBE_PARAM *imbe_param, Cmplx16 *fft_buf) +{ + Word16 i, j, index_a_save, pitch_est, tmp, shift, index_wr, up_lim; + Cmplx16 sp_rec[FFTLENGTH/2]; + Word32 fund_freq, fund_freq_2, fund_freq_acc_a, fund_freq_acc_b, fund_freq_acc, L_tmp, amp_re_acc, amp_im_acc, L_sum, L_diff_min; + Word16 ha, hb, index_a, index_b, index_tbl[20], it_ind, re_tmp, im_tmp, pitch_cand=0; + Word32 fund_freq_cand=0; + + + pitch_est = shl(imbe_param->pitch, 7); // Convert to Q8.8 + pitch_est = sub(pitch_est, CNST_1_125_Q8_8); // Sub 1.125 = 9/8 + + L_diff_min = MAX_32; + for(i = 0; i < 19; i++) + { + shift = norm_s(pitch_est); + tmp = shl(pitch_est, shift); + tmp = div_s(0x4000, tmp); + fund_freq = L_shl(tmp, shift + 11); + + fund_freq_acc = fund_freq; + fund_freq_2 = L_shr(fund_freq, 1); + fund_freq_acc_a = L_sub(fund_freq, fund_freq_2); + fund_freq_acc_b = L_add(fund_freq, fund_freq_2); + + // Calculate upper limit for spectrum reconstruction + up_lim = extract_h(L_shr((UWord32)CNST_0_9254_Q0_16 * pitch_est, 1)); // 0.9254/fund_freq + up_lim = sub(up_lim, CNST_0_5_Q8_8); // sub 0.5 + up_lim = up_lim & 0xFF00; // extract fixed part + up_lim = mult(up_lim, extract_h(fund_freq)); + up_lim = shr(up_lim, 1); + + index_b = 0; + while(index_b <= up_lim) + { + ha = extract_h(fund_freq_acc_a); + hb = extract_h(fund_freq_acc_b); + index_a = (ha >> 8) + ((ha & 0xFF)?1:0); + index_b = (hb >> 8) + ((hb & 0xFF)?1:0); + + if(index_b >= MIN_INDEX) + { + L_tmp = L_shl(L_deposit_h(index_a), 8); + L_tmp = L_sub(L_tmp, fund_freq_acc); + L_tmp = L_add(L_tmp, 0x00020000); // for rounding purpose + L_tmp = L_shr(L_tmp, 2); + + index_a_save = index_a; + it_ind = 0; + + amp_re_acc = amp_im_acc = 0; + while(index_a < index_b) + { + index_wr = extract_h(L_tmp); + if(index_wr < 0 && (L_tmp & 0xFFFF)) // truncating for negative number + index_wr = add(index_wr, 1); + index_wr = add(index_wr, 160); + index_tbl[it_ind++] = index_wr; + if(index_wr >= 0 && index_wr <= 320) + { + amp_re_acc = L_mac(amp_re_acc, fft_buf[index_a].re, wr_sp[index_wr]); + amp_im_acc = L_mac(amp_im_acc, fft_buf[index_a].im, wr_sp[index_wr]); + } + + index_a++; + L_tmp = L_add(L_tmp, 0x400000); + } + + it_ind = 0; + index_a = index_a_save; + while(index_a < index_b) + { + index_wr = index_tbl[it_ind++]; + if(index_wr < 0 || index_wr > 320) + { + sp_rec[index_a].im = sp_rec[index_a].re = 0; + } + else + { + sp_rec[index_a].im = mult(mult(extract_h(amp_im_acc), wr_sp[index_wr]), 0x6666); + sp_rec[index_a].re = mult(mult(extract_h(amp_re_acc), wr_sp[index_wr]), 0x6666); + } + + index_a++; + } + } + + fund_freq_acc_a = L_add(fund_freq_acc_a, fund_freq); + fund_freq_acc_b = L_add(fund_freq_acc_b, fund_freq); + fund_freq_acc = L_add(fund_freq_acc, fund_freq); + } + + L_sum = 0; + for(j = MIN_INDEX; j <= up_lim; j++) + { + re_tmp = sub(fft_buf[j].re, sp_rec[j].re); + im_tmp = sub(fft_buf[j].im, sp_rec[j].im); + L_sum = L_mac(L_sum, re_tmp, re_tmp); + L_sum = L_mac(L_sum, im_tmp, im_tmp); + } + + if(L_sum < L_diff_min) + { + L_diff_min = L_sum; + pitch_cand = pitch_est; + fund_freq_cand = fund_freq; + } + + pitch_est = add(pitch_est, CNST_0_125_Q8_8); // Add 0.125 = 1/8 + } + + imbe_param->ref_pitch = pitch_cand; + imbe_param->fund_freq = fund_freq_cand; +} + + + + + + + + + + diff --git a/imbe_vocoder/pitch_ref.h b/imbe_vocoder/pitch_ref.h new file mode 100644 index 0000000..29ccf8a --- /dev/null +++ b/imbe_vocoder/pitch_ref.h @@ -0,0 +1,28 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _PITCH_REF +#define _PIRCH_REF + +void pitch_ref(IMBE_PARAM *imbe_param, Cmplx16 *fft_buf); + +#endif diff --git a/imbe_vocoder/qnt_sub.cpp b/imbe_vocoder/qnt_sub.cpp new file mode 100644 index 0000000..bd0cbe8 --- /dev/null +++ b/imbe_vocoder/qnt_sub.cpp @@ -0,0 +1,144 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "basic_op.h" +#include "qnt_sub.h" + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Dequantize by quantizer step size +// +// +// INPUT: +// qval - quantized value +// step_size - step size used to quantize in unsigned Q0.16 format +// bit_num - the number of bits +// +// OUTPUT: +// None +// +// RETURN: +// Quantized Value in signed (bit_num).16 format +// +//----------------------------------------------------------------------------- +Word32 deqnt_by_step(Word16 qval, UWord16 step_size, Word16 bit_num) +{ + Word32 res; + + if(bit_num == 0) + return (Word32)0; + + res = (Word32)step_size * (qval - (1 << (bit_num - 1))); + res = L_add(res, ((Word32)step_size * CNST_0_5_Q0_16) >> 16); + + return res; +} + + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Quantize by quantizer step size +// +// +// INPUT: +// val - value to be quantized in Q5.10 format +// step_size - step size used to quantize in unsigned Q0.16 format +// bit_num - the number of bits +// +// OUTPUT: +// None +// +// RETURN: +// Quantized Value in integer +// +//----------------------------------------------------------------------------- +Word16 qnt_by_step(Word16 val, UWord16 step_size, Word16 bit_num) +{ + Word16 index, min_val, max_val; + Word16 q_index, shift, tmp; + + shift = norm_s(step_size); + + tmp = div_s(0x4000, shl(step_size, shift)); // Remark: To get result in Qxx.16 format it is necessary left shift tmp by (shift + 3) + q_index = shr_r(mult(val, tmp), sub(9, shift)); // q_index here is rounded to the nearest integer + + max_val = 1 << (bit_num - 1); + min_val = negate(max_val); + + if(q_index < min_val) + index = 0; + else if(q_index >= max_val) + index = (1 << bit_num) - 1; + else + index = max_val + q_index; + + return index; +} + +//----------------------------------------------------------------------------- +// PURPOSE: +// Quantize by table +// +// +// INPUT: +// val - value to be quantized +// q_tbl - pointer to table +// q_tbl_size - size of table +// +// OUTPUT: +// None +// +// RETURN: +// Quantized Value in integer +// +//----------------------------------------------------------------------------- +Word16 tbl_quant(Word16 val, Word16 *q_tbl, Word16 q_tbl_size) +{ + Word16 min_index, max_index, index; + + min_index = 0; + max_index = q_tbl_size - 1; + + if(val >= q_tbl[max_index]) + return max_index; + + if(val <= q_tbl[min_index]) + return min_index; + + while(max_index - min_index != 1) + { + index = min_index + ((max_index - min_index) >> 1); + + if(q_tbl[index] > val) + max_index = index; + else + min_index = index; + } + + if(q_tbl[max_index] - val <= val - q_tbl[min_index]) + return max_index; + else + return min_index; +} diff --git a/imbe_vocoder/qnt_sub.h b/imbe_vocoder/qnt_sub.h new file mode 100644 index 0000000..ee3ac1c --- /dev/null +++ b/imbe_vocoder/qnt_sub.h @@ -0,0 +1,86 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#ifndef _QNT_SUB +#define _QNT_SUB + + +#define CNST_0_5_Q0_16 0x8000 + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Dequantize by quantizer step size +// +// +// INPUT: +// qval - quantized value +// step_size - step size used to quantize in unsigned Q0.16 format +// bit_num - the number of bits +// +// OUTPUT: +// None +// +// RETURN: +// Quantized Value in signed (bit_num).16 format +// +//----------------------------------------------------------------------------- +Word32 deqnt_by_step(Word16 qval, UWord16 step_size, Word16 bit_num); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Quantize by quantizer step size +// +// +// INPUT: +// val - value to be quantized +// step_size - step size used to quantize in unsigned Q0.16 format +// bit_num - the number of bits +// +// OUTPUT: +// None +// +// RETURN: +// Quantized Value in integer +// +//----------------------------------------------------------------------------- +Word16 qnt_by_step(Word16 val, UWord16 step_size, Word16 bit_num); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Quantize by table +// +// +// INPUT: +// val - value to be quantized +// q_tbl - pointer to table +// q_tbl_size - size of table +// +// OUTPUT: +// None +// +// RETURN: +// Quantized Value in integer +// +//----------------------------------------------------------------------------- +Word16 tbl_quant(Word16 val, Word16 *q_tbl, Word16 q_tbl_size); + +#endif diff --git a/imbe_vocoder/rand_gen.cpp b/imbe_vocoder/rand_gen.cpp new file mode 100644 index 0000000..b818d64 --- /dev/null +++ b/imbe_vocoder/rand_gen.cpp @@ -0,0 +1,61 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + + +#include "typedef.h" +#include "basic_op.h" + +static UWord32 seed = 1; + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Generate pseudo-random numbers in range -1...1 +// +// +// INPUT: +// None +// +// OUTPUT: +// None +// +// RETURN: +// Pseudo-random number in signed Q1.16 format +// +//----------------------------------------------------------------------------- +Word16 rand_gen(void) +{ + UWord32 hi, lo; + + lo = 16807 * (seed & 0xFFFF); + hi = 16807 * (seed >> 16); + + lo += (Word32)(hi & 0x7FFF) << 16; + lo += (hi >> 15); + + if(lo > 0x7FFFFFFF) + lo -= 0x7FFFFFFF; + + seed = lo; + + return (Word16)lo; +} diff --git a/imbe_vocoder/rand_gen.h b/imbe_vocoder/rand_gen.h new file mode 100644 index 0000000..f67d15e --- /dev/null +++ b/imbe_vocoder/rand_gen.h @@ -0,0 +1,44 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _RAND_GEN +#define _RAND_GEN + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Generate pseudo-random numbers in range -1...1 +// +// +// INPUT: +// None +// +// OUTPUT: +// None +// +// RETURN: +// Pseudo-random number in signed Q1.16 format +// +//----------------------------------------------------------------------------- +Word16 rand_gen(void); + +#endif diff --git a/imbe_vocoder/sa_decode.cpp b/imbe_vocoder/sa_decode.cpp new file mode 100644 index 0000000..5b3ed0d --- /dev/null +++ b/imbe_vocoder/sa_decode.cpp @@ -0,0 +1,200 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + + +#include "typedef.h" +#include "globals.h" +#include "basic_op.h" +#include "imbe.h" +#include "tbls.h" +#include "qnt_sub.h" +#include "sa_decode.h" +#include "aux_sub.h" +#include "dsp_sub.h" +#include "math_sub.h" +#include "encode.h" +#include "imbe_vocoder.h" + + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Initialization of Spectral Amplitude Decoder +// +// +// INPUT: +// None +// +// OUTPUT: +// None +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +void imbe_vocoder::sa_decode_init(void) +{ + num_harms_prev1 = 30; + v_zap((Word16 *)sa_prev1, 2 * (NUM_HARMS_MAX + 2)); +} + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform Spectral Amplitude Decoding +// +// +// INPUT: +// IMBE_PARAM *imbe_param - pointer to IMBE_PARAM structure with +// valid num_harms and b_vec items +// +// OUTPUT: +// None +// +// RETURN: +// Decoded Spectral Amplitudes +// +//----------------------------------------------------------------------------- +void imbe_vocoder::sa_decode(IMBE_PARAM *imbe_param) +{ + Word16 gain_vec[6], gain_r[6]; + UWord16 index, index_1, num_harms; + Word16 *gss_ptr, *ba_ptr, i, j, *t_vec_ptr, *b_vec_ptr; + Word16 t_vec[NUM_HARMS_MAX], c_vec[MAX_BLOCK_LEN]; + UWord32 lmprbl_item; + Word16 bl_len, step_size, num_bits, tmp, ro_coef, si_coef, tmp1; + UWord32 k_coef, k_acc; + Word32 sum, tmp_word32, sa_tmp[NUM_HARMS_MAX]; + Word16 *sa; + + num_harms = imbe_param->num_harms; + index = num_harms - NUM_HARMS_MIN; + ba_ptr = imbe_param->bit_alloc; + b_vec_ptr = &imbe_param->b_vec[2]; + sa = imbe_param->sa; + + // Decoding the Gain Vector. gain_vec has signed Q5.11 format + gss_ptr = (Word16 *)&gain_step_size_tbl[index * 5]; + gain_vec[0] = gain_qnt_tbl[*b_vec_ptr++]; + + for(i = 1; i < 6; i++) + gain_vec[i] = extract_l(L_shr(deqnt_by_step(*b_vec_ptr++, *gss_ptr++, *ba_ptr++), 5)); + idct(gain_vec, NUM_PRED_RES_BLKS, NUM_PRED_RES_BLKS, gain_r); + + lmprbl_item = lmprbl_tbl[index]; + v_zap(t_vec, NUM_HARMS_MAX); + + // Decoding the Higher Order DCT Coefficients + t_vec_ptr = t_vec; + for(i = 0; i < NUM_PRED_RES_BLKS; i++) + { + bl_len = (lmprbl_item >> 28) & 0xF; lmprbl_item <<= 4; + v_zap(c_vec, MAX_BLOCK_LEN); + c_vec[0] = gain_r[i]; + for(j = 1; j < bl_len; j++) + { + num_bits = *ba_ptr++; + if(num_bits) + { + step_size = extract_h(((Word32)hi_ord_std_tbl[j - 1] * hi_ord_step_size_tbl[num_bits - 1]) << 1); + c_vec[j] = extract_l(L_shr(deqnt_by_step(*b_vec_ptr, step_size, num_bits), 5)); + } + else + c_vec[j] = 0; + + b_vec_ptr++; + } + idct(c_vec, bl_len, bl_len, t_vec_ptr); + t_vec_ptr += bl_len; + } + + // Calculate num_harms_prev/num_harms. Result save in unsigned format Q8.24 + if(num_harms == num_harms_prev1) + k_coef = (Word32)CNST_ONE_Q8_24; + else if(num_harms > num_harms_prev1) + k_coef = (Word32)div_s(num_harms_prev1 << 9, num_harms << 9) << 9; + else + { + // imbe_param->num_harms < num_harms_prev1 + k_coef = 0; + tmp = num_harms_prev1; + while(tmp > num_harms) + { + tmp -= num_harms; + k_coef += (Word32)CNST_ONE_Q8_24; + } + k_coef += (Word32)div_s(tmp << 9, num_harms << 9) << 9; + } + + if(num_harms <= 15) + ro_coef = CNST_0_4_Q1_15; + else if(num_harms <= 24) + ro_coef = num_harms * CNST_0_03_Q1_15 - CNST_0_05_Q1_15; + else + ro_coef = CNST_0_7_Q1_15; + + k_acc = k_coef; + sum = 0; + + for(i = num_harms_prev1 + 1; i < NUM_HARMS_MAX + 2; i++) + sa_prev1[i] = sa_prev1[num_harms_prev1]; + + for(i = 0; i < num_harms; i++) + { + index = (UWord16)(k_acc >> 24); // Get integer part + si_coef = (Word16)((k_acc - ((UWord32)index << 24)) >> 9); // Get fractional part + + if(si_coef == 0) + { + tmp_word32 = L_mpy_ls(sa_prev1[index], ro_coef); // sa_prev1 here is in Q10.22 format + sa_tmp[i] = L_add(L_shr(L_deposit_h(t_vec[i]), 5), tmp_word32); // Convert t_vec to Q10.22 and add ... + sum = L_add(sum, sa_prev1[index]); // sum in Q10.22 format + } + else + { + index_1 = index + 1; + tmp_word32 = L_mpy_ls(sa_prev1[index], sub(0x7FFF, si_coef)); + sum = L_add(sum, tmp_word32); + sa_tmp[i] = L_add(L_shr(L_deposit_h(t_vec[i]), 5), L_mpy_ls(tmp_word32, ro_coef)); + + tmp_word32 = L_mpy_ls(sa_prev1[index_1], si_coef); + sum = L_add(sum, tmp_word32); + sa_tmp[i] = L_add(sa_tmp[i], L_mpy_ls(tmp_word32, ro_coef)); + } + + k_acc += k_coef; + } + + imbe_param->div_one_by_num_harm_sh = tmp = norm_s(num_harms); + imbe_param->div_one_by_num_harm = tmp1 = div_s(0x4000, num_harms << tmp); // calculate 1/num_harms with scaling for better pricision + // save result to use late + + sum = L_shr(L_mpy_ls(L_mpy_ls(sum, ro_coef), tmp1), (14 - tmp)); + + for(i = 1; i <= num_harms; i++) + { + sa_prev1[i] = L_sub(sa_tmp[i - 1], sum); + sa[i - 1] = Pow2(sa_prev1[i]); + } + + num_harms_prev1 = num_harms; +} diff --git a/imbe_vocoder/sa_decode.h b/imbe_vocoder/sa_decode.h new file mode 100644 index 0000000..88d1e33 --- /dev/null +++ b/imbe_vocoder/sa_decode.h @@ -0,0 +1,64 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _SA_DECODE +#define _SA_DECODE + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Initialization of Spectral Amplitude Decoder +// +// +// INPUT: +// None +// +// OUTPUT: +// None +// +// RETURN: +// None +// +//----------------------------------------------------------------------------- +#if 0 +void sa_decode_init(void); + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform Spectral Amplitude Decoding +// +// +// INPUT: +// IMBE_PARAM *imbe_param - pointer to IMBE_PARAM structure with +// valid num_harms and b_vec items +// +// OUTPUT: +// None +// +// RETURN: +// Decoded Spectral Amplitudes +// +//----------------------------------------------------------------------------- +void sa_decode(IMBE_PARAM *imbe_param); +#endif + +#endif diff --git a/imbe_vocoder/sa_encode.cpp b/imbe_vocoder/sa_encode.cpp new file mode 100644 index 0000000..d442caf --- /dev/null +++ b/imbe_vocoder/sa_encode.cpp @@ -0,0 +1,296 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "globals.h" +#include "basic_op.h" +#include "imbe.h" +#include "tbls.h" +#include "qnt_sub.h" +#include "sa_encode.h" +#include "aux_sub.h" +#include "dsp_sub.h" +#include "math_sub.h" + +#include +#include +#include "encode.h" +#include "imbe_vocoder.h" + + +void imbe_vocoder::sa_encode_init(void) +{ + Word16 i; + num_harms_prev2 = 30; + for(i = 0; i < NUM_HARMS_MAX + 2; i++) + sa_prev2[i] = 0; +} + +void imbe_vocoder::sa_encode(IMBE_PARAM *imbe_param) +{ + Word16 gain_vec[6], gain_r[6]; + UWord16 index, i, j, num_harms; + Word16 *ba_ptr, *t_vec_ptr, *b_vec_ptr, *gss_ptr, *sa_ptr; + Word16 t_vec[NUM_HARMS_MAX], c_vec[MAX_BLOCK_LEN]; + UWord32 lmprbl_item; + Word16 bl_len, step_size, num_bits, tmp, ro_coef, si_coef, tmp1; + UWord32 k_coef, k_acc; + Word32 sum, tmp_word32, vec32_tmp[NUM_HARMS_MAX], *vec32_ptr; + + num_harms = imbe_param->num_harms; + + // Calculate num_harms_prev2/num_harms. Result save in unsigned format Q8.24 + if(num_harms == num_harms_prev2) + k_coef = (Word32)CNST_ONE_Q8_24; + else if(num_harms > num_harms_prev2) + k_coef = (Word32)div_s(num_harms_prev2 << 9, num_harms << 9) << 9; + else + { + // imbe_param->num_harms < num_harms_prev2 + k_coef = 0; + tmp = num_harms_prev2; + while(tmp > num_harms) + { + tmp -= num_harms; + k_coef += (Word32)CNST_ONE_Q8_24; + } + k_coef += (Word32)div_s(tmp << 9, num_harms << 9) << 9; + } + + // Calculate prediction coefficient + if(num_harms <= 15) + ro_coef = CNST_0_4_Q1_15; + else if(num_harms <= 24) + ro_coef = num_harms * CNST_0_03_Q1_15 - CNST_0_05_Q1_15; + else + ro_coef = CNST_0_7_Q1_15; + + for(i = num_harms_prev2 + 1; i < NUM_HARMS_MAX + 2; i++) + sa_prev2[i] = sa_prev2[num_harms_prev2]; + + k_acc = k_coef; + sum = 0; + sa_ptr = imbe_param->sa; + vec32_ptr = vec32_tmp; + for(i = 0; i < num_harms; i++) + { + index = (UWord16)(k_acc >> 24); // Get integer part + si_coef = (Word16)((k_acc - ((UWord32)index << 24)) >> 9); // Get fractional part + + + if(si_coef == 0) + { + tmp_word32 = L_mpy_ls(sa_prev2[index], ro_coef); // sa_prev2 here is in Q10.22 format + *vec32_ptr++ = L_sub(Log2(*sa_ptr++), tmp_word32); + sum = L_add(sum, sa_prev2[index]); // sum in Q10.22 format + } + else + { + tmp_word32 = L_mpy_ls(sa_prev2[index], sub(0x7FFF, si_coef)); + sum = L_add(sum, tmp_word32); + *vec32_ptr = L_sub(Log2(*sa_ptr++), L_mpy_ls(tmp_word32, ro_coef)); + + tmp_word32 = L_mpy_ls(sa_prev2[index + 1], si_coef); + sum = L_add(sum, tmp_word32); + *vec32_ptr = L_sub(*vec32_ptr, L_mpy_ls(tmp_word32, ro_coef)); + + vec32_ptr++; + } + + k_acc += k_coef; + } + + imbe_param->div_one_by_num_harm_sh = tmp = norm_s(num_harms); + imbe_param->div_one_by_num_harm = tmp1 = div_s(0x4000, num_harms << tmp); // calculate 1/num_harms with scaling for better pricision + // save result to use late + sum = L_shr(L_mpy_ls(L_mpy_ls(sum, ro_coef), tmp1), (14 - tmp)); + + for(i = 0; i < num_harms; i++) + t_vec[i] = extract_h(L_shl(L_add(vec32_tmp[i], sum), 5)); // t_vec has Q5.11 format + ////////////////////////////////////////////// + // + // Encode T vector + // + ////////////////////////////////////////////// + index = num_harms - NUM_HARMS_MIN; + + // Unpack bit allocation table's item + get_bit_allocation(num_harms, imbe_param->bit_alloc); + lmprbl_item = lmprbl_tbl[index]; + + // Encoding the Higher Order DCT Coefficients + t_vec_ptr = t_vec; + b_vec_ptr = &imbe_param->b_vec[8]; + ba_ptr = &imbe_param->bit_alloc[5]; + for(i = 0; i < NUM_PRED_RES_BLKS; i++) + { + bl_len = (lmprbl_item >> 28) & 0xF; lmprbl_item <<= 4; + + dct(t_vec_ptr, bl_len, bl_len, c_vec); + gain_vec[i] = c_vec[0]; +/* + for(j = 0; j < bl_len; j++) + printf("%g ", (double)t_vec_ptr[j]/2048.); + printf("\n"); + for(j = 0; j < bl_len; j++) + printf("%g ", (double)c_vec[j]/2048.); + printf("\n"); + printf("\n"); +*/ + for(j = 1; j < bl_len; j++) + { + num_bits = *ba_ptr++; + if(num_bits) + { + step_size = extract_h(((Word32)hi_ord_std_tbl[j - 1] * hi_ord_step_size_tbl[num_bits - 1]) << 1); + *b_vec_ptr = qnt_by_step(c_vec[j], step_size, num_bits); + } + else + *b_vec_ptr = 0; + + b_vec_ptr++; + } + t_vec_ptr += bl_len; + } + + // Encoding the Gain Vector + dct(gain_vec, NUM_PRED_RES_BLKS, NUM_PRED_RES_BLKS, gain_r); + + b_vec_ptr = &imbe_param->b_vec[2]; + ba_ptr = &imbe_param->bit_alloc[0]; + gss_ptr = (Word16 *)&gain_step_size_tbl[index * 5]; + + *b_vec_ptr++ = tbl_quant(gain_r[0], (Word16 *)&gain_qnt_tbl[0], GAIN_QNT_TBL_SIZE); + for(j = 1; j < 6; j++) + *b_vec_ptr++ = qnt_by_step(gain_r[j], *gss_ptr++, *ba_ptr++); + +/* + for(j = 0; j < NUM_PRED_RES_BLKS; j++) + printf("%g ", (double)gain_vec[j]/2048.); + printf("\n"); + for(j = 0; j < NUM_PRED_RES_BLKS; j++) + printf("%g ", (double)gain_r[j]/2048.); + printf("\n"); + printf("\n"); +*/ + + + + ////////////////////////////////////////////// + // + // Decode T vector + // + ////////////////////////////////////////////// + ba_ptr = imbe_param->bit_alloc; + b_vec_ptr = &imbe_param->b_vec[2]; + + // Decoding the Gain Vector. gain_vec has signed Q5.11 format + gss_ptr = (Word16 *)&gain_step_size_tbl[index * 5]; + gain_vec[0] = gain_qnt_tbl[*b_vec_ptr++]; + + for(i = 1; i < 6; i++) + gain_vec[i] = extract_l(L_shr(deqnt_by_step(*b_vec_ptr++, *gss_ptr++, *ba_ptr++), 5)); +/* + printf("gain deqnt\n"); + for(j = 0; j < 6; j++) + printf("%g ", (double)gain_vec[j]/2048.); + printf("\n"); +*/ + idct(gain_vec, NUM_PRED_RES_BLKS, NUM_PRED_RES_BLKS, gain_r); + + v_zap(t_vec, NUM_HARMS_MAX); + lmprbl_item = lmprbl_tbl[index]; + + // Decoding the Higher Order DCT Coefficients + t_vec_ptr = t_vec; + for(i = 0; i < NUM_PRED_RES_BLKS; i++) + { + bl_len = (lmprbl_item >> 28) & 0xF; lmprbl_item <<= 4; + v_zap(c_vec, MAX_BLOCK_LEN); + c_vec[0] = gain_r[i]; + for(j = 1; j < bl_len; j++) + { + num_bits = *ba_ptr++; + if(num_bits) + { + step_size = extract_h(((Word32)hi_ord_std_tbl[j - 1] * hi_ord_step_size_tbl[num_bits - 1]) << 1); + c_vec[j] = extract_l(L_shr(deqnt_by_step(*b_vec_ptr, step_size, num_bits), 5)); + } + else + c_vec[j] = 0; + + b_vec_ptr++; + } +/* + printf("\n"); + for(j = 0; j < bl_len; j++) + printf("%g ", (double)c_vec[j]/2048.); + printf("\n"); +*/ + idct(c_vec, bl_len, bl_len, t_vec_ptr); + t_vec_ptr += bl_len; + } +/* + printf("\n====t_vec_rec ===\n"); + for(j = 0; j < num_harms; j++) + printf("%g ", (double)t_vec[j]/2048.); + printf("\n"); +*/ + ////////////////////////////////////////////// + // + // Reconstruct Spectral Amplitudes + // + ////////////////////////////////////////////// + k_acc = k_coef; + vec32_ptr = vec32_tmp; + + for(i = num_harms_prev2 + 1; i < NUM_HARMS_MAX + 2; i++) + sa_prev2[i] = sa_prev2[num_harms_prev2]; + + for(i = 0; i < num_harms; i++) + { + index = (UWord16)(k_acc >> 24); // Get integer part + si_coef = (Word16)((k_acc - ((UWord32)index << 24)) >> 9); // Get fractional part + + if(si_coef == 0) + { + tmp_word32 = L_mpy_ls(sa_prev2[index], ro_coef); // sa_prev2 here is in Q10.22 format + *vec32_ptr++ = L_add(L_shr(L_deposit_h(t_vec[i]), 5), tmp_word32); // Convert t_vec to Q10.22 and add ... + } + else + { + tmp_word32 = L_mpy_ls(sa_prev2[index], sub(0x7FFF, si_coef)); + *vec32_ptr = L_add(L_shr(L_deposit_h(t_vec[i]), 5), L_mpy_ls(tmp_word32, ro_coef)); + + tmp_word32 = L_mpy_ls(sa_prev2[index + 1], si_coef); + *vec32_ptr = L_add(*vec32_ptr, L_mpy_ls(tmp_word32, ro_coef)); + + vec32_ptr++; + } + + k_acc += k_coef; + } + + for(i = 1; i <= num_harms; i++) + sa_prev2[i] = L_sub(vec32_tmp[i - 1], sum); + + num_harms_prev2 = num_harms; +} diff --git a/imbe_vocoder/sa_encode.h b/imbe_vocoder/sa_encode.h new file mode 100644 index 0000000..06e4145 --- /dev/null +++ b/imbe_vocoder/sa_encode.h @@ -0,0 +1,30 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _SA_ENCODE +#define _SA_ENCODE + + +void sa_encode_init(void); +void sa_encode(IMBE_PARAM *imbe_param); + +#endif diff --git a/imbe_vocoder/sa_enh.cpp b/imbe_vocoder/sa_enh.cpp new file mode 100644 index 0000000..c6586eb --- /dev/null +++ b/imbe_vocoder/sa_enh.cpp @@ -0,0 +1,202 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "basic_op.h" +#include "imbe.h" +#include "qnt_sub.h" +#include "aux_sub.h" +#include "math_sub.h" +#include "sa_enh.h" + + + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform Spectral Amplitude Enhancement +// +// +// INPUT: +// IMBE_PARAM *imbe_param - pointer to IMBE_PARAM structure with +// valid num_harms, sa and fund_freq items +// +// OUTPUT: +// None +// +// RETURN: +// Enhanced Spectral Amplitudes +// +//----------------------------------------------------------------------------- +void sa_enh(IMBE_PARAM *imbe_param) +{ + Word16 *sa, num_harm, sa_tmp[NUM_HARMS_MAX], nm; + Word16 cos_w[NUM_HARMS_MAX], i, tmp; + Word32 L_tmp, Rm0, Rm1; + Word32 w0, cos_acc; + Word32 L_den, L_num, L_Rm0_2, L_Rm1_2, L_sum_Rm02_Rm12, L_sum_mod; + Word16 Rm0Rm1, nm1, nm2, tot_nm; + Word16 Rm0_s, Rm1_s; + + + sa = imbe_param->sa; + num_harm = imbe_param->num_harms; + + v_equ(sa_tmp, sa, num_harm); + + Rm0 = L_v_magsq(sa, num_harm); + + if(Rm0 == 0) + return; + + nm = norm_l (Rm0); + if(Rm0 == MAX_32) + { + nm = 1; + v_equ_shr(sa_tmp, sa, nm, num_harm); + Rm0 = L_v_magsq(sa_tmp, num_harm); + } + else + { + if(nm > 2) + { + nm = -(nm >> 1); + v_equ_shr(sa_tmp, sa, nm, num_harm); + Rm0 = L_v_magsq(sa_tmp, num_harm); + } + } + + w0 = imbe_param->fund_freq; + + cos_acc = 0; Rm1 = 0; + for(i = 0; i < num_harm; i++) + { + cos_acc = L_add(cos_acc, w0); + + cos_w[i] = cos_fxp(extract_h(cos_acc)); + Rm1 = L_add(Rm1, L_mpy_ls(L_mult(sa_tmp[i], sa_tmp[i]), cos_w[i])); + } + + Rm0_s = extract_h(Rm0); + Rm1_s = extract_h(Rm1); + + L_Rm0_2 = L_mult(Rm0_s, Rm0_s); + L_Rm1_2 = L_mult(Rm1_s, Rm1_s); + L_den = L_sub(L_Rm0_2, L_Rm1_2); + L_den = L_mult(extract_h(L_den), Rm0_s); + nm1 = norm_l(L_den); + L_den = L_shl(L_den, nm1); + + nm2 = norm_l(w0); + L_den = L_mpy_ls(L_den, extract_h(L_shl(w0, nm2))); // Calculate w0 * Rm0 * (Rm0^2 - Rm1^2) + nm1 += nm2; // total denominator shift + + if (L_den < 1) return; // fix bug infinite loop due to invalid input + + L_sum_Rm02_Rm12 = L_add(L_shr(L_Rm0_2, 2), L_shr(L_Rm1_2, 2)); + Rm0Rm1 = shr(mult_r(Rm0_s, Rm1_s), 1); + + for(i = 0; i < num_harm; i++) + { + if((((i + 1) << 3) > num_harm) && (sa_tmp[i] != 0x0000)) + { + L_num = L_sub(L_sum_Rm02_Rm12, L_mult(Rm0Rm1, cos_w[i])); + tot_nm = norm_l(L_num); + L_num = L_shl(L_num, tot_nm); + while(L_num >= L_den) + { + L_num = L_shr(L_num, 1); + tot_nm -= 1; + } + + tmp = div_s(extract_h(L_num), extract_h(L_den)); + tot_nm -= nm1; + + L_tmp = L_mult(sa_tmp[i], sa_tmp[i]); + nm2 = norm_l(L_tmp); + L_tmp = L_shl(L_tmp, nm2); + L_tmp = L_mult(extract_h(L_tmp), tmp); + tot_nm += nm2; + tot_nm -= 2; + + if(tot_nm <= 0) + { + L_tmp = L_shr(L_tmp, add(8, tot_nm)); + L_tmp = sqrt_l_exp(L_tmp, &tot_nm); + L_tmp = L_shr(L_tmp, tot_nm); + L_tmp = sqrt_l_exp(L_tmp, &tot_nm); + L_tmp = L_shr(L_tmp, tot_nm); + L_tmp = L_mult(extract_h(L_tmp), CNST_0_9898_Q1_15); + tmp = extract_h(L_shl(L_tmp, 1)); + } + else + { + if(tot_nm <= 8) + { + L_tmp = L_shr(L_tmp, tot_nm); + L_tmp = sqrt_l_exp(L_tmp, &tot_nm); + L_tmp = L_shr(L_tmp, tot_nm); + L_tmp = sqrt_l_exp(L_tmp, &tot_nm); + L_tmp = L_shr(L_tmp, tot_nm + 1); + tmp = mult(extract_h(L_tmp), CNST_0_9898_Q1_15); + } + else + { + nm1 = tot_nm & 0xFFFE; + L_tmp = L_shr(L_tmp, tot_nm - nm1); + L_tmp = sqrt_l_exp(L_tmp, &tot_nm); + L_tmp = L_shr(L_tmp, tot_nm); + tot_nm = nm1 >> 1; + + nm1 = tot_nm & 0xFFFE; + L_tmp = L_shr(L_tmp, tot_nm - nm1); + L_tmp = sqrt_l_exp(L_tmp, &tot_nm); + L_tmp = L_shr(L_tmp, tot_nm); + L_tmp = L_mult(extract_h(L_tmp), CNST_0_9898_Q1_15); + tot_nm = nm1 >> 1; + tmp = extract_h(L_shr(L_tmp, tot_nm + 1)); + } + } + + if(tmp > CNST_1_2_Q2_14) + sa[i] = extract_h(L_shl(L_mult(sa[i], CNST_1_2_Q2_14), 1)); + else if(tmp < CNST_0_5_Q2_14) + sa[i] = shr(sa[i], 1); + else + sa[i] = extract_h(L_shl(L_mult(sa[i], tmp), 1)); + } + } + + // Compute the correct scale factor + v_equ_shr(sa_tmp, sa, nm, num_harm); + L_sum_mod = L_v_magsq(sa_tmp, num_harm); + if(L_sum_mod > Rm0) + { + tmp = div_s(extract_h(Rm0), extract_h(L_sum_mod)); + L_tmp = sqrt_l_exp(L_deposit_h(tmp), &tot_nm); + tmp = shr(extract_h(L_tmp), tot_nm); + for(i = 0; i < num_harm; i++) + sa[i] = mult_r(sa[i], tmp); + } +} + + + diff --git a/imbe_vocoder/sa_enh.h b/imbe_vocoder/sa_enh.h new file mode 100644 index 0000000..6b3f277 --- /dev/null +++ b/imbe_vocoder/sa_enh.h @@ -0,0 +1,50 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _SA_ENH +#define _SA_ENH + +#define CNST_0_9898_Q1_15 0x7EB3 +#define CNST_0_5_Q2_14 0x2000 +#define CNST_1_2_Q2_14 0x4CCC + + +//----------------------------------------------------------------------------- +// PURPOSE: +// Perform Spectral Amplitude Enhancement +// +// +// INPUT: +// IMBE_PARAM *imbe_param - pointer to IMBE_PARAM structure with +// valid num_harms, sa and fund_freq items +// +// OUTPUT: +// None +// +// RETURN: +// Enhanced Spectral Amplitudes +// +//----------------------------------------------------------------------------- +void sa_enh(IMBE_PARAM *imbe_param); + + +#endif diff --git a/imbe_vocoder/tbls.cpp b/imbe_vocoder/tbls.cpp new file mode 100644 index 0000000..1819c8f --- /dev/null +++ b/imbe_vocoder/tbls.cpp @@ -0,0 +1,368 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ +#include "typedef.h" +#include "tbls.h" + + +//----------------------------------------------------------------------------- +// +// Bit allocation and ancillary tables +// +//----------------------------------------------------------------------------- +const UWord16 bit_allocation_tbl[] = +{ + 0xA999, 0x9987, + 0x9988, 0x8976, 0x5000, + 0x8887, 0x7976, 0x5400, + 0x8777, 0x7876, 0x5430, + 0x7776, 0x6776, 0x5433, + 0x7666, 0x6775, 0x4434, 0x3000, + 0x7666, 0x5675, 0x4433, 0x3300, + 0x6665, 0x5665, 0x4433, 0x3320, + 0x6655, 0x5555, 0x4443, 0x3232, + 0x6555, 0x5545, 0x5433, 0x3322, 0x2000, + 0x6554, 0x4545, 0x4433, 0x3323, 0x2100, + 0x6554, 0x4545, 0x4433, 0x2321, 0x3210, + 0x5554, 0x4445, 0x4433, 0x2232, 0x1321, + 0x5544, 0x4444, 0x4432, 0x3223, 0x2122, 0x1000, + 0x5444, 0x4434, 0x4343, 0x2322, 0x2212, 0x2100, + 0x5444, 0x4433, 0x4333, 0x3232, 0x1221, 0x2210, + 0x5444, 0x3433, 0x4333, 0x3232, 0x1221, 0x2111, + 0x5443, 0x3433, 0x4333, 0x2232, 0x1221, 0x1221, 0x1000, + 0x5443, 0x3432, 0x4323, 0x2232, 0x2122, 0x1122, 0x1100, + 0x4443, 0x3432, 0x4323, 0x2223, 0x2112, 0x2112, 0x1110, + 0x4443, 0x3332, 0x4322, 0x3222, 0x3211, 0x2111, 0x2111, + 0x4443, 0x3332, 0x2332, 0x2322, 0x1321, 0x1211, 0x1211, 0x1000, + 0x4433, 0x3332, 0x2332, 0x2322, 0x1221, 0x1211, 0x1211, 0x1100, + 0x4433, 0x3332, 0x2332, 0x2322, 0x1221, 0x1211, 0x1121, 0x1100, + 0x4333, 0x3332, 0x2332, 0x2321, 0x1221, 0x1121, 0x1112, 0x1111, + 0x4333, 0x3322, 0x2322, 0x2322, 0x1122, 0x1112, 0x1111, 0x2111, 0x0000, + 0x4333, 0x3322, 0x2322, 0x2232, 0x1112, 0x2111, 0x2111, 0x0211, 0x1000, + 0x4333, 0x3322, 0x2132, 0x2213, 0x2111, 0x2211, 0x1211, 0x1021, 0x1100, + 0x4333, 0x2322, 0x2132, 0x2223, 0x2111, 0x2111, 0x1211, 0x1021, 0x1110, + 0x4333, 0x2322, 0x2132, 0x2213, 0x2111, 0x2111, 0x1211, 0x1102, 0x1111, 0x0000, + 0x4333, 0x2322, 0x2132, 0x2213, 0x2111, 0x2211, 0x1021, 0x1110, 0x2111, 0x0000, + 0x4333, 0x2322, 0x2132, 0x2113, 0x2111, 0x1221, 0x1102, 0x1111, 0x0211, 0x1000, + 0x4332, 0x2322, 0x1132, 0x2211, 0x3211, 0x1122, 0x1110, 0x2111, 0x1021, 0x1100, + 0x4332, 0x2322, 0x2113, 0x2221, 0x1221, 0x1112, 0x2111, 0x0211, 0x1002, 0x1110, 0x0000, + 0x4332, 0x2322, 0x2113, 0x2221, 0x1221, 0x1112, 0x1111, 0x0211, 0x1002, 0x1111, 0x0000, + 0x4332, 0x2322, 0x1113, 0x2221, 0x1221, 0x1112, 0x1111, 0x0211, 0x1100, 0x2111, 0x1000, + 0x4332, 0x2322, 0x1113, 0x2211, 0x1221, 0x1112, 0x2111, 0x0021, 0x1110, 0x0211, 0x1100, + 0x3332, 0x2322, 0x1113, 0x2211, 0x1221, 0x1111, 0x2211, 0x1002, 0x1111, 0x0021, 0x1110, 0x0000, + 0x3332, 0x2322, 0x1113, 0x2211, 0x1122, 0x1111, 0x1221, 0x1100, 0x2111, 0x1002, 0x1110, 0x0000, + 0x3332, 0x2322, 0x1111, 0x3221, 0x1112, 0x2111, 0x1122, 0x1110, 0x0211, 0x1000, 0x2111, 0x0000, + 0x3332, 0x2322, 0x1111, 0x3221, 0x1112, 0x2111, 0x1022, 0x1110, 0x0211, 0x1000, 0x2111, 0x1000, + 0x3332, 0x2322, 0x1111, 0x3221, 0x1112, 0x2111, 0x1022, 0x1110, 0x0211, 0x1100, 0x0211, 0x1000, 0x0000, + 0x3332, 0x2322, 0x1111, 0x3211, 0x1112, 0x2111, 0x1022, 0x1110, 0x0021, 0x1110, 0x0021, 0x1110, 0x0000, + 0x3322, 0x2321, 0x1111, 0x3221, 0x1112, 0x2111, 0x1102, 0x2111, 0x0002, 0x1111, 0x0002, 0x1111, 0x0000, + 0x3322, 0x2321, 0x1111, 0x3221, 0x1111, 0x2211, 0x1110, 0x2211, 0x1000, 0x2111, 0x1000, 0x2111, 0x0000, + 0x3322, 0x2322, 0x1111, 0x0322, 0x1111, 0x0221, 0x1111, 0x0221, 0x1100, 0x0211, 0x1100, 0x0211, 0x1000, 0x0000, + 0x3322, 0x2322, 0x1111, 0x0322, 0x1111, 0x0221, 0x1111, 0x0221, 0x1100, 0x0211, 0x1000, 0x0211, 0x1100, 0x0000, + 0x3322, 0x2322, 0x1111, 0x0322, 0x1111, 0x0221, 0x1111, 0x0221, 0x1100, 0x0211, 0x1100, 0x0021, 0x1100, 0x0000 +}; + +const UWord16 bit_allocation_offset_tbl[] = +{ + 0x0002, 0x000E, 0x001E, 0x0032, 0x004A, 0x0066, 0x0086, 0x00AA, 0x00D2, 0x00FE, 0x012E, 0x0162 +}; + +//----------------------------------------------------------------------------- +// +// Log Magnitude Prediction Residual Block Length +// +//----------------------------------------------------------------------------- +const UWord32 lmprbl_tbl[] = +{ + 0x11122200, + 0x11222200, + 0x12222200, + 0x22222200, + 0x22222300, + 0x22223300, + 0x22233300, + 0x22333300, + 0x23333300, + 0x33333300, + 0x33333400, + 0x33334400, + 0x33344400, + 0x33444400, + 0x34444400, + 0x44444400, + 0x44444500, + 0x44445500, + 0x44455500, + 0x44555500, + 0x45555500, + 0x55555500, + 0x55555600, + 0x55556600, + 0x55566600, + 0x55666600, + 0x56666600, + 0x66666600, + 0x66666700, + 0x66667700, + 0x66677700, + 0x66777700, + 0x67777700, + 0x77777700, + 0x77777800, + 0x77778800, + 0x77788800, + 0x77888800, + 0x78888800, + 0x88888800, + 0x88888900, + 0x88889900, + 0x88899900, + 0x88999900, + 0x89999900, + 0x99999900, + 0x99999A00, + 0x9999AA00 +}; + + + +//----------------------------------------------------------------------------- +// +// Gain Quantizer Levels in signed Q5.11 format +// +//----------------------------------------------------------------------------- +const Word16 gain_qnt_tbl[] = +{ + -5821, -5518, -5239, -4880, -4549, -4292, -4057, -3760, -3370, -2903, + -2583, -2305, -1962, -1601, -1138, -711, -302, 57, 433, 795, + 1132, 1510, 1909, 2333, 2705, 3038, 3376, 3689, 3979, 4339, + 4754, 5129, 5435, 5695, 5991, 6300, 6596, 6969, 7342, 7751, + 8101, 8511, 8835, 9102, 9375, 9698, 10055, 10415, 10762, 11084, + 11403, 11752, 12123, 12468, 12863, 13239, 13615, 13997, 14382, 14770, + 15301, 15849, 16640, 17809 +}; + + +//----------------------------------------------------------------------------- +// +// Gain Ste Size in unsigned Q0.16 format +// +//----------------------------------------------------------------------------- +const UWord16 gain_step_size_tbl[] = +{ + 203, 263, 220, 190, 173, + 406, 263, 440, 380, 346, + 813, 527, 440, 760, 692, + 813, 1054, 881, 760, 692, + 1625, 1054, 881, 1425, 1298, + 1625, 1976, 1652, 1425, 1298, + 1625, 1976, 1652, 1425, 2422, + 3047, 1976, 1652, 2661, 2422, + 3047, 1976, 3083, 2661, 2422, + 3047, 3688, 3083, 2661, 2422, + 3047, 3688, 3083, 3801, 3460, + 3047, 3688, 3083, 3801, 3460, + 5689, 3688, 3083, 3801, 3460, + 5689, 3688, 4404, 3801, 3460, + 5689, 5269, 4404, 3801, 3460, + 5689, 5269, 4404, 3801, 3460, + 5689, 5269, 4404, 3801, 5623, + 5689, 5269, 4404, 6177, 5623, + 5689, 5269, 4404, 6177, 5623, + 8126, 5269, 4404, 6177, 5623, + 8126, 5269, 4404, 6177, 5623, + 8126, 5269, 4404, 6177, 5623, + 8126, 5269, 7157, 6177, 5623, + 8126, 5269, 7157, 6177, 5623, + 8126, 8562, 7157, 6177, 5623, + 8126, 8562, 7157, 6177, 5623, + 8126, 8562, 7157, 6177, 5623, + 8126, 8562, 7157, 6177, 5623, + 8126, 8562, 7157, 6177, 7353, + 8126, 8562, 7157, 6177, 7353, + 8126, 8562, 7157, 6177, 7353, + 8126, 8562, 7157, 6177, 7353, + 8126, 8562, 7157, 8077, 7353, + 8126, 8562, 7157, 8077, 7353, + 8126, 8562, 7157, 8077, 7353, + 8126, 8562, 7157, 8077, 7353, + 8126, 8562, 7157, 8077, 7353, + 13206, 8562, 7157, 8077, 7353, + 13206, 8562, 7157, 8077, 7353, + 13206, 8562, 7157, 8077, 7353, + 13206, 8562, 7157, 8077, 7353, + 13206, 8562, 7157, 8077, 7353, + 13206, 8562, 7157, 8077, 7353, + 13206, 8562, 9359, 8077, 7353, + 13206, 8562, 9359, 8077, 7353, + 13206, 8562, 9359, 8077, 7353, + 13206, 8562, 9359, 8077, 7353, + 13206, 8562, 9359, 8077, 7353 +}; + + +//----------------------------------------------------------------------------- +// +// Standard Deviation of Higher Order DCT Coefficients in unsigned Q0.16 format +// +//----------------------------------------------------------------------------- +const UWord16 hi_ord_std_tbl[] = +{ + 20120, 15794, 13566, 12452, 11731, 11338, 10813, 11141, 11141 +}; + +//----------------------------------------------------------------------------- +// +// Quantizer Step for Higher Order DCT Coefficients in unsigned Q1.15 format +// +//----------------------------------------------------------------------------- +const UWord16 hi_ord_step_size_tbl[] = +{ + 39322, 27853, 21299, 13107, 9175, 4915, 2621, 1311, 655, 328 +}; + +//----------------------------------------------------------------------------- +// +// Speech Synthesis Window +// +//----------------------------------------------------------------------------- +const Word16 ws[49] = +{ + 655, 1310, 1966, 2621, 3276, 3932, 4587, 5242, 5898, 6553, + 7208, 7864, 8519, 9175, 9830, 10485, 11141, 11796, 12451, 13107, + 13762, 14417, 15073, 15728, 16384, 17039, 17694, 18350, 19005, 19660, + 20316, 20971, 21626, 22282, 22937, 23592, 24248, 24903, 25559, 26214, + 26869, 27525, 28180, 28835, 29491, 30146, 30801, 31457, 32112 +}; + +/* +const Word16 ws_ws[49] = +{ + + 17052, 17746, 18467, 19212, 19980, 20770, 21580, 22407, 23246, 24094, + 24945, 25793, 26631, 27453, 28248, 29008, 29724, 30385, 30983, 31507, + 31950, 32302, 32559, 32715, 32767, 32715, 32559, 32302, 31950, 31507, + 30983, 30385, 29724, 29008, 28248, 27453, 26631, 25793, 24945, 24094, + 23246, 22407, 21580, 20770, 19980, 19212, 18467, 17746, 17052 +}; +*/ + +//----------------------------------------------------------------------------- +// +// Squared Pitch Estimation Window 64*wi^2 +// +//----------------------------------------------------------------------------- +const Word16 wi[301] = +{ + 15, 18, 21, 25, 29, 34, 40, 46, 52, 59, + 67, 76, 86, 96, 108, 120, 133, 148, 164, 180, + 199, 218, 239, 261, 285, 311, 338, 367, 398, 431, + 465, 502, 541, 582, 625, 671, 719, 769, 822, 878, + 936, 997, 1061, 1128, 1198, 1271, 1347, 1426, 1508, 1594, + 1683, 1775, 1871, 1970, 2073, 2179, 2289, 2403, 2520, 2641, + 2766, 2894, 3026, 3162, 3301, 3445, 3592, 3742, 3897, 4055, + 4216, 4382, 4551, 4723, 4899, 5078, 5261, 5447, 5636, 5828, + 6023, 6221, 6423, 6626, 6833, 7042, 7253, 7467, 7683, 7900, + 8120, 8341, 8564, 8788, 9014, 9241, 9468, 9696, 9925, 10154, + 10383, 10613, 10842, 11070, 11298, 11525, 11752, 11977, 12200, 12422, + 12642, 12860, 13076, 13289, 13500, 13708, 13912, 14114, 14312, 14506, + 14696, 14882, 15064, 15242, 15414, 15582, 15745, 15903, 16055, 16202, + 16343, 16478, 16608, 16731, 16848, 16958, 17062, 17159, 17250, 17333, + 17410, 17480, 17542, 17597, 17646, 17686, 17720, 17746, 17764, 17776, + 17779, 17776, 17764, 17746, 17720, 17686, 17646, 17597, 17542, 17480, + 17410, 17333, 17250, 17159, 17062, 16958, 16848, 16731, 16608, 16478, + 16343, 16202, 16055, 15903, 15745, 15582, 15414, 15242, 15064, 14882, + 14696, 14506, 14312, 14114, 13912, 13708, 13500, 13289, 13076, 12860, + 12642, 12422, 12200, 11977, 11752, 11525, 11298, 11070, 10842, 10613, + 10383, 10154, 9925, 9696, 9468, 9241, 9014, 8788, 8564, 8341, + 8120, 7900, 7683, 7467, 7253, 7042, 6833, 6626, 6423, 6221, + 6023, 5828, 5636, 5447, 5261, 5078, 4899, 4723, 4551, 4382, + 4216, 4055, 3897, 3742, 3592, 3445, 3301, 3162, 3026, 2894, + 2766, 2641, 2520, 2403, 2289, 2179, 2073, 1970, 1871, 1775, + 1683, 1594, 1508, 1426, 1347, 1271, 1198, 1128, 1061, 997, + 936, 878, 822, 769, 719, 671, 625, 582, 541, 502, + 465, 431, 398, 367, 338, 311, 285, 261, 239, 218, + 199, 180, 164, 148, 133, 120, 108, 96, 86, 76, + 67, 59, 52, 46, 40, 34, 29, 25, 21, 18, + 15 +}; + +//----------------------------------------------------------------------------- +// +// Pitch Refinement Window +// +//----------------------------------------------------------------------------- +const Word16 wr[] = +{ + 487, 570, 658, 753, 854, 962, 1076, 1197, 1325, 1460, + 1602, 1752, 1909, 2074, 2246, 2426, 2614, 2810, 3014, 3227, + 3447, 3675, 3912, 4157, 4410, 4671, 4941, 5219, 5505, 5799, + 6101, 6411, 6729, 7054, 7388, 7728, 8077, 8432, 8795, 9164, + 9541, 9923, 10312, 10707, 11108, 11515, 11927, 12344, 12766, 13192, + 13622, 14056, 14494, 14935, 15379, 15825, 16273, 16724, 17175, 17628, + 18081, 18534, 18988, 19440, 19892, 20342, 20790, 21237, 21680, 22120, + 22557, 22990, 23419, 23842, 24261, 24673, 25080, 25480, 25874, 26259, + 26638, 27008, 27370, 27722, 28066, 28400, 28724, 29037, 29340, 29632, + 29912, 30181, 30438, 30683, 30915, 31135, 31341, 31535, 31715, 31881, + 32033, 32172, 32296, 32406, 32502, 32583, 32649, 32701, 32738, 32760, +}; + +//----------------------------------------------------------------------------- +// +// Real Part Spectrum of Pitch Refinement Window * 256 +// +//----------------------------------------------------------------------------- +const Word16 wr_sp[] = +{ + 16, 43, 71, 102, 135, 170, 207, 247, 289, 333, + 380, 430, 483, 538, 596, 657, 721, 787, 857, 930, + 1006, 1085, 1168, 1254, 1343, 1435, 1531, 1630, 1733, 1840, + 1950, 2063, 2181, 2302, 2426, 2555, 2687, 2823, 2962, 3106, + 3253, 3404, 3559, 3718, 3881, 4047, 4218, 4392, 4570, 4751, + 4937, 5126, 5319, 5516, 5716, 5920, 6128, 6339, 6554, 6772, + 6994, 7219, 7447, 7679, 7914, 8152, 8393, 8637, 8884, 9134, + 9387, 9642, 9900, 10160, 10423, 10688, 10956, 11225, 11497, 11770, + 12045, 12322, 12601, 12881, 13162, 13444, 13728, 14012, 14298, 14584, + 14871, 15158, 15445, 15733, 16020, 16308, 16595, 16882, 17168, 17454, + 17738, 18022, 18305, 18586, 18866, 19145, 19421, 19696, 19969, 20240, + 20508, 20774, 21037, 21298, 21556, 21811, 22062, 22310, 22555, 22796, + 23033, 23267, 23496, 23722, 23943, 24159, 24372, 24579, 24782, 24980, + 25172, 25360, 25542, 25719, 25891, 26057, 26217, 26372, 26520, 26663, + 26800, 26930, 27055, 27173, 27285, 27390, 27489, 27581, 27667, 27746, + 27818, 27884, 27942, 27994, 28039, 28078, 28109, 28133, 28151, 28161, + 28165, 28161, 28151, 28133, 28109, 28078, 28039, 27994, 27942, 27884, + 27818, 27746, 27667, 27581, 27489, 27390, 27285, 27173, 27055, 26930, + 26800, 26663, 26520, 26372, 26217, 26057, 25891, 25719, 25542, 25360, + 25172, 24980, 24782, 24579, 24372, 24159, 23943, 23722, 23496, 23267, + 23033, 22796, 22555, 22310, 22062, 21811, 21556, 21298, 21037, 20774, + 20508, 20240, 19969, 19696, 19421, 19145, 18866, 18586, 18305, 18022, + 17738, 17454, 17168, 16882, 16595, 16308, 16020, 15733, 15445, 15158, + 14871, 14584, 14298, 14012, 13728, 13444, 13162, 12881, 12601, 12322, + 12045, 11770, 11497, 11225, 10956, 10688, 10423, 10160, 9900, 9642, + 9387, 9134, 8884, 8637, 8393, 8152, 7914, 7679, 7447, 7219, + 6994, 6772, 6554, 6339, 6128, 5920, 5716, 5516, 5319, 5126, + 4937, 4751, 4570, 4392, 4218, 4047, 3881, 3718, 3559, 3404, + 3253, 3106, 2962, 2823, 2687, 2555, 2426, 2302, 2181, 2063, + 1950, 1840, 1733, 1630, 1531, 1435, 1343, 1254, 1168, 1085, + 1006, 930, 857, 787, 721, 657, 596, 538, 483, 430, + 380, 333, 289, 247, 207, 170, 135, 102, 71, 43, + 16 +}; + diff --git a/imbe_vocoder/tbls.h b/imbe_vocoder/tbls.h new file mode 100644 index 0000000..fd0ade4 --- /dev/null +++ b/imbe_vocoder/tbls.h @@ -0,0 +1,99 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#ifndef _TBLS +#define _TBLS + + +//----------------------------------------------------------------------------- +// +// Bit allocation and ancillary tables +// +//----------------------------------------------------------------------------- +extern const UWord16 bit_allocation_tbl[]; +extern const UWord16 bit_allocation_offset_tbl[]; + +//----------------------------------------------------------------------------- +// +// Log Magnitude Prediction Residual Block Length +// +//----------------------------------------------------------------------------- +extern const UWord32 lmprbl_tbl[]; + +//----------------------------------------------------------------------------- +// +// Gain Quantizer Levels in Q5.11 format +// +//----------------------------------------------------------------------------- +extern const Word16 gain_qnt_tbl[]; +#define GAIN_QNT_TBL_SIZE 64 + +//----------------------------------------------------------------------------- +// +// Gain Ste Size in unsigned Q0.16 format +// +//----------------------------------------------------------------------------- +extern const UWord16 gain_step_size_tbl[]; + +//----------------------------------------------------------------------------- +// +// Standard Deviation of Higher Order DCT Coefficients in unsigned Q0.16 format +// +//----------------------------------------------------------------------------- +extern const UWord16 hi_ord_std_tbl[]; + +//----------------------------------------------------------------------------- +// +// Quantizer Step for Higher Order DCT Coefficients in unsigned Q1.15 format +// +//----------------------------------------------------------------------------- +extern const UWord16 hi_ord_step_size_tbl[]; + +//----------------------------------------------------------------------------- +// +// Speech Synthesis Window +// +//----------------------------------------------------------------------------- +extern const Word16 ws[]; + +//----------------------------------------------------------------------------- +// +// Squared Pitch Estimation Window 64*wi^2 +// +//----------------------------------------------------------------------------- +extern const Word16 wi[]; + +//----------------------------------------------------------------------------- +// +// Pitch Refinement Window +// +//----------------------------------------------------------------------------- +extern const Word16 wr[]; + +//----------------------------------------------------------------------------- +// +// Real Part Spectrum of Pitch Refinement Window * 256 +// +//----------------------------------------------------------------------------- +extern const Word16 wr_sp[]; + +#endif + diff --git a/imbe_vocoder/typedef.h b/imbe_vocoder/typedef.h new file mode 100644 index 0000000..fcf3b4c --- /dev/null +++ b/imbe_vocoder/typedef.h @@ -0,0 +1,74 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ +/* +******************************************************************************** +* +* GSM AMR speech codec Version 7.4.0 January 31, 2000 +* +******************************************************************************** +* +* File : typedef.c +* Purpose : Basic types. +* +******************************************************************************** +*/ +#ifndef typedef_h +#define typedef_h "$Id $" + +#undef ORIGINAL_TYPEDEF_H /* define to get "original" ETSI version + of typedef.h */ + +#ifdef ORIGINAL_TYPEDEF_H +/* + * this is the original code from the ETSI file typedef.h + */ + +#if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(_MSC_VER) || defined(__ZTC__) +typedef signed char Word8; +typedef short Word16; +typedef long Word32; +typedef int Flag; + +#elif defined(__sun) +typedef signed char Word8; +typedef short Word16; +typedef long Word32; +typedef int Flag; + +#elif defined(__unix__) || defined(__unix) +typedef signed char Word8; +typedef short Word16; +typedef int Word32; +typedef int Flag; + +#endif +#else /* not original typedef.h */ + +/* + * use (improved) type definition file typdefs.h and add a "Flag" type + */ +#include "typedefs.h" +typedef int Flag; + +#endif + +#endif + diff --git a/imbe_vocoder/typedefs.h b/imbe_vocoder/typedefs.h new file mode 100644 index 0000000..45fe1a0 --- /dev/null +++ b/imbe_vocoder/typedefs.h @@ -0,0 +1,201 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ +/* +******************************************************************************** +* +* GSM AMR speech codec Version 7.4.0 January 31, 2000 +* +******************************************************************************** +* +* File : typedefs.h +* Description : Definition of platform independent data +* types and constants +* +* +* The following platform independent data types and corresponding +* preprocessor (#define) constants are defined: +* +* defined type meaning corresponding constants +* ---------------------------------------------------------- +* Char character (none) +* Bool boolean true, false +* Word8 8-bit signed minWord8, maxWord8 +* UWord8 8-bit unsigned minUWord8, maxUWord8 +* Word16 16-bit signed minWord16, maxWord16 +* UWord16 16-bit unsigned minUWord16, maxUWord16 +* Word32 32-bit signed minWord32, maxWord32 +* UWord32 32-bit unsigned minUWord32, maxUWord32 +* Float floating point minFloat, maxFloat +* +* +* The following compile switches are #defined: +* +* PLATFORM string indicating platform progam is compiled on +* possible values: "OSF", "PC", "SUN" +* +* OSF only defined if the current platform is an Alpha +* PC only defined if the current platform is a PC +* SUN only defined if the current platform is a Sun +* +* LSBFIRST is defined if the byte order on this platform is +* "least significant byte first" -> defined on DEC Alpha +* and PC, undefined on Sun +* +******************************************************************************** +*/ +#ifndef typedefs_h +#define typedefs_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include +#include + +#define __MSDOS__ + +/* +******************************************************************************** +* DEFINITION OF CONSTANTS +******************************************************************************** +*/ +/* + ********* define char type + */ +typedef char Char; + +/* + ********* define 8 bit signed/unsigned types & constants + */ +#if SCHAR_MAX == 127 +typedef signed char Word8; +#define minWord8 SCHAR_MIN +#define maxWord8 SCHAR_MAX + +typedef unsigned char UWord8; +#define minUWord8 0 +#define maxUWord8 UCHAR_MAX +#else +#error cannot find 8-bit type +#endif + + +/* + ********* define 16 bit signed/unsigned types & constants + */ +#if INT_MAX == 32767 +typedef int Word16; +#define minWord16 INT_MIN +#define maxWord16 INT_MAX +typedef unsigned int UWord16; +#define minUWord16 0 +#define maxUWord16 UINT_MAX +#elif SHRT_MAX == 32767 +typedef short Word16; +#define minWord16 SHRT_MIN +#define maxWord16 SHRT_MAX +typedef unsigned short UWord16; +#define minUWord16 0 +#define maxUWord16 USHRT_MAX +#else +#error cannot find 16-bit type +#endif + + +/* + ********* define 32 bit signed/unsigned types & constants + */ +#if INT_MAX == 2147483647 +typedef int Word32; +#define minWord32 INT_MIN +#define maxWord32 INT_MAX +typedef unsigned int UWord32; +#define minUWord32 0 +#define maxUWord32 UINT_MAX +#elif LONG_MAX == 2147483647 +typedef long Word32; +#define minWord32 LONG_MIN +#define maxWord32 LONG_MAX +typedef unsigned long UWord32; +#define minUWord32 0 +#define maxUWord32 ULONG_MAX +#else +#error cannot find 32-bit type +#endif + +/* + ********* define floating point type & constants + */ +/* use "#if 0" below if Float should be double; + use "#if 1" below if Float should be float + */ +#if 0 +typedef float Float; +#define maxFloat FLT_MAX +#define minFloat FLT_MIN +#else +typedef double Float; +#define maxFloat DBL_MAX +#define minFloat DBL_MIN +#endif + +/* + ********* define complex type + */ +typedef struct { + Float r; /* real part */ + Float i; /* imaginary part */ +} CPX; + +/* + ********* define boolean type + */ +typedef int Bool; +#define false 0 +#define true 1 + +/* + ********* Check current platform + */ +#if defined(__MSDOS__) +#define PC +#define PLATFORM "PC" +#define LSBFIRST +#elif defined(__osf__) +#define OSF +#define PLATFORM "OSF" +#define LSBFIRST +#elif defined(__sun__) || defined(__sun) +#define SUN +#define PLATFORM "SUN" +#undef LSBFIRST +#elif defined(linux) && defined(i386) +#define PC +#define PLATFORM "PC" +#define LSBFIRST +#else +#error "can't determine architecture; adapt typedefs.h to your platform" +#endif + +#endif + diff --git a/imbe_vocoder/uv_synt.cpp b/imbe_vocoder/uv_synt.cpp new file mode 100644 index 0000000..99c990d --- /dev/null +++ b/imbe_vocoder/uv_synt.cpp @@ -0,0 +1,147 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#include "typedef.h" +#include "basic_op.h" +#include "imbe.h" +#include "aux_sub.h" +#include "dsp_sub.h" +#include "math_sub.h" +#include "uv_synt.h" +#include "rand_gen.h" +#include "tbls.h" +#include "encode.h" +#include "imbe_vocoder.h" + + + + +void imbe_vocoder::uv_synt_init(void) +{ + fft_init(); + v_zap(uv_mem, 105); +} + + + + + + +void imbe_vocoder::uv_synt(IMBE_PARAM *imbe_param, Word16 *snd) +{ + Cmplx16 Uw[FFTLENGTH]; + Word16 i, index_a, index_b, index_aux, ha, hb, *v_uv_dsn_ptr, *sa_ptr, sa; + Word32 fund_freq, fund_freq_2, fund_freq_acc_a, fund_freq_acc_b; + + sa_ptr = imbe_param->sa; + v_uv_dsn_ptr = imbe_param->v_uv_dsn; + fund_freq = imbe_param->fund_freq; + fund_freq_2 = L_shr(fund_freq, 1); + + v_zap((Word16 *)&Uw, 2 * FFTLENGTH); + + fund_freq_acc_a = L_sub(fund_freq, fund_freq_2); + fund_freq_acc_b = L_add(fund_freq, fund_freq_2); + + for(i = 0; i < imbe_param->num_harms; i++) + { + ha = extract_h(fund_freq_acc_a); + hb = extract_h(fund_freq_acc_b); + index_a = (ha >> 8) + ((ha & 0xFF)?1:0); + index_b = (hb >> 8) + ((hb & 0xFF)?1:0); + + index_aux = 256 - index_a; + + sa = shl(*sa_ptr, 3); + + if(*v_uv_dsn_ptr++) + { + while(index_a < index_b) + { + Uw[index_a].re = Uw[index_a].im = 0; + Uw[index_aux].re = Uw[index_aux].im = 0; + index_a++; + index_aux--; + } + } + else + { + while(index_a < index_b) + { + Uw[index_a].re = mult(sa, rand_gen()); + Uw[index_a].im = mult(sa, rand_gen()); + //Uw[index_a].re = sa; + //Uw[index_a].im = sa; + + Uw[index_aux].re = Uw[index_a].re; + Uw[index_aux].im = negate(Uw[index_a].im); + index_a++; + index_aux--; + } + } + + fund_freq_acc_a = L_add(fund_freq_acc_a, fund_freq); + fund_freq_acc_b = L_add(fund_freq_acc_b, fund_freq); + sa_ptr++; + } + +/* + j = 128; + for(i = 0; i < 128; i++) + Uw_tmp[j++] = Uw[i]; + + j = 128; + for(i = 0; i < 128; i++) + Uw_tmp[i] = Uw[j++]; + + for(i = 0; i < 256; i++) + Uw[i] = Uw_tmp[i]; +*/ + + + fft((Word16 *)&Uw, FFTLENGTH, -1); + + for(i = 0; i < 105; i++) + snd[i] = uv_mem[i]; + + index_aux = 73; + for(i = 105; i < FRAME; i++) + snd[i] = shl(Uw[index_aux++].re, 3); + + + // Weighted Overlap Add Algorithm + index_aux = 24; + index_a = 0; + index_b = 48; + for(i = 56; i < 105; i++) + { + snd[i] = extract_h(L_add(L_mult(snd[i], ws[index_b]), L_mult(shl(Uw[index_aux].re, 3), ws[index_a]))); + + index_aux++; + index_a++; + index_b--; + } + + index_aux = 128; + for(i = 0; i < 105; i++) + uv_mem[i] = shl(Uw[index_aux++].re, 3); +} + diff --git a/imbe_vocoder/uv_synt.h b/imbe_vocoder/uv_synt.h new file mode 100644 index 0000000..ef04cb7 --- /dev/null +++ b/imbe_vocoder/uv_synt.h @@ -0,0 +1,29 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + +#ifndef _UV_SYNT +#define _UV_SYNT + +void uv_synt_init(void); +void uv_synt(IMBE_PARAM *imbe_param, Word16 *snd); +void fft(Word16 *datam1, Word16 nn, Word16 isign); + +#endif diff --git a/imbe_vocoder/v_synt.cpp b/imbe_vocoder/v_synt.cpp new file mode 100644 index 0000000..ee99e33 --- /dev/null +++ b/imbe_vocoder/v_synt.cpp @@ -0,0 +1,248 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "basic_op.h" +#include "imbe.h" +#include "aux_sub.h" +#include "dsp_sub.h" +#include "math_sub.h" +#include "v_synt.h" +#include "rand_gen.h" +#include "tbls.h" +#include "encode.h" +#include "imbe_vocoder.h" + + + + + + +#define CNST_0_1_Q1_15 0x0CCD + + + +void imbe_vocoder::v_synt_init(void) +{ + Word16 i; + + for(i = 0; i < NUM_HARMS_MAX; i++) + { + ph_mem[i] = L_deposit_h(rand_gen()); + vu_dsn_prev[i] = 0; + } + + num_harms_prev3 = 0; + fund_freq_prev = 0; +} + + +void imbe_vocoder::v_synt(IMBE_PARAM *imbe_param, Word16 *snd) +{ + Word32 L_tmp, L_tmp1, fund_freq, L_snd[FRAME], L_ph_acc, L_ph_step; + Word32 L_ph_acc_aux, L_ph_step_prev, L_amp_acc, L_amp_step, L_ph_step_aux; + Word16 num_harms, i, j, *vu_dsn, *sa, *s_ptr, *s_ptr_aux, num_harms_max, num_harms_max_4; + UWord32 ph_mem_prev[NUM_HARMS_MAX], dph[NUM_HARMS_MAX]; + Word16 num_harms_inv, num_harms_sh, num_uv; + Word16 freq_flag; + + + fund_freq = imbe_param->fund_freq; + num_harms = imbe_param->num_harms; + vu_dsn = imbe_param->v_uv_dsn; + sa = imbe_param->sa; + num_harms_inv = imbe_param->div_one_by_num_harm; + num_harms_sh = imbe_param->div_one_by_num_harm_sh; + num_uv = imbe_param->l_uv; + + for(i = 0; i < FRAME; i++) + L_snd[i] = 0; + + // Update phases (calculated phase value correspond to bound of frame) + L_tmp = (((fund_freq_prev + fund_freq) >> 7) * FRAME/2) << 7; // It is performed integer multiplication by mod 1 + + L_ph_acc = 0; + for(i = 0; i < NUM_HARMS_MAX; i++) + { + ph_mem_prev[i] = ph_mem[i]; + L_ph_acc += L_tmp; + ph_mem[i] += L_ph_acc; + dph[i] = 0; + } + + num_harms_max = (num_harms >= num_harms_prev3)?num_harms:num_harms_prev3; + num_harms_max_4 = num_harms_max >> 2; + + if(L_abs(L_sub(fund_freq, fund_freq_prev)) >= L_mpy_ls(fund_freq, CNST_0_1_Q1_15)) + freq_flag = 1; + else + freq_flag = 0; + + L_ph_step = L_ph_step_prev = 0; + for(i = 0; i < num_harms_max; i++) + { + L_ph_step += fund_freq; + L_ph_step_prev += fund_freq_prev; + + + if(i > num_harms_max_4) + { + if(num_uv == num_harms) + { + dph[i] = L_deposit_h(rand_gen()); + } + else + { + L_tmp = L_mult(rand_gen(), num_harms_inv); + dph[i] = L_shr(L_tmp, 15 - num_harms_sh) * num_uv; + } + ph_mem[i] += dph[i]; + } + + if(vu_dsn[i] == 0 && vu_dsn_prev[i] == 0) + continue; + + if(vu_dsn[i] == 1 && vu_dsn_prev[i] == 0) // unvoiced => voiced + { + s_ptr = (Word16 *)ws; + L_ph_acc = ph_mem[i] - (((L_ph_step >> 7) * 104) << 7); + for(j = 56; j <= 104; j++) + { + L_tmp = L_mult(*s_ptr++, sa[i]); + L_tmp = L_mpy_ls(L_tmp, cos_fxp(extract_h(L_ph_acc))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + L_ph_acc += L_ph_step; + } + + for(j = 105; j <= 159; j++) + { + L_tmp = L_mult(sa[i], cos_fxp(extract_h(L_ph_acc))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + L_ph_acc += L_ph_step; + } + continue; + } + + + if(vu_dsn[i] == 0 && vu_dsn_prev[i] == 1) // voiced => unvoiced + { + s_ptr = (Word16 *)&ws[48]; + L_ph_acc = ph_mem_prev[i]; + + for(j = 0; j <= 55; j++) + { + L_tmp = L_mult(sa_prev3[i], cos_fxp(extract_h(L_ph_acc))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + L_ph_acc += L_ph_step_prev; + } + + for(j = 56; j <= 104; j++) + { + L_tmp = L_mult(*s_ptr--, sa_prev3[i]); + L_tmp = L_mpy_ls(L_tmp, cos_fxp(extract_h(L_ph_acc))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + L_ph_acc += L_ph_step_prev; + } + continue; + } + + if(i >=7 || freq_flag) + { + s_ptr_aux = (Word16 *)&ws[48]; + L_ph_acc_aux = ph_mem_prev[i]; + + s_ptr = (Word16 *)ws; + L_ph_acc = ph_mem[i] - (((L_ph_step >> 7) * 104) << 7); + + for(j = 0; j <= 55; j++) + { + L_tmp = L_mult(sa_prev3[i], cos_fxp(extract_h(L_ph_acc_aux))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + L_ph_acc_aux += L_ph_step_prev; + } + + for(j = 56; j <= 104; j++) + { + L_tmp = L_mult(*s_ptr_aux--, sa_prev3[i]); + L_tmp = L_mpy_ls(L_tmp, cos_fxp(extract_h(L_ph_acc_aux))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + + L_tmp = L_mult(*s_ptr++, sa[i]); + L_tmp = L_mpy_ls(L_tmp, cos_fxp(extract_h(L_ph_acc))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + + L_ph_acc_aux += L_ph_step_prev; + L_ph_acc += L_ph_step; + } + + for(j = 105; j <= 159; j++) + { + L_tmp = L_mult(sa[i], cos_fxp(extract_h(L_ph_acc))); + L_tmp = L_shr(L_tmp, 1); + L_snd[j] = L_add(L_snd[j], L_tmp); + L_ph_acc += L_ph_step; + } + continue; + } + + L_amp_step = L_mpy_ls(L_shr(L_deposit_h(sub(sa[i], sa_prev3[i])), 4 + 1), CNST_0_1_Q1_15); // (sa[i] - sa_prev3[i]) / 160, 1/160 = 0.1/16 + L_amp_acc = L_shr(L_deposit_h(sa_prev3[i]), 1); + + + L_ph_step_aux = L_mpy_ls(L_shr(fund_freq - fund_freq_prev, 4 + 1), CNST_0_1_Q1_15); // (fund_freq - fund_freq_prev)/(2*160) + L_ph_step_aux = ((L_ph_step_aux >> 7) * (i + 1)) << 7; + + L_ph_acc = ph_mem_prev[i]; + + L_tmp1 = L_mpy_ls(L_shr(dph[i], 4), CNST_0_1_Q1_15); // dph[i] / 160 + + for(j = 0; j < 160; j++) + { + L_ph_acc_aux = ((L_ph_step_aux >> 9) * j) << 9; + L_ph_acc_aux = ((L_ph_acc_aux >> 9) * j) << 9; + + L_tmp = L_mpy_ls(L_amp_acc, cos_fxp(extract_h(L_ph_acc + L_ph_acc_aux))); + L_snd[j] = L_add(L_snd[j], L_tmp); + + L_amp_acc = L_add(L_amp_acc, L_amp_step); + L_ph_acc += L_ph_step_prev; + L_ph_acc += L_tmp1; + } + } + + for(i = 0; i < FRAME; i++) + *snd++ = extract_h(L_snd[i]); + + v_zap(vu_dsn_prev, NUM_HARMS_MAX); + v_equ(vu_dsn_prev, imbe_param->v_uv_dsn, num_harms); + v_equ(sa_prev3, imbe_param->sa, num_harms); + + num_harms_prev3 = num_harms; + fund_freq_prev = fund_freq; +} diff --git a/imbe_vocoder/v_synt.h b/imbe_vocoder/v_synt.h new file mode 100644 index 0000000..2139fb2 --- /dev/null +++ b/imbe_vocoder/v_synt.h @@ -0,0 +1,30 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _V_SYNT +#define _V_SYNT + +void v_synt_init(void); +void v_synt(IMBE_PARAM *imbe_param, Word16 *snd); + + +#endif diff --git a/imbe_vocoder/v_uv_det.cpp b/imbe_vocoder/v_uv_det.cpp new file mode 100644 index 0000000..83e209d --- /dev/null +++ b/imbe_vocoder/v_uv_det.cpp @@ -0,0 +1,373 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#include "typedef.h" +#include "globals.h" +#include "imbe.h" +#include "basic_op.h" +#include "aux_sub.h" +#include "math_sub.h" +#include "dsp_sub.h" +#include "tbls.h" +#include "v_uv_det.h" + +#include +#include +#include +#include "encode.h" +#include "imbe_vocoder.h" + + +#define CNST_0_5625_Q1_15 0x4800 +#define CNST_0_45_Q1_15 0x3999 +#define CNST_0_1741_Q1_15 0x164A +#define CNST_0_1393_Q1_15 0x11D5 +#define CNST_0_99_Q1_15 0x7EB8 +#define CNST_0_01_Q1_15 0x0148 +#define CNST_0_0025_Q1_15 0x0051 +#define CNST_0_25_Q1_15 0x2000 +#define CNST_PI_4_Q1_15 0x6488 +#define CNST_0_55_Q4_12 0x08CD + + + + + + + +extern FILE *fp_in, *fp_out; +extern int frame_cnt; + + +void imbe_vocoder::pitch_ref_init(void) +{ + v_zap(v_uv_dsn, NUM_BANDS_MAX); + th_max = 0; +} + +Word16 imbe_vocoder::voiced_sa_calc(Word32 num, Word16 den) +{ + Word16 tmp; + Word32 L_tmp; + + L_tmp = L_mpy_ls(num, den); + L_tmp = sqrt_l_exp(L_tmp, &tmp); + L_tmp = L_shr(L_tmp, tmp - 3); + + //L_tmp =0; + //return (Word16)(2*256.0*sqrt(2*(double)num/(double)den)); + return extract_h(L_tmp); +} + +Word16 imbe_vocoder::unvoiced_sa_calc(Word32 num, Word16 den) +{ + Word16 shift, tmp; + Word32 L_tmp; + + shift = norm_s(den); + tmp = div_s(0x4000, shl(den, shift)); + L_tmp = L_shl(L_mpy_ls(num, tmp), shift + 2); + L_tmp = sqrt_l_exp(L_tmp, &tmp); + L_tmp = L_shr(L_tmp, tmp - 2 + 6); + L_tmp = L_mpy_ls(L_tmp, 0x4A76); + + //L_tmp =0; + //return (Word16)(2*0.1454 * sqrt(2*256*(double)num/(double)den)); + return extract_h(L_tmp); +} + +//============================================================================= +// +// Voiced/Unvoiced Determination & Spectral Amplitudes Estimation +// +//============================================================================= +void imbe_vocoder::v_uv_det(IMBE_PARAM *imbe_param, Cmplx16 *fft_buf) +{ + Word16 i, j, index_a_save, tmp, index_wr; + Word32 fund_freq, fund_freq_2, fund_freq_acc_a, fund_freq_acc_b, fund_freq_acc, fund_fr_acc, L_tmp, amp_re_acc, amp_im_acc; + Word16 ha, hb, index_a, index_b, index_tbl[30], it_ind, re_tmp, im_tmp, re_tmp2, im_tmp2, sc_coef; + Word32 Sw_sum, M_num[NUM_HARMS_MAX], M_num_sum, M_den_sum, D_num, D_den, th_lf, th_hf, th0, fund_fr_step, M_fcn_num, M_fcn_den; + Word16 sp_rec_re, sp_rec_im, M_fcn; + Word16 band_cnt, num_harms_cnt, uv_harms_cnt, Dk; + Word16 num_harms, num_bands, dsn_thr=0; + Word16 thr[NUM_BANDS_MAX], M_den[NUM_HARMS_MAX], b1_vec; + + + fund_freq = imbe_param->fund_freq; + + tmp = shr( add( shr(imbe_param->ref_pitch, 1), CNST_0_25_Q8_8), 8); // fix(pitch_cand / 2 + 0.5) + num_harms = extract_h((UWord32)CNST_0_9254_Q0_16 * tmp); // fix(0.9254 * fix(pitch_cand / 2 + 0.5)) + if(num_harms < NUM_HARMS_MIN) + num_harms = NUM_HARMS_MIN; + else if(num_harms > NUM_HARMS_MAX) + num_harms = NUM_HARMS_MAX; + + if(num_harms <= 36) + num_bands = extract_h((UWord32)(num_harms + 2) * CNST_0_33_Q0_16); // fix((L+2)/3) + else + num_bands = NUM_BANDS_MAX; + + imbe_param->num_harms = num_harms; + imbe_param->num_bands = num_bands; + + //========================================================================= + // + // M(th) function calculation + // + //========================================================================= + for(j = 0, th_lf = 0; j < 64; j++) + { + th_lf = L_mac(th_lf, fft_buf[j].re, fft_buf[j].re); + th_lf = L_mac(th_lf, fft_buf[j].im, fft_buf[j].im); + } + for(j = 64, th_hf = 0; j < 128; j++) + { + th_hf = L_mac(th_hf, fft_buf[j].re, fft_buf[j].re); + th_hf = L_mac(th_hf, fft_buf[j].im, fft_buf[j].im); + } + th0 = L_add(th_lf, th_hf); + + if(th0 > th_max) + th_max = L_shr(L_add(th_max, th0), 1); + else + th_max = L_add(L_mpy_ls(th_max, CNST_0_99_Q1_15), L_mpy_ls(th0, CNST_0_01_Q1_15)); + + M_fcn_num = L_add(th0, L_mpy_ls(th_max, CNST_0_0025_Q1_15)); + M_fcn_den = L_add(th0, L_mpy_ls(th_max, CNST_0_01_Q1_15)); + if(M_fcn_den == 0) + M_fcn = CNST_0_25_Q1_15; + else + { + tmp = norm_l(M_fcn_den); + M_fcn_den = L_shl(M_fcn_den, tmp); + M_fcn_num = L_shl(M_fcn_num, tmp); + + M_fcn = div_s(extract_h(M_fcn_num), extract_h(M_fcn_den)); + + if(th_lf < (L_tmp= L_add(L_shl(th_hf, 2), th_hf))) // compare th_lf < 5*th_hf + { + tmp = norm_l(L_tmp); + M_fcn_den = L_shl(L_tmp, tmp); + th_lf = L_shl(th_lf, tmp); + + tmp = div_s(extract_h(th_lf), extract_h(M_fcn_den)); + L_tmp = sqrt_l_exp(L_deposit_h(tmp), &tmp); + if(tmp) + L_tmp = L_shr(L_tmp, tmp); + M_fcn = mult(M_fcn, extract_h(L_tmp)); + } + } + // ======================================================================== + fund_fr_step = L_shl(L_mpy_ls(fund_freq, CNST_PI_4_Q1_15), 2); // mult by PI + + uv_harms_cnt = 0; + b1_vec = 0; + band_cnt = 0; + num_harms_cnt = 0; + Sw_sum = 0; + D_num = D_den = 0; + + fund_fr_acc = 0; + fund_freq_acc = fund_freq; + fund_freq_2 = L_shr(fund_freq, 1); + fund_freq_acc_a = L_sub(fund_freq, fund_freq_2); + fund_freq_acc_b = L_add(fund_freq, fund_freq_2); + for(j = 0; j < num_harms; j++) + { + ha = extract_h(fund_freq_acc_a); + hb = extract_h(fund_freq_acc_b); + index_a = (ha >> 8) + ((ha & 0xFF)?1:0); + index_b = (hb >> 8) + ((hb & 0xFF)?1:0); + + L_tmp = L_shl(L_deposit_h(index_a), 8); + L_tmp = L_sub(L_tmp, fund_freq_acc); + L_tmp = L_add(L_tmp, 0x00020000); // for rounding purpose + L_tmp = L_shr(L_tmp, 2); + + index_a_save = index_a; + it_ind = 0; + + // =========== v/uv determination threshold function == + if(num_harms_cnt == 0) // calculate one time per band + { + if(imbe_param->e_p > CNST_0_55_Q4_12 && band_cnt >= 1) + dsn_thr = 0; + else if(v_uv_dsn[band_cnt] == 1) + dsn_thr = mult(M_fcn, sub(CNST_0_5625_Q1_15, mult(CNST_0_1741_Q1_15, extract_h(fund_fr_acc)))); + else + dsn_thr = mult(M_fcn, sub(CNST_0_45_Q1_15, mult(CNST_0_1393_Q1_15, extract_h(fund_fr_acc)))); + + fund_fr_acc = L_add(fund_fr_acc, fund_fr_step); + + thr[band_cnt] = dsn_thr; + } + // ==================================================== + + M_den_sum = 0; + amp_re_acc = amp_im_acc = 0; + while(index_a < index_b) + { + index_wr = extract_h(L_tmp); + if(index_wr < 0 && (L_tmp & 0xFFFF)) // truncating for negative number + index_wr = add(index_wr, 1); + index_wr = add(index_wr, 160); + index_tbl[it_ind++] = index_wr; + if(index_wr >= 0 && index_wr <= 320) + { + amp_re_acc = L_mac(amp_re_acc, fft_buf[index_a].re, wr_sp[index_wr]); + amp_im_acc = L_mac(amp_im_acc, fft_buf[index_a].im, wr_sp[index_wr]); + M_den_sum = L_add(M_den_sum, mult(wr_sp[index_wr], wr_sp[index_wr])); + } + + index_a++; + L_tmp = L_add(L_tmp, 0x400000); + } + sc_coef = div_s(0x4000, extract_l(L_shr(M_den_sum, 1))); + im_tmp2 = mult(extract_h(amp_im_acc), sc_coef); + re_tmp2 = mult(extract_h(amp_re_acc), sc_coef); + + M_num_sum = 0; + it_ind = 0; + index_a = index_a_save; + while(index_a < index_b) + { + index_wr = index_tbl[it_ind++]; + if(index_wr < 0 || index_wr > 320) + sp_rec_re = sp_rec_im = 0; + else + { + sp_rec_im = mult( im_tmp2, wr_sp[index_wr]); + sp_rec_re = mult( re_tmp2, wr_sp[index_wr]); + } + + re_tmp = sub(fft_buf[index_a].re, sp_rec_re); + im_tmp = sub(fft_buf[index_a].im, sp_rec_im); + D_num = L_mac(D_num, re_tmp, re_tmp); + D_num = L_mac(D_num, im_tmp, im_tmp); + + M_num_sum = L_mac(M_num_sum, fft_buf[index_a].re, fft_buf[index_a].re); + M_num_sum = L_mac(M_num_sum, fft_buf[index_a].im, fft_buf[index_a].im); + + index_a++; + } + + M_den[j] = sc_coef; + M_num[j] = M_num_sum; + D_den = L_add(D_den, M_num_sum); + + if(++num_harms_cnt == 3 && band_cnt < num_bands - 1) + { + b1_vec <<= 1; + + if(D_den > D_num && D_den != 0) + { + tmp = norm_l(D_den); + Dk = div_s(extract_h(L_shl(D_num, tmp)), extract_h(L_shl(D_den, tmp))); + } + else + Dk = MAX_16; + + if(Dk < dsn_thr) + { + // voiced band + v_uv_dsn[band_cnt] = 1; + b1_vec |= 1; + i = j - 2; + while(i <= j) + { + imbe_param->sa[i] = voiced_sa_calc(M_num[i], M_den[i]); + imbe_param->v_uv_dsn[i] = 1; + i++; + } + } + else + { + // unvoiced band + v_uv_dsn[band_cnt] = 0; + i = j - 2; + while(i <= j) + { + imbe_param->sa[i] = unvoiced_sa_calc(M_num[i], index_b - index_a_save); + imbe_param->v_uv_dsn[i] = 0; + uv_harms_cnt++; + i++; + } + } + + D_num = D_den = 0; + num_harms_cnt = 0; + band_cnt++; + } + + + fund_freq_acc_a = L_add(fund_freq_acc_a, fund_freq); + fund_freq_acc_b = L_add(fund_freq_acc_b, fund_freq); + fund_freq_acc = L_add(fund_freq_acc, fund_freq); + } + + if(num_harms_cnt) + { + b1_vec <<= 1; + if(D_den > D_num && D_den != 0) + { + tmp = norm_l(D_den); + Dk= div_s(extract_h(L_shl(D_num, tmp)), extract_h(L_shl(D_den, tmp))); + } + else + Dk = MAX_16; + + if(Dk < dsn_thr) + { + // voiced band + v_uv_dsn[band_cnt] = 1; + b1_vec |= 1; + + i = num_harms - num_harms_cnt; + while(i < num_harms) + { + imbe_param->sa[i] = voiced_sa_calc(M_num[i], M_den[i]); + imbe_param->v_uv_dsn[i] = 1; + i++; + } + } + else + { + // unvoiced band + v_uv_dsn[band_cnt] = 0; + i = num_harms - num_harms_cnt; + while(i < num_harms) + { + imbe_param->sa[i] = unvoiced_sa_calc(M_num[i], index_b - index_a_save); + imbe_param->v_uv_dsn[i] = 0; + uv_harms_cnt++; + i++; + } + } + } + + imbe_param->l_uv = uv_harms_cnt; + + + imbe_param->b_vec[1] = b1_vec; // Save encoded voiced/unvoiced decision + imbe_param->b_vec[0] = shr( sub(imbe_param->ref_pitch, 0x1380), 7); // Pitch encode fix(2*pitch - 39) + +} diff --git a/imbe_vocoder/v_uv_det.h b/imbe_vocoder/v_uv_det.h new file mode 100644 index 0000000..ebe270f --- /dev/null +++ b/imbe_vocoder/v_uv_det.h @@ -0,0 +1,28 @@ +/* + * Project 25 IMBE Encoder/Decoder Fixed-Point implementation + * Developed by Pavel Yazev E-mail: pyazev@gmail.com + * Version 1.0 (c) Copyright 2009 + * + * This 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 3, or (at your option) + * any later version. + * + * The software 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; see the file COPYING. If not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Boston, MA + * 02110-1301, USA. + */ + + +#ifndef _V_UV_DET +#define _V_UV_DET + +void v_uv_det(IMBE_PARAM *imbe_param, Cmplx16 *fft_buf); + +#endif diff --git a/mbe/ambe2.cpp b/mbe/ambe2.cpp new file mode 100644 index 0000000..7317b1b --- /dev/null +++ b/mbe/ambe2.cpp @@ -0,0 +1,191 @@ +// Public API of ambe2.h over the halfrate codec (lib/halfrate). GPL-3.0-or-later. +#include +#include +#include +#include +#include "ambe2.h" +#include "halfrate.h" + +struct ambe2_encoder { hr_encoder *hr; }; +struct ambe2_decoder { hr_decoder *hr; }; + +int ambe2_default_codec(void) { return AMBE2_CODEC_HALFRATE; } + +const char *ambe2_codec_name(int codec) { return codec == AMBE2_CODEC_HALFRATE ? "halfrate" : NULL; } + +//const char *ambe2_version(void) { return AMBE2_VERSION " halfrate " HALFRATE_VERSION; } + +// 49 bits in on-air order <-> halfrate's 7-byte frame (the same bits, packed MSB first) +static void bits_to_hr(const uint8_t *bits, uint8_t *frame) { + uint8_t b[AMBE2_BITS]; + for (int i = 0; i < AMBE2_BITS; i++) b[i] = bits[i] & 1; + hr_frame_from_bits(b, frame); +} + +ambe2_encoder *ambe2_encoder_new_codec(int codec, int clipped) { + if (codec != AMBE2_CODEC_HALFRATE) return NULL; + ambe2_encoder *e = (ambe2_encoder *)calloc(1, sizeof *e); + if (!e) return NULL; + e->hr = hr_encoder_new(); + if (!e->hr) { free(e); return NULL; } + return e; +} +ambe2_encoder *ambe2_encoder_new(void) { return ambe2_encoder_new_codec(AMBE2_CODEC_HALFRATE, 0); } +void ambe2_encoder_free(ambe2_encoder *e) { + if (!e) return; + hr_encoder_free(e->hr); + free(e); +} +int ambe2_encoder_codec(const ambe2_encoder *e) { return AMBE2_CODEC_HALFRATE; } +int ambe2_encoder_set_option(ambe2_encoder *e, const char *name, double value) { return e ? hr_encoder_set(e->hr, name, value) : -1; } + +void ambe2_encode(ambe2_encoder *e, const int16_t *pcm, uint8_t *bits) { + uint8_t frame[HR_FRAME_BYTES]; + hr_encode(e->hr, pcm, frame); + hr_bits_from_frame(frame, bits); +} + +static void to_pcm(const float *x, int16_t *pcm) { + for (int i = 0; i < AMBE2_SAMPLES; i++) { + double v = nearbyint((double)x[i] * 32768.0); + pcm[i] = (int16_t)(v > 32767 ? 32767 : v < -32768 ? -32768 : v); + } +} + +// Frame k comes out of the encoder AMBE2_ENCODER_DELAY calls later; silence after the clip pushes the last ones out. +size_t ambe2_encode_clip(ambe2_encoder *e, const float *x, size_t n, uint8_t *bits) { + size_t frames = n / AMBE2_SAMPLES; + int16_t pcm[AMBE2_SAMPLES]; + uint8_t skip[AMBE2_BITS]; + for (size_t t = 0; t < frames + AMBE2_ENCODER_DELAY; t++) { + if (t < frames) to_pcm(x + t * AMBE2_SAMPLES, pcm); + else memset(pcm, 0, sizeof pcm); + ambe2_encode(e, pcm, t >= AMBE2_ENCODER_DELAY ? bits + (t - AMBE2_ENCODER_DELAY) * AMBE2_BITS : skip); + } + return frames; +} + +// Streaming: raw samples wait in `pending` until a frame is whole; `encoded` counts encoder calls (with the silence of +// the flush), `real` the frames of audio. The output of call k is frame k - AMBE2_ENCODER_DELAY. +struct ambe2_stream { ambe2_encoder *e; std::vector pending; size_t encoded, real; }; + +ambe2_stream *ambe2_stream_new_codec(int codec, int clipped) { + ambe2_encoder *e = ambe2_encoder_new_codec(codec, clipped); + if (!e) return NULL; + ambe2_stream *s = new ambe2_stream; + s->e = e; + s->encoded = s->real = 0; + return s; +} +ambe2_stream *ambe2_stream_new(int clipped) { return ambe2_stream_new_codec(AMBE2_CODEC_HALFRATE, clipped); } +void ambe2_stream_free(ambe2_stream *s) { if (s) { ambe2_encoder_free(s->e); delete s; } } +int ambe2_stream_set_option(ambe2_stream *s, const char *name, double value) { return s ? ambe2_encoder_set_option(s->e, name, value) : -1; } + +// One encoder call; returns 1 when it gave a frame of the stream (written to bits). +static int stream_encode(ambe2_stream *s, const int16_t *pcm, uint8_t *bits) { + uint8_t skip[AMBE2_BITS]; + size_t k = s->encoded++; + bool out = k >= AMBE2_ENCODER_DELAY && k - AMBE2_ENCODER_DELAY < s->real; + ambe2_encode(s->e, pcm, out ? bits : skip); + return out; +} + +static size_t stream_emit(ambe2_stream *s, uint8_t *bits, size_t max_frames, bool final) { + size_t out = 0, used = 0; + // a whole frame of audio is encoded only when its output (if any) has room + while (s->pending.size() - used >= AMBE2_SAMPLES && (s->encoded < AMBE2_ENCODER_DELAY || out < max_frames)) { + s->real++; + out += stream_encode(s, &s->pending[used], bits + out * AMBE2_BITS); + used += AMBE2_SAMPLES; + } + s->pending.erase(s->pending.begin(), s->pending.begin() + used); + if (final && s->pending.size() < AMBE2_SAMPLES) { // (whole frames still waiting: no room, call again) + s->pending.clear(); // a partial last frame is dropped, as in ambe2_encode_clip + int16_t zero[AMBE2_SAMPLES] = {0}; + while (out < max_frames && s->encoded < s->real + AMBE2_ENCODER_DELAY) + out += stream_encode(s, zero, bits + out * AMBE2_BITS); + } + return out; +} + +size_t ambe2_stream_push(ambe2_stream *s, const int16_t *pcm, size_t n, uint8_t *bits, size_t max_frames) { + s->pending.insert(s->pending.end(), pcm, pcm + n); + return stream_emit(s, bits, max_frames, false); +} + +size_t ambe2_stream_flush(ambe2_stream *s, uint8_t *bits, size_t max_frames) { return stream_emit(s, bits, max_frames, true); } + +// halfrate decoder settings fitted against the DVSI stick on the train split of the captured decode clips (2026-10-28), +// by the per-frame distance over 24 mel bands: 2.31 -> 2.01 dB on test, 2.36 -> 2.10 on dev. Most of it is the formant +// enhancement (weaker, split moved from 1 kHz to 460 Hz) and mixed_voiced_share 1. repeat_high_gain lifts the top band +// on erased frames that repeat, as the stick does (about 3 dB per repeat at 3.5 kHz); frames around erasures 2.54 -> 2.04 +// dB on test. Its own defaults are in lib/halfrate/docs/options.md; docs/tuning.md has the report. +static const struct { const char *name; double value; } kHalfrateDecoderTuning[] = { + {"output_gain", 2.07}, {"high_band_tilt", 0.5}, {"high_band_start", 0.66}, {"silence_gain", 0.26}, + {"enhance_strength", 0.61}, {"enhance_min_weight", 0.39}, {"enhance_max_weight", 1.24}, + {"enhance_power_high", 0.72}, {"enhance_power_low", 0.2}, {"enhance_split_frequency", 0.057}, + {"mixed_voiced_share", 1.0}, {"repeat_high_gain", 1.78}, +}; + +ambe2_decoder *ambe2_decoder_new_codec(int codec) { + if (codec != AMBE2_CODEC_HALFRATE) return NULL; + ambe2_decoder *d = (ambe2_decoder *)calloc(1, sizeof *d); + if (!d) return NULL; + d->hr = hr_decoder_new(); + if (!d->hr) { free(d); return NULL; } + for (const auto &t : kHalfrateDecoderTuning) hr_decoder_set(d->hr, t.name, t.value); + return d; +} +ambe2_decoder *ambe2_decoder_new(void) { return ambe2_decoder_new_codec(AMBE2_CODEC_HALFRATE); } +void ambe2_decoder_free(ambe2_decoder *d) { + if (!d) return; + hr_decoder_free(d->hr); + free(d); +} +int ambe2_decoder_codec(const ambe2_decoder *d) { return AMBE2_CODEC_HALFRATE; } +int ambe2_decoder_set_option(ambe2_decoder *d, const char *name, double value) { return d ? hr_decoder_set(d->hr, name, value) : -1; } + +// halfrate frame kinds -> the return values of ambe2_decode +static int halfrate_kind(int kind) { + switch (kind) { + case HR_ERASURE: return 1; + case HR_TONE: return 3; + default: return 0; // HR_VOICE, HR_SILENCE + } +} + +int ambe2_decode(ambe2_decoder *d, const uint8_t *bits, int16_t *pcm) { + uint8_t frame[HR_FRAME_BYTES]; + bits_to_hr(bits, frame); + return halfrate_kind(hr_decode(d->hr, frame, pcm)); +} + +int ambe2_decode_packed(ambe2_decoder *d, const uint8_t *frame9, int16_t *pcm) { return halfrate_kind(hr_decode_air(d->hr, frame9, pcm)); } + +void ambe2_pack(const uint8_t *bits, uint8_t *frame9) { + uint8_t frame[HR_FRAME_BYTES]; + bits_to_hr(bits, frame); + hr_fec_encode(frame, frame9); +} + +int ambe2_unpack(const uint8_t *frame9, uint8_t *bits) { + uint8_t frame[HR_FRAME_BYTES]; + int errs = hr_fec_decode(frame9, frame); + hr_bits_from_frame(frame, bits); + return errs; +} + +static size_t pack_all(const std::vector &bits, size_t n, uint8_t *frames) { + for (size_t i = 0; i < n; i++) ambe2_pack(&bits[i * AMBE2_BITS], frames + i * AMBE2_FRAME_BYTES); + return n; +} + +size_t ambe2_stream_push_packed(ambe2_stream *s, const int16_t *pcm, size_t n, uint8_t *frames, size_t max_frames) { + std::vector bits(max_frames * AMBE2_BITS + 1); + return pack_all(bits, ambe2_stream_push(s, pcm, n, bits.data(), max_frames), frames); +} + +size_t ambe2_stream_flush_packed(ambe2_stream *s, uint8_t *frames, size_t max_frames) { + std::vector bits(max_frames * AMBE2_BITS + 1); + return pack_all(bits, ambe2_stream_flush(s, bits.data(), max_frames), frames); +} diff --git a/mbe/ambe2.h b/mbe/ambe2.h new file mode 100644 index 0000000..c74fd78 --- /dev/null +++ b/mbe/ambe2.h @@ -0,0 +1,98 @@ +/* ambe2: software AMBE+2 half-rate (DMR) encoder and decoder. GPL-3.0-or-later. + * + * The codec is lib/halfrate (its own input filtering, pitch tracking, pause gate, erasure concealment, tones and output + * limiting; options by name, lib/halfrate/docs/options.md). It writes and plays standard AMBE+2 frames. + * + * A frame is 49 bits, one bit per byte (0 or 1), in the on-air order. ambe2_pack/ambe2_unpack turn it into the + * 9-byte frame with FEC and interleave that DMR carries (36 dibits, first dibit in the top two bits of byte 0). + * Audio is 8 kHz, 16-bit mono, 160 samples (20 ms) per frame. One encoder or decoder per stream: both keep + * state from frame to frame. Not thread-safe per object; separate objects are independent. + */ +#ifndef AMBE2_H +#define AMBE2_H +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +#define AMBE2_SAMPLES 160 +#define AMBE2_BITS 49 +#define AMBE2_FRAME_BYTES 9 + +typedef struct ambe2_encoder ambe2_encoder; +typedef struct ambe2_decoder ambe2_decoder; +typedef struct ambe2_stream ambe2_stream; + +/* The one codec. The _codec calls take it so that a later codec can sit beside it; any other value gives NULL. */ +#define AMBE2_CODEC_HALFRATE 0 +/* AMBE2_CODEC_HALFRATE. */ +int ambe2_default_codec(void); +/* "halfrate"; NULL for an unknown codec. */ +const char *ambe2_codec_name(int codec); +/* The codec of an encoder or decoder. */ +int ambe2_encoder_codec(const ambe2_encoder *e); +int ambe2_decoder_codec(const ambe2_decoder *d); + +ambe2_encoder *ambe2_encoder_new(void); +/* An encoder of the given codec; NULL for an unknown codec. clipped is not used (kept for source compatibility). */ +ambe2_encoder *ambe2_encoder_new_codec(int codec, int clipped); +void ambe2_encoder_free(ambe2_encoder *e); +/* An option of the encoder by name (lib/halfrate/docs/options.md). Returns 0, or -1 for an unknown name or a NaN or + * infinite value. */ +int ambe2_encoder_set_option(ambe2_encoder *e, const char *name, double value); +/* pcm: 160 samples in, bits: 49 bytes out. The encoder looks ahead: its frames come out AMBE2_ENCODER_DELAY frames late + * (the first ones are silence); ambe2_encode_clip and the stream line them up with the audio. */ +void ambe2_encode(ambe2_encoder *e, const int16_t *pcm, uint8_t *bits); +#define AMBE2_ENCODER_DELAY 2 +/* A whole clip: x is the raw clip as float samples in [-1, 1] at 8 kHz. n/160 frames of 49 bytes go to bits (room for + * n/160*49), frame k from samples 160 k to 160 k + 159. Returns the number of frames. The encoder is used up afterwards + * (free it). */ +size_t ambe2_encode_clip(ambe2_encoder *e, const float *x, size_t n, uint8_t *bits); + +/* Streaming encoder: raw 8 kHz audio in any chunk size, frames out 40 ms (two frames) late, the same frames as + * ambe2_encode_clip on the whole clip. One stream per call; separate streams are independent and may run on separate + * threads. clipped is not used (kept for source compatibility). push returns the frames that became ready (at most + * max_frames; push 0 samples to fetch the rest); flush ends the stream and returns the frames still waiting. bits: 49 + * bytes per frame. */ +ambe2_stream *ambe2_stream_new(int clipped); +/* A stream of the given codec; NULL for an unknown codec. */ +ambe2_stream *ambe2_stream_new_codec(int codec, int clipped); +/* ambe2_encoder_set_option on the stream's encoder. Set options before the first push. */ +int ambe2_stream_set_option(ambe2_stream *s, const char *name, double value); +void ambe2_stream_free(ambe2_stream *s); +size_t ambe2_stream_push(ambe2_stream *s, const int16_t *pcm, size_t n, uint8_t *bits, size_t max_frames); +size_t ambe2_stream_flush(ambe2_stream *s, uint8_t *bits, size_t max_frames); + +/* A new decoder starts from our tuning, not from halfrate's own defaults (kHalfrateDecoderTuning in ambe2.cc: output + * stage, formant enhancement, voicing mix and a high-band lift on repeated erased frames; docs/tuning.md). It conceals + * erased frames (repeat, then mute, then comfort noise), plays tone frames and limits its output. */ +ambe2_decoder *ambe2_decoder_new(void); +/* A decoder of the given codec; NULL for an unknown codec. */ +ambe2_decoder *ambe2_decoder_new_codec(int codec); +void ambe2_decoder_free(ambe2_decoder *d); +/* An option of the decoder by name (lib/halfrate/docs/options.md). Returns 0, or -1 for an unknown name or a NaN or + * infinite value. */ +int ambe2_decoder_set_option(ambe2_decoder *d, const char *name, double value); +/* bits: 49 bytes in, pcm: 160 samples out. Returns 0 for a voice (or silence) frame, 1 for an erased frame, 3 for a tone + * frame. */ +int ambe2_decode(ambe2_decoder *d, const uint8_t *bits, int16_t *pcm); + +/* The same calls on 9-byte on-air frames (what DMR carries), for callers that never see the 49-bit form. frames: + * 9 bytes per frame. The decoder corrects what the FEC can; the return value is as for ambe2_decode. */ +size_t ambe2_stream_push_packed(ambe2_stream *s, const int16_t *pcm, size_t n, uint8_t *frames, size_t max_frames); +size_t ambe2_stream_flush_packed(ambe2_stream *s, uint8_t *frames, size_t max_frames); +int ambe2_decode_packed(ambe2_decoder *d, const uint8_t *frame9, int16_t *pcm); + +/* Library version and the halfrate codec version, e.g. "2.0.0 halfrate 0.2.0". */ +const char *ambe2_version(void); + +/* 49 bits <-> the 9-byte on-air frame. unpack returns the number of bit errors the FEC corrected, or -1 when the first + * code word had more than it can correct (the bits are still written, as decoded). */ +void ambe2_pack(const uint8_t *bits, uint8_t *frame9); +int ambe2_unpack(const uint8_t *frame9, uint8_t *bits); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/mbe/analysis.cpp b/mbe/analysis.cpp new file mode 100644 index 0000000..d6568e9 --- /dev/null +++ b/mbe/analysis.cpp @@ -0,0 +1,286 @@ +#include "analysis.h" + +#include + +#include "fastmath.h" +#include "fft.h" +#include "numeric.h" +#include "constants.h" +#include "history.h" +#include "tables.h" + +namespace halfrate::enc { + +using core::fast_log2; +using core::fast_sqrt; +using core::to_int32_sat; + +namespace { + +// The window response at p (1/16 bins, 256 = the centre), linearly interpolated; clamped at both ends. +float response_at(const AnalysisWindow& an, float p) { + if (p <= 0.0f) return an.response[0]; + if (p >= 512.0f) return an.response[512]; + int i = to_int32_sat(p); + float fraction = p - static_cast(to_int32_sat(p)); + return an.response[i] + fraction * (an.response[i + 1] - an.response[i]); +} + +// The harmonic (rounded bin / spacing) a bin belongs to. +inline int harmonic_of_bin(float bin, float spacing) { return to_int32_sat(bin / spacing + 0.5f); } + +} // namespace + +void init_analysis_window(AnalysisWindow& an, const float* window, int length) { + an.response.fill(0.0f); + an.first_harmonic.fill(0); + an.first_bin.fill(0); + an.bin_count.fill(0); + an.weight_offset.fill(0); + an.weight_energy.fill(0.0f); + an.gain.fill(0.0f); + an.weights.fill(0.0f); + an.silence_first_bin.fill(0); + an.silence_bin_count.fill(0); + an.silence_norm.fill(0.0f); + int half = length / 2; + an.length = length; + an.half = half; + an.window = window; + for (int m = -256; m <= 256; m++) { + float s = 0.0f; + for (int i = 0; i < length; i++) + s = s + window[i] * tables::kCosine[static_cast(m * (i - half)) & 0x1fff]; + an.response[m + 256] = s; + } + int h = 0, offset = 0; + for (int j = 0; j < kPitchCount; j++) { + float f0 = tables::kPitchFundamental[j]; + int count = tables::kPitchHarmonicCount[j]; + an.first_harmonic[j] = h; + if (count < 1) continue; + int next = 0; + float spacing = f0 * 512.0f; // bins between harmonics + for (int k = 1;; k++) { + int first, n = 0, end; + float energy; + if (next > kFitBins - 1) { + first = next; + end = next; + energy = kTiny; + } else { + int b = next; + for (; b < kFitBins; b++) + if (k <= harmonic_of_bin(static_cast(b), spacing)) break; + if (b >= kFitBins) { + first = kFitBins; + end = kFitBins; + energy = kTiny; + } else { + first = b; + float centre = spacing * static_cast(static_cast(k)); + float* w = &an.weights[offset]; + energy = 0.0f; + for (end = b; end < kFitBins; end++) { + float bin = static_cast(end); + if (k != harmonic_of_bin(bin, spacing)) break; + float v = response_at(an, (bin - centre) * 16.0f + 256.0f); + w[n++] = v; + energy = energy + v * v; + } + energy = energy + kTiny; + } + } + an.first_bin[h] = static_cast(first); + an.bin_count[h] = static_cast(n); + an.weight_offset[h] = offset; + an.weight_energy[h] = energy; + an.gain[h] = 1.0f / energy; + offset = n + offset; + h++; + next = end; + if (k == count) break; + } + } + an.first_harmonic[kPitchCount] = h; + // silence band b (1..14): the bins i of 0..256 whose rounded i / 16 is b + for (int b = 1; b < kSilenceBands + 1; b++) { + float centre = static_cast(static_cast(b)) * 16.0f; + float s = 0.0f; + int n = 0, first = -1; + for (int i = 0; i < kSpectrumBins; i++) { + if (b != to_int32_sat(static_cast(i) * 0.0625f + 0.5f)) continue; + float v = response_at(an, (static_cast(i) - centre) * 16.0f + 256.0f); + if (first < 0) first = i; + s = s + v * v; + n++; + } + an.silence_first_bin[b - 1] = static_cast(first); + an.silence_bin_count[b - 1] = static_cast(n); + an.silence_norm[b - 1] = s; + } +} + +void analysis_spectrum(const AnalysisWindow& an, const SignalHistory& history, int center, Spectrum& out) { + int n = an.half; + const float* w = an.window; + float re[512], im[512]; + std::memset(re, 0, sizeof re); + std::memset(im, 0, sizeof im); + for (int k = 0; k < n; k++) { + re[k] = history.sample(center + k) * w[n + k]; + re[512 - n + k] = history.sample(center - n + k) * w[k]; + } + core::fft512(re, im); + for (int k = 0; k < kSpectrumBins; k++) { + out.re[k] = re[k]; + out.im[k] = im[k]; + } +} + +void harmonic_fit_cost(const AnalysisWindow& an, const Spectrum& s, float* cost, float* energy) { + float e = 0.0f; + for (int i = 0; i < kFitBins; i += 4) { + float lane[4]; + for (int j = 0; j < 4; j++) lane[j] = s.re[i + j] * s.re[i + j] + s.im[i + j] * s.im[i + j]; + e = e + lane[0]; + e = e + lane[1]; + e = e + lane[2]; + e = e + lane[3]; + } + float total = e + kTiny; + *energy = total; + float inverse = 1.0f / total; + int h = an.first_harmonic[0]; + for (int j = 0; j < kPitchCount; j++) { + int end = an.first_harmonic[j + 1]; + float explained = 0.0f; + for (; h < end; h++) { + int n = an.bin_count[h]; + float ar = 0.0f, ai = 0.0f; + if (n >= 1) { + const float* w = &an.weights[an.weight_offset[h]]; + int first = an.first_bin[h]; + for (int k = 0; k < n; k++) { + ar = ar + s.re[first + k] * w[k]; + ai = ai + w[k] * s.im[first + k]; + } + } + explained = explained + (ar * ar + ai * ai) * an.gain[h]; + } + cost[j] = 1.0f - inverse * explained; + h = end; + } +} + +void yin_difference(const SignalHistory& history, int center, const float* lags, int lag_count, int max_lag, + float* out) { + float difference[163], normalised[161]; + if (max_lag >= 0) { + int base = center + (-(max_lag / 2)) - 100; + for (int tau = 0; tau <= max_lag; tau++) { + float s = 0.0f; + for (int i = 0; i < 200; i += 4) { + float lane[4]; + for (int j = 0; j < 4; j++) { + float v = history.sample(base + i + j) - history.sample(base + tau + i + j); + lane[j] = v * v; + } + s = s + lane[0]; + s = s + lane[1]; + s = s + lane[2]; + s = s + lane[3]; + } + difference[tau] = s; + } + normalised[0] = 1.0f; + if (max_lag != 0) { + float s = 0.0f; + for (unsigned tau = 1; tau <= static_cast(max_lag); tau++) { + s = s + difference[tau]; + normalised[tau] = difference[tau] / (s / static_cast(tau) + kTiny); + } + } + } else { + normalised[0] = 1.0f; + } + for (int i = 0; i < lag_count; i++) { + float lag = lags[i]; + int k = to_int32_sat(lag); + float v; + if (max_lag > k) { + float fraction = lag - static_cast(k); + v = normalised[k] + fraction * (normalised[k + 1] - normalised[k]); + } else { + v = normalised[max_lag]; + } + out[i] = v; + } +} + +void fit_harmonics(const AnalysisWindow& an, const Spectrum& s, int pitch, int harmonic_count, float fundamental, + HarmonicFit& out) { + out = HarmonicFit{}; + std::array band_energy{}, band_error{}; + out.harmonic_count = harmonic_count; + if (harmonic_count >= 1) { + long h = an.first_harmonic[pitch]; + for (unsigned k = 1; k <= static_cast(harmonic_count); k++, h++) { + int n = an.bin_count[h]; + int band = to_int32_sat(fundamental * (static_cast(k) * 16.0f)); + band = band < 7 ? band : 7; + float ar, ai, energy; + if (n >= 1) { + const float* w = &an.weights[an.weight_offset[h]]; + int first = an.first_bin[h]; + ar = 0.0f; + ai = 0.0f; + for (int i = 0; i < n; i++) { + ar = ar + s.re[first + i] * w[i]; + ai = ai + w[i] * s.im[first + i]; + } + float g = an.gain[h]; + ar = ar * g; + ai = ai * g; + float error = 0.0f; + energy = 0.0f; + for (int i = 0; i < n; i++) { + float r = s.re[first + i], q = s.im[first + i], ww = w[i]; + float e1 = r - ar * ww; + float e2 = q - ai * ww; + error = error + (e1 * e1 + e2 * e2); + energy = energy + (r * r + q * q); + } + band_error[band] = error + band_error[band]; + band_energy[band] = energy + band_energy[band]; + out.band_has_data[band] = 1; + } else { + energy = 0.0f; + ar = an.gain[h] * energy; + ai = ar; + } + out.log2_amplitude[k - 1] = fast_log2(fast_sqrt(ar * ar + ai * ai) + kAmplitudeFloor); + float norm = an.weight_energy[h] + kMinusTiny; + norm = norm < kTiny ? kTiny : norm; + out.log2_rms[k - 1] = fast_log2(fast_sqrt(energy / norm) + kAmplitudeFloor); + } + } + for (int b = 0; b < 8; b++) { + out.band_energy[b] = band_energy[b]; + out.band_ratio[b] = out.band_has_data[b] ? band_error[b] / (band_energy[b] + kEnergyFloor) : 0.0f; + } +} + +void silence_amplitudes(const AnalysisWindow& an, const Spectrum& s, float* out) { + for (int b = 0; b < kSilenceBands; b++) { + int n = an.silence_bin_count[b]; + float sum = 0.0f; + if (n >= 1) { + int first = an.silence_first_bin[b]; + for (int k = 0; k < n; k++) sum = sum + (s.re[first + k] * s.re[first + k] + s.im[first + k] * s.im[first + k]); + } + out[b] = fast_log2(fast_sqrt(sum / an.silence_norm[b]) + kAmplitudeFloor); + } +} + +} // namespace halfrate::enc diff --git a/mbe/analysis.h b/mbe/analysis.h new file mode 100644 index 0000000..e18845d --- /dev/null +++ b/mbe/analysis.h @@ -0,0 +1,80 @@ +// Spectral analysis of the encoder: the analysis windows with their per-pitch harmonic tables, the windowed +// spectrum, the per-pitch harmonic fit cost, the YIN difference function, the harmonic fit at one pitch, and the +// band amplitudes of a silent frame. +#pragma once +#include +#include + +namespace halfrate::enc { + +constexpr int kPitchCount = 120; // pitch grid = pitch indices of the codebook +constexpr int kSpectrumBins = 257; // bins 0..256 of the 512-point FFT +constexpr int kFitBins = 244; // bins the harmonic fits use (0..243, up to 3.8 kHz) +constexpr int kGridHarmonics = 3097; // sum of the harmonic counts of the grid +constexpr int kGridWeights = 27683; // window weights of all grid harmonics +constexpr int kSilenceBands = 14; // 250 Hz bands of a silent frame +constexpr int kMaxFitHarmonics = 56; + +// The first 257 bins of a windowed 512-point FFT. +struct Spectrum { + std::array re; + std::array im; +}; + +// One analysis window and what is precomputed from it: the window's transform sampled every 1/16 bin, and for +// each grid pitch the FFT bins of each harmonic with their weights (the window response at the bin's distance from +// the harmonic). Harmonics of all pitches are numbered together: pitch j has harmonics first_harmonic[j] .. +// first_harmonic[j + 1] - 1. +struct AnalysisWindow { + int32_t length = 0; + int32_t half = 0; + const float* window = nullptr; + std::array response{}; // window transform at (index - 256) / 16 bins + std::array first_harmonic{}; + std::array first_bin{}; + std::array bin_count{}; + std::array weight_offset{}; // into weights + std::array weight_energy{}; // sum of squared weights (+ 1e-12) + std::array gain{}; // 1 / weight_energy + std::array weights{}; + std::array silence_first_bin{}; + std::array silence_bin_count{}; + std::array silence_norm{}; // sum of squared window weights of the band +}; + +// The harmonic fit of one frame at one pitch. +struct HarmonicFit { + int32_t harmonic_count = 0; + std::array band_ratio{}; // per 500 Hz band: fit residual / band energy (0 if no data) + std::array band_energy{}; + std::array band_has_data{}; + std::array log2_amplitude{}; // log2 of the fitted harmonic amplitude + std::array log2_rms{}; // log2 rms of the spectrum around the harmonic +}; + +// Builds the tables of window[length] for the grid (the codebook's pitch table). +void init_analysis_window(AnalysisWindow& an, const float* window, int length); + +// Reads input samples by index (the analysis history, see encoder.h). +struct SignalHistory; + +// Windowed spectrum of the samples around center (the window's second half from center on, its first half +// before it). +void analysis_spectrum(const AnalysisWindow& an, const SignalHistory& history, int center, Spectrum& out); + +// Per grid pitch: 1 - (energy the pitch's harmonics explain) / (total energy). *energy gets the total energy of +// the fitted bins (+ 1e-12). +void harmonic_fit_cost(const AnalysisWindow& an, const Spectrum& s, float* cost, float* energy); + +// YIN cumulative-mean-normalised difference (200-sample frames, lags 0..max_lag) at the fractional lags given. +void yin_difference(const SignalHistory& history, int center, const float* lags, int lag_count, int max_lag, + float* out); + +// Fits the harmonic_count harmonics of grid pitch `pitch` (fundamental in cycles per sample) to the spectrum. +void fit_harmonics(const AnalysisWindow& an, const Spectrum& s, int pitch, int harmonic_count, float fundamental, + HarmonicFit& out); + +// log2 rms amplitudes of the 14 silence bands. +void silence_amplitudes(const AnalysisWindow& an, const Spectrum& s, float* out); + +} // namespace halfrate::enc diff --git a/mbe/api.cpp b/mbe/api.cpp new file mode 100644 index 0000000..8bc84a5 --- /dev/null +++ b/mbe/api.cpp @@ -0,0 +1,31 @@ +// The C API (include/halfrate.h). +#include "halfrate.h" + +#include + +#include "fec.h" +#include "frame.h" + +#ifndef HR_VERSION +#define HR_VERSION "unknown" +#endif + +using namespace halfrate; + +extern "C" { + +void hr_fec_encode(const uint8_t* frame, uint8_t* air) { core::fec_encode_frame(frame, air); } + +int hr_fec_decode(const uint8_t* air, uint8_t* frame) { + core::FecErrors errors; + if (core::fec_decode_frame(air, frame, &errors) < 0) return -1; + return errors.first_word + errors.second_word; +} + +void hr_bits_from_frame(const uint8_t* frame, uint8_t* bits) { core::bits_from_bytes(frame, bits); } + +void hr_frame_from_bits(const uint8_t* bits, uint8_t* frame) { core::bytes_from_bits(bits, frame); } + +const char* hr_version(void) { return "halfrate " HR_VERSION; } + +} // extern "C" diff --git a/mbe/codebook.cpp b/mbe/codebook.cpp new file mode 100644 index 0000000..b9abde8 --- /dev/null +++ b/mbe/codebook.cpp @@ -0,0 +1,2481 @@ +// Generated table data. Do not edit. +#include "tables.h" + +namespace halfrate::tables { + +// Fundamental frequency (cycles per sample) for each pitch index 0..119. +const float kPitchFundamental[120] = { + 0x1.995cc8p-5f, 0x1.932b56p-5f, 0x1.8d130ep-5f, 0x1.8713fp-5f, 0x1.811b1ep-5f, 0x1.7b480ap-5f, + 0x1.75903ap-5f, 0x1.6fdc9cp-5f, 0x1.6a4ca4p-5f, 0x1.64d3cp-5f, 0x1.5f6fd2p-5f, 0x1.5a1448p-5f, + 0x1.54dc66p-5f, 0x1.4fb332p-5f, 0x1.4a98aap-5f, 0x1.459b8p-5f, 0x1.40b34ep-5f, 0x1.3be016p-5f, + 0x1.370ef6p-5f, 0x1.325f64p-5f, 0x1.2dc8fcp-5f, 0x1.29307ap-5f, 0x1.24b77p-5f, 0x1.20578ep-5f, + 0x1.1c0874p-5f, 0x1.17b742p-5f, 0x1.138bcep-5f, 0x1.0f6cfp-5f, 0x1.0b588ep-5f, 0x1.075b3ep-5f, + 0x1.0370cep-5f, 0x1.fde722p-6f, 0x1.f61ed6p-6f, 0x1.ee88ep-6f, 0x1.e71044p-6f, 0x1.df97aap-6f, + 0x1.d85dfap-6f, 0x1.d13944p-6f, 0x1.ca31e8p-6f, 0x1.c32ebep-6f, 0x1.bc5deap-6f, 0x1.b5a64p-6f, + 0x1.aef6f8p-6f, 0x1.a871a4p-6f, 0x1.a209aap-6f, 0x1.9bb6aap-6f, 0x1.95704p-6f, 0x1.8f4f94p-6f, + 0x1.893fbp-6f, 0x1.834092p-6f, 0x1.7d6734p-6f, 0x1.779e9ep-6f, 0x1.71f794p-6f, 0x1.6c508cp-6f, + 0x1.66cf42p-6f, 0x1.616724p-6f, 0x1.5bff04p-6f, 0x1.56c0d6p-6f, 0x1.5197a2p-6f, 0x1.4c7f34p-6f, + 0x1.4766c6p-6f, 0x1.4280aep-6f, 0x1.3d9ec8p-6f, 0x1.38d60ap-6f, 0x1.3419e4p-6f, 0x1.2f6e82p-6f, + 0x1.2ae07ep-6f, 0x1.2656acp-6f, 0x1.21ee68p-6f, 0x1.1d96eap-6f, 0x1.195034p-6f, 0x1.1511ep-6f, + 0x1.10e886p-6f, 0x1.0cd856p-6f, 0x1.08d08ap-6f, 0x1.04e1e8p-6f, 0x1.00ffdap-6f, 0x1.f8fcd6p-7f, + 0x1.f151e8p-7f, 0x1.e9c022p-7f, 0x1.e260b2p-7f, 0x1.db0142p-7f, 0x1.d3d428p-7f, 0x1.ccc038p-7f, + 0x1.c5bd0ep-7f, 0x1.bed31p-7f, 0x1.b81302p-7f, 0x1.b16c1ep-7f, 0x1.aacd9ep-7f, 0x1.a46174p-7f, + 0x1.9dfdacp-7f, 0x1.97c3d6p-7f, 0x1.91819ep-7f, 0x1.8b71b8p-7f, 0x1.858362p-7f, 0x1.7f7be2p-7f, + 0x1.79bfep-7f, 0x1.7403dep-7f, 0x1.6e71cep-7f, 0x1.68cef6p-7f, 0x1.635e74p-7f, 0x1.5dfeb8p-7f, + 0x1.589efep-7f, 0x1.537198p-7f, 0x1.4e4c94p-7f, 0x1.495182p-7f, 0x1.443d46p-7f, 0x1.3f63c4p-7f, + 0x1.3a92a4p-7f, 0x1.35c182p-7f, 0x1.3122b8p-7f, 0x1.2c8c5p-7f, 0x1.27fe4cp-7f, 0x1.23810ep-7f, + 0x1.1f1cfcp-7f, 0x1.1ae2dap-7f, 0x1.168f8ep-7f, 0x1.126e98p-7f, 0x1.0e4dap-7f, 0x1.0a3d7p-7f, +}; + +// Number of harmonics for each pitch index 0..119. +const int32_t kPitchHarmonicCount[120] = { + 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, + 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, + 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, + 23, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 30, + 31, 31, 32, 32, 33, 33, 34, 34, 35, 36, 36, 37, 37, 38, 38, 39, 40, 40, 41, 42, + 42, 43, 43, 44, 45, 46, 46, 47, 48, 48, 49, 50, 51, 52, 52, 53, 54, 55, 56, 56, +}; + +// Voicing decision (1 voiced, 0 unvoiced) of each of 8 frequency bands, per voicing index. +const int32_t kVoicingCodebook[32][8] = { + {1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 0}, + {1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 0, 0}, + {1, 1, 0, 1, 1, 1, 1, 1}, + {1, 1, 1, 0, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 0, 1, 1}, + {1, 1, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 1, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 1}, + {1, 1, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0}, +}; + +// Split of L harmonics into 4 blocks for the shape transform: block sizes per L = 0..56. +const int32_t kBandSizes[57][4] = { + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {2, 2, 2, 3}, + {2, 2, 3, 3}, + {2, 3, 3, 3}, + {2, 3, 3, 4}, + {3, 3, 3, 4}, + {3, 3, 4, 4}, + {3, 3, 4, 5}, + {3, 4, 4, 5}, + {3, 4, 5, 5}, + {4, 4, 5, 5}, + {4, 4, 5, 6}, + {4, 4, 6, 6}, + {4, 5, 6, 6}, + {4, 5, 6, 7}, + {5, 5, 6, 7}, + {5, 5, 7, 7}, + {5, 6, 7, 7}, + {5, 6, 7, 8}, + {5, 6, 8, 8}, + {6, 6, 8, 8}, + {6, 6, 8, 9}, + {6, 7, 8, 9}, + {6, 7, 9, 9}, + {6, 7, 9, 10}, + {7, 7, 9, 10}, + {7, 8, 9, 10}, + {7, 8, 10, 10}, + {7, 8, 10, 11}, + {8, 8, 10, 11}, + {8, 9, 10, 11}, + {8, 9, 11, 11}, + {8, 9, 11, 12}, + {8, 9, 11, 13}, + {8, 9, 12, 13}, + {8, 10, 12, 13}, + {9, 10, 12, 13}, + {9, 10, 12, 14}, + {9, 10, 13, 14}, + {9, 11, 13, 14}, + {10, 11, 13, 14}, + {10, 11, 13, 15}, + {10, 11, 14, 15}, + {10, 12, 14, 15}, + {10, 12, 14, 16}, + {11, 12, 14, 16}, + {11, 12, 15, 16}, + {11, 12, 15, 17}, + {11, 13, 15, 17}, +}; + +// Gain codebook (log2), per gain index. +const float kGainCodebook[32] = { + -0x1p+1f, -0x1.570a3ep-1f, 0x1.311772p-2f, 0x1.53d428p-1f, 0x1.096dap+0f, 0x1.7029aep+0f, + 0x1.e3dc16p+0f, 0x1.1d2e1ep+1f, 0x1.3d3892p+1f, 0x1.557214p+1f, 0x1.65954ep+1f, 0x1.72566p+1f, + 0x1.82a4p+1f, 0x1.91bd3p+1f, 0x1.9e68fep+1f, 0x1.a949fap+1f, 0x1.b757cep+1f, 0x1.c932cep+1f, + 0x1.d92bd4p+1f, 0x1.e84f34p+1f, 0x1.f5e11ap+1f, 0x1.0170bp+2f, 0x1.07e88ep+2f, 0x1.0e9c52p+2f, + 0x1.17b768p+2f, 0x1.22cbfcp+2f, 0x1.2d4aep+2f, 0x1.365408p+2f, 0x1.43a1e8p+2f, 0x1.54e4dap+2f, + 0x1.71c3e4p+2f, 0x1.b7f7bep+2f, +}; + +// Shape vector, coefficients 1..3 of the 8-point transform, per index (512 entries). +const float kShapeLowCodebook[512][3] = { + {0x1.0d5714p-1f, -0x1.5073dep-2f, -0x1.380a5ap-2f}, + {0x1.c3a10ap-2f, -0x1.3666ecp-2f, -0x1.9be1a8p-3f}, + {0x1.07e8ccp+0f, -0x1.4c8606p-2f, -0x1.96bca6p-2f}, + {0x1.adeca2p-1f, -0x1.68612p-2f, -0x1.cc9d16p-3f}, + {0x1.17824ep-2f, -0x1.68b08ep-3f, -0x1.9510d4p-4f}, + {0x1.c58ff8p-3f, -0x1.47c5acp-3f, -0x1.f3ecccp-5f}, + {0x1.fc78eap-2f, -0x1.b12664p-3f, 0x1.8385c6p-5f}, + {0x1.b28fap-2f, -0x1.ca3e7ep-3f, 0x1.1e5bp-4f}, + {0x1.0ee136p-2f, -0x1.69d5e4p-2f, -0x1.526fe8p-2f}, + {0x1.1837b4p-2f, -0x1.03137cp-2f, -0x1.003f2ep-2f}, + {0x1.f028e4p-2f, -0x1.30c522p-2f, -0x1.23066p-4f}, + {0x1.a4ac6cp-2f, -0x1.ccb85ap-3f, -0x1.5c26dcp-4f}, + {0x1.43bd5ap-5f, -0x1.02f944p-2f, -0x1.d79076p-4f}, + {0x1.1d755cp-6f, -0x1.2fa2aep-2f, -0x1.782f52p-5f}, + {0x1.cd080cp-3f, -0x1.cb8306p-3f, 0x1.36545p-5f}, + {0x1.77a7p-3f, -0x1.0abe6ap-2f, 0x1.9d9f4ep-5f}, + {0x1.3c1ce6p-2f, -0x1.2bd902p-4f, -0x1.9f9f02p-2f}, + {0x1.b47ae2p-3f, -0x1.a048ep-4f, -0x1.55347ap-2f}, + {0x1.3c47c4p-1f, -0x1.193038p-3f, -0x1.b5989ep-3f}, + {0x1.075d14p-1f, -0x1.030a92p-3f, -0x1.5c93eap-3f}, + {0x1.0a4228p-3f, -0x1.3b352ap-4f, -0x1.d59cdp-3f}, + {0x1.f9c62ap-5f, -0x1.bb6dcap-4f, -0x1.a18f82p-3f}, + {0x1.f4ae42p-3f, -0x1.c2f1eep-4f, -0x1.a76fbp-5f}, + {0x1.d7f738p-3f, -0x1.37e5eap-4f, -0x1.cddd6ep-6f}, + {0x1.ea2f48p-5f, -0x1.04b48ep-2f, -0x1.201abep-1f}, + {0x1.7d1782p-7f, -0x1.14efccp-3f, -0x1.bb2d9p-2f}, + {0x1.a817fcp-3f, -0x1.37cdccp-3f, -0x1.2fe79ep-3f}, + {0x1.43be66p-3f, -0x1.07c84cp-3f, -0x1.f4538ep-4f}, + {-0x1.105d96p-2f, -0x1.286e7ep-3f, -0x1.996206p-3f}, + {-0x1.6d08d4p-2f, -0x1.a34ebap-3f, -0x1.4070b8p-3f}, + {0x1.53bd16p-12f, -0x1.1dcbdep-3f, -0x1.1043e6p-4f}, + {0x1.eeed8ap-10f, -0x1.5d4cfep-3f, -0x1.9a0276p-6f}, + {0x1.9c953ap-2f, -0x1.29b77cp-1f, -0x1.19378ep-2f}, + {0x1.87c286p-3f, -0x1.14a6cap-1f, -0x1.8b588ep-3f}, + {0x1.440d4ep-1f, -0x1.9b0b3ap-2f, -0x1.b2e59ap-8f}, + {0x1.e2645ep-2f, -0x1.da426cp-2f, 0x1.f7b7c8p-5f}, + {0x1.6f3d3ap-5f, -0x1.c102bcp-2f, 0x1.11e216p-5f}, + {0x1.fc547ap-7f, -0x1.143612p-1f, -0x1.b8561ep-8f}, + {0x1.584988p-2f, -0x1.67be12p-2f, 0x1.b6733ep-3f}, + {0x1.eb73d2p-3f, -0x1.85f9ep-2f, 0x1.42ee42p-3f}, + {0x1.63f39ep-2f, -0x1.cda102p-1f, -0x1.607a28p-1f}, + {0x1.066b1ep-4f, -0x1.a74c2cp-1f, -0x1.f7e62ep-2f}, + {0x1.365cf6p-2f, -0x1.964778p-2f, -0x1.bc31ep-4f}, + {0x1.e27d02p-3f, -0x1.c8d434p-2f, 0x1.a5dafp-8f}, + {-0x1.e54d62p-3f, -0x1.4e18acp-1f, -0x1.158b82p-3f}, + {-0x1.ac52e8p-2f, -0x1.9605eep-1f, -0x1.1c8216p-5f}, + {-0x1.39713ap-5f, -0x1.08b22p-1f, 0x1.183fd6p-2f}, + {-0x1.328954p-5f, -0x1.ea98eep-1f, 0x1.b7ce52p-3f}, + {0x1.f8d2e6p-5f, -0x1.e7e6b4p-3f, -0x1.e5c0bap-3f}, + {-0x1.c8eacp-7f, -0x1.e2b8c8p-3f, -0x1.a373f4p-3f}, + {0x1.254d62p-2f, -0x1.af30a4p-3f, -0x1.e4c0ep-6f}, + {0x1.07d6fap-2f, -0x1.0c1fp-2f, -0x1.cf638p-5f}, + {-0x1.e3066p-3f, -0x1.3e37dep-2f, -0x1.523898p-3f}, + {-0x1.56fcdep-2f, -0x1.8b2182p-2f, -0x1.943288p-3f}, + {0x1.849668p-4f, -0x1.eddce8p-3f, 0x1.e453d2p-5f}, + {0x1.ecf85p-5f, -0x1.ce9c46p-3f, 0x1.fe32ap-6f}, + {-0x1.346994p-2f, -0x1.39e6eep-2f, -0x1.c8e5c4p-2f}, + {-0x1.2c929ap-2f, -0x1.021f6cp-1f, -0x1.b82906p-2f}, + {-0x1.c33f86p-5f, -0x1.841c82p-2f, -0x1.01d10cp-3f}, + {-0x1.d8d152p-4f, -0x1.800218p-2f, -0x1.eb0532p-5f}, + {-0x1.8e0aa6p-1f, -0x1.2f2ffep-1f, -0x1.b8ab0cp-4f}, + {-0x1.e6a7fp-1f, -0x1.c9a65p-1f, -0x1.743fa2p-3f}, + {-0x1.09a0aep-2f, -0x1.963f58p-2f, 0x1.5360dp-7f}, + {-0x1.79c23cp-2f, -0x1.cbcd78p-2f, 0x1.39bed4p-5f}, + {0x1.1e6ea8p-2f, -0x1.02d9dp-4f, -0x1.7a1e3ep-3f}, + {0x1.05643p-2f, -0x1.1372a4p-4f, -0x1.f01fb8p-4f}, + {0x1.d56f76p-2f, -0x1.a91212p-4f, 0x1.4a1ad6p-7f}, + {0x1.bfb97cp-2f, -0x1.7add16p-4f, -0x1.fc5cdep-6f}, + {0x1.50f51ap-4f, -0x1.cb923ap-6f, -0x1.5204bp-5f}, + {0x1.782d38p-5f, -0x1.a7ae9ap-5f, -0x1.ee0f3cp-6f}, + {0x1.15a816p-2f, -0x1.654718p-5f, 0x1.cb19a4p-4f}, + {0x1.f99cbep-3f, -0x1.0b5ccp-4f, 0x1.afdda8p-4f}, + {0x1.cf95d4p-5f, -0x1.e265fp-4f, -0x1.236544p-3f}, + {0x1.e1e2dep-5f, -0x1.abb236p-4f, -0x1.97fe8ep-4f}, + {0x1.b5d2dp-3f, -0x1.caa54p-4f, 0x1.0027d8p-5f}, + {0x1.801c5p-3f, -0x1.201cd6p-4f, 0x1.83c6cap-7f}, + {-0x1.7c50cep-3f, -0x1.4c35cep-4f, -0x1.2e4c0ep-4f}, + {-0x1.107faap-2f, -0x1.2fa616p-4f, -0x1.5daceep-4f}, + {-0x1.e12a52p-6f, -0x1.7cd898p-5f, 0x1.feaf68p-4f}, + {-0x1.1cb89ep-6f, -0x1.a56798p-4f, 0x1.1fb506p-3f}, + {0x1.d5cfaap-4f, 0x1.7bdad8p-4f, -0x1.f4445ap-3f}, + {0x1.2ab042p-4f, 0x1.01a7ap-7f, -0x1.da1016p-3f}, + {0x1.1480a6p-2f, 0x1.04a948p-5f, -0x1.81e04p-4f}, + {0x1.048238p-2f, 0x1.9667b6p-6f, -0x1.9cc964p-5f}, + {-0x1.7696e6p-3f, 0x1.625e9ap-6f, -0x1.590c92p-3f}, + {-0x1.ce91c8p-3f, -0x1.4b407p-7f, -0x1.0b0186p-3f}, + {0x1.4868bap-5f, 0x1.c9bc78p-7f, 0x1.069a4ep-6f}, + {0x1.7a02fcp-10f, 0x1.59bc34p-7f, 0x1.0ddc62p-5f}, + {-0x1.265f1p-2f, -0x1.27fa1ap-5f, -0x1.2febdp-2f}, + {-0x1.5451fcp-2f, -0x1.bde614p-4f, -0x1.5e68ap-2f}, + {0x1.a02752p-7f, 0x1.7778dep-6f, -0x1.ae1694p-5f}, + {-0x1.4d423ep-5f, -0x1.d92b8p-10f, -0x1.9e16d6p-5f}, + {-0x1.6fe21ep-1f, -0x1.f5a102p-5f, -0x1.1d82fep-2f}, + {-0x1.c22728p-1f, -0x1.b56dap-3f, -0x1.36cacep-2f}, + {-0x1.df70dep-3f, -0x1.0be836p-4f, 0x1.c0767ep-7f}, + {-0x1.1ff8ecp-2f, -0x1.37dd88p-4f, 0x1.7fa1ap-5f}, + {0x1.22bf98p-3f, -0x1.8ca794p-3f, -0x1.c84514p-5f}, + {0x1.9ae70cp-4f, -0x1.4a2ec2p-3f, -0x1.024d4cp-4f}, + {0x1.103d58p-2f, -0x1.0fdda8p-3f, 0x1.405814p-4f}, + {0x1.f55c52p-3f, -0x1.1e42e2p-3f, 0x1.f4374p-4f}, + {-0x1.f2e6a8p-4f, -0x1.709742p-3f, 0x1.03f2d4p-5f}, + {-0x1.7b88p-3f, -0x1.b64b66p-3f, 0x1.28d434p-6f}, + {0x1.812382p-5f, -0x1.3b4fe8p-3f, 0x1.be9a7p-3f}, + {0x1.8385c6p-5f, -0x1.7fcc9ep-3f, 0x1.20e27ep-2f}, + {-0x1.c319c6p-6f, -0x1.a9d94ep-2f, -0x1.55da6ap-2f}, + {-0x1.01d084p-3f, -0x1.568512p-2f, -0x1.2948dcp-2f}, + {-0x1.f56218p-6f, -0x1.870004p-3f, 0x1.8f2becp-4f}, + {-0x1.c20924p-5f, -0x1.adf938p-3f, 0x1.4595bcp-3f}, + {-0x1.03b2bcp-1f, -0x1.2efa1ep-2f, -0x1.bcca7p-3f}, + {-0x1.29d8e8p-1f, -0x1.9cdee4p-2f, -0x1.abe6a4p-3f}, + {-0x1.32e98ap-2f, -0x1.28a19cp-2f, 0x1.303b3ep-2f}, + {-0x1.73e294p-2f, -0x1.736c58p-2f, 0x1.bf0176p-2f}, + {-0x1.fe78e2p-4f, -0x1.58e21ap-5f, -0x1.418efcp-3f}, + {-0x1.4ae5bcp-3f, -0x1.7c4c16p-4f, -0x1.781626p-3f}, + {0x1.5a31a4p-4f, -0x1.9a7d24p-4f, -0x1.d8622cp-11f}, + {0x1.c7ecfep-5f, -0x1.174eecp-3f, 0x1.0c6716p-5f}, + {-0x1.1715a4p-1f, -0x1.94ea8ep-3f, -0x1.b88872p-6f}, + {-0x1.5356dap-1f, -0x1.7042d8p-3f, 0x1.b0d952p-6f}, + {-0x1.531d2ep-3f, -0x1.30f94cp-3f, 0x1.723466p-4f}, + {-0x1.ed19dep-3f, -0x1.766f94p-3f, 0x1.b00582p-4f}, + {-0x1.2712c2p-1f, -0x1.7019bp-2f, -0x1.d3ceeap-2f}, + {-0x1.6d46b2p-1f, -0x1.1bba56p-1f, -0x1.e82e44p-2f}, + {-0x1.1a3e3ap-2f, -0x1.ca03c4p-3f, -0x1.a6937ep-5f}, + {-0x1.702108p-2f, -0x1.d897a6p-3f, -0x1.ba776p-6f}, + {-0x1.4855cap+0f, -0x1.23a472p-2f, -0x1.deb4a6p-3f}, + {-0x1.0f7b5ap+0f, -0x1.998244p-2f, -0x1.2019f4p-1f}, + {-0x1.be707ep-1f, -0x1.16badp-2f, 0x1.083558p-6f}, + {-0x1.7eefa2p-1f, -0x1.514f48p-2f, 0x1.1b5632p-2f}, + {0x1.494292p-1f, 0x1.7a43fep-5f, -0x1.51f5bep-1f}, + {0x1.79f5ep-1f, -0x1.05d314p-3f, -0x1.bc1df4p-2f}, + {0x1.287768p+0f, 0x1.a2f48cp-6f, -0x1.6c3fc4p-3f}, + {0x1.f31e3ap-1f, -0x1.349386p-7f, -0x1.cc21e2p-4f}, + {0x1.ac0bdcp-2f, 0x1.0c36dap-5f, -0x1.fe22e6p-4f}, + {0x1.86937ep-2f, -0x1.98288p-10f, -0x1.5e3972p-4f}, + {0x1.895cp-1f, 0x1.cb72c6p-5f, 0x1.86a7fp-4f}, + {0x1.5c297cp-1f, 0x1.aa454ep-5f, 0x1.37f28p-3f}, + {0x1.e489d2p-2f, 0x1.9b90eap-7f, -0x1.0e8ff4p-2f}, + {0x1.616fcap-2f, 0x1.2c0c62p-5f, -0x1.fd73cap-3f}, + {0x1.7e12e8p-1f, -0x1.a80496p-6f, -0x1.b2617cp-4f}, + {0x1.49e42ep-1f, -0x1.dd3bbp-5f, -0x1.85aa2ep-4f}, + {0x1.7cc5b8p-3f, -0x1.6c376p-6f, -0x1.20ee8ep-4f}, + {0x1.2b25b4p-3f, -0x1.38ef34p-7f, -0x1.da1448p-5f}, + {0x1.5a9c9ap-2f, 0x1.aab474p-7f, 0x1.1e8f6cp-4f}, + {0x1.3224eep-2f, 0x1.84534cp-5f, 0x1.aee2p-5f}, + {0x1.624e5ap-2f, 0x1.06673p-2f, -0x1.856324p-2f}, + {0x1.409b3p-2f, 0x1.4f8162p-3f, -0x1.418a44p-2f}, + {0x1.7034f4p-1f, 0x1.a65492p-4f, -0x1.02b628p-2f}, + {0x1.3e2bf2p-1f, 0x1.611f5p-3f, -0x1.0f8b58p-2f}, + {0x1.ec76d2p-3f, 0x1.acc922p-4f, -0x1.9ee35p-3f}, + {0x1.a7d34ep-3f, 0x1.1dfcap-3f, -0x1.1aa822p-3f}, + {0x1.708d8ep-2f, 0x1.9ed07p-4f, -0x1.b226c4p-5f}, + {0x1.45c076p-2f, 0x1.01d192p-3f, -0x1.c8eacp-9f}, + {0x1.34202ep-3f, 0x1.9b64ep-5f, -0x1.a2f988p-2f}, + {0x1.8290eep-3f, 0x1.7865d8p-4f, -0x1.4d8cf4p-2f}, + {0x1.56f5cap-2f, 0x1.dcbddcp-6f, -0x1.93cff6p-4f}, + {0x1.4c4bd4p-2f, 0x1.0303cp-6f, -0x1.1550cap-3f}, + {-0x1.5c358ap-5f, 0x1.3cc294p-5f, -0x1.ab1466p-3f}, + {-0x1.53faf4p-4f, 0x1.8420f6p-4f, -0x1.64766cp-3f}, + {0x1.8430b2p-4f, 0x1.a47778p-4f, -0x1.a515cep-6f}, + {0x1.033616p-4f, 0x1.e6351ep-4f, -0x1.29cbacp-14f}, + {0x1.6c8216p-2f, -0x1.1d2956p-3f, -0x1.889ca2p-3f}, + {0x1.922af6p-2f, -0x1.b01c92p-4f, -0x1.0e8c04p-3f}, + {0x1.53cd9ap-1f, -0x1.a3137cp-3f, -0x1.ffde72p-6f}, + {0x1.3800cap-1f, -0x1.2ce14p-3f, 0x1.461522p-4f}, + {0x1.36ffc2p-3f, -0x1.100ffep-3f, -0x1.d2f1aap-8f}, + {0x1.2bd5dcp-3f, -0x1.4b9b24p-3f, 0x1.9702e6p-6f}, + {0x1.9a22f6p-2f, -0x1.14eecp-3f, 0x1.dbba56p-3f}, + {0x1.4cbab6p-2f, -0x1.dd9d34p-4f, 0x1.038a7ep-2f}, + {0x1.5a3f46p-3f, -0x1.b8972p-3f, -0x1.7c1df4p-3f}, + {0x1.0789e8p-3f, -0x1.83e1p-3f, -0x1.48405cp-3f}, + {0x1.6cbe1ep-2f, -0x1.df33p-4f, -0x1.3a6acap-5f}, + {0x1.5f1844p-2f, -0x1.2851a8p-3f, 0x1.4c0592p-6f}, + {-0x1.0c78eap-4f, -0x1.9ee914p-3f, -0x1.65e46p-5f}, + {-0x1.fd1dcep-4f, -0x1.0a786cp-2f, -0x1.21c044p-5f}, + {0x1.54e2bp-4f, -0x1.e195ccp-3f, 0x1.39f5ep-3f}, + {0x1.7aeddcp-5f, -0x1.3d09e2p-2f, 0x1.870da6p-3f}, + {0x1.7fc3b4p-3f, -0x1.0ba626p-7f, -0x1.96ae7ep-3f}, + {0x1.85f0f6p-3f, -0x1.325d4ap-6f, -0x1.184902p-3f}, + {0x1.978facp-2f, -0x1.a5119cp-6f, -0x1.e8c47ap-8f}, + {0x1.634656p-2f, -0x1.6cacd2p-6f, -0x1.5681ecp-6f}, + {-0x1.818c5cp-5f, -0x1.5ebc84p-4f, -0x1.4a73f8p-4f}, + {-0x1.1493p-4f, -0x1.082278p-3f, -0x1.e9a0aep-4f}, + {0x1.7d1aa8p-3f, -0x1.13b5cp-6f, 0x1.1ec7p-4f}, + {0x1.7fb8b2p-3f, 0x1.18b502p-6f, 0x1.37164cp-4f}, + {-0x1.cd7e02p-4f, -0x1.32a6bp-5f, -0x1.321e6p-2f}, + {-0x1.17a894p-4f, -0x1.d50226p-4f, -0x1.102c9p-2f}, + {0x1.2e19bap-3f, -0x1.4cb9ecp-5f, -0x1.c07eep-7f}, + {0x1.108e58p-3f, -0x1.016df4p-4f, -0x1.0b5ccp-5f}, + {-0x1.aa9196p-2f, -0x1.545416p-5f, -0x1.002e24p-3f}, + {-0x1.02bb88p-1f, -0x1.6a077p-5f, -0x1.42de88p-3f}, + {-0x1.3ba98ep-3f, -0x1.33a25ap-4f, 0x1.9d6aep-5f}, + {-0x1.2f2d8p-3f, -0x1.e937d2p-5f, 0x1.f1bac2p-4f}, + {0x1.f6540cp-2f, 0x1.42e2b8p-3f, -0x1.c714fcp-3f}, + {0x1.bf2e48p-2f, 0x1.ed9168p-4f, -0x1.a59ea6p-3f}, + {0x1.82511ap-1f, 0x1.13c968p-2f, 0x1.774688p-5f}, + {0x1.4a4788p-1f, 0x1.1672fcp-2f, 0x1.c8d9fap-7f}, + {0x1.e56c5p-3f, 0x1.d86b9cp-4f, -0x1.b10342p-6f}, + {0x1.a39ffep-3f, 0x1.efb2aap-4f, -0x1.17df1ap-7f}, + {0x1.893708p-2f, 0x1.3b50f4p-3f, 0x1.5fc548p-3f}, + {0x1.8a4442p-2f, 0x1.c6cebcp-3f, 0x1.eaf816p-3f}, + {0x1.95faa8p-3f, 0x1.2ae4bp-4f, -0x1.bb19e8p-4f}, + {0x1.2edcc2p-3f, 0x1.3225b8p-4f, -0x1.f9346ap-4f}, + {0x1.904fb2p-2f, 0x1.340a28p-4f, 0x1.4f2aep-4f}, + {0x1.5dd26cp-2f, 0x1.6e33fp-4f, 0x1.1c37a4p-4f}, + {-0x1.bb2788p-9f, 0x1.470da6p-3f, -0x1.0691eap-6f}, + {-0x1.659afap-5f, 0x1.a7a638p-3f, -0x1.4da6e8p-5f}, + {0x1.1588e4p-3f, 0x1.b9a5a8p-4f, 0x1.6f3a14p-3f}, + {0x1.4c20d6p-4f, 0x1.ea2e3cp-4f, 0x1.64edf6p-3f}, + {0x1.8a8544p-3f, 0x1.99f16cp-2f, -0x1.5e1c9cp-2f}, + {0x1.5e9c02p-3f, 0x1.23c254p-2f, -0x1.c5aa2ep-3f}, + {0x1.82dfd6p-2f, 0x1.6fb48p-2f, -0x1.3651bp-3f}, + {0x1.a4eadp-2f, 0x1.31134p-2f, -0x1.98acap-4f}, + {-0x1.49a566p-7f, 0x1.0c2c1cp-2f, -0x1.32502ep-3f}, + {-0x1.b9dd3cp-4f, 0x1.26a982p-2f, -0x1.df2884p-4f}, + {0x1.439714p-3f, 0x1.ad855ap-3f, 0x1.3f7058p-4f}, + {0x1.c15f46p-4f, 0x1.dbb16cp-3f, 0x1.69003ep-4f}, + {0x1.6df3fap-11f, 0x1.acc144p-3f, -0x1.94b168p-2f}, + {-0x1.8115ep-4f, 0x1.d7b31p-3f, -0x1.1ea572p-2f}, + {0x1.194d94p-3f, 0x1.d8d824p-3f, -0x1.fc6002p-4f}, + {0x1.a62026p-4f, 0x1.55b814p-3f, -0x1.9b2e5ap-4f}, + {-0x1.38612p-2f, 0x1.38c08cp-2f, -0x1.688052p-3f}, + {-0x1.b02d9cp-2f, 0x1.593a72p-2f, -0x1.2c560cp-2f}, + {-0x1.f2a9d6p-4f, 0x1.7b224ap-3f, 0x1.8a2878p-5f}, + {-0x1.5e5082p-3f, 0x1.9a3d2ep-3f, 0x1.b0a2cap-5f}, + {0x1.caf038p-3f, -0x1.5dbb9cp-7f, -0x1.433508p-6f}, + {0x1.9a251p-3f, -0x1.4a6a88p-6f, 0x1.d755bcp-10f}, + {0x1.87ed84p-2f, 0x1.091c08p-5f, 0x1.4b1704p-3f}, + {0x1.61ed18p-2f, -0x1.42d8c2p-6f, 0x1.50cbbp-3f}, + {0x1.e2329p-6f, 0x1.70b8dp-5f, 0x1.24f00ep-4f}, + {0x1.05a708p-5f, 0x1.64628p-7f, 0x1.6480e8p-4f}, + {0x1.749a56p-3f, 0x1.4067dp-5f, 0x1.9e57dap-3f}, + {0x1.7458cep-3f, 0x1.0fe26p-5f, 0x1.038476p-2f}, + {-0x1.1c53f4p-7f, -0x1.111ep-4f, -0x1.286bep-3f}, + {-0x1.64a59cp-6f, -0x1.5cc858p-6f, -0x1.01d96ep-3f}, + {0x1.1818c6p-3f, 0x1.a36e2ep-14f, 0x1.e70196p-5f}, + {0x1.154f38p-3f, -0x1.4efcbep-6f, 0x1.a922dap-4f}, + {-0x1.280dc4p-2f, 0x1.459b8p-5f, -0x1.919ac8p-7f}, + {-0x1.5acfb8p-2f, 0x1.a87e38p-6f, -0x1.1700cep-5f}, + {-0x1.0e94eep-6f, 0x1.8e0008p-5f, 0x1.95771p-3f}, + {-0x1.7f4dbep-5f, 0x1.832fcap-7f, 0x1.9986bap-3f}, + {0x1.81e68ap-4f, 0x1.04f5d4p-3f, -0x1.5c0768p-3f}, + {0x1.8b8066p-5f, 0x1.89fd7ap-4f, -0x1.2f6ad8p-3f}, + {0x1.bd377ep-3f, 0x1.4ec636p-4f, 0x1.c02afep-7f}, + {0x1.6fef7cp-3f, 0x1.5acffap-4f, 0x1.0181ep-5f}, + {-0x1.d1a5cap-3f, 0x1.e40c84p-4f, -0x1.4610fp-5f}, + {-0x1.4ef24p-2f, 0x1.47297p-3f, -0x1.362a5ep-6f}, + {0x1.b54196p-11f, 0x1.cf54d2p-4f, 0x1.00aa64p-3f}, + {-0x1.def848p-7f, 0x1.08094ep-3f, 0x1.4f69cap-3f}, + {-0x1.04aep-2f, 0x1.3c10d8p-3f, -0x1.db2c4p-3f}, + {-0x1.698aa8p-2f, 0x1.fd4cfep-4f, -0x1.65308cp-3f}, + {-0x1.f3beaap-5f, 0x1.b951c6p-4f, 0x1.313598p-5f}, + {-0x1.9da8bep-4f, 0x1.48eacp-4f, 0x1.00d2c4p-4f}, + {-0x1.daa2ap-1f, 0x1.24840ep-2f, -0x1.eca4f4p-3f}, + {-0x1.2739bp+0f, 0x1.1be2b4p-2f, -0x1.4a4766p-2f}, + {-0x1.23558ap-1f, 0x1.baebc4p-4f, 0x1.618dfp-3f}, + {-0x1.1c4cbep-1f, 0x1.0d3b6cp-3f, 0x1.4dc098p-2f}, + {0x1.09a65p-1f, 0x1.0d099ep-4f, -0x1.1021d2p-3f}, + {0x1.00ad8ap-1f, -0x1.af8df8p-8f, -0x1.84a516p-4f}, + {0x1.10f1d4p+0f, -0x1.33fa6ep-3f, 0x1.9d449ap-3f}, + {0x1.b77d3p-1f, -0x1.54d164p-3f, 0x1.4e95fap-4f}, + {0x1.48472cp-2f, -0x1.020a3p-5f, 0x1.43dccep-5f}, + {0x1.3eeaa6p-2f, -0x1.33b108p-4f, 0x1.aa326ep-6f}, + {0x1.406ca8p-1f, -0x1.45521ap-6f, 0x1.625892p-2f}, + {0x1.0cf052p-1f, -0x1.02bc72p-8f, 0x1.23b47p-2f}, + {0x1.4018a4p-2f, -0x1.35f4e4p-4f, -0x1.10f734p-4f}, + {0x1.2ed45ep-2f, -0x1.da469ep-5f, -0x1.59c27ep-5f}, + {0x1.19d40ep-1f, -0x1.dcf03p-6f, 0x1.7fcb92p-5f}, + {0x1.dca362p-2f, -0x1.1a921cp-4f, 0x1.89e668p-4f}, + {0x1.f673c4p-4f, -0x1.a83b1ep-5f, 0x1.6ac42ep-5f}, + {0x1.4653p-4f, -0x1.69a2c6p-5f, 0x1.773c0cp-5f}, + {0x1.e9047p-3f, -0x1.04cad6p-5f, 0x1.5fa11ap-3f}, + {0x1.9b1a6ep-3f, -0x1.29728ap-4f, 0x1.6e07e6p-3f}, + {0x1.5ebb78p-2f, 0x1.0cd74ap-3f, -0x1.4dddf4p-3f}, + {0x1.2d15aep-2f, 0x1.c9c3cep-4f, -0x1.019fc2p-3f}, + {0x1.2dd5f6p-1f, 0x1.f2ecf2p-4f, -0x1.947496p-5f}, + {0x1.19dbecp-1f, 0x1.0efcbep-3f, 0x1.1e7968p-6f}, + {0x1.507208p-3f, 0x1.859c8cp-5f, -0x1.de4606p-5f}, + {0x1.ebf876p-4f, 0x1.9363f6p-5f, -0x1.ad490ep-5f}, + {0x1.13a43p-2f, 0x1.1eb852p-5f, 0x1.a7e954p-4f}, + {0x1.309aeep-2f, 0x1.3b88p-5f, 0x1.1d438ep-3f}, + {0x1.8345dp-4f, -0x1.f9f01cp-6f, -0x1.3a1d32p-3f}, + {0x1.492ab6p-4f, 0x1.8f190ep-6f, -0x1.05479ep-3f}, + {0x1.201a7ap-2f, 0x1.c404a8p-5f, 0x1.450efep-13f}, + {0x1.e1134p-3f, 0x1.436544p-5f, 0x1.c957cep-7f}, + {-0x1.e3fccap-4f, 0x1.886df8p-7f, -0x1.18bd66p-5f}, + {-0x1.42e01ap-3f, 0x1.c6e6dap-6f, -0x1.4855dap-8f}, + {0x1.a46068p-4f, 0x1.bf0132p-6f, 0x1.987724p-4f}, + {0x1.3c8f32p-4f, 0x1.ae5796p-5f, 0x1.d96d9p-4f}, + {0x1.514db6p-2f, -0x1.1d3cbcp-2f, 0x1.0b5244p-6f}, + {0x1.39563ap-2f, -0x1.125354p-2f, 0x1.84ec64p-4f}, + {0x1.8cf03p-1f, -0x1.947992p-2f, 0x1.29b9d8p-2f}, + {0x1.2a9692p-1f, -0x1.0235f8p-2f, 0x1.243d8ap-2f}, + {0x1.89adc8p-3f, -0x1.753b4cp-3f, 0x1.03cea6p-3f}, + {0x1.7cbd56p-3f, -0x1.f75afap-3f, 0x1.478eap-3f}, + {0x1.629aa2p-2f, -0x1.0069e8p-2f, 0x1.6c37e6p-2f}, + {0x1.6aa8ecp-2f, -0x1.7544fep-2f, 0x1.e3ac5p-2f}, + {0x1.145c78p-3f, -0x1.4131a8p-2f, -0x1.d7c808p-4f}, + {0x1.0234a8p-3f, -0x1.257214p-2f, -0x1.4714fcp-5f}, + {0x1.9f5a54p-2f, -0x1.b1c002p-3f, 0x1.97bf1ep-3f}, + {0x1.3f96e2p-2f, -0x1.b589fp-3f, 0x1.871c54p-3f}, + {-0x1.246bfp-4f, -0x1.3080b6p-2f, 0x1.4d855ap-4f}, + {-0x1.53a366p-3f, -0x1.353bd2p-2f, 0x1.48fdap-3f}, + {0x1.2eb5f6p-3f, -0x1.29b068p-2f, 0x1.315ad2p-2f}, + {0x1.0348f6p-4f, -0x1.3d97b4p-2f, 0x1.95d032p-2f}, + {0x1.21ad64p-3f, -0x1.4d51f8p-4f, -0x1.39d6f2p-4f}, + {0x1.dadfb6p-4f, -0x1.abc948p-4f, -0x1.46bce8p-5f}, + {0x1.77d4ep-2f, -0x1.6580c4p-4f, 0x1.8ad03ep-4f}, + {0x1.51f57cp-2f, -0x1.e327eep-4f, 0x1.0432cap-3f}, + {0x1.7bb73p-9f, -0x1.ff9f88p-5f, 0x1.9c12fp-6f}, + {-0x1.ad4b28p-5f, -0x1.50b0f2p-4f, 0x1.57dbf4p-5f}, + {0x1.73d21p-3f, -0x1.18958ep-3f, 0x1.d80a9ep-3f}, + {0x1.204afap-3f, -0x1.837f7cp-4f, 0x1.104f6ep-2f}, + {-0x1.a0d23ep-4f, -0x1.ad30fp-3f, -0x1.16744cp-3f}, + {-0x1.45bf26p-3f, -0x1.872da2p-3f, -0x1.873472p-4f}, + {0x1.70c564p-5f, -0x1.4e13f4p-4f, 0x1.370ef6p-4f}, + {0x1.1361dcp-6f, -0x1.ccb9ecp-4f, 0x1.18f4fap-4f}, + {-0x1.a26246p-2f, -0x1.0f1bacp-3f, 0x1.44406cp-4f}, + {-0x1.b9e40cp-2f, -0x1.b79852p-3f, 0x1.42ff8ep-3f}, + {-0x1.8d0786p-4f, -0x1.a189bep-4f, 0x1.9a38fcp-3f}, + {-0x1.57caa8p-3f, -0x1.d66ep-4f, 0x1.0d467p-2f}, + {0x1.9355cep-2f, 0x1.6043a2p-4f, 0x1.25a25p-7f}, + {0x1.5ae07ep-2f, 0x1.8c88a4p-5f, -0x1.126634p-8f}, + {0x1.c174c4p-1f, 0x1.7f5ba2p-2f, 0x1.5e3972p-3f}, + {0x1.7b48d4p-1f, 0x1.4c5048p-2f, 0x1.f01fb8p-3f}, + {0x1.9a0be6p-3f, 0x1.1f559cp-4f, 0x1.5fcf3ep-4f}, + {0x1.5fc3b4p-3f, 0x1.72d0a2p-4f, 0x1.a429ep-4f}, + {0x1.41ce28p-2f, 0x1.02e6eap-3f, 0x1.4a94bcp-2f}, + {0x1.410c2cp-2f, 0x1.0c100ep-4f, 0x1.9d8c2ap-2f}, + {0x1.506812p-3f, 0x1.d90c0ap-5f, -0x1.67caeap-8f}, + {0x1.f44a2p-4f, 0x1.8b37p-6f, 0x1.2d234ep-7f}, + {0x1.3ba55ep-2f, 0x1.412168p-4f, 0x1.71d25ap-3f}, + {0x1.014058p-2f, 0x1.2e9036p-4f, 0x1.489daep-3f}, + {-0x1.85553ep-5f, 0x1.84b5dcp-6f, 0x1.61a1dcp-4f}, + {-0x1.775ea6p-4f, 0x1.6b01p-8f, 0x1.7da944p-4f}, + {0x1.44f8f8p-4f, 0x1.698dcep-5f, 0x1.a750c2p-3f}, + {0x1.aadb4p-4f, 0x1.718656p-7f, 0x1.eba494p-3f}, + {0x1.d01754p-3f, 0x1.7d684p-3f, -0x1.d1f81ap-5f}, + {0x1.62e126p-3f, 0x1.43da3p-3f, -0x1.e6b618p-5f}, + {0x1.5b8bacp-2f, 0x1.b74c4cp-3f, 0x1.b165d4p-5f}, + {0x1.3c9604p-2f, 0x1.81650ap-3f, 0x1.db5d8ap-5f}, + {0x1.d93c46p-7f, 0x1.8ec6bcp-3f, 0x1.90f51ap-5f}, + {-0x1.d7be98p-6f, 0x1.8ee17ap-3f, 0x1.6cdd0ep-4f}, + {0x1.1cef24p-4f, 0x1.a768ep-3f, 0x1.8c6d62p-3f}, + {0x1.76ea42p-4f, 0x1.9f4e44p-3f, 0x1.1426fep-2f}, + {-0x1.239e6ap-4f, 0x1.15b78cp-3f, -0x1.a8ef78p-4f}, + {-0x1.e481f6p-4f, 0x1.39029ap-3f, -0x1.ecc1cap-5f}, + {0x1.2cc2d6p-3f, 0x1.253868p-3f, 0x1.fa2cecp-5f}, + {0x1.ab895p-4f, 0x1.263d82p-3f, 0x1.d147f2p-5f}, + {-0x1.156bp-1f, 0x1.0008eap-2f, -0x1.206424p-6f}, + {-0x1.487d92p-1f, 0x1.1d17c6p-2f, -0x1.ca6118p-4f}, + {-0x1.82dadcp-4f, 0x1.466fd6p-3f, 0x1.519bd4p-3f}, + {-0x1.d15ad2p-4f, 0x1.ee6538p-4f, 0x1.c5f394p-3f}, + {0x1.a3ac0cp-3f, -0x1.43265ap-4f, 0x1.3558a8p-4f}, + {0x1.4a34p-3f, -0x1.71b046p-4f, 0x1.6b51bep-4f}, + {0x1.838b04p-2f, -0x1.13f6c2p-5f, 0x1.3d6734p-2f}, + {0x1.3f2e8cp-2f, -0x1.99780cp-5f, 0x1.447c74p-2f}, + {0x1.3c6434p-6f, -0x1.99fe44p-5f, 0x1.b2f7f4p-3f}, + {0x1.44241cp-9f, -0x1.01743ep-4f, 0x1.1d2524p-2f}, + {0x1.362a5ep-3f, -0x1.734f82p-4f, 0x1.a3df2ap-2f}, + {0x1.4d5e8ep-3f, -0x1.240208p-4f, 0x1.100044p-1f}, + {-0x1.56da02p-4f, -0x1.3abb88p-4f, -0x1.54c122p-6f}, + {-0x1.7c3d68p-4f, -0x1.644956p-5f, 0x1.de721p-6f}, + {0x1.1841aap-3f, -0x1.3ea1c6p-4f, 0x1.7df00ap-3f}, + {0x1.6ebd4cp-4f, -0x1.63a3a8p-4f, 0x1.7a49c2p-3f}, + {-0x1.14bdbap-2f, -0x1.e22a2cp-5f, 0x1.6266fep-3f}, + {-0x1.66d374p-2f, -0x1.2e1694p-7f, 0x1.17d178p-2f}, + {-0x1.af1886p-4f, -0x1.a4ef02p-3f, 0x1.b35ce2p-2f}, + {-0x1.148a9cp-3f, -0x1.946802p-3f, 0x1.3f41f2p-1f}, + {-0x1.a7aa68p-5f, 0x1.1db878p-4f, -0x1.670c14p-5f}, + {-0x1.4bfb16p-4f, 0x1.d28284p-5f, -0x1.adea8ap-13f}, + {0x1.85ea24p-3f, 0x1.0c23fap-6f, 0x1.2ad928p-3f}, + {0x1.242bfap-3f, 0x1.5182aap-9f, 0x1.460136p-3f}, + {-0x1.695cp-2f, 0x1.6c4828p-7f, 0x1.74e65cp-4f}, + {-0x1.7830e4p-2f, 0x1.cf3ba8p-5f, 0x1.2d7beap-3f}, + {-0x1.a0ad8ap-9f, 0x1.b352a8p-6f, 0x1.21526ep-2f}, + {-0x1.1e731ep-4f, -0x1.52e2fcp-8f, 0x1.59c842p-2f}, + {-0x1.fc16ep-2f, 0x1.b1961p-6f, 0x1.3e5fb8p-6f}, + {-0x1.617a02p-1f, 0x1.1be7f2p-4f, -0x1.119cep-8f}, + {-0x1.2b4a66p-3f, 0x1.7be122p-5f, 0x1.4b723ep-3f}, + {-0x1.94a558p-3f, 0x1.174a34p-5f, 0x1.ed92fcp-3f}, + {-0x1.faa886p-1f, 0x1.4fd08ep-5f, 0x1.948dc2p-5f}, + {-0x1.26acdap+0f, 0x1.af37fcp-3f, 0x1.e62456p-3f}, + {-0x1.576a3p-2f, -0x1.dcd706p-5f, 0x1.ebb12ap-2f}, + {-0x1.013d1p-1f, -0x1.800b88p-4f, 0x1.59b90ep-1f}, + {0x1.b99fe4p-1f, 0x1.0e79eep-2f, -0x1.2dfb94p-2f}, + {0x1.90b9dcp-1f, 0x1.015b14p-2f, -0x1.f42784p-4f}, + {0x1.99093ap+0f, 0x1.daf31cp-2f, -0x1.10b286p-3f}, + {0x1.9da23p+0f, 0x1.f0de9p-5f, 0x1.5b317ep-4f}, + {0x1.be0ac8p-2f, 0x1.adbc66p-3f, 0x1.855326p-4f}, + {0x1.b95b78p-2f, 0x1.52977cp-3f, 0x1.887874p-5f}, + {0x1.3f87aep+0f, 0x1.104e1ep-2f, 0x1.f3ccdp-2f}, + {0x1.028af8p+0f, 0x1.61bb06p-2f, 0x1.e51224p-2f}, + {0x1.e87724p-2f, 0x1.8dcc2p-3f, -0x1.db3bfcp-5f}, + {0x1.9afea4p-2f, 0x1.7ecd4ap-3f, -0x1.bb7d84p-5f}, + {0x1.33c0ap+0f, 0x1.239de4p-2f, -0x1.1082dp-4f}, + {0x1.109dbep+0f, 0x1.a15012p-3f, 0x1.7bf834p-5f}, + {0x1.05fd04p-2f, 0x1.1132f8p-3f, 0x1.793bcp-5f}, + {0x1.bfdb4cp-3f, 0x1.07d998p-3f, 0x1.0b9346p-4f}, + {0x1.f698bcp-2f, 0x1.74d1eap-3f, 0x1.257604p-2f}, + {0x1.c34a88p-2f, 0x1.b4890ap-4f, 0x1.3458cep-2f}, + {0x1.3561f6p-1f, 0x1.0bbcd4p-1f, -0x1.e8b652p-3f}, + {0x1.0d7afep-1f, 0x1.82a38cp-2f, -0x1.95b574p-3f}, + {0x1.09e3cap+0f, 0x1.36655ap-1f, -0x1.f0a6fcp-4f}, + {0x1.fd95bcp-1f, 0x1.1aba38p-1f, 0x1.c56d5cp-4f}, + {0x1.0c868cp-2f, 0x1.413122p-2f, -0x1.63fab2p-4f}, + {0x1.d8c006p-3f, 0x1.17f23cp-2f, -0x1.bc903ep-5f}, + {0x1.18d08ap-1f, 0x1.f67f9p-2f, 0x1.1ce0bap-2f}, + {0x1.de310ep-2f, 0x1.6c664ep-2f, 0x1.28199p-2f}, + {0x1.77f2c4p-2f, 0x1.e3a7dap-3f, -0x1.d32d6ep-3f}, + {0x1.3cc89cp-2f, 0x1.dee914p-3f, -0x1.5edfa4p-3f}, + {0x1.dc6f36p-2f, 0x1.1b34e8p-2f, 0x1.66d7a6p-7f}, + {0x1.8332fp-2f, 0x1.003e2p-2f, 0x1.6cbd98p-7f}, + {0x1.faf64p-5f, 0x1.2feef6p-2f, -0x1.7635e8p-7f}, + {0x1.0624dep-13f, 0x1.666ep-2f, -0x1.718656p-7f}, + {0x1.4f7e3ep-3f, 0x1.0b75a8p-2f, 0x1.682adcp-3f}, + {0x1.5230bap-3f, 0x1.3c3548p-2f, 0x1.d288cep-3f}, + {0x1.d87df6p-2f, 0x1.aa993p-5f, -0x1.0f0a5ep-6f}, + {0x1.e3b57cp-2f, 0x1.80b674p-5f, 0x1.76c05p-5f}, + {0x1.b67ad8p-1f, 0x1.1760cp-3f, 0x1.f5e95cp-3f}, + {0x1.ab52cap-1f, 0x1.aa822p-9f, 0x1.7d962p-2f}, + {0x1.59fa54p-2f, 0x1.2f0e0ap-5f, 0x1.dc2fc6p-3f}, + {0x1.11d4fap-2f, 0x1.c4156ep-6f, 0x1.02d88p-2f}, + {0x1.2b82e4p-1f, 0x1.cf0952p-4f, 0x1.2a8e92p-1f}, + {0x1.e6d0d4p-2f, -0x1.8d0cc4p-6f, 0x1.4f6556p-1f}, + {0x1.0f2dc2p-2f, -0x1.dfeb8ep-6f, 0x1.17d6b6p-8f}, + {0x1.f7f412p-3f, -0x1.3914f4p-6f, 0x1.ec4e72p-6f}, + {0x1.e8dbcep-2f, 0x1.58b3f6p-6f, 0x1.3e5b86p-3f}, + {0x1.d574b4p-2f, -0x1.681cb4p-5f, 0x1.80b78p-3f}, + {0x1.12ac76p-4f, -0x1.f59254p-5f, 0x1.03e63ep-3f}, + {0x1.6d6dc2p-5f, -0x1.1b3d08p-5f, 0x1.339eaep-3f}, + {0x1.87ca64p-3f, -0x1.f36262p-9f, 0x1.4460eep-2f}, + {0x1.3980f6p-3f, 0x1.ea209ap-6f, 0x1.71f96ap-2f}, + {0x1.4866a2p-2f, 0x1.6e7d56p-3f, -0x1.6bde4p-4f}, + {0x1.341638p-2f, 0x1.19e5ap-3f, -0x1.d21144p-5f}, + {0x1.1b5ccp-1f, 0x1.4c7864p-3f, 0x1.0e4f34p-3f}, + {0x1.f5d852p-2f, 0x1.fa99fap-4f, 0x1.2b5782p-3f}, + {0x1.e7381ep-4f, 0x1.546a1ap-4f, 0x1.16f438p-5f}, + {0x1.96e9bcp-4f, 0x1.0f345p-4f, 0x1.bd102cp-5f}, + {0x1.d39c0ep-3f, 0x1.f588e4p-4f, 0x1.3ca3e8p-2f}, + {0x1.60724cp-3f, 0x1.160632p-3f, 0x1.4b1f26p-2f}, + {0x1.070436p-4f, 0x1.03b4f6p-4f, -0x1.dd206cp-5f}, + {0x1.8622c4p-7f, 0x1.6bb44ep-4f, -0x1.1d66aep-4f}, + {0x1.8dc982p-3f, 0x1.089226p-3f, 0x1.017332p-3f}, + {0x1.3dd01p-3f, 0x1.6460eep-3f, 0x1.271d6p-3f}, + {-0x1.bc8e26p-3f, 0x1.cdbf06p-4f, 0x1.7ef6b6p-4f}, + {-0x1.3af8ep-2f, 0x1.5e81ccp-3f, 0x1.c5921p-4f}, + {-0x1.e82518p-7f, 0x1.1ad106p-3f, 0x1.dc115ep-3f}, + {-0x1.2e9468p-5f, 0x1.5c6fbep-3f, 0x1.1dddb2p-2f}, + {0x1.5d202ap-1f, 0x1.bf9ca6p-2f, 0x1.415d2ep-4f}, + {0x1.18dcbap-1f, 0x1.81f5bep-2f, 0x1.7ad18ep-4f}, + {0x1.425a8ap+0f, 0x1.cd90ap-1f, 0x1.063b26p-2f}, + {0x1.4bcfc4p+0f, 0x1.374518p-1f, 0x1.356fb8p-2f}, + {0x1.474a34p-2f, 0x1.3a9ac4p-2f, 0x1.982774p-4f}, + {0x1.262026p-2f, 0x1.6ffac2p-2f, 0x1.7ea812p-3f}, + {0x1.80ab2ep-1f, 0x1.5a76dap-1f, 0x1.ff5f0cp-2f}, + {0x1.eb1eap-2f, 0x1.1b26cp-1f, 0x1.1ef2e8p-1f}, + {0x1.1b0292p-2f, 0x1.b65668p-3f, -0x1.dfdac6p-9f}, + {0x1.e7b918p-3f, 0x1.c9ec2cp-3f, 0x1.d7f51ep-6f}, + {0x1.15db34p-1f, 0x1.10980cp-2f, 0x1.5f034cp-3f}, + {0x1.d73b86p-2f, 0x1.22cb64p-2f, 0x1.442c8p-3f}, + {0x1.d61912p-5f, 0x1.3d4a1ap-2f, 0x1.27f888p-3f}, + {-0x1.c2f406p-8f, 0x1.6481f6p-2f, 0x1.8e94eep-4f}, + {0x1.f499dp-3f, 0x1.fa776p-3f, 0x1.4a57eap-2f}, + {0x1.04167ap-2f, 0x1.577858p-2f, 0x1.9be51p-2f}, + {0x1.6a808cp-2f, 0x1.28d866p-1f, -0x1.0a99b6p-3f}, + {0x1.1173b8p-2f, 0x1.d9103cp-2f, -0x1.dc981cp-5f}, + {0x1.116edep-1f, 0x1.40cb08p-1f, 0x1.7ef39p-5f}, + {0x1.c47064p-2f, 0x1.df7f8cp-2f, 0x1.d77faep-5f}, + {0x1.c48388p-4f, 0x1.41f16cp-1f, 0x1.a5aee6p-4f}, + {0x1.014d72p-5f, 0x1.f4ce3ep-2f, 0x1.731e3ap-4f}, + {0x1.d625a6p-3f, 0x1.0d20bp-1f, 0x1.4d43dp-2f}, + {0x1.b06a2cp-4f, 0x1.2a0fb2p-1f, 0x1.04fc62p-1f}, + {0x1.74e65cp-8f, 0x1.0afea4p-1f, -0x1.435936p-3f}, + {0x1.abe166p-4f, 0x1.b232d2p-2f, -0x1.4a5482p-4f}, + {0x1.ca4f44p-3f, 0x1.8f3776p-2f, 0x1.f2ecf2p-5f}, + {0x1.47485ep-3f, 0x1.5cbea4p-2f, 0x1.fc675ap-5f}, + {-0x1.644d88p-3f, 0x1.2597f6p-1f, 0x1.c0a4ap-6f}, + {-0x1.81083ep-2f, 0x1.2cfd08p-1f, 0x1.107852p-3f}, + {-0x1.a81fdap-5f, 0x1.64b2fap-2f, 0x1.dafa72p-3f}, + {-0x1.f60d02p-4f, 0x1.e466f6p-2f, 0x1.012fd4p-2f}, + {0x1.4c1acep-2f, 0x1.302602p-3f, 0x1.db291cp-4f}, + {0x1.21098ep-2f, 0x1.f29b28p-4f, 0x1.d3027p-4f}, + {0x1.6155d6p-1f, 0x1.067f9p-2f, 0x1.ac29cp-2f}, + {0x1.15c594p-1f, 0x1.2d7e46p-2f, 0x1.d90f74p-2f}, + {0x1.d27c3ap-5f, 0x1.b90108p-4f, 0x1.208f64p-2f}, + {0x1.c83234p-6f, 0x1.b5b0bcp-4f, 0x1.6b97bcp-2f}, + {0x1.489d28p-3f, 0x1.6bd6e8p-3f, 0x1.0ec15ep-1f}, + {0x1.d1feecp-3f, 0x1.6c7eaep-3f, 0x1.61018ep-1f}, + {0x1.c90d5ap-4f, 0x1.90fb66p-4f, 0x1.bf76a2p-4f}, + {0x1.580a18p-4f, 0x1.10e2c2p-3f, 0x1.da4592p-4f}, + {0x1.ab7fep-3f, 0x1.22fcfp-3f, 0x1.abef8cp-3f}, + {0x1.3fa2aep-3f, 0x1.257c0cp-3f, 0x1.d9d778p-3f}, + {-0x1.7c947p-3f, 0x1.b6fb9p-3f, 0x1.3d3566p-2f}, + {-0x1.3e84aep-2f, 0x1.ec942ep-3f, 0x1.506574p-2f}, + {-0x1.5602p-5f, 0x1.74549cp-4f, 0x1.05d2aep-1f}, + {-0x1.3fd2eap-3f, 0x1.93660ep-4f, 0x1.e97e14p-2f}, + {0x1.365c2ep-3f, 0x1.0d6302p-2f, -0x1.1231c6p-5f}, + {0x1.02b51cp-3f, 0x1.b43b7p-3f, -0x1.cbab64p-8f}, + {0x1.f666aap-3f, 0x1.bd9232p-3f, 0x1.ec6152p-4f}, + {0x1.095af2p-2f, 0x1.cde8f6p-3f, 0x1.69adc8p-3f}, + {-0x1.866a12p-3f, 0x1.0a758ap-2f, 0x1.225072p-3f}, + {-0x1.83a084p-3f, 0x1.53bafep-2f, 0x1.5d66aep-3f}, + {0x1.c09e56p-5f, 0x1.2dd724p-2f, 0x1.6e5c92p-2f}, + {-0x1.14445ap-5f, 0x1.07d418p-2f, 0x1.75d4a6p-2f}, + {-0x1.7ad214p-3f, 0x1.960c7cp-2f, 0x1.d8e864p-5f}, + {-0x1.2c5a3ep-2f, 0x1.99dd7ep-2f, 0x1.266342p-10f}, + {-0x1.f2b23ap-7f, 0x1.dbb94ap-3f, 0x1.6c5da6p-3f}, + {-0x1.71088p-6f, 0x1.f531dcp-3f, 0x1.ed0fe8p-3f}, + {-0x1.0a6a44p-1f, 0x1.644d02p-2f, 0x1.fe7ea6p-3f}, + {-0x1.580ffep-1f, 0x1.a4a40ap-2f, 0x1.3a3b9ap-3f}, + {-0x1.0329c4p-2f, 0x1.a640a6p-2f, 0x1.f59c4ap-2f}, + {-0x1.a4c8bcp-2f, 0x1.1ff9f8p-1f, 0x1.1678e2p-1f}, +}; + +// Shape vector, coefficients 4..7 of the 8-point transform, per index (128 entries). +const float kShapeHighCodebook[128][4] = { + {-0x1.a89764p-4f, 0x1.837824p-4f, -0x1.aeddcep-7f, 0x1.4dd3fep-4f}, + {-0x1.5d9caep-3f, 0x1.0a276cp-3f, -0x1.d5885ep-5f, 0x1.cc144p-4f}, + {-0x1.859536p-4f, 0x1.4b5568p-4f, -0x1.c371dap-6f, 0x1.b9d7fep-9f}, + {-0x1.3bb492p-3f, 0x1.d0a35p-4f, -0x1.313dfcp-4f, 0x1.c3ac92p-9f}, + {-0x1.c0baa6p-4f, 0x1.3a682cp-3f, 0x1.c17226p-8f, 0x1.4f4c6ep-5f}, + {-0x1.74983ep-3f, 0x1.be38ecp-3f, -0x1.37fbfp-6f, 0x1.4814d8p-5f}, + {-0x1.8a393ep-4f, 0x1.274d9cp-3f, -0x1.8b9fdcp-6f, -0x1.1fb3fap-5f}, + {-0x1.66035p-3f, 0x1.8bfec2p-3f, -0x1.bc819p-5f, -0x1.25aee6p-4f}, + {-0x1.77470ep-3f, -0x1.b0dd82p-5f, 0x1.e3033ap-4f, 0x1.fb3fa6p-6f}, + {-0x1.f0ea18p-3f, 0x1.295e9ep-7f, 0x1.916fcap-4f, 0x1.775ea6p-4f}, + {-0x1.269942p-3f, -0x1.d36b4cp-6f, 0x1.4914b2p-5f, -0x1.70931p-9f}, + {-0x1.97292cp-3f, 0x1.ca18bep-8f, 0x1.529fep-6f, 0x1.b47c74p-6f}, + {-0x1.dd8948p-3f, -0x1.d7be98p-6f, 0x1.1efc7ap-3f, -0x1.269ceep-4f}, + {-0x1.3cbc8cp-2f, 0x1.d1e754p-5f, 0x1.bb70fp-4f, -0x1.36262cp-6f}, + {-0x1.61db88p-3f, -0x1.0afe6p-9f, 0x1.8f66a6p-5f, -0x1.649e44p-4f}, + {-0x1.f17614p-3f, 0x1.2788dcp-5f, 0x1.ed9dfep-7f, -0x1.07a4a4p-4f}, + {0x1.3bd48cp-4f, 0x1.61a8acp-3f, 0x1.478e1ap-3f, 0x1.8f2e06p-4f}, + {0x1.96a6ap-6f, 0x1.ad6a9cp-3f, 0x1.65c5f8p-4f, 0x1.aeea64p-4f}, + {0x1.5c9f72p-4f, 0x1.368e82p-3f, 0x1.592d98p-4f, 0x1.74afd6p-6f}, + {0x1.8902dep-5f, 0x1.92d4d4p-3f, 0x1.3d9a96p-5f, 0x1.eabffcp-6f}, + {0x1.d2a306p-4f, 0x1.e4fe36p-3f, 0x1.68b22p-3f, 0x1.108c4p-6f}, + {0x1.3e1c9cp-7f, 0x1.126678p-2f, 0x1.05729cp-3f, 0x1.040bfep-6f}, + {0x1.d31fcep-4f, 0x1.9e553ap-3f, 0x1.8cdeap-4f, -0x1.60d67p-5f}, + {0x1.82d16cp-5f, 0x1.0aa4fcp-2f, 0x1.a16616p-5f, -0x1.80fdc2p-5f}, + {-0x1.c35696p-5f, 0x1.16dd26p-5f, 0x1.9a8cdep-3f, 0x1.3fe5cap-5f}, + {-0x1.f87adp-5f, 0x1.1cf13cp-4f, 0x1.cf0b6cp-4f, 0x1.c2bd8p-6f}, + {-0x1.a148bap-6f, 0x1.4b48d4p-5f, 0x1.0fed64p-3f, -0x1.404a72p-5f}, + {-0x1.012168p-5f, 0x1.062f5ap-4f, 0x1.14b8bep-4f, -0x1.1871e6p-6f}, + {-0x1.30af6p-4f, 0x1.62a0aap-4f, 0x1.d36b4cp-3f, -0x1.c65626p-5f}, + {-0x1.b7b6bcp-4f, 0x1.ef1994p-4f, 0x1.19524cp-3f, -0x1.efa616p-6f}, + {-0x1.2e429ep-5f, 0x1.70867ap-4f, 0x1.3f2452p-3f, -0x1.071de6p-3f}, + {-0x1.e3e6c4p-5f, 0x1.90e992p-4f, 0x1.5a1124p-4f, -0x1.369014p-4f}, + {-0x1.a0afa2p-5f, -0x1.9c560cp-6f, -0x1.62dc6ep-4f, 0x1.70d62cp-7f}, + {-0x1.a54824p-5f, 0x1.b3d8ep-7f, -0x1.28462p-3f, 0x1.3bba56p-5f}, + {-0x1.2e696ap-4f, -0x1.d9c6bp-6f, -0x1.23abp-3f, -0x1.9dfdacp-6f}, + {-0x1.57b204p-4f, 0x1.eba6acp-7f, -0x1.d1209ep-3f, -0x1.700cd8p-9f}, + {-0x1.f94856p-6f, -0x1.319828p-7f, -0x1.20d67p-4f, -0x1.525cc4p-5f}, + {-0x1.68be3p-6f, 0x1.e160d8p-6f, -0x1.ffd71cp-4f, -0x1.031056p-5f}, + {-0x1.070da6p-4f, -0x1.dfb938p-7f, -0x1.bda2f8p-4f, -0x1.7a3b9ap-4f}, + {-0x1.3ddb98p-5f, 0x1.3862b2p-5f, -0x1.830e3cp-3f, -0x1.81ede2p-4f}, + {-0x1.3b8348p-3f, -0x1.78b158p-3f, -0x1.45f17cp-6f, 0x1.504d56p-4f}, + {-0x1.8111aep-3f, -0x1.cf2496p-4f, -0x1.e0c9dap-4f, 0x1.745f18p-4f}, + {-0x1.f247ccp-3f, -0x1.a81cb4p-3f, -0x1.b83276p-5f, -0x1.02dep-9f}, + {-0x1.1a8da8p-2f, -0x1.efc266p-4f, -0x1.4a4336p-3f, 0x1.154866p-8f}, + {-0x1.e3e8dep-4f, -0x1.42a2c2p-3f, -0x1.2bc72ep-5f, -0x1.1c64bap-7f}, + {-0x1.3aa0cap-3f, -0x1.c82e02p-4f, -0x1.a646f2p-4f, -0x1.35fc3cp-7f}, + {-0x1.633df2p-3f, -0x1.70f6aep-3f, -0x1.d4024cp-5f, -0x1.a6b2f2p-4f}, + {-0x1.ab06c4p-3f, -0x1.057c92p-3f, -0x1.31d712p-3f, -0x1.bfa5d2p-4f}, + {0x1.8a7c5ap-4f, 0x1.889e34p-5f, -0x1.8ac19p-6f, -0x1.d3176ap-5f}, + {0x1.6ad0c4p-5f, 0x1.3530cep-4f, -0x1.16b11cp-7f, -0x1.15087p-4f}, + {0x1.3a5f42p-4f, 0x1.a2c66ap-6f, -0x1.1016cep-4f, -0x1.a5d9e4p-4f}, + {0x1.9d1f6p-6f, 0x1.725918p-4f, -0x1.e02eaap-5f, -0x1.d41b76p-4f}, + {0x1.0201cep-3f, 0x1.1f0a1cp-4f, 0x1.0ac3a8p-6f, -0x1.cc34c2p-4f}, + {0x1.223d0cp-4f, 0x1.e75ff6p-4f, 0x1.355476p-10f, -0x1.dc9b42p-4f}, + {0x1.8f7122p-4f, 0x1.e51f3ep-5f, -0x1.b76f6ep-6f, -0x1.61ff2ep-3f}, + {0x1.8b114p-5f, 0x1.29e668p-3f, -0x1.9a5ca2p-5f, -0x1.82c55cp-3f}, + {0x1.da9c9ap-8f, -0x1.161c36p-3f, 0x1.2ec28cp-3f, -0x1.172efp-5f}, + {0x1.a4d6e4p-7f, -0x1.1d25aap-4f, 0x1.3bf61ap-4f, -0x1.887874p-5f}, + {-0x1.a1101cp-5f, -0x1.dc7582p-4f, 0x1.52018ap-4f, -0x1.cdb7aep-5f}, + {-0x1.44a622p-5f, -0x1.c81d3ap-5f, 0x1.2773e2p-5f, -0x1.167ec8p-4f}, + {0x1.5dbfcep-5f, -0x1.76e504p-4f, 0x1.352008p-3f, -0x1.fcd35ap-4f}, + {0x1.ded288p-6f, -0x1.42c5e2p-5f, 0x1.258926p-4f, -0x1.d19264p-4f}, + {-0x1.9afe1ep-6f, -0x1.958ea8p-4f, 0x1.31a6d6p-4f, -0x1.1c011ep-3f}, + {-0x1.ff822cp-6f, -0x1.2497fap-5f, 0x1.55ef2p-6f, -0x1.25a25p-3f}, + {0x1.4ce81p-5f, 0x1.680cfap-4f, -0x1.958106p-5f, 0x1.8382a2p-4f}, + {0x1.b81302p-6f, 0x1.01e472p-3f, -0x1.a7ba24p-4f, 0x1.2086bep-3f}, + {0x1.33e144p-4f, 0x1.c35266p-4f, -0x1.d7bfa4p-4f, 0x1.13c8ap-4f}, + {0x1.2c2bd8p-5f, 0x1.4e3822p-3f, -0x1.8295a6p-3f, 0x1.a8da8p-4f}, + {0x1.cdaf4ap-6f, 0x1.85a0bep-4f, -0x1.b44a2p-5f, 0x1.d97f62p-6f}, + {0x1.2e6214p-9f, 0x1.2f894p-3f, -0x1.895e18p-4f, 0x1.7a615ap-5f}, + {0x1.27d78p-4f, 0x1.19cb68p-3f, -0x1.87b246p-4f, 0x1.5f02c4p-10f}, + {0x1.10dbfp-5f, 0x1.c5974ep-3f, -0x1.37b528p-3f, 0x1.8d4fep-7f}, + {0x1.c53f3ap-9f, -0x1.5c9e66p-4f, 0x1.56d5dp-5f, 0x1.d245b2p-4f}, + {-0x1.4cad58p-5f, -0x1.6fa82ep-5f, 0x1.e7210cp-6f, 0x1.6a84bep-3f}, + {0x1.75afbp-7f, -0x1.bd05bp-5f, -0x1.972cd8p-7f, 0x1.3ebaf2p-4f}, + {-0x1.5b7282p-5f, -0x1.fac1d2p-6f, -0x1.1d712ap-5f, 0x1.f7963ap-4f}, + {-0x1.212514p-9f, -0x1.765ba6p-5f, 0x1.9eeed8p-5f, 0x1.c1a048p-5f}, + {-0x1.55d80ep-5f, -0x1.07f23cp-6f, 0x1.8941c8p-5f, 0x1.a24dd2p-4f}, + {0x1.c98a22p-7f, -0x1.6bca54p-6f, 0x1.a6d698p-10f, 0x1.db163cp-6f}, + {-0x1.ef177ap-6f, -0x1.0cf5b2p-9f, -0x1.1e108cp-8f, 0x1.0ba51ap-4f}, + {0x1.3239e6p-2f, 0x1.7af64p-5f, 0x1.389b52p-4f, 0x1.21ee68p-4f}, + {0x1.0029f2p-2f, 0x1.9335d2p-4f, 0x1.9c8c94p-7f, 0x1.198e98p-3f}, + {0x1.044524p-2f, 0x1.8663c8p-4f, 0x1.332f02p-6f, 0x1.1904b4p-8f}, + {0x1.c04a72p-3f, 0x1.2a1838p-3f, -0x1.2009f6p-5f, 0x1.1dd5d4p-4f}, + {0x1.36c508p-2f, 0x1.9f6ec6p-4f, 0x1.168512p-3f, -0x1.ad2136p-7f}, + {0x1.0d3aa4p-2f, 0x1.52314p-3f, 0x1.3c5cdep-4f, 0x1.25c4ecp-4f}, + {0x1.4705c8p-2f, 0x1.5cbd56p-3f, 0x1.bee808p-5f, -0x1.27c5acp-4f}, + {0x1.1788dcp-2f, 0x1.d9756cp-3f, -0x1.da2f8cp-7f, 0x1.7f067p-7f}, + {0x1.12ab68p-3f, -0x1.b5568ep-6f, 0x1.4a8c16p-3f, 0x1.c3c18cp-4f}, + {0x1.9b2702p-4f, 0x1.b2745cp-6f, 0x1.6139p-4f, 0x1.0b380cp-3f}, + {0x1.2861eap-3f, -0x1.d53cdep-11f, 0x1.8011d4p-4f, 0x1.6ca8ap-5f}, + {0x1.d6ce78p-4f, 0x1.6ad2dcp-6f, 0x1.25dafp-5f, 0x1.1b6a1ep-4f}, + {0x1.f3ebcp-4f, 0x1.69db66p-7f, 0x1.8adc4cp-3f, 0x1.757d5ap-6f}, + {0x1.458eeap-4f, 0x1.ac8a38p-6f, 0x1.e2339cp-4f, 0x1.cf6168p-5f}, + {0x1.fe879p-4f, 0x1.c0b568p-6f, 0x1.f7a0b6p-4f, -0x1.9fa54cp-6f}, + {0x1.738a3cp-4f, 0x1.c03794p-6f, 0x1.07fcbap-4f, 0x1.abe272p-7f}, + {0x1.473b42p-3f, -0x1.c436fcp-5f, -0x1.7315d8p-4f, 0x1.367904p-3f}, + {0x1.5a6d6ap-4f, -0x1.30c458p-5f, -0x1.037a3ep-3f, 0x1.ea7372p-4f}, + {0x1.8a350ep-3f, -0x1.9a6612p-4f, -0x1.4be942p-3f, 0x1.aa9718p-4f}, + {0x1.d550cap-4f, -0x1.7b0b3ap-5f, -0x1.c1a1dcp-3f, 0x1.99dfdap-4f}, + {0x1.398394p-3f, -0x1.4bd76ep-7f, -0x1.615876p-4f, 0x1.192ea6p-4f}, + {0x1.69468p-4f, -0x1.588e36p-7f, -0x1.a29846p-4f, 0x1.7b224ap-5f}, + {0x1.50e23ap-3f, -0x1.d59b3ep-5f, -0x1.1018e8p-3f, 0x1.8abd5ep-6f}, + {0x1.c02e24p-4f, -0x1.cab82p-7f, -0x1.5b5526p-3f, 0x1.4e6e22p-6f}, + {0x1.40f66ap-5f, -0x1.ac6046p-3f, -0x1.25dd0ap-5f, 0x1.683d36p-4f}, + {0x1.a31a4cp-7f, -0x1.6bfa0ap-3f, -0x1.0a361ap-3f, 0x1.2c7fbap-4f}, + {0x1.72c732p-5f, -0x1.06dacap-2f, -0x1.6935bap-4f, 0x1.1409a2p-8f}, + {-0x1.5c422p-8f, -0x1.d9807p-3f, -0x1.888acep-3f, -0x1.58750cp-9f}, + {0x1.36fe2ep-5f, -0x1.39cf14p-3f, -0x1.739f34p-5f, 0x1.b36bd2p-9f}, + {0x1.f8a09p-6f, -0x1.02f944p-3f, -0x1.d40896p-4f, -0x1.553ef6p-7f}, + {0x1.6978d4p-5f, -0x1.79218ap-3f, -0x1.4d6a16p-4f, -0x1.3cc9eap-4f}, + {0x1.de7a74p-6f, -0x1.425742p-3f, -0x1.604a72p-3f, -0x1.6fe0cep-4f}, + {0x1.92f6a6p-2f, -0x1.621fbp-5f, -0x1.c826aap-4f, -0x1.83f91ep-11f}, + {0x1.2887ecp-2f, 0x1.361dcap-6f, -0x1.f861a6p-4f, 0x1.75d13ep-11f}, + {0x1.3eb2dp-2f, -0x1.e9596p-5f, -0x1.9783ep-3f, -0x1.4e7eeap-4f}, + {0x1.08dde8p-2f, 0x1.ae1ef8p-5f, -0x1.b1ff72p-3f, -0x1.1e2154p-5f}, + {0x1.33e8dep-2f, 0x1.74eecp-7f, -0x1.563348p-4f, -0x1.630db6p-4f}, + {0x1.b757d6p-3f, 0x1.b95e5ap-5f, -0x1.9e82d8p-4f, -0x1.f3dc06p-5f}, + {0x1.03810ep-2f, 0x1.d2e0e4p-6f, -0x1.410732p-3f, -0x1.4e864p-3f}, + {0x1.97cdccp-3f, 0x1.d270bp-4f, -0x1.546b26p-3f, -0x1.a42f1ep-4f}, + {0x1.fe39f8p-3f, -0x1.52324cp-3f, 0x1.d9c6bp-6f, 0x1.a8a82ap-5f}, + {0x1.406078p-3f, -0x1.fab53ep-4f, 0x1.176578p-6f, 0x1.609bb6p-5f}, + {0x1.b7d5aap-3f, -0x1.9eb0fap-4f, -0x1.6dc1a4p-8f, -0x1.5332acp-6f}, + {0x1.1fdac6p-3f, -0x1.272fbap-4f, -0x1.ed959ap-7f, -0x1.6ddacep-7f}, + {0x1.ef301ep-3f, -0x1.3764f2p-3f, 0x1.b3d3a2p-4f, -0x1.7fda4p-5f}, + {0x1.237692p-3f, -0x1.0e211p-3f, 0x1.bafd98p-5f, -0x1.b1ee24p-6f}, + {0x1.a6fbd2p-3f, -0x1.60bb2cp-4f, 0x1.7e132cp-5f, -0x1.8fd4cp-4f}, + {0x1.09bf16p-3f, -0x1.4f5b1cp-4f, 0x1.338f7ap-8f, -0x1.2bb342p-4f}, +}; + +// Higher-order coefficients (up to 4) of block 1, per index (32 entries). +const float kShapeDetail1Codebook[32][4] = { + {0x1.0e7254p-2f, 0x1.78a2aap-5f, -0x1.9ba55ep-3f, -0x1.f51efcp-4f}, + {0x1.ea808cp-2f, 0x1.d2c9d2p-3f, -0x1.080304p-6f, -0x1.bff046p-8f}, + {0x1.3c9bc8p-4f, 0x1.4adabap-4f, -0x1.1a5ca2p-4f, 0x1.55e072p-5f}, + {0x1.7be016p-3f, 0x1.daceeep-3f, 0x1.75936p-3f, 0x1.a034f4p-4f}, + {-0x1.97b31p-7f, 0x1.ca2caap-3f, -0x1.1c7864p-2f, -0x1.198f1ep-5f}, + {-0x1.e77b3ap-5f, 0x1.1df19ep-3f, -0x1.94d0dcp-6f, -0x1.aad2dcp-4f}, + {-0x1.fd49d8p-3f, 0x1.05a25p-2f, -0x1.14434ep-3f, -0x1.dde7a8p-5f}, + {-0x1.c38f36p-5f, 0x1.b581dp-2f, 0x1.9a911p-6f, -0x1.710eccp-5f}, + {-0x1.e27e0ep-5f, -0x1.fb7414p-5f, 0x1.cb3e58p-6f, -0x1.6c69b6p-6f}, + {0x1.58b0dp-4f, 0x1.9ef524p-6f, 0x1.1187e8p-4f, -0x1.725bb8p-3f}, + {-0x1.8b851ep-3f, -0x1.5275eep-4f, 0x1.208fa8p-3f, -0x1.6ed56cp-4f}, + {0.0f, 0x1.148ba8p-5f, 0x1.1b431p-2f, 0x1.46c332p-9f}, + {-0x1.961998p-2f, -0x1.95db34p-5f, -0x1.e3bcd4p-4f, -0x1.aa9bdp-3f}, + {-0x1.2600bp-2f, 0x1.8bc16ap-4f, 0x1.96bb98p-5f, -0x1.44dca8p-4f}, + {-0x1.1667b6p-1f, 0x1.5e6d58p-3f, -0x1.fd523cp-5f, -0x1.5781c8p-7f}, + {-0x1.6a0ec8p-2f, 0x1.d1cc1p-3f, 0x1.d74d5ap-3f, -0x1.06df82p-5f}, + {0x1.fd16fcp-3f, -0x1.1e8a2ep-2f, -0x1.ad3dp-3f, 0x1.226b3p-4f}, + {0x1.82aaap-2f, -0x1.ea0a96p-4f, 0x1.1550cap-7f, -0x1.6e47dcp-8f}, + {0x1.a24fecp-4f, -0x1.7fa7ecp-4f, -0x1.f65fd8p-5f, 0x1.aaa7dep-5f}, + {0x1.3baa9cp-3f, -0x1.b10ba6p-4f, 0x1.96cd6cp-4f, 0x1.80f776p-3f}, + {-0x1.1d25aap-3f, -0x1.755582p-4f, -0x1.1a172ap-2f, -0x1.3adc0ap-5f}, + {-0x1.274214p-3f, 0x1.1919acp-5f, -0x1.f94856p-6f, 0x1.6bd6e8p-6f}, + {-0x1.26e19cp-3f, 0x1.45479ep-4f, -0x1.8ebf66p-3f, 0x1.6709fap-3f}, + {-0x1.9008a6p-3f, 0x1.6643ccp-4f, 0x1.155822p-4f, 0x1.7e8816p-3f}, + {-0x1.f9eadep-4f, -0x1.82f124p-2f, -0x1.adef42p-3f, -0x1.b39p-3f}, + {0x1.196312p-4f, -0x1.06134cp-2f, 0x1.ed6a9cp-4f, -0x1.87b246p-4f}, + {-0x1.b57e68p-4f, -0x1.47a4a4p-2f, -0x1.6ddce8p-4f, 0x1.b60e0ep-4f}, + {-0x1.44d2b2p-3f, -0x1.3d095ap-2f, 0x1.86f694p-3f, 0x1.6defc8p-4f}, + {-0x1.f4e6e2p-2f, -0x1.bb2bbap-2f, -0x1.35b036p-3f, -0x1.7b30f8p-8f}, + {-0x1.7bc8cp-2f, -0x1.3c17a8p-3f, -0x1.716096p-6f, 0x1.d32a4ap-4f}, + {-0x1.7c58eep-1f, -0x1.a28998p-3f, -0x1.fb59dep-4f, -0x1.3e920cp-5f}, + {-0x1.256a5ap-1f, -0x1.d8372ep-4f, 0x1.abc8cp-3f, -0x1.c5cdd6p-6f}, +}; + +// Higher-order coefficients (up to 4) of block 2, per index (16 entries). +const float kShapeDetail2Codebook[16][4] = { + {-0x1.26adb4p-3f, 0x1.e25c82p-3f, -0x1.de0828p-4f, 0x1.a276b8p-6f}, + {-0x1.5c8862p-3f, -0x1.056a38p-4f, -0x1.8d0aaap-4f, 0x1.c158fcp-4f}, + {0x1.dd028ap-3f, 0x1.14449ep-2f, 0x1.818c5cp-5f, -0x1.0c60ccp-5f}, + {0x1.3a483p-3f, 0x1.170f7cp-4f, -0x1.1289dap-5f, 0x1.032e38p-3f}, + {-0x1.c34a02p-2f, 0x1.104924p-3f, 0x1.4d5304p-4f, -0x1.b0dd82p-7f}, + {-0x1.ebf6ap-2f, -0x1.ff5be6p-3f, -0x1.92641cp-7f, 0x1.d2179p-8f}, + {-0x1.6873bcp-4f, 0x1.574364p-3f, 0x1.2fc3f8p-3f, -0x1.eb13ep-4f}, + {-0x1.ac8e68p-4f, 0x1.a468cap-4f, 0x1.77ee4ep-3f, 0x1.f2607p-4f}, + {0x1.845dc8p-5f, -0x1.dc0db2p-11f, -0x1.b6ac64p-3f, -0x1.bffcdap-4f}, + {0x1.d08f64p-4f, -0x1.ec376p-3f, -0x1.f1561ap-4f, 0x1.50d49ap-5f}, + {0x1.8add16p-2f, 0x1.5f8b16p-5f, -0x1.7a072ep-3f, -0x1.247886p-6f}, + {0x1.d0b8dp-2f, -0x1.722a7p-3f, 0x1.9d53cep-5f, 0x1.fba45p-6f}, + {-0x1.3f748ap-3f, -0x1.27589ep-3f, 0x1.2a9d62p-6f, -0x1.2bbcb2p-3f}, + {-0x1.aa1944p-4f, -0x1.0aa044p-2f, 0x1.2bf984p-3f, 0x1.9f4a12p-4f}, + {0x1.95896ap-7f, -0x1.17f844p-12f, 0x1.b445eep-8f, -0x1.c8d196p-7f}, + {0x1.53aa36p-3f, -0x1.a7cd04p-4f, 0x1.ea582ep-4f, -0x1.35104ep-4f}, +}; + +// Higher-order coefficients (up to 4) of block 3, per index (16 entries). +const float kShapeDetail3Codebook[16][4] = { + {0x1.75b706p-3f, 0x1.16512ap-2f, -0x1.d82dbep-5f, 0x1.abde4p-6f}, + {0x1.c5d0fap-4f, 0x1.7c547ap-4f, 0x1.4p-4f, -0x1.52d88p-4f}, + {0x1.dad752p-5f, 0x1.b4bb5ep-11f, 0x1.688bdap-3f, 0x1.154eb2p-3f}, + {-0x1.bf876ap-6f, 0x1.9424e6p-4f, -0x1.0d855ap-4f, 0x1.dcdc44p-4f}, + {-0x1.c84944p-3f, 0x1.01e9bp-4f, 0x1.9d29dcp-3f, -0x1.7089ap-4f}, + {-0x1.8c6ef4p-3f, 0x1.3ca57ap-2f, -0x1.ce0fc2p-7f, -0x1.1b3aeep-5f}, + {-0x1.8e63e8p-2f, -0x1.73a9bp-3f, 0x1.b910c2p-4f, 0x1.9afc04p-5f}, + {-0x1.61e604p-2f, 0x1.09d496p-4f, -0x1.0a4c1ep-4f, 0x1.0cdeap-4f}, + {0x1.470ef6p-2f, -0x1.c6951p-5f, -0x1.c40c84p-3f, -0x1.1479d4p-4f}, + {0x1.d7a03p-2f, 0x1.5adfb6p-4f, 0x1.8ced4ep-5f, -0x1.6a161ep-7f}, + {0x1.9cec84p-3f, -0x1.1a9974p-4f, -0x1.12d88p-4f, 0x1.bbadcp-4f}, + {0x1.d1fa34p-3f, -0x1.6425aep-3f, 0x1.7a8a4p-4f, -0x1.107208p-4f}, + {-0x1.1554fcp-6f, 0x1.8739bp-5f, -0x1.6be6a4p-3f, -0x1.a275acp-4f}, + {-0x1.ae83a2p-5f, -0x1.0d0fe8p-4f, 0x1.3cab82p-6f, -0x1.0ed3d8p-5f}, + {-0x1.28c692p-3f, -0x1.e8b008p-3f, -0x1.8fc82ap-3f, -0x1.05cdd6p-4f}, + {-0x1.8bd23p-6f, -0x1.5af428p-2f, 0x1.d55e6cp-9f, 0x1.f3abcap-5f}, +}; + +// Higher-order coefficients (up to 4) of block 4, per index (8 entries). +const float kShapeDetail4Codebook[8][4] = { + {0x1.4bbe44p-2f, 0x1.25bb7cp-7f, -0x1.0286f8p-4f, 0x1.c942d4p-6f}, + {0x1.652bd4p-7f, -0x1.081c2ep-8f, -0x1.000864p-3f, -0x1.4b07dp-4f}, + {0x1.c26edap-4f, 0x1.066c2ap-2f, 0x1.5bea0cp-5f, 0x1.88b114p-11f}, + {-0x1.1564b6p-3f, 0x1.9d391p-3f, -0x1.55b68p-4f, 0x1.8090b4p-4f}, + {-0x1.c49a56p-2f, 0x1.38993ap-5f, 0x1.754b06p-6f, 0x1.02689p-8f}, + {-0x1.3f633cp-3f, 0x1.09f83cp-5f, 0x1.2997c4p-3f, -0x1.55cfaap-5f}, + {-0x1.318656p-3f, -0x1.c96edep-3f, -0x1.0d7cf6p-4f, 0x1.3343fap-4f}, + {0x1.8d1a66p-4f, -0x1.8adabap-4f, 0x1.54c33cp-4f, 0x1.93ea2ep-5f}, +}; + +// Inverse DCT matrices: kInverseDct[n - 1][i][k] is basis function k at element i for size n = 1..17. +const float kInverseDct[17][18][18] = { + { + { + 0x1p+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.6a09e6p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.6a09e6p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.bb67aep+0f, 0x1p+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.1a6264p-53f, -0x1p+1f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.bb67aep+0f, 0x1p+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.d906bcp+0f, 0x1.6a09e6p+0f, 0x1.87de2ap-1f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.87de2ap-1f, -0x1.6a09e6p+0f, -0x1.d906bcp+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.87de2ap-1f, -0x1.6a09e6p+0f, 0x1.d906bcp+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.d906bcp+0f, 0x1.6a09e6p+0f, -0x1.87de2ap-1f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.e6f0e2p+0f, 0x1.9e377ap+0f, 0x1.2cf23p+0f, 0x1.3c6ef4p-1f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.2cf23p+0f, -0x1.3c6ef4p-1f, -0x1.e6f0e2p+0f, -0x1.9e377ap+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.1a6264p-53f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.2cf23p+0f, -0x1.3c6ef4p-1f, 0x1.e6f0e2p+0f, -0x1.9e377ap+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.e6f0e2p+0f, 0x1.9e377ap+0f, -0x1.2cf23p+0f, 0x1.3c6ef4p-1f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.ee8dd4p+0f, 0x1.bb67aep+0f, 0x1.6a09e6p+0f, 0x1p+0f, 0x1.0907dcp-1f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.6a09e6p+0f, 0x1.1a6264p-53f, -0x1.6a09e6p+0f, -0x1p+1f, -0x1.6a09e6p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.0907dcp-1f, -0x1.bb67aep+0f, -0x1.6a09e6p+0f, 0x1p+0f, 0x1.ee8dd4p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.0907dcp-1f, -0x1.bb67aep+0f, 0x1.6a09e6p+0f, 0x1p+0f, -0x1.ee8dd4p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.6a09e6p+0f, -0x1.a79394p-52f, 0x1.6a09e6p+0f, -0x1p+1f, 0x1.6a09e6p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.ee8dd4p+0f, 0x1.bb67aep+0f, -0x1.6a09e6p+0f, 0x1p+0f, -0x1.0907dcp-1f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.f329cp+0f, 0x1.cd4bcap+0f, 0x1.904c38p+0f, 0x1.3f3a0ep+0f, 0x1.bc4c04p-1f, + 0x1.c7b90ep-2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.904c38p+0f, 0x1.c7b90ep-2f, -0x1.bc4c04p-1f, -0x1.cd4bcap+0f, -0x1.f329cp+0f, + -0x1.3f3a0ep+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.bc4c04p-1f, -0x1.3f3a0ep+0f, -0x1.f329cp+0f, -0x1.c7b90ep-2f, 0x1.904c38p+0f, + 0x1.cd4bcap+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.1a6264p-53f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, 0x1.60fafcp-51f, + -0x1p+1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.bc4c04p-1f, -0x1.3f3a0ep+0f, 0x1.f329cp+0f, -0x1.c7b90ep-2f, -0x1.904c38p+0f, + 0x1.cd4bcap+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.904c38p+0f, 0x1.c7b90ep-2f, 0x1.bc4c04p-1f, -0x1.cd4bcap+0f, 0x1.f329cp+0f, + -0x1.3f3a0ep+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.f329cp+0f, 0x1.cd4bcap+0f, -0x1.904c38p+0f, 0x1.3f3a0ep+0f, -0x1.bc4c04p-1f, + 0x1.c7b90ep-2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.f6297cp+0f, 0x1.d906bcp+0f, 0x1.a9b662p+0f, 0x1.6a09e6p+0f, 0x1.1c73b4p+0f, + 0x1.87de2ap-1f, 0x1.8f8b84p-2f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.a9b662p+0f, 0x1.87de2ap-1f, -0x1.8f8b84p-2f, -0x1.6a09e6p+0f, -0x1.f6297cp+0f, + -0x1.d906bcp+0f, -0x1.1c73b4p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.1c73b4p+0f, -0x1.87de2ap-1f, -0x1.f6297cp+0f, -0x1.6a09e6p+0f, 0x1.8f8b84p-2f, + 0x1.d906bcp+0f, 0x1.a9b662p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.8f8b84p-2f, -0x1.d906bcp+0f, -0x1.1c73b4p+0f, 0x1.6a09e6p+0f, 0x1.a9b662p+0f, + -0x1.87de2ap-1f, -0x1.f6297cp+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.8f8b84p-2f, -0x1.d906bcp+0f, 0x1.1c73b4p+0f, 0x1.6a09e6p+0f, -0x1.a9b662p+0f, + -0x1.87de2ap-1f, 0x1.f6297cp+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.1c73b4p+0f, -0x1.87de2ap-1f, 0x1.f6297cp+0f, -0x1.6a09e6p+0f, -0x1.8f8b84p-2f, + 0x1.d906bcp+0f, -0x1.a9b662p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.a9b662p+0f, 0x1.87de2ap-1f, 0x1.8f8b84p-2f, -0x1.6a09e6p+0f, 0x1.f6297cp+0f, + -0x1.d906bcp+0f, 0x1.1c73b4p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.f6297cp+0f, 0x1.d906bcp+0f, -0x1.a9b662p+0f, 0x1.6a09e6p+0f, -0x1.1c73b4p+0f, + 0x1.87de2ap-1f, -0x1.8f8b84p-2f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.f838b8p+0f, 0x1.e11f64p+0f, 0x1.bb67aep+0f, 0x1.8836fap+0f, 0x1.491b76p+0f, + 0x1p+0f, 0x1.5e3a88p-1f, 0x1.63a1a8p-2f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.bb67aep+0f, 0x1p+0f, 0x1.1a6264p-53f, -0x1p+0f, -0x1.bb67aep+0f, + -0x1p+1f, -0x1.bb67aep+0f, -0x1p+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.491b76p+0f, -0x1.63a1a8p-2f, -0x1.bb67aep+0f, -0x1.e11f64p+0f, -0x1.5e3a88p-1f, + 0x1p+0f, 0x1.f838b8p+0f, 0x1.8836fap+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.5e3a88p-1f, -0x1.8836fap+0f, -0x1.bb67aep+0f, 0x1.63a1a8p-2f, 0x1.f838b8p+0f, + 0x1p+0f, -0x1.491b76p+0f, -0x1.e11f64p+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.1a6264p-53f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, 0x1.60fafcp-51f, + -0x1p+1f, -0x1.ee2c2ep-51f, 0x1p+1f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.5e3a88p-1f, -0x1.8836fap+0f, 0x1.bb67aep+0f, 0x1.63a1a8p-2f, -0x1.f838b8p+0f, + 0x1p+0f, 0x1.491b76p+0f, -0x1.e11f64p+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.491b76p+0f, -0x1.63a1a8p-2f, 0x1.bb67aep+0f, -0x1.e11f64p+0f, 0x1.5e3a88p-1f, + 0x1p+0f, -0x1.f838b8p+0f, 0x1.8836fap+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.bb67aep+0f, 0x1p+0f, 0x1.60fafcp-51f, -0x1p+0f, 0x1.bb67aep+0f, + -0x1p+1f, 0x1.bb67aep+0f, -0x1p+0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.f838b8p+0f, 0x1.e11f64p+0f, -0x1.bb67aep+0f, 0x1.8836fap+0f, -0x1.491b76p+0f, + 0x1p+0f, -0x1.5e3a88p-1f, 0x1.63a1a8p-2f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.f9b24ap+0f, 0x1.e6f0e2p+0f, 0x1.c83202p+0f, 0x1.9e377ap+0f, 0x1.6a09e6p+0f, + 0x1.2cf23p+0f, 0x1.d0e2e2p-1f, 0x1.3c6ef4p-1f, 0x1.4060b6p-2f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.c83202p+0f, 0x1.2cf23p+0f, 0x1.4060b6p-2f, -0x1.3c6ef4p-1f, -0x1.6a09e6p+0f, + -0x1.e6f0e2p+0f, -0x1.f9b24ap+0f, -0x1.9e377ap+0f, -0x1.d0e2e2p-1f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.6a09e6p+0f, 0x1.1a6264p-53f, -0x1.6a09e6p+0f, -0x1p+1f, -0x1.6a09e6p+0f, + -0x1.a79394p-52f, 0x1.6a09e6p+0f, 0x1p+1f, 0x1.6a09e6p+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.d0e2e2p-1f, -0x1.2cf23p+0f, -0x1.f9b24ap+0f, -0x1.3c6ef4p-1f, 0x1.6a09e6p+0f, + 0x1.e6f0e2p+0f, 0x1.4060b6p-2f, -0x1.9e377ap+0f, -0x1.c83202p+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.4060b6p-2f, -0x1.e6f0e2p+0f, -0x1.d0e2e2p-1f, 0x1.9e377ap+0f, 0x1.6a09e6p+0f, + -0x1.2cf23p+0f, -0x1.c83202p+0f, 0x1.3c6ef4p-1f, 0x1.f9b24ap+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.4060b6p-2f, -0x1.e6f0e2p+0f, 0x1.d0e2e2p-1f, 0x1.9e377ap+0f, -0x1.6a09e6p+0f, + -0x1.2cf23p+0f, 0x1.c83202p+0f, 0x1.3c6ef4p-1f, -0x1.f9b24ap+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.d0e2e2p-1f, -0x1.2cf23p+0f, 0x1.f9b24ap+0f, -0x1.3c6ef4p-1f, -0x1.6a09e6p+0f, + 0x1.e6f0e2p+0f, -0x1.4060b6p-2f, -0x1.9e377ap+0f, 0x1.c83202p+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.6a09e6p+0f, -0x1.a79394p-52f, 0x1.6a09e6p+0f, -0x1p+1f, 0x1.6a09e6p+0f, + 0x1.3daebp-50f, -0x1.6a09e6p+0f, 0x1p+1f, -0x1.6a09e6p+0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.c83202p+0f, 0x1.2cf23p+0f, -0x1.4060b6p-2f, -0x1.3c6ef4p-1f, 0x1.6a09e6p+0f, + -0x1.e6f0e2p+0f, 0x1.f9b24ap+0f, -0x1.9e377ap+0f, 0x1.d0e2e2p-1f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.f9b24ap+0f, 0x1.e6f0e2p+0f, -0x1.c83202p+0f, 0x1.9e377ap+0f, -0x1.6a09e6p+0f, + 0x1.2cf23p+0f, -0x1.d0e2e2p-1f, 0x1.3c6ef4p-1f, -0x1.4060b6p-2f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fac9ep+0f, 0x1.eb42aap+0f, 0x1.d1bb48p+0f, 0x1.aeb8c8p+0f, 0x1.82f19cp+0f, + 0x1.4f49e8p+0f, 0x1.14ceep+0f, 0x1.a9628ep-1f, 0x1.207e8p-1f, 0x1.2375f6p-2f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.d1bb48p+0f, 0x1.4f49e8p+0f, 0x1.207e8p-1f, -0x1.2375f6p-2f, -0x1.14ceep+0f, + -0x1.aeb8c8p+0f, -0x1.fac9ep+0f, -0x1.eb42aap+0f, -0x1.82f19cp+0f, -0x1.a9628ep-1f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.82f19cp+0f, 0x1.2375f6p-2f, -0x1.14ceep+0f, -0x1.eb42aap+0f, -0x1.d1bb48p+0f, + -0x1.a9628ep-1f, 0x1.207e8p-1f, 0x1.aeb8c8p+0f, 0x1.fac9ep+0f, 0x1.4f49e8p+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.14ceep+0f, -0x1.a9628ep-1f, -0x1.fac9ep+0f, -0x1.4f49e8p+0f, 0x1.207e8p-1f, + 0x1.eb42aap+0f, 0x1.82f19cp+0f, -0x1.2375f6p-2f, -0x1.d1bb48p+0f, -0x1.aeb8c8p+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.207e8p-1f, -0x1.aeb8c8p+0f, -0x1.82f19cp+0f, 0x1.a9628ep-1f, 0x1.fac9ep+0f, + 0x1.2375f6p-2f, -0x1.d1bb48p+0f, -0x1.4f49e8p+0f, 0x1.14ceep+0f, 0x1.eb42aap+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.469898p-51f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, -0x1.4f8282p-50f, + -0x1p+1f, -0x1.ee2c2ep-51f, 0x1p+1f, -0x1.6128a8p-49f, -0x1p+1f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.207e8p-1f, -0x1.aeb8c8p+0f, 0x1.82f19cp+0f, 0x1.a9628ep-1f, -0x1.fac9ep+0f, + 0x1.2375f6p-2f, 0x1.d1bb48p+0f, -0x1.4f49e8p+0f, -0x1.14ceep+0f, 0x1.eb42aap+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.14ceep+0f, -0x1.a9628ep-1f, 0x1.fac9ep+0f, -0x1.4f49e8p+0f, -0x1.207e8p-1f, + 0x1.eb42aap+0f, -0x1.82f19cp+0f, -0x1.2375f6p-2f, 0x1.d1bb48p+0f, -0x1.aeb8c8p+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.82f19cp+0f, 0x1.2375f6p-2f, 0x1.14ceep+0f, -0x1.eb42aap+0f, 0x1.d1bb48p+0f, + -0x1.a9628ep-1f, -0x1.207e8p-1f, 0x1.aeb8c8p+0f, -0x1.fac9ep+0f, 0x1.4f49e8p+0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.d1bb48p+0f, 0x1.4f49e8p+0f, -0x1.207e8p-1f, -0x1.2375f6p-2f, 0x1.14ceep+0f, + -0x1.aeb8c8p+0f, 0x1.fac9ep+0f, -0x1.eb42aap+0f, 0x1.82f19cp+0f, -0x1.a9628ep-1f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.fac9ep+0f, 0x1.eb42aap+0f, -0x1.d1bb48p+0f, 0x1.aeb8c8p+0f, -0x1.82f19cp+0f, + 0x1.4f49e8p+0f, -0x1.14ceep+0f, 0x1.a9628ep-1f, -0x1.207e8p-1f, 0x1.2375f6p-2f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fb9eaap+0f, 0x1.ee8dd4p+0f, 0x1.d906bcp+0f, 0x1.bb67aep+0f, 0x1.963268p+0f, + 0x1.6a09e6p+0f, 0x1.37af94p+0f, 0x1p+0f, 0x1.87de2ap-1f, 0x1.0907dcp-1f, 0x1.0b515p-2f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.d906bcp+0f, 0x1.6a09e6p+0f, 0x1.87de2ap-1f, 0x1.1a6264p-53f, -0x1.87de2ap-1f, + -0x1.6a09e6p+0f, -0x1.d906bcp+0f, -0x1p+1f, -0x1.d906bcp+0f, -0x1.6a09e6p+0f, -0x1.87de2ap-1f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.963268p+0f, 0x1.0907dcp-1f, -0x1.87de2ap-1f, -0x1.bb67aep+0f, -0x1.fb9eaap+0f, + -0x1.6a09e6p+0f, -0x1.0b515p-2f, 0x1p+0f, 0x1.d906bcp+0f, 0x1.ee8dd4p+0f, 0x1.37af94p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.37af94p+0f, -0x1.0907dcp-1f, -0x1.d906bcp+0f, -0x1.bb67aep+0f, -0x1.0b515p-2f, + 0x1.6a09e6p+0f, 0x1.fb9eaap+0f, 0x1p+0f, -0x1.87de2ap-1f, -0x1.ee8dd4p+0f, -0x1.963268p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.87de2ap-1f, -0x1.6a09e6p+0f, -0x1.d906bcp+0f, -0x1.a79394p-52f, 0x1.d906bcp+0f, + 0x1.6a09e6p+0f, -0x1.87de2ap-1f, -0x1p+1f, -0x1.87de2ap-1f, 0x1.6a09e6p+0f, 0x1.d906bcp+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.0b515p-2f, -0x1.ee8dd4p+0f, -0x1.87de2ap-1f, 0x1.bb67aep+0f, 0x1.37af94p+0f, + -0x1.6a09e6p+0f, -0x1.963268p+0f, 0x1p+0f, 0x1.d906bcp+0f, -0x1.0907dcp-1f, -0x1.fb9eaap+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.0b515p-2f, -0x1.ee8dd4p+0f, 0x1.87de2ap-1f, 0x1.bb67aep+0f, -0x1.37af94p+0f, + -0x1.6a09e6p+0f, 0x1.963268p+0f, 0x1p+0f, -0x1.d906bcp+0f, -0x1.0907dcp-1f, 0x1.fb9eaap+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.87de2ap-1f, -0x1.6a09e6p+0f, 0x1.d906bcp+0f, 0x1.583ebep-49f, -0x1.d906bcp+0f, + 0x1.6a09e6p+0f, 0x1.87de2ap-1f, -0x1p+1f, 0x1.87de2ap-1f, 0x1.6a09e6p+0f, -0x1.d906bcp+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.37af94p+0f, -0x1.0907dcp-1f, 0x1.d906bcp+0f, -0x1.bb67aep+0f, 0x1.0b515p-2f, + 0x1.6a09e6p+0f, -0x1.fb9eaap+0f, 0x1p+0f, 0x1.87de2ap-1f, -0x1.ee8dd4p+0f, 0x1.963268p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.963268p+0f, 0x1.0907dcp-1f, 0x1.87de2ap-1f, -0x1.bb67aep+0f, 0x1.fb9eaap+0f, + -0x1.6a09e6p+0f, 0x1.0b515p-2f, 0x1p+0f, -0x1.d906bcp+0f, 0x1.ee8dd4p+0f, -0x1.37af94p+0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.d906bcp+0f, 0x1.6a09e6p+0f, -0x1.87de2ap-1f, -0x1.ee2c2ep-51f, 0x1.87de2ap-1f, + -0x1.6a09e6p+0f, 0x1.d906bcp+0f, -0x1p+1f, 0x1.d906bcp+0f, -0x1.6a09e6p+0f, 0x1.87de2ap-1f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.fb9eaap+0f, 0x1.ee8dd4p+0f, -0x1.d906bcp+0f, 0x1.bb67aep+0f, -0x1.963268p+0f, + 0x1.6a09e6p+0f, -0x1.37af94p+0f, 0x1p+0f, -0x1.87de2ap-1f, 0x1.0907dcp-1f, -0x1.0b515p-2f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fc4456p+0f, 0x1.f11f4ap+0f, 0x1.deba72p+0f, 0x1.c55a7ep+0f, 0x1.a55e24p+0f, + 0x1.7f3ccep+0f, 0x1.5384dp+0f, 0x1.22d962p+0f, 0x1.dbe064p-1f, 0x1.6b1d8cp-1f, 0x1.ea1e54p-2f, + 0x1.edb7dep-3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.deba72p+0f, 0x1.7f3ccep+0f, 0x1.dbe064p-1f, 0x1.edb7dep-3f, -0x1.ea1e54p-2f, + -0x1.22d962p+0f, -0x1.a55e24p+0f, -0x1.f11f4ap+0f, -0x1.fc4456p+0f, -0x1.c55a7ep+0f, -0x1.5384dp+0f, + -0x1.6b1d8cp-1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.a55e24p+0f, 0x1.6b1d8cp-1f, -0x1.ea1e54p-2f, -0x1.7f3ccep+0f, -0x1.fc4456p+0f, + -0x1.c55a7ep+0f, -0x1.dbe064p-1f, 0x1.edb7dep-3f, 0x1.5384dp+0f, 0x1.f11f4ap+0f, 0x1.deba72p+0f, + 0x1.22d962p+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.5384dp+0f, -0x1.edb7dep-3f, -0x1.a55e24p+0f, -0x1.f11f4ap+0f, -0x1.dbe064p-1f, + 0x1.6b1d8cp-1f, 0x1.deba72p+0f, 0x1.c55a7ep+0f, 0x1.ea1e54p-2f, -0x1.22d962p+0f, -0x1.fc4456p+0f, + -0x1.7f3ccep+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.dbe064p-1f, -0x1.22d962p+0f, -0x1.fc4456p+0f, -0x1.6b1d8cp-1f, 0x1.5384dp+0f, + 0x1.f11f4ap+0f, 0x1.ea1e54p-2f, -0x1.7f3ccep+0f, -0x1.deba72p+0f, -0x1.edb7dep-3f, 0x1.a55e24p+0f, + 0x1.c55a7ep+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.ea1e54p-2f, -0x1.c55a7ep+0f, -0x1.5384dp+0f, 0x1.22d962p+0f, 0x1.deba72p+0f, + -0x1.edb7dep-3f, -0x1.fc4456p+0f, -0x1.6b1d8cp-1f, 0x1.a55e24p+0f, 0x1.7f3ccep+0f, -0x1.dbe064p-1f, + -0x1.f11f4ap+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.72cecep-52f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, 0x1.60fafcp-51f, + -0x1p+1f, -0x1.ee2c2ep-51f, 0x1p+1f, 0x1.3daebp-50f, -0x1p+1f, -0x1.6111d2p-48f, + 0x1p+1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.ea1e54p-2f, -0x1.c55a7ep+0f, 0x1.5384dp+0f, 0x1.22d962p+0f, -0x1.deba72p+0f, + -0x1.edb7dep-3f, 0x1.fc4456p+0f, -0x1.6b1d8cp-1f, -0x1.a55e24p+0f, 0x1.7f3ccep+0f, 0x1.dbe064p-1f, + -0x1.f11f4ap+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.dbe064p-1f, -0x1.22d962p+0f, 0x1.fc4456p+0f, -0x1.6b1d8cp-1f, -0x1.5384dp+0f, + 0x1.f11f4ap+0f, -0x1.ea1e54p-2f, -0x1.7f3ccep+0f, 0x1.deba72p+0f, -0x1.edb7dep-3f, -0x1.a55e24p+0f, + 0x1.c55a7ep+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.5384dp+0f, -0x1.edb7dep-3f, 0x1.a55e24p+0f, -0x1.f11f4ap+0f, 0x1.dbe064p-1f, + 0x1.6b1d8cp-1f, -0x1.deba72p+0f, 0x1.c55a7ep+0f, -0x1.ea1e54p-2f, -0x1.22d962p+0f, 0x1.fc4456p+0f, + -0x1.7f3ccep+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.a55e24p+0f, 0x1.6b1d8cp-1f, 0x1.ea1e54p-2f, -0x1.7f3ccep+0f, 0x1.fc4456p+0f, + -0x1.c55a7ep+0f, 0x1.dbe064p-1f, 0x1.edb7dep-3f, -0x1.5384dp+0f, 0x1.f11f4ap+0f, -0x1.deba72p+0f, + 0x1.22d962p+0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.deba72p+0f, 0x1.7f3ccep+0f, -0x1.dbe064p-1f, 0x1.edb7dep-3f, 0x1.ea1e54p-2f, + -0x1.22d962p+0f, 0x1.a55e24p+0f, -0x1.f11f4ap+0f, 0x1.fc4456p+0f, -0x1.c55a7ep+0f, 0x1.5384dp+0f, + -0x1.6b1d8cp-1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.fc4456p+0f, 0x1.f11f4ap+0f, -0x1.deba72p+0f, 0x1.c55a7ep+0f, -0x1.a55e24p+0f, + 0x1.7f3ccep+0f, -0x1.5384dp+0f, 0x1.22d962p+0f, -0x1.dbe064p-1f, 0x1.6b1d8cp-1f, -0x1.ea1e54p-2f, + 0x1.edb7dep-3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fcc7d8p+0f, 0x1.f329cp+0f, 0x1.e344aep+0f, 0x1.cd4bcap+0f, 0x1.b185d6p+0f, + 0x1.904c38p+0f, 0x1.6a09e6p+0f, 0x1.3f3a0ep+0f, 0x1.106682p+0f, 0x1.bc4c04p-1f, 0x1.5234acp-1f, + 0x1.c7b90ep-2f, 0x1.ca9b44p-3f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.e344aep+0f, 0x1.904c38p+0f, 0x1.106682p+0f, 0x1.c7b90ep-2f, -0x1.ca9b44p-3f, + -0x1.bc4c04p-1f, -0x1.6a09e6p+0f, -0x1.cd4bcap+0f, -0x1.fcc7d8p+0f, -0x1.f329cp+0f, -0x1.b185d6p+0f, + -0x1.3f3a0ep+0f, -0x1.5234acp-1f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.b185d6p+0f, 0x1.bc4c04p-1f, -0x1.ca9b44p-3f, -0x1.3f3a0ep+0f, -0x1.e344aep+0f, + -0x1.f329cp+0f, -0x1.6a09e6p+0f, -0x1.c7b90ep-2f, 0x1.5234acp-1f, 0x1.904c38p+0f, 0x1.fcc7d8p+0f, + 0x1.cd4bcap+0f, 0x1.106682p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.6a09e6p+0f, 0x1.1a6264p-53f, -0x1.6a09e6p+0f, -0x1p+1f, -0x1.6a09e6p+0f, + -0x1.a79394p-52f, 0x1.6a09e6p+0f, 0x1p+1f, 0x1.6a09e6p+0f, 0x1.60fafcp-51f, -0x1.6a09e6p+0f, + -0x1p+1f, -0x1.6a09e6p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.106682p+0f, -0x1.bc4c04p-1f, -0x1.fcc7d8p+0f, -0x1.3f3a0ep+0f, 0x1.5234acp-1f, + 0x1.f329cp+0f, 0x1.6a09e6p+0f, -0x1.c7b90ep-2f, -0x1.e344aep+0f, -0x1.904c38p+0f, 0x1.ca9b44p-3f, + 0x1.cd4bcap+0f, 0x1.b185d6p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.5234acp-1f, -0x1.904c38p+0f, -0x1.b185d6p+0f, 0x1.c7b90ep-2f, 0x1.fcc7d8p+0f, + 0x1.bc4c04p-1f, -0x1.6a09e6p+0f, -0x1.cd4bcap+0f, 0x1.ca9b44p-3f, 0x1.f329cp+0f, 0x1.106682p+0f, + -0x1.3f3a0ep+0f, -0x1.e344aep+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.ca9b44p-3f, -0x1.f329cp+0f, -0x1.5234acp-1f, 0x1.cd4bcap+0f, 0x1.106682p+0f, + -0x1.904c38p+0f, -0x1.6a09e6p+0f, 0x1.3f3a0ep+0f, 0x1.b185d6p+0f, -0x1.bc4c04p-1f, -0x1.e344aep+0f, + 0x1.c7b90ep-2f, 0x1.fcc7d8p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.ca9b44p-3f, -0x1.f329cp+0f, 0x1.5234acp-1f, 0x1.cd4bcap+0f, -0x1.106682p+0f, + -0x1.904c38p+0f, 0x1.6a09e6p+0f, 0x1.3f3a0ep+0f, -0x1.b185d6p+0f, -0x1.bc4c04p-1f, 0x1.e344aep+0f, + 0x1.c7b90ep-2f, -0x1.fcc7d8p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.5234acp-1f, -0x1.904c38p+0f, 0x1.b185d6p+0f, 0x1.c7b90ep-2f, -0x1.fcc7d8p+0f, + 0x1.bc4c04p-1f, 0x1.6a09e6p+0f, -0x1.cd4bcap+0f, -0x1.ca9b44p-3f, 0x1.f329cp+0f, -0x1.106682p+0f, + -0x1.3f3a0ep+0f, 0x1.e344aep+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.106682p+0f, -0x1.bc4c04p-1f, 0x1.fcc7d8p+0f, -0x1.3f3a0ep+0f, -0x1.5234acp-1f, + 0x1.f329cp+0f, -0x1.6a09e6p+0f, -0x1.c7b90ep-2f, 0x1.e344aep+0f, -0x1.904c38p+0f, -0x1.ca9b44p-3f, + 0x1.cd4bcap+0f, -0x1.b185d6p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.6a09e6p+0f, -0x1.a79394p-52f, 0x1.6a09e6p+0f, -0x1p+1f, 0x1.6a09e6p+0f, + 0x1.3daebp-50f, -0x1.6a09e6p+0f, 0x1p+1f, -0x1.6a09e6p+0f, 0x1.ee8786p-50f, 0x1.6a09e6p+0f, + -0x1p+1f, 0x1.6a09e6p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.b185d6p+0f, 0x1.bc4c04p-1f, 0x1.ca9b44p-3f, -0x1.3f3a0ep+0f, 0x1.e344aep+0f, + -0x1.f329cp+0f, 0x1.6a09e6p+0f, -0x1.c7b90ep-2f, -0x1.5234acp-1f, 0x1.904c38p+0f, -0x1.fcc7d8p+0f, + 0x1.cd4bcap+0f, -0x1.106682p+0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.e344aep+0f, 0x1.904c38p+0f, -0x1.106682p+0f, 0x1.c7b90ep-2f, 0x1.ca9b44p-3f, + -0x1.bc4c04p-1f, 0x1.6a09e6p+0f, -0x1.cd4bcap+0f, 0x1.fcc7d8p+0f, -0x1.f329cp+0f, 0x1.b185d6p+0f, + -0x1.3f3a0ep+0f, 0x1.5234acp-1f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.fcc7d8p+0f, 0x1.f329cp+0f, -0x1.e344aep+0f, 0x1.cd4bcap+0f, -0x1.b185d6p+0f, + 0x1.904c38p+0f, -0x1.6a09e6p+0f, 0x1.3f3a0ep+0f, -0x1.106682p+0f, 0x1.bc4c04p-1f, -0x1.5234acp-1f, + 0x1.c7b90ep-2f, -0x1.ca9b44p-3f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fd31fap+0f, 0x1.f4cfc4p+0f, 0x1.e6f0e2p+0f, 0x1.d3bc3ap+0f, 0x1.bb67aep+0f, + 0x1.9e377ap+0f, 0x1.7c7d7ap+0f, 0x1.56984ap+0f, 0x1.2cf23p+0f, 0x1p+0f, 0x1.a07f92p-1f, + 0x1.3c6ef4p-1f, 0x1.a9cd9ap-2f, 0x1.ac260ap-3f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.e6f0e2p+0f, 0x1.9e377ap+0f, 0x1.2cf23p+0f, 0x1.3c6ef4p-1f, 0x1.469898p-51f, + -0x1.3c6ef4p-1f, -0x1.2cf23p+0f, -0x1.9e377ap+0f, -0x1.e6f0e2p+0f, -0x1p+1f, -0x1.e6f0e2p+0f, + -0x1.9e377ap+0f, -0x1.2cf23p+0f, -0x1.3c6ef4p-1f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.bb67aep+0f, 0x1p+0f, 0x1.469898p-51f, -0x1p+0f, -0x1.bb67aep+0f, + -0x1p+1f, -0x1.bb67aep+0f, -0x1p+0f, -0x1.a79394p-52f, 0x1p+0f, 0x1.bb67aep+0f, + 0x1p+1f, 0x1.bb67aep+0f, 0x1p+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.7c7d7ap+0f, 0x1.ac260ap-3f, -0x1.2cf23p+0f, -0x1.f4cfc4p+0f, -0x1.bb67aep+0f, + -0x1.3c6ef4p-1f, 0x1.a07f92p-1f, 0x1.d3bc3ap+0f, 0x1.e6f0e2p+0f, 0x1p+0f, -0x1.a9cd9ap-2f, + -0x1.9e377ap+0f, -0x1.fd31fap+0f, -0x1.56984ap+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.2cf23p+0f, -0x1.3c6ef4p-1f, -0x1.e6f0e2p+0f, -0x1.9e377ap+0f, -0x1.a79394p-52f, + 0x1.9e377ap+0f, 0x1.e6f0e2p+0f, 0x1.3c6ef4p-1f, -0x1.2cf23p+0f, -0x1p+1f, -0x1.2cf23p+0f, + 0x1.3c6ef4p-1f, 0x1.e6f0e2p+0f, 0x1.9e377ap+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.a07f92p-1f, -0x1.56984ap+0f, -0x1.e6f0e2p+0f, -0x1.ac260ap-3f, 0x1.bb67aep+0f, + 0x1.9e377ap+0f, -0x1.a9cd9ap-2f, -0x1.f4cfc4p+0f, -0x1.2cf23p+0f, 0x1p+0f, 0x1.fd31fap+0f, + 0x1.3c6ef4p-1f, -0x1.7c7d7ap+0f, -0x1.d3bc3ap+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.a9cd9ap-2f, -0x1.d3bc3ap+0f, -0x1.2cf23p+0f, 0x1.56984ap+0f, 0x1.bb67aep+0f, + -0x1.3c6ef4p-1f, -0x1.fd31fap+0f, -0x1.ac260ap-3f, 0x1.e6f0e2p+0f, 0x1p+0f, -0x1.7c7d7ap+0f, + -0x1.9e377ap+0f, 0x1.a07f92p-1f, 0x1.f4cfc4p+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.469898p-51f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, 0x1.60fafcp-51f, + -0x1p+1f, -0x1.ee2c2ep-51f, 0x1p+1f, 0x1.3daebp-50f, -0x1p+1f, -0x1.6111d2p-48f, + 0x1p+1f, -0x1.1a901p-49f, -0x1p+1f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.a9cd9ap-2f, -0x1.d3bc3ap+0f, 0x1.2cf23p+0f, 0x1.56984ap+0f, -0x1.bb67aep+0f, + -0x1.3c6ef4p-1f, 0x1.fd31fap+0f, -0x1.ac260ap-3f, -0x1.e6f0e2p+0f, 0x1p+0f, 0x1.7c7d7ap+0f, + -0x1.9e377ap+0f, -0x1.a07f92p-1f, 0x1.f4cfc4p+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.a07f92p-1f, -0x1.56984ap+0f, 0x1.e6f0e2p+0f, -0x1.ac260ap-3f, -0x1.bb67aep+0f, + 0x1.9e377ap+0f, 0x1.a9cd9ap-2f, -0x1.f4cfc4p+0f, 0x1.2cf23p+0f, 0x1p+0f, -0x1.fd31fap+0f, + 0x1.3c6ef4p-1f, 0x1.7c7d7ap+0f, -0x1.d3bc3ap+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.2cf23p+0f, -0x1.3c6ef4p-1f, 0x1.e6f0e2p+0f, -0x1.9e377ap+0f, -0x1.ee2c2ep-51f, + 0x1.9e377ap+0f, -0x1.e6f0e2p+0f, 0x1.3c6ef4p-1f, 0x1.2cf23p+0f, -0x1p+1f, 0x1.2cf23p+0f, + 0x1.3c6ef4p-1f, -0x1.e6f0e2p+0f, 0x1.9e377ap+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.7c7d7ap+0f, 0x1.ac260ap-3f, 0x1.2cf23p+0f, -0x1.f4cfc4p+0f, 0x1.bb67aep+0f, + -0x1.3c6ef4p-1f, -0x1.a07f92p-1f, 0x1.d3bc3ap+0f, -0x1.e6f0e2p+0f, 0x1p+0f, 0x1.a9cd9ap-2f, + -0x1.9e377ap+0f, 0x1.fd31fap+0f, -0x1.56984ap+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.bb67aep+0f, 0x1p+0f, 0x1.60fafcp-51f, -0x1p+0f, 0x1.bb67aep+0f, + -0x1p+1f, 0x1.bb67aep+0f, -0x1p+0f, -0x1.845e1ep-48f, 0x1p+0f, -0x1.bb67aep+0f, + 0x1p+1f, -0x1.bb67aep+0f, 0x1p+0f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.e6f0e2p+0f, 0x1.9e377ap+0f, -0x1.2cf23p+0f, 0x1.3c6ef4p-1f, 0x1.3daebp-50f, + -0x1.3c6ef4p-1f, 0x1.2cf23p+0f, -0x1.9e377ap+0f, 0x1.e6f0e2p+0f, -0x1p+1f, 0x1.e6f0e2p+0f, + -0x1.9e377ap+0f, 0x1.2cf23p+0f, -0x1.3c6ef4p-1f, 0.0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.fd31fap+0f, 0x1.f4cfc4p+0f, -0x1.e6f0e2p+0f, 0x1.d3bc3ap+0f, -0x1.bb67aep+0f, + 0x1.9e377ap+0f, -0x1.7c7d7ap+0f, 0x1.56984ap+0f, -0x1.2cf23p+0f, 0x1p+0f, -0x1.a07f92p-1f, + 0x1.3c6ef4p-1f, -0x1.a9cd9ap-2f, 0x1.ac260ap-3f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fd88dap+0f, 0x1.f6297cp+0f, 0x1.e9f416p+0f, 0x1.d906bcp+0f, 0x1.c38b3p+0f, + 0x1.a9b662p+0f, 0x1.8bc806p+0f, 0x1.6a09e6p+0f, 0x1.44cf32p+0f, 0x1.1c73b4p+0f, 0x1.e2b5d4p-1f, + 0x1.87de2ap-1f, 0x1.294062p-1f, 0x1.8f8b84p-2f, 0x1.917a6cp-3f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.e9f416p+0f, 0x1.a9b662p+0f, 0x1.44cf32p+0f, 0x1.87de2ap-1f, 0x1.917a6cp-3f, + -0x1.8f8b84p-2f, -0x1.e2b5d4p-1f, -0x1.6a09e6p+0f, -0x1.c38b3p+0f, -0x1.f6297cp+0f, -0x1.fd88dap+0f, + -0x1.d906bcp+0f, -0x1.8bc806p+0f, -0x1.1c73b4p+0f, -0x1.294062p-1f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.c38b3p+0f, 0x1.1c73b4p+0f, 0x1.917a6cp-3f, -0x1.87de2ap-1f, -0x1.8bc806p+0f, + -0x1.f6297cp+0f, -0x1.e9f416p+0f, -0x1.6a09e6p+0f, -0x1.294062p-1f, 0x1.8f8b84p-2f, 0x1.44cf32p+0f, + 0x1.d906bcp+0f, 0x1.fd88dap+0f, 0x1.a9b662p+0f, 0x1.e2b5d4p-1f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.8bc806p+0f, 0x1.8f8b84p-2f, -0x1.e2b5d4p-1f, -0x1.d906bcp+0f, -0x1.e9f416p+0f, + -0x1.1c73b4p+0f, 0x1.917a6cp-3f, 0x1.6a09e6p+0f, 0x1.fd88dap+0f, 0x1.a9b662p+0f, 0x1.294062p-1f, + -0x1.87de2ap-1f, -0x1.c38b3p+0f, -0x1.f6297cp+0f, -0x1.44cf32p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.44cf32p+0f, -0x1.8f8b84p-2f, -0x1.c38b3p+0f, -0x1.d906bcp+0f, -0x1.294062p-1f, + 0x1.1c73b4p+0f, 0x1.fd88dap+0f, 0x1.6a09e6p+0f, -0x1.917a6cp-3f, -0x1.a9b662p+0f, -0x1.e9f416p+0f, + -0x1.87de2ap-1f, 0x1.e2b5d4p-1f, 0x1.f6297cp+0f, 0x1.8bc806p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.e2b5d4p-1f, -0x1.1c73b4p+0f, -0x1.fd88dap+0f, -0x1.87de2ap-1f, 0x1.44cf32p+0f, + 0x1.f6297cp+0f, 0x1.294062p-1f, -0x1.6a09e6p+0f, -0x1.e9f416p+0f, -0x1.8f8b84p-2f, 0x1.8bc806p+0f, + 0x1.d906bcp+0f, 0x1.917a6cp-3f, -0x1.a9b662p+0f, -0x1.c38b3p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.294062p-1f, -0x1.a9b662p+0f, -0x1.8bc806p+0f, 0x1.87de2ap-1f, 0x1.fd88dap+0f, + 0x1.8f8b84p-2f, -0x1.c38b3p+0f, -0x1.6a09e6p+0f, 0x1.e2b5d4p-1f, 0x1.f6297cp+0f, 0x1.917a6cp-3f, + -0x1.d906bcp+0f, -0x1.44cf32p+0f, 0x1.1c73b4p+0f, 0x1.e9f416p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, 0x1.917a6cp-3f, -0x1.f6297cp+0f, -0x1.294062p-1f, 0x1.d906bcp+0f, 0x1.e2b5d4p-1f, + -0x1.a9b662p+0f, -0x1.44cf32p+0f, 0x1.6a09e6p+0f, 0x1.8bc806p+0f, -0x1.1c73b4p+0f, -0x1.c38b3p+0f, + 0x1.87de2ap-1f, 0x1.e9f416p+0f, -0x1.8f8b84p-2f, -0x1.fd88dap+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.917a6cp-3f, -0x1.f6297cp+0f, 0x1.294062p-1f, 0x1.d906bcp+0f, -0x1.e2b5d4p-1f, + -0x1.a9b662p+0f, 0x1.44cf32p+0f, 0x1.6a09e6p+0f, -0x1.8bc806p+0f, -0x1.1c73b4p+0f, 0x1.c38b3p+0f, + 0x1.87de2ap-1f, -0x1.e9f416p+0f, -0x1.8f8b84p-2f, 0x1.fd88dap+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.294062p-1f, -0x1.a9b662p+0f, 0x1.8bc806p+0f, 0x1.87de2ap-1f, -0x1.fd88dap+0f, + 0x1.8f8b84p-2f, 0x1.c38b3p+0f, -0x1.6a09e6p+0f, -0x1.e2b5d4p-1f, 0x1.f6297cp+0f, -0x1.917a6cp-3f, + -0x1.d906bcp+0f, 0x1.44cf32p+0f, 0x1.1c73b4p+0f, -0x1.e9f416p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.e2b5d4p-1f, -0x1.1c73b4p+0f, 0x1.fd88dap+0f, -0x1.87de2ap-1f, -0x1.44cf32p+0f, + 0x1.f6297cp+0f, -0x1.294062p-1f, -0x1.6a09e6p+0f, 0x1.e9f416p+0f, -0x1.8f8b84p-2f, -0x1.8bc806p+0f, + 0x1.d906bcp+0f, -0x1.917a6cp-3f, -0x1.a9b662p+0f, 0x1.c38b3p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.44cf32p+0f, -0x1.8f8b84p-2f, 0x1.c38b3p+0f, -0x1.d906bcp+0f, 0x1.294062p-1f, + 0x1.1c73b4p+0f, -0x1.fd88dap+0f, 0x1.6a09e6p+0f, 0x1.917a6cp-3f, -0x1.a9b662p+0f, 0x1.e9f416p+0f, + -0x1.87de2ap-1f, -0x1.e2b5d4p-1f, 0x1.f6297cp+0f, -0x1.8bc806p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.8bc806p+0f, 0x1.8f8b84p-2f, 0x1.e2b5d4p-1f, -0x1.d906bcp+0f, 0x1.e9f416p+0f, + -0x1.1c73b4p+0f, -0x1.917a6cp-3f, 0x1.6a09e6p+0f, -0x1.fd88dap+0f, 0x1.a9b662p+0f, -0x1.294062p-1f, + -0x1.87de2ap-1f, 0x1.c38b3p+0f, -0x1.f6297cp+0f, 0x1.44cf32p+0f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.c38b3p+0f, 0x1.1c73b4p+0f, -0x1.917a6cp-3f, -0x1.87de2ap-1f, 0x1.8bc806p+0f, + -0x1.f6297cp+0f, 0x1.e9f416p+0f, -0x1.6a09e6p+0f, 0x1.294062p-1f, 0x1.8f8b84p-2f, -0x1.44cf32p+0f, + 0x1.d906bcp+0f, -0x1.fd88dap+0f, 0x1.a9b662p+0f, -0x1.e2b5d4p-1f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.e9f416p+0f, 0x1.a9b662p+0f, -0x1.44cf32p+0f, 0x1.87de2ap-1f, -0x1.917a6cp-3f, + -0x1.8f8b84p-2f, 0x1.e2b5d4p-1f, -0x1.6a09e6p+0f, 0x1.c38b3p+0f, -0x1.f6297cp+0f, 0x1.fd88dap+0f, + -0x1.d906bcp+0f, 0x1.8bc806p+0f, -0x1.1c73b4p+0f, 0x1.294062p-1f, 0.0f, 0.0f, + }, + { + 0x1p+0f, -0x1.fd88dap+0f, 0x1.f6297cp+0f, -0x1.e9f416p+0f, 0x1.d906bcp+0f, -0x1.c38b3p+0f, + 0x1.a9b662p+0f, -0x1.8bc806p+0f, 0x1.6a09e6p+0f, -0x1.44cf32p+0f, 0x1.1c73b4p+0f, -0x1.e2b5d4p-1f, + 0x1.87de2ap-1f, -0x1.294062p-1f, 0x1.8f8b84p-2f, -0x1.917a6cp-3f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, + { + { + 0x1p+0f, 0x1.fdd0dep+0f, 0x1.f7484p+0f, 0x1.ec746ap+0f, 0x1.dd6dp+0f, 0x1.ca52d8p+0f, + 0x1.b34faap+0f, 0x1.9895b6p+0f, 0x1.7a5f6p+0f, 0x1.58eea2p+0f, 0x1.348c86p+0f, 0x1.0d8884p+0f, + 0x1.c86fa2p-1f, 0x1.71e956p-1f, 0x1.183b1cp-1f, 0x1.7851aap-2f, 0x1.79ee64p-3f, 0.0f, + }, + { + 0x1p+0f, 0x1.ec746ap+0f, 0x1.b34faap+0f, 0x1.58eea2p+0f, 0x1.c86fa2p-1f, 0x1.7851aap-2f, + -0x1.79ee64p-3f, -0x1.71e956p-1f, -0x1.348c86p+0f, -0x1.9895b6p+0f, -0x1.dd6dp+0f, -0x1.fdd0dep+0f, + -0x1.f7484p+0f, -0x1.ca52d8p+0f, -0x1.7a5f6p+0f, -0x1.0d8884p+0f, -0x1.183b1cp-1f, 0.0f, + }, + { + 0x1p+0f, 0x1.ca52d8p+0f, 0x1.348c86p+0f, 0x1.7851aap-2f, -0x1.183b1cp-1f, -0x1.58eea2p+0f, + -0x1.dd6dp+0f, -0x1.fdd0dep+0f, -0x1.b34faap+0f, -0x1.0d8884p+0f, -0x1.79ee64p-3f, 0x1.71e956p-1f, + 0x1.7a5f6p+0f, 0x1.ec746ap+0f, 0x1.f7484p+0f, 0x1.9895b6p+0f, 0x1.c86fa2p-1f, 0.0f, + }, + { + 0x1p+0f, 0x1.9895b6p+0f, 0x1.183b1cp-1f, -0x1.71e956p-1f, -0x1.b34faap+0f, -0x1.fdd0dep+0f, + -0x1.7a5f6p+0f, -0x1.7851aap-2f, 0x1.c86fa2p-1f, 0x1.ca52d8p+0f, 0x1.f7484p+0f, 0x1.58eea2p+0f, + 0x1.79ee64p-3f, -0x1.0d8884p+0f, -0x1.dd6dp+0f, -0x1.ec746ap+0f, -0x1.348c86p+0f, 0.0f, + }, + { + 0x1p+0f, 0x1.58eea2p+0f, -0x1.79ee64p-3f, -0x1.9895b6p+0f, -0x1.f7484p+0f, -0x1.0d8884p+0f, + 0x1.183b1cp-1f, 0x1.ca52d8p+0f, 0x1.dd6dp+0f, 0x1.71e956p-1f, -0x1.c86fa2p-1f, -0x1.ec746ap+0f, + -0x1.b34faap+0f, -0x1.7851aap-2f, 0x1.348c86p+0f, 0x1.fdd0dep+0f, 0x1.7a5f6p+0f, 0.0f, + }, + { + 0x1p+0f, 0x1.0d8884p+0f, -0x1.c86fa2p-1f, -0x1.fdd0dep+0f, -0x1.348c86p+0f, 0x1.71e956p-1f, + 0x1.f7484p+0f, 0x1.58eea2p+0f, -0x1.183b1cp-1f, -0x1.ec746ap+0f, -0x1.7a5f6p+0f, 0x1.7851aap-2f, + 0x1.dd6dp+0f, 0x1.9895b6p+0f, -0x1.79ee64p-3f, -0x1.ca52d8p+0f, -0x1.b34faap+0f, 0.0f, + }, + { + 0x1p+0f, 0x1.71e956p-1f, -0x1.7a5f6p+0f, -0x1.ca52d8p+0f, 0x1.79ee64p-3f, 0x1.ec746ap+0f, + 0x1.348c86p+0f, -0x1.0d8884p+0f, -0x1.f7484p+0f, -0x1.7851aap-2f, 0x1.b34faap+0f, 0x1.9895b6p+0f, + -0x1.183b1cp-1f, -0x1.fdd0dep+0f, -0x1.c86fa2p-1f, 0x1.58eea2p+0f, 0x1.dd6dp+0f, 0.0f, + }, + { + 0x1p+0f, 0x1.7851aap-2f, -0x1.dd6dp+0f, -0x1.0d8884p+0f, 0x1.7a5f6p+0f, 0x1.9895b6p+0f, + -0x1.c86fa2p-1f, -0x1.ec746ap+0f, 0x1.79ee64p-3f, 0x1.fdd0dep+0f, 0x1.183b1cp-1f, -0x1.ca52d8p+0f, + -0x1.348c86p+0f, 0x1.58eea2p+0f, 0x1.b34faap+0f, -0x1.71e956p-1f, -0x1.f7484p+0f, 0.0f, + }, + { + 0x1p+0f, 0x1.1a6264p-53f, -0x1p+1f, -0x1.a79394p-52f, 0x1p+1f, 0x1.60fafcp-51f, + -0x1p+1f, -0x1.ee2c2ep-51f, 0x1p+1f, 0x1.3daebp-50f, -0x1p+1f, -0x1.6111d2p-48f, + 0x1p+1f, -0x1.1a901p-49f, -0x1p+1f, -0x1.845e1ep-48f, 0x1p+1f, 0.0f, + }, + { + 0x1p+0f, -0x1.7851aap-2f, -0x1.dd6dp+0f, 0x1.0d8884p+0f, 0x1.7a5f6p+0f, -0x1.9895b6p+0f, + -0x1.c86fa2p-1f, 0x1.ec746ap+0f, 0x1.79ee64p-3f, -0x1.fdd0dep+0f, 0x1.183b1cp-1f, 0x1.ca52d8p+0f, + -0x1.348c86p+0f, -0x1.58eea2p+0f, 0x1.b34faap+0f, 0x1.71e956p-1f, -0x1.f7484p+0f, 0.0f, + }, + { + 0x1p+0f, -0x1.71e956p-1f, -0x1.7a5f6p+0f, 0x1.ca52d8p+0f, 0x1.79ee64p-3f, -0x1.ec746ap+0f, + 0x1.348c86p+0f, 0x1.0d8884p+0f, -0x1.f7484p+0f, 0x1.7851aap-2f, 0x1.b34faap+0f, -0x1.9895b6p+0f, + -0x1.183b1cp-1f, 0x1.fdd0dep+0f, -0x1.c86fa2p-1f, -0x1.58eea2p+0f, 0x1.dd6dp+0f, 0.0f, + }, + { + 0x1p+0f, -0x1.0d8884p+0f, -0x1.c86fa2p-1f, 0x1.fdd0dep+0f, -0x1.348c86p+0f, -0x1.71e956p-1f, + 0x1.f7484p+0f, -0x1.58eea2p+0f, -0x1.183b1cp-1f, 0x1.ec746ap+0f, -0x1.7a5f6p+0f, -0x1.7851aap-2f, + 0x1.dd6dp+0f, -0x1.9895b6p+0f, -0x1.79ee64p-3f, 0x1.ca52d8p+0f, -0x1.b34faap+0f, 0.0f, + }, + { + 0x1p+0f, -0x1.58eea2p+0f, -0x1.79ee64p-3f, 0x1.9895b6p+0f, -0x1.f7484p+0f, 0x1.0d8884p+0f, + 0x1.183b1cp-1f, -0x1.ca52d8p+0f, 0x1.dd6dp+0f, -0x1.71e956p-1f, -0x1.c86fa2p-1f, 0x1.ec746ap+0f, + -0x1.b34faap+0f, 0x1.7851aap-2f, 0x1.348c86p+0f, -0x1.fdd0dep+0f, 0x1.7a5f6p+0f, 0.0f, + }, + { + 0x1p+0f, -0x1.9895b6p+0f, 0x1.183b1cp-1f, 0x1.71e956p-1f, -0x1.b34faap+0f, 0x1.fdd0dep+0f, + -0x1.7a5f6p+0f, 0x1.7851aap-2f, 0x1.c86fa2p-1f, -0x1.ca52d8p+0f, 0x1.f7484p+0f, -0x1.58eea2p+0f, + 0x1.79ee64p-3f, 0x1.0d8884p+0f, -0x1.dd6dp+0f, 0x1.ec746ap+0f, -0x1.348c86p+0f, 0.0f, + }, + { + 0x1p+0f, -0x1.ca52d8p+0f, 0x1.348c86p+0f, -0x1.7851aap-2f, -0x1.183b1cp-1f, 0x1.58eea2p+0f, + -0x1.dd6dp+0f, 0x1.fdd0dep+0f, -0x1.b34faap+0f, 0x1.0d8884p+0f, -0x1.79ee64p-3f, -0x1.71e956p-1f, + 0x1.7a5f6p+0f, -0x1.ec746ap+0f, 0x1.f7484p+0f, -0x1.9895b6p+0f, 0x1.c86fa2p-1f, 0.0f, + }, + { + 0x1p+0f, -0x1.ec746ap+0f, 0x1.b34faap+0f, -0x1.58eea2p+0f, 0x1.c86fa2p-1f, -0x1.7851aap-2f, + -0x1.79ee64p-3f, 0x1.71e956p-1f, -0x1.348c86p+0f, 0x1.9895b6p+0f, -0x1.dd6dp+0f, 0x1.fdd0dep+0f, + -0x1.f7484p+0f, 0x1.ca52d8p+0f, -0x1.7a5f6p+0f, 0x1.0d8884p+0f, -0x1.183b1cp-1f, 0.0f, + }, + { + 0x1p+0f, -0x1.fdd0dep+0f, 0x1.f7484p+0f, -0x1.ec746ap+0f, 0x1.dd6dp+0f, -0x1.ca52d8p+0f, + 0x1.b34faap+0f, -0x1.9895b6p+0f, 0x1.7a5f6p+0f, -0x1.58eea2p+0f, 0x1.348c86p+0f, -0x1.0d8884p+0f, + 0x1.c86fa2p-1f, -0x1.71e956p-1f, 0x1.183b1cp-1f, -0x1.7851aap-2f, 0x1.79ee64p-3f, 0.0f, + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + }, + }, +}; + +// log2(L) / 2 for L = 0..63 (0 for L = 0). +const float kHalfLog2Count[64] = { + 0.0f, 0.0f, 0x1p-1f, 0x1.95c01ap-1f, 0x1p+0f, 0x1.2934fp+0f, + 0x1.4ae00ep+0f, 0x1.675768p+0f, 0x1.8p+0f, 0x1.95c01ap+0f, 0x1.a934fp+0f, 0x1.bacea8p+0f, + 0x1.cae00ep+0f, 0x1.d9a802p+0f, 0x1.e75768p+0f, 0x1.f414fep+0f, 0x1p+1f, 0x1.0598fep+1f, + 0x1.0ae00ep+1f, 0x1.0fde0cp+1f, 0x1.149a78p+1f, 0x1.191bbap+1f, 0x1.1d6754p+1f, 0x1.21820ap+1f, + 0x1.257006p+1f, 0x1.2934fp+1f, 0x1.2cd402p+1f, 0x1.305014p+1f, 0x1.33abb4p+1f, 0x1.36e92ap+1f, + 0x1.3a0a7ep+1f, 0x1.3d118ep+1f, 0x1.4p+1f, 0x1.42d75ap+1f, 0x1.4598fep+1f, 0x1.48462cp+1f, + 0x1.4ae00ep+1f, 0x1.4d67bp+1f, 0x1.4fde0cp+1f, 0x1.524408p+1f, 0x1.549a78p+1f, 0x1.56e222p+1f, + 0x1.591bbap+1f, 0x1.5b47ecp+1f, 0x1.5d6754p+1f, 0x1.5f7a86p+1f, 0x1.61820ap+1f, 0x1.637e62p+1f, + 0x1.657006p+1f, 0x1.675768p+1f, 0x1.6934fp+1f, 0x1.6b0904p+1f, 0x1.6cd402p+1f, 0x1.6e964p+1f, + 0x1.705014p+1f, 0x1.7201ccp+1f, 0x1.73abb4p+1f, 0x1.754e12p+1f, 0x1.76e92ap+1f, 0x1.787d3ap+1f, + 0x1.7a0a7ep+1f, 0x1.7b9134p+1f, 0x1.7d118ep+1f, 0x1.7e8bc2p+1f, +}; + +// 1 / L for L = 0..63 (0 for L = 0). +const float kReciprocalCount[64] = { + 0.0f, 0x1p+0f, 0x1p-1f, 0x1.555556p-2f, 0x1p-2f, 0x1.99999ap-3f, + 0x1.555556p-3f, 0x1.24924ap-3f, 0x1p-3f, 0x1.c71c72p-4f, 0x1.99999ap-4f, 0x1.745d18p-4f, + 0x1.555556p-4f, 0x1.3b13b2p-4f, 0x1.24924ap-4f, 0x1.111112p-4f, 0x1p-4f, 0x1.e1e1e2p-5f, + 0x1.c71c72p-5f, 0x1.af286cp-5f, 0x1.99999ap-5f, 0x1.861862p-5f, 0x1.745d18p-5f, 0x1.642c86p-5f, + 0x1.555556p-5f, 0x1.47ae14p-5f, 0x1.3b13b2p-5f, 0x1.2f684cp-5f, 0x1.24924ap-5f, 0x1.1a7b96p-5f, + 0x1.111112p-5f, 0x1.08421p-5f, 0x1p-5f, 0x1.f07c2p-6f, 0x1.e1e1e2p-6f, 0x1.d41d42p-6f, + 0x1.c71c72p-6f, 0x1.bacf92p-6f, 0x1.af286cp-6f, 0x1.a41a42p-6f, 0x1.99999ap-6f, 0x1.8f9c18p-6f, + 0x1.861862p-6f, 0x1.7d05f4p-6f, 0x1.745d18p-6f, 0x1.6c16c2p-6f, 0x1.642c86p-6f, 0x1.5c9882p-6f, + 0x1.555556p-6f, 0x1.4e5e0ap-6f, 0x1.47ae14p-6f, 0x1.414142p-6f, 0x1.3b13b2p-6f, 0x1.3521dp-6f, + 0x1.2f684cp-6f, 0x1.29e412p-6f, 0x1.24924ap-6f, 0x1.1f7048p-6f, 0x1.1a7b96p-6f, 0x1.15b1e6p-6f, + 0x1.111112p-6f, 0x1.0c9714p-6f, 0x1.08421p-6f, 0x1.041042p-6f, +}; + +} // namespace halfrate::tables diff --git a/mbe/codebook.h b/mbe/codebook.h new file mode 100644 index 0000000..61801a4 --- /dev/null +++ b/mbe/codebook.h @@ -0,0 +1,30 @@ +// The parameter codebook set: everything the dequantiser (and the encoder's quantiser) looks up to turn the nine +// frame fields into the frame parameters. tables::kCodebook is the one the half-rate codec uses. +#pragma once +#include +#include + +namespace halfrate::core { + +struct Codebook { + int32_t codec_id; // 1: this half-rate codec + const float* fundamental; // [pitch_count] fundamental, cycles per sample, per pitch index + const int32_t* harmonic_count; // [pitch_count] number of harmonics L per pitch index + int32_t voicing_count; // entries of voicing + const int32_t (*voicing)[8]; // per voicing index: band 0..7 voiced (nonzero) or unvoiced + int32_t plain_voicing_count; // voicing indices below this are plain patterns (not read by the code) + const int32_t (*band_sizes)[4]; // per L: sizes of the 4 blocks the L harmonics split into + int32_t gain_count; // entries of gain + const float* gain; // gain codebook (log2 units) + const float (*shape_low)[3]; // 8-point transform coefficients 1..3, per shape-low index + const float (*shape_high)[4]; // 8-point transform coefficients 4..7, per shape-high index + std::array detail; // per block: higher-order coefficients, rows of 4 floats + std::array detail_count; // entries of each detail codebook + std::array detail_stride; // rows per index step of each detail codebook + float prediction; // weight of the previous frame's shape in the prediction + int32_t pitch_count; // pitch indices with an entry (fundamental, harmonic_count) + float gain_weight; // gain = gain_weight * gain[index] + previous_gain_weight * previous gain + float previous_gain_weight; +}; + +} // namespace halfrate::core diff --git a/mbe/codebook_set.cpp b/mbe/codebook_set.cpp new file mode 100644 index 0000000..6435d99 --- /dev/null +++ b/mbe/codebook_set.cpp @@ -0,0 +1,28 @@ +// The half-rate codec's codebook set (core::Codebook), built from the tables in codebook.cc. +#include "tables.h" + +namespace halfrate::tables { + +const core::Codebook kCodebook = { + 1, + kPitchFundamental, + kPitchHarmonicCount, + 32, + kVoicingCodebook, + 16, + kBandSizes, + 32, + kGainCodebook, + kShapeLowCodebook, + kShapeHighCodebook, + {&kShapeDetail1Codebook[0][0], &kShapeDetail2Codebook[0][0], &kShapeDetail3Codebook[0][0], + &kShapeDetail4Codebook[0][0]}, + {32, 16, 16, 8}, + {1, 1, 1, 1}, + 0x1.4cccccp-1f, // 0.65 + 120, + 1.0f, + 0.5f, +}; + +} // namespace halfrate::tables diff --git a/mbe/constants.h b/mbe/constants.h new file mode 100644 index 0000000..0a04ac1 --- /dev/null +++ b/mbe/constants.h @@ -0,0 +1,50 @@ +// Numeric constants of the encoder. They are written as hex floats because the output depends on their exact +// values (most are the nearest float to the decimal value in the comment, some are not). +#pragma once + +namespace halfrate::enc { + +constexpr float kTiny = 0x1.197998p-40f; // 1e-12: energy floor added before divisions and logs +constexpr float kMinusTiny = -0x1.197998p-40f; // -1e-12 +constexpr float kAmplitudeFloor = 0x1.12e0bep-30f; // 1e-9: added to an amplitude before its log2 +constexpr float kEnergyFloor = 0x1.203afap-50f; // 1e-15 +constexpr float kHuge = 0x1.c363ccp+127f; // 3e38: "no candidate yet" for minimum searches +constexpr float kMinusHuge = -0x1.c363ccp+127f; // -3e38 +constexpr float kVeryLarge = 0x1.93e594p+99f; // 1e30 +constexpr float kVeryNegative = -0x1.93e594p+99f; // -1e30: start value of maximum searches +constexpr float kDbPerLog2 = 0x1.815182p+1f; // 10 log10(2): log2 energy to dB +constexpr float kTwoPi = 0x1.921fb6p+2f; +constexpr float kInvSqrt2 = 0x1.6a09e6p-1f; // high-pass design: 1 / sqrt(2) +constexpr float kHalfInvSqrt2 = 0x1.6a09e6p-2f; // shape basis: scale of the pair difference +constexpr float kOctaveMatch = 0x1.eb851ep-5f; // 0.06: log2 distance accepted as "one octave below" +constexpr float kFloorCreep = 0x1.99999ap-5f; // 0.05 dB: noise floor rise per frame +constexpr float kHzToVoicingBand = 0x1.0624dep-9f; // 0.002: Hz to the 500 Hz voicing bands +constexpr float kOneSeventh = 0x1.24924ap-3f; // 1/7 +constexpr float kTwoSevenths = 0x1.24924ap-2f; // 2/7 +constexpr float kVoicingCostFloor = 0x1.47ae14p-6f; // 0.02: cost of a voiced band that fits +constexpr float kCompensationFloor = 0x1.0c6f7ap-20f; // 1e-6 +constexpr float kLevelFeatureScale = 0x1.99999ap-4f; // 0.1: level (dB) as a pitch-net feature +constexpr float kOctaveJumpScale = 0x1.aaaaaap+2f; // 6.6667: log2 distance minus one octave, scaled +constexpr float kOctaveJumpExponent = -0x1.715476p+0f; // -1/ln 2: Gaussian of the octave-jump cost +constexpr float kOctaveLookbackTolerance = 0x1.47ae14p-4f; // 0.08: log2 distance +constexpr float kHighShapeStart = 0x1.19999ap-1f; // 0.55: share of the harmonics where the high weight starts +constexpr float kMinusHighShapeStart = -0x1.19999ap-1f; +constexpr float kHighShapeScale = 0x1.1c71c8p+1f; // 2.2222 = 1 / (1 - 0.55) +constexpr float kRescoreDistanceFloor = 0x1.0c6f7ap-20f; // 1e-6 +constexpr float kRescoreBandFloor = 0x1.79ca1p-67f; // 1e-20 +constexpr float kHighPassFlush = 0x1.4484cp-100f; // 1e-30: high-pass state below this is flushed to 0 +constexpr float kStartupAmplitude = -0x1.8p+3f; // -12: log2 amplitudes of the frames before the first +constexpr float kInitialPreviousFundamental = 0x1.47ae14p-7f; // 0.01 +constexpr float kToneFundamental = 0x1p-5f; // 1/32: fundamental of the fixed-pitch (silence) frame + +// pitch network +constexpr float kNetInputScale = 0x1.ecc05ep+3f; +constexpr float kNetLayer1Scale = 0x1.0a001p-4f; +constexpr float kNetLayer2Scale = 0x1.918048p-3f; +constexpr float kNetLayer3Scale = 0x1.1defbap-3f; +constexpr float kNetHidden1Scale = 0x1.467474p+2f; // hidden layer 1 output to int8 +constexpr float kNetHidden2Scale = 0x1.ca6546p+2f; // hidden layer 2 output to int8 +constexpr float kLog2E = 0x1.715476p+0f; +constexpr float kLn2 = 0x1.62e43p-1f; + +} // namespace halfrate::enc diff --git a/mbe/cosine.cpp b/mbe/cosine.cpp new file mode 100644 index 0000000..5a08946 --- /dev/null +++ b/mbe/cosine.cpp @@ -0,0 +1,1376 @@ +// Generated table data. Do not edit. +#include "tables.h" + +namespace halfrate::tables { + +// cos(2 pi i / 8192), one turn. sin(x) is kCosine[(i + 6144) & 8191]. +const float kCosine[8192] = { + 0x1p+0f, 0x1.fffff6p-1f, 0x1.ffffd8p-1f, 0x1.ffffa8p-1f, 0x1.ffff62p-1f, 0x1.ffff0ap-1f, + 0x1.fffe9cp-1f, 0x1.fffe1cp-1f, 0x1.fffd88p-1f, 0x1.fffcep-1f, 0x1.fffc26p-1f, 0x1.fffb56p-1f, + 0x1.fffa72p-1f, 0x1.fff97cp-1f, 0x1.fff872p-1f, 0x1.fff754p-1f, 0x1.fff622p-1f, 0x1.fff4dcp-1f, + 0x1.fff382p-1f, 0x1.fff216p-1f, 0x1.fff094p-1f, 0x1.ffefp-1f, 0x1.ffed58p-1f, 0x1.ffeb9cp-1f, + 0x1.ffe9ccp-1f, 0x1.ffe7e8p-1f, 0x1.ffe5fp-1f, 0x1.ffe3e6p-1f, 0x1.ffe1c6p-1f, 0x1.ffdf94p-1f, + 0x1.ffdd4ep-1f, 0x1.ffdaf4p-1f, 0x1.ffd886p-1f, 0x1.ffd604p-1f, 0x1.ffd37p-1f, 0x1.ffd0c6p-1f, + 0x1.ffce0ap-1f, 0x1.ffcb3ap-1f, 0x1.ffc856p-1f, 0x1.ffc55ep-1f, 0x1.ffc252p-1f, 0x1.ffbf32p-1f, + 0x1.ffbcp-1f, 0x1.ffb8b8p-1f, 0x1.ffb55ep-1f, 0x1.ffb1fp-1f, 0x1.ffae6ep-1f, 0x1.ffaad8p-1f, + 0x1.ffa72ep-1f, 0x1.ffa372p-1f, 0x1.ff9fa2p-1f, 0x1.ff9bbcp-1f, 0x1.ff97c4p-1f, 0x1.ff93b8p-1f, + 0x1.ff8f98p-1f, 0x1.ff8b64p-1f, 0x1.ff871ep-1f, 0x1.ff82c2p-1f, 0x1.ff7e54p-1f, 0x1.ff79d2p-1f, + 0x1.ff753cp-1f, 0x1.ff7092p-1f, 0x1.ff6bd4p-1f, 0x1.ff6704p-1f, 0x1.ff621ep-1f, 0x1.ff5d26p-1f, + 0x1.ff581ap-1f, 0x1.ff52fap-1f, 0x1.ff4dc6p-1f, 0x1.ff487ep-1f, 0x1.ff4322p-1f, 0x1.ff3db4p-1f, + 0x1.ff383p-1f, 0x1.ff329ap-1f, 0x1.ff2cfp-1f, 0x1.ff2732p-1f, 0x1.ff2162p-1f, 0x1.ff1b7cp-1f, + 0x1.ff1584p-1f, 0x1.ff0f76p-1f, 0x1.ff0956p-1f, 0x1.ff0322p-1f, 0x1.fefcdap-1f, 0x1.fef68p-1f, + 0x1.fef01p-1f, 0x1.fee98ep-1f, 0x1.fee2f6p-1f, 0x1.fedc4cp-1f, 0x1.fed58ep-1f, 0x1.fecebep-1f, + 0x1.fec7d8p-1f, 0x1.fec0dep-1f, 0x1.feb9d2p-1f, 0x1.feb2b2p-1f, 0x1.feab7ep-1f, 0x1.fea436p-1f, + 0x1.fe9cdap-1f, 0x1.fe956cp-1f, 0x1.fe8de8p-1f, 0x1.fe8652p-1f, 0x1.fe7ea8p-1f, 0x1.fe76eap-1f, + 0x1.fe6f18p-1f, 0x1.fe6734p-1f, 0x1.fe5f3ap-1f, 0x1.fe572ep-1f, 0x1.fe4f0ep-1f, 0x1.fe46dap-1f, + 0x1.fe3e92p-1f, 0x1.fe3638p-1f, 0x1.fe2dc8p-1f, 0x1.fe2546p-1f, 0x1.fe1cbp-1f, 0x1.fe1406p-1f, + 0x1.fe0b48p-1f, 0x1.fe0278p-1f, 0x1.fdf992p-1f, 0x1.fdf09ap-1f, 0x1.fde78ep-1f, 0x1.fdde6ep-1f, + 0x1.fdd53ap-1f, 0x1.fdcbf2p-1f, 0x1.fdc298p-1f, 0x1.fdb92ap-1f, 0x1.fdafa8p-1f, 0x1.fda612p-1f, + 0x1.fd9c68p-1f, 0x1.fd92aap-1f, 0x1.fd88dap-1f, 0x1.fd7ef6p-1f, 0x1.fd74fep-1f, 0x1.fd6af2p-1f, + 0x1.fd60d2p-1f, 0x1.fd56ap-1f, 0x1.fd4c5ap-1f, 0x1.fd42p-1f, 0x1.fd3792p-1f, 0x1.fd2d1p-1f, + 0x1.fd227ap-1f, 0x1.fd17d2p-1f, 0x1.fd0d16p-1f, 0x1.fd0246p-1f, 0x1.fcf762p-1f, 0x1.fcec6ap-1f, + 0x1.fce16p-1f, 0x1.fcd642p-1f, 0x1.fccb1p-1f, 0x1.fcbfcap-1f, 0x1.fcb47p-1f, 0x1.fca904p-1f, + 0x1.fc9d82p-1f, 0x1.fc91eep-1f, 0x1.fc8646p-1f, 0x1.fc7a8cp-1f, 0x1.fc6ebcp-1f, 0x1.fc62dap-1f, + 0x1.fc56e4p-1f, 0x1.fc4adap-1f, 0x1.fc3ebcp-1f, 0x1.fc328cp-1f, 0x1.fc2648p-1f, 0x1.fc19eep-1f, + 0x1.fc0d84p-1f, 0x1.fc0104p-1f, 0x1.fbf47p-1f, 0x1.fbe7cap-1f, 0x1.fbdb1p-1f, 0x1.fbce42p-1f, + 0x1.fbc162p-1f, 0x1.fbb46cp-1f, 0x1.fba764p-1f, 0x1.fb9a48p-1f, 0x1.fb8d18p-1f, 0x1.fb7fd6p-1f, + 0x1.fb728p-1f, 0x1.fb6514p-1f, 0x1.fb5798p-1f, 0x1.fb4a06p-1f, 0x1.fb3c6p-1f, 0x1.fb2ea8p-1f, + 0x1.fb20dcp-1f, 0x1.fb12fcp-1f, 0x1.fb050ap-1f, 0x1.faf704p-1f, 0x1.fae8e8p-1f, 0x1.fadabcp-1f, + 0x1.facc7ap-1f, 0x1.fabe26p-1f, 0x1.faafbcp-1f, 0x1.faa14p-1f, 0x1.fa92b2p-1f, 0x1.fa840ep-1f, + 0x1.fa7558p-1f, 0x1.fa668ep-1f, 0x1.fa57bp-1f, 0x1.fa48cp-1f, 0x1.fa39bap-1f, 0x1.fa2aa2p-1f, + 0x1.fa1b78p-1f, 0x1.fa0c38p-1f, 0x1.f9fce6p-1f, 0x1.f9ed8p-1f, 0x1.f9de06p-1f, 0x1.f9ce78p-1f, + 0x1.f9bed8p-1f, 0x1.f9af24p-1f, 0x1.f99f5cp-1f, 0x1.f98f8p-1f, 0x1.f97f92p-1f, 0x1.f96f9p-1f, + 0x1.f95f7ap-1f, 0x1.f94f52p-1f, 0x1.f93f14p-1f, 0x1.f92ec4p-1f, 0x1.f91e62p-1f, 0x1.f90deap-1f, + 0x1.f8fd6p-1f, 0x1.f8ecc2p-1f, 0x1.f8dc1p-1f, 0x1.f8cb4cp-1f, 0x1.f8ba74p-1f, 0x1.f8a988p-1f, + 0x1.f89888p-1f, 0x1.f88776p-1f, 0x1.f8765p-1f, 0x1.f86516p-1f, 0x1.f853cap-1f, 0x1.f84268p-1f, + 0x1.f830f4p-1f, 0x1.f81f6ep-1f, 0x1.f80dd2p-1f, 0x1.f7fc24p-1f, 0x1.f7ea62p-1f, 0x1.f7d88ep-1f, + 0x1.f7c6a6p-1f, 0x1.f7b4aap-1f, 0x1.f7a29ap-1f, 0x1.f79076p-1f, 0x1.f77e4p-1f, 0x1.f76bf8p-1f, + 0x1.f7599ap-1f, 0x1.f7472ap-1f, 0x1.f734a6p-1f, 0x1.f7220ep-1f, 0x1.f70f64p-1f, 0x1.f6fca6p-1f, + 0x1.f6e9d4p-1f, 0x1.f6d6fp-1f, 0x1.f6c3f8p-1f, 0x1.f6b0ecp-1f, 0x1.f69dcep-1f, 0x1.f68a9cp-1f, + 0x1.f67756p-1f, 0x1.f663fcp-1f, 0x1.f6509p-1f, 0x1.f63d1p-1f, 0x1.f6297cp-1f, 0x1.f615d6p-1f, + 0x1.f6021cp-1f, 0x1.f5ee5p-1f, 0x1.f5da6ep-1f, 0x1.f5c67ap-1f, 0x1.f5b274p-1f, 0x1.f59e5ap-1f, + 0x1.f58a2cp-1f, 0x1.f575eap-1f, 0x1.f56196p-1f, 0x1.f54d2ep-1f, 0x1.f538b2p-1f, 0x1.f52424p-1f, + 0x1.f50f82p-1f, 0x1.f4faccp-1f, 0x1.f4e604p-1f, 0x1.f4d128p-1f, 0x1.f4bc38p-1f, 0x1.f4a736p-1f, + 0x1.f4922p-1f, 0x1.f47cf8p-1f, 0x1.f467bap-1f, 0x1.f4526cp-1f, 0x1.f43d08p-1f, 0x1.f42792p-1f, + 0x1.f41208p-1f, 0x1.f3fc6cp-1f, 0x1.f3e6bcp-1f, 0x1.f3d0f8p-1f, 0x1.f3bb22p-1f, 0x1.f3a538p-1f, + 0x1.f38f3ap-1f, 0x1.f3792ap-1f, 0x1.f36306p-1f, 0x1.f34cdp-1f, 0x1.f33686p-1f, 0x1.f32028p-1f, + 0x1.f309b8p-1f, 0x1.f2f334p-1f, 0x1.f2dc9cp-1f, 0x1.f2c5f2p-1f, 0x1.f2af34p-1f, 0x1.f29864p-1f, + 0x1.f2818p-1f, 0x1.f26a88p-1f, 0x1.f2537ep-1f, 0x1.f23c6p-1f, 0x1.f2253p-1f, 0x1.f20decp-1f, + 0x1.f1f694p-1f, 0x1.f1df2ap-1f, 0x1.f1c7acp-1f, 0x1.f1b01cp-1f, 0x1.f19876p-1f, 0x1.f180cp-1f, + 0x1.f168f6p-1f, 0x1.f15118p-1f, 0x1.f13926p-1f, 0x1.f12122p-1f, 0x1.f1090cp-1f, 0x1.f0f0e2p-1f, + 0x1.f0d8a4p-1f, 0x1.f0c054p-1f, 0x1.f0a7fp-1f, 0x1.f08f78p-1f, 0x1.f076eep-1f, 0x1.f05e52p-1f, + 0x1.f045a2p-1f, 0x1.f02cdep-1f, 0x1.f01408p-1f, 0x1.effb1ep-1f, 0x1.efe22p-1f, 0x1.efc91p-1f, + 0x1.efafeep-1f, 0x1.ef96b8p-1f, 0x1.ef7d6ep-1f, 0x1.ef6412p-1f, 0x1.ef4aa2p-1f, 0x1.ef312p-1f, + 0x1.ef178ap-1f, 0x1.eefde2p-1f, 0x1.eee426p-1f, 0x1.eeca56p-1f, 0x1.eeb074p-1f, 0x1.ee968p-1f, + 0x1.ee7c78p-1f, 0x1.ee625cp-1f, 0x1.ee482ep-1f, 0x1.ee2decp-1f, 0x1.ee1398p-1f, 0x1.edf932p-1f, + 0x1.eddeb6p-1f, 0x1.edc42ap-1f, 0x1.eda988p-1f, 0x1.ed8ed6p-1f, 0x1.ed740ep-1f, 0x1.ed5934p-1f, + 0x1.ed3e48p-1f, 0x1.ed2348p-1f, 0x1.ed0836p-1f, 0x1.eced1p-1f, 0x1.ecd1d8p-1f, 0x1.ecb68cp-1f, + 0x1.ec9b2ep-1f, 0x1.ec7fbcp-1f, 0x1.ec6436p-1f, 0x1.ec48ap-1f, 0x1.ec2cf4p-1f, 0x1.ec1138p-1f, + 0x1.ebf566p-1f, 0x1.ebd984p-1f, 0x1.ebbd8cp-1f, 0x1.eba184p-1f, 0x1.eb8566p-1f, 0x1.eb6938p-1f, + 0x1.eb4cf6p-1f, 0x1.eb30ap-1f, 0x1.eb1438p-1f, 0x1.eaf7bcp-1f, 0x1.eadb2ep-1f, 0x1.eabe8ep-1f, + 0x1.eaa1dap-1f, 0x1.ea8512p-1f, 0x1.ea683ap-1f, 0x1.ea4b4cp-1f, 0x1.ea2e4ep-1f, 0x1.ea113ap-1f, + 0x1.e9f416p-1f, 0x1.e9d6dep-1f, 0x1.e9b992p-1f, 0x1.e99c34p-1f, 0x1.e97ec4p-1f, 0x1.e9614p-1f, + 0x1.e943aap-1f, 0x1.e926p-1f, 0x1.e90844p-1f, 0x1.e8ea74p-1f, 0x1.e8cc92p-1f, 0x1.e8ae9ep-1f, + 0x1.e89096p-1f, 0x1.e8727cp-1f, 0x1.e8544ep-1f, 0x1.e8360ep-1f, 0x1.e817bap-1f, 0x1.e7f954p-1f, + 0x1.e7dadcp-1f, 0x1.e7bc5p-1f, 0x1.e79db2p-1f, 0x1.e77f02p-1f, 0x1.e7603ep-1f, 0x1.e74168p-1f, + 0x1.e7227ep-1f, 0x1.e70382p-1f, 0x1.e6e472p-1f, 0x1.e6c55p-1f, 0x1.e6a61cp-1f, 0x1.e686d6p-1f, + 0x1.e6677cp-1f, 0x1.e6480ep-1f, 0x1.e6288ep-1f, 0x1.e608fcp-1f, 0x1.e5e958p-1f, 0x1.e5c9ap-1f, + 0x1.e5a9d6p-1f, 0x1.e589f8p-1f, 0x1.e56a08p-1f, 0x1.e54a06p-1f, 0x1.e529fp-1f, 0x1.e509c8p-1f, + 0x1.e4e98ep-1f, 0x1.e4c94p-1f, 0x1.e4a8ep-1f, 0x1.e4886ep-1f, 0x1.e467e8p-1f, 0x1.e4475p-1f, + 0x1.e426a4p-1f, 0x1.e405e8p-1f, 0x1.e3e518p-1f, 0x1.e3c434p-1f, 0x1.e3a33ep-1f, 0x1.e38236p-1f, + 0x1.e3611cp-1f, 0x1.e33feep-1f, 0x1.e31eaep-1f, 0x1.e2fd5cp-1f, 0x1.e2dbf6p-1f, 0x1.e2ba7ep-1f, + 0x1.e298f4p-1f, 0x1.e27758p-1f, 0x1.e255a8p-1f, 0x1.e233e6p-1f, 0x1.e2121p-1f, 0x1.e1f028p-1f, + 0x1.e1ce2ep-1f, 0x1.e1ac22p-1f, 0x1.e18a02p-1f, 0x1.e167d2p-1f, 0x1.e1458cp-1f, 0x1.e12336p-1f, + 0x1.e100ccp-1f, 0x1.e0de5p-1f, 0x1.e0bbc2p-1f, 0x1.e09922p-1f, 0x1.e0766ep-1f, 0x1.e053a8p-1f, + 0x1.e030cep-1f, 0x1.e00de4p-1f, 0x1.dfeae6p-1f, 0x1.dfc7d6p-1f, 0x1.dfa4b4p-1f, 0x1.df817ep-1f, + 0x1.df5e36p-1f, 0x1.df3adcp-1f, 0x1.df177p-1f, 0x1.def3fp-1f, 0x1.ded06p-1f, 0x1.deacbcp-1f, + 0x1.de8906p-1f, 0x1.de653cp-1f, 0x1.de416p-1f, 0x1.de1d74p-1f, 0x1.ddf974p-1f, 0x1.ddd56p-1f, + 0x1.ddb13cp-1f, 0x1.dd8d04p-1f, 0x1.dd68bap-1f, 0x1.dd445ep-1f, 0x1.dd1ffp-1f, 0x1.dcfb6ep-1f, + 0x1.dcd6dap-1f, 0x1.dcb234p-1f, 0x1.dc8d7cp-1f, 0x1.dc68b2p-1f, 0x1.dc43d6p-1f, 0x1.dc1ee6p-1f, + 0x1.dbf9e4p-1f, 0x1.dbd4dp-1f, 0x1.dbafaap-1f, 0x1.db8a72p-1f, 0x1.db6526p-1f, 0x1.db3fc8p-1f, + 0x1.db1a5ap-1f, 0x1.daf4d8p-1f, 0x1.dacf42p-1f, 0x1.daa99cp-1f, 0x1.da83e4p-1f, 0x1.da5e18p-1f, + 0x1.da383ap-1f, 0x1.da124ap-1f, 0x1.d9ec48p-1f, 0x1.d9c634p-1f, 0x1.d9a00ep-1f, 0x1.d979d4p-1f, + 0x1.d9538ap-1f, 0x1.d92d2cp-1f, 0x1.d906bcp-1f, 0x1.d8e03cp-1f, 0x1.d8b9a8p-1f, 0x1.d893p-1f, + 0x1.d86c48p-1f, 0x1.d8457ep-1f, 0x1.d81eap-1f, 0x1.d7f7b2p-1f, 0x1.d7d0bp-1f, 0x1.d7a99cp-1f, + 0x1.d78276p-1f, 0x1.d75b4p-1f, 0x1.d733f6p-1f, 0x1.d70c98p-1f, 0x1.d6e52ap-1f, 0x1.d6bdaap-1f, + 0x1.d69618p-1f, 0x1.d66e72p-1f, 0x1.d646bcp-1f, 0x1.d61ef2p-1f, 0x1.d5f718p-1f, 0x1.d5cf2ap-1f, + 0x1.d5a72ap-1f, 0x1.d57f18p-1f, 0x1.d556f6p-1f, 0x1.d52ecp-1f, 0x1.d50678p-1f, 0x1.d4de1ep-1f, + 0x1.d4b5b2p-1f, 0x1.d48d34p-1f, 0x1.d464a4p-1f, 0x1.d43c02p-1f, 0x1.d4134ep-1f, 0x1.d3ea86p-1f, + 0x1.d3c1aep-1f, 0x1.d398c4p-1f, 0x1.d36fc8p-1f, 0x1.d346bap-1f, 0x1.d31d98p-1f, 0x1.d2f466p-1f, + 0x1.d2cb22p-1f, 0x1.d2a1ccp-1f, 0x1.d27864p-1f, 0x1.d24ee8p-1f, 0x1.d2255cp-1f, 0x1.d1fbbep-1f, + 0x1.d1d20ep-1f, 0x1.d1a84cp-1f, 0x1.d17e78p-1f, 0x1.d15492p-1f, 0x1.d12a98p-1f, 0x1.d1008ep-1f, + 0x1.d0d672p-1f, 0x1.d0ac46p-1f, 0x1.d08206p-1f, 0x1.d057b4p-1f, 0x1.d02d5p-1f, 0x1.d002dap-1f, + 0x1.cfd852p-1f, 0x1.cfadbap-1f, 0x1.cf830ep-1f, 0x1.cf5852p-1f, 0x1.cf2d82p-1f, 0x1.cf02a2p-1f, + 0x1.ced7bp-1f, 0x1.ceacaap-1f, 0x1.ce8194p-1f, 0x1.ce566cp-1f, 0x1.ce2b32p-1f, 0x1.cdffe6p-1f, + 0x1.cdd48ap-1f, 0x1.cda91ap-1f, 0x1.cd7d98p-1f, 0x1.cd5206p-1f, 0x1.cd266p-1f, 0x1.ccfaaap-1f, + 0x1.cccee2p-1f, 0x1.cca308p-1f, 0x1.cc771cp-1f, 0x1.cc4b1ep-1f, 0x1.cc1f1p-1f, 0x1.cbf2eep-1f, + 0x1.cbc6bcp-1f, 0x1.cb9a76p-1f, 0x1.cb6e2p-1f, 0x1.cb41b8p-1f, 0x1.cb154p-1f, 0x1.cae8b4p-1f, + 0x1.cabc16p-1f, 0x1.ca8f68p-1f, 0x1.ca62a8p-1f, 0x1.ca35d6p-1f, 0x1.ca08f2p-1f, 0x1.c9dbfcp-1f, + 0x1.c9aef6p-1f, 0x1.c981dcp-1f, 0x1.c954b2p-1f, 0x1.c92776p-1f, 0x1.c8fa28p-1f, 0x1.c8cccap-1f, + 0x1.c89f58p-1f, 0x1.c871d6p-1f, 0x1.c84442p-1f, 0x1.c8169cp-1f, 0x1.c7e8e6p-1f, 0x1.c7bb1cp-1f, + 0x1.c78d42p-1f, 0x1.c75f56p-1f, 0x1.c73158p-1f, 0x1.c7034ap-1f, 0x1.c6d52ap-1f, 0x1.c6a6f6p-1f, + 0x1.c678b4p-1f, 0x1.c64a5ep-1f, 0x1.c61bf8p-1f, 0x1.c5ed8p-1f, 0x1.c5bef6p-1f, 0x1.c5905ap-1f, + 0x1.c561aep-1f, 0x1.c532fp-1f, 0x1.c5042p-1f, 0x1.c4d54p-1f, 0x1.c4a64cp-1f, 0x1.c47748p-1f, + 0x1.c44834p-1f, 0x1.c4190cp-1f, 0x1.c3e9d4p-1f, 0x1.c3ba8ap-1f, 0x1.c38b3p-1f, 0x1.c35bc2p-1f, + 0x1.c32c44p-1f, 0x1.c2fcb6p-1f, 0x1.c2cd14p-1f, 0x1.c29d62p-1f, 0x1.c26dap-1f, 0x1.c23dcap-1f, + 0x1.c20de4p-1f, 0x1.c1ddecp-1f, 0x1.c1ade4p-1f, 0x1.c17dcap-1f, 0x1.c14d9ep-1f, 0x1.c11d6p-1f, + 0x1.c0ed12p-1f, 0x1.c0bcb4p-1f, 0x1.c08c42p-1f, 0x1.c05bcp-1f, 0x1.c02b2cp-1f, 0x1.bffa88p-1f, + 0x1.bfc9d2p-1f, 0x1.bf990cp-1f, 0x1.bf6832p-1f, 0x1.bf374ap-1f, 0x1.bf064ep-1f, 0x1.bed542p-1f, + 0x1.bea424p-1f, 0x1.be72f6p-1f, 0x1.be41b6p-1f, 0x1.be1066p-1f, 0x1.bddf02p-1f, 0x1.bdad9p-1f, + 0x1.bd7c0ap-1f, 0x1.bd4a74p-1f, 0x1.bd18cep-1f, 0x1.bce716p-1f, 0x1.bcb54cp-1f, 0x1.bc8372p-1f, + 0x1.bc5186p-1f, 0x1.bc1f8ap-1f, 0x1.bbed7cp-1f, 0x1.bbbb5ep-1f, 0x1.bb892ep-1f, 0x1.bb56ecp-1f, + 0x1.bb249ap-1f, 0x1.baf236p-1f, 0x1.babfc2p-1f, 0x1.ba8d3cp-1f, 0x1.ba5aa6p-1f, 0x1.ba27fep-1f, + 0x1.b9f546p-1f, 0x1.b9c27cp-1f, 0x1.b98fa2p-1f, 0x1.b95cb6p-1f, 0x1.b929bap-1f, 0x1.b8f6acp-1f, + 0x1.b8c38ep-1f, 0x1.b8905ep-1f, 0x1.b85d1cp-1f, 0x1.b829ccp-1f, 0x1.b7f668p-1f, 0x1.b7c2f4p-1f, + 0x1.b78f7p-1f, 0x1.b75bdap-1f, 0x1.b72834p-1f, 0x1.b6f47cp-1f, 0x1.b6c0b4p-1f, 0x1.b68cdcp-1f, + 0x1.b658f2p-1f, 0x1.b624f6p-1f, 0x1.b5f0eap-1f, 0x1.b5bccep-1f, 0x1.b588ap-1f, 0x1.b55462p-1f, + 0x1.b52012p-1f, 0x1.b4ebb2p-1f, 0x1.b4b74p-1f, 0x1.b482bep-1f, 0x1.b44e2cp-1f, 0x1.b41988p-1f, + 0x1.b3e4d4p-1f, 0x1.b3b00ep-1f, 0x1.b37b38p-1f, 0x1.b34652p-1f, 0x1.b3115ap-1f, 0x1.b2dc52p-1f, + 0x1.b2a738p-1f, 0x1.b2721p-1f, 0x1.b23cd4p-1f, 0x1.b2078ap-1f, 0x1.b1d22cp-1f, 0x1.b19ccp-1f, + 0x1.b16742p-1f, 0x1.b131b4p-1f, 0x1.b0fc16p-1f, 0x1.b0c666p-1f, 0x1.b090a6p-1f, 0x1.b05ad4p-1f, + 0x1.b024f2p-1f, 0x1.afefp-1f, 0x1.afb8fep-1f, 0x1.af82eap-1f, 0x1.af4cc6p-1f, 0x1.af169p-1f, + 0x1.aee04cp-1f, 0x1.aea9f6p-1f, 0x1.ae738ep-1f, 0x1.ae3d18p-1f, 0x1.ae069p-1f, 0x1.adcff6p-1f, + 0x1.ad994ep-1f, 0x1.ad6294p-1f, 0x1.ad2bcap-1f, 0x1.acf4fp-1f, 0x1.acbe04p-1f, 0x1.ac8708p-1f, + 0x1.ac4ffcp-1f, 0x1.ac18ep-1f, 0x1.abe1b2p-1f, 0x1.abaa74p-1f, 0x1.ab7326p-1f, 0x1.ab3bc6p-1f, + 0x1.ab0458p-1f, 0x1.aaccd8p-1f, 0x1.aa9548p-1f, 0x1.aa5da8p-1f, 0x1.aa25f6p-1f, 0x1.a9ee34p-1f, + 0x1.a9b662p-1f, 0x1.a97e8p-1f, 0x1.a9468ep-1f, 0x1.a90e8ap-1f, 0x1.a8d676p-1f, 0x1.a89e54p-1f, + 0x1.a8661ep-1f, 0x1.a82ddap-1f, 0x1.a7f586p-1f, 0x1.a7bd2p-1f, 0x1.a784aap-1f, 0x1.a74c24p-1f, + 0x1.a7138ep-1f, 0x1.a6dae8p-1f, 0x1.a6a23p-1f, 0x1.a6696ap-1f, 0x1.a63092p-1f, 0x1.a5f7aap-1f, + 0x1.a5beb2p-1f, 0x1.a585aap-1f, 0x1.a54c92p-1f, 0x1.a51368p-1f, 0x1.a4da3p-1f, 0x1.a4a0e6p-1f, + 0x1.a4678cp-1f, 0x1.a42e22p-1f, 0x1.a3f4a8p-1f, 0x1.a3bb1ep-1f, 0x1.a38184p-1f, 0x1.a347dap-1f, + 0x1.a30e2p-1f, 0x1.a2d454p-1f, 0x1.a29a7ap-1f, 0x1.a2608ep-1f, 0x1.a22694p-1f, 0x1.a1ec88p-1f, + 0x1.a1b26ep-1f, 0x1.a17842p-1f, 0x1.a13e06p-1f, 0x1.a103bap-1f, 0x1.a0c95ep-1f, 0x1.a08ef2p-1f, + 0x1.a05476p-1f, 0x1.a019ecp-1f, 0x1.9fdf5p-1f, 0x1.9fa4a4p-1f, 0x1.9f69e8p-1f, 0x1.9f2f1ap-1f, + 0x1.9ef43ep-1f, 0x1.9eb952p-1f, 0x1.9e7e56p-1f, 0x1.9e434ap-1f, 0x1.9e082ep-1f, 0x1.9dcd02p-1f, + 0x1.9d91c8p-1f, 0x1.9d567cp-1f, 0x1.9d1b2p-1f, 0x1.9cdfb4p-1f, 0x1.9ca438p-1f, 0x1.9c68acp-1f, + 0x1.9c2d12p-1f, 0x1.9bf166p-1f, 0x1.9bb5aap-1f, 0x1.9b79ep-1f, 0x1.9b3e04p-1f, 0x1.9b021ap-1f, + 0x1.9ac62p-1f, 0x1.9a8a14p-1f, 0x1.9a4dfap-1f, 0x1.9a11dp-1f, 0x1.99d596p-1f, 0x1.99994cp-1f, + 0x1.995cf2p-1f, 0x1.99208ap-1f, 0x1.98e41p-1f, 0x1.98a788p-1f, 0x1.986afp-1f, 0x1.982e46p-1f, + 0x1.97f18ep-1f, 0x1.97b4c6p-1f, 0x1.9777fp-1f, 0x1.973b08p-1f, 0x1.96fe12p-1f, 0x1.96c10ap-1f, + 0x1.9683f4p-1f, 0x1.9646cep-1f, 0x1.960998p-1f, 0x1.95cc54p-1f, 0x1.958efep-1f, 0x1.95519ap-1f, + 0x1.951426p-1f, 0x1.94d6a2p-1f, 0x1.94990ep-1f, 0x1.945b6cp-1f, 0x1.941db8p-1f, 0x1.93dff6p-1f, + 0x1.93a224p-1f, 0x1.936444p-1f, 0x1.932652p-1f, 0x1.92e852p-1f, 0x1.92aa42p-1f, 0x1.926c22p-1f, + 0x1.922df4p-1f, 0x1.91efb4p-1f, 0x1.91b166p-1f, 0x1.91730ap-1f, 0x1.91349cp-1f, 0x1.90f62p-1f, + 0x1.90b794p-1f, 0x1.9078f8p-1f, 0x1.903a4ep-1f, 0x1.8ffb94p-1f, 0x1.8fbccap-1f, 0x1.8f7df2p-1f, + 0x1.8f3f08p-1f, 0x1.8f001p-1f, 0x1.8ec10ap-1f, 0x1.8e81f4p-1f, 0x1.8e42cep-1f, 0x1.8e0398p-1f, + 0x1.8dc454p-1f, 0x1.8d85p-1f, 0x1.8d459cp-1f, 0x1.8d062ap-1f, 0x1.8cc6a8p-1f, 0x1.8c8716p-1f, + 0x1.8c4776p-1f, 0x1.8c07c6p-1f, 0x1.8bc806p-1f, 0x1.8b8838p-1f, 0x1.8b485ap-1f, 0x1.8b086ep-1f, + 0x1.8ac872p-1f, 0x1.8a8866p-1f, 0x1.8a484cp-1f, 0x1.8a0822p-1f, 0x1.89c7eap-1f, 0x1.8987a2p-1f, + 0x1.89474ap-1f, 0x1.8906e4p-1f, 0x1.88c66ep-1f, 0x1.8885eap-1f, 0x1.884556p-1f, 0x1.8804b4p-1f, + 0x1.87c4p-1f, 0x1.87834p-1f, 0x1.87427p-1f, 0x1.87019p-1f, 0x1.86c0a2p-1f, 0x1.867fa4p-1f, + 0x1.863e98p-1f, 0x1.85fd7cp-1f, 0x1.85bc52p-1f, 0x1.857b18p-1f, 0x1.8539dp-1f, 0x1.84f878p-1f, + 0x1.84b712p-1f, 0x1.84759cp-1f, 0x1.843416p-1f, 0x1.83f284p-1f, 0x1.83b0ep-1f, 0x1.836f3p-1f, + 0x1.832d6ep-1f, 0x1.82ebap-1f, 0x1.82a9c2p-1f, 0x1.8267d4p-1f, 0x1.8225d8p-1f, 0x1.81e3cep-1f, + 0x1.81a1b4p-1f, 0x1.815f8ap-1f, 0x1.811d52p-1f, 0x1.80db0cp-1f, 0x1.8098b8p-1f, 0x1.805654p-1f, + 0x1.8013ep-1f, 0x1.7fd15ep-1f, 0x1.7f8ecep-1f, 0x1.7f4c2ep-1f, 0x1.7f098p-1f, 0x1.7ec6c4p-1f, + 0x1.7e83f8p-1f, 0x1.7e411ep-1f, 0x1.7dfe36p-1f, 0x1.7dbb3ep-1f, 0x1.7d7836p-1f, 0x1.7d3522p-1f, + 0x1.7cf1fep-1f, 0x1.7caeccp-1f, 0x1.7c6b8ap-1f, 0x1.7c283ap-1f, 0x1.7be4dcp-1f, 0x1.7ba16ep-1f, + 0x1.7b5df2p-1f, 0x1.7b1a68p-1f, 0x1.7ad6cep-1f, 0x1.7a9326p-1f, 0x1.7a4f7p-1f, 0x1.7a0bacp-1f, + 0x1.79c7d8p-1f, 0x1.7983f6p-1f, 0x1.794006p-1f, 0x1.78fc06p-1f, 0x1.78b7f8p-1f, 0x1.7873dcp-1f, + 0x1.782fb2p-1f, 0x1.77eb78p-1f, 0x1.77a73p-1f, 0x1.7762dap-1f, 0x1.771e76p-1f, 0x1.76da02p-1f, + 0x1.769582p-1f, 0x1.7650f2p-1f, 0x1.760c52p-1f, 0x1.75c7a6p-1f, 0x1.7582eap-1f, 0x1.753e2p-1f, + 0x1.74f948p-1f, 0x1.74b462p-1f, 0x1.746f6ep-1f, 0x1.742a6ap-1f, 0x1.73e558p-1f, 0x1.73a03ap-1f, + 0x1.735b0ap-1f, 0x1.7315cep-1f, 0x1.72d084p-1f, 0x1.728b2ap-1f, 0x1.7245c2p-1f, 0x1.72004ep-1f, + 0x1.71bacap-1f, 0x1.717538p-1f, 0x1.712f96p-1f, 0x1.70e9e8p-1f, 0x1.70a42cp-1f, 0x1.705e6p-1f, + 0x1.701886p-1f, 0x1.6fd2ap-1f, 0x1.6f8caap-1f, 0x1.6f46a6p-1f, 0x1.6f0094p-1f, 0x1.6eba74p-1f, + 0x1.6e7446p-1f, 0x1.6e2e08p-1f, 0x1.6de7bep-1f, 0x1.6da166p-1f, 0x1.6d5afep-1f, 0x1.6d148ap-1f, + 0x1.6cce08p-1f, 0x1.6c8776p-1f, 0x1.6c40d8p-1f, 0x1.6bfa2ap-1f, 0x1.6bb37p-1f, 0x1.6b6ca6p-1f, + 0x1.6b25cep-1f, 0x1.6adeeap-1f, 0x1.6a97f6p-1f, 0x1.6a50f6p-1f, 0x1.6a09e6p-1f, 0x1.69c2cap-1f, + 0x1.697b9ep-1f, 0x1.693466p-1f, 0x1.68ed1ep-1f, 0x1.68a5cap-1f, 0x1.685e68p-1f, 0x1.6816f6p-1f, + 0x1.67cf78p-1f, 0x1.6787ecp-1f, 0x1.674052p-1f, 0x1.66f8aap-1f, 0x1.66b0f4p-1f, 0x1.66693p-1f, + 0x1.66215ep-1f, 0x1.65d98p-1f, 0x1.659192p-1f, 0x1.654998p-1f, 0x1.65018ep-1f, 0x1.64b978p-1f, + 0x1.647154p-1f, 0x1.642922p-1f, 0x1.63e0e2p-1f, 0x1.639896p-1f, 0x1.63503ap-1f, 0x1.6307d2p-1f, + 0x1.62bf5ap-1f, 0x1.6276d6p-1f, 0x1.622e44p-1f, 0x1.61e5a6p-1f, 0x1.619cf8p-1f, 0x1.61543ep-1f, + 0x1.610b76p-1f, 0x1.60c2ap-1f, 0x1.6079bcp-1f, 0x1.6030cap-1f, 0x1.5fe7ccp-1f, 0x1.5f9ecp-1f, + 0x1.5f55a6p-1f, 0x1.5f0c7ep-1f, 0x1.5ec34ap-1f, 0x1.5e7a06p-1f, 0x1.5e30b6p-1f, 0x1.5de75ap-1f, + 0x1.5d9deep-1f, 0x1.5d5476p-1f, 0x1.5d0afp-1f, 0x1.5cc15cp-1f, 0x1.5c77bcp-1f, 0x1.5c2e0ep-1f, + 0x1.5be452p-1f, 0x1.5b9a88p-1f, 0x1.5b50b2p-1f, 0x1.5b06cep-1f, 0x1.5abcdep-1f, 0x1.5a72dep-1f, + 0x1.5a28d2p-1f, 0x1.59debap-1f, 0x1.599492p-1f, 0x1.594a5ep-1f, 0x1.59001ep-1f, 0x1.58b5cep-1f, + 0x1.586b72p-1f, 0x1.58210ap-1f, 0x1.57d694p-1f, 0x1.578c1p-1f, 0x1.57417ep-1f, 0x1.56f6ep-1f, + 0x1.56ac36p-1f, 0x1.56617cp-1f, 0x1.5616b6p-1f, 0x1.55cbe4p-1f, 0x1.558104p-1f, 0x1.553616p-1f, + 0x1.54eb1cp-1f, 0x1.54a014p-1f, 0x1.5455p-1f, 0x1.5409dep-1f, 0x1.53beaep-1f, 0x1.537372p-1f, + 0x1.53282ap-1f, 0x1.52dcd2p-1f, 0x1.52917p-1f, 0x1.5246p-1f, 0x1.51fa82p-1f, 0x1.51aef8p-1f, + 0x1.51636p-1f, 0x1.5117bcp-1f, 0x1.50cc0ap-1f, 0x1.50804cp-1f, 0x1.50348p-1f, 0x1.4fe8a8p-1f, + 0x1.4f9cc2p-1f, 0x1.4f50dp-1f, 0x1.4f04dp-1f, 0x1.4eb8c4p-1f, 0x1.4e6cacp-1f, 0x1.4e2086p-1f, + 0x1.4dd454p-1f, 0x1.4d8814p-1f, 0x1.4d3bc6p-1f, 0x1.4cef6ep-1f, 0x1.4ca308p-1f, 0x1.4c5694p-1f, + 0x1.4c0a14p-1f, 0x1.4bbd88p-1f, 0x1.4b70eep-1f, 0x1.4b2448p-1f, 0x1.4ad796p-1f, 0x1.4a8ad6p-1f, + 0x1.4a3e08p-1f, 0x1.49f13p-1f, 0x1.49a44ap-1f, 0x1.495758p-1f, 0x1.490a58p-1f, 0x1.48bd4cp-1f, + 0x1.487034p-1f, 0x1.48230ep-1f, 0x1.47d5dcp-1f, 0x1.47889ep-1f, 0x1.473b52p-1f, 0x1.46edfap-1f, + 0x1.46a096p-1f, 0x1.465324p-1f, 0x1.4605a6p-1f, 0x1.45b81cp-1f, 0x1.456a86p-1f, 0x1.451ce2p-1f, + 0x1.44cf32p-1f, 0x1.448176p-1f, 0x1.4433aep-1f, 0x1.43e5d8p-1f, 0x1.4397f6p-1f, 0x1.434a08p-1f, + 0x1.42fc0cp-1f, 0x1.42ae06p-1f, 0x1.425ff2p-1f, 0x1.4211d2p-1f, 0x1.41c3a4p-1f, 0x1.41756cp-1f, + 0x1.412726p-1f, 0x1.40d8d4p-1f, 0x1.408a76p-1f, 0x1.403c0cp-1f, 0x1.3fed96p-1f, 0x1.3f9f12p-1f, + 0x1.3f5082p-1f, 0x1.3f01e6p-1f, 0x1.3eb33ep-1f, 0x1.3e648ap-1f, 0x1.3e15cap-1f, 0x1.3dc6fcp-1f, + 0x1.3d7824p-1f, 0x1.3d293ep-1f, 0x1.3cda4cp-1f, 0x1.3c8b4ep-1f, 0x1.3c3c44p-1f, 0x1.3bed2ep-1f, + 0x1.3b9e0cp-1f, 0x1.3b4edep-1f, 0x1.3affa2p-1f, 0x1.3ab05cp-1f, 0x1.3a6108p-1f, 0x1.3a11aap-1f, + 0x1.39c23ep-1f, 0x1.3972c6p-1f, 0x1.392344p-1f, 0x1.38d3b4p-1f, 0x1.388418p-1f, 0x1.38347p-1f, + 0x1.37e4bep-1f, 0x1.3794fep-1f, 0x1.374532p-1f, 0x1.36f55ap-1f, 0x1.36a576p-1f, 0x1.365586p-1f, + 0x1.36058cp-1f, 0x1.35b584p-1f, 0x1.35657p-1f, 0x1.35155p-1f, 0x1.34c526p-1f, 0x1.3474eep-1f, + 0x1.3424aap-1f, 0x1.33d45cp-1f, 0x1.3384p-1f, 0x1.33339ap-1f, 0x1.32e328p-1f, 0x1.3292aap-1f, + 0x1.32421ep-1f, 0x1.31f188p-1f, 0x1.31a0e6p-1f, 0x1.31503ap-1f, 0x1.30ff8p-1f, 0x1.30aebap-1f, + 0x1.305deap-1f, 0x1.300d0ep-1f, 0x1.2fbc24p-1f, 0x1.2f6b3p-1f, 0x1.2f1a3p-1f, 0x1.2ec926p-1f, + 0x1.2e780ep-1f, 0x1.2e26ecp-1f, 0x1.2dd5bcp-1f, 0x1.2d8482p-1f, 0x1.2d333ep-1f, 0x1.2ce1ecp-1f, + 0x1.2c908ep-1f, 0x1.2c3f26p-1f, 0x1.2bedb2p-1f, 0x1.2b9c32p-1f, 0x1.2b4aa8p-1f, 0x1.2af91p-1f, + 0x1.2aa76ep-1f, 0x1.2a55cp-1f, 0x1.2a0408p-1f, 0x1.29b242p-1f, 0x1.296072p-1f, 0x1.290e96p-1f, + 0x1.28bcbp-1f, 0x1.286abcp-1f, 0x1.2818bep-1f, 0x1.27c6b6p-1f, 0x1.2774ap-1f, 0x1.27228p-1f, + 0x1.26d054p-1f, 0x1.267e1ep-1f, 0x1.262bdcp-1f, 0x1.25d98ep-1f, 0x1.258734p-1f, 0x1.2534dp-1f, + 0x1.24e26p-1f, 0x1.248fe6p-1f, 0x1.243d6p-1f, 0x1.23eacep-1f, 0x1.239832p-1f, 0x1.23458ap-1f, + 0x1.22f2d6p-1f, 0x1.22a018p-1f, 0x1.224d4ep-1f, 0x1.21fa7ap-1f, 0x1.21a79ap-1f, 0x1.2154aep-1f, + 0x1.2101b8p-1f, 0x1.20aeb6p-1f, 0x1.205baap-1f, 0x1.200892p-1f, 0x1.1fb57p-1f, 0x1.1f6242p-1f, + 0x1.1f0f08p-1f, 0x1.1ebbc4p-1f, 0x1.1e6876p-1f, 0x1.1e151cp-1f, 0x1.1dc1b6p-1f, 0x1.1d6e46p-1f, + 0x1.1d1acap-1f, 0x1.1cc744p-1f, 0x1.1c73b4p-1f, 0x1.1c2018p-1f, 0x1.1bcc7p-1f, 0x1.1b78bep-1f, + 0x1.1b2502p-1f, 0x1.1ad13ap-1f, 0x1.1a7d66p-1f, 0x1.1a298ap-1f, 0x1.19d5ap-1f, 0x1.1981aep-1f, + 0x1.192daep-1f, 0x1.18d9a6p-1f, 0x1.188592p-1f, 0x1.183174p-1f, 0x1.17dd4ap-1f, 0x1.178916p-1f, + 0x1.1734d6p-1f, 0x1.16e08cp-1f, 0x1.168c38p-1f, 0x1.1637d8p-1f, 0x1.15e36ep-1f, 0x1.158efap-1f, + 0x1.153a7ap-1f, 0x1.14e5fp-1f, 0x1.14915ap-1f, 0x1.143cbcp-1f, 0x1.13e812p-1f, 0x1.13935cp-1f, + 0x1.133e9cp-1f, 0x1.12e9d2p-1f, 0x1.1294fep-1f, 0x1.12402p-1f, 0x1.11eb36p-1f, 0x1.11964p-1f, + 0x1.114142p-1f, 0x1.10ec38p-1f, 0x1.109724p-1f, 0x1.104206p-1f, 0x1.0fecdep-1f, 0x1.0f97aap-1f, + 0x1.0f426cp-1f, 0x1.0eed24p-1f, 0x1.0e97dp-1f, 0x1.0e4274p-1f, 0x1.0ded0cp-1f, 0x1.0d979ap-1f, + 0x1.0d421cp-1f, 0x1.0cec96p-1f, 0x1.0c9704p-1f, 0x1.0c416ap-1f, 0x1.0bebc4p-1f, 0x1.0b9614p-1f, + 0x1.0b4058p-1f, 0x1.0aea94p-1f, 0x1.0a94c4p-1f, 0x1.0a3eeap-1f, 0x1.09e908p-1f, 0x1.09931ap-1f, + 0x1.093d22p-1f, 0x1.08e71ep-1f, 0x1.089112p-1f, 0x1.083afcp-1f, 0x1.07e4dap-1f, 0x1.078eaep-1f, + 0x1.07387ap-1f, 0x1.06e23ap-1f, 0x1.068bfp-1f, 0x1.06359cp-1f, 0x1.05df3ep-1f, 0x1.0588d6p-1f, + 0x1.053264p-1f, 0x1.04dbe8p-1f, 0x1.048562p-1f, 0x1.042ed2p-1f, 0x1.03d838p-1f, 0x1.038194p-1f, + 0x1.032ae6p-1f, 0x1.02d42ep-1f, 0x1.027d6ap-1f, 0x1.02269ep-1f, 0x1.01cfc8p-1f, 0x1.0178e8p-1f, + 0x1.0121fep-1f, 0x1.00cb0ap-1f, 0x1.00740cp-1f, 0x1.001d04p-1f, 0x1.ff8be6p-2f, 0x1.feddbp-2f, + 0x1.fe2f64p-2f, 0x1.fd8106p-2f, 0x1.fcd294p-2f, 0x1.fc240ep-2f, 0x1.fb7576p-2f, 0x1.fac6cap-2f, + 0x1.fa1808p-2f, 0x1.f96936p-2f, 0x1.f8ba4ep-2f, 0x1.f80b54p-2f, 0x1.f75c44p-2f, 0x1.f6ad24p-2f, + 0x1.f5fdeep-2f, 0x1.f54ea6p-2f, 0x1.f49f4ap-2f, 0x1.f3efdcp-2f, 0x1.f3405ap-2f, 0x1.f290c4p-2f, + 0x1.f1e11cp-2f, 0x1.f1316p-2f, 0x1.f0819p-2f, 0x1.efd1aep-2f, 0x1.ef21b8p-2f, 0x1.ee71bp-2f, + 0x1.edc196p-2f, 0x1.ed1166p-2f, 0x1.ec6126p-2f, 0x1.ebb0dp-2f, 0x1.eb006ap-2f, 0x1.ea4ffp-2f, + 0x1.e99f62p-2f, 0x1.e8eec2p-2f, 0x1.e83e0ep-2f, 0x1.e78d48p-2f, 0x1.e6dc7p-2f, 0x1.e62b84p-2f, + 0x1.e57a86p-2f, 0x1.e4c976p-2f, 0x1.e41852p-2f, 0x1.e3671cp-2f, 0x1.e2b5d4p-2f, 0x1.e20478p-2f, + 0x1.e1530ap-2f, 0x1.e0a18ap-2f, 0x1.dfeff6p-2f, 0x1.df3e5p-2f, 0x1.de8c98p-2f, 0x1.dddacep-2f, + 0x1.dd28f2p-2f, 0x1.dc7702p-2f, 0x1.dbc5p-2f, 0x1.db12ecp-2f, 0x1.da60c6p-2f, 0x1.d9ae8ep-2f, + 0x1.d8fc42p-2f, 0x1.d849e6p-2f, 0x1.d79776p-2f, 0x1.d6e4f4p-2f, 0x1.d6326p-2f, 0x1.d57fbap-2f, + 0x1.d4cd02p-2f, 0x1.d41a38p-2f, 0x1.d3675cp-2f, 0x1.d2b46ep-2f, 0x1.d2016ep-2f, 0x1.d14e5cp-2f, + 0x1.d09b38p-2f, 0x1.cfe802p-2f, 0x1.cf34bap-2f, 0x1.ce8162p-2f, 0x1.cdcdf6p-2f, 0x1.cd1a78p-2f, + 0x1.cc66eap-2f, 0x1.cbb348p-2f, 0x1.caff96p-2f, 0x1.ca4bd2p-2f, 0x1.c997fcp-2f, 0x1.c8e414p-2f, + 0x1.c8301cp-2f, 0x1.c77c1p-2f, 0x1.c6c7f4p-2f, 0x1.c613c6p-2f, 0x1.c55f88p-2f, 0x1.c4ab36p-2f, + 0x1.c3f6d4p-2f, 0x1.c3426p-2f, 0x1.c28ddcp-2f, 0x1.c1d946p-2f, 0x1.c1249ep-2f, 0x1.c06fe4p-2f, + 0x1.bfbb1ap-2f, 0x1.bf063ep-2f, 0x1.be5152p-2f, 0x1.bd9c54p-2f, 0x1.bce744p-2f, 0x1.bc3224p-2f, + 0x1.bb7cf2p-2f, 0x1.bac7bp-2f, 0x1.ba125cp-2f, 0x1.b95cf8p-2f, 0x1.b8a782p-2f, 0x1.b7f1fap-2f, + 0x1.b73c62p-2f, 0x1.b686bap-2f, 0x1.b5d1p-2f, 0x1.b51b36p-2f, 0x1.b4655ap-2f, 0x1.b3af6ep-2f, + 0x1.b2f972p-2f, 0x1.b24364p-2f, 0x1.b18d46p-2f, 0x1.b0d716p-2f, 0x1.b020d6p-2f, 0x1.af6a86p-2f, + 0x1.aeb426p-2f, 0x1.adfdb4p-2f, 0x1.ad4732p-2f, 0x1.ac909ep-2f, 0x1.abd9fap-2f, 0x1.ab2348p-2f, + 0x1.aa6c82p-2f, 0x1.a9b5aep-2f, 0x1.a8fec8p-2f, 0x1.a847d4p-2f, 0x1.a790cep-2f, 0x1.a6d9b6p-2f, + 0x1.a6229p-2f, 0x1.a56b5ap-2f, 0x1.a4b412p-2f, 0x1.a3fcbcp-2f, 0x1.a34554p-2f, 0x1.a28ddcp-2f, + 0x1.a1d654p-2f, 0x1.a11ebcp-2f, 0x1.a06714p-2f, 0x1.9faf5cp-2f, 0x1.9ef794p-2f, 0x1.9e3fbcp-2f, + 0x1.9d87d4p-2f, 0x1.9ccfdcp-2f, 0x1.9c17d4p-2f, 0x1.9b5fbcp-2f, 0x1.9aa794p-2f, 0x1.99ef5ep-2f, + 0x1.993716p-2f, 0x1.987ecp-2f, 0x1.97c658p-2f, 0x1.970de2p-2f, 0x1.96555cp-2f, 0x1.959cc6p-2f, + 0x1.94e42p-2f, 0x1.942b6ap-2f, 0x1.9372a6p-2f, 0x1.92b9d2p-2f, 0x1.9200eep-2f, 0x1.9147fap-2f, + 0x1.908ef8p-2f, 0x1.8fd5e6p-2f, 0x1.8f1cc4p-2f, 0x1.8e6394p-2f, 0x1.8daa52p-2f, 0x1.8cf104p-2f, + 0x1.8c37a4p-2f, 0x1.8b7e36p-2f, 0x1.8ac4b8p-2f, 0x1.8a0b2cp-2f, 0x1.89519p-2f, 0x1.8897e4p-2f, + 0x1.87de2ap-2f, 0x1.872462p-2f, 0x1.866a88p-2f, 0x1.85b0a2p-2f, 0x1.84f6aap-2f, 0x1.843ca6p-2f, + 0x1.83829p-2f, 0x1.82c86ep-2f, 0x1.820e3cp-2f, 0x1.8153fap-2f, 0x1.8099aap-2f, 0x1.7fdf4ap-2f, + 0x1.7f24dep-2f, 0x1.7e6a6p-2f, 0x1.7dafd6p-2f, 0x1.7cf53cp-2f, 0x1.7c3a94p-2f, 0x1.7b7fdcp-2f, + 0x1.7ac516p-2f, 0x1.7a0a42p-2f, 0x1.794f5ep-2f, 0x1.78946cp-2f, 0x1.77d96cp-2f, 0x1.771e5ep-2f, + 0x1.76634p-2f, 0x1.75a816p-2f, 0x1.74ecdcp-2f, 0x1.743194p-2f, 0x1.73763cp-2f, 0x1.72bad8p-2f, + 0x1.71ff64p-2f, 0x1.7143e2p-2f, 0x1.708854p-2f, 0x1.6fccb6p-2f, 0x1.6f1108p-2f, 0x1.6e554ep-2f, + 0x1.6d9986p-2f, 0x1.6cddbp-2f, 0x1.6c21ccp-2f, 0x1.6b65d8p-2f, 0x1.6aa9d8p-2f, 0x1.69edcap-2f, + 0x1.6931acp-2f, 0x1.687582p-2f, 0x1.67b94ap-2f, 0x1.66fd04p-2f, 0x1.6640bp-2f, 0x1.65844ep-2f, + 0x1.64c7dep-2f, 0x1.640b6p-2f, 0x1.634ed6p-2f, 0x1.62923cp-2f, 0x1.61d596p-2f, 0x1.6118e2p-2f, + 0x1.605c2p-2f, 0x1.5f9f5p-2f, 0x1.5ee274p-2f, 0x1.5e258ap-2f, 0x1.5d6892p-2f, 0x1.5cab8cp-2f, + 0x1.5bee78p-2f, 0x1.5b3158p-2f, 0x1.5a742ap-2f, 0x1.59b6fp-2f, 0x1.58f9a8p-2f, 0x1.583c52p-2f, + 0x1.577eeep-2f, 0x1.56c17ep-2f, 0x1.560402p-2f, 0x1.554676p-2f, 0x1.5488dep-2f, 0x1.53cb3ap-2f, + 0x1.530d88p-2f, 0x1.524fcap-2f, 0x1.5191fcp-2f, 0x1.50d424p-2f, 0x1.50163ep-2f, 0x1.4f584ap-2f, + 0x1.4e9a4ap-2f, 0x1.4ddc3ep-2f, 0x1.4d1e24p-2f, 0x1.4c5ffep-2f, 0x1.4ba1cap-2f, 0x1.4ae38ap-2f, + 0x1.4a253ep-2f, 0x1.4966e4p-2f, 0x1.48a87ep-2f, 0x1.47ea0ap-2f, 0x1.472b8ap-2f, 0x1.466cfep-2f, + 0x1.45ae66p-2f, 0x1.44efcp-2f, 0x1.44310ep-2f, 0x1.43725p-2f, 0x1.42b384p-2f, 0x1.41f4aep-2f, + 0x1.4135cap-2f, 0x1.4076dap-2f, 0x1.3fb7dcp-2f, 0x1.3ef8d4p-2f, 0x1.3e39bep-2f, 0x1.3d7a9ep-2f, + 0x1.3cbb7p-2f, 0x1.3bfc36p-2f, 0x1.3b3cfp-2f, 0x1.3a7d9ep-2f, 0x1.39be4p-2f, 0x1.38fed4p-2f, + 0x1.383f5ep-2f, 0x1.377fdcp-2f, 0x1.36c04ep-2f, 0x1.3600b2p-2f, 0x1.35410cp-2f, 0x1.34815ap-2f, + 0x1.33c19cp-2f, 0x1.3301d2p-2f, 0x1.3241fcp-2f, 0x1.31821ap-2f, 0x1.30c22cp-2f, 0x1.300232p-2f, + 0x1.2f422ep-2f, 0x1.2e821cp-2f, 0x1.2dc2p-2f, 0x1.2d01d8p-2f, 0x1.2c41a4p-2f, 0x1.2b8166p-2f, + 0x1.2ac11ap-2f, 0x1.2a00c4p-2f, 0x1.294062p-2f, 0x1.287ff6p-2f, 0x1.27bf7ep-2f, 0x1.26fefap-2f, + 0x1.263e6ap-2f, 0x1.257dcep-2f, 0x1.24bd28p-2f, 0x1.23fc78p-2f, 0x1.233bbap-2f, 0x1.227af2p-2f, + 0x1.21ba2p-2f, 0x1.20f942p-2f, 0x1.203858p-2f, 0x1.1f7764p-2f, 0x1.1eb664p-2f, 0x1.1df55ap-2f, + 0x1.1d3444p-2f, 0x1.1c7324p-2f, 0x1.1bb1f8p-2f, 0x1.1af0c2p-2f, 0x1.1a2f8p-2f, 0x1.196e34p-2f, + 0x1.18acdcp-2f, 0x1.17eb7ap-2f, 0x1.172a0ep-2f, 0x1.166896p-2f, 0x1.15a714p-2f, 0x1.14e586p-2f, + 0x1.1423eep-2f, 0x1.13624cp-2f, 0x1.12a0ap-2f, 0x1.11dee8p-2f, 0x1.111d26p-2f, 0x1.105b5ap-2f, + 0x1.0f9982p-2f, 0x1.0ed7ap-2f, 0x1.0e15b4p-2f, 0x1.0d53bep-2f, 0x1.0c91bep-2f, 0x1.0bcfb2p-2f, + 0x1.0b0d9cp-2f, 0x1.0a4b7ep-2f, 0x1.098954p-2f, 0x1.08c71ep-2f, 0x1.0804ep-2f, 0x1.074298p-2f, + 0x1.068044p-2f, 0x1.05bde8p-2f, 0x1.04fb8p-2f, 0x1.04391p-2f, 0x1.037694p-2f, 0x1.02b41p-2f, + 0x1.01f18p-2f, 0x1.012ee8p-2f, 0x1.006c44p-2f, 0x1.ff533p-3f, 0x1.fdcdc2p-3f, 0x1.fc484p-3f, + 0x1.fac2acp-3f, 0x1.f93d04p-3f, 0x1.f7b748p-3f, 0x1.f63178p-3f, 0x1.f4ab96p-3f, 0x1.f325ap-3f, + 0x1.f19f98p-3f, 0x1.f0197cp-3f, 0x1.ee934cp-3f, 0x1.ed0d0ap-3f, 0x1.eb86b4p-3f, 0x1.ea004cp-3f, + 0x1.e879dp-3f, 0x1.e6f342p-3f, 0x1.e56ca2p-3f, 0x1.e3e5eep-3f, 0x1.e25f28p-3f, 0x1.e0d85p-3f, + 0x1.df5164p-3f, 0x1.ddca66p-3f, 0x1.dc4356p-3f, 0x1.dabc34p-3f, 0x1.d934fep-3f, 0x1.d7adb8p-3f, + 0x1.d6265ep-3f, 0x1.d49ef2p-3f, 0x1.d31774p-3f, 0x1.d18fe6p-3f, 0x1.d00844p-3f, 0x1.ce809p-3f, + 0x1.ccf8ccp-3f, 0x1.cb70f4p-3f, 0x1.c9e90cp-3f, 0x1.c86112p-3f, 0x1.c6d906p-3f, 0x1.c550e8p-3f, + 0x1.c3c8b8p-3f, 0x1.c24078p-3f, 0x1.c0b826p-3f, 0x1.bf2fc4p-3f, 0x1.bda75p-3f, 0x1.bc1ecap-3f, + 0x1.ba9634p-3f, 0x1.b90d8cp-3f, 0x1.b784d4p-3f, 0x1.b5fc0ap-3f, 0x1.b4732ep-3f, 0x1.b2ea44p-3f, + 0x1.b16148p-3f, 0x1.afd83ap-3f, 0x1.ae4f1ep-3f, 0x1.acc5fp-3f, 0x1.ab3cbp-3f, 0x1.a9b362p-3f, + 0x1.a82a02p-3f, 0x1.a6a092p-3f, 0x1.a51712p-3f, 0x1.a38d82p-3f, 0x1.a203e2p-3f, 0x1.a07a32p-3f, + 0x1.9ef07p-3f, 0x1.9d66ap-3f, 0x1.9bdccp-3f, 0x1.9a52cep-3f, 0x1.98c8cep-3f, 0x1.973ebep-3f, + 0x1.95b49ep-3f, 0x1.942a7p-3f, 0x1.92a03p-3f, 0x1.9115e2p-3f, 0x1.8f8b84p-3f, 0x1.8e0116p-3f, + 0x1.8c769ap-3f, 0x1.8aec0ep-3f, 0x1.896172p-3f, 0x1.87d6c8p-3f, 0x1.864c0ep-3f, 0x1.84c146p-3f, + 0x1.83366ep-3f, 0x1.81ab88p-3f, 0x1.802092p-3f, 0x1.7e958ep-3f, 0x1.7d0a7cp-3f, 0x1.7b7f5ap-3f, + 0x1.79f42ap-3f, 0x1.7868ecp-3f, 0x1.76dd9ep-3f, 0x1.755242p-3f, 0x1.73c6d8p-3f, 0x1.723b6p-3f, + 0x1.70afd8p-3f, 0x1.6f2444p-3f, 0x1.6d98ap-3f, 0x1.6c0cfp-3f, 0x1.6a813p-3f, 0x1.68f564p-3f, + 0x1.676988p-3f, 0x1.65dd9ep-3f, 0x1.6451a8p-3f, 0x1.62c5a4p-3f, 0x1.613992p-3f, 0x1.5fad72p-3f, + 0x1.5e2144p-3f, 0x1.5c950ap-3f, 0x1.5b08c2p-3f, 0x1.597c6cp-3f, 0x1.57f008p-3f, 0x1.566398p-3f, + 0x1.54d71ap-3f, 0x1.534a9p-3f, 0x1.51bdf8p-3f, 0x1.503154p-3f, 0x1.4ea4a2p-3f, 0x1.4d17e4p-3f, + 0x1.4b8b18p-3f, 0x1.49fe4p-3f, 0x1.48715ap-3f, 0x1.46e46ap-3f, 0x1.45576cp-3f, 0x1.43ca6p-3f, + 0x1.423d4ap-3f, 0x1.40b026p-3f, 0x1.3f22f6p-3f, 0x1.3d95bap-3f, 0x1.3c087p-3f, 0x1.3a7b1cp-3f, + 0x1.38edbcp-3f, 0x1.37604ep-3f, 0x1.35d2d6p-3f, 0x1.34455p-3f, 0x1.32b7cp-3f, 0x1.312a22p-3f, + 0x1.2f9c7ap-3f, 0x1.2e0ec6p-3f, 0x1.2c8106p-3f, 0x1.2af33cp-3f, 0x1.296564p-3f, 0x1.27d782p-3f, + 0x1.264994p-3f, 0x1.24bb9cp-3f, 0x1.232d98p-3f, 0x1.219f88p-3f, 0x1.20116ep-3f, 0x1.1e8348p-3f, + 0x1.1cf516p-3f, 0x1.1b66dap-3f, 0x1.19d894p-3f, 0x1.184a42p-3f, 0x1.16bbe6p-3f, 0x1.152d7ep-3f, + 0x1.139f0cp-3f, 0x1.12109p-3f, 0x1.10820ap-3f, 0x1.0ef378p-3f, 0x1.0d64dcp-3f, 0x1.0bd636p-3f, + 0x1.0a4784p-3f, 0x1.08b8cap-3f, 0x1.072a04p-3f, 0x1.059b36p-3f, 0x1.040c5cp-3f, 0x1.027d78p-3f, + 0x1.00ee8ap-3f, 0x1.febf28p-4f, 0x1.fba124p-4f, 0x1.f8830ep-4f, 0x1.f564e6p-4f, 0x1.f246a8p-4f, + 0x1.ef2858p-4f, 0x1.ec09f6p-4f, 0x1.e8eb8p-4f, 0x1.e5ccf8p-4f, 0x1.e2ae5cp-4f, 0x1.df8faep-4f, + 0x1.dc70ecp-4f, 0x1.d9521ap-4f, 0x1.d63334p-4f, 0x1.d3143ep-4f, 0x1.cff534p-4f, 0x1.ccd618p-4f, + 0x1.c9b6ecp-4f, 0x1.c697acp-4f, 0x1.c3785cp-4f, 0x1.c058fap-4f, 0x1.bd3988p-4f, 0x1.ba1a04p-4f, + 0x1.b6fa6ep-4f, 0x1.b3dac8p-4f, 0x1.b0bb12p-4f, 0x1.ad9b4ap-4f, 0x1.aa7b72p-4f, 0x1.a75b8ap-4f, + 0x1.a43b9p-4f, 0x1.a11b88p-4f, 0x1.9dfb6ep-4f, 0x1.9adb46p-4f, 0x1.97bb0cp-4f, 0x1.949ac4p-4f, + 0x1.917a6cp-4f, 0x1.8e5a04p-4f, 0x1.8b398cp-4f, 0x1.881906p-4f, 0x1.84f872p-4f, 0x1.81d7ccp-4f, + 0x1.7eb71ap-4f, 0x1.7b9658p-4f, 0x1.787586p-4f, 0x1.7554a8p-4f, 0x1.7233bap-4f, 0x1.6f12bep-4f, + 0x1.6bf1b4p-4f, 0x1.68d09cp-4f, 0x1.65af76p-4f, 0x1.628e42p-4f, 0x1.5f6dp-4f, 0x1.5c4bb2p-4f, + 0x1.592a56p-4f, 0x1.5608ecp-4f, 0x1.52e774p-4f, 0x1.4fc5fp-4f, 0x1.4ca46p-4f, 0x1.4982c2p-4f, + 0x1.466118p-4f, 0x1.433f6p-4f, 0x1.401d9ep-4f, 0x1.3cfbcep-4f, 0x1.39d9f2p-4f, 0x1.36b80ap-4f, + 0x1.339614p-4f, 0x1.307414p-4f, 0x1.2d520ap-4f, 0x1.2a2ff2p-4f, 0x1.270dcep-4f, 0x1.23ebap-4f, + 0x1.20c968p-4f, 0x1.1da722p-4f, 0x1.1a84d4p-4f, 0x1.176278p-4f, 0x1.144014p-4f, 0x1.111da4p-4f, + 0x1.0dfb28p-4f, 0x1.0ad8a4p-4f, 0x1.07b614p-4f, 0x1.04937cp-4f, 0x1.0170d8p-4f, 0x1.fc9c56p-5f, + 0x1.f656e8p-5f, 0x1.f01166p-5f, 0x1.e9cbd2p-5f, 0x1.e3862ap-5f, 0x1.dd407p-5f, 0x1.d6faa2p-5f, + 0x1.d0b4c4p-5f, 0x1.ca6ed4p-5f, 0x1.c428d2p-5f, 0x1.bde2bep-5f, 0x1.b79c98p-5f, 0x1.b15662p-5f, + 0x1.ab101cp-5f, 0x1.a4c9c4p-5f, 0x1.9e835ep-5f, 0x1.983ce6p-5f, 0x1.91f66p-5f, 0x1.8bafc8p-5f, + 0x1.856922p-5f, 0x1.7f226ep-5f, 0x1.78dbaap-5f, 0x1.7294d8p-5f, 0x1.6c4df8p-5f, 0x1.66070ap-5f, + 0x1.5fc00ep-5f, 0x1.597904p-5f, 0x1.5331ecp-5f, 0x1.4ceac8p-5f, 0x1.46a396p-5f, 0x1.405c5ap-5f, + 0x1.3a151p-5f, 0x1.33cdbap-5f, 0x1.2d8658p-5f, 0x1.273eeap-5f, 0x1.20f77p-5f, 0x1.1aafecp-5f, + 0x1.14685ep-5f, 0x1.0e20c4p-5f, 0x1.07d92p-5f, 0x1.019172p-5f, 0x1.f69374p-6f, 0x1.ea03fp-6f, + 0x1.dd7458p-6f, 0x1.d0e4bp-6f, 0x1.c454f4p-6f, 0x1.b7c528p-6f, 0x1.ab354cp-6f, 0x1.9ea55ep-6f, + 0x1.92156p-6f, 0x1.858552p-6f, 0x1.78f536p-6f, 0x1.6c650cp-6f, 0x1.5fd4d2p-6f, 0x1.53448cp-6f, + 0x1.46b438p-6f, 0x1.3a23d8p-6f, 0x1.2d936cp-6f, 0x1.2102f4p-6f, 0x1.14727p-6f, 0x1.07e1e4p-6f, + 0x1.f6a296p-7f, 0x1.dd8154p-7f, 0x1.c45ffep-7f, 0x1.ab3e98p-7f, 0x1.921d2p-7f, 0x1.78fb98p-7f, + 0x1.5fda04p-7f, 0x1.46b86p-7f, 0x1.2d96bp-7f, 0x1.1474f6p-7f, 0x1.f6a66p-8f, 0x1.c462cp-8f, + 0x1.921f1p-8f, 0x1.5fdb5p-8f, 0x1.2d9782p-8f, 0x1.f6a752p-9f, 0x1.921f8cp-9f, 0x1.2d97b6p-9f, + 0x1.921faap-10f, 0x1.921fb2p-11f, 0x1.1a6264p-54f, -0x1.921fb2p-11f, -0x1.921faap-10f, -0x1.2d97b6p-9f, + -0x1.921f8cp-9f, -0x1.f6a752p-9f, -0x1.2d9782p-8f, -0x1.5fdb5p-8f, -0x1.921f1p-8f, -0x1.c462cp-8f, + -0x1.f6a66p-8f, -0x1.1474f6p-7f, -0x1.2d96bp-7f, -0x1.46b86p-7f, -0x1.5fda04p-7f, -0x1.78fb98p-7f, + -0x1.921d2p-7f, -0x1.ab3e98p-7f, -0x1.c45ffep-7f, -0x1.dd8154p-7f, -0x1.f6a296p-7f, -0x1.07e1e4p-6f, + -0x1.14727p-6f, -0x1.2102f4p-6f, -0x1.2d936cp-6f, -0x1.3a23d8p-6f, -0x1.46b438p-6f, -0x1.53448cp-6f, + -0x1.5fd4d2p-6f, -0x1.6c650cp-6f, -0x1.78f536p-6f, -0x1.858552p-6f, -0x1.92156p-6f, -0x1.9ea55ep-6f, + -0x1.ab354cp-6f, -0x1.b7c528p-6f, -0x1.c454f4p-6f, -0x1.d0e4bp-6f, -0x1.dd7458p-6f, -0x1.ea03fp-6f, + -0x1.f69374p-6f, -0x1.019172p-5f, -0x1.07d92p-5f, -0x1.0e20c4p-5f, -0x1.14685ep-5f, -0x1.1aafecp-5f, + -0x1.20f77p-5f, -0x1.273eeap-5f, -0x1.2d8658p-5f, -0x1.33cdbap-5f, -0x1.3a151p-5f, -0x1.405c5ap-5f, + -0x1.46a396p-5f, -0x1.4ceac8p-5f, -0x1.5331ecp-5f, -0x1.597904p-5f, -0x1.5fc00ep-5f, -0x1.66070ap-5f, + -0x1.6c4df8p-5f, -0x1.7294d8p-5f, -0x1.78dbaap-5f, -0x1.7f226ep-5f, -0x1.856922p-5f, -0x1.8bafc8p-5f, + -0x1.91f66p-5f, -0x1.983ce6p-5f, -0x1.9e835ep-5f, -0x1.a4c9c4p-5f, -0x1.ab101cp-5f, -0x1.b15662p-5f, + -0x1.b79c98p-5f, -0x1.bde2bep-5f, -0x1.c428d2p-5f, -0x1.ca6ed4p-5f, -0x1.d0b4c4p-5f, -0x1.d6faa2p-5f, + -0x1.dd407p-5f, -0x1.e3862ap-5f, -0x1.e9cbd2p-5f, -0x1.f01166p-5f, -0x1.f656e8p-5f, -0x1.fc9c56p-5f, + -0x1.0170d8p-4f, -0x1.04937cp-4f, -0x1.07b614p-4f, -0x1.0ad8a4p-4f, -0x1.0dfb28p-4f, -0x1.111da4p-4f, + -0x1.144014p-4f, -0x1.176278p-4f, -0x1.1a84d4p-4f, -0x1.1da722p-4f, -0x1.20c968p-4f, -0x1.23ebap-4f, + -0x1.270dcep-4f, -0x1.2a2ff2p-4f, -0x1.2d520ap-4f, -0x1.307414p-4f, -0x1.339614p-4f, -0x1.36b80ap-4f, + -0x1.39d9f2p-4f, -0x1.3cfbcep-4f, -0x1.401d9ep-4f, -0x1.433f6p-4f, -0x1.466118p-4f, -0x1.4982c2p-4f, + -0x1.4ca46p-4f, -0x1.4fc5fp-4f, -0x1.52e774p-4f, -0x1.5608ecp-4f, -0x1.592a56p-4f, -0x1.5c4bb2p-4f, + -0x1.5f6dp-4f, -0x1.628e42p-4f, -0x1.65af76p-4f, -0x1.68d09cp-4f, -0x1.6bf1b4p-4f, -0x1.6f12bep-4f, + -0x1.7233bap-4f, -0x1.7554a8p-4f, -0x1.787586p-4f, -0x1.7b9658p-4f, -0x1.7eb71ap-4f, -0x1.81d7ccp-4f, + -0x1.84f872p-4f, -0x1.881906p-4f, -0x1.8b398cp-4f, -0x1.8e5a04p-4f, -0x1.917a6cp-4f, -0x1.949ac4p-4f, + -0x1.97bb0cp-4f, -0x1.9adb46p-4f, -0x1.9dfb6ep-4f, -0x1.a11b88p-4f, -0x1.a43b9p-4f, -0x1.a75b8ap-4f, + -0x1.aa7b72p-4f, -0x1.ad9b4ap-4f, -0x1.b0bb12p-4f, -0x1.b3dac8p-4f, -0x1.b6fa6ep-4f, -0x1.ba1a04p-4f, + -0x1.bd3988p-4f, -0x1.c058fap-4f, -0x1.c3785cp-4f, -0x1.c697acp-4f, -0x1.c9b6ecp-4f, -0x1.ccd618p-4f, + -0x1.cff534p-4f, -0x1.d3143ep-4f, -0x1.d63334p-4f, -0x1.d9521ap-4f, -0x1.dc70ecp-4f, -0x1.df8faep-4f, + -0x1.e2ae5cp-4f, -0x1.e5ccf8p-4f, -0x1.e8eb8p-4f, -0x1.ec09f6p-4f, -0x1.ef2858p-4f, -0x1.f246a8p-4f, + -0x1.f564e6p-4f, -0x1.f8830ep-4f, -0x1.fba124p-4f, -0x1.febf28p-4f, -0x1.00ee8ap-3f, -0x1.027d78p-3f, + -0x1.040c5cp-3f, -0x1.059b36p-3f, -0x1.072a04p-3f, -0x1.08b8cap-3f, -0x1.0a4784p-3f, -0x1.0bd636p-3f, + -0x1.0d64dcp-3f, -0x1.0ef378p-3f, -0x1.10820ap-3f, -0x1.12109p-3f, -0x1.139f0cp-3f, -0x1.152d7ep-3f, + -0x1.16bbe6p-3f, -0x1.184a42p-3f, -0x1.19d894p-3f, -0x1.1b66dap-3f, -0x1.1cf516p-3f, -0x1.1e8348p-3f, + -0x1.20116ep-3f, -0x1.219f88p-3f, -0x1.232d98p-3f, -0x1.24bb9cp-3f, -0x1.264994p-3f, -0x1.27d782p-3f, + -0x1.296564p-3f, -0x1.2af33cp-3f, -0x1.2c8106p-3f, -0x1.2e0ec6p-3f, -0x1.2f9c7ap-3f, -0x1.312a22p-3f, + -0x1.32b7cp-3f, -0x1.34455p-3f, -0x1.35d2d6p-3f, -0x1.37604ep-3f, -0x1.38edbcp-3f, -0x1.3a7b1cp-3f, + -0x1.3c087p-3f, -0x1.3d95bap-3f, -0x1.3f22f6p-3f, -0x1.40b026p-3f, -0x1.423d4ap-3f, -0x1.43ca6p-3f, + -0x1.45576cp-3f, -0x1.46e46ap-3f, -0x1.48715ap-3f, -0x1.49fe4p-3f, -0x1.4b8b18p-3f, -0x1.4d17e4p-3f, + -0x1.4ea4a2p-3f, -0x1.503154p-3f, -0x1.51bdf8p-3f, -0x1.534a9p-3f, -0x1.54d71ap-3f, -0x1.566398p-3f, + -0x1.57f008p-3f, -0x1.597c6cp-3f, -0x1.5b08c2p-3f, -0x1.5c950ap-3f, -0x1.5e2144p-3f, -0x1.5fad72p-3f, + -0x1.613992p-3f, -0x1.62c5a4p-3f, -0x1.6451a8p-3f, -0x1.65dd9ep-3f, -0x1.676988p-3f, -0x1.68f564p-3f, + -0x1.6a813p-3f, -0x1.6c0cfp-3f, -0x1.6d98ap-3f, -0x1.6f2444p-3f, -0x1.70afd8p-3f, -0x1.723b6p-3f, + -0x1.73c6d8p-3f, -0x1.755242p-3f, -0x1.76dd9ep-3f, -0x1.7868ecp-3f, -0x1.79f42ap-3f, -0x1.7b7f5ap-3f, + -0x1.7d0a7cp-3f, -0x1.7e958ep-3f, -0x1.802092p-3f, -0x1.81ab88p-3f, -0x1.83366ep-3f, -0x1.84c146p-3f, + -0x1.864c0ep-3f, -0x1.87d6c8p-3f, -0x1.896172p-3f, -0x1.8aec0ep-3f, -0x1.8c769ap-3f, -0x1.8e0116p-3f, + -0x1.8f8b84p-3f, -0x1.9115e2p-3f, -0x1.92a03p-3f, -0x1.942a7p-3f, -0x1.95b49ep-3f, -0x1.973ebep-3f, + -0x1.98c8cep-3f, -0x1.9a52cep-3f, -0x1.9bdccp-3f, -0x1.9d66ap-3f, -0x1.9ef07p-3f, -0x1.a07a32p-3f, + -0x1.a203e2p-3f, -0x1.a38d82p-3f, -0x1.a51712p-3f, -0x1.a6a092p-3f, -0x1.a82a02p-3f, -0x1.a9b362p-3f, + -0x1.ab3cbp-3f, -0x1.acc5fp-3f, -0x1.ae4f1ep-3f, -0x1.afd83ap-3f, -0x1.b16148p-3f, -0x1.b2ea44p-3f, + -0x1.b4732ep-3f, -0x1.b5fc0ap-3f, -0x1.b784d4p-3f, -0x1.b90d8cp-3f, -0x1.ba9634p-3f, -0x1.bc1ecap-3f, + -0x1.bda75p-3f, -0x1.bf2fc4p-3f, -0x1.c0b826p-3f, -0x1.c24078p-3f, -0x1.c3c8b8p-3f, -0x1.c550e8p-3f, + -0x1.c6d906p-3f, -0x1.c86112p-3f, -0x1.c9e90cp-3f, -0x1.cb70f4p-3f, -0x1.ccf8ccp-3f, -0x1.ce809p-3f, + -0x1.d00844p-3f, -0x1.d18fe6p-3f, -0x1.d31774p-3f, -0x1.d49ef2p-3f, -0x1.d6265ep-3f, -0x1.d7adb8p-3f, + -0x1.d934fep-3f, -0x1.dabc34p-3f, -0x1.dc4356p-3f, -0x1.ddca66p-3f, -0x1.df5164p-3f, -0x1.e0d85p-3f, + -0x1.e25f28p-3f, -0x1.e3e5eep-3f, -0x1.e56ca2p-3f, -0x1.e6f342p-3f, -0x1.e879dp-3f, -0x1.ea004cp-3f, + -0x1.eb86b4p-3f, -0x1.ed0d0ap-3f, -0x1.ee934cp-3f, -0x1.f0197cp-3f, -0x1.f19f98p-3f, -0x1.f325ap-3f, + -0x1.f4ab96p-3f, -0x1.f63178p-3f, -0x1.f7b748p-3f, -0x1.f93d04p-3f, -0x1.fac2acp-3f, -0x1.fc484p-3f, + -0x1.fdcdc2p-3f, -0x1.ff533p-3f, -0x1.006c44p-2f, -0x1.012ee8p-2f, -0x1.01f18p-2f, -0x1.02b41p-2f, + -0x1.037694p-2f, -0x1.04391p-2f, -0x1.04fb8p-2f, -0x1.05bde8p-2f, -0x1.068044p-2f, -0x1.074298p-2f, + -0x1.0804ep-2f, -0x1.08c71ep-2f, -0x1.098954p-2f, -0x1.0a4b7ep-2f, -0x1.0b0d9cp-2f, -0x1.0bcfb2p-2f, + -0x1.0c91bep-2f, -0x1.0d53bep-2f, -0x1.0e15b4p-2f, -0x1.0ed7ap-2f, -0x1.0f9982p-2f, -0x1.105b5ap-2f, + -0x1.111d26p-2f, -0x1.11dee8p-2f, -0x1.12a0ap-2f, -0x1.13624cp-2f, -0x1.1423eep-2f, -0x1.14e586p-2f, + -0x1.15a714p-2f, -0x1.166896p-2f, -0x1.172a0ep-2f, -0x1.17eb7ap-2f, -0x1.18acdcp-2f, -0x1.196e34p-2f, + -0x1.1a2f8p-2f, -0x1.1af0c2p-2f, -0x1.1bb1f8p-2f, -0x1.1c7324p-2f, -0x1.1d3444p-2f, -0x1.1df55ap-2f, + -0x1.1eb664p-2f, -0x1.1f7764p-2f, -0x1.203858p-2f, -0x1.20f942p-2f, -0x1.21ba2p-2f, -0x1.227af2p-2f, + -0x1.233bbap-2f, -0x1.23fc78p-2f, -0x1.24bd28p-2f, -0x1.257dcep-2f, -0x1.263e6ap-2f, -0x1.26fefap-2f, + -0x1.27bf7ep-2f, -0x1.287ff6p-2f, -0x1.294062p-2f, -0x1.2a00c4p-2f, -0x1.2ac11ap-2f, -0x1.2b8166p-2f, + -0x1.2c41a4p-2f, -0x1.2d01d8p-2f, -0x1.2dc2p-2f, -0x1.2e821cp-2f, -0x1.2f422ep-2f, -0x1.300232p-2f, + -0x1.30c22cp-2f, -0x1.31821ap-2f, -0x1.3241fcp-2f, -0x1.3301d2p-2f, -0x1.33c19cp-2f, -0x1.34815ap-2f, + -0x1.35410cp-2f, -0x1.3600b2p-2f, -0x1.36c04ep-2f, -0x1.377fdcp-2f, -0x1.383f5ep-2f, -0x1.38fed4p-2f, + -0x1.39be4p-2f, -0x1.3a7d9ep-2f, -0x1.3b3cfp-2f, -0x1.3bfc36p-2f, -0x1.3cbb7p-2f, -0x1.3d7a9ep-2f, + -0x1.3e39bep-2f, -0x1.3ef8d4p-2f, -0x1.3fb7dcp-2f, -0x1.4076dap-2f, -0x1.4135cap-2f, -0x1.41f4aep-2f, + -0x1.42b384p-2f, -0x1.43725p-2f, -0x1.44310ep-2f, -0x1.44efcp-2f, -0x1.45ae66p-2f, -0x1.466cfep-2f, + -0x1.472b8ap-2f, -0x1.47ea0ap-2f, -0x1.48a87ep-2f, -0x1.4966e4p-2f, -0x1.4a253ep-2f, -0x1.4ae38ap-2f, + -0x1.4ba1cap-2f, -0x1.4c5ffep-2f, -0x1.4d1e24p-2f, -0x1.4ddc3ep-2f, -0x1.4e9a4ap-2f, -0x1.4f584ap-2f, + -0x1.50163ep-2f, -0x1.50d424p-2f, -0x1.5191fcp-2f, -0x1.524fcap-2f, -0x1.530d88p-2f, -0x1.53cb3ap-2f, + -0x1.5488dep-2f, -0x1.554676p-2f, -0x1.560402p-2f, -0x1.56c17ep-2f, -0x1.577eeep-2f, -0x1.583c52p-2f, + -0x1.58f9a8p-2f, -0x1.59b6fp-2f, -0x1.5a742ap-2f, -0x1.5b3158p-2f, -0x1.5bee78p-2f, -0x1.5cab8cp-2f, + -0x1.5d6892p-2f, -0x1.5e258ap-2f, -0x1.5ee274p-2f, -0x1.5f9f5p-2f, -0x1.605c2p-2f, -0x1.6118e2p-2f, + -0x1.61d596p-2f, -0x1.62923cp-2f, -0x1.634ed6p-2f, -0x1.640b6p-2f, -0x1.64c7dep-2f, -0x1.65844ep-2f, + -0x1.6640bp-2f, -0x1.66fd04p-2f, -0x1.67b94ap-2f, -0x1.687582p-2f, -0x1.6931acp-2f, -0x1.69edcap-2f, + -0x1.6aa9d8p-2f, -0x1.6b65d8p-2f, -0x1.6c21ccp-2f, -0x1.6cddbp-2f, -0x1.6d9986p-2f, -0x1.6e554ep-2f, + -0x1.6f1108p-2f, -0x1.6fccb6p-2f, -0x1.708854p-2f, -0x1.7143e2p-2f, -0x1.71ff64p-2f, -0x1.72bad8p-2f, + -0x1.73763cp-2f, -0x1.743194p-2f, -0x1.74ecdcp-2f, -0x1.75a816p-2f, -0x1.76634p-2f, -0x1.771e5ep-2f, + -0x1.77d96cp-2f, -0x1.78946cp-2f, -0x1.794f5ep-2f, -0x1.7a0a42p-2f, -0x1.7ac516p-2f, -0x1.7b7fdcp-2f, + -0x1.7c3a94p-2f, -0x1.7cf53cp-2f, -0x1.7dafd6p-2f, -0x1.7e6a6p-2f, -0x1.7f24dep-2f, -0x1.7fdf4ap-2f, + -0x1.8099aap-2f, -0x1.8153fap-2f, -0x1.820e3cp-2f, -0x1.82c86ep-2f, -0x1.83829p-2f, -0x1.843ca6p-2f, + -0x1.84f6aap-2f, -0x1.85b0a2p-2f, -0x1.866a88p-2f, -0x1.872462p-2f, -0x1.87de2ap-2f, -0x1.8897e4p-2f, + -0x1.89519p-2f, -0x1.8a0b2cp-2f, -0x1.8ac4b8p-2f, -0x1.8b7e36p-2f, -0x1.8c37a4p-2f, -0x1.8cf104p-2f, + -0x1.8daa52p-2f, -0x1.8e6394p-2f, -0x1.8f1cc4p-2f, -0x1.8fd5e6p-2f, -0x1.908ef8p-2f, -0x1.9147fap-2f, + -0x1.9200eep-2f, -0x1.92b9d2p-2f, -0x1.9372a6p-2f, -0x1.942b6ap-2f, -0x1.94e42p-2f, -0x1.959cc6p-2f, + -0x1.96555cp-2f, -0x1.970de2p-2f, -0x1.97c658p-2f, -0x1.987ecp-2f, -0x1.993716p-2f, -0x1.99ef5ep-2f, + -0x1.9aa794p-2f, -0x1.9b5fbcp-2f, -0x1.9c17d4p-2f, -0x1.9ccfdcp-2f, -0x1.9d87d4p-2f, -0x1.9e3fbcp-2f, + -0x1.9ef794p-2f, -0x1.9faf5cp-2f, -0x1.a06714p-2f, -0x1.a11ebcp-2f, -0x1.a1d654p-2f, -0x1.a28ddcp-2f, + -0x1.a34554p-2f, -0x1.a3fcbcp-2f, -0x1.a4b412p-2f, -0x1.a56b5ap-2f, -0x1.a6229p-2f, -0x1.a6d9b6p-2f, + -0x1.a790cep-2f, -0x1.a847d4p-2f, -0x1.a8fec8p-2f, -0x1.a9b5aep-2f, -0x1.aa6c82p-2f, -0x1.ab2348p-2f, + -0x1.abd9fap-2f, -0x1.ac909ep-2f, -0x1.ad4732p-2f, -0x1.adfdb4p-2f, -0x1.aeb426p-2f, -0x1.af6a86p-2f, + -0x1.b020d6p-2f, -0x1.b0d716p-2f, -0x1.b18d46p-2f, -0x1.b24364p-2f, -0x1.b2f972p-2f, -0x1.b3af6ep-2f, + -0x1.b4655ap-2f, -0x1.b51b36p-2f, -0x1.b5d1p-2f, -0x1.b686bap-2f, -0x1.b73c62p-2f, -0x1.b7f1fap-2f, + -0x1.b8a782p-2f, -0x1.b95cf8p-2f, -0x1.ba125cp-2f, -0x1.bac7bp-2f, -0x1.bb7cf2p-2f, -0x1.bc3224p-2f, + -0x1.bce744p-2f, -0x1.bd9c54p-2f, -0x1.be5152p-2f, -0x1.bf063ep-2f, -0x1.bfbb1ap-2f, -0x1.c06fe4p-2f, + -0x1.c1249ep-2f, -0x1.c1d946p-2f, -0x1.c28ddcp-2f, -0x1.c3426p-2f, -0x1.c3f6d4p-2f, -0x1.c4ab36p-2f, + -0x1.c55f88p-2f, -0x1.c613c6p-2f, -0x1.c6c7f4p-2f, -0x1.c77c1p-2f, -0x1.c8301cp-2f, -0x1.c8e414p-2f, + -0x1.c997fcp-2f, -0x1.ca4bd2p-2f, -0x1.caff96p-2f, -0x1.cbb348p-2f, -0x1.cc66eap-2f, -0x1.cd1a78p-2f, + -0x1.cdcdf6p-2f, -0x1.ce8162p-2f, -0x1.cf34bap-2f, -0x1.cfe802p-2f, -0x1.d09b38p-2f, -0x1.d14e5cp-2f, + -0x1.d2016ep-2f, -0x1.d2b46ep-2f, -0x1.d3675cp-2f, -0x1.d41a38p-2f, -0x1.d4cd02p-2f, -0x1.d57fbap-2f, + -0x1.d6326p-2f, -0x1.d6e4f4p-2f, -0x1.d79776p-2f, -0x1.d849e6p-2f, -0x1.d8fc42p-2f, -0x1.d9ae8ep-2f, + -0x1.da60c6p-2f, -0x1.db12ecp-2f, -0x1.dbc5p-2f, -0x1.dc7702p-2f, -0x1.dd28f2p-2f, -0x1.dddacep-2f, + -0x1.de8c98p-2f, -0x1.df3e5p-2f, -0x1.dfeff6p-2f, -0x1.e0a18ap-2f, -0x1.e1530ap-2f, -0x1.e20478p-2f, + -0x1.e2b5d4p-2f, -0x1.e3671cp-2f, -0x1.e41852p-2f, -0x1.e4c976p-2f, -0x1.e57a86p-2f, -0x1.e62b84p-2f, + -0x1.e6dc7p-2f, -0x1.e78d48p-2f, -0x1.e83e0ep-2f, -0x1.e8eec2p-2f, -0x1.e99f62p-2f, -0x1.ea4ffp-2f, + -0x1.eb006ap-2f, -0x1.ebb0dp-2f, -0x1.ec6126p-2f, -0x1.ed1166p-2f, -0x1.edc196p-2f, -0x1.ee71bp-2f, + -0x1.ef21b8p-2f, -0x1.efd1aep-2f, -0x1.f0819p-2f, -0x1.f1316p-2f, -0x1.f1e11cp-2f, -0x1.f290c4p-2f, + -0x1.f3405ap-2f, -0x1.f3efdcp-2f, -0x1.f49f4ap-2f, -0x1.f54ea6p-2f, -0x1.f5fdeep-2f, -0x1.f6ad24p-2f, + -0x1.f75c44p-2f, -0x1.f80b54p-2f, -0x1.f8ba4ep-2f, -0x1.f96936p-2f, -0x1.fa1808p-2f, -0x1.fac6cap-2f, + -0x1.fb7576p-2f, -0x1.fc240ep-2f, -0x1.fcd294p-2f, -0x1.fd8106p-2f, -0x1.fe2f64p-2f, -0x1.feddbp-2f, + -0x1.ff8be6p-2f, -0x1.001d04p-1f, -0x1.00740cp-1f, -0x1.00cb0ap-1f, -0x1.0121fep-1f, -0x1.0178e8p-1f, + -0x1.01cfc8p-1f, -0x1.02269ep-1f, -0x1.027d6ap-1f, -0x1.02d42ep-1f, -0x1.032ae6p-1f, -0x1.038194p-1f, + -0x1.03d838p-1f, -0x1.042ed2p-1f, -0x1.048562p-1f, -0x1.04dbe8p-1f, -0x1.053264p-1f, -0x1.0588d6p-1f, + -0x1.05df3ep-1f, -0x1.06359cp-1f, -0x1.068bfp-1f, -0x1.06e23ap-1f, -0x1.07387ap-1f, -0x1.078eaep-1f, + -0x1.07e4dap-1f, -0x1.083afcp-1f, -0x1.089112p-1f, -0x1.08e71ep-1f, -0x1.093d22p-1f, -0x1.09931ap-1f, + -0x1.09e908p-1f, -0x1.0a3eeap-1f, -0x1.0a94c4p-1f, -0x1.0aea94p-1f, -0x1.0b4058p-1f, -0x1.0b9614p-1f, + -0x1.0bebc4p-1f, -0x1.0c416ap-1f, -0x1.0c9704p-1f, -0x1.0cec96p-1f, -0x1.0d421cp-1f, -0x1.0d979ap-1f, + -0x1.0ded0cp-1f, -0x1.0e4274p-1f, -0x1.0e97dp-1f, -0x1.0eed24p-1f, -0x1.0f426cp-1f, -0x1.0f97aap-1f, + -0x1.0fecdep-1f, -0x1.104206p-1f, -0x1.109724p-1f, -0x1.10ec38p-1f, -0x1.114142p-1f, -0x1.11964p-1f, + -0x1.11eb36p-1f, -0x1.12402p-1f, -0x1.1294fep-1f, -0x1.12e9d2p-1f, -0x1.133e9cp-1f, -0x1.13935cp-1f, + -0x1.13e812p-1f, -0x1.143cbcp-1f, -0x1.14915ap-1f, -0x1.14e5fp-1f, -0x1.153a7ap-1f, -0x1.158efap-1f, + -0x1.15e36ep-1f, -0x1.1637d8p-1f, -0x1.168c38p-1f, -0x1.16e08cp-1f, -0x1.1734d6p-1f, -0x1.178916p-1f, + -0x1.17dd4ap-1f, -0x1.183174p-1f, -0x1.188592p-1f, -0x1.18d9a6p-1f, -0x1.192daep-1f, -0x1.1981aep-1f, + -0x1.19d5ap-1f, -0x1.1a298ap-1f, -0x1.1a7d66p-1f, -0x1.1ad13ap-1f, -0x1.1b2502p-1f, -0x1.1b78bep-1f, + -0x1.1bcc7p-1f, -0x1.1c2018p-1f, -0x1.1c73b4p-1f, -0x1.1cc744p-1f, -0x1.1d1acap-1f, -0x1.1d6e46p-1f, + -0x1.1dc1b6p-1f, -0x1.1e151cp-1f, -0x1.1e6876p-1f, -0x1.1ebbc4p-1f, -0x1.1f0f08p-1f, -0x1.1f6242p-1f, + -0x1.1fb57p-1f, -0x1.200892p-1f, -0x1.205baap-1f, -0x1.20aeb6p-1f, -0x1.2101b8p-1f, -0x1.2154aep-1f, + -0x1.21a79ap-1f, -0x1.21fa7ap-1f, -0x1.224d4ep-1f, -0x1.22a018p-1f, -0x1.22f2d6p-1f, -0x1.23458ap-1f, + -0x1.239832p-1f, -0x1.23eacep-1f, -0x1.243d6p-1f, -0x1.248fe6p-1f, -0x1.24e26p-1f, -0x1.2534dp-1f, + -0x1.258734p-1f, -0x1.25d98ep-1f, -0x1.262bdcp-1f, -0x1.267e1ep-1f, -0x1.26d054p-1f, -0x1.27228p-1f, + -0x1.2774ap-1f, -0x1.27c6b6p-1f, -0x1.2818bep-1f, -0x1.286abcp-1f, -0x1.28bcbp-1f, -0x1.290e96p-1f, + -0x1.296072p-1f, -0x1.29b242p-1f, -0x1.2a0408p-1f, -0x1.2a55cp-1f, -0x1.2aa76ep-1f, -0x1.2af91p-1f, + -0x1.2b4aa8p-1f, -0x1.2b9c32p-1f, -0x1.2bedb2p-1f, -0x1.2c3f26p-1f, -0x1.2c908ep-1f, -0x1.2ce1ecp-1f, + -0x1.2d333ep-1f, -0x1.2d8482p-1f, -0x1.2dd5bcp-1f, -0x1.2e26ecp-1f, -0x1.2e780ep-1f, -0x1.2ec926p-1f, + -0x1.2f1a3p-1f, -0x1.2f6b3p-1f, -0x1.2fbc24p-1f, -0x1.300d0ep-1f, -0x1.305deap-1f, -0x1.30aebap-1f, + -0x1.30ff8p-1f, -0x1.31503ap-1f, -0x1.31a0e6p-1f, -0x1.31f188p-1f, -0x1.32421ep-1f, -0x1.3292aap-1f, + -0x1.32e328p-1f, -0x1.33339ap-1f, -0x1.3384p-1f, -0x1.33d45cp-1f, -0x1.3424aap-1f, -0x1.3474eep-1f, + -0x1.34c526p-1f, -0x1.35155p-1f, -0x1.35657p-1f, -0x1.35b584p-1f, -0x1.36058cp-1f, -0x1.365586p-1f, + -0x1.36a576p-1f, -0x1.36f55ap-1f, -0x1.374532p-1f, -0x1.3794fep-1f, -0x1.37e4bep-1f, -0x1.38347p-1f, + -0x1.388418p-1f, -0x1.38d3b4p-1f, -0x1.392344p-1f, -0x1.3972c6p-1f, -0x1.39c23ep-1f, -0x1.3a11aap-1f, + -0x1.3a6108p-1f, -0x1.3ab05cp-1f, -0x1.3affa2p-1f, -0x1.3b4edep-1f, -0x1.3b9e0cp-1f, -0x1.3bed2ep-1f, + -0x1.3c3c44p-1f, -0x1.3c8b4ep-1f, -0x1.3cda4cp-1f, -0x1.3d293ep-1f, -0x1.3d7824p-1f, -0x1.3dc6fcp-1f, + -0x1.3e15cap-1f, -0x1.3e648ap-1f, -0x1.3eb33ep-1f, -0x1.3f01e6p-1f, -0x1.3f5082p-1f, -0x1.3f9f12p-1f, + -0x1.3fed96p-1f, -0x1.403c0cp-1f, -0x1.408a76p-1f, -0x1.40d8d4p-1f, -0x1.412726p-1f, -0x1.41756cp-1f, + -0x1.41c3a4p-1f, -0x1.4211d2p-1f, -0x1.425ff2p-1f, -0x1.42ae06p-1f, -0x1.42fc0cp-1f, -0x1.434a08p-1f, + -0x1.4397f6p-1f, -0x1.43e5d8p-1f, -0x1.4433aep-1f, -0x1.448176p-1f, -0x1.44cf32p-1f, -0x1.451ce2p-1f, + -0x1.456a86p-1f, -0x1.45b81cp-1f, -0x1.4605a6p-1f, -0x1.465324p-1f, -0x1.46a096p-1f, -0x1.46edfap-1f, + -0x1.473b52p-1f, -0x1.47889ep-1f, -0x1.47d5dcp-1f, -0x1.48230ep-1f, -0x1.487034p-1f, -0x1.48bd4cp-1f, + -0x1.490a58p-1f, -0x1.495758p-1f, -0x1.49a44ap-1f, -0x1.49f13p-1f, -0x1.4a3e08p-1f, -0x1.4a8ad6p-1f, + -0x1.4ad796p-1f, -0x1.4b2448p-1f, -0x1.4b70eep-1f, -0x1.4bbd88p-1f, -0x1.4c0a14p-1f, -0x1.4c5694p-1f, + -0x1.4ca308p-1f, -0x1.4cef6ep-1f, -0x1.4d3bc6p-1f, -0x1.4d8814p-1f, -0x1.4dd454p-1f, -0x1.4e2086p-1f, + -0x1.4e6cacp-1f, -0x1.4eb8c4p-1f, -0x1.4f04dp-1f, -0x1.4f50dp-1f, -0x1.4f9cc2p-1f, -0x1.4fe8a8p-1f, + -0x1.50348p-1f, -0x1.50804cp-1f, -0x1.50cc0ap-1f, -0x1.5117bcp-1f, -0x1.51636p-1f, -0x1.51aef8p-1f, + -0x1.51fa82p-1f, -0x1.5246p-1f, -0x1.52917p-1f, -0x1.52dcd2p-1f, -0x1.53282ap-1f, -0x1.537372p-1f, + -0x1.53beaep-1f, -0x1.5409dep-1f, -0x1.5455p-1f, -0x1.54a014p-1f, -0x1.54eb1cp-1f, -0x1.553616p-1f, + -0x1.558104p-1f, -0x1.55cbe4p-1f, -0x1.5616b6p-1f, -0x1.56617cp-1f, -0x1.56ac36p-1f, -0x1.56f6ep-1f, + -0x1.57417ep-1f, -0x1.578c1p-1f, -0x1.57d694p-1f, -0x1.58210ap-1f, -0x1.586b72p-1f, -0x1.58b5cep-1f, + -0x1.59001ep-1f, -0x1.594a5ep-1f, -0x1.599492p-1f, -0x1.59debap-1f, -0x1.5a28d2p-1f, -0x1.5a72dep-1f, + -0x1.5abcdep-1f, -0x1.5b06cep-1f, -0x1.5b50b2p-1f, -0x1.5b9a88p-1f, -0x1.5be452p-1f, -0x1.5c2e0ep-1f, + -0x1.5c77bcp-1f, -0x1.5cc15cp-1f, -0x1.5d0afp-1f, -0x1.5d5476p-1f, -0x1.5d9deep-1f, -0x1.5de75ap-1f, + -0x1.5e30b6p-1f, -0x1.5e7a06p-1f, -0x1.5ec34ap-1f, -0x1.5f0c7ep-1f, -0x1.5f55a6p-1f, -0x1.5f9ecp-1f, + -0x1.5fe7ccp-1f, -0x1.6030cap-1f, -0x1.6079bcp-1f, -0x1.60c2ap-1f, -0x1.610b76p-1f, -0x1.61543ep-1f, + -0x1.619cf8p-1f, -0x1.61e5a6p-1f, -0x1.622e44p-1f, -0x1.6276d6p-1f, -0x1.62bf5ap-1f, -0x1.6307d2p-1f, + -0x1.63503ap-1f, -0x1.639896p-1f, -0x1.63e0e2p-1f, -0x1.642922p-1f, -0x1.647154p-1f, -0x1.64b978p-1f, + -0x1.65018ep-1f, -0x1.654998p-1f, -0x1.659192p-1f, -0x1.65d98p-1f, -0x1.66215ep-1f, -0x1.66693p-1f, + -0x1.66b0f4p-1f, -0x1.66f8aap-1f, -0x1.674052p-1f, -0x1.6787ecp-1f, -0x1.67cf78p-1f, -0x1.6816f6p-1f, + -0x1.685e68p-1f, -0x1.68a5cap-1f, -0x1.68ed1ep-1f, -0x1.693466p-1f, -0x1.697b9ep-1f, -0x1.69c2cap-1f, + -0x1.6a09e6p-1f, -0x1.6a50f6p-1f, -0x1.6a97f6p-1f, -0x1.6adeeap-1f, -0x1.6b25cep-1f, -0x1.6b6ca6p-1f, + -0x1.6bb37p-1f, -0x1.6bfa2ap-1f, -0x1.6c40d8p-1f, -0x1.6c8776p-1f, -0x1.6cce08p-1f, -0x1.6d148ap-1f, + -0x1.6d5afep-1f, -0x1.6da166p-1f, -0x1.6de7bep-1f, -0x1.6e2e08p-1f, -0x1.6e7446p-1f, -0x1.6eba74p-1f, + -0x1.6f0094p-1f, -0x1.6f46a6p-1f, -0x1.6f8caap-1f, -0x1.6fd2ap-1f, -0x1.701886p-1f, -0x1.705e6p-1f, + -0x1.70a42cp-1f, -0x1.70e9e8p-1f, -0x1.712f96p-1f, -0x1.717538p-1f, -0x1.71bacap-1f, -0x1.72004ep-1f, + -0x1.7245c2p-1f, -0x1.728b2ap-1f, -0x1.72d084p-1f, -0x1.7315cep-1f, -0x1.735b0ap-1f, -0x1.73a03ap-1f, + -0x1.73e558p-1f, -0x1.742a6ap-1f, -0x1.746f6ep-1f, -0x1.74b462p-1f, -0x1.74f948p-1f, -0x1.753e2p-1f, + -0x1.7582eap-1f, -0x1.75c7a6p-1f, -0x1.760c52p-1f, -0x1.7650f2p-1f, -0x1.769582p-1f, -0x1.76da02p-1f, + -0x1.771e76p-1f, -0x1.7762dap-1f, -0x1.77a73p-1f, -0x1.77eb78p-1f, -0x1.782fb2p-1f, -0x1.7873dcp-1f, + -0x1.78b7f8p-1f, -0x1.78fc06p-1f, -0x1.794006p-1f, -0x1.7983f6p-1f, -0x1.79c7d8p-1f, -0x1.7a0bacp-1f, + -0x1.7a4f7p-1f, -0x1.7a9326p-1f, -0x1.7ad6cep-1f, -0x1.7b1a68p-1f, -0x1.7b5df2p-1f, -0x1.7ba16ep-1f, + -0x1.7be4dcp-1f, -0x1.7c283ap-1f, -0x1.7c6b8ap-1f, -0x1.7caeccp-1f, -0x1.7cf1fep-1f, -0x1.7d3522p-1f, + -0x1.7d7836p-1f, -0x1.7dbb3ep-1f, -0x1.7dfe36p-1f, -0x1.7e411ep-1f, -0x1.7e83f8p-1f, -0x1.7ec6c4p-1f, + -0x1.7f098p-1f, -0x1.7f4c2ep-1f, -0x1.7f8ecep-1f, -0x1.7fd15ep-1f, -0x1.8013ep-1f, -0x1.805654p-1f, + -0x1.8098b8p-1f, -0x1.80db0cp-1f, -0x1.811d52p-1f, -0x1.815f8ap-1f, -0x1.81a1b4p-1f, -0x1.81e3cep-1f, + -0x1.8225d8p-1f, -0x1.8267d4p-1f, -0x1.82a9c2p-1f, -0x1.82ebap-1f, -0x1.832d6ep-1f, -0x1.836f3p-1f, + -0x1.83b0ep-1f, -0x1.83f284p-1f, -0x1.843416p-1f, -0x1.84759cp-1f, -0x1.84b712p-1f, -0x1.84f878p-1f, + -0x1.8539dp-1f, -0x1.857b18p-1f, -0x1.85bc52p-1f, -0x1.85fd7cp-1f, -0x1.863e98p-1f, -0x1.867fa4p-1f, + -0x1.86c0a2p-1f, -0x1.87019p-1f, -0x1.87427p-1f, -0x1.87834p-1f, -0x1.87c4p-1f, -0x1.8804b4p-1f, + -0x1.884556p-1f, -0x1.8885eap-1f, -0x1.88c66ep-1f, -0x1.8906e4p-1f, -0x1.89474ap-1f, -0x1.8987a2p-1f, + -0x1.89c7eap-1f, -0x1.8a0822p-1f, -0x1.8a484cp-1f, -0x1.8a8866p-1f, -0x1.8ac872p-1f, -0x1.8b086ep-1f, + -0x1.8b485ap-1f, -0x1.8b8838p-1f, -0x1.8bc806p-1f, -0x1.8c07c6p-1f, -0x1.8c4776p-1f, -0x1.8c8716p-1f, + -0x1.8cc6a8p-1f, -0x1.8d062ap-1f, -0x1.8d459cp-1f, -0x1.8d85p-1f, -0x1.8dc454p-1f, -0x1.8e0398p-1f, + -0x1.8e42cep-1f, -0x1.8e81f4p-1f, -0x1.8ec10ap-1f, -0x1.8f001p-1f, -0x1.8f3f08p-1f, -0x1.8f7df2p-1f, + -0x1.8fbccap-1f, -0x1.8ffb94p-1f, -0x1.903a4ep-1f, -0x1.9078f8p-1f, -0x1.90b794p-1f, -0x1.90f62p-1f, + -0x1.91349cp-1f, -0x1.91730ap-1f, -0x1.91b166p-1f, -0x1.91efb4p-1f, -0x1.922df4p-1f, -0x1.926c22p-1f, + -0x1.92aa42p-1f, -0x1.92e852p-1f, -0x1.932652p-1f, -0x1.936444p-1f, -0x1.93a224p-1f, -0x1.93dff6p-1f, + -0x1.941db8p-1f, -0x1.945b6cp-1f, -0x1.94990ep-1f, -0x1.94d6a2p-1f, -0x1.951426p-1f, -0x1.95519ap-1f, + -0x1.958efep-1f, -0x1.95cc54p-1f, -0x1.960998p-1f, -0x1.9646cep-1f, -0x1.9683f4p-1f, -0x1.96c10ap-1f, + -0x1.96fe12p-1f, -0x1.973b08p-1f, -0x1.9777fp-1f, -0x1.97b4c6p-1f, -0x1.97f18ep-1f, -0x1.982e46p-1f, + -0x1.986afp-1f, -0x1.98a788p-1f, -0x1.98e41p-1f, -0x1.99208ap-1f, -0x1.995cf2p-1f, -0x1.99994cp-1f, + -0x1.99d596p-1f, -0x1.9a11dp-1f, -0x1.9a4dfap-1f, -0x1.9a8a14p-1f, -0x1.9ac62p-1f, -0x1.9b021ap-1f, + -0x1.9b3e04p-1f, -0x1.9b79ep-1f, -0x1.9bb5aap-1f, -0x1.9bf166p-1f, -0x1.9c2d12p-1f, -0x1.9c68acp-1f, + -0x1.9ca438p-1f, -0x1.9cdfb4p-1f, -0x1.9d1b2p-1f, -0x1.9d567cp-1f, -0x1.9d91c8p-1f, -0x1.9dcd02p-1f, + -0x1.9e082ep-1f, -0x1.9e434ap-1f, -0x1.9e7e56p-1f, -0x1.9eb952p-1f, -0x1.9ef43ep-1f, -0x1.9f2f1ap-1f, + -0x1.9f69e8p-1f, -0x1.9fa4a4p-1f, -0x1.9fdf5p-1f, -0x1.a019ecp-1f, -0x1.a05476p-1f, -0x1.a08ef2p-1f, + -0x1.a0c95ep-1f, -0x1.a103bap-1f, -0x1.a13e06p-1f, -0x1.a17842p-1f, -0x1.a1b26ep-1f, -0x1.a1ec88p-1f, + -0x1.a22694p-1f, -0x1.a2608ep-1f, -0x1.a29a7ap-1f, -0x1.a2d454p-1f, -0x1.a30e2p-1f, -0x1.a347dap-1f, + -0x1.a38184p-1f, -0x1.a3bb1ep-1f, -0x1.a3f4a8p-1f, -0x1.a42e22p-1f, -0x1.a4678cp-1f, -0x1.a4a0e6p-1f, + -0x1.a4da3p-1f, -0x1.a51368p-1f, -0x1.a54c92p-1f, -0x1.a585aap-1f, -0x1.a5beb2p-1f, -0x1.a5f7aap-1f, + -0x1.a63092p-1f, -0x1.a6696ap-1f, -0x1.a6a23p-1f, -0x1.a6dae8p-1f, -0x1.a7138ep-1f, -0x1.a74c24p-1f, + -0x1.a784aap-1f, -0x1.a7bd2p-1f, -0x1.a7f586p-1f, -0x1.a82ddap-1f, -0x1.a8661ep-1f, -0x1.a89e54p-1f, + -0x1.a8d676p-1f, -0x1.a90e8ap-1f, -0x1.a9468ep-1f, -0x1.a97e8p-1f, -0x1.a9b662p-1f, -0x1.a9ee34p-1f, + -0x1.aa25f6p-1f, -0x1.aa5da8p-1f, -0x1.aa9548p-1f, -0x1.aaccd8p-1f, -0x1.ab0458p-1f, -0x1.ab3bc6p-1f, + -0x1.ab7326p-1f, -0x1.abaa74p-1f, -0x1.abe1b2p-1f, -0x1.ac18ep-1f, -0x1.ac4ffcp-1f, -0x1.ac8708p-1f, + -0x1.acbe04p-1f, -0x1.acf4fp-1f, -0x1.ad2bcap-1f, -0x1.ad6294p-1f, -0x1.ad994ep-1f, -0x1.adcff6p-1f, + -0x1.ae069p-1f, -0x1.ae3d18p-1f, -0x1.ae738ep-1f, -0x1.aea9f6p-1f, -0x1.aee04cp-1f, -0x1.af169p-1f, + -0x1.af4cc6p-1f, -0x1.af82eap-1f, -0x1.afb8fep-1f, -0x1.afefp-1f, -0x1.b024f2p-1f, -0x1.b05ad4p-1f, + -0x1.b090a6p-1f, -0x1.b0c666p-1f, -0x1.b0fc16p-1f, -0x1.b131b4p-1f, -0x1.b16742p-1f, -0x1.b19ccp-1f, + -0x1.b1d22cp-1f, -0x1.b2078ap-1f, -0x1.b23cd4p-1f, -0x1.b2721p-1f, -0x1.b2a738p-1f, -0x1.b2dc52p-1f, + -0x1.b3115ap-1f, -0x1.b34652p-1f, -0x1.b37b38p-1f, -0x1.b3b00ep-1f, -0x1.b3e4d4p-1f, -0x1.b41988p-1f, + -0x1.b44e2cp-1f, -0x1.b482bep-1f, -0x1.b4b74p-1f, -0x1.b4ebb2p-1f, -0x1.b52012p-1f, -0x1.b55462p-1f, + -0x1.b588ap-1f, -0x1.b5bccep-1f, -0x1.b5f0eap-1f, -0x1.b624f6p-1f, -0x1.b658f2p-1f, -0x1.b68cdcp-1f, + -0x1.b6c0b4p-1f, -0x1.b6f47cp-1f, -0x1.b72834p-1f, -0x1.b75bdap-1f, -0x1.b78f7p-1f, -0x1.b7c2f4p-1f, + -0x1.b7f668p-1f, -0x1.b829ccp-1f, -0x1.b85d1cp-1f, -0x1.b8905ep-1f, -0x1.b8c38ep-1f, -0x1.b8f6acp-1f, + -0x1.b929bap-1f, -0x1.b95cb6p-1f, -0x1.b98fa2p-1f, -0x1.b9c27cp-1f, -0x1.b9f546p-1f, -0x1.ba27fep-1f, + -0x1.ba5aa6p-1f, -0x1.ba8d3cp-1f, -0x1.babfc2p-1f, -0x1.baf236p-1f, -0x1.bb249ap-1f, -0x1.bb56ecp-1f, + -0x1.bb892ep-1f, -0x1.bbbb5ep-1f, -0x1.bbed7cp-1f, -0x1.bc1f8ap-1f, -0x1.bc5186p-1f, -0x1.bc8372p-1f, + -0x1.bcb54cp-1f, -0x1.bce716p-1f, -0x1.bd18cep-1f, -0x1.bd4a74p-1f, -0x1.bd7c0ap-1f, -0x1.bdad9p-1f, + -0x1.bddf02p-1f, -0x1.be1066p-1f, -0x1.be41b6p-1f, -0x1.be72f6p-1f, -0x1.bea424p-1f, -0x1.bed542p-1f, + -0x1.bf064ep-1f, -0x1.bf374ap-1f, -0x1.bf6832p-1f, -0x1.bf990cp-1f, -0x1.bfc9d2p-1f, -0x1.bffa88p-1f, + -0x1.c02b2cp-1f, -0x1.c05bcp-1f, -0x1.c08c42p-1f, -0x1.c0bcb4p-1f, -0x1.c0ed12p-1f, -0x1.c11d6p-1f, + -0x1.c14d9ep-1f, -0x1.c17dcap-1f, -0x1.c1ade4p-1f, -0x1.c1ddecp-1f, -0x1.c20de4p-1f, -0x1.c23dcap-1f, + -0x1.c26dap-1f, -0x1.c29d62p-1f, -0x1.c2cd14p-1f, -0x1.c2fcb6p-1f, -0x1.c32c44p-1f, -0x1.c35bc2p-1f, + -0x1.c38b3p-1f, -0x1.c3ba8ap-1f, -0x1.c3e9d4p-1f, -0x1.c4190cp-1f, -0x1.c44834p-1f, -0x1.c47748p-1f, + -0x1.c4a64cp-1f, -0x1.c4d54p-1f, -0x1.c5042p-1f, -0x1.c532fp-1f, -0x1.c561aep-1f, -0x1.c5905ap-1f, + -0x1.c5bef6p-1f, -0x1.c5ed8p-1f, -0x1.c61bf8p-1f, -0x1.c64a5ep-1f, -0x1.c678b4p-1f, -0x1.c6a6f6p-1f, + -0x1.c6d52ap-1f, -0x1.c7034ap-1f, -0x1.c73158p-1f, -0x1.c75f56p-1f, -0x1.c78d42p-1f, -0x1.c7bb1cp-1f, + -0x1.c7e8e6p-1f, -0x1.c8169cp-1f, -0x1.c84442p-1f, -0x1.c871d6p-1f, -0x1.c89f58p-1f, -0x1.c8cccap-1f, + -0x1.c8fa28p-1f, -0x1.c92776p-1f, -0x1.c954b2p-1f, -0x1.c981dcp-1f, -0x1.c9aef6p-1f, -0x1.c9dbfcp-1f, + -0x1.ca08f2p-1f, -0x1.ca35d6p-1f, -0x1.ca62a8p-1f, -0x1.ca8f68p-1f, -0x1.cabc16p-1f, -0x1.cae8b4p-1f, + -0x1.cb154p-1f, -0x1.cb41b8p-1f, -0x1.cb6e2p-1f, -0x1.cb9a76p-1f, -0x1.cbc6bcp-1f, -0x1.cbf2eep-1f, + -0x1.cc1f1p-1f, -0x1.cc4b1ep-1f, -0x1.cc771cp-1f, -0x1.cca308p-1f, -0x1.cccee2p-1f, -0x1.ccfaaap-1f, + -0x1.cd266p-1f, -0x1.cd5206p-1f, -0x1.cd7d98p-1f, -0x1.cda91ap-1f, -0x1.cdd48ap-1f, -0x1.cdffe6p-1f, + -0x1.ce2b32p-1f, -0x1.ce566cp-1f, -0x1.ce8194p-1f, -0x1.ceacaap-1f, -0x1.ced7bp-1f, -0x1.cf02a2p-1f, + -0x1.cf2d82p-1f, -0x1.cf5852p-1f, -0x1.cf830ep-1f, -0x1.cfadbap-1f, -0x1.cfd852p-1f, -0x1.d002dap-1f, + -0x1.d02d5p-1f, -0x1.d057b4p-1f, -0x1.d08206p-1f, -0x1.d0ac46p-1f, -0x1.d0d672p-1f, -0x1.d1008ep-1f, + -0x1.d12a98p-1f, -0x1.d15492p-1f, -0x1.d17e78p-1f, -0x1.d1a84cp-1f, -0x1.d1d20ep-1f, -0x1.d1fbbep-1f, + -0x1.d2255cp-1f, -0x1.d24ee8p-1f, -0x1.d27864p-1f, -0x1.d2a1ccp-1f, -0x1.d2cb22p-1f, -0x1.d2f466p-1f, + -0x1.d31d98p-1f, -0x1.d346bap-1f, -0x1.d36fc8p-1f, -0x1.d398c4p-1f, -0x1.d3c1aep-1f, -0x1.d3ea86p-1f, + -0x1.d4134ep-1f, -0x1.d43c02p-1f, -0x1.d464a4p-1f, -0x1.d48d34p-1f, -0x1.d4b5b2p-1f, -0x1.d4de1ep-1f, + -0x1.d50678p-1f, -0x1.d52ecp-1f, -0x1.d556f6p-1f, -0x1.d57f18p-1f, -0x1.d5a72ap-1f, -0x1.d5cf2ap-1f, + -0x1.d5f718p-1f, -0x1.d61ef2p-1f, -0x1.d646bcp-1f, -0x1.d66e72p-1f, -0x1.d69618p-1f, -0x1.d6bdaap-1f, + -0x1.d6e52ap-1f, -0x1.d70c98p-1f, -0x1.d733f6p-1f, -0x1.d75b4p-1f, -0x1.d78276p-1f, -0x1.d7a99cp-1f, + -0x1.d7d0bp-1f, -0x1.d7f7b2p-1f, -0x1.d81eap-1f, -0x1.d8457ep-1f, -0x1.d86c48p-1f, -0x1.d893p-1f, + -0x1.d8b9a8p-1f, -0x1.d8e03cp-1f, -0x1.d906bcp-1f, -0x1.d92d2cp-1f, -0x1.d9538ap-1f, -0x1.d979d4p-1f, + -0x1.d9a00ep-1f, -0x1.d9c634p-1f, -0x1.d9ec48p-1f, -0x1.da124ap-1f, -0x1.da383ap-1f, -0x1.da5e18p-1f, + -0x1.da83e4p-1f, -0x1.daa99cp-1f, -0x1.dacf42p-1f, -0x1.daf4d8p-1f, -0x1.db1a5ap-1f, -0x1.db3fc8p-1f, + -0x1.db6526p-1f, -0x1.db8a72p-1f, -0x1.dbafaap-1f, -0x1.dbd4dp-1f, -0x1.dbf9e4p-1f, -0x1.dc1ee6p-1f, + -0x1.dc43d6p-1f, -0x1.dc68b2p-1f, -0x1.dc8d7cp-1f, -0x1.dcb234p-1f, -0x1.dcd6dap-1f, -0x1.dcfb6ep-1f, + -0x1.dd1ffp-1f, -0x1.dd445ep-1f, -0x1.dd68bap-1f, -0x1.dd8d04p-1f, -0x1.ddb13cp-1f, -0x1.ddd56p-1f, + -0x1.ddf974p-1f, -0x1.de1d74p-1f, -0x1.de416p-1f, -0x1.de653cp-1f, -0x1.de8906p-1f, -0x1.deacbcp-1f, + -0x1.ded06p-1f, -0x1.def3fp-1f, -0x1.df177p-1f, -0x1.df3adcp-1f, -0x1.df5e36p-1f, -0x1.df817ep-1f, + -0x1.dfa4b4p-1f, -0x1.dfc7d6p-1f, -0x1.dfeae6p-1f, -0x1.e00de4p-1f, -0x1.e030cep-1f, -0x1.e053a8p-1f, + -0x1.e0766ep-1f, -0x1.e09922p-1f, -0x1.e0bbc2p-1f, -0x1.e0de5p-1f, -0x1.e100ccp-1f, -0x1.e12336p-1f, + -0x1.e1458cp-1f, -0x1.e167d2p-1f, -0x1.e18a02p-1f, -0x1.e1ac22p-1f, -0x1.e1ce2ep-1f, -0x1.e1f028p-1f, + -0x1.e2121p-1f, -0x1.e233e6p-1f, -0x1.e255a8p-1f, -0x1.e27758p-1f, -0x1.e298f4p-1f, -0x1.e2ba7ep-1f, + -0x1.e2dbf6p-1f, -0x1.e2fd5cp-1f, -0x1.e31eaep-1f, -0x1.e33feep-1f, -0x1.e3611cp-1f, -0x1.e38236p-1f, + -0x1.e3a33ep-1f, -0x1.e3c434p-1f, -0x1.e3e518p-1f, -0x1.e405e8p-1f, -0x1.e426a4p-1f, -0x1.e4475p-1f, + -0x1.e467e8p-1f, -0x1.e4886ep-1f, -0x1.e4a8ep-1f, -0x1.e4c94p-1f, -0x1.e4e98ep-1f, -0x1.e509c8p-1f, + -0x1.e529fp-1f, -0x1.e54a06p-1f, -0x1.e56a08p-1f, -0x1.e589f8p-1f, -0x1.e5a9d6p-1f, -0x1.e5c9ap-1f, + -0x1.e5e958p-1f, -0x1.e608fcp-1f, -0x1.e6288ep-1f, -0x1.e6480ep-1f, -0x1.e6677cp-1f, -0x1.e686d6p-1f, + -0x1.e6a61cp-1f, -0x1.e6c55p-1f, -0x1.e6e472p-1f, -0x1.e70382p-1f, -0x1.e7227ep-1f, -0x1.e74168p-1f, + -0x1.e7603ep-1f, -0x1.e77f02p-1f, -0x1.e79db2p-1f, -0x1.e7bc5p-1f, -0x1.e7dadcp-1f, -0x1.e7f954p-1f, + -0x1.e817bap-1f, -0x1.e8360ep-1f, -0x1.e8544ep-1f, -0x1.e8727cp-1f, -0x1.e89096p-1f, -0x1.e8ae9ep-1f, + -0x1.e8cc92p-1f, -0x1.e8ea74p-1f, -0x1.e90844p-1f, -0x1.e926p-1f, -0x1.e943aap-1f, -0x1.e9614p-1f, + -0x1.e97ec4p-1f, -0x1.e99c34p-1f, -0x1.e9b992p-1f, -0x1.e9d6dep-1f, -0x1.e9f416p-1f, -0x1.ea113ap-1f, + -0x1.ea2e4ep-1f, -0x1.ea4b4cp-1f, -0x1.ea683ap-1f, -0x1.ea8512p-1f, -0x1.eaa1dap-1f, -0x1.eabe8ep-1f, + -0x1.eadb2ep-1f, -0x1.eaf7bcp-1f, -0x1.eb1438p-1f, -0x1.eb30ap-1f, -0x1.eb4cf6p-1f, -0x1.eb6938p-1f, + -0x1.eb8566p-1f, -0x1.eba184p-1f, -0x1.ebbd8cp-1f, -0x1.ebd984p-1f, -0x1.ebf566p-1f, -0x1.ec1138p-1f, + -0x1.ec2cf4p-1f, -0x1.ec48ap-1f, -0x1.ec6436p-1f, -0x1.ec7fbcp-1f, -0x1.ec9b2ep-1f, -0x1.ecb68cp-1f, + -0x1.ecd1d8p-1f, -0x1.eced1p-1f, -0x1.ed0836p-1f, -0x1.ed2348p-1f, -0x1.ed3e48p-1f, -0x1.ed5934p-1f, + -0x1.ed740ep-1f, -0x1.ed8ed6p-1f, -0x1.eda988p-1f, -0x1.edc42ap-1f, -0x1.eddeb6p-1f, -0x1.edf932p-1f, + -0x1.ee1398p-1f, -0x1.ee2decp-1f, -0x1.ee482ep-1f, -0x1.ee625cp-1f, -0x1.ee7c78p-1f, -0x1.ee968p-1f, + -0x1.eeb074p-1f, -0x1.eeca56p-1f, -0x1.eee426p-1f, -0x1.eefde2p-1f, -0x1.ef178ap-1f, -0x1.ef312p-1f, + -0x1.ef4aa2p-1f, -0x1.ef6412p-1f, -0x1.ef7d6ep-1f, -0x1.ef96b8p-1f, -0x1.efafeep-1f, -0x1.efc91p-1f, + -0x1.efe22p-1f, -0x1.effb1ep-1f, -0x1.f01408p-1f, -0x1.f02cdep-1f, -0x1.f045a2p-1f, -0x1.f05e52p-1f, + -0x1.f076eep-1f, -0x1.f08f78p-1f, -0x1.f0a7fp-1f, -0x1.f0c054p-1f, -0x1.f0d8a4p-1f, -0x1.f0f0e2p-1f, + -0x1.f1090cp-1f, -0x1.f12122p-1f, -0x1.f13926p-1f, -0x1.f15118p-1f, -0x1.f168f6p-1f, -0x1.f180cp-1f, + -0x1.f19876p-1f, -0x1.f1b01cp-1f, -0x1.f1c7acp-1f, -0x1.f1df2ap-1f, -0x1.f1f694p-1f, -0x1.f20decp-1f, + -0x1.f2253p-1f, -0x1.f23c6p-1f, -0x1.f2537ep-1f, -0x1.f26a88p-1f, -0x1.f2818p-1f, -0x1.f29864p-1f, + -0x1.f2af34p-1f, -0x1.f2c5f2p-1f, -0x1.f2dc9cp-1f, -0x1.f2f334p-1f, -0x1.f309b8p-1f, -0x1.f32028p-1f, + -0x1.f33686p-1f, -0x1.f34cdp-1f, -0x1.f36306p-1f, -0x1.f3792ap-1f, -0x1.f38f3ap-1f, -0x1.f3a538p-1f, + -0x1.f3bb22p-1f, -0x1.f3d0f8p-1f, -0x1.f3e6bcp-1f, -0x1.f3fc6cp-1f, -0x1.f41208p-1f, -0x1.f42792p-1f, + -0x1.f43d08p-1f, -0x1.f4526cp-1f, -0x1.f467bap-1f, -0x1.f47cf8p-1f, -0x1.f4922p-1f, -0x1.f4a736p-1f, + -0x1.f4bc38p-1f, -0x1.f4d128p-1f, -0x1.f4e604p-1f, -0x1.f4faccp-1f, -0x1.f50f82p-1f, -0x1.f52424p-1f, + -0x1.f538b2p-1f, -0x1.f54d2ep-1f, -0x1.f56196p-1f, -0x1.f575eap-1f, -0x1.f58a2cp-1f, -0x1.f59e5ap-1f, + -0x1.f5b274p-1f, -0x1.f5c67ap-1f, -0x1.f5da6ep-1f, -0x1.f5ee5p-1f, -0x1.f6021cp-1f, -0x1.f615d6p-1f, + -0x1.f6297cp-1f, -0x1.f63d1p-1f, -0x1.f6509p-1f, -0x1.f663fcp-1f, -0x1.f67756p-1f, -0x1.f68a9cp-1f, + -0x1.f69dcep-1f, -0x1.f6b0ecp-1f, -0x1.f6c3f8p-1f, -0x1.f6d6fp-1f, -0x1.f6e9d4p-1f, -0x1.f6fca6p-1f, + -0x1.f70f64p-1f, -0x1.f7220ep-1f, -0x1.f734a6p-1f, -0x1.f7472ap-1f, -0x1.f7599ap-1f, -0x1.f76bf8p-1f, + -0x1.f77e4p-1f, -0x1.f79076p-1f, -0x1.f7a29ap-1f, -0x1.f7b4aap-1f, -0x1.f7c6a6p-1f, -0x1.f7d88ep-1f, + -0x1.f7ea62p-1f, -0x1.f7fc24p-1f, -0x1.f80dd2p-1f, -0x1.f81f6ep-1f, -0x1.f830f4p-1f, -0x1.f84268p-1f, + -0x1.f853cap-1f, -0x1.f86516p-1f, -0x1.f8765p-1f, -0x1.f88776p-1f, -0x1.f89888p-1f, -0x1.f8a988p-1f, + -0x1.f8ba74p-1f, -0x1.f8cb4cp-1f, -0x1.f8dc1p-1f, -0x1.f8ecc2p-1f, -0x1.f8fd6p-1f, -0x1.f90deap-1f, + -0x1.f91e62p-1f, -0x1.f92ec4p-1f, -0x1.f93f14p-1f, -0x1.f94f52p-1f, -0x1.f95f7ap-1f, -0x1.f96f9p-1f, + -0x1.f97f92p-1f, -0x1.f98f8p-1f, -0x1.f99f5cp-1f, -0x1.f9af24p-1f, -0x1.f9bed8p-1f, -0x1.f9ce78p-1f, + -0x1.f9de06p-1f, -0x1.f9ed8p-1f, -0x1.f9fce6p-1f, -0x1.fa0c38p-1f, -0x1.fa1b78p-1f, -0x1.fa2aa2p-1f, + -0x1.fa39bap-1f, -0x1.fa48cp-1f, -0x1.fa57bp-1f, -0x1.fa668ep-1f, -0x1.fa7558p-1f, -0x1.fa840ep-1f, + -0x1.fa92b2p-1f, -0x1.faa14p-1f, -0x1.faafbcp-1f, -0x1.fabe26p-1f, -0x1.facc7ap-1f, -0x1.fadabcp-1f, + -0x1.fae8e8p-1f, -0x1.faf704p-1f, -0x1.fb050ap-1f, -0x1.fb12fcp-1f, -0x1.fb20dcp-1f, -0x1.fb2ea8p-1f, + -0x1.fb3c6p-1f, -0x1.fb4a06p-1f, -0x1.fb5798p-1f, -0x1.fb6514p-1f, -0x1.fb728p-1f, -0x1.fb7fd6p-1f, + -0x1.fb8d18p-1f, -0x1.fb9a48p-1f, -0x1.fba764p-1f, -0x1.fbb46cp-1f, -0x1.fbc162p-1f, -0x1.fbce42p-1f, + -0x1.fbdb1p-1f, -0x1.fbe7cap-1f, -0x1.fbf47p-1f, -0x1.fc0104p-1f, -0x1.fc0d84p-1f, -0x1.fc19eep-1f, + -0x1.fc2648p-1f, -0x1.fc328cp-1f, -0x1.fc3ebcp-1f, -0x1.fc4adap-1f, -0x1.fc56e4p-1f, -0x1.fc62dap-1f, + -0x1.fc6ebcp-1f, -0x1.fc7a8cp-1f, -0x1.fc8646p-1f, -0x1.fc91eep-1f, -0x1.fc9d82p-1f, -0x1.fca904p-1f, + -0x1.fcb47p-1f, -0x1.fcbfcap-1f, -0x1.fccb1p-1f, -0x1.fcd642p-1f, -0x1.fce16p-1f, -0x1.fcec6ap-1f, + -0x1.fcf762p-1f, -0x1.fd0246p-1f, -0x1.fd0d16p-1f, -0x1.fd17d2p-1f, -0x1.fd227ap-1f, -0x1.fd2d1p-1f, + -0x1.fd3792p-1f, -0x1.fd42p-1f, -0x1.fd4c5ap-1f, -0x1.fd56ap-1f, -0x1.fd60d2p-1f, -0x1.fd6af2p-1f, + -0x1.fd74fep-1f, -0x1.fd7ef6p-1f, -0x1.fd88dap-1f, -0x1.fd92aap-1f, -0x1.fd9c68p-1f, -0x1.fda612p-1f, + -0x1.fdafa8p-1f, -0x1.fdb92ap-1f, -0x1.fdc298p-1f, -0x1.fdcbf2p-1f, -0x1.fdd53ap-1f, -0x1.fdde6ep-1f, + -0x1.fde78ep-1f, -0x1.fdf09ap-1f, -0x1.fdf992p-1f, -0x1.fe0278p-1f, -0x1.fe0b48p-1f, -0x1.fe1406p-1f, + -0x1.fe1cbp-1f, -0x1.fe2546p-1f, -0x1.fe2dc8p-1f, -0x1.fe3638p-1f, -0x1.fe3e92p-1f, -0x1.fe46dap-1f, + -0x1.fe4f0ep-1f, -0x1.fe572ep-1f, -0x1.fe5f3ap-1f, -0x1.fe6734p-1f, -0x1.fe6f18p-1f, -0x1.fe76eap-1f, + -0x1.fe7ea8p-1f, -0x1.fe8652p-1f, -0x1.fe8de8p-1f, -0x1.fe956cp-1f, -0x1.fe9cdap-1f, -0x1.fea436p-1f, + -0x1.feab7ep-1f, -0x1.feb2b2p-1f, -0x1.feb9d2p-1f, -0x1.fec0dep-1f, -0x1.fec7d8p-1f, -0x1.fecebep-1f, + -0x1.fed58ep-1f, -0x1.fedc4cp-1f, -0x1.fee2f6p-1f, -0x1.fee98ep-1f, -0x1.fef01p-1f, -0x1.fef68p-1f, + -0x1.fefcdap-1f, -0x1.ff0322p-1f, -0x1.ff0956p-1f, -0x1.ff0f76p-1f, -0x1.ff1584p-1f, -0x1.ff1b7cp-1f, + -0x1.ff2162p-1f, -0x1.ff2732p-1f, -0x1.ff2cfp-1f, -0x1.ff329ap-1f, -0x1.ff383p-1f, -0x1.ff3db4p-1f, + -0x1.ff4322p-1f, -0x1.ff487ep-1f, -0x1.ff4dc6p-1f, -0x1.ff52fap-1f, -0x1.ff581ap-1f, -0x1.ff5d26p-1f, + -0x1.ff621ep-1f, -0x1.ff6704p-1f, -0x1.ff6bd4p-1f, -0x1.ff7092p-1f, -0x1.ff753cp-1f, -0x1.ff79d2p-1f, + -0x1.ff7e54p-1f, -0x1.ff82c2p-1f, -0x1.ff871ep-1f, -0x1.ff8b64p-1f, -0x1.ff8f98p-1f, -0x1.ff93b8p-1f, + -0x1.ff97c4p-1f, -0x1.ff9bbcp-1f, -0x1.ff9fa2p-1f, -0x1.ffa372p-1f, -0x1.ffa72ep-1f, -0x1.ffaad8p-1f, + -0x1.ffae6ep-1f, -0x1.ffb1fp-1f, -0x1.ffb55ep-1f, -0x1.ffb8b8p-1f, -0x1.ffbcp-1f, -0x1.ffbf32p-1f, + -0x1.ffc252p-1f, -0x1.ffc55ep-1f, -0x1.ffc856p-1f, -0x1.ffcb3ap-1f, -0x1.ffce0ap-1f, -0x1.ffd0c6p-1f, + -0x1.ffd37p-1f, -0x1.ffd604p-1f, -0x1.ffd886p-1f, -0x1.ffdaf4p-1f, -0x1.ffdd4ep-1f, -0x1.ffdf94p-1f, + -0x1.ffe1c6p-1f, -0x1.ffe3e6p-1f, -0x1.ffe5fp-1f, -0x1.ffe7e8p-1f, -0x1.ffe9ccp-1f, -0x1.ffeb9cp-1f, + -0x1.ffed58p-1f, -0x1.ffefp-1f, -0x1.fff094p-1f, -0x1.fff216p-1f, -0x1.fff382p-1f, -0x1.fff4dcp-1f, + -0x1.fff622p-1f, -0x1.fff754p-1f, -0x1.fff872p-1f, -0x1.fff97cp-1f, -0x1.fffa72p-1f, -0x1.fffb56p-1f, + -0x1.fffc26p-1f, -0x1.fffcep-1f, -0x1.fffd88p-1f, -0x1.fffe1cp-1f, -0x1.fffe9cp-1f, -0x1.ffff0ap-1f, + -0x1.ffff62p-1f, -0x1.ffffa8p-1f, -0x1.ffffd8p-1f, -0x1.fffff6p-1f, -0x1p+0f, -0x1.fffff6p-1f, + -0x1.ffffd8p-1f, -0x1.ffffa8p-1f, -0x1.ffff62p-1f, -0x1.ffff0ap-1f, -0x1.fffe9cp-1f, -0x1.fffe1cp-1f, + -0x1.fffd88p-1f, -0x1.fffcep-1f, -0x1.fffc26p-1f, -0x1.fffb56p-1f, -0x1.fffa72p-1f, -0x1.fff97cp-1f, + -0x1.fff872p-1f, -0x1.fff754p-1f, -0x1.fff622p-1f, -0x1.fff4dcp-1f, -0x1.fff382p-1f, -0x1.fff216p-1f, + -0x1.fff094p-1f, -0x1.ffefp-1f, -0x1.ffed58p-1f, -0x1.ffeb9cp-1f, -0x1.ffe9ccp-1f, -0x1.ffe7e8p-1f, + -0x1.ffe5fp-1f, -0x1.ffe3e6p-1f, -0x1.ffe1c6p-1f, -0x1.ffdf94p-1f, -0x1.ffdd4ep-1f, -0x1.ffdaf4p-1f, + -0x1.ffd886p-1f, -0x1.ffd604p-1f, -0x1.ffd37p-1f, -0x1.ffd0c6p-1f, -0x1.ffce0ap-1f, -0x1.ffcb3ap-1f, + -0x1.ffc856p-1f, -0x1.ffc55ep-1f, -0x1.ffc252p-1f, -0x1.ffbf32p-1f, -0x1.ffbcp-1f, -0x1.ffb8b8p-1f, + -0x1.ffb55ep-1f, -0x1.ffb1fp-1f, -0x1.ffae6ep-1f, -0x1.ffaad8p-1f, -0x1.ffa72ep-1f, -0x1.ffa372p-1f, + -0x1.ff9fa2p-1f, -0x1.ff9bbcp-1f, -0x1.ff97c4p-1f, -0x1.ff93b8p-1f, -0x1.ff8f98p-1f, -0x1.ff8b64p-1f, + -0x1.ff871ep-1f, -0x1.ff82c2p-1f, -0x1.ff7e54p-1f, -0x1.ff79d2p-1f, -0x1.ff753cp-1f, -0x1.ff7092p-1f, + -0x1.ff6bd4p-1f, -0x1.ff6704p-1f, -0x1.ff621ep-1f, -0x1.ff5d26p-1f, -0x1.ff581ap-1f, -0x1.ff52fap-1f, + -0x1.ff4dc6p-1f, -0x1.ff487ep-1f, -0x1.ff4322p-1f, -0x1.ff3db4p-1f, -0x1.ff383p-1f, -0x1.ff329ap-1f, + -0x1.ff2cfp-1f, -0x1.ff2732p-1f, -0x1.ff2162p-1f, -0x1.ff1b7cp-1f, -0x1.ff1584p-1f, -0x1.ff0f76p-1f, + -0x1.ff0956p-1f, -0x1.ff0322p-1f, -0x1.fefcdap-1f, -0x1.fef68p-1f, -0x1.fef01p-1f, -0x1.fee98ep-1f, + -0x1.fee2f6p-1f, -0x1.fedc4cp-1f, -0x1.fed58ep-1f, -0x1.fecebep-1f, -0x1.fec7d8p-1f, -0x1.fec0dep-1f, + -0x1.feb9d2p-1f, -0x1.feb2b2p-1f, -0x1.feab7ep-1f, -0x1.fea436p-1f, -0x1.fe9cdap-1f, -0x1.fe956cp-1f, + -0x1.fe8de8p-1f, -0x1.fe8652p-1f, -0x1.fe7ea8p-1f, -0x1.fe76eap-1f, -0x1.fe6f18p-1f, -0x1.fe6734p-1f, + -0x1.fe5f3ap-1f, -0x1.fe572ep-1f, -0x1.fe4f0ep-1f, -0x1.fe46dap-1f, -0x1.fe3e92p-1f, -0x1.fe3638p-1f, + -0x1.fe2dc8p-1f, -0x1.fe2546p-1f, -0x1.fe1cbp-1f, -0x1.fe1406p-1f, -0x1.fe0b48p-1f, -0x1.fe0278p-1f, + -0x1.fdf992p-1f, -0x1.fdf09ap-1f, -0x1.fde78ep-1f, -0x1.fdde6ep-1f, -0x1.fdd53ap-1f, -0x1.fdcbf2p-1f, + -0x1.fdc298p-1f, -0x1.fdb92ap-1f, -0x1.fdafa8p-1f, -0x1.fda612p-1f, -0x1.fd9c68p-1f, -0x1.fd92aap-1f, + -0x1.fd88dap-1f, -0x1.fd7ef6p-1f, -0x1.fd74fep-1f, -0x1.fd6af2p-1f, -0x1.fd60d2p-1f, -0x1.fd56ap-1f, + -0x1.fd4c5ap-1f, -0x1.fd42p-1f, -0x1.fd3792p-1f, -0x1.fd2d1p-1f, -0x1.fd227ap-1f, -0x1.fd17d2p-1f, + -0x1.fd0d16p-1f, -0x1.fd0246p-1f, -0x1.fcf762p-1f, -0x1.fcec6ap-1f, -0x1.fce16p-1f, -0x1.fcd642p-1f, + -0x1.fccb1p-1f, -0x1.fcbfcap-1f, -0x1.fcb47p-1f, -0x1.fca904p-1f, -0x1.fc9d82p-1f, -0x1.fc91eep-1f, + -0x1.fc8646p-1f, -0x1.fc7a8cp-1f, -0x1.fc6ebcp-1f, -0x1.fc62dap-1f, -0x1.fc56e4p-1f, -0x1.fc4adap-1f, + -0x1.fc3ebcp-1f, -0x1.fc328cp-1f, -0x1.fc2648p-1f, -0x1.fc19eep-1f, -0x1.fc0d84p-1f, -0x1.fc0104p-1f, + -0x1.fbf47p-1f, -0x1.fbe7cap-1f, -0x1.fbdb1p-1f, -0x1.fbce42p-1f, -0x1.fbc162p-1f, -0x1.fbb46cp-1f, + -0x1.fba764p-1f, -0x1.fb9a48p-1f, -0x1.fb8d18p-1f, -0x1.fb7fd6p-1f, -0x1.fb728p-1f, -0x1.fb6514p-1f, + -0x1.fb5798p-1f, -0x1.fb4a06p-1f, -0x1.fb3c6p-1f, -0x1.fb2ea8p-1f, -0x1.fb20dcp-1f, -0x1.fb12fcp-1f, + -0x1.fb050ap-1f, -0x1.faf704p-1f, -0x1.fae8e8p-1f, -0x1.fadabcp-1f, -0x1.facc7ap-1f, -0x1.fabe26p-1f, + -0x1.faafbcp-1f, -0x1.faa14p-1f, -0x1.fa92b2p-1f, -0x1.fa840ep-1f, -0x1.fa7558p-1f, -0x1.fa668ep-1f, + -0x1.fa57bp-1f, -0x1.fa48cp-1f, -0x1.fa39bap-1f, -0x1.fa2aa2p-1f, -0x1.fa1b78p-1f, -0x1.fa0c38p-1f, + -0x1.f9fce6p-1f, -0x1.f9ed8p-1f, -0x1.f9de06p-1f, -0x1.f9ce78p-1f, -0x1.f9bed8p-1f, -0x1.f9af24p-1f, + -0x1.f99f5cp-1f, -0x1.f98f8p-1f, -0x1.f97f92p-1f, -0x1.f96f9p-1f, -0x1.f95f7ap-1f, -0x1.f94f52p-1f, + -0x1.f93f14p-1f, -0x1.f92ec4p-1f, -0x1.f91e62p-1f, -0x1.f90deap-1f, -0x1.f8fd6p-1f, -0x1.f8ecc2p-1f, + -0x1.f8dc1p-1f, -0x1.f8cb4cp-1f, -0x1.f8ba74p-1f, -0x1.f8a988p-1f, -0x1.f89888p-1f, -0x1.f88776p-1f, + -0x1.f8765p-1f, -0x1.f86516p-1f, -0x1.f853cap-1f, -0x1.f84268p-1f, -0x1.f830f4p-1f, -0x1.f81f6ep-1f, + -0x1.f80dd2p-1f, -0x1.f7fc24p-1f, -0x1.f7ea62p-1f, -0x1.f7d88ep-1f, -0x1.f7c6a6p-1f, -0x1.f7b4aap-1f, + -0x1.f7a29ap-1f, -0x1.f79076p-1f, -0x1.f77e4p-1f, -0x1.f76bf8p-1f, -0x1.f7599ap-1f, -0x1.f7472ap-1f, + -0x1.f734a6p-1f, -0x1.f7220ep-1f, -0x1.f70f64p-1f, -0x1.f6fca6p-1f, -0x1.f6e9d4p-1f, -0x1.f6d6fp-1f, + -0x1.f6c3f8p-1f, -0x1.f6b0ecp-1f, -0x1.f69dcep-1f, -0x1.f68a9cp-1f, -0x1.f67756p-1f, -0x1.f663fcp-1f, + -0x1.f6509p-1f, -0x1.f63d1p-1f, -0x1.f6297cp-1f, -0x1.f615d6p-1f, -0x1.f6021cp-1f, -0x1.f5ee5p-1f, + -0x1.f5da6ep-1f, -0x1.f5c67ap-1f, -0x1.f5b274p-1f, -0x1.f59e5ap-1f, -0x1.f58a2cp-1f, -0x1.f575eap-1f, + -0x1.f56196p-1f, -0x1.f54d2ep-1f, -0x1.f538b2p-1f, -0x1.f52424p-1f, -0x1.f50f82p-1f, -0x1.f4faccp-1f, + -0x1.f4e604p-1f, -0x1.f4d128p-1f, -0x1.f4bc38p-1f, -0x1.f4a736p-1f, -0x1.f4922p-1f, -0x1.f47cf8p-1f, + -0x1.f467bap-1f, -0x1.f4526cp-1f, -0x1.f43d08p-1f, -0x1.f42792p-1f, -0x1.f41208p-1f, -0x1.f3fc6cp-1f, + -0x1.f3e6bcp-1f, -0x1.f3d0f8p-1f, -0x1.f3bb22p-1f, -0x1.f3a538p-1f, -0x1.f38f3ap-1f, -0x1.f3792ap-1f, + -0x1.f36306p-1f, -0x1.f34cdp-1f, -0x1.f33686p-1f, -0x1.f32028p-1f, -0x1.f309b8p-1f, -0x1.f2f334p-1f, + -0x1.f2dc9cp-1f, -0x1.f2c5f2p-1f, -0x1.f2af34p-1f, -0x1.f29864p-1f, -0x1.f2818p-1f, -0x1.f26a88p-1f, + -0x1.f2537ep-1f, -0x1.f23c6p-1f, -0x1.f2253p-1f, -0x1.f20decp-1f, -0x1.f1f694p-1f, -0x1.f1df2ap-1f, + -0x1.f1c7acp-1f, -0x1.f1b01cp-1f, -0x1.f19876p-1f, -0x1.f180cp-1f, -0x1.f168f6p-1f, -0x1.f15118p-1f, + -0x1.f13926p-1f, -0x1.f12122p-1f, -0x1.f1090cp-1f, -0x1.f0f0e2p-1f, -0x1.f0d8a4p-1f, -0x1.f0c054p-1f, + -0x1.f0a7fp-1f, -0x1.f08f78p-1f, -0x1.f076eep-1f, -0x1.f05e52p-1f, -0x1.f045a2p-1f, -0x1.f02cdep-1f, + -0x1.f01408p-1f, -0x1.effb1ep-1f, -0x1.efe22p-1f, -0x1.efc91p-1f, -0x1.efafeep-1f, -0x1.ef96b8p-1f, + -0x1.ef7d6ep-1f, -0x1.ef6412p-1f, -0x1.ef4aa2p-1f, -0x1.ef312p-1f, -0x1.ef178ap-1f, -0x1.eefde2p-1f, + -0x1.eee426p-1f, -0x1.eeca56p-1f, -0x1.eeb074p-1f, -0x1.ee968p-1f, -0x1.ee7c78p-1f, -0x1.ee625cp-1f, + -0x1.ee482ep-1f, -0x1.ee2decp-1f, -0x1.ee1398p-1f, -0x1.edf932p-1f, -0x1.eddeb6p-1f, -0x1.edc42ap-1f, + -0x1.eda988p-1f, -0x1.ed8ed6p-1f, -0x1.ed740ep-1f, -0x1.ed5934p-1f, -0x1.ed3e48p-1f, -0x1.ed2348p-1f, + -0x1.ed0836p-1f, -0x1.eced1p-1f, -0x1.ecd1d8p-1f, -0x1.ecb68cp-1f, -0x1.ec9b2ep-1f, -0x1.ec7fbcp-1f, + -0x1.ec6436p-1f, -0x1.ec48ap-1f, -0x1.ec2cf4p-1f, -0x1.ec1138p-1f, -0x1.ebf566p-1f, -0x1.ebd984p-1f, + -0x1.ebbd8cp-1f, -0x1.eba184p-1f, -0x1.eb8566p-1f, -0x1.eb6938p-1f, -0x1.eb4cf6p-1f, -0x1.eb30ap-1f, + -0x1.eb1438p-1f, -0x1.eaf7bcp-1f, -0x1.eadb2ep-1f, -0x1.eabe8ep-1f, -0x1.eaa1dap-1f, -0x1.ea8512p-1f, + -0x1.ea683ap-1f, -0x1.ea4b4cp-1f, -0x1.ea2e4ep-1f, -0x1.ea113ap-1f, -0x1.e9f416p-1f, -0x1.e9d6dep-1f, + -0x1.e9b992p-1f, -0x1.e99c34p-1f, -0x1.e97ec4p-1f, -0x1.e9614p-1f, -0x1.e943aap-1f, -0x1.e926p-1f, + -0x1.e90844p-1f, -0x1.e8ea74p-1f, -0x1.e8cc92p-1f, -0x1.e8ae9ep-1f, -0x1.e89096p-1f, -0x1.e8727cp-1f, + -0x1.e8544ep-1f, -0x1.e8360ep-1f, -0x1.e817bap-1f, -0x1.e7f954p-1f, -0x1.e7dadcp-1f, -0x1.e7bc5p-1f, + -0x1.e79db2p-1f, -0x1.e77f02p-1f, -0x1.e7603ep-1f, -0x1.e74168p-1f, -0x1.e7227ep-1f, -0x1.e70382p-1f, + -0x1.e6e472p-1f, -0x1.e6c55p-1f, -0x1.e6a61cp-1f, -0x1.e686d6p-1f, -0x1.e6677cp-1f, -0x1.e6480ep-1f, + -0x1.e6288ep-1f, -0x1.e608fcp-1f, -0x1.e5e958p-1f, -0x1.e5c9ap-1f, -0x1.e5a9d6p-1f, -0x1.e589f8p-1f, + -0x1.e56a08p-1f, -0x1.e54a06p-1f, -0x1.e529fp-1f, -0x1.e509c8p-1f, -0x1.e4e98ep-1f, -0x1.e4c94p-1f, + -0x1.e4a8ep-1f, -0x1.e4886ep-1f, -0x1.e467e8p-1f, -0x1.e4475p-1f, -0x1.e426a4p-1f, -0x1.e405e8p-1f, + -0x1.e3e518p-1f, -0x1.e3c434p-1f, -0x1.e3a33ep-1f, -0x1.e38236p-1f, -0x1.e3611cp-1f, -0x1.e33feep-1f, + -0x1.e31eaep-1f, -0x1.e2fd5cp-1f, -0x1.e2dbf6p-1f, -0x1.e2ba7ep-1f, -0x1.e298f4p-1f, -0x1.e27758p-1f, + -0x1.e255a8p-1f, -0x1.e233e6p-1f, -0x1.e2121p-1f, -0x1.e1f028p-1f, -0x1.e1ce2ep-1f, -0x1.e1ac22p-1f, + -0x1.e18a02p-1f, -0x1.e167d2p-1f, -0x1.e1458cp-1f, -0x1.e12336p-1f, -0x1.e100ccp-1f, -0x1.e0de5p-1f, + -0x1.e0bbc2p-1f, -0x1.e09922p-1f, -0x1.e0766ep-1f, -0x1.e053a8p-1f, -0x1.e030cep-1f, -0x1.e00de4p-1f, + -0x1.dfeae6p-1f, -0x1.dfc7d6p-1f, -0x1.dfa4b4p-1f, -0x1.df817ep-1f, -0x1.df5e36p-1f, -0x1.df3adcp-1f, + -0x1.df177p-1f, -0x1.def3fp-1f, -0x1.ded06p-1f, -0x1.deacbcp-1f, -0x1.de8906p-1f, -0x1.de653cp-1f, + -0x1.de416p-1f, -0x1.de1d74p-1f, -0x1.ddf974p-1f, -0x1.ddd56p-1f, -0x1.ddb13cp-1f, -0x1.dd8d04p-1f, + -0x1.dd68bap-1f, -0x1.dd445ep-1f, -0x1.dd1ffp-1f, -0x1.dcfb6ep-1f, -0x1.dcd6dap-1f, -0x1.dcb234p-1f, + -0x1.dc8d7cp-1f, -0x1.dc68b2p-1f, -0x1.dc43d6p-1f, -0x1.dc1ee6p-1f, -0x1.dbf9e4p-1f, -0x1.dbd4dp-1f, + -0x1.dbafaap-1f, -0x1.db8a72p-1f, -0x1.db6526p-1f, -0x1.db3fc8p-1f, -0x1.db1a5ap-1f, -0x1.daf4d8p-1f, + -0x1.dacf42p-1f, -0x1.daa99cp-1f, -0x1.da83e4p-1f, -0x1.da5e18p-1f, -0x1.da383ap-1f, -0x1.da124ap-1f, + -0x1.d9ec48p-1f, -0x1.d9c634p-1f, -0x1.d9a00ep-1f, -0x1.d979d4p-1f, -0x1.d9538ap-1f, -0x1.d92d2cp-1f, + -0x1.d906bcp-1f, -0x1.d8e03cp-1f, -0x1.d8b9a8p-1f, -0x1.d893p-1f, -0x1.d86c48p-1f, -0x1.d8457ep-1f, + -0x1.d81eap-1f, -0x1.d7f7b2p-1f, -0x1.d7d0bp-1f, -0x1.d7a99cp-1f, -0x1.d78276p-1f, -0x1.d75b4p-1f, + -0x1.d733f6p-1f, -0x1.d70c98p-1f, -0x1.d6e52ap-1f, -0x1.d6bdaap-1f, -0x1.d69618p-1f, -0x1.d66e72p-1f, + -0x1.d646bcp-1f, -0x1.d61ef2p-1f, -0x1.d5f718p-1f, -0x1.d5cf2ap-1f, -0x1.d5a72ap-1f, -0x1.d57f18p-1f, + -0x1.d556f6p-1f, -0x1.d52ecp-1f, -0x1.d50678p-1f, -0x1.d4de1ep-1f, -0x1.d4b5b2p-1f, -0x1.d48d34p-1f, + -0x1.d464a4p-1f, -0x1.d43c02p-1f, -0x1.d4134ep-1f, -0x1.d3ea86p-1f, -0x1.d3c1aep-1f, -0x1.d398c4p-1f, + -0x1.d36fc8p-1f, -0x1.d346bap-1f, -0x1.d31d98p-1f, -0x1.d2f466p-1f, -0x1.d2cb22p-1f, -0x1.d2a1ccp-1f, + -0x1.d27864p-1f, -0x1.d24ee8p-1f, -0x1.d2255cp-1f, -0x1.d1fbbep-1f, -0x1.d1d20ep-1f, -0x1.d1a84cp-1f, + -0x1.d17e78p-1f, -0x1.d15492p-1f, -0x1.d12a98p-1f, -0x1.d1008ep-1f, -0x1.d0d672p-1f, -0x1.d0ac46p-1f, + -0x1.d08206p-1f, -0x1.d057b4p-1f, -0x1.d02d5p-1f, -0x1.d002dap-1f, -0x1.cfd852p-1f, -0x1.cfadbap-1f, + -0x1.cf830ep-1f, -0x1.cf5852p-1f, -0x1.cf2d82p-1f, -0x1.cf02a2p-1f, -0x1.ced7bp-1f, -0x1.ceacaap-1f, + -0x1.ce8194p-1f, -0x1.ce566cp-1f, -0x1.ce2b32p-1f, -0x1.cdffe6p-1f, -0x1.cdd48ap-1f, -0x1.cda91ap-1f, + -0x1.cd7d98p-1f, -0x1.cd5206p-1f, -0x1.cd266p-1f, -0x1.ccfaaap-1f, -0x1.cccee2p-1f, -0x1.cca308p-1f, + -0x1.cc771cp-1f, -0x1.cc4b1ep-1f, -0x1.cc1f1p-1f, -0x1.cbf2eep-1f, -0x1.cbc6bcp-1f, -0x1.cb9a76p-1f, + -0x1.cb6e2p-1f, -0x1.cb41b8p-1f, -0x1.cb154p-1f, -0x1.cae8b4p-1f, -0x1.cabc16p-1f, -0x1.ca8f68p-1f, + -0x1.ca62a8p-1f, -0x1.ca35d6p-1f, -0x1.ca08f2p-1f, -0x1.c9dbfcp-1f, -0x1.c9aef6p-1f, -0x1.c981dcp-1f, + -0x1.c954b2p-1f, -0x1.c92776p-1f, -0x1.c8fa28p-1f, -0x1.c8cccap-1f, -0x1.c89f58p-1f, -0x1.c871d6p-1f, + -0x1.c84442p-1f, -0x1.c8169cp-1f, -0x1.c7e8e6p-1f, -0x1.c7bb1cp-1f, -0x1.c78d42p-1f, -0x1.c75f56p-1f, + -0x1.c73158p-1f, -0x1.c7034ap-1f, -0x1.c6d52ap-1f, -0x1.c6a6f6p-1f, -0x1.c678b4p-1f, -0x1.c64a5ep-1f, + -0x1.c61bf8p-1f, -0x1.c5ed8p-1f, -0x1.c5bef6p-1f, -0x1.c5905ap-1f, -0x1.c561aep-1f, -0x1.c532fp-1f, + -0x1.c5042p-1f, -0x1.c4d54p-1f, -0x1.c4a64cp-1f, -0x1.c47748p-1f, -0x1.c44834p-1f, -0x1.c4190cp-1f, + -0x1.c3e9d4p-1f, -0x1.c3ba8ap-1f, -0x1.c38b3p-1f, -0x1.c35bc2p-1f, -0x1.c32c44p-1f, -0x1.c2fcb6p-1f, + -0x1.c2cd14p-1f, -0x1.c29d62p-1f, -0x1.c26dap-1f, -0x1.c23dcap-1f, -0x1.c20de4p-1f, -0x1.c1ddecp-1f, + -0x1.c1ade4p-1f, -0x1.c17dcap-1f, -0x1.c14d9ep-1f, -0x1.c11d6p-1f, -0x1.c0ed12p-1f, -0x1.c0bcb4p-1f, + -0x1.c08c42p-1f, -0x1.c05bcp-1f, -0x1.c02b2cp-1f, -0x1.bffa88p-1f, -0x1.bfc9d2p-1f, -0x1.bf990cp-1f, + -0x1.bf6832p-1f, -0x1.bf374ap-1f, -0x1.bf064ep-1f, -0x1.bed542p-1f, -0x1.bea424p-1f, -0x1.be72f6p-1f, + -0x1.be41b6p-1f, -0x1.be1066p-1f, -0x1.bddf02p-1f, -0x1.bdad9p-1f, -0x1.bd7c0ap-1f, -0x1.bd4a74p-1f, + -0x1.bd18cep-1f, -0x1.bce716p-1f, -0x1.bcb54cp-1f, -0x1.bc8372p-1f, -0x1.bc5186p-1f, -0x1.bc1f8ap-1f, + -0x1.bbed7cp-1f, -0x1.bbbb5ep-1f, -0x1.bb892ep-1f, -0x1.bb56ecp-1f, -0x1.bb249ap-1f, -0x1.baf236p-1f, + -0x1.babfc2p-1f, -0x1.ba8d3cp-1f, -0x1.ba5aa6p-1f, -0x1.ba27fep-1f, -0x1.b9f546p-1f, -0x1.b9c27cp-1f, + -0x1.b98fa2p-1f, -0x1.b95cb6p-1f, -0x1.b929bap-1f, -0x1.b8f6acp-1f, -0x1.b8c38ep-1f, -0x1.b8905ep-1f, + -0x1.b85d1cp-1f, -0x1.b829ccp-1f, -0x1.b7f668p-1f, -0x1.b7c2f4p-1f, -0x1.b78f7p-1f, -0x1.b75bdap-1f, + -0x1.b72834p-1f, -0x1.b6f47cp-1f, -0x1.b6c0b4p-1f, -0x1.b68cdcp-1f, -0x1.b658f2p-1f, -0x1.b624f6p-1f, + -0x1.b5f0eap-1f, -0x1.b5bccep-1f, -0x1.b588ap-1f, -0x1.b55462p-1f, -0x1.b52012p-1f, -0x1.b4ebb2p-1f, + -0x1.b4b74p-1f, -0x1.b482bep-1f, -0x1.b44e2cp-1f, -0x1.b41988p-1f, -0x1.b3e4d4p-1f, -0x1.b3b00ep-1f, + -0x1.b37b38p-1f, -0x1.b34652p-1f, -0x1.b3115ap-1f, -0x1.b2dc52p-1f, -0x1.b2a738p-1f, -0x1.b2721p-1f, + -0x1.b23cd4p-1f, -0x1.b2078ap-1f, -0x1.b1d22cp-1f, -0x1.b19ccp-1f, -0x1.b16742p-1f, -0x1.b131b4p-1f, + -0x1.b0fc16p-1f, -0x1.b0c666p-1f, -0x1.b090a6p-1f, -0x1.b05ad4p-1f, -0x1.b024f2p-1f, -0x1.afefp-1f, + -0x1.afb8fep-1f, -0x1.af82eap-1f, -0x1.af4cc6p-1f, -0x1.af169p-1f, -0x1.aee04cp-1f, -0x1.aea9f6p-1f, + -0x1.ae738ep-1f, -0x1.ae3d18p-1f, -0x1.ae069p-1f, -0x1.adcff6p-1f, -0x1.ad994ep-1f, -0x1.ad6294p-1f, + -0x1.ad2bcap-1f, -0x1.acf4fp-1f, -0x1.acbe04p-1f, -0x1.ac8708p-1f, -0x1.ac4ffcp-1f, -0x1.ac18ep-1f, + -0x1.abe1b2p-1f, -0x1.abaa74p-1f, -0x1.ab7326p-1f, -0x1.ab3bc6p-1f, -0x1.ab0458p-1f, -0x1.aaccd8p-1f, + -0x1.aa9548p-1f, -0x1.aa5da8p-1f, -0x1.aa25f6p-1f, -0x1.a9ee34p-1f, -0x1.a9b662p-1f, -0x1.a97e8p-1f, + -0x1.a9468ep-1f, -0x1.a90e8ap-1f, -0x1.a8d676p-1f, -0x1.a89e54p-1f, -0x1.a8661ep-1f, -0x1.a82ddap-1f, + -0x1.a7f586p-1f, -0x1.a7bd2p-1f, -0x1.a784aap-1f, -0x1.a74c24p-1f, -0x1.a7138ep-1f, -0x1.a6dae8p-1f, + -0x1.a6a23p-1f, -0x1.a6696ap-1f, -0x1.a63092p-1f, -0x1.a5f7aap-1f, -0x1.a5beb2p-1f, -0x1.a585aap-1f, + -0x1.a54c92p-1f, -0x1.a51368p-1f, -0x1.a4da3p-1f, -0x1.a4a0e6p-1f, -0x1.a4678cp-1f, -0x1.a42e22p-1f, + -0x1.a3f4a8p-1f, -0x1.a3bb1ep-1f, -0x1.a38184p-1f, -0x1.a347dap-1f, -0x1.a30e2p-1f, -0x1.a2d454p-1f, + -0x1.a29a7ap-1f, -0x1.a2608ep-1f, -0x1.a22694p-1f, -0x1.a1ec88p-1f, -0x1.a1b26ep-1f, -0x1.a17842p-1f, + -0x1.a13e06p-1f, -0x1.a103bap-1f, -0x1.a0c95ep-1f, -0x1.a08ef2p-1f, -0x1.a05476p-1f, -0x1.a019ecp-1f, + -0x1.9fdf5p-1f, -0x1.9fa4a4p-1f, -0x1.9f69e8p-1f, -0x1.9f2f1ap-1f, -0x1.9ef43ep-1f, -0x1.9eb952p-1f, + -0x1.9e7e56p-1f, -0x1.9e434ap-1f, -0x1.9e082ep-1f, -0x1.9dcd02p-1f, -0x1.9d91c8p-1f, -0x1.9d567cp-1f, + -0x1.9d1b2p-1f, -0x1.9cdfb4p-1f, -0x1.9ca438p-1f, -0x1.9c68acp-1f, -0x1.9c2d12p-1f, -0x1.9bf166p-1f, + -0x1.9bb5aap-1f, -0x1.9b79ep-1f, -0x1.9b3e04p-1f, -0x1.9b021ap-1f, -0x1.9ac62p-1f, -0x1.9a8a14p-1f, + -0x1.9a4dfap-1f, -0x1.9a11dp-1f, -0x1.99d596p-1f, -0x1.99994cp-1f, -0x1.995cf2p-1f, -0x1.99208ap-1f, + -0x1.98e41p-1f, -0x1.98a788p-1f, -0x1.986afp-1f, -0x1.982e46p-1f, -0x1.97f18ep-1f, -0x1.97b4c6p-1f, + -0x1.9777fp-1f, -0x1.973b08p-1f, -0x1.96fe12p-1f, -0x1.96c10ap-1f, -0x1.9683f4p-1f, -0x1.9646cep-1f, + -0x1.960998p-1f, -0x1.95cc54p-1f, -0x1.958efep-1f, -0x1.95519ap-1f, -0x1.951426p-1f, -0x1.94d6a2p-1f, + -0x1.94990ep-1f, -0x1.945b6cp-1f, -0x1.941db8p-1f, -0x1.93dff6p-1f, -0x1.93a224p-1f, -0x1.936444p-1f, + -0x1.932652p-1f, -0x1.92e852p-1f, -0x1.92aa42p-1f, -0x1.926c22p-1f, -0x1.922df4p-1f, -0x1.91efb4p-1f, + -0x1.91b166p-1f, -0x1.91730ap-1f, -0x1.91349cp-1f, -0x1.90f62p-1f, -0x1.90b794p-1f, -0x1.9078f8p-1f, + -0x1.903a4ep-1f, -0x1.8ffb94p-1f, -0x1.8fbccap-1f, -0x1.8f7df2p-1f, -0x1.8f3f08p-1f, -0x1.8f001p-1f, + -0x1.8ec10ap-1f, -0x1.8e81f4p-1f, -0x1.8e42cep-1f, -0x1.8e0398p-1f, -0x1.8dc454p-1f, -0x1.8d85p-1f, + -0x1.8d459cp-1f, -0x1.8d062ap-1f, -0x1.8cc6a8p-1f, -0x1.8c8716p-1f, -0x1.8c4776p-1f, -0x1.8c07c6p-1f, + -0x1.8bc806p-1f, -0x1.8b8838p-1f, -0x1.8b485ap-1f, -0x1.8b086ep-1f, -0x1.8ac872p-1f, -0x1.8a8866p-1f, + -0x1.8a484cp-1f, -0x1.8a0822p-1f, -0x1.89c7eap-1f, -0x1.8987a2p-1f, -0x1.89474ap-1f, -0x1.8906e4p-1f, + -0x1.88c66ep-1f, -0x1.8885eap-1f, -0x1.884556p-1f, -0x1.8804b4p-1f, -0x1.87c4p-1f, -0x1.87834p-1f, + -0x1.87427p-1f, -0x1.87019p-1f, -0x1.86c0a2p-1f, -0x1.867fa4p-1f, -0x1.863e98p-1f, -0x1.85fd7cp-1f, + -0x1.85bc52p-1f, -0x1.857b18p-1f, -0x1.8539dp-1f, -0x1.84f878p-1f, -0x1.84b712p-1f, -0x1.84759cp-1f, + -0x1.843416p-1f, -0x1.83f284p-1f, -0x1.83b0ep-1f, -0x1.836f3p-1f, -0x1.832d6ep-1f, -0x1.82ebap-1f, + -0x1.82a9c2p-1f, -0x1.8267d4p-1f, -0x1.8225d8p-1f, -0x1.81e3cep-1f, -0x1.81a1b4p-1f, -0x1.815f8ap-1f, + -0x1.811d52p-1f, -0x1.80db0cp-1f, -0x1.8098b8p-1f, -0x1.805654p-1f, -0x1.8013ep-1f, -0x1.7fd15ep-1f, + -0x1.7f8ecep-1f, -0x1.7f4c2ep-1f, -0x1.7f098p-1f, -0x1.7ec6c4p-1f, -0x1.7e83f8p-1f, -0x1.7e411ep-1f, + -0x1.7dfe36p-1f, -0x1.7dbb3ep-1f, -0x1.7d7836p-1f, -0x1.7d3522p-1f, -0x1.7cf1fep-1f, -0x1.7caeccp-1f, + -0x1.7c6b8ap-1f, -0x1.7c283ap-1f, -0x1.7be4dcp-1f, -0x1.7ba16ep-1f, -0x1.7b5df2p-1f, -0x1.7b1a68p-1f, + -0x1.7ad6cep-1f, -0x1.7a9326p-1f, -0x1.7a4f7p-1f, -0x1.7a0bacp-1f, -0x1.79c7d8p-1f, -0x1.7983f6p-1f, + -0x1.794006p-1f, -0x1.78fc06p-1f, -0x1.78b7f8p-1f, -0x1.7873dcp-1f, -0x1.782fb2p-1f, -0x1.77eb78p-1f, + -0x1.77a73p-1f, -0x1.7762dap-1f, -0x1.771e76p-1f, -0x1.76da02p-1f, -0x1.769582p-1f, -0x1.7650f2p-1f, + -0x1.760c52p-1f, -0x1.75c7a6p-1f, -0x1.7582eap-1f, -0x1.753e2p-1f, -0x1.74f948p-1f, -0x1.74b462p-1f, + -0x1.746f6ep-1f, -0x1.742a6ap-1f, -0x1.73e558p-1f, -0x1.73a03ap-1f, -0x1.735b0ap-1f, -0x1.7315cep-1f, + -0x1.72d084p-1f, -0x1.728b2ap-1f, -0x1.7245c2p-1f, -0x1.72004ep-1f, -0x1.71bacap-1f, -0x1.717538p-1f, + -0x1.712f96p-1f, -0x1.70e9e8p-1f, -0x1.70a42cp-1f, -0x1.705e6p-1f, -0x1.701886p-1f, -0x1.6fd2ap-1f, + -0x1.6f8caap-1f, -0x1.6f46a6p-1f, -0x1.6f0094p-1f, -0x1.6eba74p-1f, -0x1.6e7446p-1f, -0x1.6e2e08p-1f, + -0x1.6de7bep-1f, -0x1.6da166p-1f, -0x1.6d5afep-1f, -0x1.6d148ap-1f, -0x1.6cce08p-1f, -0x1.6c8776p-1f, + -0x1.6c40d8p-1f, -0x1.6bfa2ap-1f, -0x1.6bb37p-1f, -0x1.6b6ca6p-1f, -0x1.6b25cep-1f, -0x1.6adeeap-1f, + -0x1.6a97f6p-1f, -0x1.6a50f6p-1f, -0x1.6a09e6p-1f, -0x1.69c2cap-1f, -0x1.697b9ep-1f, -0x1.693466p-1f, + -0x1.68ed1ep-1f, -0x1.68a5cap-1f, -0x1.685e68p-1f, -0x1.6816f6p-1f, -0x1.67cf78p-1f, -0x1.6787ecp-1f, + -0x1.674052p-1f, -0x1.66f8aap-1f, -0x1.66b0f4p-1f, -0x1.66693p-1f, -0x1.66215ep-1f, -0x1.65d98p-1f, + -0x1.659192p-1f, -0x1.654998p-1f, -0x1.65018ep-1f, -0x1.64b978p-1f, -0x1.647154p-1f, -0x1.642922p-1f, + -0x1.63e0e2p-1f, -0x1.639896p-1f, -0x1.63503ap-1f, -0x1.6307d2p-1f, -0x1.62bf5ap-1f, -0x1.6276d6p-1f, + -0x1.622e44p-1f, -0x1.61e5a6p-1f, -0x1.619cf8p-1f, -0x1.61543ep-1f, -0x1.610b76p-1f, -0x1.60c2ap-1f, + -0x1.6079bcp-1f, -0x1.6030cap-1f, -0x1.5fe7ccp-1f, -0x1.5f9ecp-1f, -0x1.5f55a6p-1f, -0x1.5f0c7ep-1f, + -0x1.5ec34ap-1f, -0x1.5e7a06p-1f, -0x1.5e30b6p-1f, -0x1.5de75ap-1f, -0x1.5d9deep-1f, -0x1.5d5476p-1f, + -0x1.5d0afp-1f, -0x1.5cc15cp-1f, -0x1.5c77bcp-1f, -0x1.5c2e0ep-1f, -0x1.5be452p-1f, -0x1.5b9a88p-1f, + -0x1.5b50b2p-1f, -0x1.5b06cep-1f, -0x1.5abcdep-1f, -0x1.5a72dep-1f, -0x1.5a28d2p-1f, -0x1.59debap-1f, + -0x1.599492p-1f, -0x1.594a5ep-1f, -0x1.59001ep-1f, -0x1.58b5cep-1f, -0x1.586b72p-1f, -0x1.58210ap-1f, + -0x1.57d694p-1f, -0x1.578c1p-1f, -0x1.57417ep-1f, -0x1.56f6ep-1f, -0x1.56ac36p-1f, -0x1.56617cp-1f, + -0x1.5616b6p-1f, -0x1.55cbe4p-1f, -0x1.558104p-1f, -0x1.553616p-1f, -0x1.54eb1cp-1f, -0x1.54a014p-1f, + -0x1.5455p-1f, -0x1.5409dep-1f, -0x1.53beaep-1f, -0x1.537372p-1f, -0x1.53282ap-1f, -0x1.52dcd2p-1f, + -0x1.52917p-1f, -0x1.5246p-1f, -0x1.51fa82p-1f, -0x1.51aef8p-1f, -0x1.51636p-1f, -0x1.5117bcp-1f, + -0x1.50cc0ap-1f, -0x1.50804cp-1f, -0x1.50348p-1f, -0x1.4fe8a8p-1f, -0x1.4f9cc2p-1f, -0x1.4f50dp-1f, + -0x1.4f04dp-1f, -0x1.4eb8c4p-1f, -0x1.4e6cacp-1f, -0x1.4e2086p-1f, -0x1.4dd454p-1f, -0x1.4d8814p-1f, + -0x1.4d3bc6p-1f, -0x1.4cef6ep-1f, -0x1.4ca308p-1f, -0x1.4c5694p-1f, -0x1.4c0a14p-1f, -0x1.4bbd88p-1f, + -0x1.4b70eep-1f, -0x1.4b2448p-1f, -0x1.4ad796p-1f, -0x1.4a8ad6p-1f, -0x1.4a3e08p-1f, -0x1.49f13p-1f, + -0x1.49a44ap-1f, -0x1.495758p-1f, -0x1.490a58p-1f, -0x1.48bd4cp-1f, -0x1.487034p-1f, -0x1.48230ep-1f, + -0x1.47d5dcp-1f, -0x1.47889ep-1f, -0x1.473b52p-1f, -0x1.46edfap-1f, -0x1.46a096p-1f, -0x1.465324p-1f, + -0x1.4605a6p-1f, -0x1.45b81cp-1f, -0x1.456a86p-1f, -0x1.451ce2p-1f, -0x1.44cf32p-1f, -0x1.448176p-1f, + -0x1.4433aep-1f, -0x1.43e5d8p-1f, -0x1.4397f6p-1f, -0x1.434a08p-1f, -0x1.42fc0cp-1f, -0x1.42ae06p-1f, + -0x1.425ff2p-1f, -0x1.4211d2p-1f, -0x1.41c3a4p-1f, -0x1.41756cp-1f, -0x1.412726p-1f, -0x1.40d8d4p-1f, + -0x1.408a76p-1f, -0x1.403c0cp-1f, -0x1.3fed96p-1f, -0x1.3f9f12p-1f, -0x1.3f5082p-1f, -0x1.3f01e6p-1f, + -0x1.3eb33ep-1f, -0x1.3e648ap-1f, -0x1.3e15cap-1f, -0x1.3dc6fcp-1f, -0x1.3d7824p-1f, -0x1.3d293ep-1f, + -0x1.3cda4cp-1f, -0x1.3c8b4ep-1f, -0x1.3c3c44p-1f, -0x1.3bed2ep-1f, -0x1.3b9e0cp-1f, -0x1.3b4edep-1f, + -0x1.3affa2p-1f, -0x1.3ab05cp-1f, -0x1.3a6108p-1f, -0x1.3a11aap-1f, -0x1.39c23ep-1f, -0x1.3972c6p-1f, + -0x1.392344p-1f, -0x1.38d3b4p-1f, -0x1.388418p-1f, -0x1.38347p-1f, -0x1.37e4bep-1f, -0x1.3794fep-1f, + -0x1.374532p-1f, -0x1.36f55ap-1f, -0x1.36a576p-1f, -0x1.365586p-1f, -0x1.36058cp-1f, -0x1.35b584p-1f, + -0x1.35657p-1f, -0x1.35155p-1f, -0x1.34c526p-1f, -0x1.3474eep-1f, -0x1.3424aap-1f, -0x1.33d45cp-1f, + -0x1.3384p-1f, -0x1.33339ap-1f, -0x1.32e328p-1f, -0x1.3292aap-1f, -0x1.32421ep-1f, -0x1.31f188p-1f, + -0x1.31a0e6p-1f, -0x1.31503ap-1f, -0x1.30ff8p-1f, -0x1.30aebap-1f, -0x1.305deap-1f, -0x1.300d0ep-1f, + -0x1.2fbc24p-1f, -0x1.2f6b3p-1f, -0x1.2f1a3p-1f, -0x1.2ec926p-1f, -0x1.2e780ep-1f, -0x1.2e26ecp-1f, + -0x1.2dd5bcp-1f, -0x1.2d8482p-1f, -0x1.2d333ep-1f, -0x1.2ce1ecp-1f, -0x1.2c908ep-1f, -0x1.2c3f26p-1f, + -0x1.2bedb2p-1f, -0x1.2b9c32p-1f, -0x1.2b4aa8p-1f, -0x1.2af91p-1f, -0x1.2aa76ep-1f, -0x1.2a55cp-1f, + -0x1.2a0408p-1f, -0x1.29b242p-1f, -0x1.296072p-1f, -0x1.290e96p-1f, -0x1.28bcbp-1f, -0x1.286abcp-1f, + -0x1.2818bep-1f, -0x1.27c6b6p-1f, -0x1.2774ap-1f, -0x1.27228p-1f, -0x1.26d054p-1f, -0x1.267e1ep-1f, + -0x1.262bdcp-1f, -0x1.25d98ep-1f, -0x1.258734p-1f, -0x1.2534dp-1f, -0x1.24e26p-1f, -0x1.248fe6p-1f, + -0x1.243d6p-1f, -0x1.23eacep-1f, -0x1.239832p-1f, -0x1.23458ap-1f, -0x1.22f2d6p-1f, -0x1.22a018p-1f, + -0x1.224d4ep-1f, -0x1.21fa7ap-1f, -0x1.21a79ap-1f, -0x1.2154aep-1f, -0x1.2101b8p-1f, -0x1.20aeb6p-1f, + -0x1.205baap-1f, -0x1.200892p-1f, -0x1.1fb57p-1f, -0x1.1f6242p-1f, -0x1.1f0f08p-1f, -0x1.1ebbc4p-1f, + -0x1.1e6876p-1f, -0x1.1e151cp-1f, -0x1.1dc1b6p-1f, -0x1.1d6e46p-1f, -0x1.1d1acap-1f, -0x1.1cc744p-1f, + -0x1.1c73b4p-1f, -0x1.1c2018p-1f, -0x1.1bcc7p-1f, -0x1.1b78bep-1f, -0x1.1b2502p-1f, -0x1.1ad13ap-1f, + -0x1.1a7d66p-1f, -0x1.1a298ap-1f, -0x1.19d5ap-1f, -0x1.1981aep-1f, -0x1.192daep-1f, -0x1.18d9a6p-1f, + -0x1.188592p-1f, -0x1.183174p-1f, -0x1.17dd4ap-1f, -0x1.178916p-1f, -0x1.1734d6p-1f, -0x1.16e08cp-1f, + -0x1.168c38p-1f, -0x1.1637d8p-1f, -0x1.15e36ep-1f, -0x1.158efap-1f, -0x1.153a7ap-1f, -0x1.14e5fp-1f, + -0x1.14915ap-1f, -0x1.143cbcp-1f, -0x1.13e812p-1f, -0x1.13935cp-1f, -0x1.133e9cp-1f, -0x1.12e9d2p-1f, + -0x1.1294fep-1f, -0x1.12402p-1f, -0x1.11eb36p-1f, -0x1.11964p-1f, -0x1.114142p-1f, -0x1.10ec38p-1f, + -0x1.109724p-1f, -0x1.104206p-1f, -0x1.0fecdep-1f, -0x1.0f97aap-1f, -0x1.0f426cp-1f, -0x1.0eed24p-1f, + -0x1.0e97dp-1f, -0x1.0e4274p-1f, -0x1.0ded0cp-1f, -0x1.0d979ap-1f, -0x1.0d421cp-1f, -0x1.0cec96p-1f, + -0x1.0c9704p-1f, -0x1.0c416ap-1f, -0x1.0bebc4p-1f, -0x1.0b9614p-1f, -0x1.0b4058p-1f, -0x1.0aea94p-1f, + -0x1.0a94c4p-1f, -0x1.0a3eeap-1f, -0x1.09e908p-1f, -0x1.09931ap-1f, -0x1.093d22p-1f, -0x1.08e71ep-1f, + -0x1.089112p-1f, -0x1.083afcp-1f, -0x1.07e4dap-1f, -0x1.078eaep-1f, -0x1.07387ap-1f, -0x1.06e23ap-1f, + -0x1.068bfp-1f, -0x1.06359cp-1f, -0x1.05df3ep-1f, -0x1.0588d6p-1f, -0x1.053264p-1f, -0x1.04dbe8p-1f, + -0x1.048562p-1f, -0x1.042ed2p-1f, -0x1.03d838p-1f, -0x1.038194p-1f, -0x1.032ae6p-1f, -0x1.02d42ep-1f, + -0x1.027d6ap-1f, -0x1.02269ep-1f, -0x1.01cfc8p-1f, -0x1.0178e8p-1f, -0x1.0121fep-1f, -0x1.00cb0ap-1f, + -0x1.00740cp-1f, -0x1.001d04p-1f, -0x1.ff8be6p-2f, -0x1.feddbp-2f, -0x1.fe2f64p-2f, -0x1.fd8106p-2f, + -0x1.fcd294p-2f, -0x1.fc240ep-2f, -0x1.fb7576p-2f, -0x1.fac6cap-2f, -0x1.fa1808p-2f, -0x1.f96936p-2f, + -0x1.f8ba4ep-2f, -0x1.f80b54p-2f, -0x1.f75c44p-2f, -0x1.f6ad24p-2f, -0x1.f5fdeep-2f, -0x1.f54ea6p-2f, + -0x1.f49f4ap-2f, -0x1.f3efdcp-2f, -0x1.f3405ap-2f, -0x1.f290c4p-2f, -0x1.f1e11cp-2f, -0x1.f1316p-2f, + -0x1.f0819p-2f, -0x1.efd1aep-2f, -0x1.ef21b8p-2f, -0x1.ee71bp-2f, -0x1.edc196p-2f, -0x1.ed1166p-2f, + -0x1.ec6126p-2f, -0x1.ebb0dp-2f, -0x1.eb006ap-2f, -0x1.ea4ffp-2f, -0x1.e99f62p-2f, -0x1.e8eec2p-2f, + -0x1.e83e0ep-2f, -0x1.e78d48p-2f, -0x1.e6dc7p-2f, -0x1.e62b84p-2f, -0x1.e57a86p-2f, -0x1.e4c976p-2f, + -0x1.e41852p-2f, -0x1.e3671cp-2f, -0x1.e2b5d4p-2f, -0x1.e20478p-2f, -0x1.e1530ap-2f, -0x1.e0a18ap-2f, + -0x1.dfeff6p-2f, -0x1.df3e5p-2f, -0x1.de8c98p-2f, -0x1.dddacep-2f, -0x1.dd28f2p-2f, -0x1.dc7702p-2f, + -0x1.dbc5p-2f, -0x1.db12ecp-2f, -0x1.da60c6p-2f, -0x1.d9ae8ep-2f, -0x1.d8fc42p-2f, -0x1.d849e6p-2f, + -0x1.d79776p-2f, -0x1.d6e4f4p-2f, -0x1.d6326p-2f, -0x1.d57fbap-2f, -0x1.d4cd02p-2f, -0x1.d41a38p-2f, + -0x1.d3675cp-2f, -0x1.d2b46ep-2f, -0x1.d2016ep-2f, -0x1.d14e5cp-2f, -0x1.d09b38p-2f, -0x1.cfe802p-2f, + -0x1.cf34bap-2f, -0x1.ce8162p-2f, -0x1.cdcdf6p-2f, -0x1.cd1a78p-2f, -0x1.cc66eap-2f, -0x1.cbb348p-2f, + -0x1.caff96p-2f, -0x1.ca4bd2p-2f, -0x1.c997fcp-2f, -0x1.c8e414p-2f, -0x1.c8301cp-2f, -0x1.c77c1p-2f, + -0x1.c6c7f4p-2f, -0x1.c613c6p-2f, -0x1.c55f88p-2f, -0x1.c4ab36p-2f, -0x1.c3f6d4p-2f, -0x1.c3426p-2f, + -0x1.c28ddcp-2f, -0x1.c1d946p-2f, -0x1.c1249ep-2f, -0x1.c06fe4p-2f, -0x1.bfbb1ap-2f, -0x1.bf063ep-2f, + -0x1.be5152p-2f, -0x1.bd9c54p-2f, -0x1.bce744p-2f, -0x1.bc3224p-2f, -0x1.bb7cf2p-2f, -0x1.bac7bp-2f, + -0x1.ba125cp-2f, -0x1.b95cf8p-2f, -0x1.b8a782p-2f, -0x1.b7f1fap-2f, -0x1.b73c62p-2f, -0x1.b686bap-2f, + -0x1.b5d1p-2f, -0x1.b51b36p-2f, -0x1.b4655ap-2f, -0x1.b3af6ep-2f, -0x1.b2f972p-2f, -0x1.b24364p-2f, + -0x1.b18d46p-2f, -0x1.b0d716p-2f, -0x1.b020d6p-2f, -0x1.af6a86p-2f, -0x1.aeb426p-2f, -0x1.adfdb4p-2f, + -0x1.ad4732p-2f, -0x1.ac909ep-2f, -0x1.abd9fap-2f, -0x1.ab2348p-2f, -0x1.aa6c82p-2f, -0x1.a9b5aep-2f, + -0x1.a8fec8p-2f, -0x1.a847d4p-2f, -0x1.a790cep-2f, -0x1.a6d9b6p-2f, -0x1.a6229p-2f, -0x1.a56b5ap-2f, + -0x1.a4b412p-2f, -0x1.a3fcbcp-2f, -0x1.a34554p-2f, -0x1.a28ddcp-2f, -0x1.a1d654p-2f, -0x1.a11ebcp-2f, + -0x1.a06714p-2f, -0x1.9faf5cp-2f, -0x1.9ef794p-2f, -0x1.9e3fbcp-2f, -0x1.9d87d4p-2f, -0x1.9ccfdcp-2f, + -0x1.9c17d4p-2f, -0x1.9b5fbcp-2f, -0x1.9aa794p-2f, -0x1.99ef5ep-2f, -0x1.993716p-2f, -0x1.987ecp-2f, + -0x1.97c658p-2f, -0x1.970de2p-2f, -0x1.96555cp-2f, -0x1.959cc6p-2f, -0x1.94e42p-2f, -0x1.942b6ap-2f, + -0x1.9372a6p-2f, -0x1.92b9d2p-2f, -0x1.9200eep-2f, -0x1.9147fap-2f, -0x1.908ef8p-2f, -0x1.8fd5e6p-2f, + -0x1.8f1cc4p-2f, -0x1.8e6394p-2f, -0x1.8daa52p-2f, -0x1.8cf104p-2f, -0x1.8c37a4p-2f, -0x1.8b7e36p-2f, + -0x1.8ac4b8p-2f, -0x1.8a0b2cp-2f, -0x1.89519p-2f, -0x1.8897e4p-2f, -0x1.87de2ap-2f, -0x1.872462p-2f, + -0x1.866a88p-2f, -0x1.85b0a2p-2f, -0x1.84f6aap-2f, -0x1.843ca6p-2f, -0x1.83829p-2f, -0x1.82c86ep-2f, + -0x1.820e3cp-2f, -0x1.8153fap-2f, -0x1.8099aap-2f, -0x1.7fdf4ap-2f, -0x1.7f24dep-2f, -0x1.7e6a6p-2f, + -0x1.7dafd6p-2f, -0x1.7cf53cp-2f, -0x1.7c3a94p-2f, -0x1.7b7fdcp-2f, -0x1.7ac516p-2f, -0x1.7a0a42p-2f, + -0x1.794f5ep-2f, -0x1.78946cp-2f, -0x1.77d96cp-2f, -0x1.771e5ep-2f, -0x1.76634p-2f, -0x1.75a816p-2f, + -0x1.74ecdcp-2f, -0x1.743194p-2f, -0x1.73763cp-2f, -0x1.72bad8p-2f, -0x1.71ff64p-2f, -0x1.7143e2p-2f, + -0x1.708854p-2f, -0x1.6fccb6p-2f, -0x1.6f1108p-2f, -0x1.6e554ep-2f, -0x1.6d9986p-2f, -0x1.6cddbp-2f, + -0x1.6c21ccp-2f, -0x1.6b65d8p-2f, -0x1.6aa9d8p-2f, -0x1.69edcap-2f, -0x1.6931acp-2f, -0x1.687582p-2f, + -0x1.67b94ap-2f, -0x1.66fd04p-2f, -0x1.6640bp-2f, -0x1.65844ep-2f, -0x1.64c7dep-2f, -0x1.640b6p-2f, + -0x1.634ed6p-2f, -0x1.62923cp-2f, -0x1.61d596p-2f, -0x1.6118e2p-2f, -0x1.605c2p-2f, -0x1.5f9f5p-2f, + -0x1.5ee274p-2f, -0x1.5e258ap-2f, -0x1.5d6892p-2f, -0x1.5cab8cp-2f, -0x1.5bee78p-2f, -0x1.5b3158p-2f, + -0x1.5a742ap-2f, -0x1.59b6fp-2f, -0x1.58f9a8p-2f, -0x1.583c52p-2f, -0x1.577eeep-2f, -0x1.56c17ep-2f, + -0x1.560402p-2f, -0x1.554676p-2f, -0x1.5488dep-2f, -0x1.53cb3ap-2f, -0x1.530d88p-2f, -0x1.524fcap-2f, + -0x1.5191fcp-2f, -0x1.50d424p-2f, -0x1.50163ep-2f, -0x1.4f584ap-2f, -0x1.4e9a4ap-2f, -0x1.4ddc3ep-2f, + -0x1.4d1e24p-2f, -0x1.4c5ffep-2f, -0x1.4ba1cap-2f, -0x1.4ae38ap-2f, -0x1.4a253ep-2f, -0x1.4966e4p-2f, + -0x1.48a87ep-2f, -0x1.47ea0ap-2f, -0x1.472b8ap-2f, -0x1.466cfep-2f, -0x1.45ae66p-2f, -0x1.44efcp-2f, + -0x1.44310ep-2f, -0x1.43725p-2f, -0x1.42b384p-2f, -0x1.41f4aep-2f, -0x1.4135cap-2f, -0x1.4076dap-2f, + -0x1.3fb7dcp-2f, -0x1.3ef8d4p-2f, -0x1.3e39bep-2f, -0x1.3d7a9ep-2f, -0x1.3cbb7p-2f, -0x1.3bfc36p-2f, + -0x1.3b3cfp-2f, -0x1.3a7d9ep-2f, -0x1.39be4p-2f, -0x1.38fed4p-2f, -0x1.383f5ep-2f, -0x1.377fdcp-2f, + -0x1.36c04ep-2f, -0x1.3600b2p-2f, -0x1.35410cp-2f, -0x1.34815ap-2f, -0x1.33c19cp-2f, -0x1.3301d2p-2f, + -0x1.3241fcp-2f, -0x1.31821ap-2f, -0x1.30c22cp-2f, -0x1.300232p-2f, -0x1.2f422ep-2f, -0x1.2e821cp-2f, + -0x1.2dc2p-2f, -0x1.2d01d8p-2f, -0x1.2c41a4p-2f, -0x1.2b8166p-2f, -0x1.2ac11ap-2f, -0x1.2a00c4p-2f, + -0x1.294062p-2f, -0x1.287ff6p-2f, -0x1.27bf7ep-2f, -0x1.26fefap-2f, -0x1.263e6ap-2f, -0x1.257dcep-2f, + -0x1.24bd28p-2f, -0x1.23fc78p-2f, -0x1.233bbap-2f, -0x1.227af2p-2f, -0x1.21ba2p-2f, -0x1.20f942p-2f, + -0x1.203858p-2f, -0x1.1f7764p-2f, -0x1.1eb664p-2f, -0x1.1df55ap-2f, -0x1.1d3444p-2f, -0x1.1c7324p-2f, + -0x1.1bb1f8p-2f, -0x1.1af0c2p-2f, -0x1.1a2f8p-2f, -0x1.196e34p-2f, -0x1.18acdcp-2f, -0x1.17eb7ap-2f, + -0x1.172a0ep-2f, -0x1.166896p-2f, -0x1.15a714p-2f, -0x1.14e586p-2f, -0x1.1423eep-2f, -0x1.13624cp-2f, + -0x1.12a0ap-2f, -0x1.11dee8p-2f, -0x1.111d26p-2f, -0x1.105b5ap-2f, -0x1.0f9982p-2f, -0x1.0ed7ap-2f, + -0x1.0e15b4p-2f, -0x1.0d53bep-2f, -0x1.0c91bep-2f, -0x1.0bcfb2p-2f, -0x1.0b0d9cp-2f, -0x1.0a4b7ep-2f, + -0x1.098954p-2f, -0x1.08c71ep-2f, -0x1.0804ep-2f, -0x1.074298p-2f, -0x1.068044p-2f, -0x1.05bde8p-2f, + -0x1.04fb8p-2f, -0x1.04391p-2f, -0x1.037694p-2f, -0x1.02b41p-2f, -0x1.01f18p-2f, -0x1.012ee8p-2f, + -0x1.006c44p-2f, -0x1.ff533p-3f, -0x1.fdcdc2p-3f, -0x1.fc484p-3f, -0x1.fac2acp-3f, -0x1.f93d04p-3f, + -0x1.f7b748p-3f, -0x1.f63178p-3f, -0x1.f4ab96p-3f, -0x1.f325ap-3f, -0x1.f19f98p-3f, -0x1.f0197cp-3f, + -0x1.ee934cp-3f, -0x1.ed0d0ap-3f, -0x1.eb86b4p-3f, -0x1.ea004cp-3f, -0x1.e879dp-3f, -0x1.e6f342p-3f, + -0x1.e56ca2p-3f, -0x1.e3e5eep-3f, -0x1.e25f28p-3f, -0x1.e0d85p-3f, -0x1.df5164p-3f, -0x1.ddca66p-3f, + -0x1.dc4356p-3f, -0x1.dabc34p-3f, -0x1.d934fep-3f, -0x1.d7adb8p-3f, -0x1.d6265ep-3f, -0x1.d49ef2p-3f, + -0x1.d31774p-3f, -0x1.d18fe6p-3f, -0x1.d00844p-3f, -0x1.ce809p-3f, -0x1.ccf8ccp-3f, -0x1.cb70f4p-3f, + -0x1.c9e90cp-3f, -0x1.c86112p-3f, -0x1.c6d906p-3f, -0x1.c550e8p-3f, -0x1.c3c8b8p-3f, -0x1.c24078p-3f, + -0x1.c0b826p-3f, -0x1.bf2fc4p-3f, -0x1.bda75p-3f, -0x1.bc1ecap-3f, -0x1.ba9634p-3f, -0x1.b90d8cp-3f, + -0x1.b784d4p-3f, -0x1.b5fc0ap-3f, -0x1.b4732ep-3f, -0x1.b2ea44p-3f, -0x1.b16148p-3f, -0x1.afd83ap-3f, + -0x1.ae4f1ep-3f, -0x1.acc5fp-3f, -0x1.ab3cbp-3f, -0x1.a9b362p-3f, -0x1.a82a02p-3f, -0x1.a6a092p-3f, + -0x1.a51712p-3f, -0x1.a38d82p-3f, -0x1.a203e2p-3f, -0x1.a07a32p-3f, -0x1.9ef07p-3f, -0x1.9d66ap-3f, + -0x1.9bdccp-3f, -0x1.9a52cep-3f, -0x1.98c8cep-3f, -0x1.973ebep-3f, -0x1.95b49ep-3f, -0x1.942a7p-3f, + -0x1.92a03p-3f, -0x1.9115e2p-3f, -0x1.8f8b84p-3f, -0x1.8e0116p-3f, -0x1.8c769ap-3f, -0x1.8aec0ep-3f, + -0x1.896172p-3f, -0x1.87d6c8p-3f, -0x1.864c0ep-3f, -0x1.84c146p-3f, -0x1.83366ep-3f, -0x1.81ab88p-3f, + -0x1.802092p-3f, -0x1.7e958ep-3f, -0x1.7d0a7cp-3f, -0x1.7b7f5ap-3f, -0x1.79f42ap-3f, -0x1.7868ecp-3f, + -0x1.76dd9ep-3f, -0x1.755242p-3f, -0x1.73c6d8p-3f, -0x1.723b6p-3f, -0x1.70afd8p-3f, -0x1.6f2444p-3f, + -0x1.6d98ap-3f, -0x1.6c0cfp-3f, -0x1.6a813p-3f, -0x1.68f564p-3f, -0x1.676988p-3f, -0x1.65dd9ep-3f, + -0x1.6451a8p-3f, -0x1.62c5a4p-3f, -0x1.613992p-3f, -0x1.5fad72p-3f, -0x1.5e2144p-3f, -0x1.5c950ap-3f, + -0x1.5b08c2p-3f, -0x1.597c6cp-3f, -0x1.57f008p-3f, -0x1.566398p-3f, -0x1.54d71ap-3f, -0x1.534a9p-3f, + -0x1.51bdf8p-3f, -0x1.503154p-3f, -0x1.4ea4a2p-3f, -0x1.4d17e4p-3f, -0x1.4b8b18p-3f, -0x1.49fe4p-3f, + -0x1.48715ap-3f, -0x1.46e46ap-3f, -0x1.45576cp-3f, -0x1.43ca6p-3f, -0x1.423d4ap-3f, -0x1.40b026p-3f, + -0x1.3f22f6p-3f, -0x1.3d95bap-3f, -0x1.3c087p-3f, -0x1.3a7b1cp-3f, -0x1.38edbcp-3f, -0x1.37604ep-3f, + -0x1.35d2d6p-3f, -0x1.34455p-3f, -0x1.32b7cp-3f, -0x1.312a22p-3f, -0x1.2f9c7ap-3f, -0x1.2e0ec6p-3f, + -0x1.2c8106p-3f, -0x1.2af33cp-3f, -0x1.296564p-3f, -0x1.27d782p-3f, -0x1.264994p-3f, -0x1.24bb9cp-3f, + -0x1.232d98p-3f, -0x1.219f88p-3f, -0x1.20116ep-3f, -0x1.1e8348p-3f, -0x1.1cf516p-3f, -0x1.1b66dap-3f, + -0x1.19d894p-3f, -0x1.184a42p-3f, -0x1.16bbe6p-3f, -0x1.152d7ep-3f, -0x1.139f0cp-3f, -0x1.12109p-3f, + -0x1.10820ap-3f, -0x1.0ef378p-3f, -0x1.0d64dcp-3f, -0x1.0bd636p-3f, -0x1.0a4784p-3f, -0x1.08b8cap-3f, + -0x1.072a04p-3f, -0x1.059b36p-3f, -0x1.040c5cp-3f, -0x1.027d78p-3f, -0x1.00ee8ap-3f, -0x1.febf28p-4f, + -0x1.fba124p-4f, -0x1.f8830ep-4f, -0x1.f564e6p-4f, -0x1.f246a8p-4f, -0x1.ef2858p-4f, -0x1.ec09f6p-4f, + -0x1.e8eb8p-4f, -0x1.e5ccf8p-4f, -0x1.e2ae5cp-4f, -0x1.df8faep-4f, -0x1.dc70ecp-4f, -0x1.d9521ap-4f, + -0x1.d63334p-4f, -0x1.d3143ep-4f, -0x1.cff534p-4f, -0x1.ccd618p-4f, -0x1.c9b6ecp-4f, -0x1.c697acp-4f, + -0x1.c3785cp-4f, -0x1.c058fap-4f, -0x1.bd3988p-4f, -0x1.ba1a04p-4f, -0x1.b6fa6ep-4f, -0x1.b3dac8p-4f, + -0x1.b0bb12p-4f, -0x1.ad9b4ap-4f, -0x1.aa7b72p-4f, -0x1.a75b8ap-4f, -0x1.a43b9p-4f, -0x1.a11b88p-4f, + -0x1.9dfb6ep-4f, -0x1.9adb46p-4f, -0x1.97bb0cp-4f, -0x1.949ac4p-4f, -0x1.917a6cp-4f, -0x1.8e5a04p-4f, + -0x1.8b398cp-4f, -0x1.881906p-4f, -0x1.84f872p-4f, -0x1.81d7ccp-4f, -0x1.7eb71ap-4f, -0x1.7b9658p-4f, + -0x1.787586p-4f, -0x1.7554a8p-4f, -0x1.7233bap-4f, -0x1.6f12bep-4f, -0x1.6bf1b4p-4f, -0x1.68d09cp-4f, + -0x1.65af76p-4f, -0x1.628e42p-4f, -0x1.5f6dp-4f, -0x1.5c4bb2p-4f, -0x1.592a56p-4f, -0x1.5608ecp-4f, + -0x1.52e774p-4f, -0x1.4fc5fp-4f, -0x1.4ca46p-4f, -0x1.4982c2p-4f, -0x1.466118p-4f, -0x1.433f6p-4f, + -0x1.401d9ep-4f, -0x1.3cfbcep-4f, -0x1.39d9f2p-4f, -0x1.36b80ap-4f, -0x1.339614p-4f, -0x1.307414p-4f, + -0x1.2d520ap-4f, -0x1.2a2ff2p-4f, -0x1.270dcep-4f, -0x1.23ebap-4f, -0x1.20c968p-4f, -0x1.1da722p-4f, + -0x1.1a84d4p-4f, -0x1.176278p-4f, -0x1.144014p-4f, -0x1.111da4p-4f, -0x1.0dfb28p-4f, -0x1.0ad8a4p-4f, + -0x1.07b614p-4f, -0x1.04937cp-4f, -0x1.0170d8p-4f, -0x1.fc9c56p-5f, -0x1.f656e8p-5f, -0x1.f01166p-5f, + -0x1.e9cbd2p-5f, -0x1.e3862ap-5f, -0x1.dd407p-5f, -0x1.d6faa2p-5f, -0x1.d0b4c4p-5f, -0x1.ca6ed4p-5f, + -0x1.c428d2p-5f, -0x1.bde2bep-5f, -0x1.b79c98p-5f, -0x1.b15662p-5f, -0x1.ab101cp-5f, -0x1.a4c9c4p-5f, + -0x1.9e835ep-5f, -0x1.983ce6p-5f, -0x1.91f66p-5f, -0x1.8bafc8p-5f, -0x1.856922p-5f, -0x1.7f226ep-5f, + -0x1.78dbaap-5f, -0x1.7294d8p-5f, -0x1.6c4df8p-5f, -0x1.66070ap-5f, -0x1.5fc00ep-5f, -0x1.597904p-5f, + -0x1.5331ecp-5f, -0x1.4ceac8p-5f, -0x1.46a396p-5f, -0x1.405c5ap-5f, -0x1.3a151p-5f, -0x1.33cdbap-5f, + -0x1.2d8658p-5f, -0x1.273eeap-5f, -0x1.20f77p-5f, -0x1.1aafecp-5f, -0x1.14685ep-5f, -0x1.0e20c4p-5f, + -0x1.07d92p-5f, -0x1.019172p-5f, -0x1.f69374p-6f, -0x1.ea03fp-6f, -0x1.dd7458p-6f, -0x1.d0e4bp-6f, + -0x1.c454f4p-6f, -0x1.b7c528p-6f, -0x1.ab354cp-6f, -0x1.9ea55ep-6f, -0x1.92156p-6f, -0x1.858552p-6f, + -0x1.78f536p-6f, -0x1.6c650cp-6f, -0x1.5fd4d2p-6f, -0x1.53448cp-6f, -0x1.46b438p-6f, -0x1.3a23d8p-6f, + -0x1.2d936cp-6f, -0x1.2102f4p-6f, -0x1.14727p-6f, -0x1.07e1e4p-6f, -0x1.f6a296p-7f, -0x1.dd8154p-7f, + -0x1.c45ffep-7f, -0x1.ab3e98p-7f, -0x1.921d2p-7f, -0x1.78fb98p-7f, -0x1.5fda04p-7f, -0x1.46b86p-7f, + -0x1.2d96bp-7f, -0x1.1474f6p-7f, -0x1.f6a66p-8f, -0x1.c462cp-8f, -0x1.921f1p-8f, -0x1.5fdb5p-8f, + -0x1.2d9782p-8f, -0x1.f6a752p-9f, -0x1.921f8cp-9f, -0x1.2d97b6p-9f, -0x1.921faap-10f, -0x1.921fb2p-11f, + -0x1.a79394p-53f, 0x1.921fb2p-11f, 0x1.921faap-10f, 0x1.2d97b6p-9f, 0x1.921f8cp-9f, 0x1.f6a752p-9f, + 0x1.2d9782p-8f, 0x1.5fdb5p-8f, 0x1.921f1p-8f, 0x1.c462cp-8f, 0x1.f6a66p-8f, 0x1.1474f6p-7f, + 0x1.2d96bp-7f, 0x1.46b86p-7f, 0x1.5fda04p-7f, 0x1.78fb98p-7f, 0x1.921d2p-7f, 0x1.ab3e98p-7f, + 0x1.c45ffep-7f, 0x1.dd8154p-7f, 0x1.f6a296p-7f, 0x1.07e1e4p-6f, 0x1.14727p-6f, 0x1.2102f4p-6f, + 0x1.2d936cp-6f, 0x1.3a23d8p-6f, 0x1.46b438p-6f, 0x1.53448cp-6f, 0x1.5fd4d2p-6f, 0x1.6c650cp-6f, + 0x1.78f536p-6f, 0x1.858552p-6f, 0x1.92156p-6f, 0x1.9ea55ep-6f, 0x1.ab354cp-6f, 0x1.b7c528p-6f, + 0x1.c454f4p-6f, 0x1.d0e4bp-6f, 0x1.dd7458p-6f, 0x1.ea03fp-6f, 0x1.f69374p-6f, 0x1.019172p-5f, + 0x1.07d92p-5f, 0x1.0e20c4p-5f, 0x1.14685ep-5f, 0x1.1aafecp-5f, 0x1.20f77p-5f, 0x1.273eeap-5f, + 0x1.2d8658p-5f, 0x1.33cdbap-5f, 0x1.3a151p-5f, 0x1.405c5ap-5f, 0x1.46a396p-5f, 0x1.4ceac8p-5f, + 0x1.5331ecp-5f, 0x1.597904p-5f, 0x1.5fc00ep-5f, 0x1.66070ap-5f, 0x1.6c4df8p-5f, 0x1.7294d8p-5f, + 0x1.78dbaap-5f, 0x1.7f226ep-5f, 0x1.856922p-5f, 0x1.8bafc8p-5f, 0x1.91f66p-5f, 0x1.983ce6p-5f, + 0x1.9e835ep-5f, 0x1.a4c9c4p-5f, 0x1.ab101cp-5f, 0x1.b15662p-5f, 0x1.b79c98p-5f, 0x1.bde2bep-5f, + 0x1.c428d2p-5f, 0x1.ca6ed4p-5f, 0x1.d0b4c4p-5f, 0x1.d6faa2p-5f, 0x1.dd407p-5f, 0x1.e3862ap-5f, + 0x1.e9cbd2p-5f, 0x1.f01166p-5f, 0x1.f656e8p-5f, 0x1.fc9c56p-5f, 0x1.0170d8p-4f, 0x1.04937cp-4f, + 0x1.07b614p-4f, 0x1.0ad8a4p-4f, 0x1.0dfb28p-4f, 0x1.111da4p-4f, 0x1.144014p-4f, 0x1.176278p-4f, + 0x1.1a84d4p-4f, 0x1.1da722p-4f, 0x1.20c968p-4f, 0x1.23ebap-4f, 0x1.270dcep-4f, 0x1.2a2ff2p-4f, + 0x1.2d520ap-4f, 0x1.307414p-4f, 0x1.339614p-4f, 0x1.36b80ap-4f, 0x1.39d9f2p-4f, 0x1.3cfbcep-4f, + 0x1.401d9ep-4f, 0x1.433f6p-4f, 0x1.466118p-4f, 0x1.4982c2p-4f, 0x1.4ca46p-4f, 0x1.4fc5fp-4f, + 0x1.52e774p-4f, 0x1.5608ecp-4f, 0x1.592a56p-4f, 0x1.5c4bb2p-4f, 0x1.5f6dp-4f, 0x1.628e42p-4f, + 0x1.65af76p-4f, 0x1.68d09cp-4f, 0x1.6bf1b4p-4f, 0x1.6f12bep-4f, 0x1.7233bap-4f, 0x1.7554a8p-4f, + 0x1.787586p-4f, 0x1.7b9658p-4f, 0x1.7eb71ap-4f, 0x1.81d7ccp-4f, 0x1.84f872p-4f, 0x1.881906p-4f, + 0x1.8b398cp-4f, 0x1.8e5a04p-4f, 0x1.917a6cp-4f, 0x1.949ac4p-4f, 0x1.97bb0cp-4f, 0x1.9adb46p-4f, + 0x1.9dfb6ep-4f, 0x1.a11b88p-4f, 0x1.a43b9p-4f, 0x1.a75b8ap-4f, 0x1.aa7b72p-4f, 0x1.ad9b4ap-4f, + 0x1.b0bb12p-4f, 0x1.b3dac8p-4f, 0x1.b6fa6ep-4f, 0x1.ba1a04p-4f, 0x1.bd3988p-4f, 0x1.c058fap-4f, + 0x1.c3785cp-4f, 0x1.c697acp-4f, 0x1.c9b6ecp-4f, 0x1.ccd618p-4f, 0x1.cff534p-4f, 0x1.d3143ep-4f, + 0x1.d63334p-4f, 0x1.d9521ap-4f, 0x1.dc70ecp-4f, 0x1.df8faep-4f, 0x1.e2ae5cp-4f, 0x1.e5ccf8p-4f, + 0x1.e8eb8p-4f, 0x1.ec09f6p-4f, 0x1.ef2858p-4f, 0x1.f246a8p-4f, 0x1.f564e6p-4f, 0x1.f8830ep-4f, + 0x1.fba124p-4f, 0x1.febf28p-4f, 0x1.00ee8ap-3f, 0x1.027d78p-3f, 0x1.040c5cp-3f, 0x1.059b36p-3f, + 0x1.072a04p-3f, 0x1.08b8cap-3f, 0x1.0a4784p-3f, 0x1.0bd636p-3f, 0x1.0d64dcp-3f, 0x1.0ef378p-3f, + 0x1.10820ap-3f, 0x1.12109p-3f, 0x1.139f0cp-3f, 0x1.152d7ep-3f, 0x1.16bbe6p-3f, 0x1.184a42p-3f, + 0x1.19d894p-3f, 0x1.1b66dap-3f, 0x1.1cf516p-3f, 0x1.1e8348p-3f, 0x1.20116ep-3f, 0x1.219f88p-3f, + 0x1.232d98p-3f, 0x1.24bb9cp-3f, 0x1.264994p-3f, 0x1.27d782p-3f, 0x1.296564p-3f, 0x1.2af33cp-3f, + 0x1.2c8106p-3f, 0x1.2e0ec6p-3f, 0x1.2f9c7ap-3f, 0x1.312a22p-3f, 0x1.32b7cp-3f, 0x1.34455p-3f, + 0x1.35d2d6p-3f, 0x1.37604ep-3f, 0x1.38edbcp-3f, 0x1.3a7b1cp-3f, 0x1.3c087p-3f, 0x1.3d95bap-3f, + 0x1.3f22f6p-3f, 0x1.40b026p-3f, 0x1.423d4ap-3f, 0x1.43ca6p-3f, 0x1.45576cp-3f, 0x1.46e46ap-3f, + 0x1.48715ap-3f, 0x1.49fe4p-3f, 0x1.4b8b18p-3f, 0x1.4d17e4p-3f, 0x1.4ea4a2p-3f, 0x1.503154p-3f, + 0x1.51bdf8p-3f, 0x1.534a9p-3f, 0x1.54d71ap-3f, 0x1.566398p-3f, 0x1.57f008p-3f, 0x1.597c6cp-3f, + 0x1.5b08c2p-3f, 0x1.5c950ap-3f, 0x1.5e2144p-3f, 0x1.5fad72p-3f, 0x1.613992p-3f, 0x1.62c5a4p-3f, + 0x1.6451a8p-3f, 0x1.65dd9ep-3f, 0x1.676988p-3f, 0x1.68f564p-3f, 0x1.6a813p-3f, 0x1.6c0cfp-3f, + 0x1.6d98ap-3f, 0x1.6f2444p-3f, 0x1.70afd8p-3f, 0x1.723b6p-3f, 0x1.73c6d8p-3f, 0x1.755242p-3f, + 0x1.76dd9ep-3f, 0x1.7868ecp-3f, 0x1.79f42ap-3f, 0x1.7b7f5ap-3f, 0x1.7d0a7cp-3f, 0x1.7e958ep-3f, + 0x1.802092p-3f, 0x1.81ab88p-3f, 0x1.83366ep-3f, 0x1.84c146p-3f, 0x1.864c0ep-3f, 0x1.87d6c8p-3f, + 0x1.896172p-3f, 0x1.8aec0ep-3f, 0x1.8c769ap-3f, 0x1.8e0116p-3f, 0x1.8f8b84p-3f, 0x1.9115e2p-3f, + 0x1.92a03p-3f, 0x1.942a7p-3f, 0x1.95b49ep-3f, 0x1.973ebep-3f, 0x1.98c8cep-3f, 0x1.9a52cep-3f, + 0x1.9bdccp-3f, 0x1.9d66ap-3f, 0x1.9ef07p-3f, 0x1.a07a32p-3f, 0x1.a203e2p-3f, 0x1.a38d82p-3f, + 0x1.a51712p-3f, 0x1.a6a092p-3f, 0x1.a82a02p-3f, 0x1.a9b362p-3f, 0x1.ab3cbp-3f, 0x1.acc5fp-3f, + 0x1.ae4f1ep-3f, 0x1.afd83ap-3f, 0x1.b16148p-3f, 0x1.b2ea44p-3f, 0x1.b4732ep-3f, 0x1.b5fc0ap-3f, + 0x1.b784d4p-3f, 0x1.b90d8cp-3f, 0x1.ba9634p-3f, 0x1.bc1ecap-3f, 0x1.bda75p-3f, 0x1.bf2fc4p-3f, + 0x1.c0b826p-3f, 0x1.c24078p-3f, 0x1.c3c8b8p-3f, 0x1.c550e8p-3f, 0x1.c6d906p-3f, 0x1.c86112p-3f, + 0x1.c9e90cp-3f, 0x1.cb70f4p-3f, 0x1.ccf8ccp-3f, 0x1.ce809p-3f, 0x1.d00844p-3f, 0x1.d18fe6p-3f, + 0x1.d31774p-3f, 0x1.d49ef2p-3f, 0x1.d6265ep-3f, 0x1.d7adb8p-3f, 0x1.d934fep-3f, 0x1.dabc34p-3f, + 0x1.dc4356p-3f, 0x1.ddca66p-3f, 0x1.df5164p-3f, 0x1.e0d85p-3f, 0x1.e25f28p-3f, 0x1.e3e5eep-3f, + 0x1.e56ca2p-3f, 0x1.e6f342p-3f, 0x1.e879dp-3f, 0x1.ea004cp-3f, 0x1.eb86b4p-3f, 0x1.ed0d0ap-3f, + 0x1.ee934cp-3f, 0x1.f0197cp-3f, 0x1.f19f98p-3f, 0x1.f325ap-3f, 0x1.f4ab96p-3f, 0x1.f63178p-3f, + 0x1.f7b748p-3f, 0x1.f93d04p-3f, 0x1.fac2acp-3f, 0x1.fc484p-3f, 0x1.fdcdc2p-3f, 0x1.ff533p-3f, + 0x1.006c44p-2f, 0x1.012ee8p-2f, 0x1.01f18p-2f, 0x1.02b41p-2f, 0x1.037694p-2f, 0x1.04391p-2f, + 0x1.04fb8p-2f, 0x1.05bde8p-2f, 0x1.068044p-2f, 0x1.074298p-2f, 0x1.0804ep-2f, 0x1.08c71ep-2f, + 0x1.098954p-2f, 0x1.0a4b7ep-2f, 0x1.0b0d9cp-2f, 0x1.0bcfb2p-2f, 0x1.0c91bep-2f, 0x1.0d53bep-2f, + 0x1.0e15b4p-2f, 0x1.0ed7ap-2f, 0x1.0f9982p-2f, 0x1.105b5ap-2f, 0x1.111d26p-2f, 0x1.11dee8p-2f, + 0x1.12a0ap-2f, 0x1.13624cp-2f, 0x1.1423eep-2f, 0x1.14e586p-2f, 0x1.15a714p-2f, 0x1.166896p-2f, + 0x1.172a0ep-2f, 0x1.17eb7ap-2f, 0x1.18acdcp-2f, 0x1.196e34p-2f, 0x1.1a2f8p-2f, 0x1.1af0c2p-2f, + 0x1.1bb1f8p-2f, 0x1.1c7324p-2f, 0x1.1d3444p-2f, 0x1.1df55ap-2f, 0x1.1eb664p-2f, 0x1.1f7764p-2f, + 0x1.203858p-2f, 0x1.20f942p-2f, 0x1.21ba2p-2f, 0x1.227af2p-2f, 0x1.233bbap-2f, 0x1.23fc78p-2f, + 0x1.24bd28p-2f, 0x1.257dcep-2f, 0x1.263e6ap-2f, 0x1.26fefap-2f, 0x1.27bf7ep-2f, 0x1.287ff6p-2f, + 0x1.294062p-2f, 0x1.2a00c4p-2f, 0x1.2ac11ap-2f, 0x1.2b8166p-2f, 0x1.2c41a4p-2f, 0x1.2d01d8p-2f, + 0x1.2dc2p-2f, 0x1.2e821cp-2f, 0x1.2f422ep-2f, 0x1.300232p-2f, 0x1.30c22cp-2f, 0x1.31821ap-2f, + 0x1.3241fcp-2f, 0x1.3301d2p-2f, 0x1.33c19cp-2f, 0x1.34815ap-2f, 0x1.35410cp-2f, 0x1.3600b2p-2f, + 0x1.36c04ep-2f, 0x1.377fdcp-2f, 0x1.383f5ep-2f, 0x1.38fed4p-2f, 0x1.39be4p-2f, 0x1.3a7d9ep-2f, + 0x1.3b3cfp-2f, 0x1.3bfc36p-2f, 0x1.3cbb7p-2f, 0x1.3d7a9ep-2f, 0x1.3e39bep-2f, 0x1.3ef8d4p-2f, + 0x1.3fb7dcp-2f, 0x1.4076dap-2f, 0x1.4135cap-2f, 0x1.41f4aep-2f, 0x1.42b384p-2f, 0x1.43725p-2f, + 0x1.44310ep-2f, 0x1.44efcp-2f, 0x1.45ae66p-2f, 0x1.466cfep-2f, 0x1.472b8ap-2f, 0x1.47ea0ap-2f, + 0x1.48a87ep-2f, 0x1.4966e4p-2f, 0x1.4a253ep-2f, 0x1.4ae38ap-2f, 0x1.4ba1cap-2f, 0x1.4c5ffep-2f, + 0x1.4d1e24p-2f, 0x1.4ddc3ep-2f, 0x1.4e9a4ap-2f, 0x1.4f584ap-2f, 0x1.50163ep-2f, 0x1.50d424p-2f, + 0x1.5191fcp-2f, 0x1.524fcap-2f, 0x1.530d88p-2f, 0x1.53cb3ap-2f, 0x1.5488dep-2f, 0x1.554676p-2f, + 0x1.560402p-2f, 0x1.56c17ep-2f, 0x1.577eeep-2f, 0x1.583c52p-2f, 0x1.58f9a8p-2f, 0x1.59b6fp-2f, + 0x1.5a742ap-2f, 0x1.5b3158p-2f, 0x1.5bee78p-2f, 0x1.5cab8cp-2f, 0x1.5d6892p-2f, 0x1.5e258ap-2f, + 0x1.5ee274p-2f, 0x1.5f9f5p-2f, 0x1.605c2p-2f, 0x1.6118e2p-2f, 0x1.61d596p-2f, 0x1.62923cp-2f, + 0x1.634ed6p-2f, 0x1.640b6p-2f, 0x1.64c7dep-2f, 0x1.65844ep-2f, 0x1.6640bp-2f, 0x1.66fd04p-2f, + 0x1.67b94ap-2f, 0x1.687582p-2f, 0x1.6931acp-2f, 0x1.69edcap-2f, 0x1.6aa9d8p-2f, 0x1.6b65d8p-2f, + 0x1.6c21ccp-2f, 0x1.6cddbp-2f, 0x1.6d9986p-2f, 0x1.6e554ep-2f, 0x1.6f1108p-2f, 0x1.6fccb6p-2f, + 0x1.708854p-2f, 0x1.7143e2p-2f, 0x1.71ff64p-2f, 0x1.72bad8p-2f, 0x1.73763cp-2f, 0x1.743194p-2f, + 0x1.74ecdcp-2f, 0x1.75a816p-2f, 0x1.76634p-2f, 0x1.771e5ep-2f, 0x1.77d96cp-2f, 0x1.78946cp-2f, + 0x1.794f5ep-2f, 0x1.7a0a42p-2f, 0x1.7ac516p-2f, 0x1.7b7fdcp-2f, 0x1.7c3a94p-2f, 0x1.7cf53cp-2f, + 0x1.7dafd6p-2f, 0x1.7e6a6p-2f, 0x1.7f24dep-2f, 0x1.7fdf4ap-2f, 0x1.8099aap-2f, 0x1.8153fap-2f, + 0x1.820e3cp-2f, 0x1.82c86ep-2f, 0x1.83829p-2f, 0x1.843ca6p-2f, 0x1.84f6aap-2f, 0x1.85b0a2p-2f, + 0x1.866a88p-2f, 0x1.872462p-2f, 0x1.87de2ap-2f, 0x1.8897e4p-2f, 0x1.89519p-2f, 0x1.8a0b2cp-2f, + 0x1.8ac4b8p-2f, 0x1.8b7e36p-2f, 0x1.8c37a4p-2f, 0x1.8cf104p-2f, 0x1.8daa52p-2f, 0x1.8e6394p-2f, + 0x1.8f1cc4p-2f, 0x1.8fd5e6p-2f, 0x1.908ef8p-2f, 0x1.9147fap-2f, 0x1.9200eep-2f, 0x1.92b9d2p-2f, + 0x1.9372a6p-2f, 0x1.942b6ap-2f, 0x1.94e42p-2f, 0x1.959cc6p-2f, 0x1.96555cp-2f, 0x1.970de2p-2f, + 0x1.97c658p-2f, 0x1.987ecp-2f, 0x1.993716p-2f, 0x1.99ef5ep-2f, 0x1.9aa794p-2f, 0x1.9b5fbcp-2f, + 0x1.9c17d4p-2f, 0x1.9ccfdcp-2f, 0x1.9d87d4p-2f, 0x1.9e3fbcp-2f, 0x1.9ef794p-2f, 0x1.9faf5cp-2f, + 0x1.a06714p-2f, 0x1.a11ebcp-2f, 0x1.a1d654p-2f, 0x1.a28ddcp-2f, 0x1.a34554p-2f, 0x1.a3fcbcp-2f, + 0x1.a4b412p-2f, 0x1.a56b5ap-2f, 0x1.a6229p-2f, 0x1.a6d9b6p-2f, 0x1.a790cep-2f, 0x1.a847d4p-2f, + 0x1.a8fec8p-2f, 0x1.a9b5aep-2f, 0x1.aa6c82p-2f, 0x1.ab2348p-2f, 0x1.abd9fap-2f, 0x1.ac909ep-2f, + 0x1.ad4732p-2f, 0x1.adfdb4p-2f, 0x1.aeb426p-2f, 0x1.af6a86p-2f, 0x1.b020d6p-2f, 0x1.b0d716p-2f, + 0x1.b18d46p-2f, 0x1.b24364p-2f, 0x1.b2f972p-2f, 0x1.b3af6ep-2f, 0x1.b4655ap-2f, 0x1.b51b36p-2f, + 0x1.b5d1p-2f, 0x1.b686bap-2f, 0x1.b73c62p-2f, 0x1.b7f1fap-2f, 0x1.b8a782p-2f, 0x1.b95cf8p-2f, + 0x1.ba125cp-2f, 0x1.bac7bp-2f, 0x1.bb7cf2p-2f, 0x1.bc3224p-2f, 0x1.bce744p-2f, 0x1.bd9c54p-2f, + 0x1.be5152p-2f, 0x1.bf063ep-2f, 0x1.bfbb1ap-2f, 0x1.c06fe4p-2f, 0x1.c1249ep-2f, 0x1.c1d946p-2f, + 0x1.c28ddcp-2f, 0x1.c3426p-2f, 0x1.c3f6d4p-2f, 0x1.c4ab36p-2f, 0x1.c55f88p-2f, 0x1.c613c6p-2f, + 0x1.c6c7f4p-2f, 0x1.c77c1p-2f, 0x1.c8301cp-2f, 0x1.c8e414p-2f, 0x1.c997fcp-2f, 0x1.ca4bd2p-2f, + 0x1.caff96p-2f, 0x1.cbb348p-2f, 0x1.cc66eap-2f, 0x1.cd1a78p-2f, 0x1.cdcdf6p-2f, 0x1.ce8162p-2f, + 0x1.cf34bap-2f, 0x1.cfe802p-2f, 0x1.d09b38p-2f, 0x1.d14e5cp-2f, 0x1.d2016ep-2f, 0x1.d2b46ep-2f, + 0x1.d3675cp-2f, 0x1.d41a38p-2f, 0x1.d4cd02p-2f, 0x1.d57fbap-2f, 0x1.d6326p-2f, 0x1.d6e4f4p-2f, + 0x1.d79776p-2f, 0x1.d849e6p-2f, 0x1.d8fc42p-2f, 0x1.d9ae8ep-2f, 0x1.da60c6p-2f, 0x1.db12ecp-2f, + 0x1.dbc5p-2f, 0x1.dc7702p-2f, 0x1.dd28f2p-2f, 0x1.dddacep-2f, 0x1.de8c98p-2f, 0x1.df3e5p-2f, + 0x1.dfeff6p-2f, 0x1.e0a18ap-2f, 0x1.e1530ap-2f, 0x1.e20478p-2f, 0x1.e2b5d4p-2f, 0x1.e3671cp-2f, + 0x1.e41852p-2f, 0x1.e4c976p-2f, 0x1.e57a86p-2f, 0x1.e62b84p-2f, 0x1.e6dc7p-2f, 0x1.e78d48p-2f, + 0x1.e83e0ep-2f, 0x1.e8eec2p-2f, 0x1.e99f62p-2f, 0x1.ea4ffp-2f, 0x1.eb006ap-2f, 0x1.ebb0dp-2f, + 0x1.ec6126p-2f, 0x1.ed1166p-2f, 0x1.edc196p-2f, 0x1.ee71bp-2f, 0x1.ef21b8p-2f, 0x1.efd1aep-2f, + 0x1.f0819p-2f, 0x1.f1316p-2f, 0x1.f1e11cp-2f, 0x1.f290c4p-2f, 0x1.f3405ap-2f, 0x1.f3efdcp-2f, + 0x1.f49f4ap-2f, 0x1.f54ea6p-2f, 0x1.f5fdeep-2f, 0x1.f6ad24p-2f, 0x1.f75c44p-2f, 0x1.f80b54p-2f, + 0x1.f8ba4ep-2f, 0x1.f96936p-2f, 0x1.fa1808p-2f, 0x1.fac6cap-2f, 0x1.fb7576p-2f, 0x1.fc240ep-2f, + 0x1.fcd294p-2f, 0x1.fd8106p-2f, 0x1.fe2f64p-2f, 0x1.feddbp-2f, 0x1.ff8be6p-2f, 0x1.001d04p-1f, + 0x1.00740cp-1f, 0x1.00cb0ap-1f, 0x1.0121fep-1f, 0x1.0178e8p-1f, 0x1.01cfc8p-1f, 0x1.02269ep-1f, + 0x1.027d6ap-1f, 0x1.02d42ep-1f, 0x1.032ae6p-1f, 0x1.038194p-1f, 0x1.03d838p-1f, 0x1.042ed2p-1f, + 0x1.048562p-1f, 0x1.04dbe8p-1f, 0x1.053264p-1f, 0x1.0588d6p-1f, 0x1.05df3ep-1f, 0x1.06359cp-1f, + 0x1.068bfp-1f, 0x1.06e23ap-1f, 0x1.07387ap-1f, 0x1.078eaep-1f, 0x1.07e4dap-1f, 0x1.083afcp-1f, + 0x1.089112p-1f, 0x1.08e71ep-1f, 0x1.093d22p-1f, 0x1.09931ap-1f, 0x1.09e908p-1f, 0x1.0a3eeap-1f, + 0x1.0a94c4p-1f, 0x1.0aea94p-1f, 0x1.0b4058p-1f, 0x1.0b9614p-1f, 0x1.0bebc4p-1f, 0x1.0c416ap-1f, + 0x1.0c9704p-1f, 0x1.0cec96p-1f, 0x1.0d421cp-1f, 0x1.0d979ap-1f, 0x1.0ded0cp-1f, 0x1.0e4274p-1f, + 0x1.0e97dp-1f, 0x1.0eed24p-1f, 0x1.0f426cp-1f, 0x1.0f97aap-1f, 0x1.0fecdep-1f, 0x1.104206p-1f, + 0x1.109724p-1f, 0x1.10ec38p-1f, 0x1.114142p-1f, 0x1.11964p-1f, 0x1.11eb36p-1f, 0x1.12402p-1f, + 0x1.1294fep-1f, 0x1.12e9d2p-1f, 0x1.133e9cp-1f, 0x1.13935cp-1f, 0x1.13e812p-1f, 0x1.143cbcp-1f, + 0x1.14915ap-1f, 0x1.14e5fp-1f, 0x1.153a7ap-1f, 0x1.158efap-1f, 0x1.15e36ep-1f, 0x1.1637d8p-1f, + 0x1.168c38p-1f, 0x1.16e08cp-1f, 0x1.1734d6p-1f, 0x1.178916p-1f, 0x1.17dd4ap-1f, 0x1.183174p-1f, + 0x1.188592p-1f, 0x1.18d9a6p-1f, 0x1.192daep-1f, 0x1.1981aep-1f, 0x1.19d5ap-1f, 0x1.1a298ap-1f, + 0x1.1a7d66p-1f, 0x1.1ad13ap-1f, 0x1.1b2502p-1f, 0x1.1b78bep-1f, 0x1.1bcc7p-1f, 0x1.1c2018p-1f, + 0x1.1c73b4p-1f, 0x1.1cc744p-1f, 0x1.1d1acap-1f, 0x1.1d6e46p-1f, 0x1.1dc1b6p-1f, 0x1.1e151cp-1f, + 0x1.1e6876p-1f, 0x1.1ebbc4p-1f, 0x1.1f0f08p-1f, 0x1.1f6242p-1f, 0x1.1fb57p-1f, 0x1.200892p-1f, + 0x1.205baap-1f, 0x1.20aeb6p-1f, 0x1.2101b8p-1f, 0x1.2154aep-1f, 0x1.21a79ap-1f, 0x1.21fa7ap-1f, + 0x1.224d4ep-1f, 0x1.22a018p-1f, 0x1.22f2d6p-1f, 0x1.23458ap-1f, 0x1.239832p-1f, 0x1.23eacep-1f, + 0x1.243d6p-1f, 0x1.248fe6p-1f, 0x1.24e26p-1f, 0x1.2534dp-1f, 0x1.258734p-1f, 0x1.25d98ep-1f, + 0x1.262bdcp-1f, 0x1.267e1ep-1f, 0x1.26d054p-1f, 0x1.27228p-1f, 0x1.2774ap-1f, 0x1.27c6b6p-1f, + 0x1.2818bep-1f, 0x1.286abcp-1f, 0x1.28bcbp-1f, 0x1.290e96p-1f, 0x1.296072p-1f, 0x1.29b242p-1f, + 0x1.2a0408p-1f, 0x1.2a55cp-1f, 0x1.2aa76ep-1f, 0x1.2af91p-1f, 0x1.2b4aa8p-1f, 0x1.2b9c32p-1f, + 0x1.2bedb2p-1f, 0x1.2c3f26p-1f, 0x1.2c908ep-1f, 0x1.2ce1ecp-1f, 0x1.2d333ep-1f, 0x1.2d8482p-1f, + 0x1.2dd5bcp-1f, 0x1.2e26ecp-1f, 0x1.2e780ep-1f, 0x1.2ec926p-1f, 0x1.2f1a3p-1f, 0x1.2f6b3p-1f, + 0x1.2fbc24p-1f, 0x1.300d0ep-1f, 0x1.305deap-1f, 0x1.30aebap-1f, 0x1.30ff8p-1f, 0x1.31503ap-1f, + 0x1.31a0e6p-1f, 0x1.31f188p-1f, 0x1.32421ep-1f, 0x1.3292aap-1f, 0x1.32e328p-1f, 0x1.33339ap-1f, + 0x1.3384p-1f, 0x1.33d45cp-1f, 0x1.3424aap-1f, 0x1.3474eep-1f, 0x1.34c526p-1f, 0x1.35155p-1f, + 0x1.35657p-1f, 0x1.35b584p-1f, 0x1.36058cp-1f, 0x1.365586p-1f, 0x1.36a576p-1f, 0x1.36f55ap-1f, + 0x1.374532p-1f, 0x1.3794fep-1f, 0x1.37e4bep-1f, 0x1.38347p-1f, 0x1.388418p-1f, 0x1.38d3b4p-1f, + 0x1.392344p-1f, 0x1.3972c6p-1f, 0x1.39c23ep-1f, 0x1.3a11aap-1f, 0x1.3a6108p-1f, 0x1.3ab05cp-1f, + 0x1.3affa2p-1f, 0x1.3b4edep-1f, 0x1.3b9e0cp-1f, 0x1.3bed2ep-1f, 0x1.3c3c44p-1f, 0x1.3c8b4ep-1f, + 0x1.3cda4cp-1f, 0x1.3d293ep-1f, 0x1.3d7824p-1f, 0x1.3dc6fcp-1f, 0x1.3e15cap-1f, 0x1.3e648ap-1f, + 0x1.3eb33ep-1f, 0x1.3f01e6p-1f, 0x1.3f5082p-1f, 0x1.3f9f12p-1f, 0x1.3fed96p-1f, 0x1.403c0cp-1f, + 0x1.408a76p-1f, 0x1.40d8d4p-1f, 0x1.412726p-1f, 0x1.41756cp-1f, 0x1.41c3a4p-1f, 0x1.4211d2p-1f, + 0x1.425ff2p-1f, 0x1.42ae06p-1f, 0x1.42fc0cp-1f, 0x1.434a08p-1f, 0x1.4397f6p-1f, 0x1.43e5d8p-1f, + 0x1.4433aep-1f, 0x1.448176p-1f, 0x1.44cf32p-1f, 0x1.451ce2p-1f, 0x1.456a86p-1f, 0x1.45b81cp-1f, + 0x1.4605a6p-1f, 0x1.465324p-1f, 0x1.46a096p-1f, 0x1.46edfap-1f, 0x1.473b52p-1f, 0x1.47889ep-1f, + 0x1.47d5dcp-1f, 0x1.48230ep-1f, 0x1.487034p-1f, 0x1.48bd4cp-1f, 0x1.490a58p-1f, 0x1.495758p-1f, + 0x1.49a44ap-1f, 0x1.49f13p-1f, 0x1.4a3e08p-1f, 0x1.4a8ad6p-1f, 0x1.4ad796p-1f, 0x1.4b2448p-1f, + 0x1.4b70eep-1f, 0x1.4bbd88p-1f, 0x1.4c0a14p-1f, 0x1.4c5694p-1f, 0x1.4ca308p-1f, 0x1.4cef6ep-1f, + 0x1.4d3bc6p-1f, 0x1.4d8814p-1f, 0x1.4dd454p-1f, 0x1.4e2086p-1f, 0x1.4e6cacp-1f, 0x1.4eb8c4p-1f, + 0x1.4f04dp-1f, 0x1.4f50dp-1f, 0x1.4f9cc2p-1f, 0x1.4fe8a8p-1f, 0x1.50348p-1f, 0x1.50804cp-1f, + 0x1.50cc0ap-1f, 0x1.5117bcp-1f, 0x1.51636p-1f, 0x1.51aef8p-1f, 0x1.51fa82p-1f, 0x1.5246p-1f, + 0x1.52917p-1f, 0x1.52dcd2p-1f, 0x1.53282ap-1f, 0x1.537372p-1f, 0x1.53beaep-1f, 0x1.5409dep-1f, + 0x1.5455p-1f, 0x1.54a014p-1f, 0x1.54eb1cp-1f, 0x1.553616p-1f, 0x1.558104p-1f, 0x1.55cbe4p-1f, + 0x1.5616b6p-1f, 0x1.56617cp-1f, 0x1.56ac36p-1f, 0x1.56f6ep-1f, 0x1.57417ep-1f, 0x1.578c1p-1f, + 0x1.57d694p-1f, 0x1.58210ap-1f, 0x1.586b72p-1f, 0x1.58b5cep-1f, 0x1.59001ep-1f, 0x1.594a5ep-1f, + 0x1.599492p-1f, 0x1.59debap-1f, 0x1.5a28d2p-1f, 0x1.5a72dep-1f, 0x1.5abcdep-1f, 0x1.5b06cep-1f, + 0x1.5b50b2p-1f, 0x1.5b9a88p-1f, 0x1.5be452p-1f, 0x1.5c2e0ep-1f, 0x1.5c77bcp-1f, 0x1.5cc15cp-1f, + 0x1.5d0afp-1f, 0x1.5d5476p-1f, 0x1.5d9deep-1f, 0x1.5de75ap-1f, 0x1.5e30b6p-1f, 0x1.5e7a06p-1f, + 0x1.5ec34ap-1f, 0x1.5f0c7ep-1f, 0x1.5f55a6p-1f, 0x1.5f9ecp-1f, 0x1.5fe7ccp-1f, 0x1.6030cap-1f, + 0x1.6079bcp-1f, 0x1.60c2ap-1f, 0x1.610b76p-1f, 0x1.61543ep-1f, 0x1.619cf8p-1f, 0x1.61e5a6p-1f, + 0x1.622e44p-1f, 0x1.6276d6p-1f, 0x1.62bf5ap-1f, 0x1.6307d2p-1f, 0x1.63503ap-1f, 0x1.639896p-1f, + 0x1.63e0e2p-1f, 0x1.642922p-1f, 0x1.647154p-1f, 0x1.64b978p-1f, 0x1.65018ep-1f, 0x1.654998p-1f, + 0x1.659192p-1f, 0x1.65d98p-1f, 0x1.66215ep-1f, 0x1.66693p-1f, 0x1.66b0f4p-1f, 0x1.66f8aap-1f, + 0x1.674052p-1f, 0x1.6787ecp-1f, 0x1.67cf78p-1f, 0x1.6816f6p-1f, 0x1.685e68p-1f, 0x1.68a5cap-1f, + 0x1.68ed1ep-1f, 0x1.693466p-1f, 0x1.697b9ep-1f, 0x1.69c2cap-1f, 0x1.6a09e6p-1f, 0x1.6a50f6p-1f, + 0x1.6a97f6p-1f, 0x1.6adeeap-1f, 0x1.6b25cep-1f, 0x1.6b6ca6p-1f, 0x1.6bb37p-1f, 0x1.6bfa2ap-1f, + 0x1.6c40d8p-1f, 0x1.6c8776p-1f, 0x1.6cce08p-1f, 0x1.6d148ap-1f, 0x1.6d5afep-1f, 0x1.6da166p-1f, + 0x1.6de7bep-1f, 0x1.6e2e08p-1f, 0x1.6e7446p-1f, 0x1.6eba74p-1f, 0x1.6f0094p-1f, 0x1.6f46a6p-1f, + 0x1.6f8caap-1f, 0x1.6fd2ap-1f, 0x1.701886p-1f, 0x1.705e6p-1f, 0x1.70a42cp-1f, 0x1.70e9e8p-1f, + 0x1.712f96p-1f, 0x1.717538p-1f, 0x1.71bacap-1f, 0x1.72004ep-1f, 0x1.7245c2p-1f, 0x1.728b2ap-1f, + 0x1.72d084p-1f, 0x1.7315cep-1f, 0x1.735b0ap-1f, 0x1.73a03ap-1f, 0x1.73e558p-1f, 0x1.742a6ap-1f, + 0x1.746f6ep-1f, 0x1.74b462p-1f, 0x1.74f948p-1f, 0x1.753e2p-1f, 0x1.7582eap-1f, 0x1.75c7a6p-1f, + 0x1.760c52p-1f, 0x1.7650f2p-1f, 0x1.769582p-1f, 0x1.76da02p-1f, 0x1.771e76p-1f, 0x1.7762dap-1f, + 0x1.77a73p-1f, 0x1.77eb78p-1f, 0x1.782fb2p-1f, 0x1.7873dcp-1f, 0x1.78b7f8p-1f, 0x1.78fc06p-1f, + 0x1.794006p-1f, 0x1.7983f6p-1f, 0x1.79c7d8p-1f, 0x1.7a0bacp-1f, 0x1.7a4f7p-1f, 0x1.7a9326p-1f, + 0x1.7ad6cep-1f, 0x1.7b1a68p-1f, 0x1.7b5df2p-1f, 0x1.7ba16ep-1f, 0x1.7be4dcp-1f, 0x1.7c283ap-1f, + 0x1.7c6b8ap-1f, 0x1.7caeccp-1f, 0x1.7cf1fep-1f, 0x1.7d3522p-1f, 0x1.7d7836p-1f, 0x1.7dbb3ep-1f, + 0x1.7dfe36p-1f, 0x1.7e411ep-1f, 0x1.7e83f8p-1f, 0x1.7ec6c4p-1f, 0x1.7f098p-1f, 0x1.7f4c2ep-1f, + 0x1.7f8ecep-1f, 0x1.7fd15ep-1f, 0x1.8013ep-1f, 0x1.805654p-1f, 0x1.8098b8p-1f, 0x1.80db0cp-1f, + 0x1.811d52p-1f, 0x1.815f8ap-1f, 0x1.81a1b4p-1f, 0x1.81e3cep-1f, 0x1.8225d8p-1f, 0x1.8267d4p-1f, + 0x1.82a9c2p-1f, 0x1.82ebap-1f, 0x1.832d6ep-1f, 0x1.836f3p-1f, 0x1.83b0ep-1f, 0x1.83f284p-1f, + 0x1.843416p-1f, 0x1.84759cp-1f, 0x1.84b712p-1f, 0x1.84f878p-1f, 0x1.8539dp-1f, 0x1.857b18p-1f, + 0x1.85bc52p-1f, 0x1.85fd7cp-1f, 0x1.863e98p-1f, 0x1.867fa4p-1f, 0x1.86c0a2p-1f, 0x1.87019p-1f, + 0x1.87427p-1f, 0x1.87834p-1f, 0x1.87c4p-1f, 0x1.8804b4p-1f, 0x1.884556p-1f, 0x1.8885eap-1f, + 0x1.88c66ep-1f, 0x1.8906e4p-1f, 0x1.89474ap-1f, 0x1.8987a2p-1f, 0x1.89c7eap-1f, 0x1.8a0822p-1f, + 0x1.8a484cp-1f, 0x1.8a8866p-1f, 0x1.8ac872p-1f, 0x1.8b086ep-1f, 0x1.8b485ap-1f, 0x1.8b8838p-1f, + 0x1.8bc806p-1f, 0x1.8c07c6p-1f, 0x1.8c4776p-1f, 0x1.8c8716p-1f, 0x1.8cc6a8p-1f, 0x1.8d062ap-1f, + 0x1.8d459cp-1f, 0x1.8d85p-1f, 0x1.8dc454p-1f, 0x1.8e0398p-1f, 0x1.8e42cep-1f, 0x1.8e81f4p-1f, + 0x1.8ec10ap-1f, 0x1.8f001p-1f, 0x1.8f3f08p-1f, 0x1.8f7df2p-1f, 0x1.8fbccap-1f, 0x1.8ffb94p-1f, + 0x1.903a4ep-1f, 0x1.9078f8p-1f, 0x1.90b794p-1f, 0x1.90f62p-1f, 0x1.91349cp-1f, 0x1.91730ap-1f, + 0x1.91b166p-1f, 0x1.91efb4p-1f, 0x1.922df4p-1f, 0x1.926c22p-1f, 0x1.92aa42p-1f, 0x1.92e852p-1f, + 0x1.932652p-1f, 0x1.936444p-1f, 0x1.93a224p-1f, 0x1.93dff6p-1f, 0x1.941db8p-1f, 0x1.945b6cp-1f, + 0x1.94990ep-1f, 0x1.94d6a2p-1f, 0x1.951426p-1f, 0x1.95519ap-1f, 0x1.958efep-1f, 0x1.95cc54p-1f, + 0x1.960998p-1f, 0x1.9646cep-1f, 0x1.9683f4p-1f, 0x1.96c10ap-1f, 0x1.96fe12p-1f, 0x1.973b08p-1f, + 0x1.9777fp-1f, 0x1.97b4c6p-1f, 0x1.97f18ep-1f, 0x1.982e46p-1f, 0x1.986afp-1f, 0x1.98a788p-1f, + 0x1.98e41p-1f, 0x1.99208ap-1f, 0x1.995cf2p-1f, 0x1.99994cp-1f, 0x1.99d596p-1f, 0x1.9a11dp-1f, + 0x1.9a4dfap-1f, 0x1.9a8a14p-1f, 0x1.9ac62p-1f, 0x1.9b021ap-1f, 0x1.9b3e04p-1f, 0x1.9b79ep-1f, + 0x1.9bb5aap-1f, 0x1.9bf166p-1f, 0x1.9c2d12p-1f, 0x1.9c68acp-1f, 0x1.9ca438p-1f, 0x1.9cdfb4p-1f, + 0x1.9d1b2p-1f, 0x1.9d567cp-1f, 0x1.9d91c8p-1f, 0x1.9dcd02p-1f, 0x1.9e082ep-1f, 0x1.9e434ap-1f, + 0x1.9e7e56p-1f, 0x1.9eb952p-1f, 0x1.9ef43ep-1f, 0x1.9f2f1ap-1f, 0x1.9f69e8p-1f, 0x1.9fa4a4p-1f, + 0x1.9fdf5p-1f, 0x1.a019ecp-1f, 0x1.a05476p-1f, 0x1.a08ef2p-1f, 0x1.a0c95ep-1f, 0x1.a103bap-1f, + 0x1.a13e06p-1f, 0x1.a17842p-1f, 0x1.a1b26ep-1f, 0x1.a1ec88p-1f, 0x1.a22694p-1f, 0x1.a2608ep-1f, + 0x1.a29a7ap-1f, 0x1.a2d454p-1f, 0x1.a30e2p-1f, 0x1.a347dap-1f, 0x1.a38184p-1f, 0x1.a3bb1ep-1f, + 0x1.a3f4a8p-1f, 0x1.a42e22p-1f, 0x1.a4678cp-1f, 0x1.a4a0e6p-1f, 0x1.a4da3p-1f, 0x1.a51368p-1f, + 0x1.a54c92p-1f, 0x1.a585aap-1f, 0x1.a5beb2p-1f, 0x1.a5f7aap-1f, 0x1.a63092p-1f, 0x1.a6696ap-1f, + 0x1.a6a23p-1f, 0x1.a6dae8p-1f, 0x1.a7138ep-1f, 0x1.a74c24p-1f, 0x1.a784aap-1f, 0x1.a7bd2p-1f, + 0x1.a7f586p-1f, 0x1.a82ddap-1f, 0x1.a8661ep-1f, 0x1.a89e54p-1f, 0x1.a8d676p-1f, 0x1.a90e8ap-1f, + 0x1.a9468ep-1f, 0x1.a97e8p-1f, 0x1.a9b662p-1f, 0x1.a9ee34p-1f, 0x1.aa25f6p-1f, 0x1.aa5da8p-1f, + 0x1.aa9548p-1f, 0x1.aaccd8p-1f, 0x1.ab0458p-1f, 0x1.ab3bc6p-1f, 0x1.ab7326p-1f, 0x1.abaa74p-1f, + 0x1.abe1b2p-1f, 0x1.ac18ep-1f, 0x1.ac4ffcp-1f, 0x1.ac8708p-1f, 0x1.acbe04p-1f, 0x1.acf4fp-1f, + 0x1.ad2bcap-1f, 0x1.ad6294p-1f, 0x1.ad994ep-1f, 0x1.adcff6p-1f, 0x1.ae069p-1f, 0x1.ae3d18p-1f, + 0x1.ae738ep-1f, 0x1.aea9f6p-1f, 0x1.aee04cp-1f, 0x1.af169p-1f, 0x1.af4cc6p-1f, 0x1.af82eap-1f, + 0x1.afb8fep-1f, 0x1.afefp-1f, 0x1.b024f2p-1f, 0x1.b05ad4p-1f, 0x1.b090a6p-1f, 0x1.b0c666p-1f, + 0x1.b0fc16p-1f, 0x1.b131b4p-1f, 0x1.b16742p-1f, 0x1.b19ccp-1f, 0x1.b1d22cp-1f, 0x1.b2078ap-1f, + 0x1.b23cd4p-1f, 0x1.b2721p-1f, 0x1.b2a738p-1f, 0x1.b2dc52p-1f, 0x1.b3115ap-1f, 0x1.b34652p-1f, + 0x1.b37b38p-1f, 0x1.b3b00ep-1f, 0x1.b3e4d4p-1f, 0x1.b41988p-1f, 0x1.b44e2cp-1f, 0x1.b482bep-1f, + 0x1.b4b74p-1f, 0x1.b4ebb2p-1f, 0x1.b52012p-1f, 0x1.b55462p-1f, 0x1.b588ap-1f, 0x1.b5bccep-1f, + 0x1.b5f0eap-1f, 0x1.b624f6p-1f, 0x1.b658f2p-1f, 0x1.b68cdcp-1f, 0x1.b6c0b4p-1f, 0x1.b6f47cp-1f, + 0x1.b72834p-1f, 0x1.b75bdap-1f, 0x1.b78f7p-1f, 0x1.b7c2f4p-1f, 0x1.b7f668p-1f, 0x1.b829ccp-1f, + 0x1.b85d1cp-1f, 0x1.b8905ep-1f, 0x1.b8c38ep-1f, 0x1.b8f6acp-1f, 0x1.b929bap-1f, 0x1.b95cb6p-1f, + 0x1.b98fa2p-1f, 0x1.b9c27cp-1f, 0x1.b9f546p-1f, 0x1.ba27fep-1f, 0x1.ba5aa6p-1f, 0x1.ba8d3cp-1f, + 0x1.babfc2p-1f, 0x1.baf236p-1f, 0x1.bb249ap-1f, 0x1.bb56ecp-1f, 0x1.bb892ep-1f, 0x1.bbbb5ep-1f, + 0x1.bbed7cp-1f, 0x1.bc1f8ap-1f, 0x1.bc5186p-1f, 0x1.bc8372p-1f, 0x1.bcb54cp-1f, 0x1.bce716p-1f, + 0x1.bd18cep-1f, 0x1.bd4a74p-1f, 0x1.bd7c0ap-1f, 0x1.bdad9p-1f, 0x1.bddf02p-1f, 0x1.be1066p-1f, + 0x1.be41b6p-1f, 0x1.be72f6p-1f, 0x1.bea424p-1f, 0x1.bed542p-1f, 0x1.bf064ep-1f, 0x1.bf374ap-1f, + 0x1.bf6832p-1f, 0x1.bf990cp-1f, 0x1.bfc9d2p-1f, 0x1.bffa88p-1f, 0x1.c02b2cp-1f, 0x1.c05bcp-1f, + 0x1.c08c42p-1f, 0x1.c0bcb4p-1f, 0x1.c0ed12p-1f, 0x1.c11d6p-1f, 0x1.c14d9ep-1f, 0x1.c17dcap-1f, + 0x1.c1ade4p-1f, 0x1.c1ddecp-1f, 0x1.c20de4p-1f, 0x1.c23dcap-1f, 0x1.c26dap-1f, 0x1.c29d62p-1f, + 0x1.c2cd14p-1f, 0x1.c2fcb6p-1f, 0x1.c32c44p-1f, 0x1.c35bc2p-1f, 0x1.c38b3p-1f, 0x1.c3ba8ap-1f, + 0x1.c3e9d4p-1f, 0x1.c4190cp-1f, 0x1.c44834p-1f, 0x1.c47748p-1f, 0x1.c4a64cp-1f, 0x1.c4d54p-1f, + 0x1.c5042p-1f, 0x1.c532fp-1f, 0x1.c561aep-1f, 0x1.c5905ap-1f, 0x1.c5bef6p-1f, 0x1.c5ed8p-1f, + 0x1.c61bf8p-1f, 0x1.c64a5ep-1f, 0x1.c678b4p-1f, 0x1.c6a6f6p-1f, 0x1.c6d52ap-1f, 0x1.c7034ap-1f, + 0x1.c73158p-1f, 0x1.c75f56p-1f, 0x1.c78d42p-1f, 0x1.c7bb1cp-1f, 0x1.c7e8e6p-1f, 0x1.c8169cp-1f, + 0x1.c84442p-1f, 0x1.c871d6p-1f, 0x1.c89f58p-1f, 0x1.c8cccap-1f, 0x1.c8fa28p-1f, 0x1.c92776p-1f, + 0x1.c954b2p-1f, 0x1.c981dcp-1f, 0x1.c9aef6p-1f, 0x1.c9dbfcp-1f, 0x1.ca08f2p-1f, 0x1.ca35d6p-1f, + 0x1.ca62a8p-1f, 0x1.ca8f68p-1f, 0x1.cabc16p-1f, 0x1.cae8b4p-1f, 0x1.cb154p-1f, 0x1.cb41b8p-1f, + 0x1.cb6e2p-1f, 0x1.cb9a76p-1f, 0x1.cbc6bcp-1f, 0x1.cbf2eep-1f, 0x1.cc1f1p-1f, 0x1.cc4b1ep-1f, + 0x1.cc771cp-1f, 0x1.cca308p-1f, 0x1.cccee2p-1f, 0x1.ccfaaap-1f, 0x1.cd266p-1f, 0x1.cd5206p-1f, + 0x1.cd7d98p-1f, 0x1.cda91ap-1f, 0x1.cdd48ap-1f, 0x1.cdffe6p-1f, 0x1.ce2b32p-1f, 0x1.ce566cp-1f, + 0x1.ce8194p-1f, 0x1.ceacaap-1f, 0x1.ced7bp-1f, 0x1.cf02a2p-1f, 0x1.cf2d82p-1f, 0x1.cf5852p-1f, + 0x1.cf830ep-1f, 0x1.cfadbap-1f, 0x1.cfd852p-1f, 0x1.d002dap-1f, 0x1.d02d5p-1f, 0x1.d057b4p-1f, + 0x1.d08206p-1f, 0x1.d0ac46p-1f, 0x1.d0d672p-1f, 0x1.d1008ep-1f, 0x1.d12a98p-1f, 0x1.d15492p-1f, + 0x1.d17e78p-1f, 0x1.d1a84cp-1f, 0x1.d1d20ep-1f, 0x1.d1fbbep-1f, 0x1.d2255cp-1f, 0x1.d24ee8p-1f, + 0x1.d27864p-1f, 0x1.d2a1ccp-1f, 0x1.d2cb22p-1f, 0x1.d2f466p-1f, 0x1.d31d98p-1f, 0x1.d346bap-1f, + 0x1.d36fc8p-1f, 0x1.d398c4p-1f, 0x1.d3c1aep-1f, 0x1.d3ea86p-1f, 0x1.d4134ep-1f, 0x1.d43c02p-1f, + 0x1.d464a4p-1f, 0x1.d48d34p-1f, 0x1.d4b5b2p-1f, 0x1.d4de1ep-1f, 0x1.d50678p-1f, 0x1.d52ecp-1f, + 0x1.d556f6p-1f, 0x1.d57f18p-1f, 0x1.d5a72ap-1f, 0x1.d5cf2ap-1f, 0x1.d5f718p-1f, 0x1.d61ef2p-1f, + 0x1.d646bcp-1f, 0x1.d66e72p-1f, 0x1.d69618p-1f, 0x1.d6bdaap-1f, 0x1.d6e52ap-1f, 0x1.d70c98p-1f, + 0x1.d733f6p-1f, 0x1.d75b4p-1f, 0x1.d78276p-1f, 0x1.d7a99cp-1f, 0x1.d7d0bp-1f, 0x1.d7f7b2p-1f, + 0x1.d81eap-1f, 0x1.d8457ep-1f, 0x1.d86c48p-1f, 0x1.d893p-1f, 0x1.d8b9a8p-1f, 0x1.d8e03cp-1f, + 0x1.d906bcp-1f, 0x1.d92d2cp-1f, 0x1.d9538ap-1f, 0x1.d979d4p-1f, 0x1.d9a00ep-1f, 0x1.d9c634p-1f, + 0x1.d9ec48p-1f, 0x1.da124ap-1f, 0x1.da383ap-1f, 0x1.da5e18p-1f, 0x1.da83e4p-1f, 0x1.daa99cp-1f, + 0x1.dacf42p-1f, 0x1.daf4d8p-1f, 0x1.db1a5ap-1f, 0x1.db3fc8p-1f, 0x1.db6526p-1f, 0x1.db8a72p-1f, + 0x1.dbafaap-1f, 0x1.dbd4dp-1f, 0x1.dbf9e4p-1f, 0x1.dc1ee6p-1f, 0x1.dc43d6p-1f, 0x1.dc68b2p-1f, + 0x1.dc8d7cp-1f, 0x1.dcb234p-1f, 0x1.dcd6dap-1f, 0x1.dcfb6ep-1f, 0x1.dd1ffp-1f, 0x1.dd445ep-1f, + 0x1.dd68bap-1f, 0x1.dd8d04p-1f, 0x1.ddb13cp-1f, 0x1.ddd56p-1f, 0x1.ddf974p-1f, 0x1.de1d74p-1f, + 0x1.de416p-1f, 0x1.de653cp-1f, 0x1.de8906p-1f, 0x1.deacbcp-1f, 0x1.ded06p-1f, 0x1.def3fp-1f, + 0x1.df177p-1f, 0x1.df3adcp-1f, 0x1.df5e36p-1f, 0x1.df817ep-1f, 0x1.dfa4b4p-1f, 0x1.dfc7d6p-1f, + 0x1.dfeae6p-1f, 0x1.e00de4p-1f, 0x1.e030cep-1f, 0x1.e053a8p-1f, 0x1.e0766ep-1f, 0x1.e09922p-1f, + 0x1.e0bbc2p-1f, 0x1.e0de5p-1f, 0x1.e100ccp-1f, 0x1.e12336p-1f, 0x1.e1458cp-1f, 0x1.e167d2p-1f, + 0x1.e18a02p-1f, 0x1.e1ac22p-1f, 0x1.e1ce2ep-1f, 0x1.e1f028p-1f, 0x1.e2121p-1f, 0x1.e233e6p-1f, + 0x1.e255a8p-1f, 0x1.e27758p-1f, 0x1.e298f4p-1f, 0x1.e2ba7ep-1f, 0x1.e2dbf6p-1f, 0x1.e2fd5cp-1f, + 0x1.e31eaep-1f, 0x1.e33feep-1f, 0x1.e3611cp-1f, 0x1.e38236p-1f, 0x1.e3a33ep-1f, 0x1.e3c434p-1f, + 0x1.e3e518p-1f, 0x1.e405e8p-1f, 0x1.e426a4p-1f, 0x1.e4475p-1f, 0x1.e467e8p-1f, 0x1.e4886ep-1f, + 0x1.e4a8ep-1f, 0x1.e4c94p-1f, 0x1.e4e98ep-1f, 0x1.e509c8p-1f, 0x1.e529fp-1f, 0x1.e54a06p-1f, + 0x1.e56a08p-1f, 0x1.e589f8p-1f, 0x1.e5a9d6p-1f, 0x1.e5c9ap-1f, 0x1.e5e958p-1f, 0x1.e608fcp-1f, + 0x1.e6288ep-1f, 0x1.e6480ep-1f, 0x1.e6677cp-1f, 0x1.e686d6p-1f, 0x1.e6a61cp-1f, 0x1.e6c55p-1f, + 0x1.e6e472p-1f, 0x1.e70382p-1f, 0x1.e7227ep-1f, 0x1.e74168p-1f, 0x1.e7603ep-1f, 0x1.e77f02p-1f, + 0x1.e79db2p-1f, 0x1.e7bc5p-1f, 0x1.e7dadcp-1f, 0x1.e7f954p-1f, 0x1.e817bap-1f, 0x1.e8360ep-1f, + 0x1.e8544ep-1f, 0x1.e8727cp-1f, 0x1.e89096p-1f, 0x1.e8ae9ep-1f, 0x1.e8cc92p-1f, 0x1.e8ea74p-1f, + 0x1.e90844p-1f, 0x1.e926p-1f, 0x1.e943aap-1f, 0x1.e9614p-1f, 0x1.e97ec4p-1f, 0x1.e99c34p-1f, + 0x1.e9b992p-1f, 0x1.e9d6dep-1f, 0x1.e9f416p-1f, 0x1.ea113ap-1f, 0x1.ea2e4ep-1f, 0x1.ea4b4cp-1f, + 0x1.ea683ap-1f, 0x1.ea8512p-1f, 0x1.eaa1dap-1f, 0x1.eabe8ep-1f, 0x1.eadb2ep-1f, 0x1.eaf7bcp-1f, + 0x1.eb1438p-1f, 0x1.eb30ap-1f, 0x1.eb4cf6p-1f, 0x1.eb6938p-1f, 0x1.eb8566p-1f, 0x1.eba184p-1f, + 0x1.ebbd8cp-1f, 0x1.ebd984p-1f, 0x1.ebf566p-1f, 0x1.ec1138p-1f, 0x1.ec2cf4p-1f, 0x1.ec48ap-1f, + 0x1.ec6436p-1f, 0x1.ec7fbcp-1f, 0x1.ec9b2ep-1f, 0x1.ecb68cp-1f, 0x1.ecd1d8p-1f, 0x1.eced1p-1f, + 0x1.ed0836p-1f, 0x1.ed2348p-1f, 0x1.ed3e48p-1f, 0x1.ed5934p-1f, 0x1.ed740ep-1f, 0x1.ed8ed6p-1f, + 0x1.eda988p-1f, 0x1.edc42ap-1f, 0x1.eddeb6p-1f, 0x1.edf932p-1f, 0x1.ee1398p-1f, 0x1.ee2decp-1f, + 0x1.ee482ep-1f, 0x1.ee625cp-1f, 0x1.ee7c78p-1f, 0x1.ee968p-1f, 0x1.eeb074p-1f, 0x1.eeca56p-1f, + 0x1.eee426p-1f, 0x1.eefde2p-1f, 0x1.ef178ap-1f, 0x1.ef312p-1f, 0x1.ef4aa2p-1f, 0x1.ef6412p-1f, + 0x1.ef7d6ep-1f, 0x1.ef96b8p-1f, 0x1.efafeep-1f, 0x1.efc91p-1f, 0x1.efe22p-1f, 0x1.effb1ep-1f, + 0x1.f01408p-1f, 0x1.f02cdep-1f, 0x1.f045a2p-1f, 0x1.f05e52p-1f, 0x1.f076eep-1f, 0x1.f08f78p-1f, + 0x1.f0a7fp-1f, 0x1.f0c054p-1f, 0x1.f0d8a4p-1f, 0x1.f0f0e2p-1f, 0x1.f1090cp-1f, 0x1.f12122p-1f, + 0x1.f13926p-1f, 0x1.f15118p-1f, 0x1.f168f6p-1f, 0x1.f180cp-1f, 0x1.f19876p-1f, 0x1.f1b01cp-1f, + 0x1.f1c7acp-1f, 0x1.f1df2ap-1f, 0x1.f1f694p-1f, 0x1.f20decp-1f, 0x1.f2253p-1f, 0x1.f23c6p-1f, + 0x1.f2537ep-1f, 0x1.f26a88p-1f, 0x1.f2818p-1f, 0x1.f29864p-1f, 0x1.f2af34p-1f, 0x1.f2c5f2p-1f, + 0x1.f2dc9cp-1f, 0x1.f2f334p-1f, 0x1.f309b8p-1f, 0x1.f32028p-1f, 0x1.f33686p-1f, 0x1.f34cdp-1f, + 0x1.f36306p-1f, 0x1.f3792ap-1f, 0x1.f38f3ap-1f, 0x1.f3a538p-1f, 0x1.f3bb22p-1f, 0x1.f3d0f8p-1f, + 0x1.f3e6bcp-1f, 0x1.f3fc6cp-1f, 0x1.f41208p-1f, 0x1.f42792p-1f, 0x1.f43d08p-1f, 0x1.f4526cp-1f, + 0x1.f467bap-1f, 0x1.f47cf8p-1f, 0x1.f4922p-1f, 0x1.f4a736p-1f, 0x1.f4bc38p-1f, 0x1.f4d128p-1f, + 0x1.f4e604p-1f, 0x1.f4faccp-1f, 0x1.f50f82p-1f, 0x1.f52424p-1f, 0x1.f538b2p-1f, 0x1.f54d2ep-1f, + 0x1.f56196p-1f, 0x1.f575eap-1f, 0x1.f58a2cp-1f, 0x1.f59e5ap-1f, 0x1.f5b274p-1f, 0x1.f5c67ap-1f, + 0x1.f5da6ep-1f, 0x1.f5ee5p-1f, 0x1.f6021cp-1f, 0x1.f615d6p-1f, 0x1.f6297cp-1f, 0x1.f63d1p-1f, + 0x1.f6509p-1f, 0x1.f663fcp-1f, 0x1.f67756p-1f, 0x1.f68a9cp-1f, 0x1.f69dcep-1f, 0x1.f6b0ecp-1f, + 0x1.f6c3f8p-1f, 0x1.f6d6fp-1f, 0x1.f6e9d4p-1f, 0x1.f6fca6p-1f, 0x1.f70f64p-1f, 0x1.f7220ep-1f, + 0x1.f734a6p-1f, 0x1.f7472ap-1f, 0x1.f7599ap-1f, 0x1.f76bf8p-1f, 0x1.f77e4p-1f, 0x1.f79076p-1f, + 0x1.f7a29ap-1f, 0x1.f7b4aap-1f, 0x1.f7c6a6p-1f, 0x1.f7d88ep-1f, 0x1.f7ea62p-1f, 0x1.f7fc24p-1f, + 0x1.f80dd2p-1f, 0x1.f81f6ep-1f, 0x1.f830f4p-1f, 0x1.f84268p-1f, 0x1.f853cap-1f, 0x1.f86516p-1f, + 0x1.f8765p-1f, 0x1.f88776p-1f, 0x1.f89888p-1f, 0x1.f8a988p-1f, 0x1.f8ba74p-1f, 0x1.f8cb4cp-1f, + 0x1.f8dc1p-1f, 0x1.f8ecc2p-1f, 0x1.f8fd6p-1f, 0x1.f90deap-1f, 0x1.f91e62p-1f, 0x1.f92ec4p-1f, + 0x1.f93f14p-1f, 0x1.f94f52p-1f, 0x1.f95f7ap-1f, 0x1.f96f9p-1f, 0x1.f97f92p-1f, 0x1.f98f8p-1f, + 0x1.f99f5cp-1f, 0x1.f9af24p-1f, 0x1.f9bed8p-1f, 0x1.f9ce78p-1f, 0x1.f9de06p-1f, 0x1.f9ed8p-1f, + 0x1.f9fce6p-1f, 0x1.fa0c38p-1f, 0x1.fa1b78p-1f, 0x1.fa2aa2p-1f, 0x1.fa39bap-1f, 0x1.fa48cp-1f, + 0x1.fa57bp-1f, 0x1.fa668ep-1f, 0x1.fa7558p-1f, 0x1.fa840ep-1f, 0x1.fa92b2p-1f, 0x1.faa14p-1f, + 0x1.faafbcp-1f, 0x1.fabe26p-1f, 0x1.facc7ap-1f, 0x1.fadabcp-1f, 0x1.fae8e8p-1f, 0x1.faf704p-1f, + 0x1.fb050ap-1f, 0x1.fb12fcp-1f, 0x1.fb20dcp-1f, 0x1.fb2ea8p-1f, 0x1.fb3c6p-1f, 0x1.fb4a06p-1f, + 0x1.fb5798p-1f, 0x1.fb6514p-1f, 0x1.fb728p-1f, 0x1.fb7fd6p-1f, 0x1.fb8d18p-1f, 0x1.fb9a48p-1f, + 0x1.fba764p-1f, 0x1.fbb46cp-1f, 0x1.fbc162p-1f, 0x1.fbce42p-1f, 0x1.fbdb1p-1f, 0x1.fbe7cap-1f, + 0x1.fbf47p-1f, 0x1.fc0104p-1f, 0x1.fc0d84p-1f, 0x1.fc19eep-1f, 0x1.fc2648p-1f, 0x1.fc328cp-1f, + 0x1.fc3ebcp-1f, 0x1.fc4adap-1f, 0x1.fc56e4p-1f, 0x1.fc62dap-1f, 0x1.fc6ebcp-1f, 0x1.fc7a8cp-1f, + 0x1.fc8646p-1f, 0x1.fc91eep-1f, 0x1.fc9d82p-1f, 0x1.fca904p-1f, 0x1.fcb47p-1f, 0x1.fcbfcap-1f, + 0x1.fccb1p-1f, 0x1.fcd642p-1f, 0x1.fce16p-1f, 0x1.fcec6ap-1f, 0x1.fcf762p-1f, 0x1.fd0246p-1f, + 0x1.fd0d16p-1f, 0x1.fd17d2p-1f, 0x1.fd227ap-1f, 0x1.fd2d1p-1f, 0x1.fd3792p-1f, 0x1.fd42p-1f, + 0x1.fd4c5ap-1f, 0x1.fd56ap-1f, 0x1.fd60d2p-1f, 0x1.fd6af2p-1f, 0x1.fd74fep-1f, 0x1.fd7ef6p-1f, + 0x1.fd88dap-1f, 0x1.fd92aap-1f, 0x1.fd9c68p-1f, 0x1.fda612p-1f, 0x1.fdafa8p-1f, 0x1.fdb92ap-1f, + 0x1.fdc298p-1f, 0x1.fdcbf2p-1f, 0x1.fdd53ap-1f, 0x1.fdde6ep-1f, 0x1.fde78ep-1f, 0x1.fdf09ap-1f, + 0x1.fdf992p-1f, 0x1.fe0278p-1f, 0x1.fe0b48p-1f, 0x1.fe1406p-1f, 0x1.fe1cbp-1f, 0x1.fe2546p-1f, + 0x1.fe2dc8p-1f, 0x1.fe3638p-1f, 0x1.fe3e92p-1f, 0x1.fe46dap-1f, 0x1.fe4f0ep-1f, 0x1.fe572ep-1f, + 0x1.fe5f3ap-1f, 0x1.fe6734p-1f, 0x1.fe6f18p-1f, 0x1.fe76eap-1f, 0x1.fe7ea8p-1f, 0x1.fe8652p-1f, + 0x1.fe8de8p-1f, 0x1.fe956cp-1f, 0x1.fe9cdap-1f, 0x1.fea436p-1f, 0x1.feab7ep-1f, 0x1.feb2b2p-1f, + 0x1.feb9d2p-1f, 0x1.fec0dep-1f, 0x1.fec7d8p-1f, 0x1.fecebep-1f, 0x1.fed58ep-1f, 0x1.fedc4cp-1f, + 0x1.fee2f6p-1f, 0x1.fee98ep-1f, 0x1.fef01p-1f, 0x1.fef68p-1f, 0x1.fefcdap-1f, 0x1.ff0322p-1f, + 0x1.ff0956p-1f, 0x1.ff0f76p-1f, 0x1.ff1584p-1f, 0x1.ff1b7cp-1f, 0x1.ff2162p-1f, 0x1.ff2732p-1f, + 0x1.ff2cfp-1f, 0x1.ff329ap-1f, 0x1.ff383p-1f, 0x1.ff3db4p-1f, 0x1.ff4322p-1f, 0x1.ff487ep-1f, + 0x1.ff4dc6p-1f, 0x1.ff52fap-1f, 0x1.ff581ap-1f, 0x1.ff5d26p-1f, 0x1.ff621ep-1f, 0x1.ff6704p-1f, + 0x1.ff6bd4p-1f, 0x1.ff7092p-1f, 0x1.ff753cp-1f, 0x1.ff79d2p-1f, 0x1.ff7e54p-1f, 0x1.ff82c2p-1f, + 0x1.ff871ep-1f, 0x1.ff8b64p-1f, 0x1.ff8f98p-1f, 0x1.ff93b8p-1f, 0x1.ff97c4p-1f, 0x1.ff9bbcp-1f, + 0x1.ff9fa2p-1f, 0x1.ffa372p-1f, 0x1.ffa72ep-1f, 0x1.ffaad8p-1f, 0x1.ffae6ep-1f, 0x1.ffb1fp-1f, + 0x1.ffb55ep-1f, 0x1.ffb8b8p-1f, 0x1.ffbcp-1f, 0x1.ffbf32p-1f, 0x1.ffc252p-1f, 0x1.ffc55ep-1f, + 0x1.ffc856p-1f, 0x1.ffcb3ap-1f, 0x1.ffce0ap-1f, 0x1.ffd0c6p-1f, 0x1.ffd37p-1f, 0x1.ffd604p-1f, + 0x1.ffd886p-1f, 0x1.ffdaf4p-1f, 0x1.ffdd4ep-1f, 0x1.ffdf94p-1f, 0x1.ffe1c6p-1f, 0x1.ffe3e6p-1f, + 0x1.ffe5fp-1f, 0x1.ffe7e8p-1f, 0x1.ffe9ccp-1f, 0x1.ffeb9cp-1f, 0x1.ffed58p-1f, 0x1.ffefp-1f, + 0x1.fff094p-1f, 0x1.fff216p-1f, 0x1.fff382p-1f, 0x1.fff4dcp-1f, 0x1.fff622p-1f, 0x1.fff754p-1f, + 0x1.fff872p-1f, 0x1.fff97cp-1f, 0x1.fffa72p-1f, 0x1.fffb56p-1f, 0x1.fffc26p-1f, 0x1.fffcep-1f, + 0x1.fffd88p-1f, 0x1.fffe1cp-1f, 0x1.fffe9cp-1f, 0x1.ffff0ap-1f, 0x1.ffff62p-1f, 0x1.ffffa8p-1f, + 0x1.ffffd8p-1f, 0x1.fffff6p-1f, +}; + +} // namespace halfrate::tables diff --git a/mbe/decoder.cpp b/mbe/decoder.cpp new file mode 100644 index 0000000..e04e9b9 --- /dev/null +++ b/mbe/decoder.cpp @@ -0,0 +1,518 @@ +#include "decoder.h" + +#include + +#include "enhance.h" +#include "fastmath.h" +#include "frame.h" +#include "numeric.h" +#include "decoder_tables.h" +#include "tables.h" + +namespace halfrate::dec { + +namespace { + +using core::fast_exp2; +using core::fast_log2; +using core::fast_sqrt; + +constexpr int32_t kFirstNonVoicePitch = 120; // pitch index 120 and up: silence, tone or erasure +constexpr int32_t kSilencePitch = 124; // silence frames are dequantised with this pitch index +constexpr int32_t kSilenceVoicing = 16; // voicing indices 16 and 17 mark silence frames +constexpr int32_t kFirstPulseVoicing = 18; // voicing 18 and up are pulse codes +constexpr int32_t kPulsePairVoicing = 24; // 24 and 25: two pulses + +constexpr float kOneOverTwoPi = 0x1.45f306p-3f; +constexpr float kOneOver160 = 0x1.99999ap-8f; +constexpr float kSqrtHalf = 0x1.6a09e6p-1f; +constexpr float kSqrt2 = 0x1.6a09e6p+0f; +constexpr float kDbPerLog2 = 0x1.815182p+1f; // 10 log10(2): power log2 -> dB +constexpr float kLog2PerDb = 0x1.542a5ap-3f; // log2(10) / 20: amplitude dB -> log2 +constexpr float kLimiterCeiling = 32766.0f; +constexpr float kFlushBelow = 0x1.4484cp-100f; // ~1e-30: the high-pass state is flushed to 0 below this +constexpr float kToneLevelLog2 = 0x1.e353f8p-4f; // tone level step, log2 per amplitude code +constexpr float kToneScale = 2737.0f; +constexpr float kSampleRate = 8000.0f; +constexpr float kDialTone425 = 425.0f; + +// Tone indices +constexpr uint32_t kSingleToneFirst = 5, kSingleToneLast = 122; // index * 31.25 Hz +constexpr uint32_t kKeypadTones = 0x80, kToneSet = 0x90; // 16 dual tones each +constexpr uint32_t kProgress350_440 = 0xa0, kTone425 = 0xa1, kProgress480_620 = 0xa2, kProgress350_490 = 0xa3; + +core::EnhanceOptions enhance_options(const Options& o) { + core::EnhanceOptions e; + e.mode = o.enhance; + e.strength = o.enhance_strength; + e.min_weight = o.enhance_min_weight; + e.max_weight = o.enhance_max_weight; + e.bypass_divisor = o.enhance_bypass_divisor; + e.power_high = o.enhance_power_high; + e.power_low = o.enhance_power_low; + e.split_frequency = o.enhance_split_frequency; + return e; +} + +} // namespace + +Decoder::Decoder() { reset(); } + +void Decoder::reset() { + core::dequant_reset(dequant); + synth_reset(synth, options); + last_good = SynthFrame{}; + had_good = false; + bad_count = 0; + muted = false; + tone_phase = {}; + limiter_gain = 1.0f; + highpass.sections = {}; + highpass.cutoff = -1.0f; +} + +bool Decoder::set(const char* name, double value) { + SetEffect effect; + if (!set_option(options, name, value, &effect)) return false; + if (effect == SetEffect::reset_synth) synth_reset(synth, options); + return true; +} + +// An erased frame: repeat the last good parameters (amplitudes times repeat_gain each time, with a high-band lift +// above repeat_high_start) for repeat_max frames, then one silent frame, then comfort noise. +// Before any good frame: comfort noise at once. +void Decoder::conceal(float* buf) { + int32_t n = bad_count; + bad_count = n + 1; + if (had_good) { + if (n >= options.repeat_max) { + if (!muted) { + SynthFrame silent{}; + synth_frame(synth, options, silent, buf); + muted = true; + return; + } + } else if (!muted) { + SynthFrame p = last_good; + int32_t count = p.harmonic_count; + float g = options.repeat_gain; + // the high-band lift rises in dB from 1 at repeat_high_start to repeat_high_gain at half the sample rate + float start = options.repeat_high_start; + float span = 0.5f - start > 0.01f ? 0.5f - start : 0.01f; + float lift = std::log(options.repeat_high_gain > 0.0f ? options.repeat_high_gain : 1.0f); + for (int32_t k = 0; k < count; k++) { + float f = (k + 1) * p.fundamental; + float s = f > start && lift != 0.0f ? g * std::exp(lift * (f - start) / span) : g; + p.amplitude[1 + k] = p.amplitude[1 + k] * s; + } + last_good = p; + synth_frame(synth, options, p, buf); + return; + } + } + synth_comfort_noise(synth, options.comfort_noise_level, buf); + synth.previous = SynthFrame{}; + muted = true; +} + +// A frame with pitch index 120 and up that is not silence: a tone frame (bits 0..7 all set and the tone index in +// bits 12..43 four times), otherwise an erasure. +DecodedKind Decoder::tone_or_erasure(const uint8_t* in, float* buf) { + for (int k = 0; k < 8; k++) { + if (in[k] == 0) { conceal(buf); return DecodedKind::erasure; } + } + int32_t copies[4]; + for (int j = 0; j < 4; j++) { + uint32_t v = 0; + for (int k = 0; k < 8; k++) v = in[12 + 8 * j + k] | (v << 1); + copies[j] = static_cast(v); + } + uint32_t index = static_cast(copies[0]); + if (!(copies[0] == copies[1] && copies[0] == copies[2] && copies[0] == copies[3])) { + conceal(buf); + return DecodedKind::erasure; + } + uint32_t level = static_cast(in[9]) << 3 | static_cast(in[8]) << 4; + level |= static_cast(in[10]) << 2; + level |= static_cast(in[11]) << 1; + level |= in[44]; + bad_count = 0; + muted = false; + + bool silent, dual; + float freq_a, freq_b; // Hz + if (index - kSingleToneFirst <= kSingleToneLast - kSingleToneFirst) { + silent = false; dual = false; + freq_a = static_cast(index) * 31.25f; + freq_b = 0.0f; + } else if ((index & ~0xfu) == kToneSet) { + silent = false; + const int8_t* pick = tables::kToneSetIndex[index - kToneSet]; + freq_a = tables::kToneSetLow[pick[0]]; + freq_b = tables::kToneSetHigh[pick[1]]; + dual = true; + } else if ((index & ~0xfu) == kKeypadTones) { + silent = false; + uint32_t i = index - kKeypadTones; + freq_a = tables::kKeypadLow[tables::kKeypadLowIndex[i]]; + freq_b = tables::kKeypadHigh[tables::kKeypadHighIndex[i]]; + dual = true; + } else { + dual = false; silent = true; freq_a = 0.0f; freq_b = 0.0f; + if (index == kProgress480_620) { silent = false; dual = true; freq_a = 480.0f; freq_b = 620.0f; } + else if (index == kProgress350_490) { silent = false; dual = true; freq_a = 350.0f; freq_b = 490.0f; } + else if (index == kProgress350_440) { silent = false; dual = true; freq_a = 350.0f; freq_b = 440.0f; } + else if (index == kTone425) { silent = false; freq_a = kDialTone425; } + } + float scale = options.tone_gain; + float a = fast_exp2(static_cast(level) * kToneLevelLog2); + if (silent) { + for (int i = 0; i < kFrameSamples; i++) buf[i] = 0.0f; + } else { + float s = scale * kToneScale; + a = s * a; + float a_single = a * kSqrt2; // the 425 Hz tone is a single tone at the level of two + int64_t inc1 = core::to_int64_sat(static_cast(freq_a / kSampleRate) * 4294967296.0); + int64_t inc2 = core::to_int64_sat(static_cast(freq_b / kSampleRate) * 4294967296.0); + if (index == kTone425) a = a_single; + uint32_t ph1 = tone_phase[0], ph2 = tone_phase[1]; + const float* cosine = halfrate::tables::kCosine; + for (int i = 0; i < kFrameSamples; i++) { + float v = cosine[(ph1 + 0x40000u) >> 19]; + if (dual) v = v + cosine[(ph2 + 0x40000u) >> 19]; + buf[i] = a * v; + ph1 += static_cast(inc1); + ph2 += static_cast(inc2); + } + tone_phase[1] = ph2; + tone_phase[0] = ph1; + } + core::dequant_reset(dequant); + synth_reset(synth, options); + had_good = false; + return DecodedKind::tone; +} + +// A voice or silence frame from its dequantised parameters: harmonic amplitudes, phase term, enhancement, high-band +// tilt, per-harmonic voiced / noise / pulse weights, pulse placement; then synthesis. +void Decoder::voice(const core::FrameParams& params, bool silence, float* buf) { + const Options& o = options; + int32_t voicing = params.fields[core::kFieldVoicing]; + int32_t pitch = params.fields[core::kFieldPitch]; + float voiced_share = fast_sqrt(o.mixed_voiced_share); + float noise_share = fast_sqrt(1.0f - o.mixed_voiced_share); + SynthFrame p{}; + float phase[kHarmonicSlots] = {}; + float amp[kFrameSamples]; // [1..L] + p.active = 1; + p.fundamental = params.fundamental; + int32_t count = params.harmonic_count; + p.harmonic_count = count; + const int32_t decoded_count = count; + const float* log2_amp = params.log2_amplitude.data(); + if (decoded_count >= 1) { + for (int64_t k = 0; k < params.harmonic_count; k++) amp[1 + k] = fast_exp2(log2_amp[k]); + count = params.harmonic_count; + // phase term per harmonic: a weighted sum of log-amplitude differences around it (odd taps only if set) + int64_t taps = o.phase_taps; + float dispersion = o.phase_dispersion; + for (int64_t l = 1; l <= count; l++) { + int64_t l1 = l - 1; + float s = 0.0f; + if (taps >= 1) { + int64_t m = 0, nm = 0; + int64_t step = o.phase_odd_taps != 0 ? 2 : 1; + do { + float up = 0.0f, lo; + if (count >= static_cast(static_cast(l1) + static_cast(m) + 2)) { + up = log2_amp[l1 + m + 1]; + up = up + o.phase_level_offset; + } + if (l1 + nm >= 1) { + lo = log2_amp[l1 + nm - 1]; + lo = lo + o.phase_level_offset; + } else { + lo = 0.0f; + } + up = up - lo; + up = up * tables::kPhaseTapWeight[m + 1]; + s = s + up; + m += step; + nm -= step; + } while (m + 1 <= taps); + } + s = dispersion * s; + s = s * kOneOverTwoPi; + phase[l] = s; + } + } + core::enhance_formants(enhance_options(o), params.fundamental, params.omega, params.harmonic_count, amp); + count = params.harmonic_count; + bool weights_done = false; + if (o.high_band_tilt != 0.0f) { + if (count < 1) { + weights_done = true; + } else { + // a gain rising from 1 at high_band_start * L to 2^high_band_tilt at L + for (int64_t l = 1;; l++) { + float t = static_cast(static_cast(l)) / static_cast(count); + float start = o.high_band_start; + t = t - start; + float width = 1.0f - start; + t = t / width; + if (t > 0.0f) { + float a = amp[l]; + t = t > 1.0f ? 1.0f : t; + t = t * o.high_band_tilt; + amp[l] = a * fast_exp2(t); + } + if (!(l < count)) break; + } + } + } + if (!weights_done && count >= 1) { + const char* classes = tables::kHarmonicClass[silence ? tables::kSilenceClassRow : (voicing & 0x1f)]; + float w0 = params.fundamental; + float gain = o.output_gain; + for (int64_t k = 0; k < count; k++) { + float x = w0 * static_cast(static_cast(k + 1)); + int32_t slot = core::to_int32_sat(static_cast(x) * 32.0); + slot = slot < 15 ? slot : 15; + char c = classes[slot]; + p.amplitude[1 + k] = amp[1 + k] * gain; + float weight = 1.0f; + std::array* target = &p.unvoiced; + switch (c) { + case tables::kPulseNoise: + if (o.pulse_enable != 0) { + p.pulse[1 + k] = o.pulse_noise_pulse_weight; + weight = o.pulse_noise_noise_weight; + } + break; + case tables::kVoiced: + weight = o.voiced_weight; + target = &p.voiced; + break; + case tables::kMixed: + p.voiced[1 + k] = voiced_share * o.voiced_weight; + weight = noise_share; + break; + case tables::kPulse: + target = o.pulse_enable == 0 ? &p.unvoiced : &p.pulse; + break; + default: + break; + } + (*target)[1 + k] = weight; + } + for (int32_t l = 1; l <= count; l++) p.phase[l] = phase[l]; + } + + p.pulse_count = 0; + if (!silence && voicing >= kFirstPulseVoicing) { + if (o.pulse_enable != 0) { + float window = o.pulse_window; + float distance; + if ((voicing & 0x7ffffffe) == kPulsePairVoicing) { + // two pulses: positions from pitch / 11 and pitch % 11 + int32_t q = pitch / 11, r = pitch - q * 11; + float s = o.pulse_pair_first_step * static_cast(q); + s = o.pulse_pair_first_start + s; + s = s + 0.5f; + int32_t pos = core::to_int32_sat(s); + float s2 = o.pulse_pair_second_step * static_cast(r); + s2 = o.pulse_pair_second_start + s2; + s2 = s2 + 0.5f; + int32_t pos2 = core::to_int32_sat(s2); + float d1 = static_cast(static_cast(static_cast(pos) - 160u)); + d1 = pos < 160 ? -d1 : d1; + float d2 = static_cast(static_cast(static_cast(pos2) - 80u)); + d1 = d1 / window; + d1 = 1.0f - d1; + d1 = core::max_num(d1, 0.0f); + p.pulse_gain[0] = d1; + p.pulse_position[1] = pos2; + distance = pos2 < 80 ? -d2 : d2; + p.pulse_count = 2; + p.pulse_position[0] = pos; + } else { + int32_t base = static_cast(voicing) < static_cast(kPulsePairVoicing) + ? o.pulse_position_low : o.pulse_position_high; + p.pulse_position[0] = static_cast(static_cast(base) + static_cast(pitch)); + float d = static_cast(static_cast(static_cast(pitch) - + static_cast(o.pulse_window_center))); + bool below = static_cast(pitch) - static_cast(o.pulse_window_center) < 0; + distance = below ? -d : d; + p.pulse_count = 1; + } + float g = distance / window; + g = 1.0f - g; + g = core::max_num(g, 0.0f); + p.pulse_gain[p.pulse_count - 1] = g; + } + } else if (silence && decoded_count >= 1) { + float g = o.silence_gain; + for (int32_t k = 0; k < decoded_count; k++) p.amplitude[1 + k] = p.amplitude[1 + k] * g; + } + bad_count = 0; + muted = false; + synth_frame(synth, options, p, buf); + last_good = p; + had_good = true; +} + +// Output stage: the high-pass (when highpass_hz > 0), the frame limiter, the soft limiter, rounding to 16 bits. +void Decoder::output(float* buf, int16_t* pcm) { + const Options& o = options; + float fc = o.highpass_hz; + HighPass& hp = highpass; + if (fc > 0.0f) { + if (!(hp.cutoff == fc)) { + // RBJ high-pass biquad, Q = 1/sqrt(2) + float t = fc * 8192.0f; + t = t / kSampleRate; + t = t + 0.5f; + int32_t i = core::to_int32_sat(static_cast(t)); + const float* cosine = halfrate::tables::kCosine; + float cos_w = cosine[static_cast(i) & 0x1fff]; + float alpha = cosine[(static_cast(i) + 0x1800) & 0x1fff]; + alpha = alpha * kSqrtHalf; + float a0 = alpha + 1.0f; + float one_plus_cos = cos_w + 1.0f; + hp.b1 = -one_plus_cos / a0; + float b0 = one_plus_cos * 0.5f, a1 = cos_w * -2.0f; + b0 = b0 / a0; + a1 = a1 / a0; + hp.b0 = b0; + hp.b2 = b0; + hp.a1 = a1; + hp.a2 = (1.0f - alpha) / a0; + hp.cutoff = fc; + } + for (HighPass::Section& z : hp.sections) { + for (int i = 0; i < kFrameSamples; i++) { + float x = buf[i]; + float y = x * hp.b0; + float p0 = hp.b1 * z.x1, p1 = hp.b2 * z.x2; + y = y + p0; + y = y + p1; + float q0 = hp.a1 * z.y1, q1 = hp.a2 * z.y2; + y = y - q0; + y = y - q1; + float old_x1 = z.x1, old_y1 = z.y1; + z.x1 = x; + z.x2 = old_x1; + // written as !(>=) so a NaN is flushed too rather than kept in the filter state + z.y1 = !(std::fabs(y) >= kFlushBelow) ? 0.0f : y; + z.y2 = !(std::fabs(old_y1) >= kFlushBelow) ? 0.0f : old_y1; + buf[i] = y; + } + } + } + if (o.frame_limiter != 0) { + // frame rms in dB; above the knee the excess is scaled by the ratio; the gain ramps across the frame + float e = 0.0f; + for (int i = 0; i < kFrameSamples; i++) { float q = buf[i] * buf[i]; e = e + q; } + e = e * kOneOver160; + float db = 0.0f, g = 1.0f; + if (e > 1.0f) db = fast_log2(e) * kDbPerLog2; + float knee = o.frame_limiter_knee_db; + if (db > knee) { + float t = db - knee; + t = t * o.frame_limiter_ratio; + t = knee + t; + t = t - db; + t = t * kLog2PerDb; + g = fast_exp2(t); + } + for (uint32_t i = 0; i < kFrameSamples; i++) { + float r = static_cast(i + 1) * kOneOver160; + float g0 = limiter_gain; + float dg = g - g0; + r = r * dg; + r = g0 + r; + buf[i] = buf[i] * r; + } + limiter_gain = g; + } + // soft limiter: above the threshold x - t is mapped to (x - t) / (1 + (x - t) / (ceiling - t)) + float t = o.limiter_threshold; + bool on = !(t <= 0.0f); + float headroom = kLimiterCeiling - t; + for (int i = 0; i < kFrameSamples; i++) { + float x = buf[i]; + bool negative = x < 0.0f; + float ax = negative ? -x : x; + if (on && !(t >= ax)) { + float v = ax - t; + v = v / headroom; + float w = v * headroom; + v = v + 1.0f; + v = w / v; + v = t + v; + x = negative ? -v : v; + } + bool high = x >= 32767.0f, low = -32768.0f >= x; + if (!high && !low) { + float h = x >= 0.0f ? 0.5f : -0.5f; + pcm[i] = static_cast(static_cast(core::to_int32_sat(static_cast(x + h)))); + } else { + pcm[i] = low && !high ? -32768 : 32767; + } + } +} + +DecodedKind Decoder::decode_bits(const uint8_t* in, int16_t* pcm) { + uint8_t bits[core::kFrameBits]; + if (options.rotated_layout == 1) core::standard_from_rotated(in, bits); + else for (int i = 0; i < core::kFrameBits; i++) bits[i] = in[i]; + const core::FrameFields received = core::fields_from_bits(bits); + float buf[kFrameSamples]; + core::FrameParams params; + DecodedKind kind; + int32_t pitch = received[core::kFieldPitch]; + if (pitch < kFirstNonVoicePitch) { + // voice. Pulse frames may be dequantised with a fixed pitch index; the received one places the pulses. + core::FrameFields fields = received; + if (received[core::kFieldVoicing] >= kFirstPulseVoicing && options.pulse_pitch_index >= 0) { + fields[core::kFieldPitch] = options.pulse_pitch_index; + core::dequantize(dequant, fields, ¶ms); + params.fields[core::kFieldPitch] = received[core::kFieldPitch]; + } else { + core::dequantize(dequant, fields, ¶ms); + } + voice(params, false, buf); + kind = DecodedKind::voice; + } else if ((received[core::kFieldVoicing] & ~1) == kSilenceVoicing) { + // silence: dequantised at a fixed pitch; silence_predictor decides what that does to the predictor + core::FrameFields fields = received; + fields[core::kFieldPitch] = kSilencePitch; + int32_t mode = options.silence_predictor; + if (mode == 2 || mode == 3) { + core::DequantState saved = dequant; + if (mode == 2) core::dequant_reset(dequant); + core::dequantize(dequant, fields, ¶ms); + dequant = saved; + } else { + if (mode == 1) core::dequant_reset(dequant); + core::dequantize(dequant, fields, ¶ms); + if (mode == 4 || mode == 1) core::dequant_reset(dequant); + } + params.fields[core::kFieldVoicing] = kSilenceVoicing; + voice(params, true, buf); + kind = DecodedKind::silence; + } else { + // the tone fields are read from the frame as received (no layout rotation) + kind = tone_or_erasure(in, buf); + } + output(buf, pcm); + return kind; +} + +void Decoder::decode_erased(int16_t* pcm) { + float buf[kFrameSamples]; + conceal(buf); + output(buf, pcm); +} + +} // namespace halfrate::dec diff --git a/mbe/decoder.h b/mbe/decoder.h new file mode 100644 index 0000000..a8068b3 --- /dev/null +++ b/mbe/decoder.h @@ -0,0 +1,60 @@ +// The frame decoder: voice, silence and tone frames, erasures (repeat, mute, comfort noise), and the output stage +// (high-pass, frame limiter, soft limiter, conversion to 16 bits). +#pragma once +#include +#include + +#include "dequant.h" +#include "decoder_options.h" +#include "decoder_synth.h" + +namespace halfrate::dec { + +// What a frame decoded as. +enum class DecodedKind : int32_t { + voice = 0, + silence = 1, + tone = 2, + erasure = 3, // concealed: a repeat of the last good frame, a muted frame or comfort noise +}; + +// Two cascaded biquad high-pass sections with the same coefficients. +struct HighPass { + float cutoff = -1.0f; // the cutoff (Hz) the coefficients are for + float b0 = 0.0f, b1 = 0.0f, b2 = 0.0f, a1 = 0.0f, a2 = 0.0f; + struct Section { + float x1 = 0.0f, x2 = 0.0f, y1 = 0.0f, y2 = 0.0f; + }; + std::array sections{}; +}; + +struct Decoder { + Options options; + core::DequantState dequant; + SynthState synth; + SynthFrame last_good; // the last voice or silence frame (amplitudes scaled by each repeat) + bool had_good = false; // a voice or silence frame was decoded since the start or the last tone + int32_t bad_count = 0; // consecutive erased frames + bool muted = false; // erasures have gone past repeating + std::array tone_phase{}; // tone oscillators, 2^32 = one cycle + float limiter_gain = 1.0f; // frame limiter gain reached at the end of the previous frame + HighPass highpass; + + Decoder(); + // Back to the start-of-stream state; the options are kept. + void reset(); + // Sets an option by name (options.h); false for an unknown name. + bool set(const char* name, double value); + // One 49-bit frame (one bit per byte) to 160 samples. + DecodedKind decode_bits(const uint8_t* bits49, int16_t* pcm); + // One erased frame (no frame received) to 160 samples. + void decode_erased(int16_t* pcm); + +private: + void conceal(float* buf); + DecodedKind tone_or_erasure(const uint8_t* bits49, float* buf); + void voice(const core::FrameParams& params, bool silence, float* buf); + void output(float* buf, int16_t* pcm); +}; + +} // namespace halfrate::dec diff --git a/mbe/decoder_api.cpp b/mbe/decoder_api.cpp new file mode 100644 index 0000000..382eca8 --- /dev/null +++ b/mbe/decoder_api.cpp @@ -0,0 +1,47 @@ +// The decoder half of the C API (include/halfrate.h). +#include +#include + +#include "fec.h" +#include "frame.h" +#include "decoder.h" +#include "halfrate.h" + +struct hr_decoder { + halfrate::dec::Decoder decoder; +}; + +extern "C" { + +hr_decoder* hr_decoder_new(void) { return new (std::nothrow) hr_decoder(); } + +void hr_decoder_free(hr_decoder* d) { delete d; } + +int hr_decoder_set(hr_decoder* d, const char* name, double value) { + if (!d || !name) return -1; + return d->decoder.set(name, value) ? 0 : -1; +} + +int hr_decode(hr_decoder* d, const uint8_t* frame, int16_t* pcm) { + if (!pcm) return -1; + if (!d) { + std::memset(pcm, 0, HR_SAMPLES * sizeof(int16_t)); + return -1; + } + if (!frame) { + d->decoder.decode_erased(pcm); + return HR_ERASURE; + } + uint8_t bits[HR_BITS]; + halfrate::core::bits_from_bytes(frame, bits); + return static_cast(d->decoder.decode_bits(bits, pcm)); +} + +int hr_decode_air(hr_decoder* d, const uint8_t* air, int16_t* pcm) { + if (!d || !air) return hr_decode(d, nullptr, pcm); + uint8_t frame[HR_FRAME_BYTES]; + halfrate::core::fec_decode_frame(air, frame, nullptr); + return hr_decode(d, frame, pcm); +} + +} // extern "C" diff --git a/mbe/decoder_options.cpp b/mbe/decoder_options.cpp new file mode 100644 index 0000000..6d7f053 --- /dev/null +++ b/mbe/decoder_options.cpp @@ -0,0 +1,144 @@ +#include "decoder_options.h" + +#include + +#include "numeric.h" + +namespace halfrate::dec { + +namespace { + +enum class Kind { real, integer, integer_resets_synth }; + +struct OptionEntry { + const char* name; + Kind kind; + float Options::*real; + int32_t Options::*integer; + int32_t low, high; // integer options are clamped to [low, high] +}; + +constexpr int32_t kIntMin = INT32_MIN, kIntMax = INT32_MAX; + +constexpr OptionEntry real(const char* name, float Options::*field) { + return {name, Kind::real, field, nullptr, 0, 0}; +} +constexpr OptionEntry integer(const char* name, int32_t Options::*field, int32_t low = kIntMin, int32_t high = kIntMax) { + return {name, Kind::integer, nullptr, field, low, high}; +} +constexpr OptionEntry resetting(const char* name, int32_t Options::*field) { + return {name, Kind::integer_resets_synth, nullptr, field, kIntMin, kIntMax}; +} + +const OptionEntry kOptionTable[] = { + real("output_gain", &Options::output_gain), + real("mixed_voiced_share", &Options::mixed_voiced_share), + real("mixed_pulse_share", &Options::mixed_pulse_share), + real("pulse_noise_pulse_weight", &Options::pulse_noise_pulse_weight), + real("pulse_noise_noise_weight", &Options::pulse_noise_noise_weight), + real("voiced_weight", &Options::voiced_weight), + real("high_band_start", &Options::high_band_start), + real("high_band_tilt", &Options::high_band_tilt), + // replaces a voice frame's pitch index, so it must be a voice pitch: at most 119 (120 and up are tones and + // erasures, which have no fundamental) + integer("pulse_pitch_index", &Options::pulse_pitch_index, kIntMin, 119), + real("pulse_window", &Options::pulse_window), + integer("pulse_window_center", &Options::pulse_window_center), + integer("pulse_enable", &Options::pulse_enable), + integer("pulse_position_low", &Options::pulse_position_low), + integer("pulse_position_high", &Options::pulse_position_high), + real("pulse_pair_first_start", &Options::pulse_pair_first_start), + real("pulse_pair_first_step", &Options::pulse_pair_first_step), + real("pulse_pair_second_start", &Options::pulse_pair_second_start), + real("pulse_pair_second_step", &Options::pulse_pair_second_step), + real("phase_dispersion", &Options::phase_dispersion), + real("phase_level_offset", &Options::phase_level_offset), + // the phase term's tap weights are a table of 32 + integer("phase_taps", &Options::phase_taps, 1, 32), + integer("phase_odd_taps", &Options::phase_odd_taps), + real("silence_gain", &Options::silence_gain), + integer("silence_predictor", &Options::silence_predictor), + integer("rotated_layout", &Options::rotated_layout), + real("tone_gain", &Options::tone_gain), + integer("enhance", &Options::enhance), + real("enhance_reserved", &Options::enhance_reserved), + real("enhance_strength", &Options::enhance_strength), + real("enhance_min_weight", &Options::enhance_min_weight), + real("enhance_max_weight", &Options::enhance_max_weight), + integer("enhance_bypass_divisor", &Options::enhance_bypass_divisor), + real("enhance_power_high", &Options::enhance_power_high), + real("enhance_power_low", &Options::enhance_power_low), + real("enhance_split_frequency", &Options::enhance_split_frequency), + integer("repeat_max", &Options::repeat_max), + real("repeat_gain", &Options::repeat_gain), + real("repeat_high_gain", &Options::repeat_high_gain), + real("repeat_high_start", &Options::repeat_high_start), + real("comfort_noise_level", &Options::comfort_noise_level), + integer("fec_error_threshold", &Options::fec_error_threshold), + real("highpass_hz", &Options::highpass_hz), + integer("frame_limiter", &Options::frame_limiter), + real("frame_limiter_knee_db", &Options::frame_limiter_knee_db), + real("frame_limiter_ratio", &Options::frame_limiter_ratio), + real("limiter_threshold", &Options::limiter_threshold), + real("unvoiced_level_db", &Options::unvoiced_level_db), + real("unvoiced_tilt", &Options::unvoiced_tilt), + real("unvoiced_gain", &Options::unvoiced_gain), + real("pulse_gain", &Options::pulse_gain), + real("pulse_length", &Options::pulse_length), + integer("pulse_minimum_phase", &Options::pulse_minimum_phase), + integer("pulse_shift", &Options::pulse_shift), + real("voiced_fade_start", &Options::voiced_fade_start), + real("voiced_fade_end", &Options::voiced_fade_end), + // the single-block noise (320 samples) is added at this offset into 160 + 320 samples of output and overlap + integer("noise_offset", &Options::noise_offset, 0, 160), + resetting("initial_phase", &Options::initial_phase), + real("unvoiced_top_extend", &Options::unvoiced_top_extend), + integer("unvoiced_low_cut", &Options::unvoiced_low_cut), + integer("phase_tracking", &Options::phase_tracking), + integer("amplitude_log_interp", &Options::amplitude_log_interp), + integer("amplitude_hold", &Options::amplitude_hold), + integer("amplitude_frequency_map", &Options::amplitude_frequency_map), + integer("noise_method", &Options::noise_method), + integer("noise_coherent_bins", &Options::noise_coherent_bins), + real("noise_phase_jitter", &Options::noise_phase_jitter), + integer("noise_white", &Options::noise_white), + real("noise_gain_bin1", &Options::noise_gain_bin1), + real("noise_gain_bins23", &Options::noise_gain_bins23), + real("pulse_highpass_hz", &Options::pulse_highpass_hz), + resetting("noise_seed", &Options::noise_seed), + real("voicing_off_start", &Options::voicing_off_start), + real("voicing_off_end", &Options::voicing_off_end), + real("voicing_on_start", &Options::voicing_on_start), + real("voicing_on_end", &Options::voicing_on_end), + real("harmonic_fade_start", &Options::harmonic_fade_start), + real("harmonic_fade_end", &Options::harmonic_fade_end), + integer("pitch_glide_start", &Options::pitch_glide_start), + integer("pitch_glide_end", &Options::pitch_glide_end), + integer("amplitude_glide_start", &Options::amplitude_glide_start), + integer("amplitude_glide_end", &Options::amplitude_glide_end), +}; + +} // namespace + +bool set_option(Options& options, const char* name, double value, SetEffect* effect) { + if (effect) *effect = SetEffect::none; + if (!name) return false; + // NaN and infinities would stay in the filter and predictor state after the option is set back + if (!std::isfinite(value)) return false; + double half = value >= 0.0 ? 0.5 : -0.5; + int32_t rounded = core::to_int32_sat(value + half); + for (const OptionEntry& entry : kOptionTable) { + if (std::strcmp(name, entry.name) != 0) continue; + if (entry.kind == Kind::real) { + options.*entry.real = static_cast(value); + } else { + int32_t v = rounded < entry.low ? entry.low : rounded; + options.*entry.integer = v > entry.high ? entry.high : v; + if (entry.kind == Kind::integer_resets_synth && effect) *effect = SetEffect::reset_synth; + } + return true; + } + return false; +} + +} // namespace halfrate::dec diff --git a/mbe/decoder_options.h b/mbe/decoder_options.h new file mode 100644 index 0000000..0fdc296 --- /dev/null +++ b/mbe/decoder_options.h @@ -0,0 +1,108 @@ +// Decoder options: every tuning value of the decoder and its synthesiser, with their defaults, and setting them +// by name. docs/options.md describes each one. +#pragma once +#include + +namespace halfrate::dec { + +struct Options { + // ---- frame decoding and parameter shaping + float output_gain = 0x1.0a3d7p+1f; // 2.08: every harmonic amplitude is scaled by this + float mixed_voiced_share = 0.85f; // mixed harmonics: voiced weight sqrt(share), noise sqrt(1 - share) + float mixed_pulse_share = 0.5f; // stored only, no effect + float pulse_noise_pulse_weight = 0x1.ccccccp-1f; // 0.9: pulse weight of pulse-plus-noise harmonics + float pulse_noise_noise_weight = 0x1.3d70a4p-1f; // 0.62: noise weight of pulse-plus-noise harmonics + float voiced_weight = 1.0f; // voiced weight of voiced harmonics (and scale of mixed ones) + float high_band_start = 0x1.4cccccp-1f; // 0.65: the high-band tilt starts at this fraction of L + float high_band_tilt = 0x1.19999ap-1f; // 0.55: log2 gain reached at the top harmonic; 0 = off + int32_t pulse_pitch_index = 119; // pulse frames dequantise with this pitch index (< 0: their own) + float pulse_window = 88.0f; // a pulse's gain falls linearly to 0 over this many samples + int32_t pulse_window_center = 62; // single pulses: distance is counted from this pitch index + int32_t pulse_enable = 1; // 0: pulse codes decode as noise and no pulses are placed + int32_t pulse_position_low = 98; // single pulse position = this + pitch index (voicing 18..23) + int32_t pulse_position_high = 16; // the same for voicing 26..31 + float pulse_pair_first_start = 101.0f; // pulse pairs (voicing 24, 25): first position start + step * (b0 / 11) + float pulse_pair_first_step = 0x1.79999ap+3f; // 11.8 + float pulse_pair_second_start = 21.0f; // second position start + step * (b0 % 11) + float pulse_pair_second_step = 0x1.79999ap+3f; + float phase_dispersion = 0x1.333334p-2f; // 0.3: weight of the phase term from the log-amplitude slope + float phase_level_offset = 0.0f; // added to each log amplitude the phase term reads + int32_t phase_taps = 19; // taps of the phase term (clamped to 1..32) + int32_t phase_odd_taps = 1; // nonzero: odd taps only + float silence_gain = 0x1.333334p-2f; // 0.3: amplitude scale of silence frames + int32_t silence_predictor = 3; // what a silence frame does to the predictor (docs/options.md) + int32_t rotated_layout = 1; // 1: frames arrive in the rotated bit layout + float tone_gain = 1.0f; // tone frame level scale + + // ---- enhancement (core::EnhanceOptions) + int32_t enhance = 1; // the formant enhancement runs only when this is exactly 1 + float enhance_reserved = 1.0f; // stored only, no effect + float enhance_strength = 0.5f; + float enhance_min_weight = 0x1.333334p-2f; // 0.3 + float enhance_max_weight = 2.0f; + int32_t enhance_bypass_divisor = 0; + float enhance_power_high = 0x1.b33334p-1f; // 0.85 + float enhance_power_low = 0x1.333334p-1f; // 0.6 + float enhance_split_frequency = 0.125f; // cycles per sample + + // ---- erasures + int32_t repeat_max = 3; // erased frames that repeat the last good one before muting + float repeat_gain = 1.0f; // amplitude scale per repeat (compounding) + float repeat_high_gain = 1.0f; // extra scale per repeat at half the sample rate (compounding) + float repeat_high_start = 0.3f; // the lift rises in dB from here, cycles per sample (2.4 kHz) + float comfort_noise_level = 1.0f; // rms of the comfort noise after muting + int32_t fec_error_threshold = 6; // stored only, no effect on this frame format + + // ---- output stage + float highpass_hz = 0.0f; // cutoff of the 4th-order high-pass; <= 0 = off + int32_t frame_limiter = 1; // nonzero: the frame level limiter runs + float frame_limiter_knee_db = 78.5f; // frame rms (dB) above which it compresses + float frame_limiter_ratio = 0x1.333334p-2f; // 0.3: slope above the knee + float limiter_threshold = 28000.0f; // soft limiter start (towards 32766); <= 0 = off + float unvoiced_level_db = 0.0f; // stored only, no effect + float unvoiced_tilt = 0.0f; // stored only, no effect + + // ---- synthesiser + float unvoiced_gain = 0x1.b33334p-1f; // 0.85 + float pulse_gain = 1.0f; + float pulse_length = 48.0f; // half width of the pulse's cosine window, samples + int32_t pulse_minimum_phase = 0; // nonzero: minimum-phase pulse shape, else zero phase + int32_t pulse_shift = 0; // samples added to each pulse position + float voiced_fade_start = 0.0f; // per-harmonic oscillators: fade-out of a harmonic that stops + float voiced_fade_end = 160.0f; + int32_t noise_offset = 0; // single-block noise: sample offset (clamped to 0..160) + int32_t initial_phase = 0; // oscillator start phases: 0 zero, 1 random, 2 quadratic + float unvoiced_top_extend = 0.0f; // single-block noise and pulses: reach above harmonic L + int32_t unvoiced_low_cut = 1; // nonzero: no noise below harmonic 1/2 + int32_t phase_tracking = 1; // 1: one fundamental phase track, else per-harmonic oscillators + int32_t amplitude_log_interp = 1; // nonzero: amplitudes glide log-linearly + int32_t amplitude_hold = 0; + int32_t amplitude_frequency_map = 0; + int32_t noise_method = 1; // 1: four 40-sample blocks, 0: one 320-sample block, else none + int32_t noise_coherent_bins = 64; // noise bins below this keep a drifting phase + float noise_phase_jitter = 0.5f; + int32_t noise_white = 0; + float noise_gain_bin1 = 0.0f; + float noise_gain_bins23 = 0x1.333334p-3f; // 0.15 + float pulse_highpass_hz = 0.0f; + int32_t noise_seed = 0; + float voicing_off_start = 5.0f; // crossfade window (samples) of a harmonic losing voicing + float voicing_off_end = 50.0f; + float voicing_on_start = 55.0f; // and of one gaining it + float voicing_on_end = 90.0f; + float harmonic_fade_start = 0.0f; // and of one present in only one of the two frames + float harmonic_fade_end = 160.0f; + int32_t pitch_glide_start = 0; // the fundamental glides over these samples + int32_t pitch_glide_end = 160; + int32_t amplitude_glide_start = 0; // the amplitudes glide over these samples + int32_t amplitude_glide_end = 160; +}; + +// What setting an option does besides storing the value. +enum class SetEffect { none, reset_synth }; + +// Sets option name to value: float options take (float)value, integer options value rounded half away from zero +// (saturating), some are clamped (docs/options.md). Returns false for an unknown name. +bool set_option(Options& options, const char* name, double value, SetEffect* effect); + +} // namespace halfrate::dec diff --git a/mbe/decoder_synth.cpp b/mbe/decoder_synth.cpp new file mode 100644 index 0000000..203d7d4 --- /dev/null +++ b/mbe/decoder_synth.cpp @@ -0,0 +1,629 @@ +#include "decoder_synth.h" + +#include + +#include "fastmath.h" +#include "fft.h" +#include "numeric.h" +#include "tables.h" + +namespace halfrate::dec { + +namespace { + +using core::fast_exp2; +using core::fast_log2; +using core::fast_sqrt; +using core::to_int32_sat; +using core::to_int64_sat; + +constexpr float kOneOver160 = 0x1.99999ap-8f; +constexpr float kOneOverTwoPi = 0x1.45f306p-3f; +constexpr float kLogFloor = 0x1.0c6f7ap-20f; // 1e-6 +constexpr float kLn2 = 0x1.62e43p-1f; +constexpr float kLog2E = 0x1.715476p+0f; +constexpr float kWhiteNoiseScale = 0x1.186f18p-2f; +constexpr float kSqrt3 = 0x1.bb67aep+0f; // uniform noise of amplitude 1 has rms 1/sqrt(3) +constexpr float kFlushBelow = 1.0000000031710769e-30f; +constexpr uint32_t kSeedOffset = 0x51c0de01u; + +const float* const kCos = tables::kCosine; + +inline uint32_t next_random(uint32_t x) { return x * 1664525u + 1013904223u; } + +// x * 2^bits to int64, truncating and saturating +inline int64_t to_fixed64(float x, int bits) { return to_int64_sat(static_cast(x) * static_cast(1ull << bits)); } + +// a fundamental (cycles per sample) as a 32.32 fixed-point phase increment, in the top half of 64 bits +inline uint64_t phase_increment(float fundamental) { return static_cast(to_fixed64(fundamental, 32)) << 32; } + +// high 64 bits of the signed 128-bit product +inline int64_t multiply_high(int64_t a, int64_t b) { return static_cast((static_cast<__int128>(a) * b) >> 64); } + +// NaN (a zero-length crossfade at its start point) gives 0 +inline float clamp01(float v) { + v = !(v >= 0.0f) ? 0.0f : v; + return v > 1.0f ? 1.0f : v; +} + +// The noise spectrum of a frame at the 65 bins of a 128-point FFT: amplitude[k] and its unvoiced weight band[k], +// taken from the harmonic nearest bin k. +void noise_bins(const Options& options, const SynthFrame& frame, float* amplitude, float* band) { + if (frame.active == 0) { + for (int k = 0; k < 65; k++) { amplitude[k] = 0.0f; band[k] = 0.0f; } + return; + } + float w0 = frame.fundamental; + float period = 1.0f / w0; + float gain = options.unvoiced_gain; + gain = gain * fast_sqrt(32.0f / w0); + for (uint32_t k = 0; k < 65; k++) { + float x = period * (static_cast(k) * (1.0f / 128.0f)); + x = x + 0.5f; + int32_t l = to_int32_sat(x); + amplitude[k] = 0.0f; + band[k] = 0.0f; + if (l <= 0) { + if (options.unvoiced_low_cut != 0) continue; + l = 1; + } + if (l > frame.harmonic_count) continue; + float bin_gain; + if (k == 1) bin_gain = options.noise_gain_bin1; + else if (k <= 3) bin_gain = options.noise_gain_bins23; + else bin_gain = 1.0f; + float a = gain * frame.amplitude[l]; + amplitude[k] = a * bin_gain; + band[k] = frame.unvoiced[l]; + } +} + +// In-place 128-point forward FFT (kernel e^-j), unscaled. +void fft128(float* re, float* im) { + for (int i = 0; i < 128; i++) { + int j = 0; + for (int b = 0; b < 7; b++) j |= ((i >> b) & 1) << (6 - b); + if (i < j) { + float a = re[i], b = im[i]; + re[i] = re[j]; im[i] = im[j]; + re[j] = a; im[j] = b; + } + } + for (uint32_t len = 2; len <= 128; len *= 2) { + uint32_t half = len >> 1; + uint32_t step = 8192u / len; + for (uint32_t base = 0; base < 128; base += len) { + for (uint32_t k = 0; k < half; k++) { + float c = kCos[k * step]; + float s = kCos[(0x1800 + k * step) & 0x1fff]; + uint32_t p = base + half + k, q = base + k; + float xr = re[p], xi = im[p]; + float tr = c * xr + s * xi; + float ti = c * xi - s * xr; + re[p] = re[q] - tr; + im[p] = im[q] - ti; + re[q] = tr + re[q]; + im[q] = ti + im[q]; + } + } + } +} + +// The spectrum at the 257 bins of a 512-point FFT: amplitude times weight of the harmonic nearest each bin. +// Bins above harmonic L get harmonic L's value up to L + 0.5 + top * L when top > 0. +void spectrum_bins(const SynthFrame& frame, const float* weight, int low_cut, float top, float* out) { + float period = 1.0f / frame.fundamental; + for (uint32_t k = 0; k < 257; k++) { + float h = period * (static_cast(k) * (1.0f / 512.0f)); + int32_t l = to_int32_sat(h + 0.5f); + float v = 0.0f; + if (!(l <= 0 && low_cut != 0)) { + int32_t m = l > 0 ? l : 1; + int32_t count = frame.harmonic_count; + bool inside = true; + if (m > count) { + inside = false; + if (top > 0.0f) { + float fl = static_cast(count); + float limit = (fl + 0.5f) + top * fl; + if (h < limit) { m = count; inside = true; } + } + } + if (inside) v = frame.amplitude[m] * weight[m]; + } + out[k] = v; + } +} + +// In-place inverse 512-point FFT, scaled by 1/512. +void ifft512(float* re, float* im) { + for (int i = 0; i < 512; i++) im[i] = -im[i]; + core::fft512(re, im); + for (int i = 0; i < 512; i++) { + re[i] = re[i] * (1.0f / 512.0f); + im[i] = im[i] * (-1.0f / 512.0f); + } +} + +// The ramp start and end of a glide over [start, end) samples, clamped to the frame; the whole frame when empty. +void glide_span(int32_t start, int32_t end, int32_t* from, int32_t* to) { + if (start < 0) start = 0; + if (end >= kFrameSamples) end = kFrameSamples; + if (end > start) { *to = end; *from = start; } + else { *to = kFrameSamples; *from = 0; } +} + +// Harmonics with phase_tracking 1: one fundamental phase track, harmonic l at l times it plus its own phase offset. +void harmonics_tracked(SynthState& state, const Options& options, const SynthFrame& frame, float* out, + int count, uint64_t previous_increment) { + const SynthFrame& prev = state.previous; + uint64_t current_increment = previous_increment; + if (frame.active) current_increment = phase_increment(frame.fundamental); + + // the fundamental's phase per sample; its frequency glides between the two frames' over the pitch glide span + uint64_t phase[kFrameSamples]; + int32_t start, end; + glide_span(options.pitch_glide_start, options.pitch_glide_end, &start, &end); + int64_t slope = static_cast(current_increment - previous_increment) / static_cast(end - start); + int64_t half_slope = static_cast(static_cast(slope) + (static_cast(slope) >> 63)) >> 1; + uint64_t acc = state.fundamental_phase; + uint64_t freq = previous_increment; + for (int64_t n = 0; n < kFrameSamples; n++) { + phase[n] = acc; + uint64_t step = freq + half_slope, next = freq + slope; + if (n >= end) { next = freq; step = current_increment; } + if (static_cast(n) < static_cast(static_cast(start))) step = previous_increment; + else freq = next; + acc = step + acc; + } + state.fundamental_phase = acc; + + for (int64_t l = 1; l <= count; l++) { + bool in_prev = prev.active ? l <= prev.harmonic_count : false; + bool in_cur = frame.active ? l <= frame.harmonic_count : false; + float amp_prev = in_prev ? prev.amplitude[l] : 0.0f; + float amp_cur = in_cur ? frame.amplitude[l] : 0.0f; + float voi_prev = in_prev ? prev.voiced[l] : 0.0f; + float voi_cur = in_cur ? frame.voiced[l] : 0.0f; + if (voi_prev == 0.0f && voi_cur == 0.0f) continue; + bool both = in_prev && in_cur; + if (both && options.amplitude_frequency_map && voi_prev > 0.0f && voi_cur > 0.0f) { + // the previous frame's amplitude at the frequency of this frame's harmonic l + float x = static_cast(static_cast(l)); + x = frame.fundamental * x; + x = x / prev.fundamental; + int32_t i = to_int32_sat(x); + float fraction = x - static_cast(to_int32_sat(x)); + if (i < 1) fraction = 0.0f; + i = i > 1 ? i : 1; + int32_t prev_count = prev.harmonic_count; + float frac = i < prev_count ? fraction : 0.0f; + i = i < prev_count ? i : prev_count; + amp_prev = prev.amplitude[i]; + if (frac > 0.0f && amp_prev > 0.0f && prev.amplitude[i + 1] > 0.0f) { + float l0 = fast_log2(amp_prev); + float l1 = fast_log2(prev.amplitude[i + 1]); + float l0b = fast_log2(prev.amplitude[i]); + float y = l1 - l0b; + y = frac * y; + y = l0 + y; + amp_prev = fast_exp2(y); + } + } + if (!in_prev || (voi_prev == 0.0f && options.amplitude_hold)) amp_prev = amp_cur; + if (!in_cur || (options.amplitude_hold && voi_cur == 0.0f)) amp_cur = amp_prev; + float lo, hi; + if (!both) { lo = options.harmonic_fade_start; hi = options.harmonic_fade_end; } + else if (voi_cur < voi_prev) { lo = options.voicing_off_start; hi = options.voicing_off_end; } + else { lo = options.voicing_on_start; hi = options.voicing_on_end; } + float phase_cur = in_cur ? frame.phase[l] : prev.phase[l]; + float phase_prev = phase_cur; + if (in_prev) phase_prev = prev.phase[l]; + float dphase = phase_cur - phase_prev; + float round = dphase >= 0.0f ? 0.5f : -0.5f; + bool use_log = (amp_cur > 0.0f && amp_prev > 0.0f) && options.amplitude_log_interp != 0; + int32_t amp_start, amp_end; + glide_span(options.amplitude_glide_start, options.amplitude_glide_end, &_start, &_end); + float ratio, amp_slope; + if (use_log) { + float lc = fast_log2(amp_cur); + float lp = fast_log2(amp_prev); + float y = lc - lp; + float r = 1.0f / static_cast(amp_end - amp_start); + ratio = fast_exp2(r * y); + amp_slope = 0.0f; + } else { + float d = amp_cur - amp_prev; + float r = 1.0f / static_cast(amp_end - amp_start); + amp_slope = d * r; + ratio = 1.0f; + } + float phase_wrap = dphase - static_cast(to_int32_sat(dphase + round)); + float voicing_span = hi - lo; + float dvoicing = voi_cur - voi_prev; + float amp = amp_prev; + for (uint64_t n = 0; n < kFrameSamples; n++) { + if (n < static_cast(static_cast(amp_start)) || static_cast(n) >= amp_end) { + amp = static_cast(n) < amp_end ? amp : amp_cur; + } else if (use_log) { + amp = ratio * amp; + } else { + amp = amp_prev + amp_slope * static_cast(static_cast(n) - amp_start + 1); + } + float t = static_cast(static_cast(n + 1)); + float phi = t * kOneOver160; + phi = phase_wrap * phi; + phi = phase_prev + phi; + float v = t - lo; + v = v / voicing_span; + v = clamp01(v); + v = dvoicing * v; + v = voi_prev + v; + uint64_t x = phase[n] * static_cast(l); + int64_t offset = to_fixed64(phi, 32); + v = v * amp; + x = x + (static_cast(offset) << 32); + x = x + (1ull << 50); + x >>= 51; + v = v * kCos[x]; + out[n] = out[n] + v; + } + } +} + +// Harmonics with any other phase_tracking: one phase accumulator per harmonic, linear frequency glide. +void harmonics_accumulated(SynthState& state, const Options& options, const SynthFrame& frame, float* out, + int count, uint64_t previous_increment) { + const SynthFrame& prev = state.previous; + int cur_active = frame.active; + uint64_t current_increment = previous_increment; + if (cur_active) current_increment = phase_increment(frame.fundamental); + int64_t cur_count = frame.harmonic_count, prev_count = prev.harmonic_count; + int prev_active = prev.active; + for (int64_t l = 1; l <= count; l++) { + bool absent_prev = !(prev_active != 0 && l <= prev_count); + bool absent_cur = !(cur_active != 0 && l <= cur_count); + float amp_prev = 0.0f, amp_cur = 0.0f; + if (!absent_prev) amp_prev = prev.amplitude[l] * prev.voiced[l]; + if (!absent_cur) amp_cur = frame.amplitude[l] * frame.voiced[l]; + uint64_t freq_cur = current_increment * static_cast(l); + uint64_t acc = state.harmonic_phase[l]; + uint64_t freq_prev = previous_increment * static_cast(l); + if (absent_prev) freq_prev = freq_cur; + int64_t delta = static_cast(freq_cur - freq_prev); + if (absent_cur) delta = 0; + // delta / 160 and delta / 320, truncating + int64_t h = multiply_high(delta, 0x6666666666666667LL); + int64_t step = (h >> 6) + static_cast(static_cast(h) >> 63); + if (amp_prev == 0.0f && amp_cur == 0.0f) { + acc = static_cast(step) * 12800u + freq_prev * 160u + acc; + state.harmonic_phase[l] = acc; + continue; + } + bool fade = false; + if (amp_prev != 0.0f && amp_cur == 0.0f) fade = l > cur_count ? false : cur_active != 0; + uint64_t freq = static_cast((h >> 7) + static_cast(static_cast(h) >> 63)) + freq_prev; + float damp = amp_cur - amp_prev; + damp = damp * kOneOver160; + for (uint64_t n = 0; n < kFrameSamples; n++) { + float a; + float fade_end = options.voiced_fade_end, fade_start = options.voiced_fade_start; + if (fade && fade_end > fade_start) { + float x = static_cast(static_cast(n)) - fade_start; + float y = fade_end - fade_start; + x = x / y; + x = clamp01(x); + x = x * 0.5f; + x = cosine_interpolated(x); + x = x * 0.5f; + x = x + 0.5f; + a = amp_prev * x; + } else { + a = damp * static_cast(static_cast(n + 1)); + a = amp_prev + a; + } + a = a * kCos[(acc + (1ull << 50)) >> 51]; + out[n] = out[n] + a; + acc = freq + acc; + freq = freq + static_cast(step); + } + state.harmonic_phase[l] = acc; + } +} + +// noise_method 1: noise in four 40-sample blocks, 128-point FFTs, 80-sample sine windows, overlap-add. +void noise_blocks(SynthState& state, const Options& options, const SynthFrame& frame, float* out) { + float amp0[65], band0[65], amp1[65], band1[65], log0[65], log1[65]; + noise_bins(options, state.previous, amp0, band0); + noise_bins(options, frame, amp1, band1); + bool none = true; + for (int k = 0; k < 65; k++) { + if (band0[k] == 0.0f && band1[k] == 0.0f) continue; + float x = amp0[k], y = amp1[k]; + if (x == 0.0f) { amp0[k] = y; x = y; } + if (y == 0.0f) { amp1[k] = x; y = x; } + log0[k] = x > 0.0f ? fast_log2(x) : 0.0f; + log1[k] = y > 0.0f ? fast_log2(y) : 0.0f; + none = false; + } + if (none) return; + float white_re[128], white_im[128], re[128], im[128]; + const float* window = state.window80.data(); + for (int block = 0; block < 4; block++) { + float pos = static_cast(static_cast(40 * block + 40)); + float x = (pos - options.voicing_off_start) / (options.voicing_off_end - options.voicing_off_start); + float y = (pos - options.voicing_on_start) / (options.voicing_on_end - options.voicing_on_start); + float fall = clamp01(x); + float rise = clamp01(y); + if (options.noise_white) { + for (int n = 0; n < 128; n++) white_im[n] = 0.0f; + for (int n = 0; n < 128; n++) { + float v = 0.0f; + if (n < 80) { + state.random = next_random(state.random); + v = static_cast(state.random >> 8) * (1.0f / 8388608.0f); + v = v + -1.0f; + v = window[n] * v; + } + white_re[n] = v; + } + fft128(white_re, white_im); + } + float frame_pos = pos * kOneOver160; + for (int n = 0; n < 128; n++) { re[n] = 0.0f; im[n] = 0.0f; } + for (int k = 0; k < 63; k++) { + state.random = next_random(state.random); + uint32_t ph = state.random >> 19; + if (static_cast(k + 1) < static_cast(options.noise_coherent_bins)) { + float jitter = static_cast(static_cast(ph - 4096)); + jitter = options.noise_phase_jitter * jitter; + int32_t ji = to_int32_sat(jitter); + uint32_t v = static_cast(0xa00 * (k + 1)) + state.noise_phase[k]; + v = v + static_cast(ji); + ph = v & 0x1fff; + state.noise_phase[k] = ph; + } + float bp = band0[k + 1]; + if (bp == 0.0f && band1[k + 1] == 0.0f) continue; + float x0 = amp0[k + 1], x1 = amp1[k + 1], m; + if (x0 > 0.0f && x1 > 0.0f && options.amplitude_log_interp) { + float d = log1[k + 1] - log0[k + 1]; + d = frame_pos * d; + m = fast_exp2(log0[k + 1] + d); + } else { + float d = x1 - x0; + d = frame_pos * d; + m = x0 + d; + } + float bc = band1[k + 1]; + float d = bc - bp; + float g = bc > bp ? fall : rise; + g = d * g; + g = bp + g; + g = m * g; + if (g == 0.0f) continue; + float vr, vi; + if (options.noise_white) { + vr = g * white_re[k + 1]; + vr = vr * kWhiteNoiseScale; + vi = g * white_im[k + 1]; + vi = vi * kWhiteNoiseScale; + } else { + vr = g * kCos[ph]; + vi = g * kCos[(ph + 0x1800) & 0x1fff]; + } + re[k + 1] = vr; + im[k + 1] = vi; + re[127 - k] = vr; + im[127 - k] = -vi; + } + for (int n = 0; n < 128; n++) im[n] = -im[n]; + fft128(re, im); + for (int n = 0; n < 80; n++) { + float w = 1.0f; + if (!options.noise_white) w = window[n]; + float v = re[n] * (1.0f / 128.0f); + v = v * w; + int idx = 40 * block + n; + if (idx <= 159) out[idx] = v + out[idx]; + else state.overlap[idx - 160] = v + state.overlap[idx - 160]; + } + } +} + +// noise_method 0: one 512-point FFT of random-phase noise, 320-sample window, added at noise_offset. +void noise_single(SynthState& state, const Options& options, const SynthFrame& frame, float* out) { + float bins[257], noise[320], re[512], im[512]; + float gain = options.unvoiced_gain; + gain = gain * fast_sqrt(128.0f / frame.fundamental); + int64_t offset = options.noise_offset; // 0..160 (set_option clamps) + spectrum_bins(frame, frame.unvoiced.data(), options.unvoiced_low_cut, options.unvoiced_top_extend, bins); + bool any = false; + for (int k = 0; k < 257; k++) if (bins[k] != 0.0f) { any = true; break; } + if (!any) { + for (int n = 0; n < 320; n++) noise[n] = 0.0f; + } else { + uint32_t r = state.random; + for (int k = 0; k < 257; k++) { + r = next_random(r); + if ((k & 0xff) == 0) { re[k] = 0.0f; im[k] = 0.0f; continue; } + float a = gain * bins[k]; + float c = a * kCos[r >> 19]; + re[k] = c; + float s = kCos[((r >> 19) + 0x1800) & 0x1fff]; + im[k] = a * s; + re[512 - k] = c; + im[512 - k] = -(a * s); + } + state.random = r; + ifft512(re, im); + for (int n = 0; n < 320; n++) noise[n] = re[n] * state.window320[n]; + } + for (int64_t j = 0; j < 320; j++) { + int64_t idx = offset + j; + if (idx <= 159) out[idx] = out[idx] + noise[j]; + else state.overlap[idx - 160] = state.overlap[idx - 160] + noise[j]; + } +} + +// Pulses: a 512-sample pulse shape from the pulse weights (zero or minimum phase), windowed, added at the frame's +// pulse positions. +void add_pulses(SynthState& state, const Options& options, const SynthFrame& frame, float* out) { + float weights[257], re[512], im[512], pulse[512]; + float gain = options.pulse_gain; + gain = gain * fast_sqrt(40.0f / frame.fundamental); + spectrum_bins(frame, frame.pulse.data(), 0, options.unvoiced_top_extend, weights); + for (uint32_t k = 0; k < 257; k++) { + float f = static_cast(k) * 15.625f; + if (!(f < options.pulse_highpass_hz)) break; + weights[k] = 0.0f; + } + if (options.pulse_minimum_phase) { + // cepstrum of the log magnitude, folded to make it causal, back to a spectrum, exponentiated + for (int k = 0; k < 257; k++) { + float x = core::max_num(gain * weights[k], kLogFloor); + x = fast_log2(x) * kLn2; + re[k] = x; im[k] = 0.0f; + if (k & 0xff) { re[512 - k] = x; im[512 - k] = 0.0f; } + } + ifft512(re, im); + for (int k = 1; k < 256; k++) { + re[k] = re[k] + re[k]; + re[512 - k] = 0.0f; + } + for (int k = 0; k < 512; k++) im[k] = 0.0f; + core::fft512(re, im); + for (int k = 0; k < 512; k++) { + float m = fast_exp2(re[k] * kLog2E); + float p = im[k] * kOneOverTwoPi; + re[k] = m * cosine_interpolated(p); + p = p + -0.25f; + im[k] = m * cosine_interpolated(p); + } + ifft512(re, im); + for (int n = 0; n < 256; n++) pulse[n] = 0.0f; + for (int n = 0; n < 256; n++) pulse[256 + n] = re[n]; + } else { + for (int k = 0; k < 257; k++) { + float x = gain * weights[k]; + if (k == 256) x = 0.0f; + re[k] = x; im[k] = 0.0f; + if (k & 0xff) { re[512 - k] = x; im[512 - k] = 0.0f; } + } + ifft512(re, im); + for (int n = 0; n < 512; n++) pulse[n] = re[n ^ 0x100]; // centred on sample 256 + } + float length = options.pulse_length; + for (int n = 0; n < 512; n++) { + float d = static_cast(n - 256); + d = n < 256 ? -d : d; + float v = 0.0f; + if (!(d > length)) { + v = pulse[n]; + float x = d * 0.5f; + if (d != 0.0f) x = x / length; // the centre is 0 for any length, including pulse_length 0 + x = cosine_interpolated(x); + x = x * 0.5f; + x = x + 0.5f; + v = v * x; + } + pulse[n] = v; + } + // sample j of the pulse lands at position + shift + j - 256: in this frame below 160, then the overlap buffer + for (int i = 0; i < frame.pulse_count; i++) { + int64_t pos = static_cast(static_cast(options.pulse_shift) + + static_cast(frame.pulse_position[i])); + float pulse_gain = frame.pulse_gain[i]; + for (int j = 0; j < 512; j++, pos++) { + float v = pulse[j]; + if (v == 0.0f || pos < 256) continue; + if (pos < 256 + kFrameSamples) out[pos - 256] = pulse_gain * v + out[pos - 256]; + else if (pos < 256 + 3 * kFrameSamples) + state.overlap[pos - 416] = pulse_gain * v + state.overlap[pos - 416]; + } + } +} + +} // namespace + +float cosine_interpolated(float x) { + float s = x * 8192.0f; + int64_t i = to_fixed64(x, 13) - (s < 0.0f); + float fraction = s - static_cast(i); + float t0 = kCos[static_cast(i) & 0x1fff]; + float t1 = kCos[(static_cast(i) + 1u) & 0x1fff]; + return t0 + fraction * (t1 - t0); +} + +void synth_reset(SynthState& state, const Options& options) { + state = SynthState{}; + uint32_t r = static_cast(options.noise_seed) + kSeedOffset; + state.random = r; + for (uint32_t i = 0; i < 320; i++) { + float x = static_cast(i) + 0.5f; + x = x / 640.0f; + x = x + -0.25f; + state.window320[i] = cosine_interpolated(x); + } + for (uint32_t i = 0; i < 80; i++) { + float x = static_cast(i) + 0.5f; + x = x / 160.0f; + x = x + -0.25f; + state.window80[i] = cosine_interpolated(x); + } + uint32_t q = 0; + for (uint64_t j = 0; j < kHarmonicSlots; j++) { + uint64_t v; + if (options.initial_phase == 2) { + v = static_cast(q * static_cast(j)) << 32; + } else if (options.initial_phase == 1) { + r = next_random(r); + state.random = r; + v = static_cast(r) << 32; + } else { + v = 0; + } + state.harmonic_phase[j] = v; + q += 0x9000000u; + } +} + +void synth_comfort_noise(SynthState& state, float level, float* out) { + uint32_t r = state.random; + for (int i = 0; i < kFrameSamples; i++) { + r = next_random(r); + float u = static_cast(r >> 8) * (1.0f / 8388608.0f); + u = u + -1.0f; + out[i] = level * u * kSqrt3; + } + state.random = r; +} + +void synth_frame(SynthState& state, const Options& options, const SynthFrame& frame, float* out) { + for (int n = 0; n < kFrameSamples; n++) out[n] = state.overlap[n]; + for (int n = 0; n < kFrameSamples; n++) { + state.overlap[n] = state.overlap[kFrameSamples + n]; + state.overlap[kFrameSamples + n] = 0.0f; + } + if (frame.active == 0 && state.previous.active == 0) { + state.previous = frame; + return; + } + int32_t lc = frame.harmonic_count, lp = state.previous.harmonic_count; + int count = lc > lp ? lc : lp; + const SynthFrame& pitch_from = state.previous.active == 0 ? frame : state.previous; + uint64_t previous_increment = phase_increment(pitch_from.fundamental); + if (options.phase_tracking == 1) harmonics_tracked(state, options, frame, out, count, previous_increment); + else if (count >= 1) harmonics_accumulated(state, options, frame, out, count, previous_increment); + if (options.noise_method == 1) noise_blocks(state, options, frame, out); + if (frame.active != 0) { + if (options.noise_method == 0) noise_single(state, options, frame, out); + if (frame.pulse_count >= 1) add_pulses(state, options, frame, out); + } + for (int n = 0; n < kFrameSamples; n++) { + if (kFlushBelow > std::fabs(out[n])) out[n] = 0.0f; + } + state.previous = frame; +} + +} // namespace halfrate::dec diff --git a/mbe/decoder_synth.h b/mbe/decoder_synth.h new file mode 100644 index 0000000..d54416a --- /dev/null +++ b/mbe/decoder_synth.h @@ -0,0 +1,52 @@ +// The synthesiser: harmonic oscillators, noise from inverse FFTs, pulses, and a 160-sample overlap-add. +// Each frame interpolates from the previous frame's parameters to the current one's. +#pragma once +#include +#include + +#include "decoder_options.h" + +namespace halfrate::dec { + +constexpr int kFrameSamples = 160; +constexpr int kHarmonicSlots = 58; // per-harmonic arrays, indexed by harmonic number 1..L (L <= 56) + +// What the synthesiser makes of one frame. +struct SynthFrame { + int32_t active = 0; // nonzero: the frame has sound + float fundamental = 0.0f; // cycles per sample + int32_t harmonic_count = 0; // L + std::array amplitude{}; // linear + std::array voiced{}; // weight of the harmonic's oscillator + std::array unvoiced{}; // weight of noise around the harmonic + std::array pulse{}; // weight of the harmonic in the pulse shape + std::array phase{}; // phase offset, cycles + int32_t pulse_count = 0; // 0..2 + std::array pulse_position{}; + std::array pulse_gain{}; +}; + +struct SynthState { + SynthFrame previous; + std::array harmonic_phase{}; // per-harmonic oscillators, 2^64 = one cycle + uint64_t fundamental_phase = 0; // phase_tracking 1: the fundamental's phase + std::array noise_phase{}; // drifting phases of the low noise bins (13 bits) + std::array overlap{}; // the next frame's first 160 samples, and the rest + uint32_t random = 0; // LCG state + std::array window320{}; // sine windows + std::array window80{}; +}; + +// Clears the state, seeds the noise generator and sets the initial oscillator phases. +void synth_reset(SynthState& state, const Options& options); + +// One frame: out[0..159]. +void synth_frame(SynthState& state, const Options& options, const SynthFrame& frame, float* out); + +// 160 samples of uniform noise of rms level. +void synth_comfort_noise(SynthState& state, float level, float* out); + +// cos(2 pi x), x in cycles, linearly interpolated in the cosine table. +float cosine_interpolated(float x); + +} // namespace halfrate::dec diff --git a/mbe/decoder_tables.cpp b/mbe/decoder_tables.cpp new file mode 100644 index 0000000..164fb23 --- /dev/null +++ b/mbe/decoder_tables.cpp @@ -0,0 +1,36 @@ +#include "decoder_tables.h" + +namespace halfrate::dec::tables { + +const char kHarmonicClass[32][17] = { + "VVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVMM", "VVVVVVVVVVVVVVUU", "VVVVVVVVVVMVVVVV", + "VVVVVVVVVVVVUUUU", "VVVVUVVVVVVVVVVV", "VVVVVVUVVVVVVVVV", "VVVVVVVVVVUVVVVV", + "VVVVVVVVUUUUUUUU", "VVVVVVVVVVUUUUUU", "VVVVVVUUUUUUUUUU", "VVVVVVUUUUUUUMMM", + "VVVVUUUUUUUUUUUU", "VVVVMMUUUUUUUUUU", "VVUUUUUUUUUUUUUU", "MMMMMMUUUUUUUUUU", + "UUUUUUUUUUUUUUUU", "MMUUUUUUUUUUUUUU", "QQUUUUUUUUUUUUUU", "QQQQUUUUUUUUUUUU", + "QQQQQQQQQQQQQQQQ", "UUUQQQUUUUUUUUUU", "UUUUUUUUUUUUUQQQ", "UUUUUUUUUQQQQQQQ", + "PPPPPPPPPPPPPPPP", "UUUPPPPPPPPPPPPP", "QQUUUUUUUUUUUUUU", "UUUQQQUUUUUUUUUU", + "QQQQQQQQQQQQQQQQ", "QQQQUUUUUUUUUUUU", "UUUUUUUUUUUUUQQQ", "UUUUUUUUUUUQQQQQ", +}; + +const float kPhaseTapWeight[33] = { + 0x0p+0f, 0x1p+0f, 0x1p-1f, 0x1.555556p-2f, 0x1p-2f, 0x1.99999ap-3f, 0x1.555556p-3f, 0x1.24924ap-3f, + 0x1p-3f, 0x1.c71c72p-4f, 0x1.99999ap-4f, 0x1.745d18p-4f, 0x1.555556p-4f, 0x1.3b13b2p-4f, 0x1.24924ap-4f, + 0x1.111112p-4f, 0x1p-4f, 0x1.e1e1e2p-5f, 0x1.c71c72p-5f, 0x1.af286cp-5f, 0x1.99999ap-5f, 0x1.861862p-5f, + 0x1.745d18p-5f, 0x1.642c86p-5f, 0x1.555556p-5f, 0x1.47ae14p-5f, 0x1.3b13b2p-5f, 0x1.2f684cp-5f, + 0x1.24924ap-5f, 0x1.1a7b96p-5f, 0x1.111112p-5f, 0x1.08421p-5f, 0x1p-5f, +}; + +const float kKeypadLow[4] = {697.0f, 770.0f, 852.0f, 941.0f}; +const float kKeypadHigh[4] = {1209.0f, 1336.0f, 1477.0f, 1633.0f}; +const int32_t kKeypadLowIndex[16] = {3, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 2, 3, 3, 3}; +const int32_t kKeypadHighIndex[16] = {1, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3, 3, 3, 3, 0, 2}; + +const float kToneSetLow[4] = {606.0f, 672.0f, 743.0f, 820.0f}; +const float kToneSetHigh[4] = {1052.0f, 1162.0f, 1297.0f, 1430.0f}; +const int8_t kToneSetIndex[16][2] = { + {3, 1}, {0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, + {2, 1}, {2, 2}, {0, 3}, {1, 3}, {2, 3}, {3, 3}, {3, 0}, {3, 2}, +}; + +} // namespace halfrate::dec::tables diff --git a/mbe/decoder_tables.h b/mbe/decoder_tables.h new file mode 100644 index 0000000..f01c42b --- /dev/null +++ b/mbe/decoder_tables.h @@ -0,0 +1,32 @@ +// Constant tables of the decoder only. +#pragma once +#include + +namespace halfrate::dec::tables { + +// How a harmonic is synthesised, per voicing index and frequency slot (16 slots of 1/32 cycle per sample). +enum HarmonicClass : char { + kVoiced = 'V', + kUnvoiced = 'U', + kMixed = 'M', // voiced and noise, shared by mixed_voiced_share + kPulse = 'P', // a pulse (noise when pulses are off) + kPulseNoise = 'Q', // a pulse and noise +}; +// kHarmonicClass[voicing index][slot]; silence frames use row kSilenceClassRow. +extern const char kHarmonicClass[32][17]; +constexpr int kSilenceClassRow = 16; + +// Weights of the phase term's taps: [k] = 1/k for k = 1..32 ([0] unused). +extern const float kPhaseTapWeight[33]; + +// Dual tones, Hz. Tone indices 0x80..0x8f: low kKeypadLow[kKeypadLowIndex[i]], high kKeypadHigh[kKeypadHighIndex[i]]. +extern const float kKeypadLow[4]; +extern const float kKeypadHigh[4]; +extern const int32_t kKeypadLowIndex[16]; +extern const int32_t kKeypadHighIndex[16]; +// Tone indices 0x90..0x9f: kToneSetLow[kToneSetIndex[i][0]] and kToneSetHigh[kToneSetIndex[i][1]]. +extern const float kToneSetLow[4]; +extern const float kToneSetHigh[4]; +extern const int8_t kToneSetIndex[16][2]; + +} // namespace halfrate::dec::tables diff --git a/mbe/dequant.cpp b/mbe/dequant.cpp new file mode 100644 index 0000000..9a8b9d0 --- /dev/null +++ b/mbe/dequant.cpp @@ -0,0 +1,167 @@ +#include "dequant.h" + +#include + +#include "numeric.h" +#include "tables.h" + +namespace halfrate::core { + +namespace { +constexpr float kHalfSqrtHalf = 0x1.6a09e6p-2f; // 1 / (2 sqrt 2) +constexpr float kTwoPi = 0x1.921fb6p+2f; +constexpr int kVoicePitchCount = 120; +constexpr int kTonePitchEnd = 126; +constexpr int kErasurePitchEnd = 124; +constexpr int kToneHarmonicCount = 14; +constexpr float kToneFundamental = 0.03125f; +} // namespace + +void dequant_reset(DequantState& state) { state = DequantState{}; } + +void dequant_shape_residual(const Codebook& codebook, int harmonic_count, const FrameFields& fields, float* out) { + const float* low = codebook.shape_low[fields[kFieldShapeLow]]; + const float* high = codebook.shape_high[fields[kFieldShapeHigh]]; + const float coefficients[8] = {0.0f, low[0], low[1], low[2], high[0], high[1], high[2], high[3]}; + float pairs[8]; + const auto& dct8 = tables::kInverseDct[7]; + for (int r = 0; r < 8; r++) { + float s = 0.0f; + for (int c = 0; c < 8; c++) s = s + dct8[r][c] * coefficients[c]; + pairs[r] = s; + } + const int32_t* sizes = codebook.band_sizes[harmonic_count]; + int pos = 0; + for (int block = 0; block < 4; block++) { + int n = sizes[block]; + float block_coefficients[18]; + std::memset(block_coefficients + 2, 0, 16 * sizeof(float)); + float a = pairs[2 * block], b = pairs[2 * block + 1]; + block_coefficients[0] = (a + b) * 0.5f; + block_coefficients[1] = (a - b) * kHalfSqrtHalf; + if (n >= 3) { + int count = n < 6 ? n : 6; + int row = codebook.detail_stride[block] * fields[kFieldDetail1 + block]; + std::memcpy(block_coefficients + 2, codebook.detail[block] + row * 4, + static_cast(count - 2) * sizeof(float)); + } else if (n < 1) { + continue; + } + const auto& dct = tables::kInverseDct[n - 1]; + for (int i = 0; i < n; i++) { + float s = 0.0f; + for (int c = 0; c < n; c++) s = s + dct[i][c] * block_coefficients[c]; + out[pos++] = s; + } + } +} + +void dequant_predict(const Codebook& codebook, const DequantState& state, int harmonic_count, float* out) { + int previous_count = state.harmonic_count; + std::array previous = state.log2_amplitude; + if (harmonic_count > previous_count) { + float last = previous[previous_count]; + for (int i = previous_count + 1; i <= harmonic_count; i++) previous[i] = last; + } + previous[0] = previous[1]; + if (harmonic_count < 1) return; + float ratio = static_cast(previous_count) / static_cast(static_cast(harmonic_count)); + float rho = codebook.prediction; + for (int k = 1; k <= harmonic_count; k++) { + float x = ratio * static_cast(static_cast(k)); + int i = to_int32_sat(x); + float frac = x - static_cast(to_int32_sat(x)); + int j = i < kMaxHarmonics ? i : kMaxHarmonics; + float a = (1.0f - frac) * rho; + a = a * previous[i]; + float b = frac * rho; + b = b * previous[j + 1]; + out[k - 1] = a + b; + } +} + +FrameKind dequantize(const Codebook& codebook, DequantState& state, const FrameFields& fields, FrameParams* out) { + int pitch = fields[kFieldPitch]; + bool has_pitch = pitch < kVoicePitchCount ? true : pitch < codebook.pitch_count; + FrameKind kind; + int count = 0; + float fundamental = 0.0f; + if (has_pitch) { + kind = FrameKind::voice; + fundamental = codebook.fundamental[pitch]; + count = codebook.harmonic_count[pitch]; + } else if (static_cast(pitch) < kErasurePitchEnd) { + kind = FrameKind::erasure; + } else if (static_cast(pitch) < kTonePitchEnd) { + kind = FrameKind::tone; + count = kToneHarmonicCount; + fundamental = kToneFundamental; + } else { + kind = FrameKind::reserved; + } + if (kind == FrameKind::erasure || kind == FrameKind::reserved) { + dequant_reset(state); + if (out) { + *out = FrameParams{}; + out->kind = kind; + out->fields = fields; + } + return kind; + } + + float new_gain = codebook.gain_weight * codebook.gain[fields[kFieldGain]]; + float carried_gain = codebook.previous_gain_weight * state.log2_gain; + float residual[60], prediction[58]; + dequant_shape_residual(codebook, count, fields, residual); + dequant_predict(codebook, state, count, prediction); + float residual_sum = 0.0f, prediction_sum = 0.0f; + for (int i = 0; i < count; i++) { + residual_sum = residual_sum + residual[i]; + prediction_sum = prediction_sum + prediction[i]; + } + float half_log2_count = tables::kHalfLog2Count[count]; + float reciprocal_count = tables::kReciprocalCount[count]; + float gain = new_gain + carried_gain; + state.log2_amplitude.fill(0.0f); + if (count >= 1) { + float offset = gain - half_log2_count; + float residual_mean = residual_sum * reciprocal_count; + offset = offset - residual_mean; + float prediction_mean = prediction_sum * reciprocal_count; + for (int k = 0; k < count; k++) { + float v = residual[k] + prediction[k]; + v = v - prediction_mean; + v = offset + v; + state.log2_amplitude[k + 1] = v; + } + } + state.harmonic_count = count; + state.log2_gain = gain; + if (!out) return kind; + + out->kind = kind; + out->fundamental = fundamental; + out->omega = fundamental * kTwoPi; + out->harmonic_count = count; + out->log2_gain = gain; + out->fields = fields; + out->harmonic_voiced.fill(0); + out->log2_amplitude.fill(0.0f); + const int32_t* bands = codebook.voicing[fields[kFieldVoicing]]; + for (int i = 0; i < count && i <= kMaxHarmonics; i++) { + int voiced = 0; + if (has_pitch) { + int band = to_int32_sat(fundamental * (static_cast(static_cast(i + 1)) * 16.0f)); + voiced = bands[band < 7 ? band : 7]; + } + out->harmonic_voiced[i] = static_cast(voiced); + out->log2_amplitude[i] = state.log2_amplitude[i + 1]; + } + return kind; +} + +FrameKind dequantize(DequantState& state, const FrameFields& fields, FrameParams* out) { + return dequantize(tables::kCodebook, state, fields, out); +} + +} // namespace halfrate::core diff --git a/mbe/dequant.h b/mbe/dequant.h new file mode 100644 index 0000000..0183452 --- /dev/null +++ b/mbe/dequant.h @@ -0,0 +1,73 @@ +// The parameter dequantiser: turns the nine frame fields into the frame parameters (pitch, harmonic count, +// voicing, log2 harmonic amplitudes, gain), predicting the spectral shape from the previous frame. +// +// The log2 amplitudes of harmonics 1..L are +// gain - log2(L)/2 + residual[l] + prediction[l] - mean(residual) - mean(prediction) +// where residual is the transformed shape codebook vector (dequant_shape_residual) and prediction is the previous +// frame's amplitudes resampled to L harmonics and scaled (dequant_predict). +// +// Both the decoder and the encoder (which runs the dequantiser to track what the decoder will predict) keep one +// DequantState per stream. +#pragma once +#include +#include + +#include "codebook.h" +#include "frame.h" + +namespace halfrate::core { + +constexpr int kMaxHarmonics = 56; // largest harmonic count L of any pitch +constexpr int kResetHarmonicCount = 30; // previous harmonic count after a reset or erasure + +// What the dequantiser decided a frame is (dequantize's result and FrameParams::kind). +enum class FrameKind : int32_t { + voice = 0, // pitch index 0..119 + tone = 1, // pitch index 124..125: fixed fundamental 1/32, 14 harmonics, all unvoiced + erasure = 2, // pitch index 120..123: the parameters are cleared and the predictor reset + reserved = 3, // pitch index 126..127: treated as an erasure +}; + +// Predictor state: the previous frame's parameters. +struct DequantState { + int32_t harmonic_count = kResetHarmonicCount; // L of the previous frame + float log2_gain = 0.0f; // its gain + // [l] for l = 1..L: its log2 harmonic amplitudes. [0] and the entries above L are 0. + std::array log2_amplitude{}; +}; + +// The decoded frame parameters. +struct FrameParams { + FrameKind kind = FrameKind::voice; + float fundamental = 0.0f; // cycles per sample + float omega = 0.0f; // fundamental * 2 pi, radians per sample + int32_t harmonic_count = 0; // L + // [k] for harmonic k + 1, k < L: voiced (1) or unvoiced (0), from the voicing band the harmonic falls in. + // Entries from L on are 0. + std::array harmonic_voiced{}; + // [k] for harmonic k + 1, k < L: log2 amplitude. Entries from L on are 0. + std::array log2_amplitude{}; + float log2_gain = 0.0f; + FrameFields fields{}; // the fields the frame was decoded from, as given +}; + +// Resets the predictor (as at the start of a stream). +void dequant_reset(DequantState& state); + +// The shape residual of L harmonics from the shape fields (3..8): the 8-point coefficient vector (0, shape_low, +// shape_high) through the inverse 8-point DCT, then for each of the 4 blocks a pair sum/difference plus the +// block's higher-order coefficients through the inverse DCT of the block size. out[0..L-1]. +void dequant_shape_residual(const Codebook& codebook, int harmonic_count, const FrameFields& fields, float* out); + +// The prediction: the state's amplitudes resampled from its harmonic count to L, times codebook.prediction. +// out[0..L-1]. +void dequant_predict(const Codebook& codebook, const DequantState& state, int harmonic_count, float* out); + +// Decodes one frame: updates the state and, if out is not null, fills *out (every field). Every field index +// must be within its bit width (frame.h); any such set is valid. +FrameKind dequantize(const Codebook& codebook, DequantState& state, const FrameFields& fields, FrameParams* out); + +// The same with the codec's codebook (tables::kCodebook). +FrameKind dequantize(DequantState& state, const FrameFields& fields, FrameParams* out); + +} // namespace halfrate::core diff --git a/mbe/enc_analysis.cpp b/mbe/enc_analysis.cpp new file mode 100644 index 0000000..8198dfa --- /dev/null +++ b/mbe/enc_analysis.cpp @@ -0,0 +1,122 @@ +// The encoder's analysis tables: the two analysis windows and the voicing decision tables. +// Generated data; do not edit. +#include "enc_tables.h" + +namespace halfrate::tables { + +// Analysis window of the pitch spectrum, 256 points. +const float kLongWindow[256] = { + 0x1.306b9ep-11f, 0x1.30f3a4p-11f, 0x1.328bap-11f, 0x1.353352p-11f, 0x1.38ea52p-11f, 0x1.3db00ap-11f, + 0x1.4383bep-11f, 0x1.4a6486p-11f, 0x1.52514ep-11f, 0x1.5b48dep-11f, 0x1.6549dp-11f, 0x1.705296p-11f, + 0x1.7c6178p-11f, 0x1.897498p-11f, 0x1.9789ecp-11f, 0x1.a69f46p-11f, 0x1.b6b24ap-11f, 0x1.c7c07cp-11f, + 0x1.d9c734p-11f, 0x1.ecc3a6p-11f, 0x1.00596ep-10f, 0x1.0ac8ep-10f, 0x1.15ae88p-10f, 0x1.2108b8p-10f, + 0x1.2cd5a8p-10f, 0x1.391384p-10f, 0x1.45c066p-10f, 0x1.52da54p-10f, 0x1.605f48p-10f, 0x1.6e4d24p-10f, + 0x1.7ca1cp-10f, 0x1.8b5ae2p-10f, 0x1.9a763ep-10f, 0x1.a9f17ep-10f, 0x1.b9ca38p-10f, 0x1.c9fdf8p-10f, + 0x1.da8a36p-10f, 0x1.eb6c62p-10f, 0x1.fca1dap-10f, 0x1.0713fap-9f, 0x1.0ffdfap-9f, 0x1.190d8cp-9f, + 0x1.224146p-9f, 0x1.2b97bcp-9f, 0x1.350f78p-9f, 0x1.3ea702p-9f, 0x1.485cdcp-9f, 0x1.522f86p-9f, + 0x1.5c1d76p-9f, 0x1.662524p-9f, 0x1.7044fep-9f, 0x1.7a7b74p-9f, 0x1.84c6ecp-9f, 0x1.8f25dp-9f, + 0x1.999682p-9f, 0x1.a41764p-9f, 0x1.aea6dp-9f, 0x1.b94326p-9f, 0x1.c3eabep-9f, 0x1.ce9bf2p-9f, + 0x1.d95516p-9f, 0x1.e4148p-9f, 0x1.eed886p-9f, 0x1.f99f7ap-9f, 0x1.0233d8p-8f, 0x1.0797bcp-8f, + 0x1.0cfa96p-8f, 0x1.125b8cp-8f, 0x1.17b9cap-8f, 0x1.1d147ap-8f, 0x1.226ac8p-8f, 0x1.27bbdep-8f, + 0x1.2d06eap-8f, 0x1.324b18p-8f, 0x1.378796p-8f, 0x1.3cbb96p-8f, 0x1.41e646p-8f, 0x1.4706dcp-8f, + 0x1.4c1c88p-8f, 0x1.512684p-8f, 0x1.562404p-8f, 0x1.5b1442p-8f, 0x1.5ff67cp-8f, 0x1.64c9eep-8f, + 0x1.698dd6p-8f, 0x1.6e417ap-8f, 0x1.72e41ep-8f, 0x1.777506p-8f, 0x1.7bf382p-8f, 0x1.805edcp-8f, + 0x1.84b664p-8f, 0x1.88f96cp-8f, 0x1.8d274ep-8f, 0x1.913f62p-8f, 0x1.954106p-8f, 0x1.992b98p-8f, + 0x1.9cfe8p-8f, 0x1.a0b922p-8f, 0x1.a45aecp-8f, 0x1.a7e34cp-8f, 0x1.ab51b8p-8f, 0x1.aea5a4p-8f, + 0x1.b1de8ep-8f, 0x1.b4fbf6p-8f, 0x1.b7fd5ep-8f, 0x1.bae25p-8f, 0x1.bdaa58p-8f, 0x1.c0550ap-8f, + 0x1.c2e1f8p-8f, 0x1.c550bep-8f, 0x1.c7a0fcp-8f, 0x1.c9d256p-8f, 0x1.cbe474p-8f, 0x1.cdd704p-8f, + 0x1.cfa9b6p-8f, 0x1.d15c46p-8f, 0x1.d2ee6ep-8f, 0x1.d45ffp-8f, 0x1.d5b092p-8f, 0x1.d6e02p-8f, + 0x1.d7ee6cp-8f, 0x1.d8db48p-8f, 0x1.d9a694p-8f, 0x1.da502ep-8f, 0x1.dad7fcp-8f, 0x1.db3deap-8f, + 0x1.db81e6p-8f, 0x1.dba3e6p-8f, 0x1.dba3e6p-8f, 0x1.db81e6p-8f, 0x1.db3deap-8f, 0x1.dad7fcp-8f, + 0x1.da502ep-8f, 0x1.d9a694p-8f, 0x1.d8db48p-8f, 0x1.d7ee6cp-8f, 0x1.d6e02p-8f, 0x1.d5b092p-8f, + 0x1.d45ffp-8f, 0x1.d2ee6ep-8f, 0x1.d15c46p-8f, 0x1.cfa9b6p-8f, 0x1.cdd704p-8f, 0x1.cbe474p-8f, + 0x1.c9d256p-8f, 0x1.c7a0fcp-8f, 0x1.c550bep-8f, 0x1.c2e1f8p-8f, 0x1.c0550ap-8f, 0x1.bdaa58p-8f, + 0x1.bae25p-8f, 0x1.b7fd5ep-8f, 0x1.b4fbf6p-8f, 0x1.b1de8ep-8f, 0x1.aea5a4p-8f, 0x1.ab51b8p-8f, + 0x1.a7e34cp-8f, 0x1.a45aecp-8f, 0x1.a0b922p-8f, 0x1.9cfe8p-8f, 0x1.992b98p-8f, 0x1.954106p-8f, + 0x1.913f62p-8f, 0x1.8d274ep-8f, 0x1.88f96cp-8f, 0x1.84b664p-8f, 0x1.805edcp-8f, 0x1.7bf382p-8f, + 0x1.777506p-8f, 0x1.72e41ep-8f, 0x1.6e417ap-8f, 0x1.698dd6p-8f, 0x1.64c9eep-8f, 0x1.5ff67cp-8f, + 0x1.5b1442p-8f, 0x1.562404p-8f, 0x1.512684p-8f, 0x1.4c1c88p-8f, 0x1.4706dcp-8f, 0x1.41e646p-8f, + 0x1.3cbb96p-8f, 0x1.378796p-8f, 0x1.324b18p-8f, 0x1.2d06eap-8f, 0x1.27bbdep-8f, 0x1.226ac8p-8f, + 0x1.1d147ap-8f, 0x1.17b9cap-8f, 0x1.125b8cp-8f, 0x1.0cfa96p-8f, 0x1.0797bcp-8f, 0x1.0233d8p-8f, + 0x1.f99f7ap-9f, 0x1.eed886p-9f, 0x1.e4148p-9f, 0x1.d95516p-9f, 0x1.ce9bf2p-9f, 0x1.c3eabep-9f, + 0x1.b94326p-9f, 0x1.aea6dp-9f, 0x1.a41764p-9f, 0x1.999682p-9f, 0x1.8f25dp-9f, 0x1.84c6ecp-9f, + 0x1.7a7b74p-9f, 0x1.7044fep-9f, 0x1.662524p-9f, 0x1.5c1d76p-9f, 0x1.522f86p-9f, 0x1.485cdcp-9f, + 0x1.3ea702p-9f, 0x1.350f78p-9f, 0x1.2b97bcp-9f, 0x1.224146p-9f, 0x1.190d8cp-9f, 0x1.0ffdfap-9f, + 0x1.0713fap-9f, 0x1.fca1dap-10f, 0x1.eb6c62p-10f, 0x1.da8a36p-10f, 0x1.c9fdf8p-10f, 0x1.b9ca38p-10f, + 0x1.a9f17ep-10f, 0x1.9a763ep-10f, 0x1.8b5ae2p-10f, 0x1.7ca1cp-10f, 0x1.6e4d24p-10f, 0x1.605f48p-10f, + 0x1.52da54p-10f, 0x1.45c066p-10f, 0x1.391384p-10f, 0x1.2cd5a8p-10f, 0x1.2108b8p-10f, 0x1.15ae88p-10f, + 0x1.0ac8ep-10f, 0x1.00596ep-10f, 0x1.ecc3a6p-11f, 0x1.d9c734p-11f, 0x1.c7c07cp-11f, 0x1.b6b24ap-11f, + 0x1.a69f46p-11f, 0x1.9789ecp-11f, 0x1.897498p-11f, 0x1.7c6178p-11f, 0x1.705296p-11f, 0x1.6549dp-11f, + 0x1.5b48dep-11f, 0x1.52514ep-11f, 0x1.4a6486p-11f, 0x1.4383bep-11f, 0x1.3db00ap-11f, 0x1.38ea52p-11f, + 0x1.353352p-11f, 0x1.328bap-11f, 0x1.30f3a4p-11f, 0x1.306b9ep-11f, +}; + +// Analysis window of the amplitude spectrum, 160 points. +const float kShortWindow[160] = { + 0x1.e80cdep-11f, 0x1.ea3dbap-11f, 0x1.f0cf6ap-11f, 0x1.fbbf52p-11f, 0x1.058488p-10f, 0x1.0f5344p-10f, + 0x1.1b47f2p-10f, 0x1.295dcap-10f, 0x1.398f2ap-10f, 0x1.4bd59ap-10f, 0x1.6029cep-10f, 0x1.7683a2p-10f, + 0x1.8eda28p-10f, 0x1.a923a8p-10f, 0x1.c5559ep-10f, 0x1.e364c4p-10f, 0x1.01a28cp-9f, 0x1.1274eep-9f, + 0x1.2422cep-9f, 0x1.36a51cp-9f, 0x1.49f47p-9f, 0x1.5e0916p-9f, 0x1.72db02p-9f, 0x1.8861e6p-9f, + 0x1.9e9526p-9f, 0x1.b56bep-9f, 0x1.ccdcf6p-9f, 0x1.e4df08p-9f, 0x1.fd687cp-9f, 0x1.0b37c4p-8f, + 0x1.17f512p-8f, 0x1.24e714p-8f, 0x1.32089ap-8f, 0x1.3f5466p-8f, 0x1.4cc528p-8f, 0x1.5a558p-8f, + 0x1.680004p-8f, 0x1.75bf3ap-8f, 0x1.838da4p-8f, 0x1.9165cp-8f, 0x1.9f4202p-8f, 0x1.ad1ce2p-8f, + 0x1.baf0d8p-8f, 0x1.c8b858p-8f, 0x1.d66de4p-8f, 0x1.e40bfep-8f, 0x1.f18d38p-8f, 0x1.feec2ap-8f, + 0x1.0611bep-7f, 0x1.0c96f4p-7f, 0x1.13031ap-7f, 0x1.1953ap-7f, 0x1.1f86p-7f, 0x1.2597bep-7f, + 0x1.2b866ep-7f, 0x1.314fb2p-7f, 0x1.36f13ap-7f, 0x1.3c68c4p-7f, 0x1.41b422p-7f, 0x1.46d136p-7f, + 0x1.4bbdf4p-7f, 0x1.507864p-7f, 0x1.54fea4p-7f, 0x1.594ee4p-7f, 0x1.5d676ap-7f, 0x1.614692p-7f, + 0x1.64ead4p-7f, 0x1.6852b6p-7f, 0x1.6b7cdep-7f, 0x1.6e680ap-7f, 0x1.71130cp-7f, 0x1.737cd6p-7f, + 0x1.75a46ep-7f, 0x1.7788fap-7f, 0x1.7929b8p-7f, 0x1.7a86p-7f, 0x1.7b9d46p-7f, 0x1.7c6f1ep-7f, + 0x1.7cfb32p-7f, 0x1.7d414ap-7f, 0x1.7d414ap-7f, 0x1.7cfb32p-7f, 0x1.7c6f1ep-7f, 0x1.7b9d46p-7f, + 0x1.7a86p-7f, 0x1.7929b8p-7f, 0x1.7788fap-7f, 0x1.75a46ep-7f, 0x1.737cd6p-7f, 0x1.71130cp-7f, + 0x1.6e680ap-7f, 0x1.6b7cdep-7f, 0x1.6852b6p-7f, 0x1.64ead4p-7f, 0x1.614692p-7f, 0x1.5d676ap-7f, + 0x1.594ee4p-7f, 0x1.54fea4p-7f, 0x1.507864p-7f, 0x1.4bbdf4p-7f, 0x1.46d136p-7f, 0x1.41b422p-7f, + 0x1.3c68c4p-7f, 0x1.36f13ap-7f, 0x1.314fb2p-7f, 0x1.2b866ep-7f, 0x1.2597bep-7f, 0x1.1f86p-7f, + 0x1.1953ap-7f, 0x1.13031ap-7f, 0x1.0c96f4p-7f, 0x1.0611bep-7f, 0x1.feec2ap-8f, 0x1.f18d38p-8f, + 0x1.e40bfep-8f, 0x1.d66de4p-8f, 0x1.c8b858p-8f, 0x1.baf0d8p-8f, 0x1.ad1ce2p-8f, 0x1.9f4202p-8f, + 0x1.9165cp-8f, 0x1.838da4p-8f, 0x1.75bf3ap-8f, 0x1.680004p-8f, 0x1.5a558p-8f, 0x1.4cc528p-8f, + 0x1.3f5466p-8f, 0x1.32089ap-8f, 0x1.24e714p-8f, 0x1.17f512p-8f, 0x1.0b37c4p-8f, 0x1.fd687cp-9f, + 0x1.e4df08p-9f, 0x1.ccdcf6p-9f, 0x1.b56bep-9f, 0x1.9e9526p-9f, 0x1.8861e6p-9f, 0x1.72db02p-9f, + 0x1.5e0916p-9f, 0x1.49f47p-9f, 0x1.36a51cp-9f, 0x1.2422cep-9f, 0x1.1274eep-9f, 0x1.01a28cp-9f, + 0x1.e364c4p-10f, 0x1.c5559ep-10f, 0x1.a923a8p-10f, 0x1.8eda28p-10f, 0x1.7683a2p-10f, 0x1.6029cep-10f, + 0x1.4bd59ap-10f, 0x1.398f2ap-10f, 0x1.295dcap-10f, 0x1.1b47f2p-10f, 0x1.0f5344p-10f, 0x1.058488p-10f, + 0x1.fbbf52p-11f, 0x1.f0cf6ap-11f, 0x1.ea3dbap-11f, 0x1.e80cdep-11f, +}; + +// Pitch index where each row of the voicing threshold tables starts (rows 0..8). +const int32_t kVoicingRowStart[9] = { + 0, 30, 50, 65, 80, 92, 104, 112, 116, +}; + +// Voicing threshold per row and band (with the voicing table option on). +const float kVoicingThresholdBase[9 * 8] = { + 0x1.a66666p-1f, 0x1.d9999ap-1f, 0x1p+0f, 0x1.99999ap-1f, 0x1.cp-1f, 0x1.99999ap-1f, 0x1.8p-1f, 0x1.666666p-1f, + 0x1.0cccccp+0f, 0x1.2cccccp+0f, 0x1.f33334p-1f, 0x1.733334p-1f, 0x1.8p-1f, 0x1.4cccccp-1f, 0x1.4cccccp-1f, 0x1.4p-1f, + 0x1.ccccccp-1f, 0x1.f33334p-1f, 0x1.a66666p-1f, 0x1.4cccccp-1f, 0x1.59999ap-1f, 0x1.266666p-1f, 0x1.19999ap-1f, 0x1.0cccccp-1f, + 0x1.4cccccp-1f, 0x1.59999ap-1f, 0x1.4cccccp-1f, 0x1p-1f, 0x1.19999ap-1f, 0x1.e66666p-2f, 0x1.e66666p-2f, 0x1.99999ap-2f, + 0x1.19999ap-1f, 0x1.19999ap-1f, 0x1p-1f, 0x1.b33334p-2f, 0x1.b33334p-2f, 0x1.99999ap-2f, 0x1.8p-2f, 0x1.4cccccp-2f, + 0x1.8p-2f, 0x1.99999ap-2f, 0x1.8p-2f, 0x1.19999ap-2f, 0x1.4cccccp-2f, 0x1.ccccccp-3f, 0x1.19999ap-2f, 0x1.666666p-3f, + 0x1.19999ap-2f, 0x1.333334p-2f, 0x1.19999ap-2f, 0x1.ccccccp-3f, 0x1.ccccccp-3f, 0x1.99999ap-3f, 0x1.333334p-3f, 0x1p-3f, + 0x1.ccccccp-3f, 0x1p-2f, 0x1.99999ap-3f, 0x1.333334p-3f, 0x1.666666p-3f, 0x1.666666p-3f, 0x1.99999ap-3f, 0x1.666666p-3f, + 0x1.99999ap-4f, 0x1.99999ap-3f, 0x1.666666p-3f, 0x1.666666p-3f, 0x1.333334p-4f, 0x1.333334p-3f, 0x1.333334p-3f, 0x1p-3f, +}; + +// Voicing threshold slope on the pitch's fit cost, per row and band. +const float kVoicingThresholdSlope[9 * 8] = { + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.ccccccp-1f, + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.99999ap-1f, -0x1p+0f, -0x1p+0f, + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.99999ap-1f, -0x1.99999ap-1f, -0x1p+0f, + -0x1.ccccccp-1f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.ccccccp-1f, -0x1p+0f, -0x1.666666p-1f, -0x1.ccccccp-1f, -0x1.99999ap-1f, + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.99999ap-1f, -0x1.666666p-1f, + -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.666666p-1f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, + 0.0f, -0x1p+0f, -0x1p+0f, -0x1p+0f, -0x1.99999ap-4f, -0x1p+0f, -0x1p+0f, -0x1p+0f, +}; + +// Upper edges (Hz) of the 18 bands of the candidate re-scoring histogram; entry 0 is 0. +const float kRescoreBandEdge[18] = { + 0.0f, 0x1.9p+6f, 0x1.9p+7f, 0x1.2cp+8f, 0x1.9p+8f, 0x1.fep+8f, 0x1.3bp+9f, 0x1.81p+9f, 0x1.ccp+9f, + 0x1.0ep+10f, 0x1.3d8p+10f, 0x1.72p+10f, 0x1.aep+10f, 0x1.f4p+10f, 0x1.22p+11f, 0x1.518p+11f, 0x1.89cp+11f, 0x1.ce8p+11f, +}; + +} // namespace halfrate::tables diff --git a/mbe/enc_pitch_net.cpp b/mbe/enc_pitch_net.cpp new file mode 100644 index 0000000..b5003e9 --- /dev/null +++ b/mbe/enc_pitch_net.cpp @@ -0,0 +1,10884 @@ +// The encoder's pitch network: an int8 MLP 1830 -> 160 -> 96 -> 121 over six frames of 305 features (feature normalisation, per-layer int8 weights [out][in], float bias and per-output scale). +// Generated data; do not edit. +#include "enc_tables.h" + +namespace halfrate::tables { + +// Feature mean, per feature of one frame (120 fit costs, 120 YIN values, 64 band log energies, level). +const float kPitchNetMean[305] = { + 0x1.cb0352p-1f, 0x1.ca8ba6p-1f, 0x1.ca3306p-1f, 0x1.c9cfb4p-1f, 0x1.c96906p-1f, 0x1.c91cbep-1f, + 0x1.c6a35ep-1f, 0x1.c64592p-1f, 0x1.c5c65p-1f, 0x1.c50864p-1f, 0x1.c4735ep-1f, 0x1.c426d6p-1f, + 0x1.c17724p-1f, 0x1.c09bfp-1f, 0x1.bf6bp-1f, 0x1.be19c6p-1f, 0x1.bc9904p-1f, 0x1.bb0206p-1f, + 0x1.b73b7p-1f, 0x1.b5736ap-1f, 0x1.b3b424p-1f, 0x1.b1d88p-1f, 0x1.afc318p-1f, 0x1.ab663p-1f, + 0x1.a8f94ep-1f, 0x1.a6a3aep-1f, 0x1.a4c308p-1f, 0x1.a28814p-1f, 0x1.9df8f8p-1f, 0x1.9b8682p-1f, + 0x1.98eec6p-1f, 0x1.95e168p-1f, 0x1.91349cp-1f, 0x1.8e9a12p-1f, 0x1.8bd4bp-1f, 0x1.88e908p-1f, + 0x1.83d824p-1f, 0x1.816854p-1f, 0x1.7f1d9cp-1f, 0x1.7ca494p-1f, 0x1.781d8ep-1f, 0x1.75bd1ap-1f, + 0x1.735a56p-1f, 0x1.70e3p-1f, 0x1.6c8f7p-1f, 0x1.6a83e2p-1f, 0x1.68840ap-1f, 0x1.67215p-1f, + 0x1.64147cp-1f, 0x1.632544p-1f, 0x1.62429ep-1f, 0x1.5f6914p-1f, 0x1.5ee808p-1f, 0x1.5e8022p-1f, + 0x1.5bed0cp-1f, 0x1.5b93fep-1f, 0x1.5b96b6p-1f, 0x1.597694p-1f, 0x1.59172ap-1f, 0x1.584e12p-1f, + 0x1.551b26p-1f, 0x1.53d658p-1f, 0x1.523c84p-1f, 0x1.4e6e4p-1f, 0x1.4ceeb8p-1f, 0x1.4b62bcp-1f, + 0x1.47aaacp-1f, 0x1.45cbbap-1f, 0x1.41b87ap-1f, 0x1.3f7eeap-1f, 0x1.3d2aeep-1f, 0x1.392552p-1f, + 0x1.36e9d6p-1f, 0x1.31f78ep-1f, 0x1.2f0928p-1f, 0x1.29a3a8p-1f, 0x1.266c6cp-1f, 0x1.20fc0cp-1f, + 0x1.1e21fep-1f, 0x1.1ae908p-1f, 0x1.158124p-1f, 0x1.120a38p-1f, 0x1.0cd362p-1f, 0x1.0a35b2p-1f, + 0x1.0547p-1f, 0x1.022402p-1f, 0x1.fac47p-2f, 0x1.f547d6p-2f, 0x1.ec0c9ap-2f, 0x1.e21082p-2f, + 0x1.dcda8p-2f, 0x1.d3f3dap-2f, 0x1.cf0992p-2f, 0x1.c7246cp-2f, 0x1.c2d83p-2f, 0x1.bd043ap-2f, + 0x1.af865p-2f, 0x1.ab1d9p-2f, 0x1.a34e94p-2f, 0x1.9b8788p-2f, 0x1.97fe2ep-2f, 0x1.8fc876p-2f, + 0x1.8d093ap-2f, 0x1.855d96p-2f, 0x1.7e3188p-2f, 0x1.76774ep-2f, 0x1.722fc2p-2f, 0x1.65c52p-2f, + 0x1.617832p-2f, 0x1.5dd8cap-2f, 0x1.55fe14p-2f, 0x1.4cdb1p-2f, 0x1.43bbfep-2f, 0x1.3e05e2p-2f, + 0x1.3a0612p-2f, 0x1.335112p-2f, 0x1.2a2124p-2f, 0x1.234b2ep-2f, 0x1.1b07ecp-2f, 0x1.16e65ep-2f, + 0x1.2d5b9ep+0f, 0x1.2ce712p+0f, 0x1.2c721ap+0f, 0x1.2bf9ecp+0f, 0x1.2b3ef6p+0f, 0x1.2a717ap+0f, + 0x1.29a4c2p+0f, 0x1.288f94p+0f, 0x1.276a8p+0f, 0x1.26401p+0f, 0x1.24e866p+0f, 0x1.237f46p+0f, + 0x1.22162p+0f, 0x1.207736p+0f, 0x1.1ecb28p+0f, 0x1.1d12fp+0f, 0x1.1b4d2cp+0f, 0x1.1978a2p+0f, + 0x1.17766cp+0f, 0x1.15633ep+0f, 0x1.134edcp+0f, 0x1.112058p+0f, 0x1.0eeeeap+0f, 0x1.0ce46ap+0f, + 0x1.0ad08ap+0f, 0x1.08f462p+0f, 0x1.073ddp+0f, 0x1.059e1p+0f, 0x1.0429bp+0f, 0x1.02afdp+0f, + 0x1.01382ep+0f, 0x1.ff0342p-1f, 0x1.fc3232p-1f, 0x1.f9784ep-1f, 0x1.f71024p-1f, 0x1.f4c37ap-1f, + 0x1.f2ee78p-1f, 0x1.f1392ap-1f, 0x1.efba58p-1f, 0x1.ee6dacp-1f, 0x1.ed3eap-1f, 0x1.ec284ep-1f, + 0x1.eafefp-1f, 0x1.ea18eap-1f, 0x1.e96904p-1f, 0x1.e931e6p-1f, 0x1.e99248p-1f, 0x1.ea475ep-1f, + 0x1.ec22d2p-1f, 0x1.ee5432p-1f, 0x1.f0e934p-1f, 0x1.f3b85ep-1f, 0x1.f6901ep-1f, 0x1.f9780cp-1f, + 0x1.fc702p-1f, 0x1.ff9152p-1f, 0x1.017ac6p+0f, 0x1.03203ep+0f, 0x1.049936p+0f, 0x1.05d676p+0f, + 0x1.06caa6p+0f, 0x1.078a36p+0f, 0x1.08379cp+0f, 0x1.08dd6ap+0f, 0x1.098298p+0f, 0x1.0a2ff4p+0f, + 0x1.0adc9ap+0f, 0x1.0b39b4p+0f, 0x1.0b7522p+0f, 0x1.0bab18p+0f, 0x1.0bf16cp+0f, 0x1.0c64dp+0f, + 0x1.0cb848p+0f, 0x1.0c91e4p+0f, 0x1.0c2a76p+0f, 0x1.0b7f5ep+0f, 0x1.0aebfap+0f, 0x1.0aa7cap+0f, + 0x1.0a77bap+0f, 0x1.0a0b8cp+0f, 0x1.09492ap+0f, 0x1.08899ep+0f, 0x1.0827e6p+0f, 0x1.08496ap+0f, + 0x1.0846d6p+0f, 0x1.084abap+0f, 0x1.082ffp+0f, 0x1.0848f6p+0f, 0x1.08969ap+0f, 0x1.091b7cp+0f, + 0x1.09b2bcp+0f, 0x1.0a1ab2p+0f, 0x1.0af146p+0f, 0x1.0bfd64p+0f, 0x1.0cfbd2p+0f, 0x1.0d652ep+0f, + 0x1.0db0aep+0f, 0x1.0e3c5p+0f, 0x1.0f57acp+0f, 0x1.10216ap+0f, 0x1.10b51ap+0f, 0x1.11f4ep+0f, + 0x1.139f5ep+0f, 0x1.14ae7cp+0f, 0x1.1572fap+0f, 0x1.16473p+0f, 0x1.17169p+0f, 0x1.173b2p+0f, + 0x1.16f9c6p+0f, 0x1.1748b8p+0f, 0x1.17a646p+0f, 0x1.178a92p+0f, 0x1.17cc74p+0f, 0x1.189a44p+0f, + 0x1.190588p+0f, 0x1.188af4p+0f, 0x1.18622cp+0f, 0x1.18256ep+0f, 0x1.17565p+0f, 0x1.1d16cap+0f, + -0x1.517528p+3f, -0x1.b4c22p+2f, -0x1.057c8ap+2f, -0x1.90c562p+1f, -0x1.f3fd5p+1f, -0x1.064d3ep+2f, + -0x1.f963p+1f, -0x1.08c154p+2f, -0x1.2197cap+2f, -0x1.44d036p+2f, -0x1.739144p+2f, -0x1.9871c2p+2f, + -0x1.b2307ep+2f, -0x1.cb9068p+2f, -0x1.de2e72p+2f, -0x1.ee3504p+2f, -0x1.fa924p+2f, -0x1.0359c2p+3f, + -0x1.0769cep+3f, -0x1.0bcc66p+3f, -0x1.0e6c1ap+3f, -0x1.0f3b42p+3f, -0x1.0d23d4p+3f, -0x1.0ea04cp+3f, + -0x1.0e27c6p+3f, -0x1.0e6716p+3f, -0x1.0fb00cp+3f, -0x1.11e6cp+3f, -0x1.144b14p+3f, -0x1.174a36p+3f, + -0x1.1a5dbcp+3f, -0x1.1d843ep+3f, -0x1.21938ap+3f, -0x1.2608c2p+3f, -0x1.29c212p+3f, -0x1.2d9ee2p+3f, + -0x1.307a5p+3f, -0x1.3332c8p+3f, -0x1.34c35p+3f, -0x1.3616ccp+3f, -0x1.37337p+3f, -0x1.38b3d2p+3f, + -0x1.3a0f32p+3f, -0x1.3ba7aap+3f, -0x1.3d721p+3f, -0x1.3f16bp+3f, -0x1.401fc2p+3f, -0x1.40b2p+3f, + -0x1.40b81p+3f, -0x1.4308dap+3f, -0x1.4463ep+3f, -0x1.460e1ep+3f, -0x1.48bfeep+3f, -0x1.4c1d0cp+3f, + -0x1.500e8cp+3f, -0x1.548a14p+3f, -0x1.5a6764p+3f, -0x1.619fc8p+3f, -0x1.677bbcp+3f, -0x1.6bfe9ep+3f, + -0x1.7083eep+3f, -0x1.758468p+3f, -0x1.7b4e2ep+3f, -0x1.80142cp+3f, -0x1.b31566p+1f, +}; + +// 1 / standard deviation of each feature. +const float kPitchNetInvStd[305] = { + 0x1.10c504p+3f, 0x1.113b6cp+3f, 0x1.11f05p+3f, 0x1.126d3ep+3f, 0x1.12c13p+3f, 0x1.130ebp+3f, + 0x1.10a91ep+3f, 0x1.1082dap+3f, 0x1.0f86ccp+3f, 0x1.0d0f96p+3f, 0x1.0aeecap+3f, 0x1.0ac5c2p+3f, + 0x1.06ed6cp+3f, 0x1.0497dep+3f, 0x1.0130a4p+3f, 0x1.faa1a8p+2f, 0x1.f18d88p+2f, 0x1.e740bcp+2f, + 0x1.dac64ap+2f, 0x1.d19f3cp+2f, 0x1.c95396p+2f, 0x1.c18526p+2f, 0x1.b980e6p+2f, 0x1.b06908p+2f, + 0x1.a7e2fap+2f, 0x1.9fdf3ap+2f, 0x1.98e142p+2f, 0x1.910a66p+2f, 0x1.8961bap+2f, 0x1.821acp+2f, + 0x1.7afc4p+2f, 0x1.731e08p+2f, 0x1.6ca97ap+2f, 0x1.667d18p+2f, 0x1.606b6cp+2f, 0x1.5a73e6p+2f, + 0x1.555af6p+2f, 0x1.50e834p+2f, 0x1.4cc308p+2f, 0x1.485e1ep+2f, 0x1.457c48p+2f, 0x1.425978p+2f, + 0x1.3f68bap+2f, 0x1.3c6cbp+2f, 0x1.3ac80ep+2f, 0x1.38816p+2f, 0x1.366ddcp+2f, 0x1.35613ap+2f, + 0x1.367814p+2f, 0x1.364602p+2f, 0x1.366c7p+2f, 0x1.380888p+2f, 0x1.38d18ep+2f, 0x1.39f33cp+2f, + 0x1.3c9da2p+2f, 0x1.3e9048p+2f, 0x1.41628ap+2f, 0x1.4507d4p+2f, 0x1.479f8p+2f, 0x1.49dc8ap+2f, + 0x1.4c8284p+2f, 0x1.4e388ep+2f, 0x1.4edbbcp+2f, 0x1.4faf44p+2f, 0x1.509588p+2f, 0x1.512718p+2f, + 0x1.533c1p+2f, 0x1.5471eap+2f, 0x1.568c8p+2f, 0x1.5740bap+2f, 0x1.57098p+2f, 0x1.5843f2p+2f, + 0x1.5787f4p+2f, 0x1.57cc06p+2f, 0x1.56b144p+2f, 0x1.56afa2p+2f, 0x1.55883ap+2f, 0x1.56bea8p+2f, + 0x1.565584p+2f, 0x1.55ce8ap+2f, 0x1.57f58ap+2f, 0x1.58019p+2f, 0x1.5b0f58p+2f, 0x1.5cdb44p+2f, + 0x1.60a83p+2f, 0x1.62219p+2f, 0x1.6686fp+2f, 0x1.67a63ep+2f, 0x1.6ca0fap+2f, 0x1.705d64p+2f, + 0x1.7175f2p+2f, 0x1.764c8p+2f, 0x1.77bdbp+2f, 0x1.7e5368p+2f, 0x1.80d718p+2f, 0x1.88a61cp+2f, + 0x1.8e7cdep+2f, 0x1.91a1b4p+2f, 0x1.98f914p+2f, 0x1.a072e2p+2f, 0x1.a42602p+2f, 0x1.acd63p+2f, + 0x1.ae326ep+2f, 0x1.b5418cp+2f, 0x1.bd0576p+2f, 0x1.c50caap+2f, 0x1.ca640cp+2f, 0x1.d076d8p+2f, + 0x1.dd1ec6p+2f, 0x1.de3554p+2f, 0x1.e7355ap+2f, 0x1.ed87ep+2f, 0x1.f3aa5ep+2f, 0x1.01c618p+3f, + 0x1.fdafe8p+2f, 0x1.06e034p+3f, 0x1.066cbp+3f, 0x1.0b5aeep+3f, 0x1.11b03ep+3f, 0x1.106ccap+3f, + 0x1.4e09dap+1f, 0x1.563b4ep+1f, 0x1.5a185ep+1f, 0x1.58fd62p+1f, 0x1.602812p+1f, 0x1.647beap+1f, + 0x1.62a59ep+1f, 0x1.68e1dcp+1f, 0x1.6c7bc8p+1f, 0x1.68e012p+1f, 0x1.6f96bep+1f, 0x1.71088ep+1f, + 0x1.6c39c2p+1f, 0x1.730d2ap+1f, 0x1.70f9fp+1f, 0x1.6f7a2p+1f, 0x1.723adap+1f, 0x1.6b4e32p+1f, + 0x1.6f008p+1f, 0x1.6c6f8ap+1f, 0x1.68a95ap+1f, 0x1.6a68dp+1f, 0x1.60ec84p+1f, 0x1.662218p+1f, + 0x1.61fbeep+1f, 0x1.6292aap+1f, 0x1.600f0cp+1f, 0x1.5c227ep+1f, 0x1.5bc8e8p+1f, 0x1.559e1ap+1f, + 0x1.578ec6p+1f, 0x1.51970ep+1f, 0x1.519218p+1f, 0x1.4b631ep+1f, 0x1.4b5c4ep+1f, 0x1.45fd72p+1f, + 0x1.434d1cp+1f, 0x1.3e02d2p+1f, 0x1.3b075p+1f, 0x1.385614p+1f, 0x1.31cb82p+1f, 0x1.3295acp+1f, + 0x1.2b5ep+1f, 0x1.300bf2p+1f, 0x1.2df3c4p+1f, 0x1.2c49ap+1f, 0x1.2c65e2p+1f, 0x1.27296p+1f, + 0x1.28c42ap+1f, 0x1.269692p+1f, 0x1.2305f4p+1f, 0x1.25470cp+1f, 0x1.237f9cp+1f, 0x1.1fba3cp+1f, + 0x1.21456ap+1f, 0x1.1f7a52p+1f, 0x1.1b1b16p+1f, 0x1.1c4e68p+1f, 0x1.1d44cap+1f, 0x1.1a95b6p+1f, + 0x1.17ecf6p+1f, 0x1.1847c6p+1f, 0x1.17f06ep+1f, 0x1.153d76p+1f, 0x1.10464ap+1f, 0x1.106d94p+1f, + 0x1.120a1cp+1f, 0x1.12f8cap+1f, 0x1.123882p+1f, 0x1.0f58a2p+1f, 0x1.0b323p+1f, 0x1.0916cp+1f, + 0x1.086bacp+1f, 0x1.032286p+1f, 0x1.00f134p+1f, 0x1.00ba78p+1f, 0x1.fc9204p+0f, 0x1.f7419p+0f, + 0x1.f1b9e6p+0f, 0x1.f1eda6p+0f, 0x1.ecc286p+0f, 0x1.e4dfc2p+0f, 0x1.e308dep+0f, 0x1.dcc8acp+0f, + 0x1.e3281ap+0f, 0x1.dc6526p+0f, 0x1.d9876ep+0f, 0x1.d62fa6p+0f, 0x1.cbbdcp+0f, 0x1.c0343ap+0f, + 0x1.c28586p+0f, 0x1.c4c55cp+0f, 0x1.bdfa6cp+0f, 0x1.bce6a6p+0f, 0x1.b109d6p+0f, 0x1.ad19dcp+0f, + 0x1.a7e196p+0f, 0x1.a41c26p+0f, 0x1.a87d84p+0f, 0x1.a46472p+0f, 0x1.a57256p+0f, 0x1.a0f50ep+0f, + 0x1.946e8ap+0f, 0x1.9abecp+0f, 0x1.8dba62p+0f, 0x1.8ec6b6p+0f, 0x1.87c9e6p+0f, 0x1.8a1fb2p+0f, + 0x1.8190dcp+0f, 0x1.7bd966p+0f, 0x1.7beb42p+0f, 0x1.79ad2ep+0f, 0x1.702e9cp+0f, 0x1.6874f2p+0f, + 0x1.67aa9ep+0f, 0x1.67fbd8p+0f, 0x1.634cc6p+0f, 0x1.62ef18p+0f, 0x1.5e8b08p+0f, 0x1.276fb8p+0f, + 0x1.cbd076p-3f, 0x1.9f776ap-3f, 0x1.f81f9ep-3f, 0x1.46f15ep-2f, 0x1.3d9f06p-2f, 0x1.3dc47ep-2f, + 0x1.515f62p-2f, 0x1.4b2fa4p-2f, 0x1.39035ep-2f, 0x1.2b794ep-2f, 0x1.23dbc8p-2f, 0x1.1dcfaep-2f, + 0x1.1af91ep-2f, 0x1.17d644p-2f, 0x1.1187f6p-2f, 0x1.0cbddp-2f, 0x1.09ef28p-2f, 0x1.077334p-2f, + 0x1.04afd8p-2f, 0x1.00f45p-2f, 0x1.fb535ap-3f, 0x1.f70882p-3f, 0x1.f1323p-3f, 0x1.f03414p-3f, + 0x1.ed05aep-3f, 0x1.e861e2p-3f, 0x1.e15238p-3f, 0x1.dd136p-3f, 0x1.d9bc9p-3f, 0x1.d5dd04p-3f, + 0x1.d33652p-3f, 0x1.d3999p-3f, 0x1.d4574ap-3f, 0x1.d51be4p-3f, 0x1.d737bp-3f, 0x1.d77506p-3f, + 0x1.d93dcap-3f, 0x1.d9a88p-3f, 0x1.d74378p-3f, 0x1.d4a28ap-3f, 0x1.d1cabap-3f, 0x1.ce5388p-3f, + 0x1.ca9aa4p-3f, 0x1.c692bep-3f, 0x1.c2f1fcp-3f, 0x1.bf6b3p-3f, 0x1.bbb506p-3f, 0x1.b9d89ap-3f, + 0x1.b7ccaap-3f, 0x1.b5b102p-3f, 0x1.b4557ep-3f, 0x1.b3cb5ap-3f, 0x1.b1f974p-3f, 0x1.afdce4p-3f, + 0x1.ad8f0ap-3f, 0x1.a9ed7p-3f, 0x1.a45c34p-3f, 0x1.9cf1a6p-3f, 0x1.970d94p-3f, 0x1.942cc6p-3f, + 0x1.92aa62p-3f, 0x1.9158f6p-3f, 0x1.8eaeeep-3f, 0x1.8d9f9cp-3f, 0x1.1c99p-1f, +}; + +// Layer 1 weights [160][1830]. +const int8_t kPitchNetWeights1[160 * 1830] = { + 19, 17, -7, -1, 2, -1, -3, 8, 4, 5, 0, 5, 12, 1, 8, 3, 11, 1, -11, -21, -11, -5, -10, 3, -8, -5, -2, -12, -2, -7, + -8, 4, -3, 0, -7, -12, -2, 4, 1, -6, -6, -12, -8, -13, -5, 4, 6, -3, -6, 6, 8, 7, 5, 13, 14, -6, -2, 6, 0, -9, + 9, 10, -1, 5, -8, -8, -4, 3, 3, 4, -5, -7, 0, 8, -4, 8, 6, 2, 9, -7, -11, 11, 11, -15, 4, -13, 7, -7, 21, -5, + 4, 2, -16, -17, -20, -8, -5, 5, 0, -2, 11, -9, -14, 1, -19, -4, -9, -10, -1, 2, -12, -23, -33, -4, -9, -1, 8, 19, 3, 25, + 16, 9, 0, 3, -13, -14, -15, -14, -8, -7, 0, 4, -2, 3, 9, 0, -5, -11, -9, -5, 1, 3, 11, -3, -16, -12, 3, 2, 3, 6, + 8, 11, 13, 14, 4, -11, 14, 9, 12, 10, 12, 6, -7, 1, 12, 13, 3, 2, -12, -7, 0, -4, 12, 8, -2, 8, -4, -5, 3, -14, + -12, -28, -19, -18, -12, -10, -22, -10, -13, 9, 28, 9, -2, -1, 2, 8, 11, 12, 4, -1, 8, 18, 13, -2, -4, 12, 8, 13, 12, 9, + 1, -3, 5, -8, -9, 5, -18, -19, 9, -7, 5, 10, 7, 2, -7, 16, 2, 4, -1, -8, -3, -9, -24, -8, 5, -1, 23, 4, 35, 27, + 7, 32, 6, 19, 15, 22, 31, 1, -19, 40, 11, 1, 3, 1, 0, 1, 10, -16, -25, 3, 0, -3, 3, 7, -19, -3, -13, 4, 9, 4, + -6, 10, -2, 13, -15, -2, 11, -7, 5, -6, -18, -13, -8, 5, -5, 6, 10, 0, -3, -5, -8, 1, 2, -4, -23, -16, 9, -14, -9, 0, + 6, -13, -16, 3, 4, 15, 18, 11, 3, -8, -12, -11, -4, -16, 2, 13, 4, -11, 4, -2, -7, -3, 1, 8, 9, 25, 10, -5, -9, -10, + -7, -2, 13, 11, 8, 17, 6, -2, -14, -12, -11, -11, 6, 5, -19, -4, -9, 9, 3, 21, -7, 0, -6, 1, 3, 8, 2, 9, -7, 4, + -2, 6, -3, 1, 1, 0, 1, 13, 12, 5, 19, 22, -4, -10, -14, -2, 9, 17, 19, 23, 18, -3, -1, 9, -12, -16, 1, -2, -13, -40, + -10, -17, -6, -15, 12, 32, 5, -5, -22, -21, -32, -30, -20, 4, 7, -6, 1, 3, -17, -16, -37, -7, 14, 0, 17, 36, 1, -8, 3, -5, + -3, -22, -15, -5, -9, 7, 8, -3, -7, -3, -14, -6, 3, 3, 4, 4, 5, -7, 6, -5, -7, -15, -16, 1, 0, 21, 7, 8, 10, 7, + 15, 0, -2, -1, -7, 6, 1, 6, -8, -17, -27, -11, 3, 0, 11, 14, 8, -4, -4, 0, 5, 12, 12, -2, -1, -8, 1, 11, -7, -12, + -25, -17, -30, -13, -12, -6, -5, 4, 4, 1, 9, 9, 12, 2, 20, 10, -14, 1, -8, 5, -6, 12, 13, 4, 7, 8, 14, 7, 10, 7, + 4, 9, 7, 10, 19, 16, 8, 5, 13, 14, 12, -2, 1, -8, -9, -11, -8, -5, -12, -20, 1, 9, -7, -8, -4, -1, -14, -17, -5, -4, + -10, -1, -1, -5, 14, 9, 20, -1, 17, 17, 12, 20, 20, 1, 33, 6, -27, -5, 21, 3, 1, -31, -10, 6, -2, 12, -6, 1, 23, 0, + -8, -8, -22, 1, 7, 24, 8, -1, 20, 20, -1, 25, 23, 5, 16, -20, 4, 9, -1, 7, 2, -6, -1, 4, -10, -15, -11, 5, -8, -13, + -6, 1, -7, 9, -13, 3, -8, 2, 3, 14, -14, -19, -14, -27, -13, -3, -7, -4, 7, 8, 15, 23, -2, -10, -6, -6, 10, 7, -3, 0, + 19, -4, -3, 3, 8, 6, 12, -2, -4, -2, -1, 36, 26, 32, 17, 32, 11, 26, -1, 18, 17, 7, 18, 6, -6, -23, -16, -14, -15, -17, + -19, -13, 1, -19, -7, 10, 4, -2, -12, 0, -8, 1, 5, 17, 6, 13, -4, -20, 2, -7, -10, -12, -9, -10, -6, -22, 14, 0, 4, 9, + 6, 15, 38, 28, 8, 9, 2, 3, 8, 5, -8, 9, 0, -9, 6, -4, 6, 31, 8, 5, -16, -37, -37, -40, -25, -24, -23, -6, -6, 13, + 8, 2, 2, 15, -10, 10, 8, -10, -10, -34, 1, 5, -8, -9, -18, -7, -16, -17, -1, -3, -4, 2, 6, -8, -6, -8, -13, -27, -9, 8, + 12, 10, 6, 8, 3, 4, -3, 5, -7, -10, 6, 16, -2, 9, 4, -4, 1, 12, 5, 7, 4, -11, -3, -3, -4, -22, -5, -8, 8, -6, + -2, 12, 7, 2, -5, 3, 18, 1, 10, 9, -7, 2, 1, -10, -15, -16, -6, -18, -12, -8, -3, 1, 0, -6, -7, -2, 10, -3, -10, 1, + -11, 7, 26, 6, 5, 15, 0, 13, 12, 26, 25, 14, 23, 16, 15, 11, 10, 5, 6, -12, -22, -28, -22, -12, -10, 12, -3, -11, -19, -24, + -9, 0, 9, 15, 7, -6, 8, 4, -14, -18, 6, 29, -7, 31, 21, 29, 42, 1, 6, 16, 20, -13, -11, -5, 4, -15, -33, -16, -16, 3, + -1, 6, -23, 7, -4, -2, 26, -4, 6, 6, 30, 15, 2, 29, 7, -7, 8, -8, -8, 0, -25, -4, -11, -3, -13, -16, -1, 7, -10, -19, + -15, 3, -6, -16, -13, 7, -5, -23, -7, -19, 17, 5, 1, 2, 25, -5, 0, 7, -1, -1, -22, -34, -29, -3, 5, -4, -1, -25, -9, 3, + 5, 1, 4, 5, 12, 17, 12, -6, 18, -4, 23, 8, 18, 21, 2, 4, 3, -13, 1, -13, -13, -9, -19, -12, -2, -15, -19, 7, 18, 13, + -5, 13, 15, 12, 4, -5, -9, -28, 10, 17, 13, 16, 4, 10, 18, 9, 2, 23, 1, 4, 9, 11, 4, -1, 4, 13, 1, -2, 22, 35, + 5, 20, 0, -2, 7, -17, 4, -8, -2, -2, -3, -31, -3, -3, -11, -1, 19, -8, 1, -18, 1, -5, 1, -8, -2, -4, -8, -21, -15, -27, + -27, -35, -23, -31, -7, -12, 2, -12, 16, 30, 31, 27, 25, 39, 14, 2, -7, -3, -9, -2, -19, -13, -15, -6, 14, 13, 18, 16, 4, 16, + 4, -7, -8, -7, -18, -10, -4, -8, -1, -6, -9, -2, -7, 0, -8, -7, 0, -6, 5, 7, 2, 0, 5, -4, 9, -8, -4, 7, 24, 18, + 4, -13, -7, -3, 1, -7, -12, -19, -22, -12, 1, 15, 4, 3, -9, -1, -14, 0, 11, -10, 5, -16, 5, 22, 9, 5, 4, -10, 37, 11, + 10, 19, 32, 20, -8, -13, 6, -14, -27, -8, -20, -28, -16, -4, -23, -9, -5, -16, 2, -35, -18, -6, -27, -17, -22, -41, -28, -13, -1, -21, + -9, 3, -1, 8, 16, -6, 3, -46, -27, -19, -13, 2, 1, -18, -31, -5, 8, 0, 16, -18, -3, 30, 8, -7, -18, -8, -4, 4, -13, 0, + -8, -13, -53, -40, -10, -2, 20, -5, -4, 13, 7, -4, 0, -13, 9, 0, -15, 11, 1, -6, 0, -9, -5, -15, -19, -28, 11, -13, 11, -4, + 16, 25, 26, 9, -5, -3, 14, -7, 2, -1, 8, 19, 3, -2, 6, 2, 8, 13, -3, -5, -26, -23, -8, 4, -9, -4, -28, -20, -3, 2, + 3, -8, -18, -17, -4, -22, -7, -9, -3, -26, -14, 9, 0, -7, -4, 0, 10, 13, 26, 10, 24, 38, 12, -12, 10, 35, 40, 10, 9, 13, + 15, 21, 15, 8, 26, 26, 19, 32, 42, 31, 27, 28, 5, 4, 15, 7, -4, -8, 26, 40, 22, 15, 20, 47, 29, 19, 25, 16, 3, 8, + 27, 40, 38, 34, 34, 23, 34, 36, 38, 31, 40, 33, 34, 46, 45, 27, 23, 8, 1, -19, 1, 8, 4, -3, -16, -3, -20, -25, -34, -58, + -59, -81, -65, -65, -82, -61, -51, -36, -34, -14, 13, 21, 27, 17, 6, 12, 32, 15, 32, 21, -24, -15, -15, -6, -23, -29, -26, -32, -12, 8, + -2, 11, 11, 14, 9, 20, 10, 12, 17, 14, 17, 26, 18, 24, 18, 23, 30, 28, 26, 39, 22, 23, -4, -6, 1, 8, 15, 18, 6, 4, + 9, 4, 20, 24, 35, 25, 21, 26, 24, 34, 24, 30, 24, 22, 25, 14, 19, 15, 29, 25, 17, -5, 6, 21, 4, -3, -6, -18, 5, 8, + 4, -2, 0, 12, 17, 20, 34, 19, 16, 12, 17, 6, 22, 10, 2, 0, 17, 8, -19, -31, -45, -38, -35, -63, -61, -71, -68, -92, -92, -80, + -87, -98, -72, -87, -84, -68, -67, -65, -53, -45, -42, -39, -40, -60, -48, -62, -43, -53, -51, -82, 22, 22, -16, -20, 12, -23, 37, 37, 17, -22, + 18, 15, 0, 4, -7, -12, -31, -33, -12, -19, -7, -12, -32, -17, -6, 9, 7, -18, 5, 16, 9, -13, 11, -16, 0, 14, -14, -4, -3, -30, + -19, -16, -5, -3, 14, 11, 27, 34, 14, 9, 7, -1, -8, -10, 0, -19, 5, 8, -11, 7, 27, 4, 3, -6, -75, 2, -23, -8, 3, -12, + -4, -35, -21, -6, -2, 0, 16, 16, 13, 3, 18, -1, 17, 19, -11, 7, 20, 7, -20, -12, -30, -22, 4, 0, 2, 10, 9, -17, -28, -36, + -23, -24, -19, -38, -17, -9, 0, -4, 14, 22, 24, 18, 35, 25, 8, 12, -4, -2, -1, 21, 6, 18, 31, 31, 18, 7, -11, 2, 15, -5, + -3, 18, 16, -10, 23, 36, 22, 28, 28, 29, 32, 57, 35, 23, 29, 38, 25, 16, 10, -6, 13, 11, -5, 2, -15, 31, 35, 36, -4, -23, + -45, -76, -63, -58, -3, 6, 31, 54, 24, 8, -17, -49, -55, -31, -53, -67, -32, -16, 2, 6, 27, -8, -2, 21, 18, -42, -43, -33, -35, -33, + -19, -16, -19, -14, 0, 4, -1, -5, 1, -5, -12, -1, 14, 11, -7, -6, -15, -1, -8, -17, -19, -21, -31, -27, -23, -20, -5, -26, -33, -19, + -16, -6, -19, -25, -18, -14, -16, -13, -9, 7, -3, -9, 0, -4, 10, 16, -2, 1, -7, -14, -13, -11, -5, -17, -16, -9, 13, 4, 11, 22, + 17, 17, 12, 0, 4, 10, 23, 12, 17, 11, 39, 46, 46, 47, 50, 68, 64, 66, 66, 58, 73, 86, 91, 84, 81, 73, 84, 84, 82, 67, + 42, 28, -5, -2, 12, -17, -15, 1, -25, -40, -31, -45, -65, -67, -67, -79, -85, -69, -91, -93, -116, -96, -103, -101, -127, -51, -3, -96, -80, -78, + -41, -1, -2, 20, -37, 58, 51, 0, 43, 21, 30, 37, -6, 14, 19, 19, 31, -14, 3, -16, -9, -4, -20, 15, 28, 2, -3, 17, 21, 6, + -1, -10, -4, 2, -21, -11, -25, 0, -5, 17, 2, 43, 32, 7, 9, 8, 23, 10, 0, 13, 15, 42, 22, 12, 1, 10, 22, 41, 14, -73, + -3, 0, -3, 4, 4, -3, -1, -5, -6, -4, -5, -6, -10, -4, -2, 0, 1, -1, 1, -5, -1, -9, 0, -7, -3, 0, 4, 7, 0, -1, + -12, -12, -6, -2, -6, 1, 1, 3, -2, -2, -4, -2, -1, 3, -4, -7, -1, -8, -4, -5, 7, -7, -1, -1, 3, 2, 5, -1, 0, 6, + 12, 4, -1, -2, -5, 6, 7, 3, 4, 4, 5, 1, -5, 2, 3, -3, 0, -7, 0, -1, 0, 1, 9, -2, -3, 1, -2, 5, 7, 2, + 4, -3, -8, -9, 1, 5, -5, 7, -2, -1, -8, -11, -3, -13, 0, -9, 5, 2, -4, 5, -2, 3, -4, 10, 5, 5, -4, -4, -4, -1, + -2, -2, 1, -4, -3, -3, 5, -2, -6, -5, 0, 2, 4, 11, 6, 5, 1, -1, -2, -1, -3, -1, 0, -5, -1, -3, 2, 4, 1, 0, + -2, -1, 1, 0, 0, -4, -4, -12, -5, 2, -1, 5, 14, 11, 8, 8, 3, 2, 4, 9, 5, 1, 1, 7, 8, 3, 2, 3, -4, 3, + 2, 2, -6, -6, -4, -2, -1, 6, 5, 3, -2, -1, 5, -2, -3, -4, 0, -7, -4, 1, -1, 8, 7, -2, -6, -1, 2, 2, 4, -11, + -7, -3, 4, 1, -1, 1, 3, 1, 5, 7, 5, 1, -2, -2, 0, -4, -2, 1, 0, 3, 6, -1, -1, 8, 1, 7, -5, -6, 0, -4, + -16, 7, -10, -2, 2, 9, 5, 4, 9, 7, 6, -5, -2, 9, 4, 13, 6, 4, 2, 0, -4, -6, 10, -7, -7, -3, 2, 2, 0, 10, + 2, 5, 8, -2, -3, -1, -7, -4, 2, -4, 6, 1, 5, -5, 5, 1, 2, 1, 13, 7, 4, -7, 0, 2, 9, -4, -2, -1, 0, -5, + 1, 7, -6, 3, -3, 3, 5, -3, 11, 10, 5, 0, -6, 1, -8, -7, -2, -2, -5, 8, 9, 9, 7, 6, 3, 4, 1, -2, 0, -2, + 7, 6, 1, -5, -5, -3, -4, -2, 3, 13, 0, -7, -1, 6, 4, -2, -9, 2, 2, -3, -12, -8, -5, -8, -1, 10, -3, 0, 11, 8, + -2, 1, -1, -9, 2, 6, -4, -2, 1, -7, 1, -7, -1, -1, -12, -3, -3, 3, -9, -10, 2, -7, 5, -2, 8, 4, -1, -6, -4, 1, + 9, -1, 4, 3, -6, -5, 3, -5, 0, 4, 10, 2, 7, 3, 2, 5, 0, 0, 6, 4, 7, 4, 1, 9, 15, 15, 8, 3, 8, -7, + -5, 3, -8, -9, -2, 2, 4, 0, 0, 4, 0, -5, 1, -2, -1, -7, -2, 0, -1, -1, 6, 5, 5, 5, 4, 5, -2, -7, 1, 5, + 4, -2, -2, 2, 6, -1, -5, 2, -1, -1, -1, -1, 2, 1, 0, -3, -1, 3, 4, -4, -4, -6, -4, -1, -7, -6, -3, -9, 1, 1, + 0, 3, -5, 0, -1, -1, 0, -4, -6, -4, -3, 5, 5, -1, -5, -1, 1, 0, -1, 4, 5, 1, 0, -8, 4, 1, -4, 2, -8, -12, + -4, -4, 3, 7, -2, 1, 0, -3, -2, -2, 2, -3, -4, -10, -4, -1, 3, 4, 9, 1, 2, 5, 7, 3, 3, 10, 4, 2, 7, -3, + -8, -6, -4, 3, -9, -11, 5, -7, 3, -10, 1, -1, 5, 6, 0, 5, -10, 0, 0, 5, 5, 3, -6, -5, -8, -5, 2, -6, -13, -17, + -11, -6, -13, 4, -4, 3, 8, -11, -10, 0, -5, -1, 7, 5, 8, 3, 4, -2, -3, -6, 0, 4, -1, 9, 6, 7, 0, 8, -1, 2, + 4, -6, -6, -2, -3, 0, -5, 0, -1, -1, 14, 8, 4, 1, -4, 8, -3, 0, -5, -4, 0, 8, 7, 4, 12, 11, 8, 1, 3, -1, + -4, -5, 6, 1, 3, -5, 0, 4, -9, 1, -2, -2, 4, 7, 7, -5, 0, -3, 8, 16, 3, -1, 5, 2, -11, -8, -1, -1, -8, 1, + -5, 3, 9, 12, 3, -1, 3, 8, -5, -1, 1, -2, -5, 5, 1, -7, -7, 7, 0, 4, -6, -3, 8, -6, -12, -4, -11, 2, 2, -2, + -6, 2, -8, 1, 6, -2, 3, -1, 1, -14, -3, -2, 1, -1, 8, -5, 2, 9, 8, 9, 4, 1, 2, 8, 4, 2, 6, 4, 5, 7, + 0, 8, -9, -2, 6, 3, -4, -11, -5, -6, -3, -2, 5, 2, 1, 0, -7, -4, -1, -6, 0, 1, 6, 11, 13, 12, 0, -2, 0, 0, + -1, 4, -2, -1, -3, 0, 1, -1, -3, 2, -1, -4, -5, -1, -2, 4, 0, -3, 0, -2, -3, -8, -3, -6, -2, -1, 3, 3, 5, 0, + -4, 0, -3, 7, 5, 7, 7, 1, 3, 1, -1, 1, 3, 3, 2, 1, 7, -3, -3, -7, -10, -6, -4, -3, 2, 3, -9, -2, -2, 1, + -1, 10, -1, -4, 2, 5, 3, 6, 3, 1, 3, 6, 6, -4, 3, 1, -2, -8, 4, 6, -1, 2, -2, 0, -4, 2, -1, -3, -1, -9, + -2, 0, -5, 0, -8, 1, 5, -3, 6, 7, -16, 11, 5, 16, 7, 14, 1, 15, 11, 5, 14, 3, 7, 11, 5, 3, -5, -9, -1, -1, + 4, -3, 2, -4, -6, -15, -6, -8, -6, -2, 3, 10, -7, -8, -7, -8, -8, -3, -4, -1, -3, 2, -6, 3, 7, 7, 10, -3, -1, 14, + 3, -1, 3, -6, -6, -7, -4, -9, 5, 1, 3, -2, -8, -3, -6, -3, -4, 1, 5, -5, -10, -18, -16, -8, -6, 4, -4, 2, -3, 0, + -1, 0, 6, 3, -1, -6, -5, 5, 3, -2, -10, -7, -13, -9, -4, -3, 1, 11, 5, 8, -1, 2, -4, 1, 1, 5, 2, 9, 9, 11, + 12, 3, -3, 3, 3, 9, 2, 5, 9, 9, 2, -5, 3, 15, 12, 8, 5, 3, 8, 3, 5, 4, 9, 15, 2, -4, -2, -3, 2, 8, + 6, 1, 0, -7, -4, -6, -9, -5, -4, -8, -15, -6, -5, -4, -1, 7, 6, -3, -5, -3, -7, -11, -14, -13, -6, -9, 2, -7, -6, -1, + -5, -3, 2, 6, 3, 0, 2, 3, -7, -2, 3, 2, 1, -2, 5, -1, 6, 2, 7, 4, 0, -4, -5, 1, 1, -1, 4, 3, 6, 0, + 1, 1, -1, -2, -1, 3, 0, 8, 3, -10, -6, -1, -2, 1, -1, 4, 3, 0, 7, 6, 8, 1, 0, 2, -1, -5, -6, -11, -6, -5, + -3, -5, 3, 0, 5, 4, -1, 9, 3, 1, -1, -8, 6, 3, 5, 3, -2, 4, 4, 0, 5, 0, 4, 1, 1, -5, -3, -2, -1, 4, + -3, 5, 5, 4, 2, 5, 5, 0, -10, -8, -8, 1, 6, 1, 8, 9, 4, -8, 4, 8, 9, 1, -3, -6, 1, 1, 4, -2, 0, 0, + 5, 4, -1, 5, -3, -4, 3, -3, -7, -3, -3, -13, -10, -14, -27, -12, 32, -12, 19, -10, 28, -1, 9, 3, 9, 5, 10, 7, 12, -8, + 11, -3, -9, 5, 10, 8, -1, 9, 5, 7, 4, 6, -3, 4, -5, -6, 16, 6, 6, 2, 4, 3, 11, 3, 0, 7, 17, 5, 7, 0, + 9, 12, 3, 4, 3, 4, 6, -11, -8, -11, -9, -9, -9, 5, 0, -3, 12, 1, -3, -11, -6, -5, -4, 1, 1, -10, 0, 1, 4, 1, + -5, -15, -4, 1, -8, -8, -10, -19, -3, 8, 2, 8, 14, 15, -7, -8, -18, -17, -3, -8, -3, -3, -4, 0, -1, 11, 2, -1, 0, 3, + 3, 2, -6, -2, 4, 6, 0, -2, 12, 13, -5, 9, 14, 18, 23, 17, 7, 15, 26, 18, 9, 3, -6, -3, 7, 1, -3, 0, 9, -5, + 8, 1, -3, 2, 0, -10, 6, 3, 8, 4, 9, 10, -3, -8, -3, -4, -7, -26, -32, -20, -13, 14, 15, 26, 13, 0, -14, -10, -27, -23, + -19, -25, -17, -13, -1, -7, -9, 2, -20, -8, 9, 5, 13, 8, 2, 1, 4, 1, 12, 14, -12, -7, -4, -4, 3, 1, 8, 7, 6, -2, + 4, 8, 5, 7, 4, 6, 2, 3, -1, -3, -1, -3, 8, 6, 2, 3, -1, 2, 1, -2, -4, -7, -6, -9, -12, -12, -10, -11, -4, -2, + -2, -2, -9, 0, 3, -1, -6, -12, -12, -11, -12, -5, -1, 3, -2, -3, -3, -4, 1, 0, -4, -2, 6, 3, 3, -3, -3, 4, 10, 7, + 4, 3, 9, 16, 15, 1, 5, 9, -1, -1, -3, -7, -10, -15, -7, -4, -8, -19, -22, -20, -12, -2, 4, 8, 17, 5, -6, -9, -16, 0, + -3, -3, 2, -1, 7, 2, 0, 11, 7, 2, 7, 10, 6, 14, 3, 6, 4, 2, 5, 5, -5, 63, -18, 43, -23, 59, 11, 18, 10, -15, + -15, -2, -15, 0, -7, 7, -16, -11, 10, 9, 11, 6, 11, 20, 4, -5, 12, 3, 7, -1, -4, -6, -1, 0, 3, 9, 4, 17, 3, 0, + 5, 18, 10, 0, 7, -6, -2, -4, 7, 14, 6, -4, -11, -14, -7, -4, -2, -9, -1, 5, 4, 12, 2, 1, -18, 2, 7, 18, 19, 8, + -8, -5, -15, -14, 0, -1, -1, 11, 2, -8, -5, -18, -17, -5, 8, 8, 20, 31, 26, 19, 7, -11, -20, -19, -20, -6, 8, 11, 12, 12, + 6, 12, -3, 12, 26, 26, 7, -7, -8, -7, -6, -2, 11, 32, 30, 30, 23, 17, 1, 15, 15, 12, 30, 30, 18, 26, 15, -1, 4, 4, + -8, -12, -11, -12, -3, -6, -13, -12, -3, -11, -7, 4, -2, 9, -1, 0, 13, 12, 17, 17, 6, -18, -54, -61, -59, -36, -1, 23, 68, 86, + 74, 36, 1, -33, -43, -38, -33, -15, -2, 20, -3, 10, -2, 6, -1, -16, -9, -11, 3, 4, -3, 2, 6, -11, 10, 0, 4, 3, 8, 14, + 16, 12, 15, 7, 12, 2, 1, -1, -1, 4, 2, 6, 6, 6, 3, 1, -2, 1, 0, 6, 12, 12, 13, 8, 6, 14, 13, 15, 12, 15, + 11, 9, 6, 10, 18, 27, 23, 24, 29, 27, 25, 21, 14, 8, 4, 8, 9, 18, 23, 18, 19, 19, 22, 22, 16, 9, 7, 11, 7, 7, + -3, -7, -6, 2, 2, 5, 5, 3, 11, 4, 9, 10, 12, 18, 24, 18, 24, 8, 8, -7, -21, -50, -76, -87, -88, -70, -44, -19, 8, 16, + -4, -40, -83, -111, -127, -123, -105, -97, -62, -45, -37, -26, -23, -18, -17, -10, -3, 10, 22, 26, 19, 5, 3, 6, 20, -29, 61, -39, 51, -36, + 61, 1, -24, 42, -24, -16, 22, -11, -2, -9, -1, -19, -5, 7, -13, -9, 0, 22, 6, 4, 4, 5, 0, -9, -8, -11, -14, -10, -15, -12, + -4, -3, 12, -9, 1, -3, 9, 5, -7, 0, -1, 3, 7, 3, 5, -3, 3, -7, -6, -6, -4, -8, -2, 2, -6, -2, 4, 4, 2, 13, + 4, 8, -1, 4, 1, -3, 2, 9, 8, 4, 7, 4, 3, 8, 2, 6, 11, 15, 9, 2, 8, -1, -3, -6, -17, -18, -6, -1, -2, -2, + -3, -3, 11, 9, 2, 6, 0, 6, 3, 1, -1, 3, 4, 4, 9, 4, 8, 8, -5, 4, -2, 4, 7, 4, 0, 1, -3, 3, -2, 2, + -1, -6, -3, -6, -9, -10, -2, -2, 7, 5, 4, 17, 6, -2, -4, -3, -4, -5, 3, 5, 9, -3, 2, -4, -3, -11, -3, -1, 2, -1, + 4, -3, 8, -5, -2, 8, -3, -1, -6, -13, -8, -9, -2, -12, -6, -22, -10, 4, 6, -3, 0, -3, -5, 1, 15, 11, 7, 4, 3, 11, + 0, 4, 0, 3, -4, -2, 2, -3, 1, -1, -1, -8, -2, 0, -3, 1, 6, 10, 4, 14, 5, -2, -17, -15, -11, -4, -9, -2, 1, 4, + -1, -3, -2, -1, 6, 2, 1, -1, 0, -7, -4, 1, -1, -3, -7, -1, 0, 5, -5, 1, 2, 3, -3, 7, -2, -1, 4, -3, -1, 4, + 2, -4, -1, 2, 0, -3, 0, 4, -5, -4, 1, 12, 10, 16, 2, -2, -4, -5, 3, -2, 0, -1, -3, 0, 8, 5, 2, -1, 6, 5, + 3, 5, 0, -7, -4, 11, 9, 1, -2, -10, -10, -6, 2, -5, -5, 3, -1, 2, 1, 7, 4, 3, 6, 5, 2, 2, -8, 5, 8, -12, + 41, 4, 1, 7, -11, -14, -6, -4, -9, 7, 1, 4, -8, -14, -22, 5, -10, -12, -10, 4, 0, 10, 6, -9, 10, 1, 8, -9, -2, 2, + 1, 3, -2, -12, 4, 8, 2, -4, -7, -12, -1, 7, 6, 4, 7, -1, 4, 5, 3, 5, 2, 3, -3, 0, 11, -4, -3, -4, -12, 0, + -10, -6, 4, 4, 0, -4, 0, -15, -6, -1, -7, -10, -14, -8, 6, 0, 2, -3, 6, 1, 2, 6, 3, 6, 1, 11, -3, 0, -2, 1, + 2, 1, 7, -1, 5, 17, 11, 4, 1, -2, 5, 0, 3, -10, 2, -2, -7, -6, 4, 8, -2, -6, -3, -7, -3, 7, -3, -2, -2, -5, + -4, -3, -3, 4, 7, -2, -9, 1, -4, -3, -4, -2, -1, 0, 7, -2, 1, 13, 6, -12, -10, -5, -13, 0, -9, -7, 4, 0, -5, -9, + 0, -4, 3, -9, -2, -2, -10, 8, -10, 5, 5, 9, 12, 11, -1, -4, -1, -4, -1, -1, 5, 6, 13, 6, 8, -9, 2, 2, 3, 16, + 0, -2, -7, 11, 7, -10, -10, -11, -15, -11, -2, -2, 2, -3, -9, -9, 5, 7, 2, 3, 0, 1, 7, 3, 9, 8, 4, 3, -7, -8, + -10, -6, -6, 1, 1, 7, 7, 10, 5, 6, 10, 6, -3, 5, 1, 3, -1, 7, 8, 9, 6, 6, 4, -1, 5, 5, 0, 5, 6, 2, + 1, -2, 5, -3, -9, -10, -8, -5, -5, -13, -14, -2, 2, 3, 0, 4, 2, -1, 6, -7, -5, -3, -6, -1, -1, -7, -1, 2, 1, -2, + 2, 2, 7, 6, 2, 7, -2, -4, -10, -6, -4, 5, -9, 12, 2, -3, 6, -1, -2, 4, 13, 9, 8, 6, -2, -4, -4, 0, -2, -3, + 11, 1, -10, 0, 1, 19, -1, -13, -2, -13, 6, -7, 4, -6, 14, 4, -2, -8, -9, 0, -1, 7, -3, 5, 12, 12, -2, 0, -8, 6, + -5, 3, -9, 1, -14, 0, -5, -1, -14, 0, 1, 0, -3, -1, -2, 3, 7, 5, 6, 19, 13, 3, 0, -2, 8, 1, 6, 3, -7, 2, + -5, -5, -9, -13, -11, -7, -10, -4, 0, 6, 7, 2, 1, 0, -9, -4, -1, 1, 2, -2, -3, -1, -6, -1, 0, 0, 7, -10, -10, 8, + 5, 0, -1, -10, -1, 1, -8, 1, -4, 6, 4, -2, -5, -2, -6, -4, -3, -12, 2, -4, 5, 2, 0, 5, 5, 12, -1, 9, -9, 0, + -2, 7, 4, -3, -8, -1, -4, -11, -6, -6, 4, 0, -19, -18, -2, 5, -8, 3, -2, -15, -3, -4, 3, 4, 2, -5, -8, -16, -3, -2, + -5, 0, -18, 5, 11, 10, 5, 16, 9, -4, 7, -4, 4, 2, 7, -3, 18, 10, 8, 6, -7, 18, 8, -9, -3, 7, -4, 8, 3, -4, + 3, 10, 13, -8, -6, -5, 5, -4, -1, 1, -5, -2, -1, 4, 8, 5, 4, 4, 6, 8, 7, 8, 11, 7, 6, 5, -1, -1, 0, -6, + -1, -5, -8, -4, 1, 3, 1, 0, 0, 1, -1, -4, 0, -2, 4, -3, -4, 1, -5, 0, 2, 6, 6, 7, 12, 2, 2, 7, 3, 4, + 6, 8, 7, 3, 5, 2, -8, 0, 0, 1, 4, 4, 0, -6, -4, 0, -10, -4, -2, 4, -1, -4, 2, -6, -6, -8, -17, -23, -7, -2, + -6, -7, 5, 3, 11, -3, 2, 4, 3, 4, 5, -3, -5, 1, 0, -3, 3, -2, 10, 7, 12, 7, 13, 4, -6, -3, -9, 2, -5, -4, + 4, 9, 8, 5, -1, -4, 7, 2, -6, -4, 30, -7, -7, 3, -16, -8, -5, 11, -17, 12, 16, 20, -5, -4, -1, -7, -6, -11, -11, 5, + -5, -3, 1, -5, 3, 0, -2, -9, 2, 13, -4, -11, 3, -8, -4, 2, -10, -8, 3, 2, 10, 15, 3, -2, 6, 5, 15, 11, 16, 0, + 4, 12, 1, -1, 1, 7, 3, -3, -7, -5, 1, 3, 5, 5, 8, -3, -1, -15, 3, -5, 3, -5, -11, -3, -5, -1, 9, 10, 5, 11, + 2, -9, -16, -1, 5, 0, -9, -3, -17, -4, 9, -9, -1, 15, 14, 21, 7, 9, 9, 5, -1, -10, 2, 3, 6, 0, -6, -4, 12, 5, + 12, -5, -7, -10, 0, 2, -5, 1, -5, -8, -8, -14, -4, 5, -7, -5, -4, -1, -7, 3, 4, -5, 2, -3, -8, 8, -6, -11, 16, 11, + 9, 2, -3, -9, -12, -8, -15, -2, 2, -4, -6, 12, -3, 0, -7, 21, 7, 13, 0, 16, -1, 9, 6, -2, -5, 16, -11, -1, 6, -3, + 15, 2, 10, -5, 2, -8, -5, 2, -3, 0, 0, -2, -11, -5, 5, -4, 4, 6, 12, 11, 15, 5, 14, 13, 9, 14, 6, 0, 2, 3, + -4, 1, 5, 1, 2, -2, -5, 0, -5, 0, 1, -6, -2, -2, 9, 7, 3, -1, 1, -1, -8, -6, -9, -9, -4, 1, -2, 1, -3, -4, + -4, -5, 2, -3, -10, -1, -4, -2, 10, 2, -3, 0, -5, -3, 1, 0, -3, -1, 2, 2, 1, -1, -2, -7, -2, 0, 8, 11, 6, 6, + 6, -8, -1, 1, -1, -2, -4, 2, 3, 2, 4, 6, 4, -2, -1, 7, -1, -7, -5, 2, 0, 6, -2, -3, -4, 1, -8, -3, -6, -16, + 5, 0, -3, -6, 2, 7, 8, 4, 5, -2, 7, 6, 4, -8, 5, 24, -25, -9, 20, -12, -17, -9, 30, -11, -15, 20, 17, -20, -22, -10, + 3, -17, 8, 2, 2, -2, -9, -7, 1, 2, -3, 3, -12, -3, -6, -4, -8, -17, -8, -6, -10, -2, -7, -1, -3, 15, -5, 6, -5, 0, + -1, 0, 4, 7, -4, -1, 1, -4, 2, -4, 5, 3, -3, -6, 1, 9, 10, -4, 7, 29, 3, -3, 7, 6, 2, -8, -15, -10, -16, -12, + -8, 0, 2, 16, 0, 1, -7, -2, 6, 3, -5, -14, -18, -14, 1, 10, -1, 2, 8, 22, 12, 3, 9, 3, -5, -14, -20, -20, -13, -14, + -12, -19, -1, 5, 9, 2, -3, -12, -2, 6, 0, -13, -6, -6, -11, -8, 0, 8, 15, 17, 10, -2, 2, -2, 2, 13, 10, -1, -14, -12, + 11, -2, -5, 12, 17, 22, 12, 7, 16, -1, -11, -6, -14, -2, 2, 15, 12, 5, 3, 16, 25, 11, 11, 11, 17, 8, -3, 2, -6, -10, + -2, 7, -9, -6, 5, -20, -1, -3, -5, -13, -6, -5, -2, -16, -23, -13, -11, -3, 4, 10, 3, -2, 0, 3, -2, -1, -5, -5, 1, 8, + 7, 11, 9, 2, 1, -7, -8, -1, 1, -4, 1, -2, -1, -3, -5, -5, 5, 5, 9, 5, -1, -4, -7, -4, -5, -4, -7, -11, 0, 8, + -3, 1, 10, 7, 10, 6, 9, -1, -3, -6, -17, -4, -4, -6, 1, 2, 3, 4, 3, 3, 1, -5, -7, -7, -5, -8, 6, 6, 6, 4, + 11, 12, 8, 1, 1, 2, 2, -4, 7, -1, -3, -10, -5, -4, -5, -7, -2, 6, 7, 1, 5, 0, 7, 10, 5, 10, 5, 1, 3, 6, + 3, 0, -3, -5, -6, -7, -9, -10, -1, 3, 0, 0, 2, 4, 8, 0, -1, 10, 10, 14, 39, -38, -23, 45, -21, -47, -1, 72, -19, -25, + 40, 36, -31, -12, 24, 7, -15, 9, 6, 4, 5, -8, 4, -9, -9, -8, 4, 5, -13, -8, -3, -5, -6, -1, 1, 8, 7, 14, 6, 1, + 14, 8, 9, 0, -3, -8, 2, -3, 1, -3, 7, 7, 2, 4, 4, -13, -4, -6, 1, 1, -1, 11, 4, 11, 37, 36, 25, 4, 7, 15, + 9, 14, 13, -6, -13, -31, -20, -4, -5, 17, 16, 18, 6, 8, -15, -27, -28, -38, -25, -9, -9, -9, 5, 20, 33, 42, 49, 40, 22, 9, + -1, 5, -1, -7, -3, 13, 23, 21, 24, 28, 34, 8, -7, -17, -17, -11, -20, -11, -7, -18, -27, -30, -18, -20, -5, -8, -15, -11, 1, -6, + -15, -8, -14, -12, -10, -24, -38, -27, -15, -9, -4, 12, 11, 8, -11, -27, -17, -31, -14, 5, 17, 16, 12, 34, 10, 15, -6, -11, -9, -5, + -4, 24, 9, 17, 12, 0, 5, -3, -2, 1, 22, 21, 20, 16, 10, 6, 9, 8, -5, -13, 4, 0, 8, -8, 20, 4, 3, -2, -3, 4, + 6, 8, 9, 16, 15, 12, 13, 14, 9, 4, -5, 1, 1, -1, -6, -4, -1, 6, 7, 6, 11, 29, 28, 22, 22, 19, 24, 8, -12, -20, + -33, -44, -47, -38, -30, -36, -29, -13, -13, -5, 13, 12, -8, -2, -6, -13, -11, -8, -11, -7, -9, -7, 3, 4, 9, -3, 0, -5, -5, 4, + 2, 2, -13, -5, 11, 16, 21, 36, 32, 38, 32, 32, 15, -3, -38, -61, -75, -73, -61, -37, -13, 8, 24, 38, 37, 26, 7, -14, -20, -32, + -24, -17, -3, 11, 3, 7, 10, 7, 17, 23, 10, -6, -19, -35, -44, -42, -34, -15, 2, 22, 30, 12, 4, -1, 2, 52, -36, -69, 98, -52, + -53, -40, 127, -60, -85, 39, 64, -94, -33, 82, 11, -49, 29, 69, -29, -21, 11, 19, -14, 5, 5, -2, 5, 11, 9, 14, 2, -8, -5, 27, + 6, -7, 17, 12, -2, -4, -6, 1, 5, 3, 3, -11, -10, 4, 12, 12, 10, 12, 10, 2, -7, -1, -1, -3, -13, -19, -1, 8, 4, 33, + 2, -1, 13, -7, 8, -3, 8, 2, 21, 14, -4, 14, 13, 3, 1, 7, -5, -4, -1, -3, -17, -3, -9, 3, 5, 9, 12, -8, 3, 3, + -1, 11, -1, 7, 2, 10, 5, 2, 5, 1, 3, 16, 12, 17, 1, -2, -15, -1, 1, 12, -8, 0, -4, 6, 11, -18, -10, -2, -6, 0, + 17, 7, -2, 5, 10, 2, 4, 4, 11, -1, -2, 24, 0, 0, 19, 0, 9, 3, 12, 0, 3, 5, -5, 8, -15, 2, -7, -3, 5, -8, + 8, 9, 12, 20, 15, 4, 7, 1, 9, 23, 12, -1, -5, 11, 6, -9, -3, 16, -9, 1, 5, -4, 6, 8, 4, -2, -3, -10, -11, -21, + 5, 0, -4, -10, -4, -12, -11, -1, -7, 1, -4, 5, 7, -7, -3, -10, 2, 9, -6, -1, 1, 8, 12, 6, 3, 7, 6, 7, -2, -14, + -3, 1, -3, -3, -2, 14, 10, 9, -5, -8, 3, -5, -4, 2, 0, -8, 0, 11, -2, -8, -7, -5, -10, -1, -1, -2, 7, 10, 5, 9, + 7, 4, 12, 14, 3, -5, -5, -6, -3, 8, 5, 20, -4, 0, 2, -10, -13, -30, -12, -7, 2, -10, -6, 1, -15, -2, -8, -6, -4, -4, + -2, -1, 4, 0, -6, -8, 0, 0, 9, 7, 6, 5, -2, 7, 2, -4, -3, 13, -2, 2, 9, -2, -7, -6, 6, 18, 17, -5, -12, -13, + -11, 45, 31, 6, 10, -9, 35, 19, 0, -15, -2, 6, -21, -20, -10, 4, -4, -10, 32, 15, -16, -19, -7, 16, 17, -19, 4, -4, 11, 3, + 11, 22, -3, -3, 3, 4, -15, 4, -6, -10, 2, 0, -28, -14, -14, -6, -8, -14, 4, 10, -4, 4, 0, 5, -19, -5, 1, -11, 6, 9, + -2, -11, -10, -1, 21, 23, 18, 15, 14, 10, 6, -1, 15, 10, 12, 20, 4, -1, 7, 4, 6, 19, -2, 3, 8, -3, 10, 15, -1, 3, + 6, -2, -3, -4, 3, 1, 12, 11, 8, 16, 6, 10, 11, 5, -8, 1, 2, 18, 11, -5, 14, 9, 0, -3, 9, 1, -3, -8, -3, -11, + -3, -8, 0, 3, -5, 7, 5, -2, -13, 1, -2, 10, 14, -1, 6, 18, 3, 5, -2, 15, 8, -15, 3, -7, 0, -7, -7, -2, -5, -4, + 5, -13, -10, 9, 7, 26, 25, 6, -6, 5, -1, 0, 3, -7, -7, 4, 2, -1, -11, 11, -1, 12, 34, 5, -5, 3, -7, 2, 4, 27, + 6, -16, -17, -33, -17, -8, -7, -3, 1, 0, -4, -11, -8, -14, -15, -5, -2, 0, 1, -4, 1, -3, -13, -4, -4, -3, 0, 8, 1, 0, + 0, -6, -3, -19, -19, -11, -4, -7, 8, 5, 17, 7, 8, -4, -5, -1, -1, -7, -10, -18, -5, -4, -4, 10, 3, -13, -9, -4, -7, 5, + 8, -4, 2, 2, 5, 0, 2, -4, -11, -4, -5, 9, -4, -7, -4, 2, -4, 3, 6, 12, -2, -12, 4, 5, -2, -4, -6, 1, 2, 1, + 12, -3, -13, 0, -7, -3, 4, -1, -12, 5, -4, 2, 6, 4, -6, -7, 0, -5, -10, 9, -8, -7, 0, -2, 14, -6, 15, 10, 4, 10, + 10, 0, -7, -8, -10, -22, 21, 41, 10, 9, -3, 18, 1, -19, -6, -16, -15, 2, -1, -8, -2, -17, -5, 10, 2, 4, -4, -11, 8, -4, + -9, 6, 4, 3, 9, 2, 19, 22, 5, 0, 16, 9, -2, -3, 3, 2, -10, -14, -33, 4, 7, 5, 8, -8, 3, 18, 30, -6, -2, -18, + -11, 15, 6, 12, 10, 6, -7, 8, -12, 31, -2, 31, 31, 36, 26, 14, 4, 16, 7, 7, 23, 9, 2, 13, -6, -6, -6, 1, -15, -3, + 9, -8, -9, -14, -2, -9, -15, -14, -7, 6, 2, 6, 19, 4, 17, 4, 8, -7, -9, 17, 28, 22, 25, -2, -7, -2, 10, 10, 5, -5, + 9, 2, -1, 7, 0, 9, 1, -16, -13, -10, -15, 2, 2, -7, 5, -7, 6, -5, -5, -3, 8, -1, -9, 3, 20, -1, -13, -16, -37, -17, + -23, -17, -14, -26, -10, 5, 5, -1, 5, -1, 1, -5, 9, -13, -22, 4, -10, -4, 16, 3, 18, -10, 1, -11, 10, 12, 11, 0, 15, 6, + 1, 21, 19, 4, 0, -15, -15, -9, -17, 4, -3, 0, -4, -5, -11, -17, -24, -19, -3, -2, 1, 8, 1, 5, 0, -1, -7, -1, -12, -15, + -2, -6, 10, 8, 10, 6, 6, 3, -5, 0, 2, 4, 15, 17, 10, 1, -3, -13, -12, -2, 12, -9, -23, -9, -16, -20, -16, -8, 6, 7, + -9, -1, -1, -29, -9, 14, 6, 12, 8, 5, 8, 5, -2, -9, -10, 5, 1, 7, 13, 1, 0, -12, -1, 12, 8, 7, 14, 3, 11, 0, + 11, 1, -3, 3, -12, -4, -16, -14, -8, 5, -6, -3, -2, -8, -8, -10, 1, 1, 3, -3, -4, -9, -12, -20, -12, 4, -1, -1, -4, -10, + 3, 0, 6, 3, 26, 7, 2, -1, -11, -6, -27, 27, 73, 19, 20, 2, 43, 5, -9, 26, -5, -15, -2, 5, -5, 5, 2, -1, -6, 1, + -9, 16, -10, 5, -1, 8, 15, -13, 3, 12, 18, 5, 17, -5, 14, -6, 11, -5, 18, 1, 4, 18, -17, -12, -3, -2, 7, 0, -5, 1, + -4, -10, 4, 6, -16, -24, -5, 9, -3, 3, 4, -18, -5, 0, 22, 3, 14, 5, 10, -7, -2, -7, 3, 6, -3, 4, 5, 1, 8, 1, + -7, 4, 8, 20, 25, 21, 15, 11, -8, 4, 23, 11, 14, 7, 0, 9, 14, 7, 2, 9, -1, -3, 3, -1, 6, 9, -5, -11, -22, -1, + -3, 1, -3, -5, -8, -19, -9, -9, -10, -23, 2, 3, -5, -9, -5, -16, -14, -11, -18, 2, -17, -13, -19, -27, -7, 6, -13, -11, -12, -5, + -11, -1, -13, -16, -9, -20, -24, -23, -7, 1, 19, 6, -15, -7, 14, 8, 3, 7, 5, 15, 14, 16, 23, 2, 27, 28, 34, 21, 25, 24, + 11, 15, -12, -5, -3, -17, 0, -9, -19, 1, -27, -3, -21, -29, -16, -14, -13, -9, -10, -13, -9, -10, -5, -15, -11, -1, -2, 2, -3, 7, + 4, -1, -1, 8, 12, 8, -3, -7, -3, 5, -4, -7, -10, -15, -8, -17, -13, 5, 10, -10, -8, 1, -1, -18, -15, 3, 5, -12, -13, 1, + -2, -3, 5, 3, -1, -9, 5, -7, -20, -5, -15, -18, -12, -28, -27, -2, 0, -4, 4, 15, 36, 10, 3, 5, 2, -6, -8, -7, 1, 3, + 10, 6, -20, -6, -15, 4, -24, -27, -14, -2, 4, 1, -7, -11, 7, -4, 2, 5, -9, -2, 5, 7, -1, 11, 9, -5, -21, -21, -15, -22, + -4, 6, -1, -13, -22, -19, -18, -15, 3, 6, -8, 14, -3, -4, -24, 8, 56, 84, 0, 13, 19, 38, 1, -9, 4, 2, -11, -3, 19, -6, + 1, -16, -11, -7, -6, -8, 14, -2, 4, 1, -10, 0, -6, -20, 0, 18, 16, 20, -3, -1, -17, -2, 11, 14, 12, 21, 9, -5, -4, -16, + 3, -2, -6, -16, 9, 1, 11, 29, 11, -8, -16, -5, 16, -12, -2, 4, -12, -9, 10, 11, -12, -1, -9, 2, 7, -5, -6, -29, -12, -23, + -13, -1, 3, -4, -2, -13, 11, 8, 2, 8, -8, -4, -3, -10, -1, 20, 6, 6, -8, -12, -4, -9, -22, -21, -11, -20, -27, -22, -18, -3, + -23, -29, -32, -20, -11, -16, -8, -10, 0, -9, 12, -1, -4, 5, -8, -4, 6, 7, 13, 5, -8, 31, 13, 21, 25, 19, 2, -14, -30, -20, + -16, -6, -22, -21, -13, -19, -34, -59, -50, -49, -30, -37, 1, -14, -2, -8, -12, -19, -1, -13, 15, 26, 37, 42, 30, 65, 29, 59, 50, 58, + 64, 68, 75, 62, 60, 37, 45, 20, 18, -10, 4, -6, -29, -54, -53, -58, -63, -68, -51, -33, -12, -17, -19, -23, -17, -24, -28, -27, -21, -17, + -27, -28, -25, -19, -15, -8, -7, -3, -3, -3, -14, -20, -23, -17, -2, -3, 2, 1, -7, -8, -3, -8, -11, 0, -6, -4, -2, -4, -9, 6, + 2, 4, 2, -10, -13, -12, -1, 0, 1, 6, 6, 6, 5, -2, -3, -8, -10, -6, -5, -14, 6, 10, 7, -9, 3, 5, -2, -14, -3, 6, + 11, 25, 13, -7, -16, -14, -27, -42, -25, -46, 7, -31, -9, -16, -3, -6, -14, -22, -21, -3, -13, 7, 8, 9, 1, 4, 5, 9, 16, 3, + -6, 2, 8, 18, 16, 11, 19, -5, -22, -42, -72, -70, -67, -80, -77, -97, -78, -90, -106, -127, 42, 57, 60, 0, -12, 32, 39, 20, 39, 0, + 10, -27, -11, -11, 17, 6, -1, 6, 13, 17, 5, 0, 8, 5, -10, -18, -18, 2, 13, 8, 3, 6, 24, 2, -5, 8, -4, 2, 9, 31, + 0, 9, -13, -13, -18, -10, -20, -8, -20, -6, -12, 8, 0, -12, -12, 4, 5, 19, -16, 1, 12, -12, -1, -7, -23, -39, -37, -14, 8, 18, + 28, 15, 9, -4, 0, 0, -16, -6, -14, -38, -37, -22, -24, -20, -33, -24, -8, -6, -18, -31, -28, -29, -33, -21, -19, -16, -27, -43, -48, -47, + -30, -39, -32, -52, -39, -37, -40, -29, -24, -9, -9, -19, -1, 2, -9, -16, 4, 12, 18, 29, 16, 16, 7, 11, 5, -6, -8, -1, -15, -11, + 12, 16, -3, -20, -23, -26, -28, -23, -25, -9, 14, 6, -7, -15, -19, -11, 1, 11, -20, -31, -17, -13, -2, -3, -12, 7, 2, -10, 4, 20, + 26, 36, 42, 63, 66, 77, 71, 44, 62, 30, 50, 47, 24, -1, 22, 30, 10, 3, -13, -31, -54, -65, -49, -41, -39, -32, -37, -28, -22, -16, + -20, -18, -14, -16, -12, -22, -17, -23, -17, -9, 0, -4, -1, 0, 1, 10, 4, 1, 4, 3, -2, 2, -3, -10, -18, -14, -4, -16, -25, -11, + -1, -1, 7, 12, 17, 24, 22, 29, 18, 20, 28, 32, 19, 33, 23, 14, 17, 11, 8, 14, 1, -14, -11, -19, -18, -11, -29, -25, -20, -21, + -6, 9, 0, -2, -6, -13, -18, -17, -21, -15, -2, 1, -16, -18, -44, -31, -37, -29, -45, -37, -41, -45, -42, -35, -28, -36, -21, -18, 7, 12, + 22, 36, 43, 63, 65, 48, 39, 29, 23, 35, 38, 40, 31, 25, 11, -2, -22, -31, -42, -66, -76, -74, -60, -56, -62, 52, 34, 50, -99, -82, + -14, 43, 41, 31, -9, 19, -9, -19, 6, -12, 13, -13, -12, -17, 13, 10, 1, 3, 15, -7, -26, -16, 4, -10, 10, 8, 0, 2, -7, 9, + 10, 14, -5, 33, 17, 5, 22, -19, -9, -5, -6, 10, -20, 3, -1, -10, 13, -3, -9, -8, 6, 5, 22, 2, 10, 21, 7, 14, 14, -59, + -8, -6, 1, 0, 0, -4, -3, -2, 0, -3, 0, 2, -4, 0, 0, 1, -4, -1, -5, -7, -2, -3, -1, 0, 1, 1, -1, -2, -3, -1, + 3, 0, 1, -4, -5, -3, -1, -2, 1, 7, 4, 2, 0, 0, -1, -1, 0, 4, 5, 0, -2, 0, -2, 0, -8, -3, 6, -3, 0, 5, + 5, -3, 5, 1, -1, 1, -1, -4, 3, -1, 4, 6, -1, 0, -1, 2, -1, -3, -1, -2, 4, -4, 5, -4, 8, 5, -3, -3, -3, -3, + 0, -5, 3, 4, 0, -1, -2, 1, -1, 0, -2, -3, 0, 0, 0, 1, -3, -8, -1, 3, 6, 2, -4, 1, -5, -4, -4, -3, 5, -5, + -1, 1, -1, 2, 3, -3, -2, 0, 1, -1, -2, 3, -1, -1, 5, 3, 3, 2, 4, 1, 2, 1, 5, -2, -1, -3, -2, 0, -1, -2, + -2, 1, -2, -1, -4, -3, 1, -4, -7, 0, 1, 0, -1, 3, 1, 2, 5, 5, 7, 6, 3, -3, -1, -4, -2, 0, -1, 0, -3, 1, + -6, 0, 0, 0, -2, -2, -6, -2, -1, 5, 3, 6, 3, 2, -1, -1, 2, -3, 1, -1, 1, 1, -2, -2, 2, 4, 1, -1, 0, 5, + 3, 2, 5, 2, -6, -4, 0, -5, -6, 0, -1, -5, -3, -7, -5, -1, 3, 6, 7, 6, 5, -2, -1, 0, 1, -1, 3, 0, -3, 16, + -2, 13, -8, 4, -9, -5, -1, 6, 7, 7, 4, -3, -4, 1, -6, -1, -6, -4, -1, 0, -1, -4, 3, 5, 5, -2, -3, 0, 1, -3, + 0, 3, -4, -5, 1, 5, 1, 5, 4, 2, 3, 0, -4, -2, 0, 0, -6, 1, -3, -2, 0, -4, -3, 3, -6, -1, 2, 3, 6, 1, + 7, 1, -5, 3, -13, 3, 1, 0, -2, 2, 3, 6, 2, 3, 1, 2, 5, 2, 1, 3, -2, 0, 0, 1, 0, 4, 2, 1, -2, -1, + -1, -1, -4, 0, 1, 5, 3, -2, 3, -2, 1, -1, 0, 2, 2, -5, -5, -4, 0, 1, 2, 1, -1, -1, -2, -1, -3, -1, 3, -4, + -5, -1, -2, -8, -2, -3, 3, 1, -3, -3, 5, 5, 2, 2, -3, 1, 9, 4, 2, 5, -5, 0, -5, -3, -4, -7, 2, 3, -7, -1, + 3, 2, -1, 6, 2, 9, 0, 3, -2, 2, -3, 0, 1, -4, 3, 4, 1, 0, 0, 6, 3, 1, -1, 0, 4, 4, -4, -4, -6, -1, + -6, -1, 5, 1, -2, 3, 2, 2, 0, -1, 5, 4, 2, -2, -4, -4, -1, 0, 5, 4, 4, 0, -5, 0, -4, -3, 0, 0, -2, 1, + -1, -1, 2, 1, -2, 1, 0, 0, 2, 6, 5, 0, -3, 0, 2, 0, 1, 2, 1, -2, -5, -3, -4, 0, 3, 2, 2, 2, -2, -2, + 3, 4, 3, 3, 2, 1, 3, -4, -3, 1, -4, -2, -3, -2, 0, -5, -1, -10, -7, -1, -4, -1, -2, 2, -1, 2, 2, 4, -2, 0, + -1, -2, 0, 1, 2, 2, -2, -4, -3, 0, -6, 0, 0, 0, 2, -1, 1, 1, 3, 1, 1, -1, -1, 0, 1, 2, -4, -2, -2, 0, + -4, -3, -6, -8, 0, -3, 3, -4, 8, -6, 5, 2, -2, 9, -2, -2, -5, -6, -1, -5, -3, -2, 4, -1, 4, 5, 2, -6, 3, 0, + -9, -7, -7, -7, 5, -8, -6, -6, 5, 4, 3, 5, -7, -4, -2, -4, 2, -4, 3, 0, 1, -1, 5, 5, -1, -3, -1, -5, -7, -4, + -2, 3, -2, 3, -1, 9, 1, 3, -1, -7, -1, 4, -5, -6, -3, 0, 3, 1, 3, 0, 0, -1, 1, 1, -3, -3, -2, 0, -3, -1, + 4, 0, 3, 0, -3, 5, 2, 5, 4, 0, 4, -2, 3, 1, 5, -4, -2, 1, 0, 4, -1, -2, 4, 5, 2, -9, 1, 2, 3, -2, + 4, 1, -2, 2, -5, 4, -5, -2, -1, -3, -4, 1, 5, -1, -1, -3, 1, 1, 1, -7, 6, 3, -3, 2, -5, -5, -8, -7, -4, -1, + -4, -4, -1, -6, -1, -2, -3, -4, -2, 0, 4, -3, -1, -1, 0, 4, -8, 4, -3, -1, -2, -1, 2, 2, 7, 2, 3, -4, 2, -1, + -2, 3, -4, -6, -1, 1, -3, 5, 0, 5, 12, 8, 1, -4, -3, -1, 0, -2, 0, 2, 0, -1, -2, -1, 1, -2, 1, -3, -2, 4, + 2, 1, 4, 5, -1, 1, -3, 0, 1, -1, -3, -2, -2, -2, -2, 2, 2, 1, 5, 2, 3, 0, 3, 2, -2, 2, -4, -5, 0, -3, + -3, 1, 1, -5, 3, 2, 3, 2, -5, -1, 4, 1, 1, -2, 5, 5, 1, 1, -3, -3, 1, -2, 2, -2, -2, 3, 3, 3, 1, 0, + -2, -8, 1, 3, -5, 0, 0, 3, 3, 7, -1, -3, 1, -3, -5, 1, 0, 3, 2, 2, -2, -4, -1, -4, 2, -2, 0, 2, 1, 2, + 1, -1, 3, 0, 5, -1, 2, 6, 2, -3, 7, 1, 2, -4, -1, -1, -10, -2, 4, -3, -4, -9, -10, -2, 0, 9, 2, 5, 2, -1, + -5, -1, 0, 6, 1, -11, -5, -6, -3, 5, -4, 7, 5, 5, -7, -6, 4, -1, 7, 2, -2, 0, -5, -2, 2, 3, 3, 8, 3, 0, + -4, -10, 2, 0, -2, -8, -2, 3, 4, 2, 1, -2, 3, 11, -7, -1, -2, 3, 1, 3, 1, -2, -3, 0, -5, -4, 4, 0, -3, -2, + -6, -8, -7, -6, 4, 3, 0, -2, -7, 1, 2, -4, 5, -1, 3, 10, 4, -4, -3, 1, 5, -2, 0, 5, -2, -7, -6, 3, 5, -3, + -3, 3, 2, -2, 3, -2, -3, -4, 1, -10, -5, -6, -4, -1, 5, 0, 2, 1, -4, 5, 10, 5, 3, -3, 0, 4, -7, 4, 2, 4, + 6, 0, -1, -2, -3, -3, -6, -4, 4, -2, 3, -2, 5, 4, 2, 2, 0, -4, 3, 2, 1, 4, 3, -1, 2, -1, -7, -1, 5, -3, + -2, -4, -3, -8, 5, 0, 3, 1, -1, -3, 2, -2, 4, -2, 3, 3, 2, -1, 1, 1, 1, -2, -3, 2, 0, 4, 6, 5, 6, 5, + -1, 0, -1, 0, 1, 6, -2, -7, -4, 0, 2, 3, 1, -1, 3, 0, -2, 0, 1, -2, -1, -1, -4, 1, -1, -3, -3, -6, -3, 1, + -3, -1, -2, 0, -1, 0, 2, 5, 2, 1, 3, 4, 5, 3, 3, 0, 2, 1, -1, 1, 0, 3, 1, -3, -1, 2, -4, -1, 0, 1, + 2, 1, 2, 3, 0, -2, 1, -3, -4, -2, 1, -4, -2, -3, 2, 3, -4, -1, 0, -2, -5, 1, -3, 0, 1, 3, -1, 2, 1, 0, + 3, -6, 2, -1, -1, 0, 1, -4, 2, 8, 4, 1, 2, -4, -2, 4, 19, -1, -14, 2, -5, -3, 5, 2, 2, 3, -4, 3, 6, 0, + 9, 0, 10, -1, 5, 3, -2, -7, 8, 2, -5, -7, -2, -4, -2, 0, 4, -2, -4, 4, -1, 2, -4, -4, 5, 1, 1, -2, 3, 0, + 3, -1, 0, 3, 1, -5, 0, -5, -3, 5, -3, 1, 5, 0, 3, 1, -5, 1, 5, 1, -5, -4, -8, -4, -2, 0, 1, 2, 2, 0, + 5, -4, 1, 8, 4, -2, 0, -2, -4, 1, 3, -2, -8, -10, 0, 1, 6, 6, 7, 4, 2, -2, -7, 0, 4, 0, -5, -4, -3, 3, + 0, 1, 0, 0, -3, 2, -2, 0, -4, -8, -2, -4, -2, -1, -3, 0, -2, -6, -5, 2, -7, 2, 6, -1, -3, 4, 7, 1, 5, 4, + 2, -5, 2, 3, 4, -2, -1, -2, -5, 1, -5, -3, 1, -1, 10, 2, -1, -3, -1, -6, -1, -2, 9, 3, 4, 0, 0, -4, -8, -1, + 4, 2, 2, 1, 4, 2, 4, 0, 1, -2, 2, -8, -1, -4, 2, 2, 1, 5, 1, -8, 4, 0, -1, -1, -1, 1, 2, 1, 0, -5, + -5, -4, 3, 0, 1, 4, 3, 4, 2, 4, -2, -4, -2, -5, -2, -1, -1, -3, 0, -2, 0, -4, -2, 0, 2, 3, -1, -6, -1, -2, + 2, 1, 3, 5, 4, -1, -1, -5, 0, 0, -3, 3, 3, -5, 2, 3, 5, -4, -5, 0, 0, -1, 0, 0, 0, 4, 0, 0, 0, 4, + -2, 0, -1, 4, 4, 8, 2, 5, 6, -1, 3, 0, -5, -8, -5, -8, -2, 2, -1, 3, 4, 3, 3, -1, 0, 3, 6, 1, -2, 1, + 1, 1, -1, -4, 0, 1, -2, 1, -1, -3, 0, -7, -3, -3, 5, -2, 5, 0, 5, 4, -8, 30, -2, -24, -8, -12, -1, -3, 1, -11, + 2, 4, 5, -2, 1, 11, 4, -2, 6, 11, 1, -1, 0, 9, 11, 4, 3, 7, 0, 1, 1, 1, 3, -1, -3, 2, 4, 0, 1, 3, + 0, 11, -2, 0, 3, -2, 0, 0, 2, -7, -4, -7, 2, 3, 4, 3, -4, 3, 1, -2, 2, -3, -4, -1, 15, -14, -8, -10, -14, -7, + -5, -3, 1, -4, -7, -4, 2, 0, 5, 5, 3, 7, 8, -5, -7, -4, 1, 5, 7, 7, 4, -2, -5, -5, -9, -5, -2, 2, 3, -3, + -8, -6, -3, -3, -2, -4, -4, -1, -3, -1, -2, 2, 1, -8, -5, -10, -11, -5, -3, -7, -9, -7, -2, -1, -4, -9, -5, 0, -11, -14, + -7, 1, 10, 15, 13, 9, 2, -10, -7, -11, -13, -5, -3, -2, -2, -12, -11, -9, -14, -11, -5, -9, 2, 3, 8, 5, 12, 12, 1, 2, + 7, 5, 1, 4, 0, 5, 4, 8, 7, 2, 13, 4, 6, -2, 3, 7, 4, -3, 14, 11, 17, -10, -17, -17, -30, 8, 8, 6, 6, 6, + 7, 6, 3, 6, 0, 4, 2, 3, 6, 10, 13, 7, 11, 7, 5, 3, 4, 3, -1, 3, 5, 4, 7, 3, 3, 0, 2, -2, 3, 1, + 3, 2, -2, -1, -2, -3, -5, -1, -4, -3, 2, 1, 3, 9, 7, 6, 6, 3, 5, 2, 1, -1, 0, -2, -1, 3, -2, 3, 2, -1, + 3, 4, 1, 0, -6, -15, -24, -34, -36, -33, -33, -30, -20, -14, -11, -13, -15, -16, -14, -6, -8, -5, 6, 10, 10, 12, 17, 18, 28, 22, + 23, 23, 14, 19, 16, 12, 12, 18, 19, 24, 31, 30, 35, 31, 32, 29, 22, 17, 10, 2, -16, -34, -64, -87, -107, -35, 127, -11, -59, 36, + -3, 15, -43, 19, -43, 3, -10, 17, -12, -18, -20, 6, 8, -6, 2, 5, 4, -3, 4, 5, -2, 5, 8, -4, -5, -10, -4, -6, -2, -1, + -7, 1, 4, 3, 6, 0, 1, -10, -4, 0, -4, -4, -6, -2, 0, 5, 1, 3, 6, -1, 0, 2, 2, 3, 8, 2, -5, 2, 1, 27, + -8, 2, -1, 0, -2, 6, 3, -1, -6, 2, 3, 0, -2, 1, 2, 3, 6, 5, 5, 2, 0, 1, 5, -8, -4, 3, -5, 0, -2, -4, + 0, -2, 1, 4, 1, -5, -4, 3, 3, 2, 0, -9, -2, -2, 10, -9, -5, -9, 2, -3, -2, 4, 1, -4, 0, 10, 3, -1, -2, -1, + -5, 0, 2, 2, 7, -1, -8, 3, 0, -3, 12, 3, 3, 12, -1, 3, 2, 4, -6, 6, -6, -10, -8, -8, -2, -2, -5, 0, -2, 7, + 3, -4, -3, 1, 4, -5, 1, -2, -4, -9, 0, 3, -2, -4, -5, 2, -3, 0, 1, 9, 7, 5, -2, 3, 2, 6, 6, -1, -2, -10, + -2, 1, 0, 3, 0, -2, 2, -4, -1, -1, -7, -7, -4, 0, 4, 8, 5, 5, 4, -1, -4, -5, -7, -6, -4, -2, -2, -3, -4, -2, + 0, 4, 3, 5, 3, 3, 1, -2, -2, -5, 1, 2, -4, 4, 0, 0, 0, 1, -3, -1, 6, 6, -2, -2, 2, 2, 3, 2, 5, 0, + -2, 2, 2, -1, 3, 0, -4, -1, -1, 3, -1, 2, -5, 0, 3, -2, 5, 6, 7, -2, -7, -7, 0, -3, -6, 1, 3, -5, -8, -3, + 1, -2, 3, 2, 2, 5, 4, -4, -4, -3, -2, -2, -1, 3, 0, -3, 4, 3, 4, 10, 2, -1, -4, -9, 1, 1, -1, -6, -2, 18, + 16, 3, 3, 3, 7, -7, -8, -7, 11, 10, 0, 7, -4, -5, 7, -4, -8, -1, -8, 3, 0, 16, 3, -2, -4, 4, -4, 1, 1, -3, + -8, 3, 6, 6, -1, -2, 1, 1, 3, 2, 5, -6, -9, -1, -7, -8, 5, 8, 6, -8, 3, -5, -8, -5, -5, 3, 0, -1, 7, 2, + -4, 3, -8, 0, -15, 7, 4, 0, 0, -4, 1, -1, -7, 3, 0, 7, 12, 4, -6, 0, 4, -1, 4, 5, 7, 3, 2, 4, -1, 3, + 1, 0, 0, 0, 5, 2, -5, 1, -2, -1, 2, -6, -3, 3, -2, -8, -5, -5, -5, -6, -4, 3, -1, -6, -4, 2, -4, -2, 0, 0, + 3, 8, 2, -5, -1, 2, 0, 0, -5, 0, -2, -1, -3, 1, -7, -6, 7, 5, 0, 1, -3, -6, 4, 1, 5, 9, 7, -1, 1, -9, + -11, 2, 2, 5, -2, -5, -7, -2, 0, -2, -10, 1, -5, 0, -2, 10, 6, 7, -1, 9, 3, 1, 1, -4, -2, 8, 7, 5, -5, -5, + 2, 6, 6, -1, -9, -1, -2, -2, 3, -2, -3, 1, 1, -1, 0, -1, 4, 1, -3, -4, -6, 1, 5, 5, 2, 1, -1, 1, 5, 6, + 2, -6, -9, 0, 2, 3, 3, 0, 1, 2, 7, 2, 4, -1, -2, -5, -2, -1, -2, 4, -3, 6, 7, 6, 4, 3, 2, 1, -4, -4, + 2, 0, -4, -3, -2, 3, 1, 0, 1, -4, 3, -4, -2, -4, -2, -1, 3, -5, -2, -3, 5, -2, 9, 5, 1, 1, 2, 6, 0, -1, + -1, 2, -5, -3, 0, 6, 1, -5, -4, -4, -7, -3, 7, 2, -3, -1, -5, 3, -1, -1, 1, 0, -3, 1, 1, -2, 1, -1, 3, -2, + -3, -8, -4, -9, 9, 2, -2, 9, 19, 0, -1, 0, -7, 4, 3, -3, 15, -1, -8, -1, -3, -2, 3, 1, 4, -2, 1, -2, -4, 0, + 1, -3, -8, -2, -4, -1, -6, -4, -2, 0, 1, -1, 3, 4, 1, 1, 9, 1, 2, 0, -1, 8, 11, -6, -8, 6, -4, -3, -7, 5, + -1, -6, -3, 9, 3, -7, 1, 1, 1, -12, 1, -6, 9, 1, 1, -2, 0, 2, 1, 0, -9, 3, -6, 1, 3, 11, -3, 1, 3, -1, + -8, -1, -4, -4, 2, 3, 3, -1, 4, 7, 5, 2, 1, 6, -2, 5, -7, 0, 4, -5, -3, 2, -1, 2, -4, 0, -10, -1, 1, 0, + 5, 1, 0, 6, -2, -5, -3, 1, -1, 1, 12, 3, -9, 0, 6, -8, -1, 1, 2, 0, 2, 5, -5, -2, 3, -7, -1, -6, 4, -6, + -3, -4, -6, 7, -6, 7, -4, 4, 2, 8, 8, -3, -6, 4, -2, -3, 3, 3, 2, 2, 1, -4, -1, -3, -8, 0, -2, 1, -6, 0, + -1, -9, -5, 3, 11, 4, 3, 8, -6, -12, -1, 0, -1, 6, 2, -3, -2, -1, -3, 1, 1, 1, 0, -2, -1, -2, -1, 1, 1, 2, + 0, 0, 4, 1, -1, 1, 1, 1, 2, -2, -4, -3, -2, -3, 2, 1, -5, -3, 0, 3, 2, 8, 2, 3, -2, 0, -3, -5, -4, 0, + -3, -5, -8, -1, -4, -4, -2, -1, 2, -3, 2, -6, -3, -2, 7, 7, 5, 2, 3, -3, 3, 2, -4, 5, -2, -5, 1, 2, 8, 9, + 5, 0, -1, -2, -6, -2, -3, 1, 0, 3, 6, 0, 5, -3, 2, 1, 8, 4, 8, 1, 4, 6, 6, -8, -7, -3, -6, -1, -4, 0, + 7, 8, 1, 4, -5, -5, -1, 4, 1, -3, 3, 5, 10, 11, 0, -4, 10, -12, -3, 5, -14, 0, -5, 2, 7, 3, -3, -10, 8, 3, + -2, 1, -2, -7, 8, 6, -6, -6, -3, 4, 7, -2, 5, 9, 2, 4, -5, 0, -3, 1, 0, -1, 2, -2, -3, 6, 2, 6, 1, -7, + 6, 2, 5, 0, -1, 0, -2, 6, -1, 7, -3, -5, -1, -7, -9, 6, 8, 5, 7, 5, 3, -13, -6, 5, 7, -6, 0, -5, -2, -4, + -4, -5, -4, 3, -1, -5, 0, 4, 3, -4, -5, 3, -6, -3, -6, 3, 9, 2, 2, 5, 5, -2, -5, -9, -3, 1, 0, -1, -5, -7, + 1, -1, -1, 5, 1, 1, -14, -5, -3, 1, 2, -3, 11, -4, 0, 5, 4, -3, 3, 0, -1, -5, -5, 0, 0, -11, -4, -4, 0, -2, + -7, 10, -1, -3, -9, 1, 2, 2, 2, -1, 11, -1, 5, 7, -1, 12, -6, 1, 2, 7, -3, -11, 6, 3, 4, 4, 0, 9, -4, -5, + -6, 2, -5, 1, 9, 11, -5, -10, -4, -1, -4, -3, -9, -8, -6, 5, 1, 1, -4, -2, -1, -1, 2, 2, 2, 0, 1, 7, 3, 5, + 1, 0, -4, 2, 1, 1, -1, -7, -3, -2, 3, 8, 8, 0, -2, 4, 1, -1, -2, 1, 3, 6, -1, 4, -1, 3, 3, 5, -3, -4, + -4, -2, -2, 2, 3, -2, 0, 5, 7, 0, -2, 1, 3, 2, 3, -2, -5, -4, -1, 1, -2, 0, 0, 0, -1, 0, 2, 5, 7, 5, + 1, -2, -8, 0, -1, 2, 0, 0, -2, -1, -4, -5, -6, -4, -1, 3, 7, 3, 2, -5, -4, -7, -8, 10, 10, 2, 8, 3, 3, 4, + -1, -3, -4, -2, 0, -3, 3, -4, -3, -5, -1, 12, 2, 4, -6, -3, -12, 11, 9, -8, -15, 3, -19, 0, -1, -8, -9, -6, 0, -4, + 0, 7, -1, -1, -8, 7, 1, 3, -7, -2, 2, -10, -4, 4, -2, 8, -1, 9, 1, 3, 0, -5, -6, -1, -3, -7, 10, 1, -6, 1, + 0, 4, 1, 0, 5, 8, 3, -3, -2, 2, 3, -2, -2, 2, 10, 6, 1, 5, 0, 2, -6, 0, -5, -9, -11, -9, -11, -2, -1, -3, + -3, -1, -6, -4, -4, 0, -2, -1, -3, -5, 0, -2, 6, -6, -1, 2, -11, -7, -5, 8, 1, 7, 3, 4, 1, -10, -8, -4, 2, -2, + -8, -16, -9, -15, -4, -12, -4, -4, -5, -7, -3, -3, 0, 2, -8, -4, 0, 3, 1, 2, 10, 4, 9, 8, -1, 2, -2, 3, -2, 6, + 5, 1, -2, -1, 0, -12, -7, -5, -5, 4, -10, -7, 0, 4, -2, 8, 2, 11, 4, 8, 6, 6, 5, 13, 5, -4, -12, 2, -16, -6, + 5, 9, 7, 4, 5, 3, 5, 7, 11, 12, 11, 5, -1, 2, 6, 0, -5, -6, -9, -10, 4, 1, 2, -2, 2, 3, 2, 8, 3, 3, + 5, -5, -4, 1, 0, -1, -1, 2, 2, 5, 6, 3, 5, 3, 7, 7, 0, -1, -3, -5, 5, 5, 6, -2, -2, -3, 0, 0, 4, 7, + 0, -4, -7, -4, -5, 0, -1, 0, -3, -2, 0, 3, 2, 2, -4, -5, -5, -6, 1, 1, 0, 7, -2, 2, 4, 3, 7, 1, 5, 7, + 8, 0, -4, 1, 1, 7, 4, 8, 6, 5, 3, 0, 3, -4, -4, -6, -1, -2, -10, -11, 2, -1, 0, -2, 1, 1, -2, 1, -1, 1, + -7, -3, -3, 1, 2, 6, 0, 4, 16, 14, 5, 3, 8, 0, -4, 6, 0, 4, 1, 6, -25, -30, 28, 10, 0, -9, -1, -5, -8, -12, + 8, 4, -12, 10, 2, -10, 13, -6, -7, 0, 0, 12, 10, 12, 12, 12, -3, -2, -4, 1, -2, -3, 8, -3, -2, -14, -5, 0, -9, -8, + 6, 5, 5, 7, -1, -4, -6, 8, 17, 10, 12, 14, 3, -3, 5, 3, 8, 3, 7, 7, 0, 5, -5, -5, 40, -7, 12, 9, 1, -5, + -4, -4, 8, 6, 7, 15, 12, 8, -1, -5, -8, -18, -16, -12, -13, -2, 8, 12, 1, -10, -7, -12, -11, -6, -9, -4, -4, 0, -11, -15, + -18, -5, 1, 10, 9, 1, -14, -6, -13, 0, 9, 13, 14, -2, -14, -12, -16, -16, -7, -2, -3, 1, -3, -9, -11, -16, -21, -16, -14, -10, + -8, 0, 8, -3, -23, -24, -24, -25, -16, -19, -25, -31, -18, -16, -8, -4, 4, 22, 15, 5, 3, -15, -10, -24, -17, 1, 5, 3, 23, 7, + -11, -9, -25, -18, -15, -7, 0, 10, 7, 0, -19, -27, -32, -30, -26, -16, -15, -9, -5, -23, 0, -8, 18, 22, 0, -21, -10, -5, -5, 0, + -6, -2, -1, 3, 10, 7, 3, -3, 2, -1, 1, -3, -4, -3, -3, -6, 1, 3, 1, 3, 0, -2, -1, -2, -7, -10, -5, -6, -6, -1, + -3, 4, 7, 13, 11, 14, 10, 7, 13, 12, 10, 7, 6, 1, 1, 9, 13, 22, 33, 19, 10, 8, -7, -15, -25, -33, -27, -27, -21, -14, + 1, 11, 21, 22, 27, 26, 25, 13, 3, -6, -26, -37, -29, -32, -31, -14, 2, 27, 33, 33, 25, 14, 9, 0, -5, 2, -4, -10, -5, 3, + 2, 15, 32, 52, 65, 68, 51, 19, -22, -64, -114, -127, -119, -81, -32, 5, 6, 18, 9, 13, 14, 14, 17, 2, -26, -75, -73, -16, -82, 35, + 18, -86, 84, -18, 2, 29, -15, 26, -48, -9, 75, -41, -18, -4, 17, 18, -20, -4, 14, 7, -7, -3, 1, -2, -1, 7, -10, -16, 1, 3, + -16, -17, -5, 1, 1, 10, 2, 4, -3, -6, -9, -6, 1, 8, -2, -1, 7, -3, 3, -7, -7, 2, -6, 1, 1, -4, -3, 1, 4, 73, + 14, -1, 2, 2, -3, 9, 13, 9, 1, -6, -9, -5, 10, 10, -1, 4, 3, -4, 3, 8, 2, -6, 3, 14, 10, 8, 7, 3, -3, 1, + -4, -8, -1, 5, 7, 1, -5, -10, -5, 4, -4, -6, -2, -2, -3, -1, -3, -2, -3, -13, -7, 5, -4, -8, -7, -18, -16, -9, -2, -6, + -6, -3, -4, -9, -5, 1, -9, -4, 8, 13, 12, 16, 10, 8, 6, 0, -4, 4, 0, 5, 6, 3, 3, 1, 10, 10, 4, 4, 0, -4, + 6, -4, -5, 9, 8, 5, 11, 7, -2, 0, -14, -7, -7, -7, -2, 6, 5, 5, 12, -15, -18, -3, -7, -6, 5, -2, 1, 14, 12, -3, + 11, 6, -1, 4, 3, 0, 1, 0, 0, 4, 2, -2, 0, -2, -6, -6, -2, 6, 7, 3, -2, -5, 2, -1, -2, 5, 3, -1, 3, -2, + -3, -11, 0, 6, 6, 6, 8, 7, 14, 10, 0, 1, 4, -4, -9, -2, -3, -2, -13, -16, -10, -2, -2, -2, -4, -4, -8, -8, -8, -12, + -5, -5, 0, 0, -2, 3, -5, 1, -5, -6, -4, 5, 5, 4, -2, 3, 4, 3, 3, 6, -5, -4, -3, -7, -1, -2, -2, 5, -3, 5, + 4, -1, -5, -2, 0, 2, 9, 12, 0, -1, -3, -7, -13, -8, -4, -6, -7, -15, -7, -9, -5, -3, -1, -4, 11, -2, 9, 18, 15, -41, + 15, -52, 37, 2, -48, 19, -8, -31, 3, -3, -6, 7, 9, 5, -2, 4, -1, -7, -9, -3, 2, -1, -8, -5, -13, -1, 0, -2, 6, 2, + -1, 7, 9, 8, 2, -10, -12, 3, -7, -6, -15, 0, 7, 15, 15, 12, 13, 10, 12, 14, -5, -1, -5, -11, 1, -7, -8, -6, -8, -7, + 4, -3, 0, -2, 19, 1, -7, -4, -12, 1, -5, -2, -4, -10, -11, -13, -6, -4, -10, -1, -1, 10, 11, 8, 11, 0, 7, -1, 11, 20, + 8, 3, -5, 1, 6, 2, -6, -12, -5, 0, 13, 5, -6, 0, 3, 8, -3, 6, 6, 7, 4, -3, -14, -14, -19, -13, -10, -12, -10, -7, + -10, -2, 0, -16, -11, 1, 8, 3, 0, 0, -1, 5, 0, 8, 10, 9, -2, -1, -2, -10, -3, -12, -6, -17, -14, -5, 0, -5, -6, -4, + 3, 14, 8, 8, 7, 1, 5, -5, 7, -8, -3, 3, -13, 7, -9, -13, -4, -16, 3, 0, 4, 10, 10, 5, 3, -3, 8, 3, 0, -3, + 3, 10, 16, -4, -1, -5, -7, -1, -3, -4, -4, 1, 2, 2, -4, -1, 6, 6, 7, -2, -1, -3, 0, 2, 0, -1, 2, -1, 1, 1, + -3, -11, -9, -2, 4, -4, 1, -1, 0, 2, 3, 10, 13, 7, 6, -1, -2, -3, 0, -3, -4, -9, -5, -6, -9, 3, -3, 3, 4, 4, + 2, 11, 2, -2, -1, -3, 7, 1, -9, -6, 0, -1, -4, -2, -3, 3, 5, 2, -2, 6, -2, 6, 4, 6, 6, 2, 12, -3, -9, 2, + 4, 5, 7, 1, -1, -8, -11, -16, -7, -16, -8, -6, -4, -5, -8, 7, 3, -8, -3, 1, -6, -4, 1, 3, -2, 2, 9, 3, 4, 1, + -5, 2, 10, 8, -22, 23, -22, 32, -12, -33, 26, 0, -14, 21, 8, 16, 18, 20, 1, 1, 5, -9, -17, -2, -3, -4, -8, 3, 4, -3, + 4, 11, 1, 1, -14, -10, -4, 5, 0, 8, -4, -6, -2, -8, -1, -6, -4, 2, 12, 17, 16, 10, 2, 5, 4, 10, 4, 0, -1, -4, + -10, -7, -6, -7, -4, -9, -11, 4, 6, 9, -6, -1, 5, 1, 8, 13, -6, 1, 15, 8, 0, 1, 11, 11, 4, -6, 1, 0, 6, 12, + 3, 7, 8, 12, 10, 2, 3, -6, 10, 5, 11, 0, -2, -6, 1, 2, -4, 2, 7, 3, -2, -4, 5, 10, -1, -7, -5, -10, -5, -12, + 4, 3, -3, 6, 4, -17, -23, -1, -1, -1, 10, -4, -1, 10, 4, -5, 0, -4, 7, 3, -1, 4, -7, -2, 2, -2, 4, -6, -5, 1, + 10, 3, -1, 7, 1, -3, -13, -6, 3, 8, 0, 3, -12, 0, -1, -1, 14, -4, 3, -5, -4, -14, 11, 9, -2, 9, 5, 11, 10, 7, + 2, 13, -4, 4, 1, -9, 6, 8, -2, 2, 3, 6, 4, 7, 7, 0, -1, 1, -4, -2, -1, -2, -1, 2, -3, -10, -7, -1, -6, -3, + -5, -4, -1, 4, 10, 4, 2, -2, 4, 3, 4, -4, 2, 1, 3, 4, 5, 9, -7, -8, 2, 0, 0, -3, -1, -15, -16, -6, -11, -3, + 3, 1, 3, 4, 4, 7, -3, -2, -2, 0, 0, 5, 2, 3, -8, -6, -3, 4, 3, 2, 2, 2, 0, -8, -8, -5, -6, -4, -2, -4, + 4, 2, 1, 1, 8, 7, 6, -2, 5, -2, -3, -1, -5, -1, -3, 6, -5, 0, 0, -5, 3, -1, -10, 3, -6, 1, 1, -1, 3, 3, + 1, 3, 0, 6, -3, 9, 8, -3, -5, -21, 26, -5, 19, -4, -39, 18, -5, -23, 18, 7, -13, -6, 7, 6, -9, 12, 0, -21, -8, 18, + 9, 1, -2, 18, -3, 1, 1, -4, -2, 4, 1, 0, 8, -6, -6, 0, -5, 2, -4, -17, -4, 0, 11, -1, 12, 15, 10, 4, 12, 6, + 2, 2, 18, -11, -9, -7, -17, -4, -3, -7, -5, 10, 2, 2, -1, 9, 13, 8, -8, -24, -16, -15, -6, -4, -6, -3, -8, 4, 2, 3, + -5, -4, -1, 2, 4, 13, 18, 3, -1, -6, -5, 2, -5, -3, -10, -6, 9, 6, -12, -7, -12, 1, 4, -5, 3, 5, 11, 9, 17, 23, + 10, 3, 1, 9, -6, 0, 2, 11, -4, 5, -2, -3, -6, 2, -9, -4, 10, 7, 21, 4, -5, 8, 11, 12, 9, 13, 5, 5, 3, 1, + 3, -10, 2, -13, -6, 5, -5, 1, -8, 3, -3, 3, -1, 9, 11, -2, -2, -1, 2, -11, -1, -3, 2, 4, -3, -6, -3, -2, 11, 0, + 13, -6, -7, 4, 0, -2, 5, 13, 1, 9, 3, 16, 5, 4, 10, -5, 0, 0, -1, -7, -4, 0, -4, 3, 3, 5, 8, 9, 11, 1, + -4, -1, 1, 5, 2, 5, 1, 2, -6, 0, -5, -5, -5, 0, 3, 5, 7, -5, -10, -3, -2, 3, 2, 1, -4, -1, 0, 9, 2, 3, + -1, -7, -4, -12, -9, 3, -2, -4, -1, -3, -1, -4, 5, 6, 3, 4, 12, 8, 8, 5, 0, 0, -1, -11, -7, -5, 1, 3, -4, -5, + 0, 0, 0, -5, -3, 0, -6, 4, -7, 4, 1, -1, -8, 7, 3, 0, 3, -2, 1, 2, -2, 7, 11, -1, -8, -10, -3, 5, 3, 4, + -3, -1, -1, 6, 0, -7, 10, 1, 1, -2, 4, 6, 1, -8, -22, 29, -7, 12, -3, -24, 32, 0, -35, 16, 12, -30, 10, 2, 7, 5, + 12, -3, 2, 9, 5, -3, 10, -3, 0, 1, -5, -2, -1, 14, 6, 12, 1, 4, 0, 3, -6, -2, -15, -4, -10, 8, -2, -7, 2, 12, + 5, 8, 4, 7, 14, 3, 6, 7, -7, 1, -15, -9, 6, 1, -2, 3, 4, -8, 5, -10, 17, 12, 10, 3, 3, 4, 1, 6, -5, 6, + -10, 10, 4, 7, 26, 25, 17, 13, 9, 11, 13, 14, 1, 15, 10, 2, 16, 17, 3, -2, 11, 10, 15, 7, 11, 7, 10, 10, 18, 17, + 19, 8, 10, 5, 1, -6, 1, 9, 13, 1, 3, 11, -2, -4, 1, -2, 10, 11, 2, 19, 37, 31, 30, 33, 22, 15, 26, 10, 12, 20, + -2, 7, 15, 7, 5, 20, 19, 16, 1, -6, 6, -6, -1, 0, -6, -6, -8, -18, -13, -11, -25, -18, -28, -20, -21, -9, -2, -16, -5, 2, + -4, -3, -12, -8, -3, 2, -9, 7, 18, -5, 2, -4, -3, -4, -6, -5, 2, 16, 11, 11, 4, 4, 2, -7, -5, 1, -3, 2, 5, 4, + 5, 3, 0, 1, 0, -7, 0, -1, -6, 1, 4, 4, 1, -1, -5, -3, 2, 1, -3, -8, -8, -3, 0, -2, -5, 1, -5, 1, 4, 1, + 11, 15, 9, 2, -10, -8, -7, 0, -2, -2, -3, -12, -6, -8, -13, -8, 2, 9, -1, 1, 13, 8, 3, 1, 7, 1, 1, -3, -10, -10, + 2, -5, 6, -5, -4, -5, 5, 1, -5, 5, 4, -1, -5, -4, 1, 6, 2, 0, -2, 1, 0, -1, -2, 3, -5, 3, -1, -3, -4, -8, + -7, -8, -5, 5, 6, -3, -1, 4, 1, 2, -1, -2, -6, -10, -3, -1, -7, 0, 1, -2, 82, -21, 7, -16, -8, 40, 0, -40, 29, 21, + -36, 12, -6, -2, 10, 9, 4, -3, 3, 7, 20, 10, -5, -9, -6, -14, -16, -8, -4, 0, 0, -2, 0, 0, -1, 3, -9, -3, 0, 7, + 4, -11, -9, 3, -7, -4, 4, 5, 1, 11, 12, 5, 18, 14, -4, -8, -11, 1, -8, -5, -6, 3, -1, 7, -43, 23, 13, 6, 3, -5, + -12, -1, 5, -11, -21, -13, 2, 15, 11, 17, 7, 4, 4, 19, 5, 7, -1, 0, 14, -2, 3, 9, -5, -2, 4, -1, -5, 4, -3, -1, + -7, 5, 15, 17, 21, 22, 19, 10, 10, 22, 9, 12, 5, 4, -5, -5, -8, 1, -4, -14, -11, -3, 20, 25, 23, 34, 34, 21, 21, 23, + 16, 13, 10, 13, -3, -9, 7, 12, 8, 6, 12, 4, 6, 3, 9, 8, 0, 6, 5, 5, -5, 1, -20, -12, 4, 1, -19, -8, -18, -15, + -21, -20, -12, -9, -7, -14, -5, 1, -5, 0, 4, 3, 0, 5, -2, 18, 7, 31, -3, -20, -7, 26, 32, -9, 1, 1, 3, -2, -1, -1, + -2, 2, 1, 2, 2, 0, -5, -7, -9, -11, -5, -13, -8, -11, -11, -5, -1, 6, 5, -4, -5, 3, -2, -7, -4, -3, 3, -1, 0, 4, + 4, 7, 10, 12, 17, 21, 18, 20, 18, 14, 10, 10, 14, -1, 2, 2, 0, -4, -9, -14, -6, -11, 4, 11, 8, 7, 1, -9, -10, -8, + -17, -19, -19, -26, -25, -28, -17, -15, -5, -7, -6, -12, -9, -11, -10, -4, -1, -2, -1, 7, 10, 19, 5, 8, 19, 23, 15, 15, 15, 25, + 23, 14, 10, 6, 6, 5, 9, 6, 5, 9, 8, 10, 12, 10, 8, 10, -6, -1, -8, -7, 2, -6, 0, 5, 11, 112, -123, 127, 105, -118, + -19, 19, -35, 25, 8, -43, 47, 7, -17, 27, 22, 0, -15, -12, 27, 21, 0, 4, -9, 3, -4, -7, 17, 11, 4, 15, 19, 13, 8, -9, + 0, -14, -4, -6, 0, 1, -11, -3, 14, 5, 11, 9, 19, 8, 6, 3, 9, -2, -8, 1, -13, -13, -4, -8, -5, -5, -11, -1, 1, -46, + 3, -3, -4, 0, 1, 4, 5, 4, 6, 5, -2, -4, 0, 2, 5, 7, -1, -3, 9, 11, -2, -4, -7, -10, -4, -1, -4, -10, -1, 0, + 5, 7, 16, 9, 3, 6, 3, -4, -9, -9, -5, -7, -5, -9, -2, 1, -6, 0, -1, 2, 0, 0, -4, -7, -1, 4, 0, -4, 4, -3, + 6, -4, -5, 2, 0, -1, -5, -2, 0, 0, -1, 6, -6, -6, -8, 5, 0, 8, 6, 7, 14, 3, 0, -4, -9, -4, 4, 9, -2, -2, + 4, 6, -8, 4, -7, -11, -3, 2, 4, -2, 10, 8, -1, 6, -9, -2, 1, -1, 1, 12, 3, 7, 12, 10, -11, -11, 3, -3, 5, 16, + -4, -6, -13, -11, -5, -1, -1, 3, 2, 9, 8, 7, 5, -4, -1, 1, -5, -6, -4, -6, -1, 0, 2, 0, -3, -5, 2, 2, -1, -4, + 6, -1, 6, 10, 1, 0, 0, 4, 0, -6, -9, -4, -2, 3, 1, 6, 7, 8, 8, 1, -2, -3, -6, -6, 1, -1, 4, -4, -3, 1, + -1, -3, 0, 9, 3, 6, 1, -3, -5, -1, 2, 5, -5, -9, -10, -9, 3, 3, -3, -14, -6, -10, -5, -18, -13, -3, 1, 2, 1, -1, + 1, 8, 4, -6, -8, -5, -6, 2, 4, 7, 9, 0, 3, 7, 2, 3, -5, -4, 0, 7, 9, 14, 8, 5, -11, 0, -3, 4, 24, -10, + 59, 11, -3, 22, 39, 15, 30, 21, 4, 16, 11, 0, -18, 1, -9, -20, 1, -4, 7, 2, 6, -11, -10, -3, -16, 0, 1, -6, -15, -13, + -10, -4, 8, -3, -8, -16, -3, -11, -6, 12, 9, -8, 3, -1, -4, -1, 7, 8, 7, 6, -9, -4, -17, -11, -17, -12, -28, -18, 2, -3, + -3, -7, 9, 2, 126, -1, -4, -7, -7, -8, -2, 4, 7, 8, -6, -16, -14, -8, -1, 1, 6, 6, -6, -3, -2, -2, -14, -18, -11, -7, + -1, 9, 0, -1, 1, 4, 12, 8, 3, 4, 3, 5, -3, -5, 2, -3, -4, 0, -6, 1, 0, 0, -2, 6, 1, -2, 7, 6, 14, 8, + 2, -4, -4, 9, 8, 7, -3, 1, -1, -3, -5, -5, -7, -1, 2, 10, 11, -3, -6, -6, 1, 2, 10, 6, -2, 5, -8, -12, -9, -5, + -3, 4, 10, 5, -6, -12, -6, -5, -4, -10, -12, -13, 2, 4, -7, -4, -3, -3, 5, -3, -9, -14, -12, -1, -3, -8, 6, 15, 6, -6, + -6, 5, 4, 1, 11, -11, -12, -4, -4, -4, 3, 5, 7, 6, 5, 3, 2, 2, -1, -7, -3, 1, 0, 1, -2, 6, 2, -1, 0, 4, + -4, 1, 7, 3, 3, 4, 8, 4, 8, 4, 1, 2, 4, -6, -3, -1, -9, -8, 2, 1, -1, -1, -2, -2, 3, 8, 1, 3, 7, -1, + -2, 1, -1, -3, -3, -2, -1, 5, 2, 6, 4, 5, -2, 9, 10, 13, 14, 3, -2, -3, 4, 4, 4, -3, 1, 0, -6, -12, -13, -5, + 0, 6, 10, 12, -2, 6, 8, -1, -1, -5, -24, -12, -1, -3, -14, 1, 0, -5, 7, -2, -3, -6, -1, 7, 2, 16, 10, 5, -15, -24, + -24, -15, -5, 7, 0, 48, 15, -4, 22, 26, 2, 23, 23, 7, 2, 3, -1, 9, 6, 6, -24, -16, 3, 6, 8, 13, -8, -2, 8, -9, + -1, 0, -10, -17, -5, -17, -3, 16, 11, 7, -6, -2, -8, 0, -7, 5, 10, -5, 0, -7, 0, 0, -6, 1, -2, -4, -5, -9, -13, -1, + -1, -22, -20, -5, 3, -3, -11, 5, 2, 123, 3, -2, -6, -10, 4, -7, 0, 0, -2, -8, -7, -1, 0, -6, 3, 7, 0, 1, 3, -2, + 0, -9, -6, 5, -6, -3, 2, -4, 5, 4, 6, 8, 6, 7, 11, 7, 0, 6, 1, 2, 2, 5, 1, -6, 2, 6, 2, 3, 1, -2, + 2, -4, 2, 3, 3, 4, 9, 8, 1, -3, 2, -3, 4, 6, 1, -2, 0, -3, 5, 3, 2, 4, 1, -5, 2, -2, 8, 3, 3, -7, + -4, -8, -1, -5, -9, -13, -2, 7, 4, -2, 3, -7, -7, -9, -17, -11, -15, -6, -8, -13, -6, -12, -8, -7, -1, -1, -5, -4, 9, 16, + -1, 13, 12, 8, 0, -2, 2, -16, -13, 10, 4, 2, 5, 3, -4, 5, 6, 3, 6, 4, 5, 8, 5, 8, 8, 6, -4, -8, -6, -3, + -6, -6, -3, 0, 0, 0, 5, 2, -1, 5, 6, 0, 0, -1, 2, -2, -7, -11, -3, -3, -3, 2, -3, -5, 5, 6, 0, -3, -6, -3, + 6, -2, 1, 14, 18, 19, 7, 3, -1, -9, -7, -6, -1, 1, -2, 0, -1, -7, 2, 12, 5, 12, -1, 1, 10, 3, -5, 0, 2, 4, + 7, 0, -5, -4, 0, -1, -7, -8, -6, -6, -10, -4, -4, -7, -7, -9, 0, 5, -7, -9, -1, 5, 4, 9, 12, 6, 9, 0, 1, 1, + 0, -2, 0, -11, -7, -7, 3, 4, 13, -7, 51, 33, 30, 27, 19, 18, 34, 21, 13, -2, -5, 10, -6, -6, -7, -17, -10, 3, 11, 11, + 6, -7, 9, 10, -1, 3, 2, 0, -9, -10, -1, 6, 0, 12, 1, -2, 3, -5, 7, 4, 5, 8, 7, 15, -7, -2, 15, -1, 2, 10, + -5, -7, -11, -15, -2, -12, 3, -8, -13, -5, 6, -10, -8, -4, 101, 4, 4, 4, 6, 1, -2, 1, -4, -9, 5, 0, 1, 4, 10, -4, + -4, -7, -8, 1, 3, -6, 0, -6, 0, 4, -8, -10, -2, 3, 9, -5, -4, -2, 2, 4, 9, 4, 8, 6, -6, 1, 2, 0, -5, 0, + -3, 2, 6, 10, 12, 7, 7, 5, 2, 12, 15, 1, -1, 12, -2, -7, -8, -11, 5, -2, -8, 5, 7, 3, 8, 1, -1, -7, -7, -7, + -11, -3, -4, -5, -9, -15, -11, -6, 6, 3, -1, 8, 15, 0, -4, -6, 9, 3, 4, -6, -3, 1, -2, -5, 12, 9, 5, -2, -1, 1, + -5, -9, -6, 2, 2, -7, -6, -4, -9, -12, -6, 1, 2, -1, 6, -2, -4, -4, 0, 3, 6, 10, 7, 6, 3, 5, 2, 2, 2, 8, + 6, 7, 5, 3, -2, -1, 1, -2, -5, 0, -3, -9, -10, -10, -9, -7, -5, -5, -1, 3, 6, 5, 0, -3, -2, -2, -2, -6, -7, -2, + 2, -7, -10, -5, 5, 11, -3, -3, 7, 2, 4, -1, 2, -4, -6, -8, -6, 1, 6, 2, 5, -6, 1, 1, 4, 0, 8, 8, 2, -1, + 4, -3, -10, -4, -4, -2, 2, -11, 0, 9, 6, 17, 13, 6, -5, -4, -3, -8, 6, -2, -3, -4, -9, -2, 2, 2, 5, 10, 10, 13, + -8, -1, -4, -4, -2, -4, 3, 1, 0, -1, -9, -15, 3, 15, -21, 74, 38, 54, 28, 29, 47, 42, 43, 32, 15, 27, 24, 2, 9, -7, + -4, 0, 4, 10, 12, 2, -17, -13, -1, 24, 17, 8, 2, 0, -4, -16, 2, 4, 11, 15, 0, 6, 1, -1, -12, 4, -6, 12, 3, -15, + -8, 12, 1, -10, -13, -14, -2, -25, -22, -15, -15, -12, -14, -6, -4, -6, 1, -19, -8, 55, -8, -1, 2, -2, -6, -4, -6, 3, 11, 14, + 11, 3, 1, 4, 4, 23, 13, 18, 13, -4, -5, 4, -2, 8, -3, -4, -4, 4, 3, 5, -5, 6, -1, -2, -2, -2, -1, -11, -15, -13, + -5, 2, 5, 0, 9, 0, 1, 12, 8, 6, 0, 4, 3, 9, 7, -1, -2, 1, -7, -13, -7, -9, -2, 7, 1, -5, -3, 1, -2, -6, + -1, 4, 4, 4, 2, -6, 8, 14, 7, 3, 6, 6, 7, 5, 5, 16, 18, 24, 3, 10, -2, 5, 0, -15, -20, -7, -17, -6, -2, 13, + 4, 13, 11, 9, -7, -13, -23, -17, -13, -18, -16, -7, -23, -16, -16, -8, 13, -1, 1, 10, -4, -2, -5, 5, 0, 12, 13, 12, 16, 10, + 5, 2, -4, 2, -7, -5, -6, -9, -10, -6, -4, 4, 7, 4, -9, -2, -7, -5, -5, -9, -10, -5, 2, -1, 6, 8, 8, 6, 0, 0, + 1, -5, -13, -8, -10, -3, -5, 3, -1, -2, -3, -7, -4, -4, -2, -6, -10, -16, -5, -6, -6, 2, 1, 2, 8, -6, 7, -1, 1, -1, + -9, -11, -7, -10, -12, -6, -9, 3, -9, -2, 0, 16, 11, 4, 10, 7, 8, 3, -1, 7, 7, 6, 10, 8, 8, 8, 8, 2, 5, 7, + 15, 18, 14, 19, 7, 2, 0, 5, 11, 2, -1, 13, 10, 9, 6, 16, 5, 7, 2, 6, 127, 47, 53, 34, 35, 44, 46, 31, 29, 28, + 33, 32, 3, 5, -5, -5, -4, 11, 7, 14, 5, -2, -2, 6, 13, 15, 7, -7, 0, -15, -6, -13, -8, 3, 2, -9, -14, -10, 6, -10, + -7, 5, -13, -16, -20, -18, -9, 1, 0, -9, -6, -1, -5, 0, -4, -16, -4, -10, -1, 3, -8, 0, -7, 2, 6, 2, -11, -3, -19, -30, + -25, -25, -11, -1, 20, 23, 12, -6, -12, -10, -12, -10, 8, 4, -1, 3, 14, 0, -1, -9, -7, -6, -18, -17, -9, -7, -9, -14, -9, -9, + 9, 2, -4, 4, 0, 1, -22, -19, -7, -7, 6, 1, 9, 7, 1, 9, 1, 3, 0, 1, 2, 9, 10, 2, 5, -2, -5, -1, 17, 7, + 8, 12, 7, -6, -15, -16, -10, -8, -11, -5, -1, -6, -10, -6, -4, 6, 26, 14, 17, 7, 6, -5, -4, -4, 2, 1, 22, 7, 14, -11, + -2, -1, 0, 1, -2, 7, 12, 12, -13, 9, -8, -13, -13, -2, -15, -6, 6, 0, -9, -7, -5, 5, 2, 3, 14, 1, -1, -2, -1, -4, + 2, -4, 2, 2, 4, 10, 9, 6, 4, 0, 2, 3, -4, 2, -7, -8, 0, -3, -6, -4, 1, 0, 4, -12, -14, -10, -4, -8, 4, 3, + 6, 9, -2, -3, 0, -3, -2, -10, -12, -2, -4, 8, 9, 7, 2, 8, 0, -3, 4, 6, 12, 20, 15, 10, 9, 8, 7, 9, 9, 10, + -4, 3, 3, -3, -3, -6, -3, 3, 8, 16, 9, 10, -7, 3, 2, 5, -1, 8, 3, 4, -8, -1, -5, 7, 13, 16, 26, 21, 17, 4, + 10, -2, 8, 6, 10, 12, 13, 0, -18, -17, -23, -38, -42, -34, -26, -5, 10, 17, 13, 14, 13, 8, -11, -31, -61, 126, -26, -48, -33, -31, + 41, 23, 38, 39, 22, 20, 5, 3, -28, -2, -5, -18, 2, 18, 3, 3, -17, -12, 19, 10, -4, -10, -14, -17, -18, -14, -14, -16, -7, -13, + -11, -15, 2, 8, -11, 10, -2, 2, -9, -14, -4, -12, 17, 5, 9, -4, 5, 0, 19, 19, 2, 1, 6, 10, 6, 2, 3, 12, 4, 58, + 0, -2, -4, 4, 7, -7, -6, 8, -4, 0, 8, -1, -4, -10, -12, -8, -4, 5, 6, 13, 13, 0, -9, -14, 0, 0, 4, -2, 12, 11, + 5, 4, 4, 5, 8, 0, 5, -1, -13, -3, -11, -13, -12, -1, -5, 3, 6, -3, 8, -2, -7, -8, -2, -2, 1, 10, -7, 3, 4, -1, + -8, -8, -7, -6, 6, 11, 10, -2, -16, -4, -3, -6, 4, 3, -1, 5, -5, 9, 11, 8, 1, 1, 17, 8, 11, -6, -8, -8, 14, 27, + 19, 15, 18, 14, 0, -12, 14, -10, 8, -1, 4, -17, -10, 6, 2, 8, -6, 0, 11, 11, 6, 13, 6, -5, 4, 1, -8, -4, -25, -10, + -7, -10, 1, 2, 1, 0, 5, 0, 0, -13, 2, 8, 6, 0, -4, 6, 6, 11, 3, 12, 5, -1, 2, -4, -2, -9, -1, -7, 6, 13, + 5, -3, -1, -14, -10, -9, -11, -4, -18, -5, -4, 5, -6, -4, -5, 8, 7, 2, 12, 8, -6, 8, 3, 4, -1, -8, -8, -6, 6, 6, + -1, -9, 4, 3, 13, 18, 12, 7, 10, 0, 4, -10, -1, 0, 10, 9, 8, 0, -2, -1, -10, -3, 6, 4, 2, -9, -22, -19, -16, 1, + 0, -3, 6, -9, -5, -4, 3, -9, -3, -5, 10, 0, 8, 12, -1, 13, 8, 10, 13, 5, 7, 13, -2, -12, -13, -14, -25, -15, -7, 9, + 2, 20, 6, 30, 0, -7, 7, -4, -11, -8, -14, -12, -1, 7, -4, -5, -10, -8, -3, -15, -2, 10, 20, -17, 1, 10, -12, -6, -9, 7, + -5, 1, 1, -24, -16, -11, -20, 9, -7, -9, -14, 6, -9, 7, 11, 10, 13, 13, 1, -8, -6, -22, 5, -5, -12, -3, 19, -6, -3, -7, + 7, 4, -10, 1, -34, 16, 2, -15, 3, 9, -7, -4, -18, -11, -2, -2, 8, 10, 7, 3, 3, 5, 5, -5, -1, 4, -11, -3, -7, -11, + 1, 2, 11, 1, -9, 12, 14, 18, 8, 12, 13, 2, 2, -1, 8, -9, 7, 0, 7, 6, -3, -5, -12, -2, -1, 2, -12, -19, -12, -4, + 0, -7, 8, 10, -2, -8, -2, 4, -4, -5, -6, -2, -2, -10, -3, 1, 5, 20, 16, 1, 12, 16, -1, 5, -18, -6, -4, 5, 5, 13, + 6, 9, 16, 11, -1, 15, 4, 14, 4, 22, 18, -7, 20, 15, -4, 11, -25, -1, 3, -13, 1, 6, 6, 18, 15, 0, 1, -2, 3, -4, + -9, -17, -22, -37, -22, 4, 1, -1, -5, -5, -7, 1, -2, 2, 7, 3, 3, 1, -2, 3, 3, -6, -10, -1, 5, 7, 3, -10, -1, 4, + 5, -5, 4, -8, 2, -3, -4, 0, 9, -1, -7, 8, -2, -4, -9, 8, -1, -1, -7, 1, -10, -3, 9, 4, 10, 16, 9, 8, 9, -1, + 2, 0, 9, 14, -2, 7, -3, -18, -14, -10, -7, -6, 0, -3, -4, 3, -2, -13, -13, -18, 2, -1, 2, -9, 8, 7, 3, 6, 15, 4, + -4, -3, -7, -2, -9, -9, -6, 4, -8, -4, -1, 14, 1, 1, 3, -2, -18, 2, -6, -12, -8, 3, 2, 6, 16, 15, -10, 2, 6, -3, + -11, 1, 6, 9, 7, 17, 20, 0, 9, -27, 10, 6, 3, 0, 19, -9, -17, -5, -1, -2, -13, 1, 9, -10, -20, 5, 29, 10, -3, 4, + -5, -8, -22, 2, 7, 5, 2, 3, 7, 1, -7, 0, 11, -3, -10, -2, 7, 21, 2, 11, 18, -2, -2, 14, -2, -14, -6, 13, 2, -4, + 0, 3, -4, 8, 4, 13, 11, 0, 7, -17, -2, 2, 5, 7, 18, 7, 10, -12, -8, 11, 9, 12, -3, -9, -6, -22, -17, 11, 13, -5, + 12, 6, -14, -5, -14, -7, -14, -7, 4, -2, -5, 11, -2, 8, 6, 7, 12, -5, 0, 1, 5, -3, 10, 16, 21, 0, 2, 7, 1, -3, + -5, 9, -2, 6, 7, 3, 9, 6, 14, 11, 10, -27, -5, 20, -4, 4, 17, -8, 1, 9, 22, 14, 10, 0, -1, 3, 5, -2, -10, -7, + -18, 10, -8, 11, -1, 5, -20, -9, -15, -5, -17, 7, 7, 20, -5, -7, 1, 1, -1, -19, -4, -13, -24, 2, -1, 0, -3, -4, 14, 6, + 10, 5, -11, -2, -12, 5, 18, 19, 0, 1, -17, -13, -9, -12, -9, -10, -17, -17, -12, -14, -2, 5, 9, 11, 2, 11, 1, 5, 12, 19, + 9, -2, -10, 1, 7, 10, 7, 9, 11, 1, 0, 5, -4, 1, 7, 5, 3, 3, 6, 14, 3, 10, 7, 10, 19, 10, 8, -1, -12, -12, + 1, -14, -20, -18, -16, -16, -3, -2, -1, -2, -16, -27, -13, -18, -23, -9, -7, 4, 6, 6, -3, 0, -16, -1, 5, 3, 8, 3, -1, -12, + -20, -4, -11, -6, -10, 0, 0, -9, -3, 5, 7, 6, 4, -10, -3, -6, 2, -2, -4, -3, -5, -16, 2, -5, -12, -1, 11, 5, 12, 16, + 26, 14, 5, 20, 6, 7, -1, 1, 6, 1, 8, 36, -22, -6, -31, -14, -3, -13, -4, 0, -8, -11, -8, 5, 35, 6, -4, -9, -26, -26, + -4, 5, 19, -18, 1, -10, 3, -3, 21, -3, -7, 10, -4, -6, 7, -12, -1, 11, 10, 2, -10, -4, 2, -13, 4, 5, -2, -16, -15, -8, + -12, -9, -5, 12, -7, 7, 7, -1, 15, 1, 9, 15, 5, 15, -24, 2, 0, -18, 7, 24, 12, 14, 8, 7, 23, 25, 26, 25, 18, -6, + -14, 6, 8, 19, 6, -2, -7, 0, 2, 9, 6, -2, -1, 13, 11, 5, 2, -6, 0, -8, -2, 5, 13, 29, -1, 1, -15, 9, -18, -3, + 6, -1, -13, -5, 14, 11, 5, 13, 8, 5, 5, 7, 8, 3, 6, -6, -4, 10, 10, 9, -7, -2, 2, -1, -11, 6, 1, 5, -2, -17, + 4, -12, -3, -11, -15, -7, 17, 9, 27, 19, 21, -13, 0, 3, -5, 22, 20, 26, 5, 15, 16, 21, 22, 4, 12, -6, -6, -13, 0, -11, + -4, 2, 1, 9, 21, 27, 20, -6, -1, -9, -3, -9, 13, 12, 1, -13, -12, -10, -16, -12, -6, -2, 2, -7, -11, 2, 1, 1, -7, -14, + -11, 2, -2, 8, -1, 5, 8, 3, 5, 9, 3, 1, 7, 16, 18, 6, 6, -3, 8, -4, -7, 5, -3, -5, -1, -22, -8, 3, -1, 2, + 6, 0, 6, 3, 0, -5, -4, -12, -13, -14, -12, 2, 5, -4, -6, -11, -13, -1, 0, -5, 5, 11, 13, 23, 7, -10, -11, -11, -13, -10, + 5, 11, 6, 6, -5, -4, 10, -18, -9, -12, -13, -42, -23, -8, -14, 1, -10, -23, -25, -23, -27, -16, -8, -6, -4, -2, -4, -14, -12, -4, + -1, 15, 1, 4, 2, 4, 1, -2, 1, 5, -14, -11, 8, 7, 8, -2, 40, -26, -5, -45, -4, 18, -2, 46, 47, 31, -2, -10, 4, 28, + 3, 26, 6, -2, -12, -12, 15, 29, 16, -7, -2, 1, -2, -5, -2, 11, 25, 2, -33, 10, 4, 3, 3, 14, -10, -7, -4, 2, -7, -19, + 5, 2, -10, -3, -7, -14, -11, -10, -5, 2, -1, 9, -1, -9, -4, 1, 6, 5, -7, -36, -10, -34, -5, 11, 32, 48, 37, 32, 20, 17, + 18, 22, 15, 9, -2, 12, -3, -8, 1, -2, 5, 1, 0, -3, 7, 9, 23, 5, -4, -8, -14, 8, -8, -18, -4, 8, -2, -3, 10, 18, + 10, -6, 18, 12, 19, 1, -18, -20, -8, 3, 8, 29, 22, 19, 14, 8, -6, 0, 5, 8, 10, -17, -19, -12, -10, 19, 16, -7, 8, 2, + -1, 14, 7, -5, -3, -5, 10, 6, -21, -20, -31, -30, -27, -5, 8, 9, -6, 18, -10, -17, -13, 0, -9, 2, 12, 15, 54, 62, 50, 38, + 27, 7, -5, -7, -23, -48, -45, -44, -64, -40, -14, 9, 8, -1, 0, -3, 2, 5, 27, -2, 12, 1, 6, 10, 11, 9, 16, 10, 16, 6, + 9, 8, 15, 3, -8, -4, 0, 16, 13, 10, 4, 15, 15, 13, 7, 6, 0, 5, 7, 15, 8, 2, -4, 2, 9, 10, 11, 3, -10, -13, + -21, -15, -10, 0, 5, -4, -14, -32, -19, -7, 3, -4, -13, -23, -11, -12, -8, -24, -18, -13, 8, -15, 0, 0, -3, 5, -3, -18, -9, -9, + -15, -11, -29, -19, -11, 0, 12, 1, 2, 0, -3, -12, -10, -3, 16, 13, -2, -6, -4, -23, -14, -18, -5, 2, 4, 11, 13, 27, 18, 23, + 19, -2, -19, -25, -27, -21, -22, -19, -12, -15, 6, 12, 3, 10, 5, 9, 24, 25, 16, -2, 19, 91, -41, -7, -83, -25, 33, 13, 30, 51, + 26, 26, 5, 13, 31, 4, 12, 2, -13, 10, 8, 20, 6, 4, -11, 3, 13, -1, -5, 10, 18, 29, -2, -18, 23, 11, 21, 24, 17, -7, + -8, 13, -2, 1, 3, 22, 25, 2, 20, 15, 10, 1, 8, 8, 27, 13, 6, 12, 2, 9, 17, -9, -1, 9, -68, 47, 44, 58, 34, 45, + 49, 31, 28, 43, 43, 43, 42, 15, 22, 19, 35, 13, 17, 4, 16, 13, 11, -6, -15, -6, -4, -10, -6, -3, 12, 8, 41, 29, 21, 35, + 51, 59, 51, 35, 42, 41, 37, 24, 26, 21, 22, 18, 23, 8, -9, -9, -30, -11, -4, -8, 0, 10, -4, -11, 5, -1, -14, -12, -16, -11, + -2, -9, -12, -5, 8, 2, -3, -6, -4, -4, -19, 0, 3, -5, -1, 1, 10, 21, 38, 10, 16, 1, 11, 17, 27, 52, 72, 72, 60, 9, + 29, 7, 14, -4, 27, 28, 62, 43, 18, -27, -53, -23, -44, -16, -20, 17, 14, -15, -6, -40, -34, -2, -21, -10, -31, 23, 25, 23, 27, 23, + 23, 30, 30, 29, 28, 27, 24, 16, 14, 16, 13, 15, 26, 22, 1, -5, -1, -15, -18, -12, -19, -5, -9, -3, -8, 14, 16, 23, 20, 31, + 37, 28, 25, 20, 27, 28, 29, 17, 13, 1, -1, -2, 4, 17, 28, 26, 22, 16, 15, 3, 6, 9, -4, 5, 2, 14, 6, 14, 3, 13, + 4, -11, 3, 15, 16, 13, 14, -7, -7, -16, -16, -8, -4, 3, -8, -7, -3, -8, -21, -37, -51, -64, -67, -92, -90, -90, -82, -83, -93, -127, + -106, -97, -82, -79, -61, -61, -48, -64, -82, -115, -117, -104, -95, -67, -29, -5, 1, 30, 29, 40, 33, 23, 11, 9, 9, 28, 81, -117, -18, -117, + -4, -27, 34, 39, 30, 31, 10, 8, -13, 8, 2, 9, 6, -12, -11, -8, 9, 13, -22, -16, -7, 8, -8, -19, -3, -2, 4, 9, -4, 12, + -1, 7, 17, 3, -3, -24, -8, 0, 4, 10, 20, 4, 17, 12, 3, -1, 0, 33, 17, 11, 2, 6, 7, 1, 0, 4, 0, 6, 0, -31, + -2, 0, -6, -1, -7, -5, -3, -1, 5, 8, 6, 8, -5, 2, -3, -1, -2, 4, 1, 2, -3, -1, 2, 1, -3, -8, 1, -1, -5, -8, + 2, 2, -3, 1, -3, 6, 1, 10, 3, 6, 2, -5, -6, -8, 5, 4, -1, 1, 7, -2, 3, 1, -6, -2, 0, 1, 3, 4, 5, 0, + 0, 6, 2, 1, 2, -8, -3, -3, 0, 3, -5, 2, -2, -8, -10, -9, -7, 2, 11, 5, 0, 3, 6, 0, -4, 0, -6, 7, -2, 6, + 6, 8, 2, -2, 3, -2, 3, -12, -10, -8, -11, -2, 4, -2, -9, -3, -4, -5, -2, 3, -4, 3, -4, 1, 1, -3, -2, 0, -7, -4, + -2, 1, -4, -6, -1, 1, -2, 0, 6, 7, 5, 5, 4, 5, 3, -3, -5, -5, -5, 3, 5, 5, 0, 1, 5, 2, 6, 6, 1, 6, + 5, 2, 1, -7, 5, 7, 3, 4, 3, 0, -2, 0, -9, -6, -6, -4, -5, -2, -1, 7, 7, 1, -2, 3, 7, 1, -4, -7, -6, -7, + -3, 3, -2, -2, -2, -2, -2, 2, -1, 0, 0, -1, -6, -5, -3, -4, 5, -1, 8, 12, 6, -1, 3, 7, -4, 2, 5, 8, 2, 0, + -7, -10, -7, 4, -4, 4, 2, 5, 1, 1, 12, 8, -1, 7, 7, 9, -6, 0, 2, 3, 8, 7, 3, -2, -5, -11, -4, 6, 6, -1, + 0, 14, 2, 6, 11, 18, 0, -4, 3, -17, -18, 3, -1, 3, -3, 1, -1, -3, 0, -1, -13, -1, -2, -9, 4, 0, 7, 0, 3, -11, + -6, -13, 0, -12, -6, 1, 2, -2, 9, 0, -1, -6, -8, -5, -3, 2, -1, 3, -3, 3, -2, -8, 9, 8, 16, 4, -4, -5, -3, -1, + -1, -6, -1, -1, 14, 1, 8, -3, -2, -3, -6, -6, -5, 0, 1, 3, 0, 2, 0, 2, -4, 3, -5, -5, -7, -7, -10, -4, -8, -6, + -9, -4, -3, -6, -1, -8, 0, -6, 7, 5, 0, -8, -7, -7, -1, -6, 4, 6, 7, 0, 0, -2, 2, 2, 3, 6, 4, 6, -6, -5, + 4, -4, -4, 1, 7, 6, 3, 3, 6, 1, -1, -3, -4, 1, 1, 3, 6, 7, 8, -3, -9, 2, -7, -9, -12, -10, -7, -6, -4, 15, + 9, 14, 13, 14, 1, 2, 1, 6, -5, -4, 8, 3, 8, -1, -1, -8, 4, 0, 4, 6, 12, -2, 7, -5, 3, -10, 1, -2, -10, 1, + -4, 5, 4, -3, -4, -3, -5, -7, -8, -3, -3, -2, 8, 2, 7, 8, 0, 1, -6, -5, -5, -7, -8, -5, -9, -5, -9, -5, -9, -8, + -4, 0, 5, 7, 5, 1, -2, -1, 1, 2, 1, 3, 2, -2, 4, -4, 0, -1, 1, -1, -5, -3, 3, 5, 8, 7, 10, 4, 5, -4, + -1, 2, -2, -6, 3, -5, 2, -1, -2, 9, 1, 2, 4, 2, 1, 2, 2, -1, 2, 0, -3, -3, -6, -1, -2, -4, 0, 4, 2, 2, + 4, 1, -1, -8, -3, -1, -2, -4, -3, -3, -6, -2, 0, 7, 5, 5, 6, 6, 2, -4, 0, -11, -5, -4, 4, -2, 6, 3, 9, 1, + -5, -3, -9, -2, -1, -6, 7, 6, 0, 9, 0, -11, -6, -6, -13, 10, -5, -11, 4, -4, -8, 7, 14, 9, 9, 0, 3, -9, -6, 1, + -1, 2, 2, -5, -5, -4, 9, -2, -2, 10, -1, -1, -5, -4, -6, 5, -5, -6, -1, 8, 0, 8, 0, 10, 1, 1, -1, 6, 4, 0, + 1, -3, -6, 2, 1, -7, 2, 7, 5, 4, 0, 3, 0, -3, 0, 1, 3, 3, -7, 3, 0, -3, -4, -6, -2, 0, 0, 2, -8, -2, + -2, 2, 0, 2, -1, 4, -6, -6, 4, 3, -5, 4, -3, 2, -6, -3, 12, 3, -4, -6, -1, -3, -8, -8, -7, -1, -5, 5, 1, 6, + -8, 9, -2, -1, -4, -7, -2, -7, -8, 1, 4, -5, 3, 3, 1, 4, -3, 1, 4, -4, -4, -2, -7, -4, -3, 2, 4, -7, -6, 4, + -5, 8, -3, 3, 0, 0, 4, 0, -1, -7, -6, 5, -7, 9, -2, -4, 0, -3, -1, -1, -3, 6, -8, 3, -17, 3, 3, 0, 9, 5, + 0, 10, 3, 4, -3, 0, 2, -11, -6, -3, -2, -4, -4, -6, -1, 1, -3, -2, 0, -3, 1, 4, 3, 1, 1, -6, -3, -1, 1, 1, + -4, 1, 1, 0, 2, 0, 8, 3, 2, 3, 3, 4, 2, 2, 7, 16, 10, 2, 7, 2, -9, -9, -5, -5, -2, 6, 3, 2, 2, -1, + 0, -1, -1, 1, -2, -4, 4, -5, 4, 4, -6, -6, 3, 4, 5, 0, -3, 1, 2, -4, -3, -5, -7, -4, 2, -1, 3, -3, 3, 12, + 0, 5, 2, -6, -2, 0, 3, 3, 2, 4, 8, 7, 0, -2, 0, 3, 6, -3, 4, 3, -8, -10, -14, -11, -10, -4, -1, -5, -2, -8, + 3, -2, 3, 4, -3, 1, 6, -2, 1, 5, -3, 21, 13, -8, -5, 0, -12, -2, -13, -5, -4, 11, -9, 10, -1, -8, -4, -1, -1, 17, + 9, -15, 3, -12, -8, -1, 1, -3, -6, -3, 4, 7, -1, 1, 5, -3, -5, 6, -3, -10, -10, -4, 1, 2, 6, 3, 6, -12, 0, -6, + -5, -5, 5, 4, -2, 1, -1, -8, 3, -3, -3, 7, -2, -1, 5, 3, 5, 2, -8, -2, -2, 2, -1, 1, 8, 4, 9, 9, -3, 1, + 2, 9, 5, 7, 4, 0, -2, -8, 0, 0, 0, 0, -11, -17, -15, -3, 3, -4, 0, 5, 1, -2, -2, 3, 8, 16, 9, 10, 15, 20, + 6, 4, 17, 11, -8, 1, 14, -9, -6, 3, -3, -8, 4, 15, 2, 5, 6, 8, 2, -3, -1, 2, -4, 3, -1, -4, -3, -2, -8, -10, + -16, -3, -9, -7, 0, -5, -12, -9, 4, -2, -1, 17, 7, 4, 6, 19, 9, 3, 4, 1, -10, -2, -6, -5, -3, 0, -2, 0, 3, -7, + -6, -4, -2, -3, -2, -7, -6, -5, 1, 6, 3, -1, -6, -8, 2, -9, -5, 0, 2, 5, 8, 4, 5, 4, 13, 6, 3, 1, -5, -8, + -6, -4, 0, -3, 0, 2, -4, -1, 5, 4, 1, 2, -2, -2, 0, 5, 0, -2, -5, -2, 1, 2, -3, 2, 2, 2, 0, 8, 4, -3, + -5, 0, 1, 5, 2, -3, -5, -2, -2, 1, 3, 4, 0, 3, 5, 1, 0, 0, 2, 1, -1, 5, 0, 4, 8, 3, 0, 6, 5, 6, + 3, 5, 1, 3, -2, -6, 0, 5, 2, 1, 6, -2, -3, -4, -1, 3, -6, -2, -3, -8, -3, 5, -1, -6, -5, 3, 0, -1, -1, 1, + 10, 7, -3, 0, -10, -2, -3, 4, 1, 3, 3, -3, 3, 2, -4, -10, 38, -19, 20, -15, 1, 2, 9, 29, 29, 0, 18, 1, 11, 11, + 7, -1, 3, -11, -2, 6, -15, 4, -6, -10, -7, 7, -3, -9, -7, 3, 4, 4, 7, -4, -3, 6, 0, -5, -9, -8, -1, -3, -8, 1, + 3, 1, -18, 0, 4, 4, 14, -3, 1, 13, -2, 1, 0, 6, 13, 4, 15, 10, 6, 9, 3, 8, 3, -3, -8, -17, -2, 3, 10, 11, + 2, 7, 0, -11, 2, 6, -1, -5, 0, -3, -5, -9, -8, -9, -5, -7, -8, -3, -5, 4, -1, -1, -13, -8, -7, -3, -7, 1, 13, 10, + 11, 10, 8, 19, 26, 30, 19, 12, 12, 8, 3, 9, 17, 15, 13, 11, 13, 7, 8, 10, 11, 15, 0, -2, 7, 8, 7, 7, 6, 9, + 4, -6, -6, -5, -11, -13, -9, -21, -6, -15, -15, -14, -20, -8, 3, -2, 7, -8, -6, -9, 5, -3, -5, -13, -24, -28, -23, -13, 0, -4, + -6, -2, -3, 3, -5, -1, 14, 9, 10, 32, 18, 17, 19, 11, 19, 14, 15, 3, -3, 9, -10, -6, -6, -3, 5, 3, 5, 3, -1, -7, + 2, 3, 1, -1, 1, -5, 0, 3, -3, -4, -2, -3, -2, 0, -2, 2, 6, 11, 11, 6, 2, -6, -3, -4, -8, -3, -4, -6, 3, 0, + -3, 0, -1, -3, 0, 4, 5, 0, 3, -1, 1, 3, 4, 6, 7, 8, 4, 4, 0, 4, 8, 6, 9, 7, 2, -4, 4, 3, -2, -3, + -5, -7, -8, -14, -4, -7, -10, -8, 5, -1, -7, -1, 6, 6, 5, 5, 4, 1, 4, 1, 6, 3, 5, 4, 5, -2, -5, -5, -2, -1, + 2, 1, -1, -2, 1, 4, 0, 2, 0, 4, 7, 6, 6, 6, 1, 9, 4, 1, 8, -2, -58, 82, -59, 52, -51, -26, -5, 28, 48, 8, + -18, 6, 5, -7, 9, 1, 2, 1, -9, -4, -2, -18, 2, -3, -11, -7, -2, -2, -13, -7, -4, -5, -4, 6, 1, -3, -5, 0, -14, -11, + -3, 5, 3, -2, 4, -5, -9, -4, 7, -5, 4, 11, 2, 10, 11, 13, -2, -5, 4, 3, 0, 2, -1, -2, 21, -4, 6, -2, -6, -8, + -6, -3, -4, 3, 6, 12, 11, -5, -14, -16, -6, 9, 9, -2, -12, -10, -8, -7, -5, -3, 3, -5, 11, 2, 0, -1, -3, -10, -10, -14, + -9, -14, -3, -11, -10, -2, 4, 18, 19, 6, 6, 13, 4, -8, 1, 7, 9, 11, 17, 15, 18, 19, 14, 15, 15, -6, 13, 8, 3, -1, + 2, 1, 9, -1, -3, -8, -20, -11, 1, 5, 3, 7, 10, 16, 0, -9, -10, -13, -13, -28, -21, -25, -12, -6, -9, -17, -29, -35, -46, -49, + -54, -45, -27, -14, -8, -4, -8, -9, -6, 6, -6, 16, 3, 2, 13, -6, 8, 18, 15, 20, 17, 11, -3, -5, 26, -37, -32, -26, -27, -22, + -21, -20, -13, -12, -11, -6, -7, -4, -8, -10, -12, -11, -15, -14, -16, -14, -8, -1, 5, 2, 4, 0, 3, -1, -3, -13, -15, -22, -30, -29, + -24, -15, -11, 3, 8, 11, 16, 27, 18, 17, 33, 27, 23, 18, 15, 7, 17, 21, 17, 17, 21, 21, 20, 18, 14, 13, 15, 8, 1, 4, + 0, 2, -7, -3, 1, 0, 3, 6, 14, 7, -3, 6, 5, 16, 15, -12, -10, -24, -26, -49, -52, -60, -53, -42, -42, -45, -43, -54, -67, -76, + -83, -76, -60, -35, -12, -6, -4, -22, -28, -44, -42, -48, -51, -43, -40, -36, -34, -40, -52, -51, -51, -68, -50, -51, -35, -93, 105, -112, 60, -127, + -33, -52, 43, 83, -17, -22, 22, 8, -56, 3, 42, -20, -9, 13, -3, -8, -17, 12, 5, -10, 1, 4, -7, -10, 7, 5, 3, -4, 8, 12, + 1, -3, 5, -10, -9, -10, 5, -5, -5, 3, -12, -11, -6, -3, -5, -8, 8, 14, 4, 10, 7, 11, 6, 8, 7, 4, -5, -4, -1, 32, + 4, -4, 0, -8, 2, 5, -3, -3, 0, -6, 0, -3, 1, 2, 19, 11, 15, 9, -3, -9, -6, 2, 7, 0, 0, 3, 6, 13, -6, 1, + 1, 8, 7, 3, 1, 6, 3, -8, -9, -1, -10, 0, -1, 8, 7, -8, -3, 1, -7, -2, -1, -6, -2, -2, -5, 7, -1, -1, 7, 2, + 5, -4, 5, -5, -13, -6, -5, 5, -1, -1, -2, -9, 6, -5, -4, -11, -15, -10, -6, 12, 7, -3, -4, -10, -5, -5, 19, 2, 12, 5, + 0, -4, -4, -1, -8, 5, -7, 0, -2, -9, -8, -3, -3, -6, 10, 8, -1, 0, 11, -2, -8, -1, -12, -16, -15, -6, -5, 2, 6, 23, + 1, -3, -4, -3, 0, 2, -1, 6, -6, -6, -9, -10, -7, -10, -7, -7, -4, 0, -4, -4, -12, -9, -4, -4, 5, -5, -11, -11, -3, 8, + 2, 1, 5, 9, -3, -1, -1, -3, -4, -2, -2, 4, -4, 3, 8, 3, 8, 7, 7, 7, 4, 7, 10, -3, 8, 4, 5, 9, 7, 9, + 4, 8, 9, 3, 2, -4, 0, 8, 8, 10, 4, 8, 1, 4, 7, 8, 10, 4, 7, 3, 3, -2, -13, -8, -5, 2, 1, 1, -6, -4, + -4, -5, -12, -10, -3, -2, 1, -8, 1, -6, 0, 1, -5, -3, -3, -3, 0, 0, -1, 2, 9, 12, 13, -4, -8, -1, 3, 7, 2, 8, + -11, 0, 4, -2, 8, 25, 11, 7, 17, 18, 4, 2, -8, 0, 6, -10, -14, 7, -1, -6, -5, 1, -13, 3, 4, 9, -13, -1, 9, 11, + -8, 10, 7, -5, -5, -5, -2, 7, 10, 5, 21, 21, 2, -5, 7, 0, 6, 13, 11, -5, 3, -6, -8, 9, 3, 11, 1, -1, 12, -14, + -16, -1, -12, -7, -14, -3, -9, 7, 8, 1, 2, -2, -6, -6, -3, 3, -1, -7, 2, 2, 7, 9, 14, 0, -6, -2, 1, -2, -3, -15, + -12, 4, 4, -2, 5, 13, 11, 7, 11, -4, 1, 6, 6, 11, 17, 9, 8, -3, -2, -2, 1, -3, 0, -1, 4, 0, -5, -2, -7, -17, + -1, -2, -2, 3, -4, -6, 2, 0, -7, -14, -12, -5, -1, 3, -3, -6, -5, -9, -12, -5, -10, -1, -2, 0, 7, 4, 4, -8, -1, -7, + -6, 8, 11, 10, 10, 7, 2, 11, 6, 6, 4, -12, -5, -4, -4, 4, 4, 2, 4, 4, 10, -4, -8, 0, 9, 10, 18, 5, 5, 10, + 3, 1, 1, 5, 10, 3, 5, -1, -5, -3, 0, 2, 2, -1, 8, 6, 2, 5, -2, 3, 2, -1, 0, -1, -3, -3, -8, 0, -4, -6, + -2, -6, -2, -1, 0, 2, 1, -3, -15, -15, -17, -14, -13, 0, -2, 2, 0, -8, -15, -12, -14, -12, -13, -9, -15, -9, -1, 0, 0, 2, + 3, -1, 0, 2, 1, 10, 3, -1, 3, -10, -10, -3, 11, 12, 13, 11, 5, 2, -4, -3, -8, -2, -2, 3, -3, -2, -8, 2, 1, 1, + -9, 6, 7, 10, 2, 2, -3, 7, -2, 7, 9, 2, 4, 10, 13, 11, 8, 10, 5, -2, -5, -6, -2, 0, 0, -1, 9, 1, -4, -2, + 0, 1, -2, -11, -12, -13, -10, -6, -14, 16, 18, -17, 4, 2, 23, -15, 5, 2, 8, -1, -8, 1, 10, -7, -15, -3, 9, -5, 13, 9, + 12, 3, -7, -5, -2, -16, -3, 1, 4, 2, -8, 4, 11, 8, -6, -3, 16, 23, 6, 9, 2, 3, 22, 8, -1, 3, -11, -9, -7, 5, + 4, -3, -4, -3, 3, -8, 4, -4, -7, -11, 1, 7, 5, 8, 6, 9, 6, 9, 11, 7, -4, -4, -7, -2, 6, -2, 0, 14, 8, 8, + 10, 8, 5, -1, -5, 1, 1, -3, 7, 4, 9, 1, 5, 5, 6, 18, 13, 5, 4, 11, 12, 3, -4, 4, -7, 1, -2, -4, -4, 5, + 14, 2, 2, 9, 3, -6, 3, 6, 2, 1, -3, -7, 2, 6, 3, 6, -4, -20, -4, 1, 6, 0, -6, 9, 2, -8, -10, -8, 2, 5, + 0, 8, 5, -3, 7, 1, 2, -14, -9, -7, 1, -12, -7, -1, 1, -5, -15, -10, -4, -11, -13, -7, 5, 7, 10, -7, -5, 6, -4, 6, + 2, 6, -4, 6, 11, 7, -12, -19, -5, 6, -1, 2, 2, -2, -3, -1, -5, 3, 0, -1, 0, -5, -5, 0, 4, 5, 6, 5, 4, 14, + 9, 1, 5, 2, -7, -5, -5, 3, -8, -1, -2, 1, -8, -6, -2, 1, -3, -4, 0, 0, 0, 2, 8, 7, -5, -6, -7, 0, -10, -4, + -8, 0, -1, 1, 1, -1, -10, 1, -3, 1, 10, 11, 2, 6, 8, 6, 7, -8, -6, 2, 10, 0, -1, -3, 4, -2, -13, -8, -1, -4, + 6, 3, -7, -3, 3, 0, -6, 2, -1, -7, -11, -7, 6, 5, 10, -1, -8, -2, -2, 1, -3, 9, 9, 3, 1, -8, -6, 3, 3, 12, + 2, 1, -7, -8, 6, 4, 3, -6, -7, 2, -12, -19, -12, -15, 23, -13, -26, 8, -11, 2, 5, 4, -2, -14, 5, -13, 16, 1, -27, -15, + -12, -8, 1, 5, 9, 0, -19, 6, 2, 0, -7, 9, -2, -12, 1, -9, 2, -9, -3, -7, -3, -4, 19, 8, 7, 15, 6, 2, 1, -6, + 2, -6, -14, -26, 4, -1, -5, 2, -25, -10, 6, 0, 0, -6, 2, -5, -3, -6, -8, -10, -6, 6, 1, 2, -3, -5, -5, -5, -1, -6, + -8, -12, -4, 4, -8, -7, -9, -11, -2, -1, -6, 3, -9, -4, -10, -8, -5, -6, 2, 3, -3, -12, -3, -11, -8, -9, -7, -3, -2, -6, + -4, 6, 0, 4, -2, -4, 1, 8, 2, -10, -17, -1, -5, -4, 13, 9, 1, 10, 20, -2, 4, 2, -7, 16, 14, -3, 18, 10, 12, 9, + 1, 11, 7, 12, 6, 16, 15, 10, 8, 13, 12, -3, 10, -4, -1, 3, 18, 6, 7, 7, -2, 0, 7, 2, 3, 2, -13, -6, -10, -15, + -14, -1, -8, -13, -13, -22, -26, -19, -18, 8, 0, -14, 1, -8, -9, -13, -14, -4, -6, -2, 2, -3, 1, 6, 11, 5, -2, -1, -4, 5, + 6, 0, 4, 10, 11, 10, 11, 6, 4, 3, 0, -8, -15, -16, -12, -4, -3, 6, 4, 1, 9, 6, 13, 16, 11, 12, 5, 0, 2, 2, + 0, 0, 5, 8, 5, 1, -5, -3, -1, -4, -15, -10, -4, -6, -5, 11, 6, 0, 7, -3, -8, -1, 4, 4, 1, -2, 4, 5, 4, -1, + -12, -14, -6, -1, 0, 0, -2, 4, -2, 2, -3, 3, -1, -6, 1, -4, 6, 1, -2, 13, 1, 2, 10, 11, 11, 3, 11, 3, 1, 9, + 6, 3, -1, 5, 2, -8, 2, -13, -4, 0, -13, 5, -4, 9, 7, 10, -53, 28, 2, 45, -1, -23, 50, 0, 2, 18, 26, 0, 8, 11, + 2, 23, 11, -32, 2, -2, -23, -10, -15, 8, 10, -5, 1, -1, 9, 13, 16, 2, -1, -8, 2, -18, -5, -13, -8, -4, 1, 0, -3, 5, + 3, -18, -10, -15, -18, -24, -21, -13, -1, 2, 2, -13, 1, -15, -3, 1, -14, -13, -3, 27, 4, -10, -7, 0, 5, 1, -2, -4, -3, 9, + 0, 2, 6, -3, -9, -4, -3, -4, -10, -1, -9, -9, -5, 0, -1, 5, 7, 6, 10, -5, -1, -17, -18, -14, -14, -21, -12, -14, -7, -7, + -14, -13, -6, -20, -34, -12, -8, -11, -13, -10, -3, -5, 1, -3, 3, 3, -12, -11, -3, 2, 2, 13, 23, 8, 3, 3, -13, -7, 8, 9, + 26, 32, 40, 30, 36, 37, 22, 21, 18, 19, 23, 31, 31, 30, 41, 25, 8, 18, 8, 14, 1, 29, 18, 30, 20, 21, 19, 23, 17, 19, + 22, -18, -11, -33, -46, -39, -47, -31, -21, -27, -29, -46, -41, -23, -7, -8, -13, 8, -6, -14, -8, -2, -5, -8, -7, 2, 6, 7, -1, -1, + -3, -11, -13, -8, -14, -6, -3, -6, -4, 0, 0, 3, -8, -8, -4, -6, -15, -16, -12, -4, -12, -10, -8, -9, -21, -20, -14, -15, -18, -14, + -11, -12, -11, -11, -9, -7, -3, -8, -3, -8, -14, -9, -9, -16, -14, -13, -16, -8, -5, -2, 0, 7, 7, -4, -5, -4, -7, -1, -7, -3, + -5, -8, 0, 5, 0, -4, -9, -14, -24, -13, -3, 4, 1, 1, 5, 2, 1, 0, 5, 4, -4, 3, -2, -3, -6, -6, -2, 3, 4, 3, + -17, -26, -39, -62, -57, -47, -40, -37, -27, -33, -24, -33, -45, -26, -17, -28, -28, -34, -25, -14, 0, -127, 77, -31, 41, -28, -35, 57, -38, -23, + 26, 36, 14, -7, 15, -1, 13, -19, -28, 2, -2, -8, -10, 5, 13, -3, 10, -14, -11, -5, -12, -8, -24, -22, -32, -42, -29, -12, -8, 3, + -4, -6, -2, -16, -4, -13, -21, -25, -25, -31, -37, -22, -17, -23, -13, -23, -8, -17, -12, -15, -30, -5, -15, -11, 56, 9, 12, 22, 17, 7, + 10, -10, -11, -5, 7, 22, 13, -5, -3, -3, -1, -11, -4, -14, 2, 21, 23, 27, 10, 14, 10, 15, 21, 16, 28, 19, 25, 15, 12, 8, + -1, -2, -5, 5, 1, -8, -12, -7, -9, -28, -24, -15, -1, 4, 0, -3, -5, -8, -20, 0, 17, 30, 13, 5, 13, 3, 7, 9, 10, 13, + 17, 13, 23, 23, 24, 29, 24, 27, 11, 18, 13, 3, 4, -20, -5, -6, -4, 6, 11, 5, -4, -16, 0, -12, -12, -8, 9, 5, 0, -14, + -21, -22, -35, -40, -18, -5, 7, 7, 18, 24, 14, -7, -3, 5, 6, -20, -10, -14, -17, 0, -2, -20, -16, -16, 7, 13, 8, -3, -1, -1, + 1, 5, 3, 8, 1, -8, -7, -8, -19, -18, -17, -17, -6, -8, -2, -1, 2, -7, -4, -5, -4, -3, 5, 9, 13, 6, 1, 2, 7, -9, + -14, -10, -14, -27, -36, -28, -40, -39, -32, -21, -22, -26, -15, -5, -4, 5, 7, 11, 9, 10, 8, 10, 0, -9, -20, -30, -16, -17, -22, -24, + -19, -11, 1, 6, 1, 7, 6, 8, 10, 19, 11, 11, -11, -24, -32, -33, -30, -25, -27, -33, -25, -21, -12, -6, 7, 3, -10, -16, -9, -25, + -30, -17, -22, -13, 20, 29, 21, 7, -29, -43, -61, -83, -101, -107, -93, -73, -51, -40, -2, 4, 6, -25, -45, -42, -26, 43, -62, 112, -67, 43, + -80, -50, 67, -101, -52, -6, -31, -21, -53, 10, 7, -30, 21, 8, 5, 2, 11, 34, 4, 10, 30, 14, 3, 7, -3, -2, 10, 4, 7, 8, + -10, 15, 17, 11, 26, 15, -4, 10, -10, -14, -2, -12, -2, 5, -14, -12, 5, 11, 19, 19, 21, 18, 27, 29, 12, 10, 11, 11, 28, -8, + 1, 4, -3, 5, 6, 8, 2, -6, -5, 4, -3, -5, -1, 2, -6, -3, -5, -2, -5, -7, -13, 2, 2, -5, 1, 1, 2, 5, 1, -1, + -3, -6, 2, 0, -2, 4, 2, 9, 8, 11, 6, -3, 5, 3, 1, -5, 2, -3, 6, -2, 8, 7, -6, 0, 0, 11, -5, -1, 3, -5, + -1, -1, 0, 9, 0, -7, -4, 8, -5, -1, 5, -5, 0, 5, 1, 2, 7, -4, 2, -3, -5, 2, -6, 3, -11, 0, -2, 11, 6, 5, + 1, -3, -4, -5, 1, 4, 8, 2, 5, -7, -4, 8, 4, -1, -1, -9, -10, 0, -8, 3, -4, 3, 3, 0, 7, 1, 2, 4, -6, 0, + 0, -5, 0, -5, 0, -3, -2, 1, 4, -3, 1, -4, 2, 1, 6, 1, 1, -1, -3, -3, -3, -4, -4, 1, -1, 0, 8, 8, 1, -6, + -3, -1, -2, -5, -1, -2, 0, -4, -6, 0, 0, -4, 0, -4, -4, 4, 7, 1, -2, -1, 3, 7, 5, -5, 3, 1, -4, -1, -5, -5, + -2, 4, 7, 12, 13, 4, -1, -3, -8, -10, -3, -4, -8, -10, -11, -1, 7, 6, 5, 1, -2, -8, 0, -5, 2, -1, -1, 6, 3, 6, + 0, -2, 4, 2, 3, 3, 3, -1, 9, 0, 1, -5, -4, 1, 0, -4, -6, -3, 2, 0, -6, 2, 5, 6, -2, 3, -1, -5, -1, 11, + -13, 9, 15, -8, -5, 1, 4, 7, 0, -2, 0, -8, -9, -17, 4, -5, -4, -5, 5, 6, 1, 2, 0, 10, -2, -2, 12, 15, -1, -5, + -3, -2, 12, 14, 3, 6, 2, 5, -9, 0, -1, -8, -3, -6, -4, -5, -15, -12, -2, -12, 0, -2, -3, -5, -6, -6, 0, 2, 11, -5, + -3, 3, -3, -4, -15, 17, 14, 7, 3, -6, 7, 6, 10, 7, -4, -1, 2, 4, 7, 7, -6, 1, 0, 3, 0, -4, -6, -4, -2, 8, + 6, 0, -3, -1, 3, -1, -10, -4, -7, -6, 0, -4, 1, 1, 2, 1, 1, -2, 0, 6, 4, 0, -3, -2, -7, -1, -4, 5, 6, 1, + 0, 0, 7, 12, -6, -10, -9, -2, 4, 7, 0, 0, 3, 1, -3, 0, -7, -6, -1, 4, 3, 5, -2, 5, 0, 0, -6, 0, -6, 0, + -7, 8, -3, -1, -2, -3, -6, 11, -3, -5, -1, 2, 7, 2, -6, 6, -3, -2, 8, 3, 11, -3, 2, 0, -8, -4, 7, 3, -6, -6, + 1, 3, -8, -2, 5, 0, -5, -4, -9, -7, -7, 3, -3, 0, -4, 0, -3, 0, -1, 2, -3, 3, 2, -3, 3, 2, 3, -4, 1, 5, + 9, 2, 1, 2, -1, -5, -6, -5, -1, -2, 0, 6, 1, 4, 4, 5, 3, 3, -2, -1, 4, 2, 3, 0, 1, -3, -6, -8, -1, -6, + -5, -5, 5, -1, -6, -4, -1, -1, 5, 7, 5, 1, 5, 4, 0, 0, 2, 1, -4, -2, 5, 8, 0, 0, 1, 6, -3, 2, 3, -4, + -1, -4, 2, -1, 1, 3, -4, -4, -3, -4, -3, 6, 1, 4, -1, 4, -5, -2, 5, -1, 5, -4, -3, -1, -1, 3, 7, 1, -1, -5, + 1, 6, -1, 1, 0, 14, 7, 12, 6, -11, -1, 4, 6, -3, -1, -6, 0, -1, -8, 3, -4, 6, -2, -1, 4, 6, 4, 1, -2, -7, + -2, -5, 11, 3, 0, -1, -1, 7, 6, -4, 9, 11, -12, 9, -6, 1, -6, -2, 7, -9, -8, 0, -5, -4, -12, -4, -4, -5, 2, 3, + -3, 8, 9, 12, 5, 9, 9, 12, 8, -15, -1, -6, -1, -6, -7, -2, -1, 7, 3, 1, -5, -5, 3, 7, 3, 7, 0, -5, -1, -4, + 2, 5, 12, 3, -3, -2, 2, 1, 5, 4, -10, -10, -5, 1, 3, 1, -3, 2, 5, -2, -7, -12, -4, -7, -5, -3, -3, 0, 8, 7, + 8, -1, 9, 10, 5, 0, -3, -3, -3, -4, -6, -4, -3, -2, -1, -4, -4, 4, 2, 5, 8, 6, -2, 3, -1, 2, -2, 7, 1, -5, + -2, 2, 3, 2, 7, 9, -1, 2, -1, 1, -2, -6, -7, -6, -3, 7, 9, 4, 9, 2, -5, 3, 1, 1, 8, 9, 8, 6, 2, 6, + -2, 3, -7, -5, -7, -11, -4, -6, 5, 2, 0, -5, -1, 2, 1, -2, 1, -4, -3, -8, -2, 1, -4, -6, -2, -3, -6, -2, -4, 2, + -2, -1, 1, -4, -2, -1, -1, 7, 1, 4, -5, -4, 0, 3, 1, -2, -7, -4, -4, 4, 6, -1, 3, -6, -2, 2, 1, 3, -1, -5, + 2, 2, -5, 4, 1, -2, -5, -4, -5, 3, 6, 4, 5, 8, 4, -2, 0, 1, 0, 1, -8, -8, -3, 3, -7, -3, 0, -1, -5, 2, + 7, 1, 5, 0, 0, 4, 3, 2, -3, 1, 3, -1, 1, -1, -3, -5, 4, 0, 3, -1, -11, -8, -10, -6, 0, -5, -6, 0, 10, -5, + 7, 6, 1, 1, -3, -4, -2, 6, -4, 3, 9, 5, -2, -6, -16, -19, -4, -3, -6, -8, -4, 2, 0, -7, -12, -8, 1, 0, 6, 1, + 1, -4, 0, -9, -5, -12, -6, -8, -8, -8, -13, -6, -8, -7, 0, 1, 6, 3, 0, -1, 10, -3, 3, 2, 3, -12, -10, -3, -1, 1, + -14, 2, -1, 6, -5, 6, -2, 6, 6, 9, 2, 1, 6, -6, -9, -1, 6, 1, -7, 3, 4, -4, -7, -1, 3, -3, -3, 2, -8, 4, + -2, -3, -4, 15, -1, -5, 5, -7, -4, 2, 4, 9, -2, 4, -3, 1, 10, -7, -3, -7, -6, 0, 0, 4, -2, 3, 0, -7, -16, -7, + 1, 5, 5, -7, -7, 1, -4, -3, -5, 1, -1, -4, 8, 2, 3, 11, 0, -5, 15, 8, -8, -2, -1, -14, -12, -10, -3, -8, -5, 4, + 3, 11, 0, -6, -5, -4, -7, -9, 6, 5, 1, 5, 6, -3, -1, 4, 2, 7, 1, -5, 7, 7, 8, 8, 0, -2, -2, 12, 16, 15, + 15, -2, 3, 2, 7, 6, -3, -10, 3, -1, -1, -1, -1, 2, -1, 9, 5, 2, -2, -2, -1, -3, 1, -1, -3, -4, -6, -9, -6, -3, + 4, 5, 5, 4, -8, -8, -2, 1, -1, 2, -2, 4, 4, -1, -1, 3, 0, -3, -2, 3, 4, 1, -4, 4, 6, 1, 1, 2, 3, 6, + -5, -2, 4, 1, -1, 1, -3, 2, 2, -3, -7, -7, -2, 1, 0, 0, -1, 1, 1, 0, -9, 1, -1, -1, -1, -4, 3, 3, -1, 2, + 3, 3, 3, 4, -1, -1, 2, -9, 0, -1, -3, 11, -1, -3, -2, -1, -2, -1, 3, 2, -5, 5, 7, 3, -1, -5, -4, -6, -5, -3, + -5, -4, 0, 0, 0, 3, -1, 5, 3, 1, 1, 10, 10, 5, 9, 17, 17, 19, -3, -15, -16, 2, -12, -14, 1, 2, 6, 5, 2, -2, + 8, 4, 3, 3, 11, 9, 1, 0, 3, -4, -2, -10, 6, -1, -12, -13, -4, 2, 6, 4, 12, 10, 1, 5, 11, 6, -1, -4, 1, -1, + 0, -7, -10, 0, -4, -5, 3, 10, 8, 11, 1, 3, 6, 1, 10, 7, 4, 6, -3, 6, 6, -2, -3, 1, -3, -10, -13, -5, 8, 5, + 3, 4, -4, 3, 12, 8, -2, 3, -3, -5, -3, -5, -12, -10, -8, -13, -10, -17, -13, -17, -15, -5, -6, 6, 4, 3, -3, -2, -4, -7, + -3, 0, -6, -3, -4, 0, -3, -6, -6, -2, -1, -18, -21, -11, -12, -5, -3, 1, -1, 0, 7, -1, 3, 5, -3, 5, -4, -9, -8, 0, + -1, -4, -9, -8, -10, -14, -1, -12, -3, -2, 11, 15, 8, 3, -17, 3, 2, 3, -1, 9, 10, 1, 1, 15, 5, -4, -1, -1, -3, -5, + -4, 1, 1, 16, 8, 15, 17, 12, 28, 14, 11, 3, 1, -3, -7, -7, -9, -3, -1, -4, 7, 6, 11, 9, 10, 8, 10, 6, 6, 4, + 4, 0, -1, 1, 2, 2, 0, -4, 0, -6, 0, -3, -2, 3, 3, 3, 6, 8, 2, 3, 0, -4, -5, -2, 2, 7, 0, -2, 9, 4, + 3, 4, 2, 4, 4, 2, 4, -4, -1, 8, 2, -2, 4, -3, 0, 10, 14, 5, 11, 8, 6, 4, 6, 9, 3, 6, 7, 1, -1, 4, + 4, -2, -2, 6, 3, -1, 7, 9, 7, 7, 5, 3, 7, 2, 0, 2, -2, 0, 2, -1, -3, 6, 2, 8, 3, -6, -2, -3, -3, 1, + 0, -2, -1, 9, 3, 6, 7, 5, 8, -3, 2, -3, -7, -7, -2, 2, 13, 7, 9, 6, -31, -12, 18, -13, -45, -13, 2, -12, 3, 24, + 19, 23, 8, 16, 0, 2, 25, 6, -8, 24, 16, -10, -7, 7, -4, -18, -3, 5, -2, -9, -7, 2, -1, 13, 14, 10, 16, 16, 12, 4, + -2, 8, 11, 14, 3, 8, -7, 1, 4, 0, 0, -2, 1, 8, 1, 0, 5, 5, 1, 4, -4, 7, -4, -8, 57, -2, -11, -11, -19, -20, + -15, -7, 2, 7, -8, -1, -1, -4, 0, 3, 14, 15, 14, 17, 21, 8, 7, 8, 11, 4, -2, 0, -4, 9, 7, 0, 10, 9, 3, 0, + -4, -1, 0, 0, -3, 9, 9, 21, 20, 20, 15, 5, -6, -3, -4, -8, -14, -5, -8, -8, -4, -3, -5, -12, -6, 5, 7, 11, 12, 20, + 2, -7, -8, -9, -10, -17, -15, -9, 2, 11, 2, 8, 25, 15, 8, 9, -2, -5, -10, -13, -9, 3, 7, 21, 27, 25, 13, -2, 1, -3, + -4, -5, -5, 5, -1, 9, 1, -2, -10, -16, -25, -21, -34, -34, -42, -45, -26, -18, -19, -11, 0, -13, 1, -9, -7, 4, 5, 5, -2, 4, + 6, 4, 4, 7, 3, 3, 2, 4, -2, -5, -3, -7, -1, -1, 2, 5, 2, 4, 4, 4, 1, 4, -1, 2, 2, -4, 0, 3, -2, 7, + 9, 2, 5, 6, 5, 4, 4, 5, 9, 8, 2, -2, -3, -4, -5, -10, -12, -6, -4, -15, -15, -8, -9, -11, -12, -1, 7, 6, 10, 18, + 9, 10, 13, 9, 12, 14, 22, 27, 28, 32, 34, 34, 36, 34, 19, 6, -7, -21, -24, -24, -18, -20, -16, 1, 11, 11, 12, 10, 15, 16, + 26, 35, 51, 56, 46, 37, 15, -15, -36, -62, -85, -99, -95, -84, -75, -67, -49, -29, -3, 15, 19, 26, 23, 29, 32, -102, 56, 39, -25, -2, + 84, -72, 103, -37, 24, 85, -4, 27, -23, -33, 13, 8, -9, 12, -29, 3, 3, -16, -10, -2, 5, 4, -5, -9, -18, -15, 3, -2, -8, -3, + 13, 2, 1, 1, 11, -3, 4, 0, -3, 5, 1, -12, -7, -11, -5, -1, -13, -19, 0, -11, -19, -15, -5, -12, -8, -10, -20, -29, -37, 127, + 8, 12, 6, 6, 3, 8, 1, -1, 2, 8, 1, 1, 7, 5, 6, 3, 8, 12, -7, -14, 0, 0, 2, -5, -1, 0, -2, 2, 1, 2, + 1, 3, 4, 0, -9, -2, 1, 2, 0, 3, -3, 2, 7, 7, 9, 10, 4, 2, -7, 0, 4, -9, -4, 9, 9, 1, 8, 3, 1, 1, + -8, 6, 13, 13, 4, 5, 7, -3, -5, 4, 2, 0, 6, 2, 8, 5, -4, 4, 14, -5, -2, 3, 5, -3, -1, 12, 0, -4, -1, -4, + -5, -18, 3, -7, 3, -12, -9, 6, 3, 3, -10, -16, -5, -7, -5, -3, 7, 0, 3, 0, -1, -11, -7, -7, 2, -10, 7, -4, 4, 5, + -1, -6, -5, -7, -5, 0, 3, 4, 3, 3, 2, 0, 5, -2, -1, -1, -1, -3, 0, 0, 0, -1, 0, -2, 1, -2, 0, 0, 3, 6, + 2, 5, -1, -4, -2, 5, 4, -3, -5, -7, -7, -4, 1, -3, -6, 2, 2, 2, 0, 3, 6, 3, 7, 5, 5, 2, 6, 4, -4, -4, + -9, -1, 2, 1, 1, 5, -2, -7, -4, 4, 2, 0, -1, 1, 2, 1, -12, -5, 1, -2, 3, -3, 3, 2, 10, 2, 8, 2, 1, 4, + 0, -2, 3, 3, 5, -6, -11, -7, 8, 10, 4, -2, -7, -9, -4, 0, -2, 0, 9, 2, 1, -3, 3, -3, -6, -6, 2, -8, -6, -9, + 1, 19, 10, -7, 5, 18, 5, 4, -5, -9, -10, 0, -4, -3, -3, -3, 2, 9, 2, 0, 14, 0, -4, -5, 0, 6, 0, 2, 4, -12, + -6, -13, 7, -2, -2, 2, -8, -1, -1, -7, -7, -6, 3, 4, -5, 0, 1, -8, 1, 3, 6, 6, 1, -2, 4, 11, 10, 6, 2, 8, + 2, 7, -1, -2, -34, -10, -5, 1, 3, 8, 7, 9, -3, -10, 4, 4, -1, -2, 10, 7, -3, 2, 2, -8, -4, -7, 0, 1, -3, -11, + -1, -8, -1, 4, 4, 5, 7, 3, 3, -4, -1, -9, 3, 9, 9, 1, -4, 4, 8, -1, -11, -8, -3, -4, 0, 1, 1, 8, 1, 6, + 2, 5, -4, 5, 7, 0, -1, -3, 0, 1, 2, 1, 8, 0, -9, -1, 3, 6, 3, 3, 1, 3, -3, 8, 10, -4, 5, 1, 8, -1, + 15, 0, -4, 0, -1, -12, -10, 3, -4, -2, -5, -6, 2, -5, -11, -13, -2, -1, 9, 9, -3, 0, -7, -16, -2, 0, 3, -10, -4, 6, + 5, 10, 0, -3, -5, -2, -2, -3, 1, -1, -1, -3, 0, -1, -6, -4, 0, -1, 2, 1, 5, 1, 3, 3, 2, -2, 2, 6, 2, 1, + 6, -1, -3, 3, 2, 2, 2, 5, 5, -2, 3, 0, 2, -3, 0, 1, 0, -4, 2, -1, 1, -1, -4, -2, -4, -6, -3, -2, -4, 6, + 6, -3, 4, 7, 4, -5, -6, -2, -2, -1, 7, -4, 7, 6, 2, 2, 4, 0, 7, 1, -1, -3, -5, -6, 4, 0, 4, -4, -2, -8, + 0, 1, -3, -5, 2, -3, -5, 2, 4, 8, 6, 2, -3, 4, 3, 7, 4, 0, -5, 2, -1, -6, -4, -9, -3, 2, 6, 7, -6, 0, + -3, -2, -1, 2, 0, -6, 8, 23, 6, 2, 21, -1, -3, 4, -6, -14, 3, 1, -3, 1, -1, -1, 2, 12, 8, 9, -2, -4, 1, -4, + -6, -5, -5, -6, -8, -11, -6, 0, 2, 2, 4, -3, 3, 2, -7, -2, -3, 9, 4, 5, 1, 2, -1, -6, 1, -10, -6, -2, 1, -1, + 1, -11, -1, -2, 2, 4, -3, 4, -3, -20, 6, -3, -5, -3, 1, 0, 8, -9, -15, -12, -1, -6, -3, -2, 3, -1, 3, -4, -11, -11, + 3, 4, 8, -1, -1, 3, 1, 10, 1, -7, -2, -8, -3, -1, 5, 10, 8, 3, -4, 2, 0, -3, 3, 12, 5, 4, -1, -2, 0, -8, + 1, 5, 8, -8, -10, 6, 1, -4, 7, 18, 1, -1, 4, -1, -1, -3, -9, -2, -3, -4, 4, 2, -3, 3, 2, -2, -2, -7, 6, 4, + -1, -2, -3, 0, -1, -4, 1, 4, 6, -7, 0, -2, 6, 1, 9, 14, 1, 2, 0, -5, -2, -1, 4, 6, 7, -1, 4, -3, -6, 12, + -4, 3, -8, -3, 2, 3, -5, -3, -3, -1, 6, 6, 4, -2, -1, -1, -1, -1, 2, 8, 6, 0, 0, 1, -1, 3, 4, 0, -1, -4, + -1, 0, 1, 1, 1, 0, -5, 1, 3, 5, -1, -6, -2, -4, -5, -10, -4, 3, -4, 2, 6, 1, -1, 8, 7, 4, 5, -4, -2, -4, + -5, -4, -3, 2, 1, 3, -1, -3, 1, -4, -1, -5, -7, -4, 1, 3, -5, 1, 6, 8, 1, 2, 3, 1, -3, -1, -5, 0, 8, 5, + -4, -2, 8, 2, -1, 5, -2, -7, 1, 1, 1, 6, 0, 2, 13, -1, 2, 1, 1, 6, 0, 0, -8, -14, 0, -3, -6, -2, -4, -4, + -3, 2, 0, -3, 13, 1, -4, -1, -3, 6, 5, -3, 21, 5, -7, 0, -17, 0, 0, -7, -4, 7, 8, -13, -1, 2, 3, -1, -5, 7, + 0, 3, -4, 2, 3, -2, -4, 4, 5, 2, -5, 6, 2, 5, 14, 7, 0, -2, -15, 3, 5, 9, 10, 2, 8, -6, -1, 0, -3, -4, + -3, -4, -1, 7, -8, -3, -5, 9, -4, -3, -8, -3, 2, -2, -2, -2, 0, 0, 3, -1, 7, 4, 2, -1, -3, -1, -8, 0, -7, 6, + 0, -4, 0, -3, -13, -7, -1, 1, -2, -6, -5, 1, -6, -4, -8, -9, 7, 5, 1, -2, -1, -5, -3, 0, 5, 5, 1, 1, 15, 2, + -2, 0, 1, -5, -3, -1, 13, 15, 4, -10, -4, 3, 2, 7, 12, -2, -9, -8, 8, -3, 1, -7, -6, 2, -6, 0, -7, 4, 1, 3, + -2, 5, -7, -1, 2, 7, 5, 2, 2, 8, 7, 5, -4, 0, -6, -4, -3, 0, 3, 7, 1, 2, -3, -2, -17, 2, -6, -5, 5, -12, + -14, 0, -6, -9, -2, 2, -5, 6, 14, 14, 10, -4, -4, -7, -12, 6, 2, 3, -1, 2, 4, -1, 3, 6, 8, 2, -3, -16, -9, -4, + 3, 6, 1, 1, -4, -6, -1, 3, 10, 7, 8, -1, 2, -3, -2, 1, 2, 4, 0, 1, -1, -3, -5, -3, -5, -6, -2, -8, 1, 2, + -10, -6, 0, -3, -7, 1, -2, 2, -2, -5, 2, 4, 2, 1, 1, 5, 1, 1, 1, 2, -2, -5, -5, -3, 1, -2, -3, 5, 1, -3, + -3, -5, 2, 5, 6, 8, 7, -5, -3, -3, 2, 2, 2, 0, 0, 2, 4, -4, 4, 3, 4, 0, 3, 1, 7, 6, 3, 1, -7, -6, + -1, 1, 3, -4, 5, 7, 0, -5, 4, -4, 6, 3, 6, -4, -7, -5, -11, 28, -3, -15, 9, -9, 3, -5, 0, 2, 12, 7, -5, 5, + 9, -3, 2, -1, -4, -7, 7, -6, -3, 2, 10, -3, -2, 0, -8, -8, 8, 4, 3, -2, -2, 1, -7, -3, 2, 1, -4, -2, 13, 11, + 4, 2, -2, 0, -8, -10, -12, 3, 7, 12, 0, 2, 7, -5, -6, -10, -3, -6, 3, 22, 8, 2, 1, -1, -6, -6, -6, -5, 0, 1, + 4, 0, -3, -1, -1, 3, 2, -2, -4, -5, 3, 1, -4, -8, -13, -14, -5, -1, -7, -7, 0, 1, 7, 2, 3, 0, 0, 9, 10, 5, + 7, 6, 1, 8, 1, 5, 9, 10, 10, 9, 10, 11, 3, 2, 3, 1, -4, -2, 0, -1, -2, -6, -6, 0, 6, 13, 0, -18, -8, 0, + -8, -2, -7, -3, -3, -9, -6, -11, 1, 3, 2, 1, 7, 18, 4, 6, 0, -2, 12, 6, 11, -1, -6, -1, 4, -3, -8, -2, -1, 1, + -4, -2, 5, 10, 2, -6, -2, -11, -12, -13, -16, -12, -13, -10, -11, -17, -21, -15, -12, -7, 10, 7, 3, 2, 2, 0, 4, 2, -3, 1, + 2, -4, 0, 2, 1, 3, 3, -2, -2, 2, 2, -4, 0, -7, -7, -9, -1, 3, 1, -5, 1, 1, 6, 6, 9, 5, 3, 5, 5, 3, + 2, -2, 1, -5, -7, -11, -1, 0, 1, -6, -2, 4, 2, 12, 9, 9, 4, -4, 0, -1, 4, -7, 0, 3, 5, 6, 2, 4, -2, 3, + 0, 8, 7, 5, 2, -5, -1, -2, -3, -5, 5, 1, 6, 7, 5, -1, 7, 7, 5, 6, 4, 0, -5, -6, 3, -1, 2, -2, 1, 6, + 3, 3, 2, 3, 0, 1, 6, 1, -1, -3, 8, 3, 0, 4, 11, 1, -1, -5, -13, -8, -15, -15, 5, 23, -19, 1, -10, 17, -16, -14, + 25, 16, 8, 1, 6, 24, -1, -1, 4, 22, -6, -4, -1, 7, -4, 1, 9, 0, -3, 1, -2, -2, 0, 4, -12, 7, -7, -14, -3, 7, + -10, -3, 6, 2, 11, 0, 3, -4, 5, -1, -5, 5, 6, -5, 4, -2, -2, 3, -4, -3, -5, -5, -4, -3, 47, 3, 8, 0, -2, -4, + -8, -9, 3, 0, 1, 2, -6, -5, -12, -8, -10, -3, -7, 1, 9, -5, -6, -9, -18, -19, -18, -15, -9, -14, -9, -11, -5, -3, 3, 20, + 23, 15, 12, -1, -3, -15, -13, -12, -5, 6, 6, 10, 6, 7, 1, -5, 1, 6, 4, 5, 9, 13, 14, 11, 13, 15, 13, 7, 14, 20, + 27, 13, 2, -13, -20, -11, -18, -17, -10, -15, -15, -7, -11, -4, 11, 19, 26, 12, 2, -12, -20, -28, -23, 0, 18, 40, 34, 17, 10, 5, + 2, -2, -4, 10, 5, 11, 13, 11, 6, -7, -5, 5, 4, 6, 6, -2, 4, -19, -58, -45, -45, -35, -18, -20, -12, 9, 4, 6, 4, 3, + 2, 9, 1, 6, 7, -1, 4, -4, 0, 0, -3, -4, -5, -4, -7, -4, 0, 5, 4, 4, 5, 12, 13, 18, 10, 12, 10, 9, 9, 2, + 4, -5, -13, -17, -21, -24, -26, -22, -19, -13, -8, 0, 4, 7, 8, 11, 5, 2, 2, 8, 4, 3, 2, 11, 9, 9, 9, 11, 16, 13, + 21, 17, 10, -3, -10, -13, -9, 2, 9, 12, 16, 18, 31, 40, 49, 40, 25, -2, -29, -55, -71, -77, -54, -25, 10, 29, 39, 39, 38, 24, + 12, 12, 14, 10, 14, 13, 10, 12, 13, 28, 33, 38, 36, 23, -15, -59, -105, -123, -127, -103, -64, -25, 16, 42, 62, -50, -31, -47, 89, -40, + -57, 60, 71, -73, -50, 91, -13, -37, 38, 8, -30, -24, 52, -36, -6, 23, -14, -32, 6, 25, -13, -4, 3, -10, -6, -1, 7, 0, -2, -7, + 4, -4, -11, -19, 12, -12, -10, 2, 4, -5, -3, -2, -7, 5, 6, 9, 12, 2, 2, 12, -8, -12, 2, 1, 4, 6, 2, -10, -9, 101, + 9, 3, 8, 3, 0, 7, 3, -1, 2, 3, -3, 3, 5, 0, 3, 7, 1, 5, 4, 0, 6, 4, 7, 8, 8, 7, 4, 5, -2, 2, + 7, 7, 5, -2, 5, 3, -1, -1, 3, -2, -3, 1, 2, 3, 0, -1, 0, 3, -1, -2, -4, 4, -6, -4, -1, -2, -4, -2, -1, -6, + -1, -4, -2, -3, -2, 1, 4, -1, -2, 6, 5, 0, 3, -6, 1, -3, 0, 1, -8, 3, 1, 0, -1, 5, 2, -3, 2, -3, -4, 0, + 4, -6, -8, -3, -5, -2, 1, 6, -8, -3, -7, -2, 2, 8, 3, 1, 3, 0, 2, -11, -4, -1, -4, -5, 1, -5, -3, -1, 3, 4, + 3, 5, 0, 1, -3, -1, 1, -5, -7, -6, -4, 0, 1, 2, 0, -4, -4, 0, -2, -4, -4, 1, 3, 8, 10, 10, 6, 3, -2, -2, + 0, 3, 3, 1, -4, -5, 2, 0, -2, 0, 0, 1, 4, -2, -1, 1, 0, 3, 2, 4, 6, 6, 2, 2, 0, -1, 3, -2, -5, -7, + -1, -4, 0, -3, -8, 0, 0, -2, -3, 0, 3, -1, 4, -3, -1, 2, 4, 4, -2, 2, 1, 2, 1, -3, 2, 1, 0, 1, -3, 1, + 0, -6, -4, -6, 3, -1, 6, 1, 2, -3, 0, -7, -2, -1, 2, 6, 5, 0, 5, 2, 2, 2, 1, 2, 4, 3, 2, 1, 0, -1, + -4, -11, 14, -3, 0, 16, 9, 4, 9, 8, 6, 7, 0, -7, -6, 0, -6, -5, 5, 2, 1, -3, -8, -5, -7, -2, -14, -10, 3, -12, + -6, 0, 0, 4, 0, -15, -5, 0, 7, 2, 4, -5, 2, 0, -2, -2, -1, 3, 3, 3, 5, -3, 2, -4, 1, 2, 3, 4, 5, 6, + -4, -1, 2, 1, -2, 2, 5, 1, 1, 8, 9, -1, 3, 5, 3, 7, 6, 4, 1, 9, 10, 11, 4, 4, 4, 10, 3, -4, -3, -3, + -3, -1, -4, -4, -5, -2, 1, 0, 0, 3, 2, 2, -3, -7, -16, -16, -11, -5, 4, -2, -9, -3, -3, -6, -4, -2, -5, 4, 2, -3, + -3, 2, -1, 1, 3, 9, 11, 5, 4, 2, 8, 2, -3, -3, -1, -1, -3, -4, -2, -4, -2, 2, 4, -4, -1, 3, 7, -1, -4, -6, + -6, -3, -5, 9, 10, -1, 1, 11, 1, -6, -3, 1, 3, 2, -1, 4, 6, 4, 6, -2, 0, 1, -5, 3, 2, 6, 3, -4, -2, 1, + 6, 4, 4, 4, 7, -2, 4, 1, 7, 0, -4, -4, -5, -4, -1, -3, 1, 0, -2, 1, -2, -2, -9, -7, -2, -4, -3, -2, 3, 4, + 2, 0, -1, 0, 2, 0, 2, 5, 1, 0, 5, 7, 5, 1, 0, -1, 3, 4, 1, -1, -1, -2, -3, 3, 2, 0, 4, 3, -1, 0, + -3, -1, 2, -1, -2, 6, 0, -1, -1, -9, 0, -2, -1, -4, -9, -8, -6, -14, -5, -7, -3, 2, -1, 2, -2, 1, 4, 6, 0, -3, + -1, -1, -6, 0, -1, -1, -2, -1, -6, -1, 0, 0, -1, -5, -4, 1, -3, -6, -1, 1, -4, -3, -3, 5, 1, 6, 1, 4, -1, 6, + -4, 3, -1, 4, 0, 1, 13, 5, -8, 7, 3, 11, -4, -3, 3, 3, -7, -4, 6, 5, 0, -3, 3, -9, -2, -6, 4, -3, -1, 10, + 8, -8, 0, 2, -9, -3, 7, 0, -3, 3, -8, 0, -11, -1, 5, 4, 6, 0, 0, 3, 0, -4, 0, 1, 1, 3, -4, 6, -3, -3, + 2, 5, 6, 2, 8, 1, 6, 4, 3, -6, -5, -4, 2, -2, -8, -2, 0, -1, 1, 3, 4, 1, 1, -4, -1, 0, -2, -5, -5, 0, + -8, -1, -1, -1, 5, -1, -5, -8, 0, 0, 1, 0, -1, 0, -1, 1, 3, -5, 1, 0, 2, 3, -3, 4, -2, 0, -3, 0, -3, -2, + -1, 3, -2, 0, 2, -3, -2, 1, -4, -2, 0, -5, -11, -3, -4, -7, -4, -2, -6, -2, 6, 0, -8, -5, 6, 4, -5, -10, -6, -8, + -4, -6, -5, -4, -6, -7, -2, -4, 2, -1, -3, -6, -7, 1, -2, 2, 7, -6, -1, 2, 0, 0, 5, 7, 3, 1, 2, -2, 2, -9, + -2, 0, 1, -2, 4, -2, -2, -2, 2, 8, -4, -4, -3, 0, 1, 2, -1, -3, 3, 5, 0, 1, 0, -3, -3, -1, 1, 1, -2, -4, + -7, -4, -4, 2, -1, -1, 0, -3, 2, 2, 3, 2, 2, 2, 3, 2, 1, -3, -2, -3, -2, 3, 1, 1, 5, -1, -1, -2, -1, -3, + -5, -5, -1, -1, 3, 1, -2, 0, 2, 3, 4, 2, 3, 1, 3, 4, -4, -5, -4, -1, 4, 6, 3, 6, 2, 0, 2, 4, 4, -1, + -2, -1, 1, 1, -2, -1, -2, 0, 3, 2, 2, -2, 0, -5, -3, 4, 6, 4, 1, 3, 5, 3, 1, 0, -7, -4, -1, 2, 1, 0, + -5, -1, -1, -3, -1, -3, 3, 3, 0, 0, 1, 23, -5, -11, 6, 7, -4, -8, -6, 0, -12, -6, -1, -6, -8, 2, -5, 2, 4, 0, + -6, -1, -5, 9, 8, 8, 0, 1, -3, -5, 8, 4, 0, -1, -4, -5, -5, 5, 3, 6, 4, 0, 6, 5, 2, -7, -4, 0, 4, 0, + 2, 6, 5, 0, 3, 1, 0, 0, -2, 6, -6, -3, -7, -6, -7, 3, 0, 2, 1, -5, -1, -10, -7, -4, -9, 0, -3, 0, 2, 0, + -1, -2, -3, -10, -5, 0, 5, 3, 2, 6, -4, 0, -3, -5, 2, 0, -4, -10, -7, -1, 0, -2, 1, 9, 4, -1, -1, 0, 2, -7, + 1, 2, 0, -1, -8, -5, -6, -5, -5, -4, -4, -3, -1, -6, -2, -6, -1, -8, -9, -11, 1, 0, -4, 0, 0, -6, -4, -1, -3, -2, + 4, -1, -3, -10, -3, 6, 0, -4, -3, 1, -3, -4, -2, -2, -2, 0, -2, -2, 11, 2, -8, 2, -4, 8, 4, -5, 2, 7, 4, 3, + 3, 1, -4, 0, -8, -4, -7, 8, -3, 0, 4, 3, 0, 9, 4, 3, -1, -1, -1, 2, -1, 2, 4, 5, 1, 2, 2, 6, 3, 1, + -4, -2, -3, 0, -4, -1, 5, 5, 3, -5, -4, -3, 2, 2, -2, -1, -3, -5, 0, -1, -2, 6, 6, 9, 7, 4, 6, 0, -1, -1, + -1, -2, -2, -8, -6, -3, -4, -9, -8, -5, 1, 4, 1, -1, 5, 5, 3, 4, 1, 0, 1, 2, 0, 0, 0, 4, 5, 1, -4, 1, + -2, -1, 1, -1, 5, 4, 7, 0, -6, 4, 4, 2, 3, 3, 0, 5, 3, 6, 4, -1, -6, -6, -2, -6, 1, -5, 0, -8, -1, 0, + 0, 2, -2, 2, 3, 4, 0, 1, 0, -3, 0, 6, 1, 5, -4, -5, 15, -16, -21, 19, 7, -8, -7, 2, 8, -8, -9, 1, -8, 1, + 5, 1, 5, 10, 2, -1, 3, 8, 9, 8, 6, -1, -1, -1, -4, 5, 5, 6, -2, -6, -10, -3, 0, 0, 2, 5, 1, 3, 6, 3, + 5, 5, 2, 0, 4, 6, -2, 3, 3, 3, 6, 5, 9, 2, 6, 4, 10, -2, -2, 4, -1, -4, -8, -5, 2, -4, 1, 6, 0, 2, + 0, 5, 9, 12, 7, 2, 0, 0, -3, -2, -6, -10, -8, -7, -8, -6, -1, -6, -2, -6, -3, -8, -9, -5, -6, 0, 3, 6, 7, 6, + 1, 9, 11, 3, -3, 1, 5, 6, 10, 19, 14, 9, 20, 19, 27, 31, 34, 37, 30, 25, 15, 5, -3, -9, -9, -7, -18, -11, -20, -11, + -10, -9, -8, -14, -15, -13, -5, -10, -10, -18, -5, -8, -11, -9, -11, -9, -12, -9, -4, -10, -2, -7, -4, -15, -4, -2, -14, -2, 5, -5, + -3, -6, 1, 9, 8, 11, 9, 4, 13, -5, -6, -2, -3, -7, 0, -6, -1, 7, 5, 7, 5, 5, 2, 3, 5, 4, 6, 2, -2, -3, + -3, -2, 0, -4, -8, -8, -3, -1, 5, 2, 1, 2, -1, 2, 1, -2, -6, -2, -3, 3, -3, -5, -6, -1, 0, 3, 6, 8, 8, 8, + 10, 7, 8, 0, 3, 8, 5, 3, 0, -2, 1, -3, 1, 5, 9, 7, 10, 12, 12, 7, -1, 2, -9, -11, -8, -9, -6, -9, -9, -7, + -3, -4, 5, -2, 0, -3, -2, -3, -5, -7, -6, -6, -13, -7, -3, 4, 1, 1, 2, -2, 5, -1, 2, -1, -5, 0, -1, -1, 2, 6, + 2, 6, 1, 2, 5, 4, 1, 3, 2, -3, -4, -2, 4, -2, -4, -3, -7, -7, 1, -3, 6, -1, -21, -32, 7, -5, -35, -6, -25, 4, + -5, -24, -2, 1, 4, -1, 0, 8, -3, 5, 11, 0, 5, -1, -3, 4, -5, -4, -7, -3, 4, 8, 4, -2, -3, -5, -3, -1, -2, 1, + 0, 0, 2, -2, 2, 0, 2, -4, 2, -4, 0, -1, 3, 2, 0, 6, 2, 1, 0, 5, 2, 8, 3, -3, 25, -7, -2, 0, 3, -5, + -5, 4, 1, -5, -2, -1, 0, 9, 6, -2, -8, -6, -12, -7, -5, -4, 4, 5, -1, 0, 0, -6, -8, -3, -3, 5, -8, -8, -6, -5, + -9, -3, -16, -19, -21, -22, -30, -35, -32, -31, -29, -21, -12, -16, -17, -22, -15, -8, -8, -4, -7, -8, 1, 0, -14, -20, -23, -27, -27, -16, + -9, -1, 15, 12, 5, 16, 8, 4, 5, 7, 20, 18, 19, 14, 20, 16, 23, 17, 14, 16, 13, 17, -1, 5, 6, 9, 1, -1, 5, 9, + -1, 1, 6, 5, 8, -3, -10, -2, -3, -1, -3, -2, -4, -6, -11, -17, -1, -1, -6, -15, -9, -2, 3, -9, 6, -8, -4, -4, 2, 2, + 6, 9, 8, 2, 0, 5, 4, 6, 7, 6, 3, 5, 1, 2, 5, 4, 6, 4, 7, 7, 4, -1, 0, 1, 4, 1, 2, 5, 5, 2, + 0, 1, 4, 5, -1, 2, -1, 0, -2, 4, 7, 14, 11, 9, 9, 11, 10, 14, 8, 9, 9, 4, 8, 8, 1, -9, -14, -14, -13, -2, + -2, 1, 8, 10, 7, 13, 3, 6, 5, 3, 9, 9, 4, 4, 10, 7, 8, -1, 0, -1, 4, -3, -8, -6, -6, 7, 8, 10, 8, 10, + 5, 7, 2, 2, 3, 4, 8, 4, 8, 8, 2, 7, -2, -5, 4, 7, 13, 18, 13, 11, 4, -4, -3, -1, 6, 4, -127, 96, 18, -38, + 44, -34, 14, -34, 6, 64, -48, -23, 26, 30, -17, -9, 7, -21, 2, 2, -16, -9, -1, 7, 11, 5, 6, 8, 15, 16, 8, 6, 0, -9, + -4, -7, -4, -5, -6, -9, -7, 6, 0, 0, 2, -1, 7, -3, -10, -4, -7, -11, -17, -7, -8, 2, 0, 3, -2, -1, 0, -6, 5, 54, + -3, -3, -8, 5, 7, -1, 4, 1, -6, -5, 1, 0, -1, -3, -4, -7, -3, 1, 9, 0, -1, -7, 3, 9, 1, 4, 2, -5, -3, 0, + 0, 1, -3, 5, 2, -1, 7, 4, 1, -7, -3, -6, -5, 2, -2, -2, 0, -8, -1, 0, 0, -2, -1, 3, 3, 2, 8, 1, -2, 2, + -2, -11, -13, -3, -1, 0, -5, -2, 0, 8, 1, -3, -1, -6, -5, 1, 2, 9, 7, 7, 1, 4, 5, 7, -1, -6, -3, -9, 6, 5, + 1, 3, 6, 5, 2, -2, -7, 4, 2, -1, -12, -1, -2, -4, 1, 2, 3, -10, -12, -3, -13, -9, -12, 5, -2, 0, -6, -5, -13, 5, + 3, 7, 3, 8, 9, 12, 7, 2, 6, 3, 6, 2, 6, 1, 6, 2, 4, -3, -6, -9, -10, -11, -7, -8, -11, -8, -3, -7, -3, 2, + -1, -6, -3, 4, -2, 3, 4, 0, 0, 2, -2, 1, -4, -3, -6, -5, -4, -14, -13, -14, -12, -7, -2, 5, 7, 3, 10, 5, 6, 7, + 5, -4, 0, -1, 0, 4, 4, -1, 8, 8, 3, 3, -1, -3, 0, 0, -4, 1, 6, 3, 0, -4, 4, -3, -1, -6, 12, 7, 7, 10, + 13, 7, 1, 2, -2, -6, -15, -3, -1, -9, -7, -7, -6, -2, 4, 2, 6, 0, 0, 3, -3, -10, -4, -4, 0, 1, 5, -4, 6, 22, + -2, 53, -11, 0, 0, 14, 1, 12, 13, 15, 5, -13, 2, -1, -12, 7, 0, -8, 2, 0, -11, -10, 10, 14, -3, 6, -6, 4, 6, -4, + 0, -3, -5, 1, 13, 6, 1, 0, 12, -5, 0, -7, 12, 1, -4, -4, 2, -6, 12, 14, 9, 3, -1, -4, -10, -4, 5, 0, -3, 1, + 6, 12, 7, 11, -10, -1, -5, 0, 1, 7, -6, -1, -1, -4, -4, -8, 1, 7, 0, -1, -7, -1, -2, 0, -9, -8, -10, -5, 4, 3, + 5, 4, 6, 2, 7, 8, 5, 1, -3, 3, -4, -4, -7, 7, -4, -1, -4, -5, 0, 3, -2, 4, 4, 5, 2, 2, 0, 4, 3, 2, + -1, -1, 4, 0, -8, 3, -5, 4, 7, -5, -4, -6, -15, 2, -2, -3, 0, -5, -8, -4, 0, -3, 0, 9, 11, 6, 3, 6, 10, 11, + 13, 6, -4, 8, -1, 9, 11, 3, 8, 7, 15, 7, 11, 11, 15, 7, 9, 5, 4, 6, 0, 3, 2, -5, -6, -3, 4, -10, 1, -3, + 6, 12, -1, -4, 2, 8, 9, 12, 9, 6, 0, 2, -4, -2, -8, -4, 7, 1, 4, -6, -7, -1, 3, 4, 2, 0, -2, 2, 3, 0, + 5, 9, 3, 10, 4, 8, 1, 3, -4, -4, -10, -3, 2, 0, 9, 10, 3, -8, 1, -1, 1, -6, -5, -7, -10, -7, -7, -5, -4, -10, + -9, -7, -8, -9, -14, 0, 0, 2, 0, 0, 0, 4, 9, 12, 18, 10, 1, 6, -3, -5, -4, -1, -8, -4, 0, -1, -7, 2, -2, 7, + 9, -2, 0, -3, -5, -1, -2, -7, -11, -6, 3, -3, -6, 2, -4, -1, 1, 11, 13, 10, 19, 9, 8, 9, 4, -4, -4, -11, -10, -5, + -10, 2, -4, 0, 3, -16, 40, 3, -3, 7, 3, 9, 12, 18, 4, 4, 9, 2, -5, -5, -2, -2, -19, -8, -9, -13, -5, 1, 16, 3, + -11, -7, -7, 9, 4, -2, -3, -4, -1, -6, -2, 2, 0, 14, 5, -7, -9, -3, -1, -9, 0, -2, 8, 2, 7, 4, 8, 0, -4, 3, + 9, -6, 7, -10, -4, 13, -1, 15, 12, 2, 10, 1, 1, 6, 4, 5, 2, -2, -6, 2, 6, 12, 3, -10, -1, 4, 3, -5, 4, 1, + -1, -3, -9, -11, -8, -7, 0, -1, -1, -5, -8, -7, -12, 1, -6, -2, -2, 14, 4, 7, -5, -3, 6, 2, 1, 7, 2, 4, -4, -7, + -2, -1, -1, -4, 9, 9, 8, 15, -2, 0, 6, 7, -4, -3, -7, -1, 1, -6, -6, 3, 8, 6, 4, -2, 4, -2, -8, -5, 3, 4, + 1, 3, 10, 5, -3, 1, 0, 7, 4, -1, 13, 17, 8, -8, 2, -3, -7, -1, -6, -3, 2, -8, 4, 2, -3, -3, 1, -8, -8, 4, + 5, -2, -15, -7, -6, 1, 2, 4, 6, 13, -2, -1, 6, 6, 1, 0, 1, -5, -5, -8, -7, -2, -6, -2, 1, -5, -1, -6, -6, -5, + 4, 5, 2, -1, 4, 0, 0, 9, 6, 1, 7, 3, 2, -2, -2, -2, 1, 7, 5, 3, -3, -8, -5, -3, -9, -7, -3, -2, -6, -4, + -2, 1, 8, 1, -1, 8, 6, 2, -5, -4, -10, -11, -9, -11, 1, 1, -1, -11, -3, 2, -4, 1, -1, 11, 6, 9, 8, 9, 7, 3, + 4, 4, 11, 4, 8, 1, 0, -2, 1, -8, -4, -2, -7, -9, -6, -1, 1, -9, 6, 5, 3, -1, 5, 5, 0, 12, 7, 0, 9, 5, + 2, -1, -17, -17, -14, -12, 1, -2, -6, -12, -6, 56, 2, 0, 20, 20, 17, 0, 4, 2, 15, -7, 15, -8, -3, 11, -5, -12, 4, -5, + -2, -6, -3, 3, -2, -6, 5, -3, -4, -12, -6, -2, -15, -6, -3, -11, -12, -3, -4, 9, -11, -13, -7, -12, -14, -17, 0, -1, 2, 12, + 2, 4, -9, -13, -11, 0, -6, -5, -7, -6, 7, 12, 7, 24, 14, -23, -7, 1, 4, 19, 13, 1, -9, -5, 1, 0, -4, -11, -4, 12, + 1, -1, 1, 3, 0, -5, -2, -2, 5, -2, 5, -1, 4, 6, -1, 6, 3, 4, 5, 11, 14, 7, -1, -7, 2, -7, -7, 7, -1, -1, + -8, -8, 2, 1, 5, 10, 2, 4, 9, 12, 3, 1, -6, -3, 12, 11, -10, -5, 2, -3, 9, 6, 0, -5, -7, -14, -9, -14, -11, -7, + -10, -6, -11, 0, 17, 11, 6, 5, -2, -4, 2, 9, 13, 7, -9, 10, -3, 1, 6, 8, 17, 5, 14, 3, 4, 9, -3, 2, 9, -7, + -10, -1, -3, -19, 3, -8, -5, -12, -13, -9, -9, 1, 1, -2, 7, -3, 5, 0, 5, 4, 6, -4, -7, -8, -16, -6, -1, 6, 6, 10, + 10, 8, 4, 5, 4, 0, 5, 4, 4, -3, 3, 3, 0, 1, 0, -4, -6, -7, 1, 1, 5, 5, 3, -4, -4, -10, -12, -5, -2, -10, + -18, -8, 4, 5, 4, -5, 0, 6, -7, -1, -1, -3, 0, -2, -3, 2, -5, -1, 1, -2, -3, 0, -3, -1, -6, -11, -7, -10, 9, -6, + 0, 10, 4, 0, 4, 9, 12, 7, 2, 5, 6, 8, 7, 0, -1, -1, -10, -12, -8, -7, -5, -6, -16, -11, -6, -5, -14, 0, -2, 2, + 4, 12, -5, -1, 5, -7, -3, -22, -15, -6, -11, -16, -18, -21, -19, 21, 79, 0, 14, 11, 21, 26, 5, 0, 9, 9, -1, 3, -19, 2, + 12, 4, -12, -4, -13, -12, 4, 6, 10, 9, 1, -5, -9, -6, -13, -10, -12, -2, -4, -3, -2, 3, -4, 3, -11, -10, -2, -12, -15, -14, + -14, -1, -7, -11, 4, 9, 1, -7, -9, -8, -5, 2, -2, -1, 2, 3, 11, 4, 5, 10, 2, 3, -1, 9, 3, 4, 2, 4, -4, -6, + -4, -4, 6, 15, 16, 0, 11, 10, 8, 9, 3, 2, -5, -6, 6, 10, 0, 15, 0, -10, 6, 2, -5, 0, 0, 3, 8, -1, 0, 10, + 15, 11, 20, 10, 18, 15, 16, 12, 8, 3, -1, 8, 12, 22, 9, 10, 10, 5, 1, 4, -1, -5, -8, -4, 2, 7, 11, 18, -5, -2, + 11, 0, 8, -5, -4, 4, -1, -4, 1, 22, 13, 23, 7, 6, 31, 37, 26, 28, 13, 15, 18, 13, 9, 5, -8, 8, -7, 0, -22, -23, + -29, -51, -14, -24, -34, -24, -38, -26, -46, -22, -23, -4, -18, -15, -16, -21, -16, -24, -14, -2, 6, 7, 7, 15, 8, 5, 10, 0, -3, -7, + 2, 4, 9, 10, 6, 10, 7, 7, 1, 6, -1, -6, -7, -2, 0, 6, 6, 8, 1, -7, -2, -2, 1, 0, -2, -5, -3, -7, -15, -16, + -7, -7, -6, 1, -3, -3, -10, -5, -14, -13, -12, -12, -11, -12, -6, -7, -6, -19, -18, -10, -13, -15, -10, -7, -13, -22, -11, -5, 2, 3, + -10, 1, -11, -1, -9, 4, 3, 10, 0, 13, 4, 11, 0, 7, 8, 13, 4, 13, 6, -4, -5, -8, -8, -1, -23, -19, -34, -50, -59, -61, + -62, -59, -30, -41, -51, -46, -60, -70, -66, -39, -13, 3, 10, 6, 9, 10, 20, 6, -1, 6, 72, 127, 0, 6, 14, 29, -4, -23, -21, -1, + 4, 1, -4, -26, -8, 14, -10, 0, 13, -27, -10, 0, 8, 20, 0, -11, 3, -3, 5, -4, -6, -6, -11, -10, -5, 4, -4, 3, -3, 1, + -16, 2, -4, -18, -15, -6, -18, -11, 0, 0, -1, -3, -9, -2, -7, -5, 2, -10, -1, 7, 14, 10, 16, 14, -29, 31, 19, 10, 18, 24, + 9, 12, 7, 3, -4, -22, -5, -2, -6, -8, -2, -2, 7, -15, -22, -18, -11, -4, 6, 2, 16, 22, 14, -5, -8, -4, 1, 8, 11, 1, + 1, -7, -16, -10, -5, 7, 2, 3, 8, 15, -3, -27, -25, -12, -4, 5, 7, 16, 12, 13, 3, 0, 13, 14, 13, 4, 17, 10, 13, 18, + 16, 31, 26, 13, 14, 14, 14, 21, 13, 12, 7, 0, -11, 8, 10, 4, 3, -20, -6, -3, -8, 1, 8, -1, 1, -21, -38, -38, -24, 8, + 46, 38, 55, 33, 24, -1, -20, -10, -24, -8, -8, -6, -18, -22, -4, -35, -17, -17, -22, -21, -29, -7, -3, -3, -20, 30, 23, 13, 13, 13, + 8, 12, 0, 2, -11, -12, -3, -5, 1, 0, 6, 8, 8, 5, 2, -2, -4, -12, -4, -7, 1, 4, 5, -3, -8, -1, 4, 6, -1, 4, + 2, 4, -5, -7, -5, 8, -4, -9, 2, 6, -5, -6, 1, -7, -1, -1, -8, 0, 3, -1, 5, 12, 8, 13, 6, 12, 9, 11, 16, 13, + 9, 19, 15, 14, 13, 16, 16, 15, 22, 18, 19, 21, 17, 22, 30, 29, 21, 2, 5, 10, 8, 6, 20, 15, 15, 2, -5, -18, -11, 0, + -2, -6, -16, -29, -42, -71, -82, -64, -65, -74, -68, -56, -67, -61, -54, -60, -48, -36, -33, -31, -23, -5, -3, -15, -28, 49, 101, -25, 8, 1, + -12, -7, -66, -40, -10, -6, -11, -4, -2, 11, 6, -26, 3, 6, -16, -9, 10, 6, 12, 1, -2, 9, 8, 2, 9, 3, -3, -7, 8, 1, + 0, 11, -6, -5, 0, 0, 5, 4, 3, 1, -1, 4, 8, 0, 6, 9, 10, 6, 13, 10, -5, 6, 7, 6, 17, 25, 24, 33, 29, 4, + 1, 0, -2, 6, 1, -4, -4, 6, 5, 3, 5, 3, 6, 2, 3, -3, -1, 1, -1, -3, 2, 6, 4, -1, 6, 5, -3, -6, -7, -2, + 2, -7, -3, 0, -2, 0, -5, -4, -4, 1, 3, 0, 4, 6, 3, 4, 3, 1, -7, 1, 4, -6, -6, 3, -1, -13, -4, 1, 1, 4, + -4, -8, -1, -2, -5, 9, 8, 4, 0, 6, 4, -6, -1, -6, -3, 7, -3, 5, 7, 2, -3, 0, 2, 4, 1, 2, -4, 3, -3, -2, + 0, -7, -4, -1, -8, -8, 1, 0, 11, 3, 2, -10, -4, 3, -4, 3, -1, 3, -4, 4, 0, 1, 4, 4, 4, 6, 2, 5, -8, -1, + -7, -5, -4, -4, -1, -4, -3, -1, -4, 1, 0, -2, 1, 1, 2, 0, 3, 3, -2, -1, 0, -1, 2, 2, 1, -2, -3, -4, -1, -2, + 2, 1, 6, 7, 5, -3, 0, -2, 1, 4, 3, 1, 3, 5, 2, -3, -1, 1, 4, -2, -7, -9, -7, 3, 4, 2, 0, -5, 6, 5, + 2, 2, 3, 1, 4, 4, -3, -3, -7, -1, 2, -2, -3, -1, 3, 6, 3, 0, 1, -4, -4, -6, 1, -4, 0, -1, -1, 1, 0, -1, + 3, 3, 4, 4, -3, 0, 1, -2, 0, 3, 1, 0, -4, 1, -10, -8, -4, -1, 2, 0, -2, -1, 2, 4, 5, -1, 9, 1, -4, -1, + -4, 0, 14, 9, -1, -4, 4, -10, -8, -4, -13, -3, -4, 7, 7, 1, 5, -7, -15, -2, 0, -3, 3, -10, -5, 2, -1, 6, 1, 0, + -2, -4, 1, -7, -1, -8, -3, 0, 6, 1, 4, -2, 0, 9, -1, 5, 5, 3, 6, 5, -3, -3, -3, -9, -5, -3, -1, 9, 6, 1, + 4, -6, 1, -6, 5, -8, -2, -2, -6, 0, -1, -1, -3, 0, -2, -2, 5, 4, 7, 4, 0, 1, 3, -9, -7, 4, 2, 6, 4, 5, + 7, 2, 1, 7, 9, -2, 2, 1, 5, 4, -3, -3, -9, -6, 0, -4, 4, 8, 3, 1, 5, -1, 0, 4, 4, 9, -5, -2, 7, 1, + 5, 8, 0, 6, 1, 3, 0, 5, -2, -11, 1, -2, -2, 0, -11, 3, 0, -9, 13, 11, 3, -3, 3, 5, -4, -3, -6, -1, -1, -1, + 5, 3, 2, -2, -5, -1, -4, 4, -4, 1, -4, 6, 5, 8, 2, 9, 1, 6, 3, -1, 3, 4, 8, 4, -1, 4, -1, -4, -1, 0, + -7, -9, -10, -8, -10, -3, 1, 3, 1, 0, 0, 3, -2, 3, 0, 2, -2, -4, -6, 0, -1, -3, -7, -8, -3, -4, -1, -1, -5, -5, + -3, -4, -6, -9, -8, 0, 2, 10, 6, 2, -1, 2, 1, -1, -3, -4, 1, 4, 7, 5, -3, -5, -3, 2, -3, -2, -2, -4, 2, -3, + -4, -4, -5, -1, 4, 5, -4, 4, -2, -5, 9, -3, -4, 2, -2, 0, -1, -4, 3, 5, 2, 3, 8, 7, -1, 0, 2, -2, -9, 1, + 1, -4, -3, 0, 0, 2, 1, 2, 9, 1, 1, -1, 1, -2, 0, 3, -1, -4, -8, -2, -2, 1, 5, 3, 3, 2, 0, -2, 4, 4, + 1, 0, 0, 1, 1, -12, -4, 10, 9, -5, -1, 11, 3, 2, -5, -3, -3, 2, -1, 2, -2, 4, -3, -5, -9, 5, 10, 2, -8, -5, + -2, 1, -11, -4, -1, 6, 4, -2, 1, -4, 8, 2, 7, 6, -4, -7, 3, 4, 1, 9, 13, 5, 4, 0, 3, -7, 7, -5, 2, -11, + 6, 3, 2, 2, -5, 5, 2, -5, -3, 14, -9, 0, 2, 0, 0, 1, -3, -6, 4, -2, -1, 2, 5, -3, 6, -1, 2, 2, 4, -2, + 1, 0, -1, 1, -4, -5, -2, -2, 4, 4, -1, -5, 1, 0, 3, -4, -7, -4, -3, 1, -2, -5, 2, 6, 2, -3, 1, -2, 3, -2, + 4, 4, -2, 5, 2, -3, -3, 1, 1, -2, -2, 0, -2, 9, 3, -1, 10, -2, 0, -1, -6, -2, -2, 9, 6, 2, 3, 3, 3, 0, + 1, -4, 15, 5, 9, -1, 2, -1, 4, -6, 1, 2, -6, 0, 1, -1, -6, 1, 11, -5, 5, 2, -3, -2, -7, -3, -2, 0, 0, -1, + -4, -1, 3, 0, 0, 0, -1, 4, -5, -4, -6, 0, -3, -4, -4, 1, -3, -3, 0, -1, -4, -3, 0, 3, 1, -2, 4, 3, -1, 4, + 2, -1, 0, -1, 3, 3, 2, 2, -1, -5, -6, 1, 6, 3, -1, -4, -1, 0, -1, -2, -5, -1, -3, 0, 1, -4, -3, 5, 4, 6, + 5, 0, 0, 0, -1, 2, 4, 1, -3, 0, 6, 0, -2, -3, 0, 3, -7, 1, 7, 3, 2, 5, -9, 2, -3, -5, -6, 0, -7, -3, + -1, -4, 7, 5, -1, 0, -4, -4, -2, -2, 0, 3, 5, 6, -6, 4, 4, 4, 1, -3, 7, 0, -5, 3, 2, 3, 1, 2, 0, -3, + 6, 7, -2, -3, 3, 2, 2, 2, -4, 1, -9, -2, -2, -1, -4, -16, -3, -2, 8, 0, 0, -2, 2, -1, 8, 6, 1, -1, -6, 12, + 6, 12, 2, -8, -3, 8, -6, -5, -3, -1, -14, -11, -5, 0, -8, -5, -5, 6, 4, 2, -3, -2, 5, -5, -3, 4, 2, 0, 0, -2, + -2, 2, 6, -3, 2, -3, 3, 11, -4, -7, 5, 1, 0, -6, 13, -4, 1, 4, -1, 2, 3, 2, 4, 1, -9, 4, 6, 3, 6, 10, + 2, -1, 0, 7, 0, 5, 1, -8, 2, 6, 5, 3, 2, -3, 0, 2, 9, 3, -3, -8, -6, 2, 3, 2, 3, -4, -11, -6, -5, 2, + 4, 7, 5, 1, 0, -3, -6, 1, 5, 4, 3, 5, 3, -6, -1, 0, -5, 2, 7, 3, -4, 1, -4, -8, -3, 0, -5, 2, 4, 10, + -1, 0, 5, 0, 1, 0, 1, 10, 11, 13, 11, 2, 1, 4, 8, 8, 4, 9, 7, -5, -1, -1, -2, -7, 4, -2, -1, 5, 0, -6, + 2, -10, -5, -3, -5, 0, -4, -7, -10, 2, -2, 1, -1, -6, -8, -6, -6, 0, 0, -3, -2, 3, 1, -5, -4, -4, 1, 8, 3, 7, + 7, 2, -5, -1, -5, -2, -5, -8, 0, 8, 4, -5, -8, 0, -1, 0, 3, 3, 3, 2, 0, 6, 4, 5, 0, 7, 1, -1, -5, 0, + -4, -1, 7, 0, -1, 0, -2, -7, -2, -4, 0, -1, 3, 3, -4, -4, -2, -1, 4, -2, 8, 2, 8, 9, 4, 0, -4, -8, -2, 1, + 5, 2, 2, 1, -6, -2, -7, -3, -1, 2, 3, -7, -2, -2, 1, 7, 9, -2, 0, -3, 2, -2, -3, -3, -2, -4, 3, -3, -3, -4, + -5, 7, 5, 2, 7, -2, -7, -5, -5, 12, 5, 4, -1, -3, -1, 5, -5, 3, -2, -7, -11, -1, 3, 13, 0, 7, 1, 7, 15, 11, + 6, 6, -5, -2, 9, 4, 12, 9, -2, -2, -2, -12, 1, -6, -2, 5, -5, -6, -2, -2, -4, 3, 1, 2, 2, -4, 0, -6, 0, -1, + -5, 4, -1, 5, 4, 4, -3, -2, -10, -10, -2, 9, 12, 0, 3, -3, 0, 8, 2, 3, -7, -7, 2, -2, -9, -3, 3, 5, 2, 7, + 6, 6, 5, -2, -2, -8, 0, -4, 6, 5, -4, 2, -4, -2, 4, 0, -13, -11, -1, 3, 4, -4, -3, -3, -4, -8, -4, -8, -8, -7, + 1, 0, 0, -8, 0, 1, 0, 0, 10, 1, -5, -2, 5, -3, 5, 4, 8, 0, 0, 6, 5, 7, 4, 6, 1, 7, 12, -1, -9, 6, + 5, -1, 2, 3, 6, -3, -18, -3, -5, 8, -3, -6, -1, -9, 2, 0, 2, 11, 4, 4, 11, 7, -4, 17, 6, 1, -2, 6, -11, -3, + -5, -12, -9, -13, -15, -8, -11, -5, -18, -13, -1, -7, -11, -4, -5, -18, -24, -6, -14, -17, -7, -9, -4, -7, -8, -6, -6, -7, 0, -2, + -2, -3, -3, -2, -8, -8, -9, -9, -5, -4, -4, -5, -4, -7, 3, -3, -1, -2, 7, 5, 7, 0, -4, -7, -11, -9, -3, -3, -4, 0, + 2, 0, -1, -2, 0, -1, -4, 0, 1, -1, -2, -5, -5, -2, -1, 0, 3, 1, -3, -3, 2, 0, -6, -6, -3, 2, 1, 2, 4, 0, + 2, -3, -5, 0, -1, 2, 3, 2, 4, 4, 7, -2, 0, 0, 1, 5, 1, 7, 1, 8, 10, 11, 5, 6, 16, 3, 2, 14, 14, 11, + 4, 1, -8, -6, 3, 0, 6, 6, 5, 8, 7, 0, 4, 1, 8, -2, 0, -1, -14, -18, 42, 0, 14, 11, 10, -1, 5, -2, 9, -14, + -1, 3, -6, -5, -2, -4, 4, -8, -6, -4, -13, -1, -1, -5, -4, -2, -6, -2, -4, 2, 6, 1, 1, -9, 2, 1, 2, -3, 1, 3, + 5, 9, 5, -1, -3, 3, 7, 2, 2, 8, -3, 9, 4, 2, 3, -6, 11, 14, -1, 5, 6, -4, 9, 10, -39, -3, -5, 6, 6, 10, + 11, 11, 8, 1, 0, 7, 7, 13, 11, 6, 7, 3, 5, 11, 0, -3, 3, 12, 27, 19, 1, 5, 5, 4, 4, -4, 2, 10, 13, 7, + 8, 9, 8, 7, 5, 3, 2, 4, 6, 13, 16, 14, 19, 8, 7, 12, 6, 11, 15, 17, 11, 14, 23, 13, 18, 29, 28, 20, 20, 17, + 21, 21, 18, 19, 20, 11, 14, 13, 17, 15, 13, 5, 3, 10, 10, 8, 12, 14, 19, 16, 15, 11, 8, 8, 10, 12, 13, 4, 6, 5, + 10, 8, 11, 10, 24, 6, 23, 17, 9, 10, 18, 22, 17, 18, 18, 14, 11, 8, 14, 4, 8, -4, 10, 8, -12, 2, 1, 1, -1, 1, + -3, -6, -2, -1, -4, -4, -5, -8, -3, -4, -1, 5, 6, 8, 8, 8, 4, -2, -1, -5, -3, 5, 5, 2, 0, 9, 7, 6, 5, 14, + 13, 11, 10, 8, 9, 14, 11, 10, 17, 17, 12, 16, 23, 19, 20, 22, 20, 16, 27, 23, 21, 26, 14, 15, 16, 19, 27, 24, 22, 23, + 24, 29, 29, 23, 22, 23, 22, 19, 30, 31, 28, 31, 25, 24, 19, 22, 11, 18, 16, 16, 15, 24, 24, 24, 19, 20, 18, 19, 12, 12, + 11, -2, -7, -2, -8, -19, -15, -12, -24, -23, -29, -25, -40, -38, -45, -54, -60, -58, -72, -82, -98, -103, -101, -104, -127, 34, -10, -22, -36, -25, + -17, 3, 1, -3, -9, 19, 3, -19, 4, 3, -10, 4, 20, -6, 6, 0, -1, 1, 12, 7, 9, 8, 8, 1, 5, 2, -2, 0, 1, 4, + 7, -6, -1, 6, 7, 3, -3, -3, 3, -2, -3, -1, -6, -1, 3, 0, 5, 1, -2, 2, 3, 3, 2, -11, -9, -4, -12, -6, 1, -24, + -6, 2, -4, -6, 5, 1, -10, 0, -6, 1, 3, 1, 3, -1, 8, 2, 7, -3, -7, -5, -1, 3, 4, -7, -1, 1, -1, 5, -3, 0, + -12, -12, -6, 8, 11, 4, -2, -12, 5, 6, -1, -6, 5, 5, 4, -3, -1, -5, -2, 2, 7, 2, -4, 4, 4, -2, -1, 0, 12, 8, + -2, -7, -3, -2, -2, -4, 1, 0, -8, -4, 14, -1, 0, -2, 2, -6, -4, -1, 4, 4, -10, 5, -3, 7, 2, 6, -5, 5, 0, -8, + -1, 8, 0, -4, 7, 8, -6, 3, 1, -5, -5, -7, -5, 4, -4, -3, -1, 0, -8, 4, -5, -3, -6, -7, 0, 7, 1, 3, -8, 8, + 1, -2, -2, -6, -5, -4, 3, 1, 3, 3, -1, -1, -4, 3, 1, 5, 3, 0, 0, -6, -8, 1, 1, -2, -4, -1, 4, 5, 2, 4, + -3, -7, -5, -1, -3, -2, -2, -10, -13, -8, 0, 5, 7, 8, 3, -6, -7, 4, 6, 3, 2, 1, 3, -5, -2, -2, -5, -1, -3, -2, + 0, -2, 1, -1, 0, 11, 0, 3, 1, 3, 1, -2, -1, 0, 0, 3, 4, 0, 5, -6, -6, 0, 12, 1, -3, 0, 3, -3, -2, -4, + 6, 3, 1, -5, 2, -5, -10, 6, 7, 2, 4, 4, 2, -1, -4, 0, 5, 0, -1, 6, 1, 4, 9, 6, 10, 0, 1, -6, -5, 11, + -2, 21, 14, -2, -15, -9, -1, 15, -5, -4, 1, -8, -1, -11, -9, 0, 2, 9, 3, -13, -3, 3, -5, 4, 3, -5, 4, -1, 8, -4, + -4, 9, -12, -7, -6, 6, 9, -4, 4, -7, 5, -12, -2, -1, -1, -2, -3, 6, -2, -10, 3, 5, -1, 7, 5, 8, 7, 2, 12, 0, + 6, 12, 2, 3, -24, 13, 16, 8, -5, -5, 0, -7, 1, -6, -7, 3, 3, -2, 3, 0, -10, -4, -4, -8, -2, 4, -8, -1, -7, -4, + 3, -6, 1, -6, -5, 0, -2, 5, 0, 1, -3, -5, -7, -1, 3, 12, 8, 3, 0, -9, -6, 11, 3, 0, 0, -2, -2, 7, 5, 4, + -2, 1, 10, 4, 8, 5, -2, 1, -8, -4, 9, -5, -9, -9, -2, 0, -5, -5, -1, 6, -3, -3, 8, 2, 11, 2, 14, 15, 7, -3, + 1, 7, 8, 4, 1, -9, -1, -5, -4, 10, 3, 1, 11, 2, 7, -11, -9, -7, -8, 4, 2, 9, 2, -8, 0, -6, -4, 3, -2, 1, + 0, -2, -4, -5, 3, 1, 1, 5, 6, 1, -3, 2, -1, 3, 2, 8, 2, -3, -1, -1, 3, -2, -2, 1, -3, -1, -3, 0, 0, 2, + 2, -4, -1, -4, -6, 1, 2, 8, 10, 1, 0, -4, -3, -7, -1, 3, 6, 6, 10, 1, -6, -2, 1, 4, -1, 4, 3, 2, -2, -2, + 0, 0, 2, 2, 6, -1, -6, 5, 1, -2, 0, 5, 5, 1, 4, 4, -1, -2, 0, -5, 1, -7, 2, -5, -6, -5, 5, 1, -6, -5, + -1, -2, -3, 3, 1, 0, 0, 0, -4, 3, -3, -8, 0, -10, -2, -2, -5, -1, -1, -9, -4, 7, -1, 5, -8, 0, -2, 4, 1, 6, + 4, 3, 3, 10, 1, -8, 18, 11, -2, -21, -12, 16, 1, -19, -4, 3, -1, 6, -6, 5, 4, -10, 10, 5, 3, -3, 2, -3, -3, -7, + -4, -4, -11, 7, -3, -1, -5, -6, -14, -11, 2, 3, -4, 1, 6, -6, -5, -8, 1, -9, -6, 0, 7, 0, -5, -12, 7, 0, 1, 8, + 1, -3, 8, 6, 5, 2, 8, -4, -2, -19, -1, 2, 4, 4, -3, 1, -13, 4, 6, -1, -7, -4, -9, -3, 3, 9, 4, 6, 2, 8, + 4, 9, 1, -9, -2, -7, 7, 15, 1, 0, -9, -1, 4, 9, 7, -2, -13, -3, 14, 2, -2, -5, 2, 3, -8, -9, 0, 9, 0, 6, + 5, -2, -3, 3, 6, -12, -2, 5, -1, -4, -1, 1, -6, 0, 2, -4, 4, 14, -9, -5, -8, -3, 14, 2, 9, 14, -4, 8, -4, 12, + 6, 7, 1, 9, -7, 0, 6, 2, -11, 7, -13, -3, -7, 1, -3, 5, 3, 4, -1, 4, 2, -11, -6, -4, -2, 1, -1, -1, -11, -4, + 1, 3, 15, -5, 4, 6, -4, -7, -10, -2, 0, 0, 2, 1, -2, -2, 0, -2, 5, 1, 5, 3, 0, 1, 3, 3, -2, -9, -2, 3, + 5, 1, -4, -5, -3, -6, 2, 3, 0, -8, -1, 0, 6, 9, 1, -3, -4, 0, 0, -2, 3, 6, 11, 10, 1, -1, -3, -5, -4, -2, + -11, -3, -4, -6, -2, -3, -2, -2, 2, -3, 5, -6, -2, 1, 4, 12, 8, 6, 4, 2, 12, 0, 6, 3, -4, -2, -10, -7, -7, 0, + -2, 1, -6, 2, 3, 0, 2, 4, -6, 1, -4, -6, 9, -2, 0, 4, 8, 6, 3, 7, 0, 3, 0, -1, -3, -1, 4, 0, 0, -2, + -4, 8, -2, -3, 0, -1, -4, 0, 9, 12, -14, 17, 13, 3, -18, -28, 0, -9, -25, -1, -2, 4, 6, 1, -3, -2, -5, 1, 10, -13, + -3, 3, -1, -9, -6, 0, 2, 0, -3, -7, -5, -4, -3, -5, -4, 3, 0, 5, -3, 7, -2, -5, -8, -2, -3, 3, -3, 6, -1, -1, + -1, -5, 3, 6, -1, 1, 5, 3, 9, 4, 1, -6, 2, -1, -9, -4, -8, 5, 10, 13, 1, -4, -6, -4, -5, 1, 0, -8, -7, -7, + -5, -2, 8, 0, 8, 1, 1, -1, -8, -5, 0, -2, 4, 2, 0, 1, 3, 1, 0, 3, 2, 6, -7, -2, -1, -5, -10, 1, 8, 0, + -3, -9, -12, 4, -2, -2, -9, -6, 1, 0, 4, 4, 3, -10, 2, -8, -2, 8, -2, -4, -8, -7, -1, 6, 14, 12, 9, 8, 6, 7, + 5, 3, -9, 7, 3, -1, 9, -1, -4, 0, 1, -3, 6, 3, -4, 1, 15, -9, -4, -5, -10, -12, 0, -1, 0, -6, -10, -3, -8, 1, + -9, 8, 0, -2, -1, -3, -8, 0, 2, 6, 12, 1, -5, -10, -11, 0, 1, -5, -1, 2, 0, 3, 7, 2, -4, 4, 5, 1, 2, -5, + -8, -6, -12, -4, -4, -1, -2, -5, -7, 0, 0, 3, 7, 5, 5, 2, 0, 2, 6, -2, 5, 1, 2, 3, 0, 3, 1, 0, 6, 2, + 0, 4, -5, -3, -4, 1, 5, -2, 1, 5, 6, 5, 1, 6, 0, -7, -3, 0, 1, 2, -4, -2, -2, 4, -4, 0, 5, 8, 7, 17, + 6, -1, 0, -2, -1, -2, -7, -6, 0, 2, 5, 3, 8, -1, -2, -6, 6, 2, 1, -2, 3, -2, -1, 4, 3, -2, 1, -7, -7, -4, + 1, -4, -2, 3, 3, -10, 6, 3, 1, 8, 1, 11, 6, 5, -7, -30, 11, 14, -30, -22, -37, -18, -6, -6, 5, 0, 5, 22, 6, 0, + 9, -5, 6, 6, 1, -1, 5, -10, -9, -4, -11, 2, 7, 6, -3, -2, 3, 0, -5, 0, 0, -10, -4, 1, 3, -2, -6, 4, -4, 16, + 1, 1, 8, -6, -11, 8, 7, 5, 12, -1, 6, 8, 13, 6, 6, 2, -4, -5, -14, 13, -10, -5, -9, -2, 4, -6, -6, -5, 1, -1, + -4, 5, -6, -9, -6, -8, -2, -5, -2, 1, -4, -13, -15, -18, -11, 5, -4, -12, -9, -1, 9, -5, -5, -2, 1, 1, -4, 0, -6, -6, + -11, -11, -10, -9, -11, -7, 0, -7, -6, 3, 0, 0, -3, 2, 4, 8, 11, 10, 6, -5, 3, 10, 5, 7, 1, -5, -10, -2, -12, -9, + 5, 6, 1, 1, 2, 9, 15, 2, -8, -1, 2, -4, -3, -6, -13, 1, -6, -4, -5, -11, 0, -4, -1, -10, -12, -18, -13, -1, -18, -17, + -1, 0, 2, -7, 4, 2, 18, 3, 13, 6, 5, -5, -15, -13, -9, -6, -2, -4, -2, -4, -3, -3, -3, 2, 1, 4, 8, 9, 4, 0, + 2, -1, 0, 1, 4, 0, -3, 1, 4, 5, 6, 3, -1, 0, 7, 5, -2, -3, 2, 2, 0, 5, -2, -8, -3, -7, -5, -3, 2, -3, + 1, -3, -11, -3, 4, 6, 7, 0, 4, 0, 7, 9, 11, 5, 4, 6, 8, 17, 11, -2, -1, 0, 1, 0, 4, 1, -4, -2, -1, 2, + -2, -1, -2, 3, -3, 2, 2, -1, 4, 2, 3, 1, 10, 6, 3, 9, 6, 3, 2, 0, 13, 15, 16, 15, 14, -1, -2, 1, 3, 9, + 4, 5, -3, 0, -1, 4, 3, 1, 8, 9, 10, 8, 6, 0, -6, 3, -2, -2, 8, 5, -56, 7, 61, -49, 9, -41, -20, 35, 24, 21, + 13, 14, 22, 0, 9, 20, 4, 18, 11, -2, -4, 10, 2, 12, -2, 13, 11, 11, 6, -2, -10, 11, 2, 5, -7, 6, -3, 3, 9, 10, + -1, -2, 9, -2, 14, 4, 1, 4, -1, 6, 7, 2, 7, 5, 0, 10, 8, 12, 6, 4, 7, 1, -7, -16, 56, -8, -11, -10, -12, -14, + -9, -2, 8, 7, -1, 0, 1, 2, 1, -3, 2, 4, 7, 8, 12, 3, 5, 1, 1, 1, 8, 9, 13, 12, 12, 11, 7, 0, 10, 12, + 1, 4, 3, -1, 4, -7, -10, -16, -14, -11, 6, -4, -3, 5, 5, 5, 3, 11, 19, 8, 14, 5, 3, 12, 6, 5, 2, 3, -7, -14, + -13, -5, -9, -5, -8, 6, 15, 10, 18, 7, -11, 2, -9, 4, 20, 13, 10, 3, -1, 13, -2, -6, -6, 0, 5, 24, 29, 6, 3, -8, + -18, -21, -20, -23, -29, -30, -38, -34, -34, -26, -32, -21, -29, -11, -9, -13, -10, -26, -13, -24, -8, -20, -4, 4, -1, -12, -12, -8, -5, -5, + -4, -5, -3, -2, 6, 1, 2, -3, -6, 4, 1, 9, 10, 6, 7, 7, -3, -2, -5, 0, -1, 4, 5, 9, 12, 10, 11, 6, 7, 11, + 12, 16, 10, 7, -6, -8, -8, -15, -9, -9, -10, -17, -17, -18, -10, -3, 4, 10, 18, 18, 16, 22, 17, 12, 5, -2, -4, 3, -3, -13, + -20, -17, -11, 0, 10, 9, 9, 6, 4, 3, 1, -3, -12, -11, -1, 15, 10, 14, 13, 16, 19, 28, 20, 26, 31, 46, 43, 19, 12, 2, + -34, -52, -51, -52, -55, -71, -83, -84, -84, -77, -67, -33, -35, -34, -18, -8, -1, -6, -5, 9, 15, 17, 13, 0, -36, -86, -28, 103, -127, 73, + 9, -89, 105, 63, 36, 39, 31, 43, 12, 2, 25, 31, 9, 34, -15, -5, 12, -4, 10, 13, -2, 4, 9, 1, -7, -21, 10, 11, -6, -7, + -4, 1, -2, -4, -1, -5, -5, 3, -8, -8, -19, -10, -1, -14, -6, 0, -17, -16, -2, -8, -6, -4, -14, 0, -2, -12, -1, -16, -32, 112, + 10, 1, 2, -2, 0, 0, 8, 11, 19, 19, 7, 4, -8, -1, -5, -3, 2, -7, 0, 2, -5, -1, -2, -12, 8, -7, -9, 0, -8, 9, + 14, 6, -4, -2, 0, 8, 0, -2, 0, 5, 4, -8, -7, -3, -10, -3, -6, 1, 3, 9, 3, 0, 1, 2, 1, -1, -2, -13, 1, 0, + -1, 1, -7, -5, 4, -5, 1, 4, -8, -8, -9, -10, -10, -9, -4, -1, 3, 7, -1, -5, -1, 0, -5, 13, 3, 4, -17, 5, -4, -3, + -1, 0, -2, -7, 9, 1, 8, -1, -2, 1, -6, -1, 4, -4, -14, 2, -7, 3, 1, -2, -13, 4, 0, 3, 4, -14, 0, -3, 15, 17, + -16, -8, -7, -12, -16, -5, -5, -2, 7, 5, 1, -2, -6, 4, 1, 11, 1, 1, 2, -2, 7, -3, -1, 1, 4, 4, 8, 1, 2, 5, + 0, -1, -2, -7, -4, -1, -5, -8, -6, 0, -12, -8, -7, -8, -9, -5, -4, -10, -1, -5, -2, -8, -3, -3, 0, 4, 6, -2, 5, 3, + 4, 6, 5, 8, -5, -7, 4, 3, -8, -4, 11, 0, 3, -4, 5, 0, 9, -2, -7, -15, -9, -3, -2, -7, -3, 0, 0, 7, 1, 1, + -10, 5, 0, -8, -7, -7, 3, -8, -2, 5, 3, 4, 6, 13, 4, -4, -4, -1, -3, -13, -4, -7, -9, 5, 2, -3, 11, 2, 16, 25, + 20, -20, 22, -9, -21, -10, 6, 28, 23, 9, 7, 9, -1, 1, -5, -3, 16, 12, 12, 9, -9, -10, -8, -9, -14, -6, -5, -15, -16, 7, + -7, -9, -5, -6, -1, 12, 9, 4, 2, -15, -23, 13, 0, -6, 0, 9, 19, 15, 2, 7, 10, 6, 1, 10, -9, -3, 5, 7, 9, 12, + 13, 1, -2, 0, 101, -1, -3, 1, -1, -6, -6, -2, -4, 11, 20, 17, 4, 11, 8, 10, 1, 3, -1, 4, 3, 1, 13, 7, 3, 9, + 3, -8, -2, -2, -4, 6, 5, 16, 12, 15, 17, 14, 10, 3, -3, 3, 9, 1, -3, -4, -11, -6, 5, 10, 3, 3, 5, -3, 0, 6, + -1, -12, -10, -2, -6, -4, 0, -8, -21, -13, -12, -3, 3, -17, -8, 4, -9, -2, -9, -17, 6, -7, -11, -2, 2, 17, 14, 6, 5, 6, + 9, 7, -2, -11, 2, -4, -1, -5, 8, -3, 4, -9, -12, -5, -5, 2, 11, 3, 2, 1, 0, -15, 9, 7, -13, -19, -4, 0, -9, -1, + 7, 3, -20, 5, 2, 9, 3, -3, -5, -3, -6, -9, 0, 8, 11, 6, 5, -1, 3, 4, 2, 0, -3, -5, -7, -8, -5, 1, -4, -3, + 1, -1, -5, -5, -3, -4, 4, 1, 2, 8, 1, 7, 3, 8, 1, -5, -6, -4, -6, -2, -3, -4, -13, -8, -12, -8, -1, -9, -10, -1, + 2, 3, -3, -5, 2, 6, 4, -5, -7, 3, 3, 7, 4, -6, -7, -1, 8, 8, 2, -11, -2, -4, -4, 3, -5, -9, 9, 4, -7, -4, + 5, 0, 5, -5, 1, 4, 5, 7, 3, -1, 8, 10, 3, -6, -4, -5, 7, 5, 4, -8, 0, -9, 2, 2, 1, -5, -1, 3, 2, -12, + 3, -6, -14, -7, 6, 0, -33, 15, -3, -20, 12, 5, 26, 24, -3, -14, 0, -8, 27, -1, 4, -9, 4, 7, 6, -5, 5, -4, 4, 6, + 8, -14, -15, -11, 4, -10, -9, -7, -1, 2, 2, 9, 13, -4, -20, -9, -2, -6, 8, -3, 10, 8, 1, 10, 6, 5, 13, 3, 10, -5, + -4, -1, 10, 9, 15, 5, -8, 18, 13, 95, 12, 8, 9, 8, 18, 5, 4, -3, -12, 3, 5, 1, -2, 9, -1, 1, -3, 3, -10, 1, + 2, 5, -4, 3, 1, 6, 0, 2, -6, -8, -4, 12, 17, -3, -9, -7, -2, 1, -4, 1, 3, 10, 10, 2, 6, 5, 2, 1, 4, 5, + 3, 8, 8, -1, 4, 9, 1, -13, -2, -5, -3, 7, 0, -8, -2, -1, 1, 3, -6, -3, 1, -8, -19, -7, -5, -1, 13, 5, 1, -6, + -2, -15, -18, -12, -17, -2, -12, -7, -17, -7, -23, -1, -8, -13, -30, -2, -5, 5, -6, 1, -5, 0, -4, -3, 11, 0, 3, -1, 15, -6, + -8, -3, 10, -6, 7, 15, 12, -11, -1, -1, -4, 2, -1, -3, -2, -6, -6, -5, -1, 0, 3, 0, 2, 1, 0, -6, -6, -12, -11, -7, + 0, 4, 5, 3, 3, 4, 6, 3, -4, 0, 2, -5, 0, -5, 6, 2, -2, -2, 7, 3, 3, 8, 0, -5, -3, -5, -10, -5, -10, -11, + -14, -12, -12, -19, -22, -18, -10, -21, -25, -20, -12, -1, -5, -13, -14, -12, -2, -2, -4, -11, -5, 0, -8, 4, -6, -9, -9, -13, -14, -16, + -14, -8, -2, -4, 12, 8, 0, 2, -12, -17, -19, -19, -14, -4, -23, 0, 1, 4, -3, -1, 0, -9, 3, 1, 16, -6, -11, -8, -4, -9, + 3, -5, 8, 1, 3, 6, 6, -1, 0, -19, -16, -28, 23, 29, -13, 5, -1, 28, 23, -18, -14, -2, -10, -11, -22, -8, -15, -11, -14, 4, + -4, 8, -4, -3, -16, 2, 11, 7, -10, 8, -6, -18, -19, -5, 2, -5, 15, 2, 3, -1, 2, 10, -1, 7, 7, 16, 22, 1, 7, 7, + 21, -1, -7, -5, 1, -10, 18, 3, 1, 6, 2, -1, -4, 6, 64, 3, 3, -4, 1, 4, -4, -9, 13, 3, 2, -6, 3, -4, -12, -8, + -2, 0, -6, -11, -1, -14, -13, -18, -12, 5, 6, -2, -3, 3, 12, 5, 16, 10, 1, 18, 4, 7, -2, 2, -5, -2, -4, 11, 4, -9, + -6, -4, -10, -4, 8, 2, 0, -4, 6, -7, -5, 3, 3, 0, -5, 3, 5, -1, -11, 0, -11, -13, -13, -21, -20, -4, -16, -20, -18, -16, + -14, -13, -8, -22, -5, -12, -14, -16, -13, -14, -11, -11, -2, -1, -2, -12, 10, -14, -17, -8, -7, 6, -5, 21, 11, 15, 7, -16, -2, 14, + -6, 14, 3, 16, 1, -2, 8, 8, 3, 5, 20, 14, 28, 8, 31, -8, -8, 2, 5, 2, -1, 2, -5, 5, 8, 4, 10, 6, -3, -1, + -9, 0, 2, -2, -4, -7, -7, -9, -11, -8, -3, -6, -1, -9, -6, -7, -7, -13, -12, -3, 0, -6, -3, -1, 0, 1, -2, -3, -10, -10, + -9, -9, 1, 2, 2, -1, -4, -12, 1, -13, -13, -10, -11, -13, -15, -15, -1, -10, -16, -2, -13, -10, -13, -12, -11, -4, -24, -22, -35, -37, + -23, -26, -22, -24, -29, -18, -24, -12, -14, -18, -10, -15, -21, -32, -28, -22, -17, -18, -25, -31, -26, -19, -27, -20, -17, -15, -15, -33, -25, -25, + -36, -33, -27, -15, -24, -9, -14, -5, -28, -32, -7, -6, -5, -15, -50, -9, -2, 34, 44, 6, 37, 22, 52, 21, 0, 7, -7, -15, -4, -19, + -21, -35, -32, -11, -7, -9, -8, -9, -12, -16, -5, 10, 0, -2, 1, -2, -7, -19, 2, 9, 10, 16, 10, -1, -16, 5, -4, 1, 18, 10, + 15, 21, -2, 1, -8, -4, -5, -18, -18, -5, 3, 8, -3, 12, 10, -2, -4, 3, -7, 20, 3, 16, 15, 15, 3, -10, -17, -12, -11, -1, + -5, -8, -5, -4, 8, 5, -1, 10, -4, -1, -6, -9, 1, 7, 16, 3, 1, -19, -15, -10, 10, 4, 5, -7, -9, -7, -11, -22, -23, -24, + -8, -17, -13, -8, -19, -14, -14, -13, -13, -7, 0, -9, -2, 2, -2, -16, -15, -25, -23, -11, -17, -20, -17, -22, -27, -28, -33, -23, -20, -24, + -16, -12, -21, -15, -14, -13, -15, -21, -12, -18, -15, -17, -18, -13, -26, -8, -1, -7, -7, 5, -19, 2, -13, -4, -5, 27, 27, 27, 23, 15, + 12, 13, 7, 15, 16, 21, 18, 22, 28, 15, 7, 18, 30, 30, 26, 20, 29, 28, 40, 51, -13, -9, 6, 10, 3, -9, -14, -10, -6, 5, + 8, 6, 3, 9, 1, 10, 2, -3, 4, 2, 7, 2, -11, -3, -6, -14, -10, -12, -14, -15, -6, 8, -1, -19, -8, -20, -25, -26, -28, -19, + -23, -12, -15, -19, -31, -17, -13, -12, -25, -22, -24, -25, -17, -17, -17, -20, -30, -36, -33, -29, -42, -44, -44, -37, -37, -20, -24, -23, -25, -23, + -12, -24, -21, -31, -20, -35, -44, -44, -36, -28, -30, -45, -28, -25, -33, -27, -13, -18, -22, -10, -17, -12, -17, -19, -10, 12, 11, 15, -1, 1, + 0, 4, 6, 3, 8, 4, 3, 1, -1, -7, 5, -2, 7, -5, -14, -19, -18, -20, -5, -13, 19, 43, 40, 51, 31, 68, 44, 84, 59, 37, + 25, 13, 15, 5, -18, 6, 0, -18, -15, -9, 5, 4, -5, -10, -9, 2, 2, 11, 4, 6, -33, -29, -7, -11, -15, 4, -8, 1, -17, -29, + -13, -11, -15, -8, -14, 6, 6, -10, -7, -7, -12, -9, -20, -7, -16, -10, -8, 3, 5, -6, -11, -8, -22, -14, -84, -8, -13, -17, -8, -9, + -1, -8, -11, -15, -9, -10, -24, -9, -3, -9, -11, -3, -3, 3, -4, -5, 0, -2, -7, 5, -5, -12, -4, 5, 6, 4, 9, 12, 17, 3, + 4, 11, 3, 3, 5, 14, 2, -5, -10, -10, -11, -14, -16, 3, 11, 15, 9, 7, -7, 8, 3, -6, 19, 17, 18, 11, 10, 5, 12, 8, + 1, 14, 16, -3, -5, 12, 8, -3, -8, -18, -12, -10, -5, 8, -8, -8, 12, 8, 2, -15, -10, -3, -19, -19, -9, -12, -15, -16, -17, -6, + -6, -10, -18, -13, -5, -4, -1, -6, 0, 9, 4, -1, -11, 6, -6, -14, 8, 30, 20, 12, 29, 5, 3, 18, 31, 8, 7, 10, 4, 9, + 8, 13, 15, 9, 14, 10, 1, -3, 2, -2, 5, 6, 6, 6, 2, 6, -1, -5, -3, 0, -3, -12, -10, -6, -2, -6, 0, -1, 3, -4, + -7, -16, -11, -15, -11, -3, 0, 0, 3, 3, 2, 2, 8, 9, -2, -3, -6, -5, -4, -8, -5, 3, -3, 7, 11, -1, 2, 3, 1, -3, + -6, 5, 7, -3, -11, -1, 11, 6, 6, -2, 5, 7, 4, 9, 5, 7, 16, -1, 2, 2, -5, -3, -15, -2, -4, 0, -4, -1, -11, -1, + -12, -14, -29, -28, -32, -26, -20, -19, -20, 3, 11, 10, 7, -1, -8, -1, -6, 4, -8, 1, 5, -6, -4, 6, 9, 20, 53, -10, -105, -64, + 37, 30, 40, 33, 40, 50, 43, 20, 8, 8, -5, 7, -7, 6, 5, 4, 12, 31, 10, -2, 6, 3, 0, 1, 6, -7, -7, 2, -5, -16, + 5, 6, 17, 8, -18, 5, -4, -6, -4, -3, 6, 18, 16, 10, 12, 1, 14, -6, -6, -2, 10, 8, 6, 17, -1, -23, -10, -10, -4, -127, + -5, -2, -6, -3, -5, -7, -8, 4, -1, 4, 6, 4, -3, 2, 3, 4, 3, 3, 5, 1, 1, 2, 3, -2, 0, -1, -3, 5, -2, -5, + -5, 4, 0, 8, -3, -2, 5, 4, -4, -10, 2, -12, -7, -5, 2, -5, -11, -21, -10, -11, -10, -6, -3, -8, -5, -3, -1, -6, -12, -5, + 5, -1, -6, 3, 5, -3, 1, -5, -12, -1, -10, 1, -3, -1, -2, -2, 2, -6, 12, 4, -7, 4, -8, -5, -8, -2, -12, -8, 2, -7, + -1, 2, 3, -19, 1, -6, -5, 3, 1, 20, 6, 18, 12, -3, -7, 0, 1, 1, 5, 7, 4, -6, -1, 8, 7, 6, 4, 5, 9, -7, + 8, 8, 1, 7, 6, -3, -8, -2, -2, 1, 3, -2, -7, -1, 0, 4, -4, -8, -10, -7, -5, -1, -1, 6, 5, 9, 3, 5, 4, -2, + -2, -4, -3, -4, 1, -4, 6, 3, 2, 3, 3, 3, 2, 1, 3, 8, 1, 3, 6, 7, 15, 10, 10, -9, 4, 5, 3, -6, -11, -5, + 1, -3, -4, 0, 13, 0, -4, -5, -7, -2, 4, 7, -2, -7, -11, -8, -10, -5, 2, 0, 3, -1, -3, -4, 3, -2, -9, -4, -6, 2, + -1, -2, -5, -9, 2, 6, 6, 9, 8, 4, 1, -5, 2, -5, -10, -1, 0, 2, 8, 9, 11, 8, 3, -3, -1, -1, 2, 10, 0, -24, + 14, -5, -18, 18, 12, -3, -2, -5, -3, -4, 0, 1, -1, 0, -1, -4, 0, -8, -11, -13, -5, -4, -8, -9, 4, -9, -10, 2, 7, -1, + -10, 0, 4, 0, -3, -4, -6, -2, -1, 4, 3, 12, 0, -1, -15, 2, 6, 3, 1, -1, 6, 0, -16, -3, 2, 2, -10, -9, -4, 2, + 1, 5, -9, -4, -6, -1, -1, 10, 5, 11, -1, 7, 0, 1, 5, 3, 2, -8, -5, -3, -2, -1, 2, 2, 2, -1, -12, -8, -11, -9, + 0, -2, -9, -2, -2, -1, -3, -3, 1, -2, 2, -8, -1, -12, -7, -6, -5, -1, 0, -4, -11, 1, 0, -7, -7, -3, -3, 1, 0, -6, + 1, 6, -5, -10, 0, 5, 4, 5, 3, 6, 1, -3, -7, 4, 3, -3, 9, -12, -3, -9, -3, 4, -10, 0, -10, -3, 2, -2, -6, -20, + 8, -5, 7, -5, 0, 11, 8, 1, -13, -8, -10, -4, 2, -5, 11, 3, 15, 12, 8, 2, 8, -15, -3, 1, -5, -4, -8, 1, 2, 12, + 5, 7, -5, 1, 3, 11, 6, 5, 6, 11, 7, 4, -3, 1, -2, 4, 3, 6, 3, 1, -3, -5, -8, 0, 4, 3, 7, -1, -2, 1, + -2, 3, 2, 5, 3, 0, -4, 4, -4, 0, 0, 1, -4, -1, 1, 1, 0, -9, 2, 1, -2, 0, 3, -4, -4, 2, -3, 3, 11, 0, + 5, 9, 1, 0, 5, 1, 4, -4, 6, 13, 3, 0, -1, -4, 1, -4, 5, 7, -1, 6, 7, 9, -1, 3, -2, 0, 2, 8, -1, -5, + 8, 10, -3, -5, -1, 1, -1, -8, -16, -1, 6, 2, -3, 2, 8, 3, 0, 3, -1, 4, 6, -13, -3, 2, -5, 0, 1, -2, -3, -2, + -3, 2, 9, 2, 10, 6, 13, -4, 13, 12, -23, -11, -14, -3, -6, 2, 10, -12, -9, 1, 13, -16, 6, -3, -8, -1, 0, 6, 16, -1, + -14, 4, 17, 2, -11, 5, 6, 17, 10, 7, -4, -5, 15, 16, -3, 0, 4, 1, 2, -9, -11, 12, -1, 3, 6, 10, 2, -5, -2, 0, + 1, -10, -1, 12, 2, -14, 4, -4, -4, -12, 0, 3, -6, -3, 4, -6, 0, 6, -4, -2, -6, -7, -2, -4, -5, -4, 3, 3, 1, 5, + 7, 0, -1, 8, 14, 6, -10, -12, -2, 9, 4, 6, -1, -5, -13, -13, 5, 9, 6, -8, -12, 5, 7, -12, -2, 7, 13, -2, -7, 13, + 6, -6, -1, -4, -2, 8, -6, -6, -8, -13, -3, 3, 1, -14, -14, -8, -5, -2, 2, 5, -5, -1, -2, -1, -1, 8, 11, 14, 13, 6, + 8, 6, 8, 13, 4, -4, 1, 1, -13, 9, 4, 5, 3, -9, -7, 4, 1, -6, -8, 7, 1, 15, 7, 1, 5, 8, -4, 13, 24, -7, + 1, -2, 12, 11, 0, -2, -4, -5, -10, -2, 4, -1, 0, 8, 4, 4, 7, 3, 8, 12, 8, -2, 0, 2, 3, -2, -2, -5, 2, 6, + 0, 4, 3, -1, -1, -7, -10, -12, -2, -1, 2, -3, 2, 5, -5, -8, -1, 1, 12, 7, -7, -10, -10, -7, -10, -4, 0, -6, -10, -6, + 7, -4, -6, 8, -4, -5, 1, 1, -1, 3, 2, 10, 3, 4, 5, 9, 6, 7, 0, 0, 1, -2, 2, -7, 7, -8, 0, -15, 0, 4, + 2, -2, -5, -7, 5, 3, -1, 0, -5, -1, -3, 9, 4, -2, 6, 2, 8, 4, 10, -3, 0, 0, 2, -4, -2, 4, 1, 2, 0, -13, + 5, 1, -6, 0, -2, -3, 0, 14, 3, -4, 5, 3, -7, 6, -1, -8, 1, -3, -5, 1, 1, 13, 0, -9, -5, 2, -8, 0, -4, -5, + 6, -2, -4, 17, -2, 0, 5, -2, -12, 1, -7, 2, 0, 8, -3, -4, -13, -4, 11, -1, 3, 10, 13, 1, -9, -6, 4, -6, 4, 8, + -1, 3, -4, -2, -4, 16, 1, -12, 0, -12, -10, -13, -12, -10, -22, -16, -10, -4, 0, 6, -6, 14, 6, 6, 4, 13, 20, 18, 2, 7, + 4, -7, 0, 0, -1, 1, 2, -6, 7, 1, -1, 1, 3, 14, 19, 17, 1, 15, 12, 3, 8, 16, 12, 8, 3, -2, 1, 2, -2, 11, + 8, 0, -5, 1, 18, 18, 9, 6, 0, -5, -5, -3, 11, -14, -16, -5, -8, 4, 5, -16, -14, 10, -2, -2, -9, -23, -12, -8, -10, -12, + 8, -1, 8, 19, -7, 11, 7, 6, 5, -3, -6, 1, 1, -15, -6, -22, -13, -8, -18, -16, 7, 6, 5, 8, 4, 18, 3, 1, 5, -3, + 9, 4, 9, 23, -4, -11, -2, 5, 13, 7, -2, 6, 6, 13, -2, -2, 0, -1, 4, -2, 1, 7, 1, 3, 2, 1, 4, -4, 2, -7, + -12, -9, -8, -2, -4, -7, -7, -5, -9, -6, -5, -2, 3, 8, 3, 6, 4, -5, -8, 0, -1, -6, -7, 3, 10, 14, 6, 9, 4, 7, + -1, -2, -6, -4, -2, 2, -11, -9, -4, -1, -1, -5, -3, -6, 2, 7, 13, 3, 5, 3, 1, 1, 1, -7, -6, -2, -5, 2, 3, -1, + 2, 6, 4, 7, 2, -3, 9, -1, 3, 6, 4, 4, 4, -7, -7, -20, -14, -2, -6, -8, 1, 2, -6, 4, 5, 5, -7, -4, 0, -3, + 0, 0, 5, 14, 6, 1, -2, 5, -4, -10, -6, -2, -1, -4, 3, -33, 24, -42, 8, 19, -16, -19, -4, 24, 14, 15, -11, -8, 9, 5, + -11, -23, -5, -7, 6, 1, 4, 10, 13, 9, 0, -1, 0, -3, 4, -11, -4, -1, 2, -6, 1, -13, -16, 1, 4, -2, 5, 4, 3, 0, + 5, 1, 6, 0, 4, 14, 3, -15, -4, 5, -3, -4, -16, -15, -5, -1, -5, -4, 4, -10, 1, 0, 3, -8, -2, -2, 17, 11, -2, -4, + -7, -19, 3, -5, -1, -3, 0, -1, 1, -10, -6, 2, -13, -5, -12, -7, -12, -19, -7, -7, -4, 6, -1, 1, -7, -5, 11, 11, 4, 3, + -2, -5, -1, 1, 6, -7, -13, 1, 6, 17, 13, 27, 23, 12, 16, 13, 1, 7, 5, -6, 22, 20, 5, 9, 3, -13, -2, -3, -16, -19, + -25, -14, -14, -17, -24, -24, -25, -21, -20, -32, -31, -27, -31, -44, -34, -43, -29, -38, -30, -37, -35, -68, -42, -28, -17, -4, -1, 14, 29, 7, + 31, 17, 25, 46, 21, 52, 47, 27, 21, 14, 9, 11, 4, 6, -5, -4, 15, 9, 14, 25, -27, -24, -26, -15, -15, -8, -4, -5, -5, -8, + -7, -7, -9, -5, -16, -10, -16, -10, -7, 2, 1, -6, -9, -8, -2, -2, -11, -9, -11, -4, -11, -9, -18, -16, -13, -14, -9, -6, 2, 1, + -1, -2, 6, 4, 10, 14, 18, 9, 12, 14, 10, 15, 8, -3, -6, -4, -6, -12, -3, 15, 21, 15, 7, 5, -1, -9, 9, -1, -16, -25, + -24, -11, -18, -25, -19, -24, -22, -9, -10, -5, -5, 12, -4, -9, 22, 10, 7, 1, -4, 6, 8, -6, 8, 5, 1, 2, 1, -4, -7, -9, + -13, -9, 5, 20, 16, 18, 20, 8, -6, -8, -5, -6, -20, -31, -34, -39, -36, -30, -35, -31, -58, 84, -80, 58, 14, -16, -67, 17, 18, 41, + 19, -7, -6, 10, 16, 6, 8, -8, -14, -12, 15, 13, 13, -1, 0, -5, -7, 4, -3, 7, 1, 7, 15, 21, 11, -4, 0, -8, 2, -6, + 1, 4, -4, -9, -13, -2, -6, 2, 8, -8, 3, -3, -3, 7, 5, -4, -8, -18, -5, -9, -3, -2, -1, -7, -7, 5, 27, 22, 20, 13, + 4, 1, -5, -11, -20, -32, -21, -9, 3, 5, 14, 11, 3, 0, -12, -10, -6, -9, -2, -1, 9, 1, 6, 24, 26, 27, 25, 10, -3, -12, + -19, -21, -10, -9, -15, -7, -9, 0, -9, -10, -11, -11, -11, -12, -6, 1, 3, 3, 8, 2, -5, -9, 5, -5, -7, 4, 1, 3, -3, -3, + -4, 1, -2, -5, -13, 0, -4, -13, 16, 27, 20, 10, -23, -29, -59, -63, -64, -58, -35, -27, 2, 9, 16, 20, 0, -2, -14, 3, -11, -15, + -29, -19, -28, -10, -3, 12, 13, 28, 37, 29, 42, 42, 44, 22, 5, 17, 17, 24, 1, -1, 2, 2, -13, 1, 36, -18, -8, -2, 10, 6, + 3, 0, 6, 3, 5, 10, 5, 2, -8, -8, -3, -7, -10, -9, -16, -12, -10, -5, 3, 2, -4, -8, -10, -8, -9, -16, -10, -6, -4, -7, + -3, -6, -1, 11, 10, 1, 1, -3, -4, -7, 0, -3, -9, -12, -20, -16, -10, 2, -6, -15, -22, -26, -23, -24, -19, -19, -16, -11, -9, -15, + -19, 1, -3, -6, 3, 19, 18, 29, 18, 16, 0, -35, -57, -89, -101, -115, -87, -96, -75, -44, -14, 0, 23, 22, -2, -5, -19, -5, -15, -24, + -33, -38, -33, -25, -28, -38, -43, -32, -10, -23, -10, -6, -1, -2, 2, 12, 7, -1, -13, -5, -10, 10, 11, 13, 16, -27, 94, -127, 61, -50, + -9, -89, 41, -37, 82, -17, -7, -43, 12, 2, 31, -4, -4, 7, 9, 18, 7, 11, 13, -4, -2, -9, 4, 6, -2, -1, 24, 20, 22, 12, + -4, 6, -4, -4, -15, 4, 1, -13, -13, 3, -18, -6, 4, 14, -5, -4, 8, -1, -5, 4, 4, 14, 1, 1, 6, 1, 12, 21, 11, -43, + 10, 4, -7, -5, -8, 14, 21, 18, 19, 10, -4, 3, 2, 15, 8, 10, 0, 2, -3, -2, -10, -1, -5, -4, 6, 2, -1, -2, 2, 1, + 6, 14, 0, -10, -12, 0, 1, 3, 9, 1, -9, -5, -4, 2, -4, 8, 8, -2, 10, 10, 21, 18, 21, 15, 16, -5, -4, -1, 24, 18, + 4, -4, -4, -6, -6, -6, -9, 4, 1, 21, 14, -4, -3, 2, -6, -7, -10, 3, 9, -4, -3, -5, -11, 8, 3, 1, -5, -7, 0, -3, + -12, -2, -20, -4, -1, -14, 3, -14, 2, -16, -22, -2, 0, 15, -11, 14, -7, -4, -3, -2, 6, 24, 6, 8, 3, -7, -7, -13, -1, 3, + -2, -6, -5, -14, -13, 0, -3, 7, 16, 14, 14, 5, -12, -5, 4, 1, 2, -1, 5, -5, -1, 3, -8, -1, -3, -5, -8, 1, 4, 7, + 3, 6, -1, -7, 4, -1, 6, -4, 2, 5, 2, 0, -4, 6, 7, 5, 6, -3, -2, -5, 0, -3, -6, 4, 0, -8, -2, -4, 1, 8, + 2, -8, -14, -6, -4, 2, -4, -6, 3, 4, -1, -3, -6, 3, 1, 1, 0, 13, 14, -3, -4, -5, 0, -3, 3, 4, 1, 10, 4, -10, + -13, -8, -14, -4, 5, 5, 4, 12, -5, -6, -3, -3, 1, 3, 3, 1, -1, 3, 7, 13, 6, 9, 0, -15, -8, -10, -5, -4, -22, 7, + 25, -13, -2, -2, 20, -18, 7, -1, -1, -17, -10, -6, 6, 21, 3, 10, 23, 0, 2, 8, 5, -9, 5, -4, -12, -10, -3, 3, -3, -5, + 6, -11, -10, 1, 2, 5, 11, 6, 7, 0, -2, -7, 3, 2, 11, 5, 7, 12, 3, -4, 4, -8, -11, 4, -1, 2, 9, 7, -1, -6, + 5, 1, 0, -10, -12, -6, 0, 7, -12, -9, -8, 2, -3, 1, -1, 2, 0, 2, -15, 0, 1, 5, 1, 4, -4, -11, -9, -8, -4, -6, + 6, -10, 3, 15, 10, 1, -5, 4, -10, -2, -1, -3, -5, 0, -8, -9, -9, -15, -12, -5, -6, 8, 8, 10, -4, -5, 3, 8, 16, 3, + -4, -7, 9, -4, 15, 23, 18, 7, 6, 7, 9, 2, 7, -2, -17, 3, -2, -5, 2, -16, -1, -5, 12, -2, -21, 2, -10, 2, 0, 7, + -2, -2, -15, -2, -3, -9, 0, 4, 7, -20, -6, 8, 8, 14, -9, 0, 4, -6, -15, -17, -11, -4, -2, -1, -7, 7, 12, 14, 5, -1, + -5, -2, 1, 9, 12, -5, -8, -1, -2, -10, -8, -2, -2, 1, 6, 2, 1, 3, 3, -2, 1, 8, 8, -4, -1, -2, 0, 12, 0, 1, + -2, -3, -4, -2, -4, -2, 4, 1, -2, 2, 3, 10, 5, -4, -4, -8, 0, 1, 0, 4, -1, -10, -7, -10, -10, -18, -18, -8, 2, -2, + 1, 1, -6, -2, 4, 9, -1, 1, 8, 9, -6, -5, -8, -1, -1, -4, 0, -1, 16, 0, -5, -11, 12, 8, -6, 6, 4, 8, 7, 2, + -11, -10, -13, -3, -4, -1, 3, -2, -3, -7, -6, 1, 5, -3, -12, -3, 5, 10, 9, 11, 8, -1, -1, -16, -5, 5, -1, 1, -8, -2, + 2, 3, 2, -2, 6, -6, -33, -8, 1, 8, -11, 8, 0, -17, -16, -3, 3, -2, 1, 10, 4, -3, 1, -8, -4, 6, -5, -4, -9, 7, + 3, -6, -9, -25, 5, -6, -5, -1, 1, 3, 20, 2, 2, 4, 4, -1, 4, 8, 0, 5, 17, 2, 15, 5, 1, 10, 14, 8, 5, 8, + 12, 7, 11, -3, 3, -6, -8, -4, -4, -2, 27, 21, 23, 21, 19, 20, 20, 8, -3, 1, 10, 6, 1, 20, 12, 22, 11, -5, -8, -7, + -7, 2, 5, 1, -9, -7, 1, -3, 2, 8, 7, -2, -9, -4, -4, 17, 17, 20, 0, 5, -2, 2, -6, -5, 2, 2, 6, -1, 15, 0, + 9, 4, 8, -9, -8, 2, 5, -9, -8, -4, -3, 16, -2, -8, 4, 1, 3, 1, 0, -13, -33, -14, -18, -19, -16, -7, 6, 10, 11, -14, + 10, -10, 2, 7, -11, 6, -12, -3, -7, 0, -6, 8, -12, -17, -13, -12, -10, -3, -4, 6, -13, -15, -4, -16, -7, -5, 0, -12, 4, 14, + -6, 9, 8, 7, 2, -13, -12, -7, -7, -10, -7, -12, -3, -4, -7, -8, -6, -9, -6, 3, -7, -7, -8, -3, -6, -4, 1, -5, -10, -5, + 0, 1, 20, 14, 2, 0, 8, 5, 8, 10, 1, -7, -22, -19, -14, -3, -2, -4, -12, -17, -11, -13, -9, -6, -5, 1, -4, -15, -2, -2, + -11, -5, -3, 6, -4, 1, 7, -5, -3, -2, -6, -11, 0, 13, 11, 5, 8, 6, 10, 0, 11, 15, 8, 2, -7, -10, -3, -3, 1, -10, + -3, -1, 2, 4, 4, 0, -5, 1, -2, -8, 1, 1, -1, 6, -9, -1, 1, 10, 8, 4, -1, -6, -4, 8, 15, 4, 1, -4, -1, 12, + 9, 11, 0, 9, -9, -7, -7, 7, 5, -9, -13, -44, 18, -4, -9, -13, 4, -13, -24, -26, -38, -3, -16, -4, 6, 11, 14, 14, 5, 11, + 4, 8, 3, 5, 16, -4, 3, 13, 4, -3, 5, 6, 9, 15, 1, 13, -6, 2, 12, 14, 6, 9, 0, 12, 1, 2, 16, 7, 1, 3, + 10, 0, 0, 11, 3, 7, 18, 13, -4, -9, -2, 0, -1, -7, 5, -2, 5, 1, -6, 2, 1, 18, 4, -9, -6, -9, -3, 8, 15, 10, + 1, -4, -8, -5, -8, -15, -16, -4, 5, -6, -20, -29, -21, -5, -12, -15, -10, -4, -6, -25, -26, -16, -8, -5, -3, 5, 8, 14, 3, -8, + -7, -3, -1, 10, -2, 1, 15, -3, -15, -5, 3, -2, 2, 17, -2, -15, -17, -23, -25, -19, -29, -33, -22, 6, -5, -11, -9, -16, 7, 1, + -16, 9, 7, 18, 9, -13, -6, -17, 6, 4, 8, 8, 9, -2, 0, 0, 4, -12, 15, -4, -4, 0, 9, 12, 17, 4, 12, 6, 10, 13, + 15, 20, 6, 19, -2, -3, 19, 14, 19, 13, 30, 1, -10, -1, -6, 1, -5, -8, -16, -15, -3, -3, -2, -10, -9, -9, -4, -1, 4, 7, + 4, 4, -7, -5, 2, 8, 0, 4, 1, -2, -4, -8, -8, -1, -2, -1, -3, -5, -3, -13, -11, -5, -4, -6, 0, 0, -2, -7, -8, 4, + 15, 14, 10, 11, 1, 6, 4, -6, -26, -18, -8, -17, -3, 6, 0, 4, 11, 1, -5, -3, 10, 10, 1, 0, 4, -13, -8, 1, 5, 13, + -15, -6, 10, 13, -3, -4, -11, -14, -10, -15, -13, -11, -12, -19, -24, -19, -8, -12, 5, -1, 7, 24, 19, 10, 3, -4, -1, 4, 9, 3, + -6, -1, -9, -15, -15, -6, -13, -13, -13, -3, 14, 12, 4, 15, -13, -34, -64, 35, -11, -8, 41, 48, -26, -23, 14, -17, -23, -17, -1, 0, + -5, -7, 10, -13, -19, -22, -13, -12, -9, 8, -10, 3, 0, -16, -11, -8, 5, 7, 9, -7, 4, 11, 1, 12, -4, 0, -4, -4, 16, 10, + 1, 13, -2, -3, 5, -3, -10, 1, -20, -1, 7, -5, 3, -7, 1, -1, -5, 1, -5, 3, -6, 13, 9, 1, -3, 1, 8, -14, -10, 5, + 9, 16, 26, 17, 15, 1, 4, -3, 1, 5, -14, -18, -17, -5, -1, 0, -9, 2, 14, 10, 0, -12, -7, -3, 4, 11, 23, 12, 12, 1, + -1, -13, 0, -9, -16, -26, -11, -19, -16, -30, -39, -30, -45, -47, -35, -34, -24, -19, -38, -33, -46, -38, -43, -33, -33, -50, -65, -56, -50, -38, + -25, -25, -18, -2, 1, -16, -17, 3, 6, 3, 21, 13, 28, 7, 11, 10, 21, 11, 25, 11, 1, 10, 5, -1, -2, 12, 16, 8, 13, 20, + 21, 43, 27, 21, 23, 14, 25, 17, 33, 31, 28, 13, 4, -3, -8, -19, -12, 8, 5, -13, -9, -2, -2, -5, -7, -6, -5, -5, -9, -3, + 0, 8, 15, 9, 8, 14, 8, 16, 4, 2, -5, -4, 1, 2, -6, 0, 3, 13, 16, 14, 19, 21, 18, 21, 28, 26, 19, 21, 13, 15, + 8, 11, -4, -12, -21, -19, -16, -6, -19, -29, -25, -34, -33, -32, -29, -24, -8, -17, -24, -30, -42, -36, -50, -51, -45, -41, -57, -49, -28, -13, + -3, 3, 18, 37, 40, 23, 12, 22, 5, 3, 24, 12, 18, 1, 0, 3, -1, -20, -25, -46, -66, -50, -43, -42, -30, -7, -13, -2, -12, -20, + -15, -10, -27, -45, -41, -48, -57, -57, -59, -53, -43, -51, -54, -59, -51, -47, -20, -12, 7, -7, -52, -72, 58, -50, -9, 101, 34, -34, 35, 52, + -12, -12, -9, -12, -5, -10, -20, -10, -10, -4, -6, -1, 12, 1, 15, 19, 3, 7, 5, 9, -8, 2, -10, 5, 9, 14, -8, -6, 9, -12, + 2, -8, -14, 6, 3, -6, -4, 3, -7, -23, -18, 0, -20, -21, -10, -13, -6, -13, -25, -16, -13, -13, -12, -11, -26, 32, 43, 28, 21, 17, + 15, 15, 11, 4, -2, -5, 12, 25, 15, -7, -9, -12, -17, -16, -7, -8, -8, -13, -12, -4, 0, -7, -4, -6, -16, -16, -13, -6, -20, -23, + -40, -24, -24, -29, -28, -21, -19, -4, 6, 20, 22, 38, 27, 18, 1, -8, -9, -1, -4, 2, -9, -4, 21, 22, -2, -6, -4, -25, -21, -20, + -19, -7, -7, -11, 6, 15, 1, 26, 26, -5, -5, -21, -4, -4, -5, -7, -16, -6, -18, -34, -36, -28, 0, 8, 11, -15, -2, -18, -11, -12, + -17, -13, -6, 7, -1, -8, 10, -1, 24, 12, -2, 9, 4, 11, 29, 44, 23, 45, 44, 32, 41, 37, 57, 73, 51, -3, 7, 9, 14, 11, + 2, 2, 0, -5, -5, -3, -5, 1, -3, -8, -5, -16, -17, -13, -5, -6, -6, -16, -15, -14, -14, -15, -15, -14, -9, -9, -2, -1, -2, 0, + 1, 2, -7, -19, -15, -1, 8, 9, 1, 0, -2, -4, 5, -14, -20, -31, -49, -46, -36, -45, -40, -26, -22, -8, -8, -2, -12, -14, -13, -7, + -4, 1, 5, 7, 24, 21, 10, 21, 13, 6, -12, -22, -33, -40, -47, -41, -39, -41, -38, -29, -25, -29, -23, -3, -15, -51, -56, -60, -63, -47, + -42, -44, -22, -9, 3, 16, 10, -9, -3, -9, -19, -10, 3, 7, 5, 14, 6, 0, 2, -13, -9, -18, -4, -12, -22, 37, 6, 54, -61, 37, + 92, -7, -4, 12, 14, 21, 21, -5, -12, 37, -3, 17, 20, 2, 3, 17, 1, 11, 19, 28, 11, 1, 24, 6, 10, 3, -5, 7, 8, 7, + 20, 14, -1, 11, 2, 15, 22, -10, -6, 7, -8, -12, -7, -6, -7, -9, 10, -15, -4, -1, 3, 8, -3, -8, -4, -8, -10, 6, 8, -127, + -7, 3, -5, -2, 1, -1, -2, -1, 1, 6, -4, -1, -3, 2, 9, 4, 2, 0, -5, 3, 1, 2, -6, -3, 1, 5, -7, -11, -9, -6, + 3, 0, -1, 1, 1, -1, -9, -16, -3, 1, -2, -6, -6, 2, -2, 2, 3, 1, -5, -9, -1, 0, 0, 11, 7, 8, 4, 7, 0, 3, + 4, 3, 2, 1, -2, 6, 7, 6, 2, 7, 17, 3, 0, 2, 2, 4, 7, 2, 5, 6, -8, 3, -3, -8, -1, -7, 9, 9, 5, -2, + 4, -7, -4, -8, -5, -9, -1, -4, -8, -3, 3, -7, 3, -4, -6, -2, -5, 5, -4, -3, 0, -6, -6, -15, -4, 4, 7, 2, -7, 7, + 3, 9, 4, 4, 6, 2, 4, 3, 5, -4, -2, -1, -4, 5, 1, 10, 5, -3, 0, -8, -2, -7, -3, -11, -8, -13, -5, -5, -10, -6, + -1, 3, -1, -2, 3, -3, 1, 1, 4, 3, 6, 5, 5, 0, 2, 0, 0, 2, 3, 2, -2, 2, -4, 3, 4, 3, 4, -4, -1, 4, + 0, -1, -5, 2, 4, 9, 5, 2, 10, 10, 15, 2, -8, 1, 0, 7, 6, 4, -2, -10, -5, -1, -1, -8, -4, -1, 3, 7, 5, 8, + 6, 10, 8, -4, -6, -4, -7, -8, -2, 1, 4, 3, 4, -3, 4, 6, 3, 7, 0, -6, 2, -4, -10, -14, 1, 2, 7, -5, -5, 12, + 9, 25, 7, -6, 23, 9, -2, -2, -5, -5, 14, 4, -3, 4, 2, 17, 12, -6, 11, 8, 3, 3, -1, -13, -4, 16, 1, 3, -5, 1, + -14, -1, -7, -11, -6, -6, 4, 4, 7, -11, 4, 10, 2, 0, -3, 3, 2, -4, 11, -2, 4, 4, 4, -7, -5, 4, 1, 9, 7, 1, + 3, -9, -3, -7, -7, 15, 4, -5, -1, -1, 0, 0, 10, -4, -5, 1, -5, -6, -2, 3, -10, -2, -6, -6, -10, -6, -3, -1, 6, 7, + 5, -7, -11, -2, 9, 1, -2, -5, 1, 4, 1, -2, -3, 5, 4, -3, -2, 5, -10, -5, 1, 2, -10, -5, -3, 1, -7, 6, 3, -4, + 6, 12, -1, 1, 6, -5, -7, 9, 7, 0, 10, 7, 8, 3, -7, 8, 6, 2, -2, -9, 0, -5, 1, 1, -5, 5, 4, -6, -5, 1, + 0, 6, 12, -1, -13, 1, -1, -3, -4, -3, -3, -6, 9, 1, -14, 1, -9, -4, -5, -4, 5, 7, -10, -10, -12, -4, 9, 7, 2, 8, + 11, -1, 3, 4, 2, 2, -1, 3, -1, 3, -2, -2, 0, 1, -2, -9, -12, -8, -5, -2, -4, -1, -1, -3, -6, -9, 1, 5, 1, 4, + -3, 0, -3, -6, -2, 2, 0, 0, 0, -3, -9, -2, -6, -8, -8, 2, 5, -4, 1, 2, -3, 2, 6, 0, 1, -5, 3, 7, 7, 2, + 5, 11, 9, 5, 7, -1, -10, -2, -2, -1, 10, -4, -4, 2, -5, -2, 0, 6, 3, -1, 11, 2, 8, 4, -6, 5, -2, -6, -14, -5, + -12, -6, -1, 0, 4, 2, 7, 2, 9, 0, 4, -4, -4, 0, -8, 5, 3, 5, -3, -8, -3, -2, 1, -7, -16, -3, 3, 8, 11, 3, + 4, 5, 1, 0, 3, -3, 16, 11, 0, 11, 17, 2, 1, 2, 7, 16, -8, 4, 1, 6, 4, 0, -1, -3, 6, 0, 0, 1, -3, 3, + 5, -1, -14, -3, -9, -4, -4, -8, -3, -7, -7, -3, 7, 3, 13, -10, 7, -4, 2, -1, -8, -5, 1, -3, -4, -15, -8, -1, -9, -9, + 4, 7, 4, 7, 1, 2, -5, -14, -6, 5, 3, 0, -2, -2, 0, 0, 5, -2, -5, -3, -8, -4, 3, 7, 12, -3, -2, -6, -1, -2, + 3, 1, -2, -2, -3, 3, -9, -13, -2, -3, 1, 3, 4, 8, 9, 6, 10, 7, 12, 19, 10, 3, -1, 7, 11, 10, 4, 2, 8, 5, + 4, 6, 9, -2, 1, 0, -1, -1, 7, 7, 9, -1, 1, 11, 9, 4, 5, 1, 6, 2, -5, -7, -13, -9, 2, 3, 3, 1, -6, -2, + -2, -4, 4, -2, -1, 1, -7, -9, 1, -6, -1, 2, -9, 0, 3, -7, 4, 14, 5, -4, 4, -8, -3, 4, 0, 14, 6, 10, 1, -1, + -16, 0, -9, -3, -10, -11, -4, -1, 2, 1, -3, 3, -4, -1, 3, 3, 2, 1, -3, -6, -3, -4, 4, 5, 9, 3, -3, -5, -6, 5, + 7, 9, 5, 5, -5, -6, -4, 0, -6, -5, -3, -1, 1, -2, -2, 1, 0, -3, -4, -5, 0, -5, 0, -1, -1, -9, -4, 5, -3, 1, + 2, 4, 4, 3, 1, -2, 8, 7, 4, -5, -6, -7, -8, -5, 0, 7, 4, 0, 2, -3, -6, -10, -11, -10, 0, 0, -2, 0, 9, 7, + 5, 8, 9, 5, -1, 2, -7, 3, -4, -2, 6, 7, -5, -2, 0, 1, 6, 4, -2, -3, -5, 1, -4, 3, 5, 4, 5, 2, -5, -10, + -7, 1, -1, 1, -12, -7, 3, -3, -10, -6, 0, 32, 6, 1, 3, 23, -11, -7, -3, 3, 1, 0, 7, 6, -3, 3, -10, -4, -18, -1, + 4, 2, -1, 5, 13, 21, 13, 3, 7, 5, -1, 1, 4, -1, -1, 1, -11, 14, 10, 12, -10, -2, -2, -1, -3, -4, -5, 1, -8, -9, + -6, -4, 1, -10, -3, 2, 9, -4, 0, 1, 3, 0, 3, -2, 8, -6, 2, -6, -4, 0, -14, -9, -17, -18, -6, -4, -1, 3, -3, 4, + 5, 4, -1, -7, -17, -6, -4, -5, -2, -11, -10, -10, -3, 5, -10, 1, 7, 2, 7, -1, 7, 4, -2, 1, 11, 10, -5, 1, 6, 15, + 6, -2, 1, 8, -1, -4, 8, -4, -10, 1, 3, 5, 5, 1, -3, 6, 7, 8, 9, -3, 1, 10, 5, 6, -2, 2, -7, -7, 3, -11, + -5, 6, -2, -3, 1, 5, 9, 8, 8, 12, 10, -4, -5, -6, -8, -9, 0, -7, 7, -1, 5, 9, 7, -8, -6, 2, -11, -19, -8, -10, + 6, 1, 5, 0, 2, 0, 10, -8, 5, 3, 6, -4, -1, -6, -4, 7, 8, 4, -4, 2, -2, 0, -1, 1, -3, 1, 9, 16, 11, 7, + 7, 2, -7, -5, -7, -10, -5, -4, -2, -6, -2, 2, 6, 6, 3, 6, 6, -3, -8, -9, -6, -2, 1, 1, 3, 1, 0, -4, 0, 3, + 1, 4, 5, 4, 0, -3, 7, 7, 1, -8, -6, 4, 6, 9, 3, 3, -1, -3, 3, 0, 10, 4, -1, -4, 2, -2, -6, 0, 0, -1, + 7, 1, 2, 2, -4, 8, 1, -3, 0, 11, 6, 3, 2, 3, -5, 1, 1, -10, 2, 0, -1, -8, -3, 0, -5, -3, -4, -5, 0, 4, + 1, 10, 5, -2, 5, -6, 5, -10, -1, 2, -3, 8, 1, 1, -8, 7, 8, 5, -10, 6, 13, 1, -18, -44, -27, 0, 13, 14, -3, -6, + -12, -8, -5, -12, -1, -11, -4, -1, -2, 14, 9, 6, 9, 10, 7, -1, -7, 2, 0, -2, 9, 0, 2, -1, 3, -1, 2, -12, -10, 0, + -1, -9, 3, -1, -6, -1, 2, 3, -3, 7, 8, 11, 3, 5, 5, 8, 2, 12, -1, 3, -14, -12, -9, -8, -7, -9, -19, -16, -20, -14, + -10, -8, -11, -6, -8, -16, -5, -5, -13, -3, -7, -11, 0, 0, 6, 2, -6, 0, 5, 5, 9, 6, -7, -8, -4, -7, -10, -8, -10, -13, + -8, -5, -4, -8, -5, 7, 11, -6, -2, -3, -2, -6, 3, 8, 1, 6, 10, 2, 9, 11, 7, 7, 12, 4, 2, 23, 13, 3, -4, 5, + 9, 4, 11, 15, 16, 18, 21, 16, 5, 14, 4, 12, 7, 7, 10, 14, 7, 4, -2, 3, -4, 7, -4, 0, -4, 4, -1, -5, -9, -15, + -9, -20, -4, -19, -20, -15, -20, -2, -7, -2, 10, 7, -7, 0, 5, -3, -3, 1, -9, -6, -15, -6, -10, -3, -1, -7, -2, -5, -9, -13, + -13, -1, 7, 2, -5, -4, -6, -9, -4, 2, -2, 0, 2, 4, 10, 7, 5, 8, 9, 7, 1, 5, 2, 7, -1, -7, 1, 1, 5, -4, + -9, -6, -6, 4, 5, 0, 6, 12, 2, 1, 3, -2, -10, 0, -3, -1, 1, 0, 9, 9, -6, 1, -4, -2, -1, 7, 2, 4, 3, -5, + -8, -9, -2, -8, -3, 4, 4, -2, -10, -4, -10, -9, -8, -2, -4, 2, 6, 5, 6, 0, 10, 14, 2, 2, 3, 0, 0, -2, 0, 2, + 2, 4, 7, 1, -1, -2, -6, -7, 3, 1, 3, 2, 5, -6, 1, 6, 15, 13, 12, 19, 15, -8, -4, -4, 8, 25, 15, -18, -57, -43, + -5, -1, 7, -12, -11, -17, -24, -17, -17, -5, 0, 2, -1, 3, 15, 23, 23, 8, 0, -1, 12, -3, -10, -1, 2, -9, 0, 4, -1, 1, + 5, -11, -8, 6, 3, -4, -1, 1, 8, -1, 5, -6, 6, 5, -4, 2, 8, 5, -1, 8, 8, 4, 1, 11, -18, -32, -26, -24, -19, -15, + -7, -17, -9, 1, -11, -11, -9, -17, -13, 0, 7, 0, 9, 1, 5, 17, 24, 20, 14, 15, 8, 9, 11, -9, -11, -7, -5, -20, -15, -9, + -18, -15, -13, -7, -5, -12, -15, -19, -16, -12, 6, 19, 14, -1, -9, 8, -5, 9, 16, -3, -15, -11, -8, -22, -12, -1, 0, 4, 14, 19, + 16, 17, 14, 12, 15, 4, -4, 4, 0, 5, 11, 18, 13, 17, 40, 35, 32, 21, 17, 10, 17, 16, 19, -6, -8, 7, 11, 4, -2, -7, + -8, -7, -3, -15, 3, -11, -22, -22, -46, -56, -45, -35, -35, -14, -13, -8, -2, 6, -4, -2, -1, 6, 7, 6, 15, -40, -36, -33, -25, -27, + -21, -26, -24, -24, -24, -19, -16, -16, -11, -4, 1, 11, 18, 23, 27, 24, 26, 25, 23, 20, 16, 24, 20, 5, -2, 2, 3, -1, -2, 7, + 10, -1, -3, -11, -5, -9, -10, -14, -7, -4, -4, -3, 0, -18, -19, 4, 1, 6, 18, 4, -1, 11, -1, -1, 1, -5, 6, 8, 8, 11, + 12, 6, 7, 12, 10, -4, 1, -5, 1, 6, 12, 11, 11, 18, 16, 28, 9, 19, 10, 6, -6, 1, -1, -3, 1, 4, 17, 14, 10, 4, + 13, 15, 20, 30, 35, 33, 25, 7, -24, -46, -54, -46, -53, -33, -26, -16, -14, -12, -26, -21, -33, -39, -71, -92, -127, 9, -33, -50, -70, -39, + 23, 27, 10, -89, -55, 9, 8, 14, -22, 5, 21, -1, 0, 9, 14, 8, 1, -8, -4, 4, 14, 2, -2, -4, -2, -5, -11, -17, -11, 7, + 1, -12, 2, -8, -2, 2, -15, -4, -10, -4, 0, 3, 4, 2, 2, 10, 0, 9, 7, 3, 7, 19, 14, 13, 21, 19, 24, 26, 24, 3, + 13, 10, -15, 24, 22, 4, 6, -6, -8, -9, -13, -12, 8, 2, 2, -15, 1, -14, -7, -7, 4, -4, -10, -4, 5, -1, 6, 12, 5, 2, + 12, 13, 12, -4, 3, -11, -1, -6, 6, -4, 7, -4, 1, 14, -5, -5, -17, -24, -11, 8, -14, -16, -8, -18, 2, -20, -7, -12, 1, 13, + 19, 12, 17, 18, 2, 7, 11, -1, 3, 28, 14, 14, 27, 16, -7, 41, 37, 23, 12, 11, 11, -4, -6, -15, -14, 5, 9, 7, 5, -10, + 15, 16, -13, -16, 12, 7, 14, -7, -8, 20, -11, -4, -35, -17, -29, -12, 16, 30, 18, 16, -18, -19, -2, 16, 28, 1, 11, 32, 49, 39, + 11, 13, 11, -6, 4, -6, 0, 0, -4, -17, -7, -3, 4, -5, 0, -10, -3, 9, 5, 9, -6, 6, 27, 13, -17, -17, 8, 12, 6, -7, + -10, -24, -22, -16, -9, 7, 11, 6, 12, -4, 18, -5, -9, -1, 5, 4, 6, 14, -6, -15, -15, -26, -33, -27, -7, -13, 2, -12, 8, 2, + 11, 6, 9, 8, 7, 25, 11, -5, -3, -26, -16, -17, -5, 8, 0, -2, 2, 0, -1, -2, 14, 8, -18, -24, -25, 3, 20, 14, 15, 15, + 8, -9, -22, -29, -15, 10, 27, 21, 3, -9, -22, -27, -48, -39, -14, -13, -12, 12, -1, 7, 10, -27, 7, 21, 9, 7, 16, 18, 39, -8, + 57, 48, 23, -5, 14, 11, 25, -33, -12, -43, 7, 5, -16, -1, 1, 19, 19, -3, -7, -6, 52, 21, 16, -7, -1, 17, 4, -15, 23, 23, + 19, 10, 16, 48, 31, 36, 14, 10, 1, 14, 6, -14, 14, 14, 3, -4, -8, 4, 9, 32, 5, -9, -8, 30, -1, 11, -4, 2, -11, -12, + -27, -18, -25, -13, 5, 10, -9, -6, 20, -1, -15, -21, -30, -22, -4, 13, -5, -14, -3, -21, -3, 2, -17, -27, -23, -22, 1, 5, 16, 25, + 18, -23, -20, -29, -6, -13, 2, -6, 22, 16, 4, 1, -8, -13, 22, 21, 25, 11, 1, -11, 4, -20, -4, 22, 13, 5, -1, 13, 10, -8, + 43, 30, -1, 37, 38, 29, 37, 2, -2, 6, 8, 8, 12, -38, -12, 25, 24, 8, -3, -4, 16, 45, 33, 15, 18, 7, -10, -20, -18, -8, + 22, -13, 26, 24, 5, -16, -2, -2, -5, 6, 27, 26, 25, -12, 18, -2, -28, 0, -18, 2, 14, 18, 7, 30, 9, -5, 2, -2, 8, -4, + 14, 13, 12, 33, 5, 17, 19, 18, 15, 3, 13, -9, -9, 9, 0, 9, -5, 0, -14, -13, -11, -21, -11, -17, -2, -12, -1, 9, 5, -19, + -3, -9, -1, -4, 4, -2, -12, -5, -9, -11, -6, 2, 8, -2, 5, 24, 21, 9, 5, 8, -10, -1, -4, -15, -10, -16, -23, -19, -28, -18, + 1, 9, -15, 7, 3, -5, -5, 0, -5, 1, -15, -5, -20, -33, -24, -15, 10, 0, 16, 20, 17, 13, 19, 35, 9, 7, 19, 6, -21, -14, + 8, -5, -1, 2, -20, -27, -17, -14, -7, -13, -2, -1, -2, 8, 7, -7, -11, 0, -5, -11, 0, 15, 5, 1, -3, -7, -4, 5, 24, -10, + 2, -2, 15, 15, -19, 56, 20, -1, 3, 11, 4, 7, 4, -6, -26, 6, 13, -18, 21, 3, 6, 14, 4, -14, -18, 13, 4, -21, -3, -12, + -33, -42, -11, -1, -8, -29, 6, 3, -8, -9, -4, -1, -3, 1, 17, -13, 1, -15, 4, 19, -26, -17, -14, 15, 8, -8, -13, 0, -22, -11, + -36, -11, -11, -21, -20, -46, -30, -31, -3, 9, 19, 0, -2, -13, -8, -5, -15, -19, -7, 0, 5, 27, 27, -1, -1, -16, -25, -30, 9, -6, + 7, 40, 53, 40, -6, -19, -6, -10, 28, 16, -10, -28, -12, -22, -16, -20, -24, 4, -4, -29, -20, -9, -36, 8, 18, -5, -28, -17, 5, -8, + -23, 6, -7, -32, -10, -1, -14, 10, 9, -6, 26, -6, -59, -20, -2, -29, 5, 14, -6, -4, -4, 32, 6, 3, 21, 20, 18, 20, -13, 3, + 25, -2, 13, 15, -2, -36, 40, -36, 0, -10, 4, -10, -2, 10, 24, 2, -7, 0, 14, 6, 30, -7, 42, -1, 9, 28, -11, -22, -19, -4, + -23, 8, 3, 1, 10, -16, 3, -43, -7, -3, -6, -1, -8, -10, -5, -23, -14, -13, 8, 12, 0, 2, -1, 3, 7, -1, 12, 20, 14, 8, + -3, 13, 24, 25, 10, 14, -1, -1, -1, 1, -15, -27, -4, -2, -16, -3, 7, 0, -1, 0, -3, -5, -18, 10, 30, 11, 2, -12, -10, -7, + -10, -5, -2, -3, -14, 2, 1, 5, 13, 17, -3, -10, -18, -1, -8, -7, 4, 11, -2, -2, 5, 24, -7, 8, 6, 6, -6, 22, 1, -3, + -6, 12, 11, 13, -9, -4, 11, 3, 8, 21, 18, 11, 18, 18, 3, -8, 5, 3, 20, 21, 16, 1, -10, -14, -16, -26, -13, -25, -8, 20, + 17, 27, 22, 22, -29, -18, -10, 9, -5, -19, 25, 15, -1, 17, 7, -13, -1, -9, 12, 22, 6, 0, 14, 10, -1, 11, 52, 43, 6, -4, + 14, -10, 7, -11, -3, -26, -14, 14, 6, 3, 10, 2, -8, 7, 8, 31, 2, 18, 6, 17, 20, 4, -3, 10, 26, 25, 10, 20, 4, -6, + -19, -21, 4, 5, 3, -11, 2, 2, -17, -13, -26, -9, 8, 16, -10, 27, 24, 4, 13, -4, 1, -23, -58, -59, -40, 8, 12, 16, 24, 23, + 18, 1, -7, -8, -10, 0, -2, -23, -31, -12, -36, -5, 6, -14, -8, -4, -2, -3, -1, 25, 12, -9, 2, 18, 41, 41, -9, 7, 9, 6, + -22, -18, 1, -12, -26, -7, 0, -28, -45, 5, 14, 40, 33, 9, 16, 15, -21, -9, -31, -50, -32, -16, -43, -24, -16, -8, 6, 40, 14, -27, + 11, 17, 24, 19, 37, 7, -8, 30, 26, 14, 37, 14, 12, -23, 9, -5, 26, -12, -7, 17, -9, 22, -3, -31, -16, -29, -14, -42, -19, 7, + 41, 11, 5, 24, 10, 34, 36, 68, 16, 19, 10, -19, -26, -57, -17, -26, -12, 2, 7, -7, -19, -25, -18, -13, -21, -4, 0, -4, 10, -9, + 11, 2, 23, 9, 16, 13, 8, 13, -8, -22, -1, 13, 10, 11, 16, 11, -10, -19, -25, -17, -12, -8, -5, 3, -2, -1, 0, -13, 13, 23, + -7, -8, 6, -13, -16, 2, -3, 12, 7, 3, 13, 21, 18, 27, 25, 14, 6, 15, 14, -3, -10, 5, -10, -15, -5, -6, 14, 31, 18, 0, + -4, -36, -27, -27, -2, -5, -8, -26, -13, 1, 12, 14, -2, 6, -6, 22, 2, -15, 3, 15, 25, 8, -7, -1, -10, -13, 0, -13, -11, -1, + 9, 8, 2, 26, 8, 15, 32, 12, -2, -5, 2, 22, 16, 16, -5, 44, 0, -35, 11, 4, -28, 47, -4, 37, 43, -19, 16, -15, -33, 4, + 19, 12, 18, 6, -22, 1, 8, -13, -28, -9, 2, 13, 10, 20, 7, -5, 9, -10, -1, -6, -10, -8, 10, -2, 16, 15, -10, 3, 22, 8, + 24, 4, 23, 0, -13, 1, -8, -12, -11, -11, -13, -1, 7, 21, -22, -14, -11, -10, 5, -6, -51, -18, 17, 7, -14, -27, -48, -63, -79, -61, + 0, 21, 45, 42, 48, 9, 32, 18, -12, 23, 51, 50, 27, -16, -18, -25, -7, 15, -14, -12, -3, -36, -35, -23, -10, 17, 35, 17, 9, 37, + 51, 4, 20, 74, 64, 23, 30, 28, 14, 7, -2, -13, -20, -42, -27, 2, 49, 77, 52, 25, 3, 43, 32, 17, 42, 33, 52, 29, 15, 14, + -4, -57, -26, -27, -20, 16, 7, 27, 30, 41, 19, 31, 63, 33, 27, 58, 23, -3, 17, 28, 4, 30, 31, 7, 48, 25, 14, -3, 27, 36, + 47, 48, 74, 20, 41, 22, -27, -9, 8, 13, -3, 7, 25, 14, -8, 16, 32, 41, 28, -3, -13, 0, 2, 21, 3, -1, -28, -13, -22, -4, + -1, -12, -20, 3, 6, -1, -4, -26, -26, -1, -8, -20, -10, -18, -34, -14, 4, 9, -17, -15, -23, -3, -19, -17, -7, 10, 8, -4, -6, 11, + -7, 5, -8, -9, -9, -30, -39, -23, -45, -54, -33, -50, -44, -56, -52, -18, 19, 15, 25, 6, -21, -6, -15, -25, -3, -21, -19, -34, -40, -46, + -52, -60, -24, -38, -22, -3, -34, -24, -32, -1, -18, 2, 35, 36, -6, 5, 14, -6, 10, -3, 1, -11, -24, -33, -20, -27, -34, -28, -18, -25, + 8, 6, 8, 13, 5, -7, -16, 2, 8, 13, 25, 15, 12, -2, 1, -3, -12, -14, 12, 16, 89, 12, -48, -11, -15, -20, 39, -45, 33, 9, + -34, -6, -9, -60, 25, 17, -25, 23, -26, 1, 20, -3, -3, -31, -12, -6, -4, 8, 39, 22, 6, 11, 11, 0, -23, 4, 4, 5, 18, 10, + 15, 6, 11, 37, 28, 26, 12, 29, 20, 12, 5, -1, 0, 19, 8, 10, 4, 11, 36, 6, -4, 18, 11, 23, -51, -48, -5, 4, 19, 8, + 3, 15, 2, -31, -14, 37, 4, 0, -31, -17, -50, -21, 17, 11, 4, 7, -21, -21, -26, -15, -1, 9, 21, 9, -6, -29, -32, -30, -49, -32, + -34, 4, -13, -17, -59, -49, -47, -38, -31, -28, -29, -3, 10, 38, 18, 9, 36, 13, -2, -7, 47, 66, 22, 0, 11, -37, -52, -20, -43, -56, + -31, -21, -32, -25, -12, 11, 17, 30, 54, 52, 78, 65, 45, 38, 53, 39, 34, 27, -6, 34, 2, 28, 25, 21, 52, 31, 53, 51, 72, 62, + 58, 60, 90, 57, 76, 73, 66, 14, 21, 28, 4, 14, 7, -8, 12, 10, -25, 19, 26, 34, 56, 32, 71, 59, 90, -56, -36, -20, -7, -2, + -11, 2, 5, -3, 7, -6, -7, -11, 23, 32, 33, 32, 15, 10, 25, 18, 22, 22, 11, -17, -16, -2, 0, -21, -30, -24, -24, -38, -39, -36, + -26, -11, -11, -12, -13, -13, -6, 13, 19, 5, 26, 26, 19, 22, 12, 5, 3, -7, -16, -9, 6, 26, 6, -5, 0, -21, -9, -12, -19, -8, + -18, 19, -3, 0, 1, 7, 6, 4, 20, 22, 15, 10, 14, -7, 18, -6, -8, -20, -14, -11, -24, -33, -27, -28, -27, -17, -10, -23, -8, -1, + -7, -24, -17, -32, 1, 14, 7, 10, 13, 30, 7, 0, 9, -8, -1, 17, 7, 2, 2, -6, -24, -43, -56, -88, -127, 41, 15, 60, 0, 25, + -28, 110, 45, 0, 22, -114, -17, -18, -60, 4, -31, -30, 24, -53, -7, -4, -55, -19, 11, -22, 25, 4, 10, 11, -21, -33, -20, -28, -26, -15, + 12, -1, -17, -14, 6, 8, 2, 15, 20, 6, 12, 2, 21, 1, -16, 8, 2, 8, 25, 18, 4, -14, 8, 16, 6, -3, 9, 3, -2, -35, + 14, 14, 14, 6, 6, 1, 2, -13, 0, 5, -6, -11, -5, -4, -10, 0, 1, -7, 5, 18, 4, 5, -3, -5, 5, -5, 4, 3, -4, -5, + 8, 16, 0, 5, 12, 9, 2, -1, 4, 4, 0, 0, 6, 13, 1, 12, 6, 16, 13, 16, 9, 11, -8, -7, -2, -8, -15, -6, 20, 6, + -2, 9, -6, -10, 19, 9, 11, -2, -9, 2, 5, 11, 5, -8, 0, 9, 14, -3, -7, -3, -2, -8, -12, 6, -4, -3, -16, -3, -15, -13, + -3, -14, -4, -3, 5, 20, 15, -11, 2, -6, -17, -4, 9, 15, -6, -2, -4, -2, 10, 7, 1, -6, -18, -27, -5, -7, 12, 0, -9, -6, + -1, -8, -11, -11, -6, -6, -7, 2, -1, 6, 8, -1, 1, -2, -4, -3, -1, 2, -1, 3, -5, 0, -3, 1, 2, -1, 1, -2, -6, -4, + -7, 2, 2, -4, 0, 0, -2, 3, -4, -8, -10, -1, 10, 5, 4, 5, 7, 12, 10, 4, 4, -4, -4, -9, -11, -11, 2, 3, -2, -7, + -4, 6, -1, 3, 2, 8, 9, 8, -2, 5, 17, 13, 20, 19, 8, 3, 10, -7, -16, -20, -23, -10, -5, -14, 1, -2, 6, 8, 0, -6, + -6, -1, -4, -5, -3, 7, -2, -8, -10, -7, -7, -2, 2, 14, 13, 8, 5, 3, 9, -4, 5, -3, 0, -12, 10, 9, 10, 3, 9, 1, + -47, -45, 48, 14, -16, 7, -41, -10, 18, -23, -20, 1, -2, 11, 5, -13, 8, 0, -1, 7, 16, 17, 5, 9, 3, 18, 19, 18, 8, -3, + -6, -12, -5, 10, 16, 5, 8, 10, 23, 10, -12, -4, 3, 5, -14, 7, 15, 11, -5, -8, 6, -5, -2, 7, 10, 11, -2, 11, 11, -4, + 6, -3, 11, -6, 17, 23, 17, 13, 5, 15, 19, 12, 15, 16, -7, -2, -16, -7, -5, -18, -1, -3, 1, 4, 16, 10, 7, -1, -1, 14, + 4, 7, -9, -3, 5, 11, 9, -4, -4, 11, -1, -2, 1, -6, -1, -15, 1, 1, 6, 5, 8, 17, 12, 23, 16, 23, -2, -5, -6, -9, + -6, -14, -6, -3, -17, -2, 28, -4, -2, 10, -15, -8, -2, -4, -6, 5, 16, 17, 5, -4, 7, -5, 14, 10, 18, 25, -11, -2, -5, 4, + -4, -3, 3, 7, 7, -1, 17, 8, 1, 2, 14, 16, -5, 12, 3, 6, 16, 3, 6, -1, 5, -3, -3, -5, -15, -17, -15, -11, -12, 4, + 2, 2, -24, 2, -4, -1, 7, -3, -5, 9, 12, 18, 18, 9, 9, 6, 6, 1, -6, -5, -14, -5, -8, 2, 4, 7, 6, 1, -2, -1, + -7, -14, -13, -16, -16, -10, -8, -7, -12, -22, -15, -9, 0, -4, -5, -1, -4, -6, -3, -4, -5, 5, 14, 6, 5, 3, -12, -13, -13, -2, + 1, 6, -6, -11, -11, -11, 10, 18, 6, -3, -9, -11, 2, -5, -12, 0, 4, 2, -1, -8, -5, 1, 10, 8, 3, -18, -4, -7, -5, -4, + 1, -4, 11, 4, -5, -4, 2, 4, -5, -1, -1, -3, 3, -1, 4, 4, 10, -3, 4, 0, -5, -5, -4, -16, -9, -1, 6, 11, -6, 3, + 3, 2, -6, 10, 12, -63, -57, 31, 0, -33, -11, -64, -6, 10, -21, -1, -16, -3, 15, 3, -25, -9, -14, -2, 9, 0, 15, 8, 2, -3, + 24, 3, 16, 6, -16, -3, 5, 11, 6, 9, 5, 0, 1, 9, 11, -1, 2, -4, 7, 6, -6, 12, 3, 12, 2, -6, 7, -12, -4, -10, + -17, -18, -2, 7, 2, -15, -7, 10, 6, 7, 7, -2, -9, -5, 7, 8, 14, 14, 14, -4, -9, -2, 0, 2, 5, 5, 0, -6, 4, 16, + 0, 0, -11, -9, -6, 7, 5, -2, 5, -14, 3, 6, -2, -4, -9, -4, -3, -6, -9, -19, -23, -12, -16, -11, -7, -1, -11, -12, 2, -13, + -7, 2, 0, -9, -3, -5, -19, -14, 2, 2, 1, 1, -7, -5, -4, -8, -16, -15, -16, -19, -5, -3, -15, -6, -22, -24, -8, -9, -11, -1, + 6, -11, 1, -8, -9, -16, 8, 7, 8, 11, 5, -12, -26, -21, -20, 2, 3, 17, 11, 20, 22, 11, 15, 3, 2, 16, 17, 7, 13, 8, + 13, 2, 10, -3, 11, 0, 13, 4, 6, 6, -6, -4, 3, 7, 4, 0, 6, 2, 9, 5, 0, -1, -3, -3, -10, -9, -9, -9, 1, 12, + 16, 3, -3, 4, 8, -1, 4, 4, 7, 12, 7, 8, 9, -5, -8, 0, 12, 10, 3, -9, -8, -10, -11, -14, -13, -19, -13, 5, 2, -2, + 6, -3, 6, -4, -14, -7, -7, -12, -11, -14, -15, -15, -22, -16, -18, -23, -24, -16, -12, -9, 6, 13, -3, 14, -1, -15, -6, -7, -6, -4, + -8, -1, -12, -8, -4, 2, 7, 12, 6, 10, 0, -13, -12, 0, -6, -11, -2, 16, 7, 8, 8, 6, -2, 6, 4, -3, -10, -8, -12, -1, + 7, -3, 6, -1, -5, 3, 2, 10, 10, -12, -42, -36, 35, 18, -18, 12, -12, 8, 31, 8, -6, 19, 22, 20, -12, -14, -14, -7, -4, 2, + 6, 5, 17, 7, -6, 11, 14, 9, -11, -4, -4, -1, 0, -1, 2, 3, -9, -1, -2, 4, 3, 3, 16, 13, -9, 7, 16, 2, 9, -2, + -5, -13, -12, -12, -17, -7, -4, -6, 5, 5, -5, 1, 6, 6, -24, 19, 10, 4, -8, -30, -6, 10, 16, 19, 14, -3, -17, -3, -3, -1, + 3, -10, -9, 13, 17, 7, 18, 8, 1, 18, 22, 24, 22, 10, 18, 9, 18, 16, 2, 13, 19, 25, 19, 12, 5, -2, 1, -11, -3, -12, + -13, -22, -7, -11, -26, -27, -13, -10, -16, -21, -31, -42, -27, -30, -35, -32, -31, -23, -13, 7, -8, -6, -2, -14, 16, -1, -10, 6, -7, -16, + -13, -38, -2, -14, 14, 6, 15, 15, 9, 3, 3, 2, -1, -8, -3, 6, 4, -4, 3, 8, 1, 7, 0, 18, 2, 17, 20, 7, 7, -9, + -7, 6, -12, 4, 3, 11, 5, 10, -2, 6, -4, -5, -7, -4, 10, -11, 1, 0, 9, 11, 10, 8, 7, 13, 20, 17, 8, 5, -2, 4, + -4, 4, -5, 8, 15, 14, -3, -12, 0, 2, 2, 10, 12, 7, 8, 20, 17, 3, -7, -9, -3, 7, 0, -6, -7, -11, -10, -14, -15, -18, + -30, -24, -19, -15, -11, -4, -9, -4, -11, -13, -32, -38, -13, -10, -12, -13, -14, -20, -13, 4, 2, -10, 0, 4, 13, 17, 4, 4, 2, -8, + -23, -26, -9, -4, -1, 3, -8, -12, -8, -7, -4, 11, 7, -3, 1, 12, -7, -8, 4, 12, 5, 15, -7, -16, -27, -9, -12, -13, 2, -1, + -5, -10, -12, -29, -15, -5, -13, 5, 6, -7, -3, -20, -18, -8, -27, -48, -41, 46, 2, -22, 51, -8, -11, 22, 11, 14, 20, 14, 47, 1, + -19, -25, -7, 11, -1, -9, 3, 13, -13, -10, -12, -7, -7, -8, -16, -25, 8, 0, -7, -22, -16, -9, -10, -10, -14, -5, -9, -16, 0, -4, + 13, -3, -5, 0, -23, -22, -11, -11, -14, -8, -7, -13, 8, -5, -8, -1, -8, -4, -4, -58, 15, 19, 8, -16, -36, -25, -5, 11, -5, 14, + -3, -14, -5, -18, 3, -16, -17, -9, -17, -9, -6, -4, -13, -18, -8, -25, -12, -8, -26, -35, -18, -13, -9, -27, -47, -43, -23, -28, -22, -25, + -12, -31, -47, -24, -28, -32, -24, -3, 4, -16, -6, 14, 15, 1, 4, -5, -12, 2, -13, -5, -2, -12, -8, 2, 1, -10, 13, 16, -6, 22, + 4, 6, 15, 8, -15, -5, -11, -4, 15, 15, 19, 18, 17, -4, 10, 12, 31, -9, 12, 20, 6, -1, -1, -4, 3, 3, 35, 6, 9, 12, + 8, 3, 13, 16, 21, 29, 23, 18, 38, 21, 18, 3, 11, -11, -2, 10, 1, 14, 15, 22, 14, 9, 11, 13, 8, 12, 2, 9, 4, 12, + 13, 0, 1, 4, 7, 0, -1, -2, 4, 7, 8, 1, -10, -10, -12, -5, 3, 9, 8, 3, 2, 13, -5, 0, 4, 2, 0, 8, 12, 24, + 17, 11, -3, -10, -9, 4, 6, 1, 2, -5, -8, 9, 13, -4, -5, -8, -8, 4, 6, 2, 8, 8, 0, 1, 3, 11, 16, 17, 11, 10, + 4, -1, 17, 5, -1, -19, -7, -6, 3, -1, -2, -11, -9, -19, -16, -5, 1, -9, -8, -2, 6, -7, -2, 8, 8, 7, 9, 6, -2, -5, + -10, -13, -17, -1, 3, 0, -9, 11, -2, 4, 0, -4, -12, -12, -15, 1, -13, -1, 7, 19, -20, -51, 23, 11, 14, 61, -24, 30, 20, -2, + 13, 23, 24, 52, 16, -1, 18, 12, 19, 32, 7, -5, 27, 7, -5, 13, -10, 2, 2, 4, -3, -3, 13, 26, -4, -11, 16, 29, 7, -7, + 7, 23, 2, -10, -1, 7, 2, 5, -8, -7, -2, 2, 12, -14, -6, -2, -9, -2, 0, -4, -2, 6, -2, -1, -101, 5, 8, 8, 6, 3, + 4, -6, 3, -1, 9, -4, -3, 0, -14, 2, 8, 7, 14, 36, 16, 13, 3, -7, -19, -4, -12, -10, -13, -15, 6, 12, 14, -3, 9, 7, + 17, 20, 12, 26, 33, 24, 6, 5, 4, -6, -8, -2, 0, -2, -7, -3, -7, 1, -6, -17, -22, -37, -25, -29, -12, 5, -6, -14, 1, 0, + -13, 7, -1, -26, -24, -17, -4, -3, -9, -8, -1, 0, 9, 4, 17, 5, 35, -2, 7, 10, -4, 2, -25, -10, -10, 1, -14, -2, -10, 12, + -1, 21, 24, 2, -7, 20, 21, 16, 11, 11, 19, 1, 14, 6, 6, -1, -4, 14, -24, 5, 22, 9, 20, 5, 29, -20, -17, -9, -1, -5, + -6, -5, -2, 3, 0, -5, -4, -2, -8, -9, -9, -2, -9, -5, -14, -6, -19, -14, -9, -7, -8, -9, -6, -5, 5, 7, 18, 19, 18, 12, + 15, 11, 12, 21, 23, 29, 25, 29, 27, 21, 25, 32, 25, 20, 22, 15, 19, 20, 18, 11, 2, 2, -8, -7, -8, -1, -3, -6, -1, 12, + 2, 7, 1, -13, -9, -7, -14, -15, -18, -15, -18, -20, -26, -17, -18, -8, -8, -13, 2, 10, 0, 7, -5, 4, -4, 11, 5, 2, -3, 6, + 23, 19, 10, 10, 9, 18, 10, -2, 0, 2, 1, -9, 3, -3, -3, 4, 2, -7, -6, -5, 4, -11, 3, 8, -7, -51, -78, 109, -45, -127, + 26, -24, 43, 14, -56, -8, -23, -24, 48, -32, -13, 0, 10, 32, -7, -20, -2, 10, 18, 5, 2, 1, 11, 10, 13, -7, 10, 10, 8, 12, + 1, -10, 6, -9, -8, 7, 7, -1, -10, 14, -1, -4, 1, 6, 11, 9, 10, 9, -2, 4, -12, 4, 7, 9, 5, -6, 2, 9, 5, -59, + 3, 1, 0, 4, 5, 9, 5, 0, 2, -4, -2, -4, -4, -2, -1, 0, 4, 5, 6, 2, 1, 3, 4, 1, 5, 2, -2, -3, -2, 6, + 4, 1, -2, 2, 6, 1, -4, 2, 3, 3, -1, 3, 8, 4, 0, -2, -6, -8, -5, -3, -1, 4, 4, 3, -8, -1, 2, 3, 6, 15, + 4, -1, 9, 1, -3, 7, 8, 7, 6, -4, 4, 1, -2, -4, -1, 8, 8, 1, 2, -4, 0, -5, -3, -2, 5, 5, 4, 14, -4, -6, + 4, 2, -2, -1, -3, 3, 2, -1, -2, -3, -3, -10, -6, 1, -2, -2, 0, -5, -4, 1, 1, -3, -3, 6, -5, -4, 1, -4, 1, -9, + 3, 6, 1, 2, 3, 3, 1, 5, -1, 2, -2, 2, 2, -2, 1, -1, 4, 9, 5, 2, -3, 0, 2, -1, -4, -3, 0, 2, 6, 1, + -4, -3, -5, 0, -3, 4, 0, 4, -2, -1, 0, 2, 3, 1, 3, -5, -4, 4, -7, -4, 6, 0, 1, 1, 0, -2, 6, 1, 0, 4, + 0, 3, 5, -3, -5, -4, 4, 1, -1, -5, -6, -7, 3, 2, 3, 2, 1, 4, 5, -2, 0, 0, 2, -2, -3, -3, 5, 3, -3, -3, + -4, -1, 1, -1, 3, 0, -2, -2, 3, -2, 0, 1, 1, 2, 0, 1, 8, 3, -7, 2, 2, 1, -4, 3, -2, -2, -4, -5, 7, 0, + -24, -5, 15, -10, 11, -4, -1, 1, -1, 7, 5, 0, 0, -5, -4, 11, 12, -1, -1, 3, -1, 7, 3, 2, 9, 1, -1, 2, -3, -5, + 6, 1, -9, 4, 0, -1, 4, -2, 3, -3, -3, -4, -1, -3, -5, -2, -8, -3, 2, 1, 6, -1, 3, -5, -4, 0, -8, -2, 1, 0, + -3, 0, 0, -2, 1, 8, 6, 2, 5, 0, 1, -3, -1, 2, 1, 4, 4, -4, -6, -1, 3, -9, -1, 2, 2, 6, 10, 1, -1, 0, + -5, -4, -1, -2, -1, 5, 4, 8, 2, 2, 3, -6, -9, -3, 6, 3, 2, -3, 1, -3, -2, -5, -3, -3, -2, 0, -7, 0, -3, -2, + 0, 6, -1, -5, 1, 7, -4, -9, -4, -9, -1, 7, 0, -2, -5, -7, -6, -4, -1, -6, 3, 7, -1, 4, -2, 7, -4, -1, 7, 10, + 4, 1, 0, 4, 1, 1, -4, -7, -2, 3, 1, 4, -4, -2, 4, -1, -7, -2, -8, 3, -2, -2, -2, -5, -3, 0, -3, 4, 2, 5, + 3, 5, -5, -3, -2, -2, 2, 0, -4, -3, -2, 0, -2, -1, -4, 0, -3, -1, 2, -2, 0, -4, 0, -4, -2, -1, -1, 4, 1, 0, + -3, -4, 1, -3, 3, 3, 1, 5, 6, 8, 7, 2, 1, -4, -2, -2, -2, -5, -2, -6, -5, 0, 2, -3, 1, 2, 2, -2, 7, 4, + -2, 4, 1, 0, 2, 3, 1, 2, 3, -2, -2, 8, -2, -6, -2, -6, -3, 3, 1, -3, -5, -3, 6, 4, -1, -3, -1, -6, -9, -3, + 6, -1, 1, -5, -2, 5, 5, 2, 4, 0, 3, -3, -1, -1, 3, -6, -1, 2, 1, -1, 4, 2, -5, 2, 0, -5, 0, 2, -4, -6, + -3, 6, -6, 5, -4, -12, -17, 21, -3, 7, 2, 16, 7, 1, -2, 7, 9, 0, -5, -6, 8, 4, 12, -4, -6, -2, -2, 1, 3, 4, + -6, -8, -3, 7, 6, 1, -11, -9, 8, 4, 2, 4, -2, 0, -1, -4, 1, -8, -3, 0, 0, -1, 3, 0, 2, -5, 0, 5, 1, -6, + -8, 1, 1, 2, 1, 0, 1, -1, 4, -4, 8, -2, -2, -1, -2, 8, 1, -8, -1, -7, -2, 2, 9, -3, -2, 2, -7, -10, 3, 9, + 1, 2, 2, -5, 1, -2, -3, -5, -2, 3, -1, -5, -2, -6, -6, -7, -5, 5, 10, -4, -4, 7, 2, -3, 0, -6, -2, -6, 0, -3, + -2, -5, -6, -1, -1, -1, -7, 3, 2, 2, 12, 6, -10, -10, -1, -5, 6, 5, -4, -4, -8, 1, 3, -2, 6, -4, -5, 3, 5, 5, + 6, -2, 1, 0, 0, -13, 2, 3, -5, -4, 0, -6, 2, -2, 7, 3, -3, -5, -2, -2, -3, -10, -2, -11, 6, 8, 4, 10, 5, 7, + 10, 9, 9, 5, 3, 4, 6, -2, -2, 5, 6, -1, 2, -4, -1, -2, 4, 5, 5, -2, -1, -3, -4, -3, -5, 2, 2, 4, -1, 2, + -2, 5, 5, 2, 2, -3, 1, 5, 5, 6, 7, 3, -6, -6, 0, -2, -4, 0, 1, 3, -2, 2, 4, -4, -2, 2, 1, -1, -2, -1, + 6, 3, 2, 4, -2, -1, -5, 0, 0, 0, 3, -3, -3, 4, 5, -7, -1, -4, -4, -6, -1, 8, 2, -2, 0, 6, -3, -1, -5, -3, + -5, -4, 1, 4, 0, -6, -1, 1, -4, -2, -8, -6, -5, 4, 5, 5, -1, 4, 4, -3, 3, -5, -4, 1, 1, 1, 4, 10, 3, 0, + 7, -3, 4, 3, 4, -4, 8, 3, -2, -6, -8, -16, 16, -8, 6, -4, -3, -4, -2, -4, 4, -1, 5, -11, -6, 6, 5, -1, -1, 3, + -8, -11, -8, -1, 0, -11, 8, 6, 2, 9, 6, -1, -8, 2, -3, -4, -1, 2, 8, 6, -4, -1, 2, -4, -5, 7, 1, 0, -2, -1, + -3, 3, 5, 3, -1, -5, -1, 5, 3, 9, -4, 4, 6, 4, -4, 0, -2, 0, 2, 1, -2, -8, -6, -10, -2, 3, 0, -2, -7, -5, + 1, -5, 0, -3, -3, -1, 7, -1, -6, -11, -13, -6, -3, -1, 3, -6, -3, 0, -1, -6, -6, 9, 8, 9, 1, 4, 3, 6, 1, 0, + 6, 3, -2, 0, 7, 9, -2, 2, 3, 5, 0, -9, -3, -4, 5, 4, -2, -2, -1, -3, -11, 2, 3, -3, 4, 1, -2, 1, -5, 1, + 1, -1, -4, 8, 13, 7, 5, 1, 3, -8, -11, -1, 2, -5, 2, 7, 1, 1, 7, -2, -3, -6, -5, -2, 1, 6, -7, 5, 1, 6, + 2, 7, -2, 4, 0, 7, 9, 9, -4, -2, -1, -3, -1, 0, 6, 10, 11, 9, 4, 5, 2, -1, 0, -2, 3, 0, 3, 6, 2, -1, + 2, -5, -4, 1, 2, 6, 2, -2, -5, -4, -1, -1, 3, -2, -2, 4, 5, 1, -4, -2, 1, -1, -2, -3, -4, -4, -3, -3, -2, 1, + 0, 0, -6, -5, -4, 0, 2, 5, 2, 4, 7, 2, 5, 2, 1, 1, -5, -1, -1, 2, -6, 4, 1, -1, 4, 4, -6, 0, -2, 2, + -2, -9, 0, 1, -1, 2, 8, 10, 0, -2, 1, 1, -4, 0, 3, 2, -2, -1, 0, -3, -3, -3, -4, 2, -3, 1, -2, 6, -3, -1, + 3, 0, -1, 1, 5, 6, 3, -3, -4, -9, -2, -1, -7, 0, 1, -19, -6, 26, -18, 12, -27, 2, -10, -6, -11, -1, 4, 4, 4, 4, + 0, -9, -3, 6, 0, 8, 10, 4, 4, -9, 1, 1, 2, 10, 5, -2, -4, 1, 2, -4, 3, -6, 8, -2, -6, -1, 1, 2, -1, -1, + 3, -1, 4, -6, -1, -5, 1, 5, -1, -3, -7, -1, 1, 6, 4, 3, 1, 2, 3, -13, -10, -12, -4, -5, -7, -5, -4, -4, 3, 4, + 5, -11, -6, -1, -1, -7, -8, -1, -1, 2, 1, 6, 5, 0, 0, 2, -6, -6, -10, -14, -7, 1, -1, -4, -13, -10, -2, -10, -17, -6, + -10, -5, -12, -8, 0, -1, -2, 1, -6, -4, -6, -1, -9, -6, -3, -3, -12, -7, -4, -7, -11, -1, 5, 6, 0, -13, -5, -4, -8, -9, + -7, -16, -17, -24, -24, -11, -4, 7, 9, 2, 0, 6, 12, -4, -1, 0, 7, 3, 0, 4, 11, 9, 2, -1, -3, 2, -4, -7, -5, 1, + 6, 3, 9, 5, 7, 12, -2, 2, 5, -3, -1, 0, 3, 6, 7, 14, 12, 6, 5, -6, 7, 2, 4, 6, 6, 6, 4, 0, 2, 3, + 2, 3, 8, 2, 5, 2, 1, 1, 1, 0, -5, -6, -4, -4, -3, 2, 6, 1, -2, -2, 6, 10, 0, -6, 2, 0, 1, -1, 3, -1, + -1, -4, -2, -9, -10, -9, -11, -12, -4, 0, -8, -6, -2, -1, -2, 1, -1, 1, 1, 1, 0, 1, 2, 3, 10, 6, 9, 3, -1, 2, + 6, -5, -6, -4, -1, 3, -4, 0, 2, 6, 1, 2, 5, 10, 1, 0, 4, -3, -2, 1, 2, -3, -4, 4, 0, 0, -6, -5, -5, 0, + -6, -2, -5, -1, 3, 0, 3, 3, -5, -1, 2, 1, 0, -5, 5, 0, 5, 3, 5, 4, -41, 12, 40, -25, 43, -31, 33, -19, 17, -29, + 4, -2, -8, -9, -1, -1, -3, -12, -1, 2, -16, 0, 2, 4, -9, -8, 4, -2, 5, 4, -5, -6, -5, -2, -4, 0, 9, 4, -4, -6, + 5, 3, 1, -5, -3, 4, 2, 0, -8, -7, -2, -5, 0, 0, -7, 4, -4, -4, 5, -2, 0, -1, -1, -5, -12, -22, -13, -17, -12, -7, + 7, 8, -1, 2, -3, -6, -11, 0, -4, -6, -4, 0, -2, -8, -8, 2, 2, 3, -9, -6, -14, -17, -22, -17, -17, -8, 14, 22, 13, 4, + -3, -14, -18, -22, -9, 1, 2, 1, -3, 3, 1, 6, 2, -14, -10, -8, -8, -19, -14, -7, -17, -10, -6, -7, -8, -2, -11, -7, -11, -11, + -7, -3, -12, -16, -21, -26, -34, -40, -32, -32, -26, 3, 31, 42, 32, 27, 7, -12, -31, -22, -16, -6, 1, 4, -1, -5, -4, 5, -6, 2, + -4, 4, 3, 3, -2, 8, 7, -10, 0, 3, 9, 9, 11, -2, 14, -8, -5, 7, -6, 13, 20, 12, -1, 14, -5, -6, -5, 1, 1, 3, + -1, -8, -3, -2, 5, 5, 1, 4, 6, 2, 5, -3, -1, -3, 0, 2, 6, 5, 9, 5, 5, 8, 6, 5, 0, 1, 5, 3, 4, 11, + 12, 3, 3, 9, 9, 8, 13, 13, 4, 6, 1, 4, 6, 2, -2, 2, -8, -9, -7, -3, -4, -4, 2, 7, 6, 12, 8, 14, 9, 3, + 6, 7, -9, -27, -44, -56, -64, -61, -55, -41, -16, 11, 38, 45, 41, 34, 11, 1, -4, 4, 2, 12, 22, 19, 20, 22, 19, 13, 7, 8, + 1, -3, -6, -7, -5, -5, -6, -6, 3, 11, 12, 6, 6, 1, 1, -4, -5, -16, -35, -47, -65, -87, -101, -120, -127, -97, 61, 12, -59, 76, + -97, 61, -31, 44, -59, 30, -19, -6, -32, 12, 3, -13, 0, -2, -12, -9, 7, 8, -6, -7, 2, -13, 2, 7, 14, -4, -15, 4, 9, 8, + -5, 4, -12, -1, 4, -6, -3, -1, -7, -7, -7, 5, -2, -4, 1, 3, 1, 11, 9, 6, 9, 3, 2, 14, 0, 1, 11, 4, 5, 15, + 9, 9, 8, -3, 2, 5, 3, 2, 5, -1, -7, -14, -14, -5, -2, 7, 3, 2, 7, 3, 5, -4, -4, 0, 6, 6, 6, 7, 10, 7, + 2, 13, 10, 19, 17, 12, 7, 3, 3, 4, 7, 8, 7, 6, 7, 3, 2, -2, 2, 3, -2, 9, 4, 4, 6, -4, -6, 0, -5, -7, + -1, -1, -2, 2, 6, 10, -3, -12, -7, 1, -10, -2, -11, -10, -3, -3, -3, -3, 5, 2, -4, 2, -6, -2, -2, 3, -1, -2, -2, 4, + 3, -5, 0, -8, -5, -7, -4, -2, -2, -1, -4, 4, -10, -4, -14, -7, 0, 6, 2, -3, 4, -2, 0, -3, -10, -21, -4, 0, 0, 5, + 8, 6, -1, 7, -3, 4, 4, -1, 4, 4, -6, -4, -4, -4, 0, 4, 12, 13, 6, -3, -3, 4, 0, 6, 3, -4, 1, -4, -11, -8, + -14, -8, -4, -9, 0, -4, -5, -1, -7, -3, -1, 2, 2, -2, 0, 6, 4, -5, -5, -5, 1, -4, 2, -1, -1, 0, -6, -5, -14, -11, + -6, -15, -3, 7, 10, 6, 5, -6, -9, -1, 1, 7, 0, -8, -8, -18, -12, -5, -9, -13, -15, -7, -8, -15, 4, 6, -3, 2, -5, 10, + 1, 6, -1, -4, -5, -3, -3, 0, -4, -6, -4, 5, -2, 1, -3, -13, -2, -8, -5, -4, 7, 6, -1, -5, -9, -15, 8, 4, 7, -28, + 10, -21, 41, 34, 28, 50, 36, 38, 23, 0, -5, -9, 3, -15, -7, 12, 12, -1, -1, -12, -6, 5, 7, 1, -12, 6, -5, -9, -4, -17, + -18, -11, -9, 5, 0, -4, -1, -13, -15, 0, 4, 3, 5, -1, 5, 5, -2, -7, -3, -4, -8, 2, -8, 8, -10, -5, -10, 11, 20, 28, + 30, 16, 21, 18, 33, 4, 6, 0, 11, 6, 1, 2, 4, 3, -1, 10, 0, -3, -4, -2, 2, 1, 9, 10, 13, -4, 1, -6, -1, -6, + 5, 4, -1, -9, -1, 5, 0, 7, 3, 10, 15, 0, 1, 0, -1, 6, -2, -5, 6, 3, -8, -5, -7, 2, -3, 2, -1, 10, -2, -3, + 4, -2, -4, -7, 2, -6, -5, 15, 15, 19, 6, -2, 8, 13, 6, 15, 4, 13, 1, -14, -1, -3, -2, -2, -6, 6, -8, -4, -12, 3, + -9, -17, -15, -1, -2, -5, 3, -6, -4, -9, -7, -9, 0, -6, -6, -6, 5, -2, -2, 0, -10, 1, 16, 13, 7, -6, -14, 1, -3, 3, + 5, 2, 11, 12, 21, -6, -6, -1, -7, 0, 5, -2, 6, 3, 1, 3, 3, 4, -1, 5, 6, -1, -3, -8, -8, -10, -4, -2, -6, -10, + -6, -2, -9, -10, -9, -9, -4, 7, 4, 3, 0, 6, 3, -1, -4, 0, 0, -5, -2, -6, -5, -8, -11, -5, 5, 2, 0, 1, -4, 8, + 15, 7, -3, 2, 2, -4, -14, -8, 2, -8, -8, -11, -13, -2, 6, 6, 6, 2, 5, -7, -1, 1, -2, 5, -9, -4, -4, 5, 8, 16, + 12, 2, 3, 6, 15, 17, 14, 1, -1, -5, -14, -21, -8, -10, -19, -11, -6, -13, -2, -1, -5, 7, 11, 4, 7, 7, -3, 7, -4, -6, + -9, -8, -15, 7, -12, 12, -14, 9, 20, 31, 25, 8, 21, 19, -13, -2, -11, 8, 0, -11, -4, -19, -10, -4, -15, -9, -10, 0, -4, -28, + -5, -6, -11, -9, -11, -4, -5, -1, 1, -3, 4, 7, 8, -17, -14, 5, 6, -2, 0, 0, -13, -8, -8, 4, 5, 1, 3, 0, -1, -3, + 4, -7, 5, 12, 18, 18, 5, 16, 15, 15, 4, 10, -2, 7, 1, 2, -2, -2, -13, -3, -4, -11, -6, 6, 6, 1, 0, 10, 9, 10, + 7, 1, 2, 14, 17, -1, -4, -6, 5, -8, -11, -11, 0, 10, 7, -8, -6, -12, -12, 1, 1, 16, 13, 12, 12, 16, 8, 5, 11, 13, + 15, 12, 19, 16, 13, 6, 6, 6, 11, 15, 2, -3, 0, 10, 4, 3, -12, -9, 13, 9, 2, 0, -19, -1, 0, -6, -7, 0, 7, -8, + -12, -14, -7, -18, -8, -6, -11, -6, -9, -4, -7, -4, -15, -11, -15, 3, 0, -1, 1, -1, -9, -3, -6, -1, -5, 1, 6, 10, 18, 17, + 0, -1, 3, 0, -1, -2, -5, -11, -7, 8, -2, -1, 3, 4, 4, 4, -1, 3, -3, -9, -2, 4, 2, 0, -4, -3, 0, 0, -3, -6, + -7, 4, 8, 10, 5, -4, -2, 1, -6, -2, -7, 2, 14, 13, 19, 9, 7, 0, 7, 12, 8, 5, 17, 13, 5, 5, 1, -9, -5, -8, + -4, -7, -7, 0, 3, 6, -1, 1, 5, -3, -4, -9, -5, 4, -2, -1, -6, -5, -1, 8, 10, 0, -2, 9, 6, -3, -12, -7, -2, -7, + -1, 6, 10, 3, 5, 14, 6, 5, 2, -1, -7, -4, -10, 2, -11, -6, -12, -1, -3, -2, -4, -6, 2, 10, -9, -4, -2, -3, 10, 11, + 8, 1, -10, -2, -5, -4, -5, -15, 2, -20, 21, 2, 26, 25, 33, 33, 36, 40, 3, -3, -9, 4, 22, -18, -12, 18, -14, -20, -9, -4, + -5, 1, 0, 2, -16, -5, -7, 10, -6, 13, -9, -12, 2, -1, -12, -1, 10, 4, -6, -8, 4, 9, 3, 5, -12, -9, 6, -7, 21, 8, + 11, 11, 1, -3, -10, 2, 9, 0, 7, 4, 3, 10, 8, 3, -18, -11, -18, -11, -1, -10, -9, -1, 1, -16, -10, -1, -11, -5, -3, 0, + 7, 5, 8, 23, 20, 6, -2, -3, 12, 5, -2, -4, 8, 11, 6, 0, 12, 17, 20, 6, 3, 8, 1, -2, 5, 11, 7, 7, 7, 6, + -2, -20, -15, 0, -1, -3, -15, -12, -12, -10, -6, -4, -11, -2, -7, -8, -11, -11, -1, -1, -11, -11, -13, -10, -8, -11, -14, -10, -4, -4, + -14, -17, -3, 8, -2, -13, -2, -1, 2, 0, -11, 0, -4, 0, 0, -1, -5, -18, -18, -10, -5, -8, -18, -2, 5, -3, 5, -8, 5, -2, + 4, 2, 4, 1, 0, -14, -2, 8, -3, -7, -9, -1, 2, 10, 23, -3, -3, 1, 11, 10, 1, -4, 1, 0, -6, 1, -3, -5, 2, -1, + -4, 3, 9, 9, -2, 1, 4, -1, -1, -1, 2, 6, 2, -4, -3, 0, 1, 2, -3, 1, 2, -3, -3, 8, 10, 5, 5, 10, 0, -3, + 4, -6, -13, 5, 3, -3, 0, -1, 0, -3, 0, 2, 1, 0, 0, -11, -14, -6, -6, -3, -6, -5, -10, 3, 10, 12, 3, -4, 7, -7, + -8, -12, -8, 4, 0, -8, -12, 1, 3, -1, -2, -10, -23, -19, -16, -20, -20, -25, -1, 2, -2, 1, -2, 1, 0, -2, 3, -5, 6, 7, + 1, -1, 2, 7, 2, 9, 8, 5, 7, 3, 1, -1, 0, -7, -33, 29, 8, 42, 30, 54, 68, 56, 47, 9, -7, -4, 15, 27, -7, -11, + 7, -12, -3, 0, -5, -6, 1, -11, -14, -4, 12, 21, 0, -3, -20, -19, -4, -8, 4, 5, -6, 5, 4, -6, -5, 15, 4, 2, 0, -1, + 2, -6, 13, -1, 4, -6, 0, -8, -1, -12, 3, 2, 0, 8, 2, -7, 0, -3, -8, -56, 14, 11, 18, 3, 10, 15, 4, 6, 9, 16, + -5, -6, -2, -3, 11, 13, 12, 17, 20, 15, 9, 8, 2, 16, 6, -16, -6, -5, -2, 5, -12, 2, 2, -9, -16, -2, -5, -5, -9, -7, + -7, -4, -4, -4, -10, -16, -18, 2, 5, 9, 6, 7, 3, 8, 8, 2, -8, 3, 1, -5, -6, -9, -11, 4, 2, -10, -1, -8, -2, 8, + -10, -6, 7, -2, -8, -10, -12, -4, -5, -18, 10, -1, -20, -10, -19, 3, 2, 3, 0, 10, -5, 4, -7, -7, -6, 6, 3, -27, 9, 1, + -9, 10, 13, 19, 4, 6, 20, 11, 20, 15, 10, 12, -3, 4, -3, -5, 4, 8, 1, 22, -2, 6, 8, 0, 8, 3, 5, 7, -1, 0, + -5, 2, 5, -6, -5, -2, 8, 7, 9, 10, 2, 5, 13, 9, 4, -1, 7, 3, -3, -10, 0, 7, 2, -1, -5, -2, -2, -7, 3, 1, + 0, 0, -3, -7, -5, -12, -9, -8, 0, -1, -2, 1, 6, 7, 5, 6, -3, -2, -6, -1, -8, 7, 0, 8, 6, 0, 8, -4, -5, -4, + 1, -3, 8, 3, -2, -15, -20, -17, -12, -14, -4, -4, -14, 4, 1, 3, -6, -10, -6, 11, -5, -1, -6, 4, 9, -2, -4, -7, 4, 2, + 10, 7, 15, 16, 10, 5, -2, 1, 0, -4, -11, -7, -6, 3, 2, -2, -12, -4, -10, -6, 75, 2, 43, 90, 101, 71, 68, 33, 9, 6, + -7, 2, 8, 4, -10, 7, -2, -15, -4, -3, 9, 16, 0, -7, -3, 14, 10, 3, -16, -18, -20, -14, -17, -4, -6, -13, -4, 12, 14, 3, + 11, -1, -6, -20, -20, -13, -3, 12, -14, -6, -1, 8, -19, -12, -13, -16, -4, -7, 0, 1, -8, -3, -15, -7, -121, 9, 3, -11, -20, -12, + -12, -13, -4, -19, -18, -31, -22, -15, -18, -9, -2, 0, 3, 8, -6, -17, -20, -21, -4, -10, -25, -17, -24, -15, -12, -22, -7, -8, -5, -16, + -11, -17, -6, 2, -11, -4, -7, -2, -6, -6, 3, -1, -12, 3, 18, 25, 4, 7, 2, -1, -23, -26, -27, -23, -27, -26, -31, -36, -25, -23, + -25, -18, -11, -14, -11, -5, -15, -7, -16, -12, -22, -14, -14, 0, -17, -14, -1, -9, 4, 0, 4, 6, 3, -1, 15, 5, -3, 1, -4, 3, + 10, 2, 8, 18, 21, 8, 15, 8, 18, 22, 14, 30, 20, 18, 15, 10, 19, 21, -8, 11, -8, 2, -6, -15, 27, -3, 0, 5, 12, 15, + 7, 9, 5, -4, -8, -2, -3, -7, -9, -8, -11, -2, -8, -7, -11, -13, -11, -7, -9, -17, -18, -3, -4, -8, -9, -1, -1, -1, 0, -12, + -17, -23, -28, -21, -21, -14, -22, -20, -19, -18, -12, -14, -16, -18, -16, -11, -22, -17, -16, -16, -17, -23, -13, -11, -4, -18, -6, -13, -12, 2, + -13, 0, 0, -7, 1, 13, 5, 16, 15, 9, -2, -12, -28, -10, -18, -15, -19, -42, -25, -31, -34, -24, -34, -24, -17, -21, -20, -24, -25, -14, + -4, -5, -1, 1, 6, 16, 12, 18, 24, 37, 38, 42, 35, 24, 9, 2, 4, 1, -8, -4, -6, -7, -5, 19, 38, 54, -69, 15, 33, 41, + 78, 88, 50, -2, 20, -12, 28, 27, 16, 8, 4, 0, -5, 15, 4, 13, 18, 11, 2, 6, 13, -11, 4, -11, -4, -15, -9, -5, -4, 5, + -1, -2, 14, 8, -4, 15, 1, -8, 6, -12, 6, -3, 13, 12, 14, -6, 5, -5, -2, -1, 0, 6, 12, 22, 15, -5, 10, 14, 4, -127, + -1, 0, -2, 2, 6, 2, -7, -1, 7, 6, 2, 7, -1, -5, -2, -2, -4, 2, 0, 1, 3, 2, -5, -5, -9, -5, -2, 7, 6, -5, + 2, 1, 2, -2, 4, 5, 1, 1, 5, -3, -12, -4, 2, 5, 1, -10, -1, -6, 0, 11, 7, 1, -2, 9, 8, -2, 2, 8, -3, -1, + 0, -7, -14, -7, -5, 11, -3, -2, -4, -4, 8, 3, 2, 12, -5, -6, -9, 0, 2, 4, 1, 3, 5, 2, 5, -1, -14, -8, 1, 4, + 10, 6, -4, 6, -3, 2, -14, -11, 0, -2, -9, -4, 9, 8, -8, -2, 8, 11, 23, 11, 15, 8, -1, 1, 0, 1, -7, -12, -14, 1, + -1, 1, -1, -4, 0, -1, 1, 2, 0, -5, 0, -5, -1, -2, 1, -1, 1, 4, -1, 2, 2, 3, 3, 3, -6, -2, 4, 4, 5, 1, + 3, 4, 5, 6, -2, 6, 2, 5, 1, 1, 1, 3, 6, -1, -1, -7, -13, -10, -6, -2, -1, 0, -4, 2, 4, 10, -2, -1, 2, 0, + -6, -12, -17, -12, -8, 0, -1, -2, -2, -3, 6, -3, -5, 8, -1, -7, 0, -4, -6, -15, -10, -6, 3, -3, -2, 0, 3, 0, 0, 0, + -3, 5, 1, -2, -2, 0, 3, 7, -4, 0, -5, -4, -10, 6, 7, 5, 1, 5, 12, 6, 8, 3, 0, 2, -5, -8, 3, -6, -6, 2, + 9, 27, 13, -1, -8, -1, -1, 19, 14, 13, 5, 3, 1, 9, -6, 8, 8, 4, -7, -11, -1, -10, 1, -4, -8, 2, -7, -7, 3, -5, + -6, 7, 7, 6, -6, 8, 2, -7, -7, -14, -2, -2, 0, -7, 0, 0, -1, 4, 3, 0, -7, -8, -4, 4, 4, 2, -1, 17, 7, -1, + 7, 0, 8, -2, -3, -9, -11, -3, -1, 1, 9, -2, -2, -4, 0, 7, -7, -2, -2, 7, 0, 6, 4, -6, -1, 0, -2, -2, 0, 1, + 0, 1, 6, -3, 6, 6, 6, -4, -8, -4, -3, -7, -5, -4, 4, 0, -2, 2, -2, -4, -12, -15, 1, 7, -3, 6, 6, 6, -2, -6, + 6, 5, 0, 2, 10, 3, 4, 0, -5, -4, 0, -6, 3, -12, -7, 4, -4, 1, -5, -16, -5, -15, -2, -17, -10, -14, -10, 3, -5, -2, + -5, -1, 6, -4, 1, -6, 1, -5, 0, -6, 3, -4, -7, -2, 1, 8, 3, 4, 12, -1, -4, -1, 5, -5, -3, 5, 4, -6, 4, 11, + 7, 1, -1, 6, 13, 1, 2, 2, 7, 4, -4, -8, -7, 0, 6, 5, 2, -7, -2, -2, 2, 7, 4, 9, 2, 1, 0, 2, 1, 0, + 2, 5, 5, -4, 0, 2, -3, 0, -6, -9, -8, -9, -8, 0, -2, 0, 2, 0, 1, -2, -8, -5, -1, -1, 7, 10, 9, 9, 9, 11, + 15, 8, 3, 1, -2, -4, 4, -3, -8, 0, -9, 0, 2, 4, 2, 7, -6, -7, 0, 3, 0, -2, 6, -2, -4, 1, 6, 2, -3, 12, + 7, 3, 8, 10, 1, -2, 4, 3, 0, 2, -1, -3, -1, -6, -8, 2, -1, 9, 1, -7, -10, 6, 3, -5, -1, 6, 3, -2, 10, 6, + 5, -6, -1, -11, -16, -3, 16, 17, -10, -14, -8, -13, 15, 4, 12, 3, -12, 3, -8, 7, -1, -1, -6, -7, 1, -4, 1, 0, -15, -16, + -10, -3, 7, -7, 0, -2, 10, 7, 8, 2, 1, 4, 2, -13, 8, 3, -4, -6, -9, -5, 3, 1, 3, 11, 0, -13, -8, 2, -10, -13, + 2, -1, 10, 1, -4, -9, 2, 1, -2, -2, 16, 6, 8, -6, -1, 7, -8, -5, -2, -3, -2, -1, -2, 3, 8, 11, -1, -2, -1, 0, + 5, 11, 4, -5, -2, -5, 13, 11, 8, 9, 13, 20, 11, 7, 6, 6, -3, 0, -4, 2, -9, 2, -4, 6, 3, -1, -2, 3, 5, -2, + -1, 4, 2, -1, 2, 7, -1, -1, 3, -3, -6, -5, -16, -13, 3, -3, 1, 5, -3, -1, -7, 1, 6, -7, -2, 1, 4, 4, -5, 11, + 4, -3, -10, -10, -7, -18, -14, -13, -19, -14, -6, -2, -6, -6, -2, -2, -3, -9, -5, 4, 11, 8, 24, 9, 8, 1, -3, -2, -5, -1, + -2, -5, -2, -11, -1, -3, -11, -16, -3, 2, -7, -3, -4, 1, 1, -6, -2, 2, -4, 2, -1, -2, -4, 8, 15, 12, 9, 1, 0, 3, + 4, -3, -3, -2, 3, 3, 5, 0, 2, -3, 1, -5, -2, 2, 5, 0, 4, 7, 7, 5, 6, 4, 5, 3, 6, -3, -4, 2, 0, 0, + 0, -2, 5, -3, -2, 2, -4, -4, -5, -7, 0, -4, -3, 0, -4, 6, 2, 5, 3, 5, -3, -2, -1, 0, 7, 6, 1, 8, 3, 7, + -11, 1, -5, -5, 5, -3, 0, 3, -4, 4, 0, 0, -8, -9, -7, 3, -2, 2, 0, 3, 7, 6, -3, 8, 4, -9, -4, -8, -3, -5, + 4, 4, 3, 5, 3, 0, 1, 5, -9, -9, 14, 27, 22, 6, 7, 8, -10, 7, 0, 12, 7, 2, 9, 2, 6, 1, 5, 0, 4, 4, + 4, 1, -5, -5, -4, 5, 1, 10, 2, 0, -3, -1, 8, -9, -6, 0, -5, 8, 1, 2, -5, -1, -2, 10, -4, 5, 2, -2, 1, 1, + -7, -9, 0, 3, 6, 2, 10, 1, -6, 1, -4, -7, 1, -6, -15, 8, 6, 5, -3, -11, -5, -6, -5, -1, -4, -4, -10, -9, -10, -1, + -1, -3, -2, -1, 9, 11, 3, 6, 2, -5, -7, 6, 10, 2, 3, 6, 4, -1, 7, 9, -3, -2, -9, 3, 5, 2, -4, 0, 9, -2, + -16, -17, -15, -15, -16, 1, 9, -1, -6, 12, 2, -13, -14, -15, -18, -9, -16, -19, -18, -4, -1, -7, -7, 9, 9, -3, -9, -7, -3, 4, + 6, 2, -15, 2, 16, 7, 2, 8, 13, 8, 8, 8, 4, 8, 4, 4, 8, -8, -9, 12, -1, 17, 18, 14, 20, 9, 17, 4, 0, 12, + 4, -2, -2, -6, -6, 0, -3, -2, 8, 0, 2, 2, -6, -8, -4, -2, -3, -1, 7, 6, 2, -3, -3, -9, -9, -4, -6, -1, -2, 4, + -1, -2, -7, 1, 8, 12, 6, -1, -3, -6, -3, 3, 11, 6, 5, 9, 0, 2, -3, 2, 2, -2, -4, 1, 1, -6, -4, -3, 1, 0, + -10, -8, -4, -11, -5, 2, 8, 6, -2, 1, 1, -4, -10, -10, -7, 1, 3, 2, -5, -7, 6, 2, 9, 8, 5, -1, -2, -8, -5, 0, + -2, 0, 0, -1, -7, -3, 5, 0, 10, 12, 11, 3, -5, -4, -13, -8, -8, -7, 3, 3, -1, 2, 3, 6, -3, -4, -2, -9, -4, -2, + 2, 0, 3, 11, 3, -1, 7, -1, 5, -3, 1, 4, 2, -6, 3, 0, 9, -1, 8, -16, -13, 0, -1, 2, -8, -8, -4, 6, 12, 6, + 13, 10, 8, 11, -3, 7, 7, 4, -6, 5, 7, 1, 2, 0, 9, -1, -5, 14, -6, 0, 2, -6, 8, 4, -3, 7, -1, -3, 0, -6, + 7, 0, 4, 8, -2, -1, -4, -1, -5, 3, 0, 12, 9, 12, -1, -1, 0, -3, -2, -33, 1, 9, -5, 5, 0, 3, -1, 1, 14, 8, + 4, 0, -8, -13, -3, -12, -4, -7, -5, -4, -10, -7, -7, -12, -6, 0, -3, 11, -5, 4, 13, -6, -14, -11, -7, -7, -14, -5, -5, -5, + -15, 0, 4, 20, 1, 5, 19, 9, 7, 4, 10, 0, 8, 8, 11, 4, 13, 9, 8, 7, 0, 17, 9, -5, 3, -8, -2, -2, -9, -12, + -15, -18, 0, -15, -24, -13, -6, -18, -6, -2, -6, -11, -10, -9, 4, -4, 2, -5, -13, -7, 0, 13, -1, -12, 11, 16, 21, 17, 6, 10, + 2, 9, 19, 21, 23, 3, 7, 3, -6, 14, 12, 13, 9, 9, 2, -1, -1, -7, 3, -17, 4, -1, 1, 1, 0, 3, 5, 2, 3, -3, + 0, 1, -1, 1, -3, 3, 3, 0, 4, 1, 3, 2, 1, 1, 0, -4, -2, 3, 6, -3, 0, -4, -4, -4, -5, -6, -8, -7, -4, 0, + -6, 9, 20, 15, 15, 11, 11, 15, 1, -6, 5, 1, -1, 3, 3, 9, 4, 8, -5, -9, -13, -2, -13, -9, -5, -6, -16, -9, 1, 3, + -1, -5, 7, 5, -4, 0, -3, 1, 0, 0, -13, -1, -6, -1, 1, 0, 5, -2, 4, 9, 8, 6, 0, 10, 14, -2, -6, -7, -7, -8, + -7, -10, -2, 5, 5, 5, -5, 3, 2, 3, 3, 6, 2, 0, 3, 4, 1, 4, 10, 1, -4, 0, -11, 14, -29, -22, -25, -16, 5, -19, + -7, -8, -6, -9, 0, 9, 14, 8, 8, 5, -3, 11, 9, -2, -8, 3, 9, 14, 7, 6, -10, 4, 14, 9, -4, -2, -4, 4, 8, 5, + 11, 2, 4, 3, 14, 12, 2, 7, 2, 1, 0, 1, 7, -3, 4, 12, 5, -2, 0, -5, -2, 7, 10, 8, -47, -10, 4, 5, 10, 6, + 0, -8, -3, -16, -6, 4, 11, 20, 14, 15, 1, -5, -13, -17, -21, -23, -13, -6, -9, -2, -9, -14, -14, -29, -28, -16, -8, -15, -6, -8, + -17, -8, -7, 3, -1, -6, 11, 11, 6, -18, -24, -7, -3, 13, 14, 13, 8, -7, -16, -26, -14, -4, 4, 17, 20, 7, -3, -9, -14, -20, + -25, -19, -7, -12, -4, 1, -11, -1, 5, -11, -12, -9, -31, -15, -1, -25, -12, -18, -16, -13, -20, -4, -2, -9, -16, -38, -31, -31, -7, 28, + 26, 17, 16, -18, -50, -58, -47, -19, -11, 6, -3, 4, -1, -11, -7, 2, -14, 0, 2, 3, 15, -5, 6, 16, 16, -3, 1, 0, 1, 3, + 1, -1, 0, 3, 9, 6, 10, 8, 7, 12, 5, 2, -3, -5, -4, -5, -6, -9, -9, -10, -5, 4, 4, 5, 1, 11, 19, 5, 3, 14, + 13, 5, 5, 1, 3, 4, 7, 11, -3, -7, -16, -10, -6, -13, -9, -8, -14, -14, -18, -16, -12, -3, -1, 9, 21, 16, 21, 17, 19, 22, + 3, 6, 5, 11, 14, 10, 16, 15, 11, 17, 20, 23, 15, 10, 24, 16, 10, 9, 19, 22, 22, 37, 31, 26, 17, 2, 2, -10, -12, 12, + 1, -18, -25, -46, -63, -61, -39, -5, 23, 35, 46, 42, 35, 20, 11, 7, -5, -11, -28, -28, -50, -75, -69, -82, -127, -50, -45, 30, -13, -77, + 48, 26, -39, 76, 10, -31, 32, -27, -23, 15, -26, 13, 9, 3, 14, 1, -1, 28, 5, 2, 32, 7, 13, 13, 5, -8, -1, 6, -2, -1, + 12, -1, -8, 7, 9, 10, 11, -3, -2, 7, -3, -3, 5, -2, -6, 7, 12, 18, 9, 19, 8, 7, -7, -1, -5, 0, -4, 6, 0, 16, + 4, -5, 3, -2, -1, -3, -3, 5, 2, -5, 0, 0, -10, -4, 2, 1, 5, 10, -2, 2, -2, -5, 1, -1, -2, 0, 2, 6, -6, 3, + 13, 13, 0, -2, 6, -7, -9, -6, 3, 4, -6, 2, 3, 2, -8, -1, 1, 1, -6, -8, -4, -4, 1, 1, 5, 0, -2, -16, -4, 2, + -13, -15, 6, -4, 9, 7, -5, -1, -8, -6, 2, -9, -4, -3, -7, -4, -8, -3, -4, 2, -1, -6, 1, -1, 2, -7, 2, -2, 5, 2, + 9, -5, -3, 4, -10, -6, -10, 9, 5, 1, 9, 3, -3, -4, 7, -12, -6, -1, -2, 1, 11, 4, -3, -18, -9, -4, -11, 11, 10, 4, + 7, 2, 2, -1, 3, -6, -6, -1, -3, -3, -4, -6, -1, 2, -2, 2, -6, -9, -1, -1, 5, 0, 2, -4, -3, 0, -1, -9, -3, -3, + 5, 3, 5, -1, 1, 2, -8, -1, -1, -2, 1, -3, 3, 0, 0, 4, -1, 4, 1, 9, 8, 5, 1, 3, 8, 8, 5, 8, 5, 8, + 11, 3, 0, -2, 2, -1, 2, -2, 2, 0, -1, 3, -3, -2, 7, 7, 0, 6, 5, 5, -4, 5, 13, 4, -5, -5, -4, -6, 3, -5, + -4, 1, 0, -1, -14, -2, 11, 10, -1, 5, 1, 11, 13, 0, 2, 5, -2, -1, -2, -2, 0, -6, -1, -4, -3, -2, 6, 6, 1, 5, + 10, -3, -1, -3, 9, -6, 1, 0, 4, 2, 3, 5, -3, -7, -24, -7, 7, 13, 9, 4, -7, 5, -9, -2, 3, 5, -8, -3, -5, -2, + -6, 0, -4, -13, -8, -3, 6, -9, -4, -11, -4, -13, -3, 0, 2, -1, -4, -4, 0, -3, -6, 12, 11, 0, 4, -2, -3, -3, 3, 0, + 4, 0, -7, 1, -34, 1, 1, 2, -7, 1, 2, 8, 1, 0, 8, 6, 4, 0, -1, -4, 1, 8, 3, 0, -1, 4, 6, 4, 6, -1, + -1, -5, -6, -3, -12, 1, 9, 2, -1, -4, -8, -4, -2, -4, 0, -1, -7, -6, -10, -5, 3, 3, 6, -4, -11, -13, -10, -2, -6, 3, + -5, -3, 0, 5, -1, -13, -1, 12, -2, 4, 5, 1, -5, -2, -2, 6, 7, 7, -2, -1, -2, 6, 1, 3, -8, -2, -3, 3, -4, 0, + -2, -2, -4, -10, -3, 3, -8, -3, 1, -11, 1, -1, 1, -21, -5, 0, 3, 6, 6, 12, -5, 6, 5, -2, 8, -6, 10, 3, 6, 14, + -5, -5, -1, -5, 7, -1, -1, -8, -4, -3, -1, -6, -4, -3, -3, -4, 1, -1, 5, -3, -3, 4, -2, -1, -7, -2, 4, 3, 3, 5, + 0, -4, -2, 0, 2, 7, 3, 3, -2, 3, -5, 2, 1, 1, 1, 2, -4, 2, 2, -5, 6, 1, 0, 3, -5, -5, -5, -4, 3, 3, + 1, -2, -4, -1, 1, -1, -1, -3, 2, -1, -3, -5, 0, 0, 1, 1, 6, 5, 5, 9, -4, -2, 0, 5, -5, -1, 8, -4, 6, 2, + 4, 9, 2, 8, 4, 4, 9, 5, 8, 6, -1, 3, 0, 0, -6, -1, -3, -5, -6, -3, -9, -9, -3, -7, -3, -9, -3, 1, -1, 7, + 3, 4, 11, 1, 0, -9, -16, 0, 3, -10, -8, -1, -2, 5, -1, -1, 2, 10, -8, -16, 10, 17, 8, 8, -4, 9, 1, -13, -3, 14, + 12, 8, 1, 10, 4, -10, -6, -7, -2, 13, 7, 13, 0, -8, 12, -9, 6, 6, -14, -4, 0, -12, -4, -3, -5, -2, 0, -2, -1, 8, + -8, 7, -3, 1, 6, 5, 1, -2, 14, -24, 1, -1, 2, -4, 2, -1, 1, -5, -7, -3, 1, 6, -7, -6, -15, -13, -5, 2, -4, -11, + -13, 1, 3, 0, 1, -2, 6, -1, 1, -12, 4, 5, 3, 4, -2, 10, 2, -5, -13, -2, -12, -2, -1, -2, 3, -4, -7, -4, -7, -12, + -10, 3, 5, -2, 1, 2, 2, -1, 1, 4, -11, -4, 1, -1, -3, 0, -4, 4, 2, -4, -7, -7, -4, 3, -3, -5, 6, -17, -2, -8, + 5, 3, 6, 7, 6, 6, -11, 9, 2, 10, 9, -6, -9, 2, -2, -5, 8, 5, 3, -5, -7, -13, -2, 0, 4, 0, 2, 2, -6, 2, + -7, 3, 1, -1, 7, -5, 6, 10, 2, 22, 4, 3, -4, -2, 2, 5, 6, 0, -1, 2, -5, 2, -3, -7, -11, -6, 3, 12, 4, 4, + 0, 5, 1, 3, 8, -1, -1, -9, -5, -5, -9, -3, -5, -12, -2, 3, 3, 6, -10, 0, -1, -2, -3, 9, 6, 10, 9, 5, 14, 6, + 1, 7, 9, 2, 3, 5, 8, 9, 3, 0, -6, -1, 1, -3, -1, 4, -1, -4, -3, -1, 0, 3, 1, 2, -5, -4, 8, 2, 10, -3, + -2, 5, 1, -2, -1, -3, 2, -9, 3, 2, -5, -5, 7, 1, 8, 17, 9, 6, 3, -4, -3, -5, -2, -5, -10, -13, -5, -2, -2, 2, + -1, -6, 5, 2, -6, 0, 8, 0, 8, -6, -14, -19, 13, 14, -3, 5, -5, -8, -3, -1, -1, 2, -2, -10, -10, 8, 1, -4, 2, -3, + 2, -4, -9, -3, 9, 3, 6, 9, 5, -11, -10, -4, 18, -3, -1, 0, 3, -1, -5, -2, 0, -8, -8, -6, 1, 10, 2, -2, -4, 4, + -8, -1, -9, -2, 5, -8, -4, 2, -2, 3, 1, 7, -2, -1, 3, 10, 0, -3, -3, 1, 1, 1, 1, 4, -2, -13, -9, -8, 1, -11, + 2, -4, -4, 4, -2, -4, 7, 4, 0, 0, -9, -9, -2, -4, -1, 4, -2, -5, -3, 1, -3, -11, 5, -1, 7, 17, 4, 5, 3, 1, + 2, -7, -2, 12, 7, 12, 8, 9, 7, -2, -1, 3, -1, -3, -8, 3, 10, -3, 12, 5, -1, -8, -3, 1, 6, 9, 5, 12, 3, 3, + -5, -1, -14, -6, -5, 0, -4, -2, -5, -11, 3, -8, 4, 0, -9, -3, 2, 6, 20, 2, 0, 6, 4, 3, -2, -10, 3, 6, 0, 3, + 2, 7, -10, -6, 4, 0, -2, -5, -12, -16, -9, -7, -1, -3, 8, 0, -4, -1, -3, -3, 2, 14, 6, 4, 3, -2, 0, 5, 1, -3, + -4, -6, 5, 3, 0, -2, 1, 1, -3, -4, -5, -8, -5, -1, -2, 0, -1, 0, 7, 6, 7, 6, 4, 5, 8, 7, 3, 2, 1, 3, + -3, -4, -4, -6, -5, 0, 0, -1, -1, -8, -11, -7, 1, 5, -1, 5, 1, -1, 4, 6, 6, -3, -2, 6, 4, 6, 1, 3, 5, 8, + -9, 3, -7, -4, -5, 0, 4, 9, 6, -6, -8, -3, 2, 14, 10, 5, 2, 9, 6, 5, 7, 3, 3, -6, -4, 1, 7, 8, 6, 3, + 1, 4, 0, -2, -4, -5, -6, 3, -2, 0, 3, -2, -2, -10, -4, -8, -45, 18, 28, -31, 12, -2, -11, 16, 17, -7, 17, 16, -9, -6, + 0, 9, -11, -11, -19, -4, -12, -16, -10, 3, 9, 5, -13, 0, 13, 2, 1, 9, 9, 12, 0, -3, -7, 2, 5, -12, -9, -2, -10, -4, + -8, -1, 10, 8, 9, 10, 7, -7, 0, -1, -8, -4, -5, 1, -1, -6, -4, -6, -4, 27, 2, -4, -6, -10, -5, -2, 9, -4, 0, -11, + -11, -7, -7, -6, -11, -13, 4, -2, -2, -7, -6, -13, -11, -10, -8, -4, -9, -10, -14, -13, -6, -10, 0, -7, -16, -13, -10, -20, -11, -15, + -12, -13, 1, -1, -6, -7, -18, -25, -21, -20, -13, -16, -3, -7, -13, -16, -18, -7, -9, -5, -5, -2, 15, 7, 5, 12, 8, 1, 8, 6, + 14, 14, 12, 11, 8, 22, 14, 15, 12, 3, 4, 13, 17, 18, 14, 6, -2, -6, 0, 0, -5, 0, -10, -12, -19, -9, -2, 2, 0, 5, + -8, -1, -5, -16, -4, -9, -2, 10, 1, 6, 13, 8, -1, 0, 8, 6, 18, 22, 11, 5, 3, -5, -6, -5, 0, -4, 2, -1, 2, 0, + 1, -3, 2, 2, -3, 4, 1, -5, -1, -1, 3, 9, 7, 6, 3, 5, 3, 1, 0, -5, -6, 2, 0, 5, 3, 5, 2, -4, -5, -6, + -5, 1, -4, -1, -2, -1, -5, 2, 7, -2, -1, -5, -4, -6, 0, -3, -6, 9, 1, 4, 4, 4, 15, 7, 8, 5, 3, 7, 4, 0, + 3, -3, 3, -6, -2, 0, 3, 4, -1, -6, -2, 17, 3, 5, 12, 4, -6, -7, -3, -11, -8, -7, -12, -8, -7, 3, 7, 10, 14, 4, + 2, -2, 3, -4, 4, 5, 13, 7, 3, 3, 0, 4, -2, -2, -5, -13, -13, -10, -12, -8, -32, -90, 57, 44, -45, 54, 10, -49, 25, 12, + -4, 31, 26, 4, -4, 11, 16, 3, 5, -6, -4, -12, -15, 0, 14, 16, 9, -1, 2, 1, 1, 2, 9, -11, 2, 2, -8, -7, 4, 3, + 3, 0, -6, -6, -11, -15, -4, -3, 1, 1, -5, 7, 7, 6, -5, -4, 2, -8, -19, -6, -14, -11, -9, -5, 58, 12, 4, -11, -10, 4, + 8, 4, -2, -8, -8, -19, -16, -19, -5, -5, 3, 7, -1, -9, -11, -9, -12, -13, -7, -11, -6, -11, -10, -11, -9, -13, -3, -8, -11, -6, + -11, -22, -20, -2, -6, 7, 15, 25, 27, 18, 13, 5, -12, -14, -12, -17, -8, -8, -4, -19, -28, -30, -29, -18, -6, 3, 6, 5, -4, -5, + 2, 11, 8, 11, 3, -15, -12, 4, 7, 1, 9, 7, 15, 8, 11, 18, 0, -15, 1, -6, 5, -1, 16, 19, 22, -3, -22, -39, -59, -50, + -33, -5, 10, 8, 16, -1, -18, -23, -20, -17, 0, 14, -6, -14, 0, 15, 0, 8, 11, 22, 20, 29, 34, 34, 14, 4, 4, 15, 15, 17, + 10, 12, 9, 6, 3, 10, 8, 8, 9, 5, 4, 6, 7, 7, 10, 16, 12, 16, 13, 6, 3, 3, -2, 1, 5, 4, 9, 7, 8, 14, + 7, 18, 24, 26, 28, 29, 32, 40, 27, 11, -4, -18, -28, -31, -25, -32, -34, -36, -38, -36, -29, -35, -20, -16, -3, 3, -8, 3, 7, 3, + 7, 16, 14, 9, 4, 0, -8, 6, 2, -5, 0, 2, 12, 10, 9, 13, 6, 6, 19, 35, 49, 57, 60, 61, 48, 12, -19, -68, -95, -107, + -108, -88, -50, -33, -14, -7, -6, 3, 4, 9, 12, 14, -1, -4, 4, 3, 2, -6, 7, 10, 18, 18, 8, -20, -68, -31, -127, 91, 9, -99, + 103, 10, -96, 30, -27, -64, 66, 33, -25, 24, 17, 2, 9, 21, 2, -20, 17, -10, -12, 26, -2, -1, -2, 2, -7, 6, -19, -10, 9, 3, + -5, -11, 5, -4, -5, 7, 3, -3, 0, 5, 2, -7, 1, 5, -13, 6, 1, 0, 4, 5, 15, 16, 5, -2, 3, 7, 5, 9, 12, 31, + -4, -3, -4, -9, -8, -1, -5, -3, -4, 1, -6, -2, -10, 1, 0, -1, -3, 4, 1, -1, -2, 0, 5, 2, 4, 1, -4, 1, 8, 3, + -2, -4, 9, 3, 6, 5, 5, 5, 4, 1, 3, 4, -1, 1, 4, 1, 4, 5, 6, 8, 0, 5, 6, 7, 7, 0, -1, -11, -3, 7, + 4, -1, -5, 5, 1, 3, -10, -2, 1, 3, 3, -5, 0, 10, -6, -9, -10, 1, 5, -2, 3, -1, -9, 6, -8, 0, 3, 8, -7, 4, + 3, -1, -4, 6, -5, 1, 6, 9, 9, 2, 2, 0, 7, -4, -3, 2, 3, 19, 14, 7, -2, -1, -8, -4, 3, -1, -1, 8, 3, 10, + -4, 2, -4, -1, 2, 6, 7, 9, 6, 0, -2, -7, -4, -3, 1, -2, -2, -1, -4, -2, -1, -4, -1, -3, 2, 5, -2, -4, -6, -1, + -4, -2, 3, 4, -3, -2, 5, 0, -1, -2, 1, 2, -1, 1, 4, 3, -2, 2, 3, -1, 1, 1, -6, -1, 0, 6, 3, -1, 3, 6, + -1, 2, -2, 0, -2, 0, -5, -4, -8, -1, 4, 4, 3, 5, -2, 1, 3, 3, -3, -2, -11, -2, 2, -3, -1, 2, 2, -3, -8, -3, + 1, 5, -1, -2, -9, -8, -2, -3, 2, -4, -2, -3, -7, -3, -4, 4, 17, 6, 8, -6, -2, 7, -4, 1, 8, 2, 6, 5, 5, -10, + 6, 16, 24, 2, 16, -18, 5, 9, 3, 2, -2, -10, -8, -22, -16, -15, 1, -9, -7, -2, -9, 6, -1, -1, -1, -13, 7, 11, 4, 5, + -12, 0, -1, -9, -7, 5, -4, 4, -3, -4, 1, -9, -6, -7, -8, -6, 6, -4, 5, 8, 6, -3, 4, 5, 2, 2, 6, 2, 5, -1, + 1, 2, 4, -3, 18, 6, 2, -3, -6, -11, -5, 3, 6, 4, 5, 5, -3, -2, 1, 12, 11, 10, 3, -7, -2, -2, -3, -1, -1, -4, + 0, 4, -3, -4, -1, -2, 0, -2, -7, -7, -2, 9, 9, 0, -6, 3, -1, -13, -12, -7, 2, 4, -1, 11, 10, 6, -5, 1, 1, 5, + 9, 8, 0, 1, -4, -4, -4, 6, 3, 1, 2, 0, -7, -2, 0, -3, 0, -2, -1, -9, -2, -11, 3, -2, -4, -2, -12, 2, -1, 0, + 4, 11, 5, -9, -5, -16, -3, -9, 8, 1, -6, 4, 2, 16, -12, 8, 2, -3, 2, -7, -1, -4, 5, 3, 5, 10, 3, 6, 8, 1, + 8, 12, -3, 8, -1, 6, 5, 6, -2, 5, 6, 3, 6, 0, 1, -1, -1, -4, -7, -3, 0, 7, 8, 1, 6, 2, -3, -6, -5, -7, + -3, 4, -3, -9, -13, -2, 0, 5, 0, 2, 8, 9, 6, 4, -5, -1, -5, -7, -2, 3, 8, 4, 7, 6, 0, 5, -2, -4, 1, -2, + -1, -1, -8, 0, 1, 5, 2, 3, 4, -5, 1, 10, -1, -4, -1, 4, 5, -7, 2, -8, -1, 0, 7, -3, -6, -2, 2, -2, -3, -8, + 0, -1, -3, -8, -2, 1, 1, 3, 2, 5, -10, 1, -1, -2, -9, 2, 4, 1, 10, 3, 0, 0, -4, -2, -5, 1, 1, 5, 7, -1, + -3, -7, -4, 2, 1, 0, 1, -4, 14, 2, -18, 8, 1, 4, 4, 10, -1, -6, -13, 4, -13, 4, -9, -5, 3, -2, 1, -7, 4, -5, + 14, 3, 10, -5, 0, -3, 4, 7, 1, 6, -4, 1, 1, 3, 4, 8, 5, -3, 7, -9, -5, 7, -3, -6, -2, -6, -11, -6, 1, -3, + 11, 1, 7, 6, -3, 2, 2, 2, -4, 2, 3, 2, 4, 7, -1, -12, -7, -13, -11, -3, 9, 10, -6, -7, -5, -1, 0, 11, -3, -2, + 0, -8, -6, -3, 3, 1, -5, -11, -8, -8, -4, 3, -8, 2, -4, 2, -3, 10, 1, 3, 2, 9, -1, 1, -4, 8, 6, 8, 17, 16, + 2, -3, 5, 1, 2, 11, 15, 1, 2, 4, 8, 3, 0, -6, -8, 7, -2, -10, 3, 6, 4, 3, -2, 1, -2, 0, 6, 1, 11, -3, + 2, -5, 11, 7, -10, -14, -1, 0, 1, 0, 2, 0, 5, 1, 10, -2, 6, -8, -9, -5, 4, -5, -4, 1, -20, -2, -5, -9, -1, 2, + 3, 4, 2, 1, 4, -4, 5, -2, 6, 11, -12, -7, -8, -3, -6, -4, -3, -6, -1, 1, 3, 0, -2, -6, 1, -2, 1, 1, -2, -7, + -7, -3, -8, -2, 0, 4, 1, 1, -2, 0, -2, -6, -3, -5, -2, -5, -1, -4, -9, 0, 5, 3, -1, -7, -1, 0, 2, 2, 6, 5, + 0, -5, -1, 1, -3, -1, -3, -1, -2, 3, 1, -1, 5, 1, -3, -4, 6, 1, 1, 6, 9, 7, 2, 1, -10, 5, -2, 3, 6, -2, + -5, -1, -7, 0, -8, -11, -6, 5, -1, -5, 8, -2, -1, 0, 2, 0, 8, 0, -6, -7, -3, 5, -4, 2, 4, 3, 2, 11, 11, 7, + -1, 1, 4, 1, -8, -5, 2, -1, -5, 2, -15, -1, -13, 9, 8, -17, 2, -1, -1, 9, 6, 3, 5, -3, -7, -12, -7, -2, 7, 5, + 2, 13, 1, 3, 5, 2, 8, -1, 9, -6, -4, 1, 2, -11, -1, 2, 1, -5, -8, 12, 10, -2, 5, 2, -4, -4, 0, -3, -9, 0, + 3, -1, -6, 6, -8, 0, 4, 8, 6, 9, 1, -3, -3, -5, -8, -6, 2, 4, 5, -1, -7, -18, -11, 2, -8, -6, -9, -4, -9, 0, + 2, 1, 1, 6, -7, -5, -8, -1, 7, 3, 1, 1, 0, 0, 4, 4, 0, -2, -8, -5, 5, 10, 1, 7, 2, 4, -5, -2, -8, -4, + -9, -3, 4, 10, 0, 3, 5, 12, 19, 18, 12, 3, 7, 6, 3, 4, 3, 10, 10, 10, 16, 3, -3, 1, 7, 5, 8, -12, -1, -1, + 9, 5, -2, -8, -12, 3, -2, -11, -2, 8, 0, -2, 1, 2, -4, 2, -5, -3, -1, -6, 2, -1, -4, 2, -3, -7, -4, -4, -6, -8, + -3, -1, -1, 1, -1, -1, -11, -5, 4, 2, -13, 3, -1, 7, 16, 3, -1, 6, 2, 0, 3, 0, 2, 0, -1, -2, 0, -1, -6, -9, + -10, -9, -4, -3, -6, 2, 1, -5, 1, 0, 6, 5, 10, -1, -1, 5, 4, -2, -5, -4, 4, 4, -1, -3, -3, -10, 1, 3, 1, -1, + 3, 5, 6, -3, -4, -2, -4, -4, 8, -9, -2, -5, 0, 0, 1, -3, -1, 3, -1, -1, -3, 0, -2, 5, 4, 5, 17, 15, 3, 2, + -6, -4, 8, 7, -5, 1, -3, -7, -4, 4, 2, 10, 10, 0, -4, -1, 4, -2, 1, 1, -2, -7, -6, 6, -4, -2, 10, 7, 2, 2, + -2, -10, -7, 1, 10, 5, -1, 2, -5, -12, -15, 6, -3, 0, -10, 4, -25, -1, 11, -13, -7, -3, -9, -3, -8, -14, -2, -1, -3, 2, + 15, 4, -4, 11, 3, 1, 2, -1, -1, -7, -5, -2, -4, 6, 0, 6, 0, 3, -10, -10, 12, -3, 3, 2, -8, 10, 1, -5, -7, -12, + -3, -5, 1, -8, 4, 3, -9, 2, -7, 3, 7, -1, 9, 5, 3, -5, 5, 3, -4, -28, -1, 9, 17, 4, -2, 5, -5, -2, 0, 9, + 9, 15, 11, 8, 18, 11, 7, 6, 9, -1, -8, 0, 4, -4, 3, -7, -18, -6, -7, 2, 4, -3, -14, -13, 0, 0, -3, -10, -6, -14, + -26, -14, -9, -11, -27, -24, -16, 2, -2, -5, 2, 0, -12, -10, -11, -10, -4, 4, 3, 10, 12, 18, 12, 17, 15, 8, 4, 16, -4, 10, + 9, 1, 13, 5, 11, 14, 1, 12, 6, 15, 5, 6, 3, -3, -2, -6, 6, 3, -8, -2, 6, -11, -5, -1, -15, 0, 3, 6, -5, -11, + -5, -12, 0, -4, -5, -10, -5, 0, -4, -1, 3, -11, -6, 1, 8, 1, 2, -3, 7, 22, 10, 10, 6, 5, 5, -1, 2, -2, -1, 1, + 2, 4, 5, -2, 1, 0, 4, 2, -5, -7, -11, -10, -8, -5, -1, 1, 1, 1, 2, 12, 8, 7, -7, -7, -6, -3, -8, -2, 3, -4, + -10, -5, -3, -9, -1, 0, 2, 2, -3, -8, -5, -2, -5, -3, -6, -4, -4, 5, 4, 1, 3, -1, -7, -2, 1, 4, 0, 3, 3, -1, + 6, -1, -3, 4, 7, 7, 6, 9, 14, 8, 0, 3, 4, -1, -9, -5, 5, 4, -1, -1, 6, -7, 5, 5, 1, -5, 1, 4, 6, 3, + 7, 1, 2, 12, 6, 7, 2, 1, -7, 1, -4, 1, 11, 11, 3, 13, 11, 13, 13, 4, 6, -49, 51, 13, -29, 20, -37, -18, 4, -9, + -17, -4, -13, 10, 12, 8, 3, 15, 5, 15, 6, 2, -2, -2, 10, 0, -4, 4, 4, 3, 1, 13, 3, 2, -6, -7, 0, 6, 1, 12, + 11, 6, 11, 7, -13, -7, 4, 7, -2, 8, 5, 1, 7, -6, -9, 6, 11, 2, 6, 1, 6, 10, 0, 11, -38, -6, -8, -3, 7, 2, + -1, -21, -23, -27, -29, -27, -10, -9, -12, 2, 4, -2, -2, -2, 8, 8, 5, 13, 1, 5, 12, 14, -1, 1, 7, 13, 0, 1, -2, -1, + 5, 0, 0, 9, 17, 11, 4, 15, 16, 9, 3, 3, -3, 0, 13, 8, -21, -23, -27, -34, -37, -16, -6, -11, -15, -14, -22, -27, -20, -5, + 9, 12, 16, 11, 17, 22, 11, 3, 4, 17, 24, 10, 16, 18, 18, 24, 24, 10, 11, 12, 19, 22, 27, 21, 14, 5, 5, -8, -16, 4, + -1, -7, -6, 5, -6, 5, -14, 4, -13, -11, -22, -25, -40, -27, -27, -40, -15, -25, -17, -9, -8, -16, 4, 15, 27, 9, 3, 3, 7, 7, + 6, 4, 6, 6, 10, 11, 7, 11, 5, 7, 8, 10, 14, 18, 10, 10, 13, 5, 10, 16, 26, 30, 27, 27, 30, 28, 28, 28, 19, 25, + 17, 19, 20, 20, 20, 20, 15, 16, 24, 20, 17, 17, 15, 14, 13, 8, 0, -11, -17, -25, -30, -17, -14, -13, -16, -15, -20, -18, -7, 4, + 18, 11, 19, 19, 17, 11, 4, 0, -3, 6, 7, 6, 11, 1, -2, -5, -23, -21, -21, -11, -4, 3, 1, 11, 20, 25, 39, 40, 40, 43, + 43, 36, 18, 2, -28, -34, -40, -56, -63, -72, -87, -81, -89, -75, -53, -44, -22, -20, -20, -19, -38, -49, -45, -40, -23, -24, -119, 112, -95, -89, + 125, -127, 16, 15, -44, 29, -31, -33, 7, -6, -16, 18, 20, -8, 20, -5, -22, 20, -6, -1, 18, -15, -2, -8, -6, 2, 1, 1, -15, -16, + -1, 0, 1, -4, -1, 9, 9, 3, 1, 0, -4, -11, -2, -5, 13, 4, 9, 1, -3, 3, 13, 9, 4, 17, 8, 3, 3, 2, 2, 4, + 3, 2, 1, 3, 2, 5, 5, 2, 4, 2, 3, 7, 4, -1, 3, 2, 4, 2, -1, -4, -7, -3, 1, 5, 6, 0, -1, 2, -2, 0, + -1, 2, 0, 8, 4, 5, -6, 6, 6, 3, -7, 3, 2, 3, -4, 2, -1, 8, -1, 0, 4, 2, 7, 3, 2, 7, 8, 1, 8, 5, + -3, 5, 4, -1, -3, -2, -7, 2, 1, 2, 2, 2, 2, -4, 5, 5, 3, -7, 8, 3, 3, 3, 0, 8, 4, 9, 10, 13, 5, -2, + 10, -3, 6, 1, 5, 0, -9, 3, -11, -4, 8, -11, 3, 0, -4, 3, 8, -3, -1, 1, 0, 0, -7, 3, -7, -12, -9, -13, -11, 4, + -2, -3, 0, 1, -3, 2, 3, 2, 1, 2, 5, -1, 0, 1, 0, -4, -3, -4, -1, -2, 4, 5, 5, 1, 1, 1, 4, 4, 3, 7, + 1, 2, -2, 0, 1, 2, -3, -3, -3, -2, -4, -3, -3, -1, 0, 3, 0, 3, -5, -3, -6, -6, -5, -9, -4, -2, -1, 2, 1, -4, + -7, 3, 3, -2, 2, -5, -1, -1, 5, 7, 1, 4, -4, 3, -4, -6, -5, -2, -3, 5, -2, 1, 3, 1, 1, 0, 1, -1, 1, -5, + 4, -2, 4, 3, -1, -3, -7, -1, 3, 2, -1, -2, -8, -1, 1, -1, 0, -4, 0, -4, -3, 1, -2, 4, 3, -5, -4, 0, 4, -11, + -20, -4, -14, -9, 10, 16, 10, 18, 0, -8, -8, -3, -9, -9, -4, -4, -6, -2, 3, 5, 7, 1, -2, 1, 6, 0, 6, -1, -3, -11, + -16, -12, -5, -6, -2, 14, 9, 12, 7, 4, 8, 7, 10, 15, 11, 9, -6, -1, -7, -10, -10, -2, 9, 10, 19, 3, 2, 6, 2, 5, + -1, 0, 0, 2, -7, -2, 0, 1, 1, -1, 3, 1, 4, 0, 3, 2, -4, 3, 10, 8, 0, 8, 3, -7, -1, -3, -1, 3, -5, -3, + 0, -3, -2, -1, 1, 1, 0, -1, 5, 3, -9, -10, -2, 0, -1, -3, -4, 0, 2, 4, 5, -2, -2, 1, 1, 8, -1, 6, -2, 2, + 1, -2, -7, 0, 4, -9, 5, 6, -11, -2, -5, -7, -3, -2, -2, 3, -6, -8, 3, 9, 3, -3, -6, -4, 5, -2, -5, -3, -1, 8, + 9, 6, 5, 0, -1, 12, -2, -4, -4, -2, 6, 2, 1, 3, 4, 4, -4, 8, 0, 1, 5, 8, 7, 0, 4, -4, -4, -4, -6, 4, + 1, -4, -5, 0, 6, 3, 4, 1, -5, 0, 4, 7, 4, 2, -5, -3, 1, 6, 4, 0, -3, -2, -3, 1, 3, 3, 1, -3, 3, 4, + 2, 0, 1, 1, 2, -5, -9, -4, -2, -3, -2, -4, 3, 5, 3, -3, -2, -3, 0, 0, 3, 4, -1, -2, -2, -4, -5, -3, -10, -4, + -4, -4, 1, -3, -5, -3, 0, 2, 5, 6, 6, 3, 4, 8, 8, 1, -1, -6, -3, 0, 0, -5, -5, -5, -3, 0, 3, -4, 2, 1, + 5, 2, 3, -1, 1, 2, 1, -3, 2, 2, -5, -3, -3, -2, 1, 5, -5, -2, -2, -2, -2, -3, -2, -2, 6, 1, 2, 1, -2, -2, + -5, -1, 0, 5, 3, -22, -10, -10, 1, 3, 12, 8, 5, -1, -5, -1, 9, 5, -8, -18, -14, -8, 8, 6, 8, 9, 5, 1, -4, -3, + 2, 6, 2, -8, -13, -14, -8, -5, -2, -4, 7, 6, -3, 5, 4, 4, 8, 0, 4, 10, 5, -4, -10, -10, -4, -13, 2, 5, 7, 14, + 3, 3, 3, 5, 1, 4, -4, -6, -4, -15, -3, 1, 1, -3, 2, 7, 1, -6, -3, -3, -2, 4, 4, 2, 0, -6, -5, 2, -9, -13, + -5, -7, 1, 5, -1, -6, -6, 3, -2, -4, 2, 6, 0, 5, 4, 1, -10, -6, -4, -4, -7, 10, 9, 9, 0, -2, -3, 0, -9, -7, + 3, 4, 4, 4, -9, -4, -3, -3, 0, 0, -8, -2, 13, 8, 2, 2, -5, -3, -1, 4, 3, 2, -2, 4, 4, -4, 14, 5, 11, 9, + 4, 0, -3, 9, 8, 5, 10, 6, 1, -8, 4, -8, -1, -3, -4, 4, -2, 5, -3, -2, 5, -6, 2, 2, -8, -4, 1, -2, -2, 6, + -2, 5, -1, 2, 1, 2, -11, -11, -14, 0, 3, -2, -2, -4, -2, 0, 1, 2, 2, -2, 2, 0, 1, 1, 2, 4, -1, -3, -3, -3, + -3, -1, 0, 4, 1, 0, -2, 3, 1, 1, 0, -6, 2, 5, -1, -1, 2, 7, 1, -2, -1, -1, 1, 4, 4, 5, 0, 2, -3, -5, + -3, -5, -1, 0, -4, -6, -7, -7, -4, 3, -3, -2, -2, 2, 3, 0, -2, 8, 10, 8, 8, 10, 5, 2, 0, 0, -4, -2, -3, -7, + -8, -4, -2, -1, 4, 2, 4, -3, -4, 4, 6, 5, 3, 4, 4, -1, -6, -2, 2, 8, 0, -2, 2, 2, 0, 0, -4, -3, 1, 2, + 2, 7, 6, 4, -1, -6, -6, -4, 0, 6, -27, -25, -13, 13, -5, 6, 2, 3, -5, -1, 4, -2, -5, -7, -8, -20, -2, 10, 10, 15, + 3, 7, 5, 8, 5, 5, 7, 8, -5, -9, -16, -5, 0, -5, 3, 1, -1, 5, 2, 3, 0, -1, -6, 1, 5, 10, -2, -7, -3, -15, + -15, -4, 5, 8, 4, -2, -8, 5, 7, -6, -4, -1, -5, -1, 0, -11, -2, 3, 0, 2, 3, -7, -3, -6, -6, -2, -2, 3, 0, -3, + 1, 2, 2, -3, -7, -1, -6, 4, 1, -5, -5, -4, 1, -4, -1, 2, 5, -7, -4, 0, -8, -7, -6, -1, 7, -3, -2, -1, -3, -7, + -11, -4, 2, -7, -4, 4, 2, -4, -2, -2, -5, -2, -1, 5, -3, -2, 0, 1, 4, 5, 0, -6, 2, 6, 1, 4, 3, -3, -1, -1, + 0, 7, 1, 10, 14, 7, 5, 3, 7, 8, 2, 2, 4, 4, -2, -6, -4, 3, 1, 3, 10, 0, -2, 2, 0, -4, -5, -5, 3, 4, + -2, -4, -10, 1, -4, -6, -2, -4, -3, 1, 0, -5, -5, 7, 16, 2, 3, 3, 3, 2, 3, 4, 1, 0, -4, -2, 0, 1, 3, -1, + -1, -3, 1, -1, 1, 0, 3, -4, -1, -3, -2, -8, -2, 0, 2, 1, 0, -2, -4, -3, -1, 1, -1, 3, 1, 3, 5, 3, 10, 7, + 5, 0, 0, 0, -1, -4, -2, 2, -3, -4, -3, -2, -2, -1, -1, -2, 2, 3, 1, 5, -1, -2, 2, 0, -6, -2, -2, -4, 3, -5, + -1, -1, -3, -9, -8, -9, -2, 5, 3, 5, 10, 11, 1, 0, 0, -3, 0, -2, -3, 1, -3, -3, 5, 4, 6, 1, 4, 7, 5, 1, + 2, -3, -3, -5, -4, 0, 2, -2, -3, -1, 0, -2, 2, -2, -2, -31, -13, -11, 20, -1, 8, 16, 20, 3, 17, 6, -2, -8, -4, -5, + -15, 2, 15, 15, 12, 4, -2, 2, 6, -7, 7, 14, 11, 5, -3, -16, -2, 0, -7, 2, 4, 1, 3, 4, 11, 0, 1, -7, 11, 7, + 3, -9, -8, -4, -2, -15, 3, 9, 10, 5, -1, 0, 7, -1, -2, 0, -1, 3, 5, 9, -10, -12, -15, -6, -1, -3, -5, -3, 1, -1, + -6, -7, -6, -4, -1, 7, 3, -2, -3, 2, 0, 4, 0, 0, -3, -5, 2, 4, 0, 0, 2, 2, -1, -3, 3, -1, -6, -7, -6, 1, + -2, -8, -6, -2, 2, 1, 1, -4, -1, -1, 0, -1, -7, 3, 3, 3, -3, -8, -6, -5, -5, -2, -5, -2, 2, 0, -1, 0, 2, 5, + 2, -4, 9, 4, 1, 8, 13, 5, 1, -3, -1, -1, -4, 3, -1, 1, 0, -1, -6, -9, -9, -5, -1, -1, -4, 3, 4, -2, 9, 10, + 3, 4, -7, -7, -6, 0, 3, -5, -6, -9, -4, 3, -3, -3, -1, -8, -11, -4, 8, 12, -11, -6, -3, -3, 1, -2, 0, -3, 2, 4, + 0, -3, 1, 0, 1, 6, 6, 6, 3, 6, 4, 3, 0, -6, -5, -4, -4, -7, -4, -6, -8, -7, -5, -6, -1, -1, -9, -4, -3, 1, + 1, 2, -4, -2, -3, -3, -1, -1, 0, 4, 4, 1, 2, 9, 13, 11, 7, 5, 3, 0, 0, -2, -5, -5, -5, -2, -1, 3, 5, 5, + 8, 0, 4, 4, 3, 7, 5, 7, 1, -3, -3, -4, 0, 1, 6, -1, -3, 4, -4, -5, -3, -7, -3, -3, -3, -1, -5, 3, 5, 1, + 3, 0, 0, 1, -1, -1, 4, 4, 4, 2, 5, 6, -3, -2, 1, -8, -2, -1, 3, 4, -60, -3, -22, 26, -6, 16, 38, 39, 21, 15, + -17, -18, -19, -16, -7, -19, -10, 5, 0, 7, -12, 1, 6, -1, 4, 1, 6, 11, 11, 1, -8, -4, 0, 3, 13, 13, 11, -4, 6, 10, + -1, 9, -7, 8, 12, 1, -5, -4, 0, -1, -11, 2, 7, 17, 5, 3, 1, 7, 7, 4, 7, -6, -6, -8, 30, -9, -6, -9, -11, -16, + -10, -7, 3, 7, 0, 5, -2, -2, -5, -6, -10, -13, -9, -6, 0, 4, -4, -7, -4, -1, 0, 1, 5, -1, 0, -8, -8, -1, -2, 5, + 9, 7, 10, 6, 1, -3, -9, -5, -4, -2, 2, 8, 5, -2, -9, -13, -16, -11, 2, 3, 8, 8, 0, 2, -1, -7, -11, -19, -12, -8, + -10, -6, -7, 1, 2, 4, -2, 3, 0, -6, -9, -11, -5, 3, 4, 10, 2, 1, -5, -12, -18, -24, -20, -10, 5, 7, 15, 16, 9, -1, + -3, -6, 3, 6, 11, 9, 9, -9, -5, -5, -3, 2, 6, 13, 16, 19, 24, 21, 13, 17, 25, 19, 11, 11, -10, -3, 0, 3, 0, 2, + 3, 1, 5, 2, 4, 2, -1, -1, 0, 5, 8, 4, 4, 0, 2, -2, 0, -1, -3, -2, -2, 6, 2, 3, 4, 1, 5, 6, 8, 10, + 8, 5, 6, 12, 12, 9, 10, 4, 5, 1, 1, 7, 3, 3, -2, -7, -5, 3, 1, 7, 10, 9, 8, 11, 11, 3, -4, -4, -7, -6, + -12, -11, -5, -5, -5, -4, -5, -6, -6, -5, -6, 0, 4, 9, 10, 4, 2, 3, -9, -16, -19, -20, -8, -4, 6, 10, 11, 9, 7, 2, + -3, -8, -10, 1, 3, -2, 0, -3, -1, -1, -2, 0, 2, 10, 9, 4, 1, -3, -10, -3, -5, 0, -6, -17, -38, -127, 25, -33, 52, 0, + 33, 88, 56, 59, 17, 2, -43, 5, -27, -25, -12, -31, -4, -8, -6, -8, -22, -6, 6, 7, -9, 17, 16, 13, 5, -10, -12, -3, 8, 3, + 13, 8, 0, 0, 7, -1, -11, -10, 10, 4, 0, -4, -11, -11, -14, -26, -7, -2, 5, 1, -7, -9, -15, -17, -10, -11, -19, -25, -37, 77, + 4, -3, 3, -7, -1, -1, -4, -5, 2, 7, 1, 0, 7, -2, -7, -7, 1, 2, -10, -11, -5, -1, 6, -3, -6, -2, -11, -3, -1, 2, + 6, 1, 0, 11, 2, 5, -7, -12, -7, 14, 3, -6, -9, 5, 5, -4, -8, -10, -8, 0, 1, 2, -16, -4, -8, -18, -10, -6, -3, -2, + -3, -1, -1, -5, -6, -2, -8, -1, -2, -8, 6, 3, -7, 6, 0, -6, -12, -6, 3, -2, 2, 1, -5, -5, 5, 1, -6, -12, -12, -6, + -10, -4, -13, 2, -10, -1, -12, -1, 2, -4, -12, 4, -1, 8, 1, 2, -6, 12, 0, 3, 7, 9, 2, 6, 8, 15, 3, -1, 0, 5, + 1, -1, -5, -4, -9, -2, -4, -6, -3, 0, -5, 4, 1, -1, 9, 4, 6, 9, 10, 3, -5, -3, -1, -6, 0, -8, -6, 6, 8, 5, + 6, 2, 5, 9, 8, 0, -8, -3, -8, 1, 4, -4, -7, -1, -2, -1, -5, 4, 4, 5, 12, 8, 4, 7, 4, 1, 0, 2, -2, 7, + -1, -5, -11, -9, -8, 0, -12, -7, -5, 4, 0, 7, 8, 5, 4, -5, -10, -11, 4, 3, -7, 4, 5, 9, -3, 6, 9, 1, -6, 10, + 3, 7, 7, -6, -7, -8, -8, 1, 7, 2, 5, 10, 1, 16, 10, 5, 14, 2, 10, -3, -11, 2, -7, -5, -7, 0, 0, -6, -6, 25, + -7, 28, 13, 5, 23, 11, -21, -10, 3, -7, 1, -17, -15, -3, 2, 0, 3, -3, -2, 4, 8, -3, -1, -19, -1, 15, -7, 22, 34, 10, + 16, 6, 6, 5, -7, -19, -6, 4, 1, -3, 17, 15, -9, -6, 2, 2, 6, -4, 20, 9, 7, -3, 3, 8, 16, 5, -1, 0, -6, -14, + -4, -22, -31, -29, 2, 3, 0, 0, 5, -14, -6, -4, -9, -3, -2, 5, 0, -2, 0, -3, -6, 1, -1, 1, 7, 5, -5, 0, -3, 0, + -5, -1, -7, -6, -3, -1, 5, -2, -15, -7, -12, -15, -16, -13, 8, -1, 4, -15, -2, 5, 1, 1, -1, 19, -1, -3, 2, 3, -6, -1, + 11, 14, 8, 3, 13, 1, 4, -2, 9, 4, 7, 4, 0, 7, 7, -1, 4, 9, 2, -2, -2, -17, -8, -7, -10, 7, -14, 1, 0, 12, + 1, 3, 8, -5, 1, 6, 1, -9, -7, -4, -11, -12, -15, -2, -16, -12, -16, -6, 4, 9, 5, -1, 0, 1, -6, 7, 3, -8, -3, 2, + 3, 10, 6, 15, 17, -6, -2, -9, -6, 0, -6, 3, -2, -1, 1, -5, -5, -9, -10, -4, 4, -3, 6, 5, 3, -2, 5, 8, 13, 9, + 9, 7, 5, 5, -3, 6, 4, 1, 6, 3, -2, 2, -2, 2, 3, 1, -1, -11, 1, 3, -12, -3, 2, 6, 1, 7, -6, 0, -5, -6, + -6, -3, -8, -1, -3, -3, -4, 2, -3, -3, 3, 2, -8, -3, 0, -9, -4, 7, 5, 5, 5, -11, 6, -6, 1, 4, -3, 0, -5, 0, + 0, 3, -3, -6, 2, 8, 12, 0, 1, 12, 1, 0, 9, -1, -1, 2, 9, 14, 10, 1, 2, -3, -9, -2, -7, 6, 7, -10, 0, -2, + -10, -7, -8, -10, -8, -2, 3, 20, 14, 15, 15, 18, -4, 7, -7, 1, -20, -23, -7, 0, -12, -20, -16, -15, 0, 10, 1, -6, -7, 1, + 14, 5, 15, 19, 4, 17, 15, 6, -2, -5, -21, -13, 7, 3, 17, 11, 13, 2, -1, 7, 14, 10, 1, 17, 6, 5, 1, 3, 6, 9, + 11, 1, 5, -14, -18, -10, -23, -13, -13, 9, -4, 0, 6, 0, 4, 6, 11, 4, -3, 4, 2, 11, -1, -9, 1, -8, -7, -9, 1, -3, + -7, -9, -6, -3, -5, 5, -4, -14, 5, 10, 1, -6, -2, 4, 5, 2, 6, -2, 3, 1, -3, -10, 0, 2, 5, 0, 9, 6, 10, -2, + 2, 10, 5, 3, 4, 14, 4, 1, -1, 6, 13, -5, -8, 6, 10, -1, -5, -10, -7, -14, -8, 4, -19, -10, -4, -6, -12, -11, 7, 2, + -2, -13, -8, 1, -5, -10, -13, -4, -6, -2, 4, 14, 1, -6, -5, 4, 1, 8, 13, 2, 7, -9, 8, 0, -8, 15, -2, 7, -1, 1, + 0, 1, 11, 7, 8, 18, 14, 0, 6, 7, -7, -4, 1, 5, 13, 10, 5, 11, 7, 8, 3, -5, -9, -2, -5, -7, -4, -1, -7, 0, + 6, 7, 3, 4, 2, 0, 3, 7, 0, 3, 2, 3, 3, 6, 5, -2, -5, -9, -10, 2, -4, -2, -5, -1, 4, -10, -9, 6, -4, -11, + -5, -6, -10, -15, -20, -17, -5, -17, -16, -4, 9, 0, 9, 9, 4, -5, -10, -4, -5, 1, -1, 14, -2, 4, -7, -4, -5, -6, 4, 15, + -8, 3, 3, 0, 8, -1, -3, -4, 3, 10, 2, 7, 11, -10, -2, -3, -8, -5, 2, -12, -2, 2, -15, -9, -8, 1, -1, 14, 6, -11, + 7, 6, 1, 10, -11, -8, 4, 4, 8, 9, 6, -5, 10, 19, 14, 3, 4, -2, 5, -15, -3, -47, -35, -7, -7, -9, -23, -43, -13, 7, + -3, -14, 9, -9, 8, 7, 11, 19, 17, 4, 22, 22, 13, -1, 2, -14, -7, -4, -2, -7, 10, 10, 6, -2, 11, 12, 8, 1, -5, -3, + 2, -6, -10, 5, 0, 4, 5, -3, -14, -5, -5, -16, -22, -15, 1, 11, 2, -2, 1, 6, -1, 3, -3, -7, -7, 1, -4, 1, 3, 11, + -1, 0, 5, 1, 2, 12, 2, 10, 3, -4, -3, 4, 7, -1, 1, 0, 9, 4, 2, 7, 8, 11, -2, -5, 1, 7, -9, -5, -1, 1, + 6, 7, 1, 2, -2, 5, -1, 2, -3, -5, -2, 0, 2, -5, 14, 9, 6, 4, -3, -3, -5, 10, 4, 3, 5, 16, 12, -1, -2, -16, + -3, -4, -20, -22, -11, -1, -1, 0, 6, -1, 6, -18, -27, -10, -20, -8, 12, 0, -7, -12, -2, -16, -9, -14, -6, -8, 8, -12, 0, 7, + 3, 4, -13, -4, -22, -5, 9, 4, 17, 23, 15, 11, -2, -16, -13, -8, 2, 1, 6, 2, 2, -4, -2, 4, -2, 6, 7, 9, 10, 14, + 9, -3, -8, -9, 2, -6, -12, -9, -1, 11, 17, 9, 5, 9, -3, 6, 1, -5, -4, 2, 5, 7, 4, 0, -10, -11, -14, -17, 1, 0, + -2, -5, -2, 8, 6, 3, 5, 8, 2, -9, -8, -3, 11, 0, -2, 1, -3, 8, 9, 4, 9, 2, -6, -3, -5, -3, -9, -6, -9, 4, + -4, 1, -2, 3, -11, 4, 2, 6, -12, -1, -10, -17, -17, -11, -7, 8, 5, 4, 14, 11, 6, -1, -11, 7, 6, 3, 3, -4, -3, -7, + -12, -5, 5, 11, -4, 4, 2, -17, -6, -7, -5, 0, -6, -6, 1, 24, -12, 20, 29, 19, 17, 12, 1, 1, -42, -20, -40, -28, 2, -2, + -26, -29, -13, -7, -11, -24, -11, -5, -16, -8, 6, 12, 13, 27, 16, 20, 19, 17, 6, 6, 4, 5, -8, -12, -4, -4, 2, 1, 8, 10, + 27, 13, 10, 16, 6, 0, 4, 9, 0, 14, 4, 7, 6, -8, -11, -16, -9, -11, -14, -31, 2, 6, 0, 0, -10, -2, -13, 9, 15, 13, + -1, 5, -6, -5, 13, 11, -5, -9, -15, -3, -3, 7, 1, -1, 10, -9, -11, -3, -1, -6, 2, -9, -12, -3, -5, 1, -1, -3, -14, -19, + -27, -20, -5, -3, -19, -11, -1, -8, -12, -2, 4, -4, -18, 5, 4, -13, -18, -1, -19, 0, 9, -4, -7, 1, 3, 3, 2, 0, -2, 23, + 19, -6, 4, -4, 3, 5, -7, -17, 2, 15, 8, -2, 6, 11, -14, 10, -7, -15, -17, -20, -11, -12, -22, -24, -23, -21, -10, -19, -10, -17, + -3, -12, 6, -9, -1, 2, -23, -1, 2, -19, 2, 7, -3, -7, 8, 12, 7, 8, 6, 6, -4, -3, -7, -6, -4, -2, -2, 4, 6, 8, + 7, 9, 4, 7, 9, 9, 2, 3, 6, 2, 5, -2, -6, 2, 0, 0, 5, 8, 0, -9, 0, -2, 3, 1, 5, 8, 9, 5, 4, 7, + 0, 3, 7, 4, 1, -2, -6, 5, 2, 1, -3, -7, -7, -8, 0, -4, -14, 0, -4, -9, 1, -1, -8, 0, 14, 3, 2, 2, -1, 1, + -2, 0, -6, -9, 3, 2, 5, 4, 1, -3, -1, 1, 6, 3, -2, 7, 3, 6, 11, 11, 2, -2, 4, -11, -6, -7, -2, -5, -4, -9, + 3, 13, 7, 2, 1, 4, -4, 5, 14, -7, -5, 1, -9, -1, 3, -2, -5, -13, -14, -23, 18, 8, 40, 51, 24, 46, 7, 5, -2, -43, + -52, -52, -28, -13, 3, -17, -15, -17, -23, -17, 0, -4, 7, 12, 16, 30, 29, 24, 28, 20, 25, 23, 14, 11, 2, -9, -4, -5, -6, 10, + 8, 21, 9, 8, 18, 17, 8, 5, 13, 20, 21, 5, 24, 11, 17, 24, 19, 13, 1, -11, -15, -9, -19, -13, -48, -10, -8, -13, 3, -8, + -1, -26, -20, -13, -9, 1, 5, -2, 0, 4, 10, -11, -9, -20, -23, -18, -12, -13, -31, -28, -30, -23, -11, -8, -5, 1, -7, -14, -18, -24, + -24, -17, -16, -14, 7, 0, 6, 7, -5, -12, -14, 0, -6, -6, -10, 1, -10, 1, 10, -1, -9, -8, -11, -20, -11, 2, -1, -3, 2, -6, + -1, 7, 7, -5, 4, 15, -6, -4, 14, 21, 19, 4, -9, -4, 2, 8, -8, 5, -19, 1, 9, 16, 23, 10, 0, 18, 8, -15, -14, -6, + -28, -30, -22, -1, 6, 23, 18, 11, -6, -4, 1, 8, 3, 0, 6, -12, -5, 12, 4, 16, 30, 18, 11, 25, 42, -22, -17, -16, -12, -18, + -19, -20, -12, -7, -4, 2, -7, -7, -1, -7, -3, -5, -4, -9, -8, -6, -9, -16, -8, -4, 0, 5, 7, -4, -9, -12, -4, -5, -1, 6, + 17, 5, -5, -8, -2, -5, 1, 12, 0, -1, -7, -5, 5, 5, 2, 15, 2, 8, 15, -8, -18, -14, -17, -18, -8, 4, 11, 10, 16, 11, + 6, 11, 16, 15, 14, 4, 5, -8, 3, 6, 6, 9, 7, 15, 23, 22, 8, 25, 19, 23, 20, 22, 20, 26, 21, 39, 32, 40, 36, 39, + 35, 34, 21, 19, 8, -11, -21, -41, -44, -41, -40, -41, -40, -33, -35, -37, -41, -50, -64, -72, -88, -88, -95, -92, -127, -34, 32, 71, -43, -113, + -32, -41, -2, -37, -91, -63, -81, -91, -42, -48, -43, -24, -44, -19, 2, -9, 1, 0, 18, 14, 30, 6, 3, 23, 35, 28, 13, 10, 19, 11, + 11, -2, -5, -6, 2, 16, 11, 22, 25, 25, 13, 17, 10, 21, 22, 40, 34, 40, 48, 36, 62, 47, 20, 23, 23, 10, 14, 21, 25, -13, + 11, -3, -2, 1, 8, 8, 2, 6, 6, 0, 0, 8, 14, 8, 2, 7, -2, -1, 6, 2, 6, 5, -1, -6, 0, 2, 17, 8, 15, 1, + -14, 6, 2, 7, -1, 2, 2, 6, -4, 1, -4, 8, 5, 8, 1, 8, 1, -14, -7, -6, -7, 1, -9, 6, -2, -10, -9, 3, -3, -12, + 11, 2, 2, 14, 0, 7, 9, -6, -7, 0, -10, -6, 4, 5, 5, -12, -5, -11, -3, 0, -6, 0, -1, 4, -1, -14, 0, 2, 13, 12, + 17, 13, 4, 11, 11, 15, 20, 9, 8, -10, 3, -10, -5, -4, -15, -1, 13, 6, -2, -6, -5, 9, -4, 0, -13, -9, -14, 5, -16, -17, + 4, -1, -3, -11, -8, -7, 5, -2, 3, 2, 7, 0, -2, 5, 10, 8, -8, -12, -5, 3, 4, 3, -3, -8, -4, 0, -2, 2, 2, -5, + 3, -3, 5, -3, 3, 7, 7, 10, 5, 8, 6, 6, 0, 3, -8, 0, 7, -1, -1, -3, 1, -8, -5, 6, -3, -7, -6, -2, -7, -4, + 4, 0, -7, 0, 7, 8, -1, -1, -5, -9, -3, -9, -9, -1, 12, 11, 13, 1, 2, -4, -5, -22, 0, 5, 7, -4, 3, 6, 3, 5, + -2, -2, -8, 1, 7, -3, -2, -11, -4, -4, -4, -13, -15, -11, -7, 5, -6, 5, 6, -3, 6, 18, 0, 5, 2, -8, 3, 3, -2, -2, + -10, -10, 5, 7, -19, 0, 11, -7, -11, -17, -19, 5, -14, -4, -11, 14, -7, 4, -3, 2, -11, -3, 18, 4, 14, 10, 6, 24, 7, 22, + 11, 2, 19, -9, 7, 3, -8, 5, -6, -3, -9, 1, 7, 4, 1, 7, 13, 6, 8, 7, 8, -5, 4, 9, -7, 9, 13, 1, 0, -11, + 7, 2, 2, -6, -45, 5, -5, -9, -5, 2, 5, 11, -3, -1, 9, 19, 0, 19, 9, 11, -2, 5, 13, 9, -8, -4, 3, 2, 8, 11, + 6, 7, 8, -2, -8, -11, 4, 12, 10, 2, 6, 17, 9, 2, 5, 12, 2, -9, -6, 11, 0, -4, -11, 10, -1, 5, 4, -9, -6, -8, + 5, -12, -13, -2, 1, -2, 2, 9, 11, -3, -7, -11, 0, 4, 2, 0, -10, -4, -2, -14, -18, -16, -5, 2, -1, -15, 1, 9, 6, 25, + 0, 4, -4, -17, -6, 2, 4, 0, 9, 3, 9, 9, 5, -2, -3, -4, -14, -3, -4, -9, 11, 0, 19, -14, 1, -12, 4, 11, 17, 6, + 9, 15, 30, 11, 7, -3, -2, 4, 1, 1, -6, -1, -2, 2, 8, -5, -5, -9, -17, -7, -10, -3, -12, -6, -4, -6, -14, -15, -17, -10, + -7, -4, 0, -1, 10, 6, 4, 3, 2, 1, 4, 3, 2, -9, -4, -2, 6, 5, 4, 5, -3, 3, -3, -1, -7, 2, 1, -2, -1, 0, + 8, 9, 9, 2, -3, -10, -7, -7, -4, -1, 8, 9, 4, 0, 5, -5, 1, 16, -1, -1, -9, -5, 1, 2, -10, -9, -26, -7, -19, -8, + -15, -13, -10, -9, 0, -1, 11, 0, -3, -12, -6, -3, -12, 4, -1, 2, -7, -2, -3, -6, 3, 10, -1, 0, -3, -1, 2, -3, 0, 3, + 6, 6, 8, -4, -12, -3, -2, 7, -14, -27, -8, -1, 10, 14, -16, 3, -11, -3, -5, -4, -8, 8, 0, -3, -6, 0, -6, 7, -19, -5, + -9, 12, 17, 9, -11, -10, -6, -5, -7, -9, -14, -8, -2, -8, -5, -8, -1, 4, -3, -10, -1, 0, -2, -4, -1, -5, -5, -11, -3, -13, + -3, -3, -7, -1, -19, -10, -9, -8, -16, -18, -11, -5, 10, 16, 15, 9, 0, 3, 10, 13, 15, 0, 0, 13, 18, 15, 13, 11, 5, 8, + 9, 5, 0, 2, -4, 8, 7, 13, 8, 3, 6, -13, -11, -4, 6, 14, 14, -4, -16, -2, -1, -2, 5, 4, 0, -21, -19, -22, -15, -16, + -18, -5, -13, -4, 12, 1, -11, -1, 6, 12, 2, -13, -14, -7, 5, 12, -11, -11, -5, -15, 10, -1, -14, 0, -9, 10, 4, -6, -14, -7, + -7, -6, -11, -19, 0, -5, -4, 12, 7, 13, -6, 5, -18, -5, 5, 0, 7, 4, 15, 11, 10, 14, 7, 6, 12, -4, -5, 2, -3, -2, + -6, -2, -4, 14, -4, 8, -1, 5, 11, -8, -9, -11, 0, 13, 4, -2, -2, -11, -9, -9, -14, -6, -8, -1, -6, 0, -1, -2, -4, -7, + -2, -7, -6, -5, 1, 4, 2, 5, 3, 3, 4, 0, 0, -2, 1, 4, 9, 4, -1, -1, -1, 0, 2, -2, 0, 1, 3, 6, -2, 3, + 1, 1, -7, 6, 6, 4, 7, 6, 8, 4, -11, -3, -2, 2, 0, 7, -3, -1, -2, 4, 12, 6, 1, 1, 3, 5, 0, -1, -7, -1, + -9, 1, -13, 4, 0, 10, 1, -1, -4, -10, -9, -6, -10, -9, -16, -10, -3, -7, -14, 0, -3, -7, 14, 8, 11, 12, 8, 3, -1, -1, + 3, -11, -8, -10, -22, -5, -8, -12, -9, -10, -14, 16, 23, -6, 17, 11, -11, -1, 12, -3, 0, 13, -3, 10, 11, 7, 9, 8, -14, -2, + -12, -1, 7, -10, -1, 1, 16, 16, 5, -12, -17, 1, 14, 6, -7, 6, -6, 6, 8, -3, -5, -1, -3, 6, 16, 16, 19, 1, -5, -9, + -8, 4, 9, 13, -6, 9, 10, 3, 8, -10, 5, 7, 4, 3, -47, -7, -6, -3, -17, -3, -5, 8, 6, 9, 9, 9, 3, 1, -3, 11, + 3, 12, -3, 12, 3, 3, -8, -3, 3, -11, -1, 4, 9, -3, -9, -10, -7, 0, -4, 11, 6, 15, 1, 1, -8, 3, 1, 13, 17, 22, + 1, -3, -7, 1, -9, -16, 8, -4, 0, 6, 4, -4, -25, -2, -3, -8, -8, -8, -11, -14, -4, -7, -7, -2, 0, -5, -10, -6, -5, -8, + -6, -19, -9, -12, 0, -10, -9, -14, -7, -9, -12, 8, -1, 13, 10, 4, 2, -4, -17, -10, 1, -2, -1, -1, 4, 15, 18, -3, 15, 1, + 0, -5, 13, 1, 5, 8, 11, -8, -5, -6, -18, -15, 4, -8, -10, 2, 2, 1, 3, 1, 5, 6, -4, 3, 4, 4, -4, -1, -3, -4, + -5, -2, 3, -5, -2, 0, -3, 8, 3, -3, -4, 5, 2, -3, 6, -4, -8, -3, -8, -1, 7, 13, 12, -1, -5, -11, -6, -3, -5, 0, + -13, -4, -4, 3, 3, 2, 0, 8, 1, 6, 0, 3, 7, 3, 10, 8, 14, 13, 5, -1, 11, 1, 8, 3, 11, 4, -9, 0, 6, -3, + -5, -6, 1, -2, -6, -5, -8, 12, 14, 9, -2, 2, -10, -6, 5, 0, -4, -1, -5, 3, 3, 2, 12, 2, -7, -8, 0, 12, 2, -1, + 10, 0, -9, -13, -12, -13, -4, -2, 7, 5, -1, -6, 16, 13, 7, -3, 34, 5, 11, -2, -11, 5, 13, -16, -4, 12, 12, 5, -2, 18, + 7, 17, -3, -4, 5, -15, -11, -7, -4, 6, 6, 4, -3, -4, 0, -7, 5, 8, 5, -10, -5, 1, -9, -7, -7, -2, -5, -8, 11, 11, + -2, 8, -8, -2, 0, 6, 10, 3, 1, 10, -2, 15, 0, 7, -4, -12, -1, 0, 6, -39, -7, 5, 17, 21, 8, 9, -2, -13, 2, 5, + 2, 5, -3, -2, 12, 17, 23, 17, 17, 4, 5, 12, 1, 3, 5, -6, -2, 17, -1, -6, 6, 18, 21, 2, 5, 6, -6, -7, 1, -9, + 7, -2, 10, 16, 12, -1, 9, 19, 26, 14, 15, 18, 14, 22, 24, 27, 22, 12, 12, 13, 7, 7, 5, -2, 7, 13, 11, -1, 9, 2, + -2, -12, 16, 4, -14, -6, -11, 3, -9, -14, -24, -25, -39, -7, -1, 3, 6, -6, 15, 11, 9, -2, 9, -9, -16, -23, -11, -17, -10, 5, + -2, 6, -6, -1, -3, -22, -3, 16, -1, 14, 1, -1, -4, -5, 6, 2, -7, -6, -12, -14, 5, 7, 2, 5, 4, 2, 0, -2, -1, -7, + -2, 5, 2, 2, 5, 2, 7, -3, 2, 6, 4, 1, -3, -11, -1, 0, -3, 8, 9, 6, 4, 0, 9, 14, 9, 5, 4, 6, 0, -4, + -11, -7, -3, 2, -1, -16, -12, 1, -8, -4, -3, -11, -4, 7, 3, 8, -1, -1, 9, 2, 10, 2, 5, 7, 0, -3, -2, 0, 9, 12, + 5, 9, 11, 12, 1, -2, -1, 0, -5, -10, -9, -11, -1, 10, 5, 3, 4, 8, 6, 9, -2, 2, 10, 3, -8, -8, -4, -13, -2, -1, + -1, -2, -14, -17, -9, -15, 0, -9, -1, -2, -1, -13, -18, -21, -10, -20, -23, -18, -29, -35, 1, 63, -29, 33, -14, -30, -5, 2, -12, -27, + -13, -4, -10, -22, -9, 13, 1, -2, -4, 6, -20, -11, 22, 3, 22, 11, 5, -4, -12, -8, 19, 9, 0, 13, -12, -7, -6, 8, -8, -17, + -10, -20, -8, 4, 11, 6, 1, -1, 0, 2, 14, 3, 2, 3, 9, -4, -1, 11, 10, 4, 12, 0, 0, 7, -34, 7, 4, -2, -8, -6, + -3, -7, 1, -1, 0, 3, 3, -5, 8, 5, -9, -9, -11, -30, -17, -6, -1, 2, -1, 2, 0, 1, 2, -5, -1, -7, 5, 3, 16, 14, + 16, -7, -15, -2, -7, 6, 17, 27, 18, -9, -7, -3, 10, 12, 14, 13, -7, 1, -2, -10, 3, -5, -12, -9, 6, -14, 10, 1, -3, 1, + 11, -9, 5, -3, -15, -18, -6, 3, -6, -8, -24, -24, -25, -30, -29, -46, -34, -60, -38, -47, -44, -54, -55, -51, -74, -82, -83, -65, -61, -59, + -23, -38, -7, -44, -43, -48, -56, -43, -34, -42, -79, -52, -79, -63, -56, -53, -55, -47, -29, -32, -21, 2, -3, -30, -10, -6, -9, -12, -21, -21, + -14, -12, -19, -21, -16, -6, -5, -1, -12, -12, -12, -14, -12, -16, -11, -10, -16, -16, -12, -10, -15, -29, -28, -8, 4, 0, 2, 3, 2, -1, + -1, -3, -14, -13, -15, -4, -9, -2, -12, -6, -14, -6, -4, 0, 6, -6, 3, 0, 1, -4, 3, 14, 4, 6, 2, 9, 15, 25, 22, 14, + 20, 12, 26, 20, 9, 4, 14, 19, 23, 21, 25, 38, 40, 42, 56, 44, 40, 30, 32, 17, -4, -13, -24, -40, -60, -69, -53, -23, -19, -3, + 26, 41, 46, 35, 48, 54, 39, 24, 17, -6, -14, -10, -12, 6, -3, -5, -22, -32, -36, -44, -54, -70, -77, -70, -68, 6, 82, -73, 127, -69, + -82, 0, -32, 19, -40, -45, -3, -6, -4, -17, -10, 10, 32, 1, -30, -21, 7, 21, 12, 4, -2, -5, -9, 6, 14, 2, 7, -2, 10, -6, + 8, -16, -3, -14, -3, -6, -7, 4, 13, 22, 12, 8, 12, 17, 10, 14, 17, 10, 14, 16, 4, 10, 4, 4, 1, 10, -5, -4, 9, 3, + -3, -4, -3, 1, 3, 0, 0, 3, 0, -2, -1, 5, -6, 0, -2, -4, -4, -4, -3, -8, -5, 0, -1, -5, 2, -1, 4, -2, -1, 0, + 2, 1, 2, 2, 1, 2, 2, -1, 2, 2, -4, 0, 3, 3, -1, 1, -6, -12, -7, 3, 0, -3, -1, -7, -9, -11, -3, -7, -10, -5, + -5, -6, 0, 2, 0, -4, 1, -2, -10, -5, -5, -2, 2, -3, -9, -9, -7, -3, -3, -6, -6, 1, 1, -1, -3, 0, -3, -2, -6, -6, + 1, -8, -3, -1, 7, -2, 14, 4, 2, 1, 12, -1, -7, 4, 4, 8, 6, 2, -4, 6, 1, 6, 5, -4, 3, 1, 4, 3, 3, -1, + -4, 3, -1, 6, 4, -4, -8, -5, -5, -5, -1, -1, -2, 2, 7, 9, 0, -5, 1, -2, -2, 5, -1, 2, 5, 8, 6, 4, 2, 3, + 2, 1, -1, -5, -6, -4, 1, -2, -5, -2, -8, -4, 5, 2, 2, 5, 3, 3, 2, 3, 7, 1, 1, 4, 2, -4, -1, -5, -2, 1, + -1, 1, 3, -1, 1, -9, -3, -3, 1, 0, -1, 2, 7, 0, 3, -7, -2, 9, -2, -1, 1, 2, -8, 3, -2, 0, 1, -1, 4, -4, + 1, 2, -5, -4, 5, 2, 0, 5, -3, 1, 4, -2, -6, -2, 6, 3, 5, 3, -5, 0, -3, -2, 2, 1, -1, -4, 0, -5, -12, 16, + 9, 3, -12, 3, 4, -2, -4, -10, -2, 1, 1, 12, 8, 7, 5, -6, 4, 2, -1, 6, 2, 3, 7, 0, 8, 6, -3, 4, 2, -5, + -5, -1, 0, -10, -8, 1, -1, 0, 7, -4, 8, 12, -3, -1, -5, -2, -3, 3, -6, -6, -10, -8, -4, 2, -3, -6, 13, 3, 8, 7, + 10, 1, 2, 3, -6, -9, -8, -10, 2, 0, -7, 1, 3, 1, 3, 7, 2, -5, 5, -3, -5, 1, -4, -5, -6, -7, -7, 2, -2, 3, + 8, 3, 0, -1, -5, -1, 2, -1, -9, 3, 7, 1, -3, -6, -1, -1, 2, 2, 2, 2, -4, -3, -4, 6, 5, -1, 3, 4, -2, 2, + 2, 2, -4, -3, 3, 4, 1, 9, 4, 4, -4, 1, -3, 2, 4, 1, 6, 1, -6, -2, -2, -4, -5, -9, -7, 0, -1, -4, -5, -9, + -1, -10, 1, -3, 2, 0, -8, -2, -1, 6, -8, -3, 5, -6, 4, -3, -5, -3, -1, 5, 11, 7, 9, -3, 0, -6, 4, 2, -1, 1, + -1, 3, 2, 8, -4, 3, -2, -1, -2, -4, 0, 0, 2, 1, -3, 1, 2, 4, 4, 9, 5, 4, 4, 1, 1, 2, 0, 0, 1, -5, + -1, -1, 1, 4, 10, 5, -3, 2, 2, 1, 1, 1, 3, -3, 0, -2, -5, 1, -4, 0, -6, -9, 1, 0, 4, 3, 3, 6, 2, -2, + 2, 8, -4, -4, -1, -1, -5, 5, 5, 1, -1, -2, 1, 0, 3, 4, 0, 5, -4, 4, 4, 2, -1, -4, 2, 3, 1, -8, -6, -7, + 1, 2, 4, 0, 6, 5, 4, -1, 2, 1, -7, -3, 2, 0, 0, 3, 0, 2, -4, 4, -2, 5, 4, -5, 0, -10, -3, -3, -7, 2, + -1, 5, -1, 3, 3, 8, 5, -6, 5, -4, -1, -3, 0, 12, -3, 6, 11, 3, 2, -1, -5, -11, 5, 7, -4, 0, 7, 4, 1, 4, + -4, -1, -2, 4, 6, -3, -9, 1, 4, -10, 3, -3, 9, 1, -3, 1, 6, -4, -1, 5, -8, -1, 1, -4, -5, -7, 4, -1, 9, -2, + 6, 0, 0, -6, -5, 1, 1, 0, -9, 6, -4, -3, -6, -10, -4, -6, 1, -2, 0, 9, 1, -6, -8, 2, 2, -1, 0, 2, 1, -3, + -5, -2, -1, -6, -2, 6, 5, -1, 1, 8, 1, 3, -1, 2, 3, 2, -3, 1, 0, -7, -4, 1, 2, 2, 2, 1, 0, 3, -5, 5, + 7, 8, 3, -3, 6, 4, -7, -11, 3, -5, -3, 9, 2, 2, 5, -4, 1, 7, -3, -5, -4, 1, 0, -1, 7, -5, 1, -8, -3, 3, + -4, -2, 0, 0, -6, 7, 8, 3, 0, 7, 6, -6, 4, -6, 6, 2, 0, 9, 9, 0, 0, 2, 0, -6, -8, 1, 8, -4, -2, 5, + -1, 1, 4, -3, 5, 8, 4, -1, -4, -5, 2, 0, 1, -5, -6, -4, 0, 2, 2, 1, 1, 2, 2, 4, 4, 0, 3, -1, 0, 4, + 4, 0, 1, -2, -4, -2, -1, 1, 1, -1, 3, 7, 1, 0, -4, -2, -1, -3, 3, -2, -7, -1, 1, 2, 0, 0, 5, 7, 1, 2, + 1, 3, 4, -1, 3, 3, 6, -1, -1, -2, -7, 2, -1, -1, 1, -4, -4, 0, 1, -1, -5, -2, 1, 1, 3, 0, 0, -2, 5, 5, + 2, 4, -1, -4, -6, -11, 1, -1, -2, -1, 3, 3, -3, -4, -6, 2, 5, 0, 9, 6, 0, -1, 6, 2, 4, 1, 0, -1, 4, -5, + -5, -6, 3, -2, -6, -3, -2, 1, 1, 2, -2, -4, 0, 1, 0, -6, -5, 2, 7, -2, 2, 4, -3, 6, 5, -9, -9, 3, 0, -10, + -2, -6, -2, 1, 11, 6, 2, 1, 4, 3, 7, 6, 1, 4, -13, -5, 5, -1, -4, -4, 2, -1, -7, 5, -1, -2, -4, 5, -12, 0, + -7, -5, 6, 0, 4, 2, 7, 2, 0, -5, -3, -6, 2, 2, 9, -4, -6, 1, 5, 5, -1, 4, 5, 3, 8, 6, -6, -2, -4, -1, + 12, 13, 5, -13, -10, -11, -4, -4, 2, -3, 4, -4, -4, -15, -11, -1, 1, -9, -4, 1, 6, 5, -6, -5, 5, -4, -5, -3, 11, 9, + -3, -8, 3, 8, -1, 2, 5, 2, -7, -7, -2, -9, 1, 1, -1, 7, 14, 7, 1, 1, -12, 1, -3, 2, 8, -1, -7, 5, -2, -7, + -7, 1, -14, -14, -6, -8, -4, 2, -11, -8, -2, -1, 3, -1, 1, -3, 6, -5, 6, 6, 7, 6, 10, 4, -2, 6, 1, 7, 7, 9, + 14, -3, 1, 7, 4, -1, 2, -10, -15, 1, -2, 1, 1, -4, -6, 0, 0, -2, -6, -8, -4, -1, -1, 3, 5, -1, 4, -3, 3, -1, + -5, -1, -3, -5, 1, 4, 0, 2, 3, 3, 4, 0, 1, 1, 0, -1, 5, 5, 0, 4, 0, 4, 1, 2, -5, -10, -7, -6, -7, -3, + -3, -3, 1, 6, 6, 6, -1, -4, -11, -4, -4, -2, -2, -7, -9, -7, 0, 1, 2, -2, 0, -2, 0, 1, 3, -4, -4, -2, 5, 6, + 6, -1, -1, 4, -5, 4, 6, 2, 0, -4, -11, -11, -5, -5, -5, -8, 8, 3, 2, 2, 3, 6, 0, 7, 4, 2, -1, -2, -2, 4, + 6, -4, -4, -2, 6, 1, -6, 3, -2, 10, -2, 4, 1, 5, 8, -5, 0, -16, 4, 2, -16, -15, 0, 19, 2, -7, -6, 3, 10, 2, + -19, 1, 10, -6, -1, -7, -8, -16, -2, 9, 7, -1, 1, -2, -3, -6, 1, 4, -8, -7, 1, 3, 2, 7, 5, 1, 15, -1, -1, -6, + -1, -5, -1, -1, -8, 4, 10, 3, 4, 4, 5, 6, 4, -2, -4, 0, -2, 2, 6, 0, -7, -2, -2, -8, -7, 0, -11, -5, 2, 1, + 13, 3, -1, 0, -7, -7, -11, -13, -9, -1, 1, -5, -8, -9, -8, -4, -7, -8, -7, -9, -7, -11, -11, -15, -5, -5, -4, 3, -4, -6, + -3, 4, 7, -1, 3, 5, 8, 13, 0, 5, 9, 0, -5, -6, -4, 3, -2, 2, -1, 4, 2, 7, 3, 6, 4, 2, -2, 2, 12, 3, + -3, -9, -3, -2, -8, -22, -24, -19, -26, -11, -15, -18, -10, 1, -2, 5, 4, 5, -1, 3, 6, 6, 17, 18, 13, 15, 19, 11, 7, 8, + 14, 15, 7, -2, 5, 3, 14, 0, -1, 4, 7, 7, -5, -2, -3, -1, -2, 0, -6, -3, -12, -6, 0, 5, -1, 3, -1, -2, 1, 3, + 3, -1, -5, 0, -2, 1, 3, 3, 6, 1, 1, 7, 4, 2, 1, -3, 0, 0, -5, -6, -2, -1, -7, -5, -4, 2, 0, -1, -4, -3, + 0, 2, 10, 3, -6, -1, -2, -6, -4, -1, 0, -6, -2, -2, -2, -5, -4, -9, -7, -9, 0, 6, 6, 1, 6, 6, 1, -2, 6, 5, + 1, 0, 1, -5, 1, -1, -4, -8, 4, 0, 7, -3, 3, 6, -4, 1, 0, -3, -2, -4, -3, -1, 2, -3, 0, -5, 1, -4, 1, 1, + 1, 4, 4, -2, -6, 3, 8, -2, -1, 5, 0, 4, 3, 7, 4, -2, -4, -4, 1, -7, 0, 3, -17, 25, 6, -31, -25, 11, 36, -16, + -18, -14, 4, 2, 3, -11, 10, 4, -3, 2, -9, -6, -1, -4, 1, 10, 8, -5, 4, 2, -5, -4, 5, -4, 0, 7, -1, -4, 2, 6, + 1, 7, 0, 3, 3, 2, -2, 0, 0, 0, -5, 0, 3, 1, 13, 4, 0, 2, 0, -8, 0, -4, -6, -3, -4, 1, 7, -4, -4, -6, + -4, 0, 3, 2, 5, 12, 9, -1, 18, 0, -6, -3, 4, -16, -15, -8, -15, -18, -7, -5, -8, -8, -9, -8, -14, -13, 1, 2, 8, 19, + 33, 30, 33, 15, 9, 2, -3, 2, 7, 3, 2, 5, 7, -4, -5, -2, -10, -6, -12, -6, 2, -5, -9, 5, 14, 4, 3, 16, -1, -15, + -9, -9, -9, -1, -3, -5, -3, -16, -9, -27, -38, -26, -28, -11, -2, 18, 14, 10, 6, 2, 7, -4, -4, 3, 5, 5, 6, 13, 7, 1, + 8, 8, 0, 6, 5, 11, 18, 8, 5, 10, 15, 12, 18, 14, 16, 10, 6, -14, 9, 16, 21, 2, -10, 10, -28, 4, 2, 4, 4, 3, + 1, -4, -4, -7, -3, -4, -5, -10, -4, -1, -2, 0, 1, 1, -4, -5, -3, -6, -5, -3, -7, -3, -4, -4, -6, 1, 4, 3, 2, 5, + 11, 5, 2, 4, 4, 5, 3, -3, -3, 3, 7, 4, 0, 8, 8, 5, 9, 11, 8, 6, 7, 7, 9, 11, 11, 12, 12, 11, 4, -1, + 4, 5, -1, -4, -2, -8, -16, -19, -20, -20, -23, -13, -1, 13, 20, 32, 24, 35, 26, 21, 10, 3, 4, 1, 9, 7, 17, 21, 9, 3, + -4, -15, -30, -27, -33, -32, -21, -8, -2, 6, 14, 17, 22, 28, 20, 19, 14, 7, -3, 2, -8, -25, -56, -84, -111, 1, 36, -122, 21, 104, + -29, -55, -32, 127, -19, -50, -45, 54, 19, -19, -35, 49, 16, -25, -9, 23, 13, -18, -4, 5, -1, -10, 7, 11, -1, -2, 11, 0, -11, 6, + 3, 5, -11, -3, 11, -3, 1, 1, 12, 3, 2, 2, 5, 2, -3, 1, -1, 1, 6, 3, 8, 11, 2, 0, -4, -4, -10, 3, 11, -3, + 0, 2, 3, 1, 5, 3, 0, 0, 1, 3, 2, 0, -5, -1, 0, -1, 0, 0, -4, -5, -4, 4, 1, -4, -2, 1, 3, 7, -2, -1, + 4, 4, -4, -2, 1, 5, 0, -2, -2, -1, 0, 3, 1, 4, 0, -1, 1, 9, 7, 8, 5, 2, 2, 7, 0, 4, 2, -1, 2, 5, + -5, 2, 4, 2, 2, 5, 4, 9, 2, 4, 3, 4, -3, -9, -4, -4, 1, -3, -3, 5, 4, 6, -3, 1, -4, -2, 2, 1, -6, -11, + -1, -1, 1, -1, -2, -1, -4, -7, 3, -1, 8, -4, 1, -1, -4, -6, 2, 2, -2, 3, -5, -1, 4, -3, 5, -9, -1, -1, -1, 9, + 1, -1, 0, 3, -2, 0, -3, -3, 0, 1, -3, 0, -3, 1, 2, 5, 3, 4, 2, 5, 1, 2, -3, 0, 0, 2, 1, 0, -2, -4, + 0, -3, -6, -3, 2, 2, 0, 2, -1, 1, 0, 0, 1, 2, 2, 5, 4, 2, 2, 4, -1, -3, -8, -7, -6, -1, -2, 0, 4, -1, + 0, 1, 2, 3, 0, -1, 2, 4, 3, 6, 5, 2, 1, 2, -1, 1, -1, -3, -3, 4, -1, 2, 2, 3, -5, -2, 0, 1, 3, -4, + -2, 3, -1, 0, -3, 0, 1, -2, -3, 2, 3, -1, 0, -3, 0, -3, -1, 2, -3, 5, -2, 4, 5, 2, -3, -1, 4, -1, -8, -12, + 0, 52, 26, -10, 13, 28, 12, 6, 6, -5, -6, -6, -6, -3, -2, 3, -5, -8, -1, -7, -9, -5, 5, 8, -1, -3, 0, 5, -7, -3, + -1, 2, -6, -6, -2, -8, -8, 4, 2, 8, 6, 1, 6, 1, -9, -5, -5, -7, -5, 2, -9, -11, -8, -2, 0, 4, 6, 2, 11, 3, + 2, 2, 2, -8, 38, 1, -3, 0, 4, 7, -2, -9, -1, 1, 3, 3, 4, 0, -1, 0, -3, 4, 6, 3, 1, -3, -6, -3, -2, 2, + -3, 0, 2, -5, 1, 1, 6, -3, 0, -1, -1, -3, -3, -2, -1, -2, 1, -2, -4, -9, -1, 1, 3, 4, 8, 4, -2, 6, 12, 4, + 5, 3, -1, 7, 1, -5, 0, 2, 0, 2, -2, -9, 2, 0, 7, 6, 1, 1, 1, -4, -3, 5, -7, -8, 1, 1, 0, -1, 4, 4, + 3, 5, 4, 7, -5, -1, 0, -3, -7, -3, -3, -9, -3, 4, 0, 9, 2, 0, 4, -8, -1, 2, 1, -2, 3, -11, 0, 0, -3, 4, + -4, 2, -6, 4, 9, 5, 3, 3, 0, 0, 1, -1, -1, -4, -2, -4, 4, 2, 3, 4, -1, 4, 3, 3, 1, -4, -1, -1, 0, -2, + 1, 1, 5, 1, 0, 5, 3, 4, 4, 3, 2, 0, 2, -1, 0, -5, -1, -1, -2, -4, 0, -2, -6, -1, 5, 0, 2, -3, -7, -1, + 3, 4, 1, 0, -2, -8, 0, 3, 3, 5, 4, 2, 4, 5, 4, 2, 3, 5, -1, -1, 4, -1, 3, 1, -4, -1, -4, -5, -10, -8, + -7, -7, 1, -3, -5, -6, -5, -8, -7, -8, -9, -12, -9, 0, 7, 0, -3, 0, 3, -2, 4, 6, 7, 6, 5, -1, 3, 2, 0, -1, + 1, 4, 0, -1, -11, -6, 35, 12, -1, 14, 15, 17, 8, -4, 3, -2, -3, 12, 7, -2, 5, 5, -9, -6, -1, -4, -2, -3, 4, -2, + -3, -3, 5, -2, 1, -4, 0, 3, -10, 4, 5, -3, -2, -2, 9, 9, 5, 4, 8, -2, 0, -9, -8, 0, 4, 1, -1, -6, 4, -1, + 0, 2, 7, 4, 4, 4, -3, 5, 0, 25, -4, -2, -3, -4, -3, -5, -2, -4, 0, 2, -2, -1, 0, 4, 3, 2, -2, 0, 0, 0, + 6, 2, 4, -1, 0, -1, 2, 4, 7, 1, -3, -5, -3, -2, 0, 6, 5, -3, -3, -2, 0, -1, -2, 0, 6, 4, 5, 3, 5, -1, + 2, -1, 3, 3, 1, 2, -1, 1, 3, -2, 4, -1, 2, 7, 2, 2, -1, -5, -3, 1, 0, 1, -4, 0, 1, -4, 0, 0, 2, 0, + 10, 1, -3, 3, -5, -3, -4, 0, -3, -1, -6, -4, -3, -2, -4, 4, -5, -8, 3, 5, 1, 2, 10, 2, 3, 1, 3, -4, 3, 0, + -4, -4, 3, 5, 2, 2, 8, 12, 4, 6, -1, -2, 0, 2, 1, -2, -3, -1, -2, 2, 0, -3, 0, 1, 3, 2, -1, -7, -8, -6, + -1, -5, -3, -3, -4, -3, 1, 2, 1, 0, -1, -3, 0, 0, 0, -1, 0, -4, -2, -1, 0, -1, -3, -2, 0, 2, 1, -2, 3, 3, + 0, -3, -1, 1, 2, 3, 8, 1, 3, -1, -1, 1, 4, 5, 7, 1, 2, -3, 0, -3, -7, -6, -7, -10, -7, -11, -12, -10, -4, -5, + 3, 2, 0, 1, -1, 3, -2, 2, 0, 5, -3, -2, -6, -7, -1, -7, -5, -6, -6, -2, 4, -1, -1, 4, 4, 6, 1, -1, 4, 1, + 3, 2, -2, 0, -3, -7, -2, 2, 0, -12, 7, 28, 7, -5, 11, 8, 16, 4, -6, -9, 1, -4, 0, -6, -9, 3, 4, -9, 2, 0, + 3, 2, 6, 16, 3, -14, 5, 2, -2, 4, 0, -1, 4, -7, -2, -2, 0, -9, 7, -2, 3, -7, -4, -2, -6, -2, -12, -8, 4, -1, + -1, -12, -8, -2, 1, -4, 0, 2, 4, 3, 6, -2, 0, -1, -2, -3, 0, 0, -4, -1, 0, -4, -2, -3, 4, -3, -5, -4, -7, 0, + 4, -1, 0, -8, -2, 0, 5, -1, -2, -1, 1, -2, -2, -3, -1, -1, 1, 2, 4, 6, 4, -4, -6, 1, 1, -4, -1, 3, 2, -3, + -5, -2, 7, 2, 0, 1, 2, -2, 2, 6, 5, 5, 3, -1, 7, 11, 11, 11, 7, 1, 6, 6, 6, -5, 1, 2, 4, 1, -1, -1, + -7, 4, 6, 1, 4, -3, 4, -5, -3, -3, 0, 1, 5, 2, -1, -2, 1, -12, -4, -3, 2, -6, -5, -6, 4, -3, -9, -7, -6, 0, + -3, 6, 3, 4, 0, -1, 6, 2, 6, 8, -4, 2, 1, -8, 9, -1, 2, 3, 2, 0, -2, -1, 1, -2, 0, 0, -2, -6, 0, 4, + 6, 2, -2, -1, -2, -3, -3, -3, 0, 1, 6, 2, 1, 6, 3, -1, -1, 0, -1, 0, 5, 1, -1, -1, 1, 1, 3, 3, 2, 1, + -2, 1, 2, 0, 1, 1, 2, 2, 2, 3, 8, 5, 4, 5, 0, 0, 0, 3, -1, -1, 3, 1, 3, -1, -2, -3, -6, -4, -8, -6, + -6, -3, 0, 1, 1, 5, 5, 5, -1, -1, 1, -2, -3, -1, -8, -6, -4, -5, -4, -8, -6, -5, -5, 0, 5, 1, 1, 1, 0, -1, + -6, -6, -3, -1, 1, 3, -3, -1, 3, 2, -1, -2, 0, 3, -4, 22, 29, 3, 3, 17, 14, 11, -5, -11, -7, -4, -4, -6, -10, -6, + 3, 1, 1, -4, -6, -6, 1, 7, 11, -3, -2, 4, -2, 1, 2, -5, 2, -2, -1, -2, 6, 6, 5, 2, 3, 1, -3, -2, 4, 3, + -2, -1, -3, 8, 2, -1, -2, -5, -4, 3, -2, -3, 5, 11, 12, 2, 3, 1, 2, -18, 2, 1, -1, 0, 5, 12, 17, 11, 5, 2, + -1, 4, 3, -5, -7, -1, 0, 4, 0, 3, -1, 1, -3, -3, -2, -1, -2, -3, -2, -3, -3, 0, -4, -2, -2, -3, -7, -6, -4, -5, + -7, -5, -2, 3, -2, -9, -1, -4, -3, -9, 0, 0, 3, -1, -2, -6, -8, -1, -6, -7, -4, 3, -1, 0, 3, -3, 6, 5, 5, 3, + 11, 12, 8, 5, 9, 9, 12, 11, 10, 7, 3, -3, -3, -2, -3, -5, -9, -2, -5, -9, -19, -11, -10, -13, -13, -11, -13, -8, -3, -4, + -4, -11, -8, -9, -10, -10, -2, -15, -5, 0, 0, -2, 1, 6, 4, 5, 4, 12, 4, 15, 2, 6, 5, 7, 6, 2, 1, -1, 1, 2, + 2, -1, 1, -1, 4, 5, -1, -1, 2, 1, 4, -2, 0, 1, 3, 3, 2, 5, 5, 3, 1, 6, -3, -1, 3, 3, -2, -6, -5, -3, + -3, 4, 6, 2, -1, -1, -5, -5, -5, -5, -2, 3, 3, -2, 0, 0, 0, -1, 0, 3, 7, 9, 9, 4, 3, -1, 2, -4, -7, -7, + -5, -6, -6, -1, 2, -1, 2, 1, 4, 0, 4, -3, -1, 0, 1, -3, -4, -1, -1, -1, -3, -5, -1, -1, 2, 3, 1, 0, 3, 3, + -3, -2, 5, 1, 1, 2, -5, -2, -4, -1, -2, 1, 4, 0, 1, 6, 10, 4, 5, 9, 26, 30, -5, 12, 13, 13, 5, -12, -22, -21, + -10, -2, 1, -9, 0, 3, 3, -2, 11, -5, -5, -3, 12, -5, -2, -7, 3, -1, -5, -1, -11, -2, -1, -3, -5, -5, 0, 1, -1, 3, + 2, 8, 6, -1, 1, -3, -1, -1, -3, -2, -7, -8, -5, 4, -6, 2, 5, 6, 5, 7, 3, -1, -4, 1, -46, 17, 14, 8, 8, 10, + 8, 12, 16, 2, 7, 3, -1, 0, 3, -8, -12, -9, -1, -5, 1, -4, -4, -6, -11, -14, -14, -13, -17, -10, -11, -5, -12, -17, -15, -15, + -6, -14, -15, -9, -8, -6, -7, -7, -4, -4, -9, -5, -1, -6, -8, -12, -5, -3, -18, -21, -18, -13, -14, 1, 1, -7, -3, 4, -6, 0, + 2, -3, -5, -7, -15, -8, 0, 0, 2, 0, 8, 5, 1, 8, 6, 12, 16, 0, 2, -2, -4, -5, -3, -9, -6, -9, 0, -6, 0, 2, + 8, 3, -6, 2, -3, 3, 5, 0, 2, -3, -5, -10, -9, -10, 5, -4, -12, 9, 17, 8, 19, 7, 11, 8, 10, 10, 11, 7, 1, 3, + 3, -1, 0, 3, 6, 5, -2, -5, -4, -2, -3, -3, -1, 0, 3, 5, 3, -4, -3, 0, -1, -1, -1, 1, 0, 0, 1, 2, 0, 1, + 5, -4, -3, -4, -1, 2, 1, 3, 1, 0, 1, -5, -7, -6, -6, -5, -1, 0, 1, -1, -4, 2, -1, 3, 8, 7, 10, 4, 4, 0, + -3, 3, 4, -1, -6, -3, 1, 4, 4, 6, 3, 6, 7, 9, 9, 12, 7, -2, 1, 0, 1, -1, -5, -7, -9, -7, -6, -4, -8, 0, + 6, 4, 4, 4, 2, 1, -1, -4, -5, -6, 0, -2, -1, 1, -2, 2, -2, 0, 2, 1, 3, 5, 0, -3, -19, 37, 127, 105, 24, 22, + 39, 23, -20, -27, -42, -15, -1, -4, -15, -4, -8, -10, -3, 5, -7, -10, 1, 5, 0, -8, 1, 3, -3, -8, -6, -5, -4, -7, -6, -6, + 4, 8, 9, 0, 5, 6, 5, 8, 3, -1, -7, -8, -8, 0, 1, -11, -4, -11, 0, 6, 6, 11, 14, 16, 15, 6, 1, 1, 0, -29, + 4, 10, -10, 2, 9, 1, 7, 11, 5, 7, 12, 6, 1, 2, 3, 4, 10, 7, 2, 13, 14, 8, 5, -7, -11, -17, -3, 2, -19, -10, + -4, -5, -3, 0, -17, -13, 4, 12, -1, 9, 5, -6, -3, -7, -5, -4, 6, -17, -4, -4, 7, 9, 11, -7, 0, -6, 1, -6, -6, -2, + 0, 4, -2, -7, 5, 13, 21, 17, -4, 5, 7, 13, 4, 8, 9, 23, 14, 13, 26, 19, 21, 18, 22, 22, 19, 35, -5, 5, 5, 15, + 0, -4, -19, -48, -21, -25, -32, -35, -30, -8, -26, -22, -19, -25, -30, -16, -7, -13, 7, 0, 11, 16, 13, -1, 0, -3, -7, -9, 3, 1, + 8, 5, 0, 1, 2, -7, 2, -9, -7, -9, -7, -4, -7, -7, 6, 0, 3, -6, -1, -3, 5, 7, 0, -6, -5, 2, 2, 6, 0, 1, + 8, -4, -11, -13, -7, 1, 6, 10, 2, -4, 3, 5, 4, 10, 5, 9, 9, 9, 5, 10, 20, 7, 3, -4, -6, -8, -3, 2, -2, -16, + 0, -4, -5, 5, -2, 0, -12, -4, -5, -6, -1, 10, 11, 13, 3, -7, -5, -2, 2, 4, 15, 11, 15, 23, 6, 10, 12, 16, 7, 21, + 20, 5, -2, -20, 0, -3, -12, -2, -4, -14, -3, -16, -11, -1, -3, 10, -12, -12, -10, 10, 20, 12, 6, 9, 5, -2, -4, -8, -3, -13, + 7, 41, -20, 3, 23, 25, 9, 8, -1, -5, 13, 17, 14, 30, 10, -16, 22, 0, -12, 4, 3, -2, -6, 4, 4, 3, -11, 3, -2, 8, + 13, 2, 1, 11, 12, -18, -22, 2, -7, 2, -8, 5, 1, -12, -6, 10, 22, 16, 12, -1, 13, 12, 22, 5, 6, 18, 2, 3, 4, 12, + -1, 7, 6, 3, 25, 20, 22, 20, 14, -2, -8, -6, -1, 0, 15, 26, 20, 6, 11, 2, 16, 21, 9, 15, 18, 9, 3, 9, 7, -3, + -6, -15, -10, -10, -11, -2, 5, -6, -6, -9, -3, 0, -2, -7, 5, 4, -8, -16, -7, -10, -3, 1, 2, 7, -2, -18, -11, -5, 0, 0, + 9, 14, 0, 4, -5, 5, 11, -1, -4, 13, 4, -8, -4, -1, -9, -10, 10, 8, 21, 1, 0, 16, -11, 8, 10, 11, 6, 6, 6, 8, + 9, -7, -5, -2, 2, 8, 23, -2, -3, -14, -12, -35, -18, -3, -11, -1, 21, -7, -16, -17, -20, -31, -12, -11, -7, -3, -10, -14, -12, 2, + -16, -12, -10, 7, 10, 6, -2, 0, -1, -4, -1, -14, -9, -17, -17, -10, -8, 5, 8, 6, 2, -4, 9, -2, -9, -7, -2, 14, 5, 8, + 1, 1, 4, -5, -11, -9, -2, -5, 1, -1, 1, 1, 2, -3, 4, -7, -11, -13, -7, -7, -9, -12, -4, -13, -12, -1, -9, 3, -3, -10, + -11, 6, 1, -5, -8, -8, -3, -4, 1, 1, -1, 6, -2, 6, -7, -26, -6, 7, 19, 3, 14, 9, 17, 8, 2, 1, -1, 6, -9, -20, + -16, -13, -9, -13, -13, 5, -2, 7, 17, 7, -4, -10, -18, -4, 14, 1, 5, 6, -7, 5, 11, -10, 10, -2, -1, -9, 0, 5, 28, 7, + 4, 19, 4, 25, 20, -36, -5, -4, -6, -9, -16, 0, -3, -5, -21, -1, 8, -9, 22, 5, -3, 2, -3, -2, 5, -6, -24, -9, 8, 16, + -4, 4, -12, -7, 7, 18, -14, -1, 8, -4, -18, 5, 8, 8, 5, -5, 8, -7, 8, -1, -14, 5, 10, 3, -9, 6, 9, -8, 4, 7, + 19, -7, -2, -10, 4, -5, -8, -9, -21, 24, 11, 3, -3, -4, 11, 12, 5, -17, -19, -21, -3, -1, 0, 6, -5, -3, -6, -5, 10, 0, + 6, -8, -10, 6, 1, -3, -15, -20, -1, 2, -16, -1, -5, 1, -1, -4, -6, 2, -5, -11, 5, -1, 2, -17, -1, 10, 6, 2, 0, 9, + 15, -1, -4, -4, 2, 17, -6, 2, -4, -17, 2, 8, 10, 3, -1, 11, 19, 5, 5, 11, -9, 3, 0, 8, 16, -3, 12, 7, 0, 10, + 5, 4, 19, 13, 4, 10, 7, 16, 14, 1, 15, 7, 17, 4, 2, 1, -12, -1, -22, 2, -8, -12, -18, -15, -19, -21, -41, -21, -8, -12, + -6, 7, 15, 15, 9, -8, -6, -25, 4, 0, -3, 0, -6, -12, -1, -4, -9, -5, -13, -11, -15, -3, 3, -3, -2, 0, -3, -5, 1, -2, + 1, 11, 6, 13, 6, 11, 3, 8, 2, 6, 9, -1, -2, 3, 8, 8, -9, -2, 2, 1, -5, -6, -12, -12, -4, 6, 4, 0, -4, -7, + -6, 0, 3, 6, 1, -3, 2, -9, -5, -13, -5, 5, 1, -3, 0, -14, 4, 3, 4, -4, -3, 16, 15, 5, 8, -16, -11, -11, -2, -5, + -8, -4, 10, 4, 0, -1, -2, 10, 4, -4, -9, 3, -5, -3, -8, -7, -20, -15, -12, -9, -5, 11, 1, -9, -4, 3, -9, -4, 3, -14, + 12, -7, -5, 23, 14, 12, 6, 1, -9, -7, -26, -1, 15, 1, 2, 29, -2, 15, -17, -4, 9, -5, 5, 20, -11, -3, 10, -9, -5, -5, + 7, 3, -5, 12, 31, -1, 18, 18, 8, 19, 17, -5, -6, -7, -1, -4, 16, -5, 3, 16, 20, 8, 9, 3, 8, 16, 18, -10, 3, -3, + -2, 2, -5, 14, 3, 14, 2, 5, 4, -11, -9, -15, -26, -22, 23, 11, 16, 17, 25, 7, 1, -8, -11, -22, -9, 0, -2, 2, -9, 8, + -3, 3, -1, -3, -1, 4, -2, 10, 10, -3, -8, -17, -11, 8, 16, 22, 13, 1, 5, 10, 8, 9, 15, 15, 12, 9, 7, 13, -5, -10, + 7, 14, 4, 12, 15, 21, 14, 5, -7, -2, 7, 16, 2, 10, 27, 17, -2, 15, -9, -3, 9, -2, -5, -4, -22, -7, -3, -14, -10, -5, + -11, -33, -29, -6, -10, -1, -6, 2, -3, 16, 10, 19, 19, 17, 2, 32, 14, 15, 10, 6, -5, -4, -10, 5, -19, -9, -11, -12, 7, -5, + -14, -2, -7, -5, 0, -22, -17, -9, -14, -4, -13, -16, -13, -12, -3, -5, -1, 10, 13, 14, 15, 2, 7, -5, -13, -9, -5, 1, 3, 2, + -7, -1, -5, -6, 9, 14, 15, 7, 13, 20, 21, 2, 1, 5, 16, 9, 17, 9, -1, 6, -4, -4, 1, 0, 5, 3, -4, -1, -2, -8, + -2, -7, -8, 0, 0, 10, 3, 1, -9, -10, -2, -11, -12, -4, 8, 12, 10, 3, 6, 9, 16, 12, 0, -8, 2, 5, 20, 14, 21, 18, + 18, -2, 11, -1, -12, 4, -6, -14, -26, 4, 17, 15, 18, 13, 6, 5, -5, 15, 22, 11, -4, -10, -10, -8, -20, 4, 4, 6, 13, 1, + 5, -15, -25, -25, -22, -8, -21, -4, -3, -18, -17, -21, -17, -1, -19, -38, 14, -6, 18, 22, 30, 12, -5, -13, 6, 10, 21, -5, 11, 6, + 0, 12, 13, -4, -4, -10, -7, 5, -4, 1, 1, 9, 4, 5, 13, 14, -6, -10, 1, -16, 3, -13, -17, -8, -6, -14, -14, 1, -2, -1, + 8, -2, -7, -9, -22, 11, -11, -16, -18, -4, -11, -14, -26, -16, -21, -16, -33, -25, -25, 17, 3, 17, 12, 0, 1, -14, -11, 1, -9, -36, + -38, -34, -12, -9, 13, 23, 8, 11, 5, 14, -10, -12, -3, -7, -20, -29, -39, -41, -10, 22, 23, 7, 2, 1, -16, -35, -18, -13, -12, -11, + -12, 4, 11, 19, 6, 8, 3, -9, -15, 15, 18, 15, 23, 32, 15, 6, 24, 26, 17, 18, 41, 43, 31, 26, 20, -12, -35, -31, -32, -61, + -54, -52, -42, -33, -25, -11, -24, -2, -14, -40, -69, -92, -76, -99, -76, -41, -20, -17, 7, 27, 6, 19, 13, -2, -3, 12, 4, -16, 4, -5, + -1, 19, 13, 2, -1, 19, 14, 5, 8, 0, -11, -14, -11, -1, -18, -12, -8, 11, 7, -7, -10, -1, 16, 23, 20, 9, -3, -6, 1, -11, + -4, -11, 1, -8, -8, -7, -7, -3, -13, -3, -7, 5, 15, 12, 12, 6, -6, -4, -3, 12, 19, 26, 12, -1, -8, -5, 2, 1, 18, 3, + -11, -13, -4, -8, -2, -4, -4, -9, -7, 1, -7, 2, 0, -8, 5, 7, 2, 8, 22, 17, 11, -5, -26, -23, -33, -47, -67, -65, -63, -69, + -63, -59, -45, -46, -30, -33, -48, -43, -55, -66, -95, -94, -110, -102, -82, -59, -38, -23, 14, 19, 17, 14, -1, -24, -42, -27, -40, -59, -70, -51, + -32, -22, -20, -11, -30, -30, -60, -52, -55, -69, -46, -57, -61, -41, -36, -31, -45, -33, -34, -30, -57, 34, -52, 61, 9, -1, -6, -16, -22, -37, + -65, 14, -6, 9, -3, -8, -7, -11, -27, -12, 7, 1, -1, 0, -18, -10, 3, 3, 8, 10, -8, -3, -15, -6, -17, -26, -36, -18, -17, -8, + -13, 3, 1, -32, -12, -11, -8, -16, -20, -12, -27, -25, -29, -27, 6, -7, -17, -30, -13, -30, -10, -23, -23, -19, 3, -9, -10, -15, 7, -7, + 3, 0, 9, -1, -1, -7, -26, -12, -37, -11, -15, -33, -22, -12, -2, 11, 10, 12, -4, -11, -8, -16, -15, -25, -39, -42, -22, -3, 7, 5, + 4, 3, -8, -10, -15, -3, -11, -28, -39, -37, -39, -28, -29, -10, -2, 9, 3, -5, 1, 14, 1, -24, -22, -36, -27, -17, -28, -30, -2, -4, + 23, 19, 22, 13, 15, 18, -7, 7, 14, -6, 6, 23, 33, 56, 58, 45, 37, 8, 0, 12, 7, 28, 19, -8, 6, 11, 12, -8, 13, 17, + 4, 4, 4, 3, 11, 20, 2, 6, -19, -13, 9, -15, -3, 3, -1, 11, 3, 24, 4, 17, 35, 13, 12, 32, 41, -29, -21, -16, -2, 3, + -8, -16, -11, -14, -5, -10, -16, -14, -8, -8, -7, -12, -12, -14, -11, -5, 2, -3, -1, -10, -1, -13, -18, -8, -7, -17, -18, -7, 2, -2, + -2, -12, -6, 6, -5, -5, -10, -17, -18, -30, -7, -5, 0, -3, -9, -20, -12, -12, -10, -15, -13, -16, -19, -22, -7, 0, -7, -8, -2, -6, + -11, -17, -28, -30, -15, -15, -14, -11, -7, 11, 14, 20, 26, 38, 41, 26, 19, 0, -10, -18, -18, -11, -20, -16, -5, 14, 0, 5, 6, 0, + -8, -13, -26, -17, -27, -11, -11, -16, -4, -3, 12, 1, 11, 18, 17, 25, 3, -2, -10, -11, -10, -17, -15, -21, -36, 39, 71, -127, 11, -48, + -22, 14, -24, -36, -35, -44, -5, 9, 23, 15, 2, 45, 30, 5, 9, 24, 34, 0, 23, 11, 8, 3, 29, 37, 45, 37, 34, 33, 17, 15, + -9, -6, -7, -6, 17, 6, 18, 6, 32, 16, 10, 21, 3, 28, 27, 11, 11, 20, 13, 25, 24, 24, 22, 27, 19, 9, 6, 15, 35, -57, + -5, -6, -4, -2, 0, 0, -1, 3, 3, 0, -4, -3, -4, -4, 2, -1, 1, 4, 5, -2, 5, -3, -2, -1, -3, 0, 1, 6, -3, -3, + 3, -7, -9, -8, 3, 2, 1, -6, -4, 1, 1, 0, 0, 5, -3, -3, -4, 1, -1, 0, -1, 0, 6, 5, 0, -2, -5, -2, 0, 9, + 3, 2, 9, 2, -5, 0, 2, 0, 0, 2, 3, 4, 0, -2, 3, 5, 3, 5, 8, 10, 3, 5, -7, -7, 0, 0, 7, 0, 9, 2, + 10, -2, 3, -2, 3, 2, -4, 0, -6, 6, -3, -7, 4, 4, 11, -4, -1, -2, -9, 6, -4, 0, -2, -5, -5, -1, -3, -1, -6, 2, + -5, -4, -2, -4, -3, 2, 0, 4, -1, 0, 1, 3, 3, 3, 0, -4, 0, -4, -1, -1, 0, 3, 5, 3, 4, 5, -1, 4, 3, 5, + -4, -6, -2, -1, 0, 0, 3, 6, 1, 1, -1, 1, 0, 0, -2, -3, -6, 0, -2, -4, -7, -3, 2, -4, 3, 5, -2, 3, 0, 7, + 6, 1, 5, 0, -7, 0, -2, 5, 1, 2, 2, 4, 4, -4, -4, -2, -5, 1, -6, 3, 4, 5, 8, 0, -4, 1, 0, 3, 6, 0, + 0, -2, 6, 4, 5, 4, -4, 0, -6, -8, -4, -1, -4, -4, 3, 1, 0, -1, -6, 2, 7, -1, -2, -2, 1, 6, 0, -1, 4, -6, + -9, -4, 9, 7, 10, 3, -8, 2, 10, 4, 14, -1, -7, 2, -12, -11, 4, -3, 9, 12, 14, -4, -10, -1, 1, -5, -3, -2, -8, 2, + -2, -5, -1, 2, 3, 7, -4, 0, -3, -11, 1, 5, 0, -7, -4, -1, 2, -2, -1, 5, 1, 2, 1, 3, 5, 1, 2, 5, 4, 6, + -1, -2, 0, 6, 2, -3, 4, 4, -3, -1, 7, 4, 0, 1, 5, -1, 1, 1, 8, 4, 0, -6, 6, 1, 0, 0, 3, 4, 3, 2, + -3, -7, -9, -4, 0, -5, -4, -9, -5, -7, -6, -8, -9, 1, 2, -2, -5, 1, 1, -3, -6, 0, 3, 0, -4, -2, -4, -4, -2, 0, + -3, -4, 3, 2, 3, -4, -2, 7, 5, 5, 7, 1, -2, 1, 4, -1, 0, -5, 0, 5, 2, 2, 9, 4, 8, -2, 5, -1, -2, 1, + -1, -1, -3, -3, 1, 2, 0, -6, -3, 2, 1, 4, 7, -11, 1, -5, -7, -4, 5, 7, -2, 0, -4, -3, 1, -5, 1, -1, 0, 5, + -2, 1, -3, -4, -6, -4, -3, -5, -9, -3, -7, -3, 2, 5, 1, 3, 3, -2, -3, -5, -5, 1, -1, 2, 2, 3, 4, 5, 0, 0, + 3, 2, -1, -1, -3, -5, -4, -4, -2, -2, 4, -2, 4, 4, 8, 1, 4, 7, 0, 2, -3, -3, 3, 4, -2, -4, 0, 4, -3, 2, + -2, 3, -5, -5, -1, -7, -5, 0, 0, -6, -4, -6, 0, 4, 4, 6, -4, -4, -5, -2, -3, 3, 8, 5, 3, 4, 1, 0, 4, 1, + 7, 3, 5, 3, 5, 2, 2, -2, -3, 0, -2, -2, -1, -3, -4, -2, 4, -3, 2, -1, -2, 8, -1, 0, -4, -3, 3, 4, 0, 5, + 8, -3, -2, 3, -5, -5, -4, 14, -1, 11, 3, -5, 9, 0, -8, -1, 1, -2, -3, -6, -4, -4, 5, 4, 16, 3, -7, -14, -4, -5, + -1, 8, 1, 6, 2, 1, 1, 2, 2, 1, 4, 5, 4, 5, -1, -1, 0, -1, -2, -1, -4, 1, -2, 4, 7, -3, 9, -1, 1, 2, + -1, -5, 4, 1, 6, -3, -7, -3, 7, 13, 2, -4, 0, 0, -1, 3, 2, -1, -1, -5, -1, -1, -5, 2, -1, -8, -7, 0, -6, -2, + 3, 1, -1, -6, -5, -3, -5, 1, -8, -3, -8, -8, -6, -4, -5, -8, -13, 0, 5, 15, 3, 2, -10, -6, 1, 3, 0, 0, -7, 2, + -2, 3, 3, -3, -1, 2, 0, 0, 6, 4, -10, -11, 1, -2, -1, -2, -1, -3, -1, 6, 5, 2, 6, -3, 1, 6, 3, 7, 2, 0, + -6, -2, 7, 9, 6, 4, 0, 2, 4, 4, 5, 6, 4, -5, 4, -2, 0, 6, -1, 2, 6, 2, 0, -2, 6, -6, 1, 3, 2, 5, + 5, 10, 0, -5, -3, -15, -5, 0, -7, -3, 4, -2, -4, -5, -3, -2, -3, -1, -2, 0, -2, -4, -5, -5, -7, -4, -3, -4, 2, 2, + 6, 3, 6, 5, -2, 3, 7, 5, 2, 4, 3, -1, 2, 4, 2, 2, 2, 5, 1, -1, 0, -2, -5, -4, -2, -5, -8, -3, -3, 0, + -3, -2, -2, -4, 0, 1, 1, 3, 1, 0, 6, 0, -2, -3, -8, -3, -6, -7, -5, -1, 2, 0, 2, 0, 3, 4, -1, 3, 4, -2, + -4, -1, -3, -3, -3, -3, -2, 0, -3, -1, -3, -6, 1, 2, 7, 4, 2, 0, -5, -2, 1, 5, 0, -3, 0, -2, 1, -1, -2, -1, + 1, 7, 0, -5, 3, 4, 0, -1, 8, 3, -6, -17, 18, 20, 3, 5, -5, -3, -1, 1, 4, -1, 3, -6, -2, -15, 0, 6, 6, 10, + 6, -1, -1, 3, -7, 0, -1, -2, -6, -1, -3, -4, 5, 4, 7, 1, -5, -4, -3, -5, 13, 6, -1, -1, 1, 0, 8, 6, -3, 0, + 1, -7, -2, 3, 0, -2, -1, 5, 4, -2, -1, -2, 4, 9, 19, -8, -1, 7, 4, -9, -4, 2, -6, -3, 2, -1, -3, -9, 7, 1, + 4, 5, 7, -6, -3, 8, 8, 3, -2, -10, -2, 1, -10, -16, -11, -6, 0, -3, 0, -7, -1, -3, -3, -9, 5, 7, -1, -1, -2, -2, + -5, -5, 4, 3, -4, -2, 5, 7, -3, -2, 1, -2, 1, 6, 0, -2, -4, 5, 3, 1, -1, -4, -3, 7, -1, -2, 4, -2, -3, 11, + 10, 2, -4, 9, 2, -1, 5, 6, 13, -3, 9, -1, 8, 0, 1, -4, 7, -2, 1, 8, 6, 12, 10, -2, 0, -3, 5, 8, 7, -3, + -5, 1, 1, -4, -5, -3, 3, 2, -2, 5, 2, -2, 6, 3, 8, 1, 2, 0, 0, 4, 5, 10, 5, 7, 0, -2, -1, -1, -4, -2, + 2, -4, -3, 0, 5, 3, 1, 4, -1, -5, -5, -1, -3, -3, 1, -1, 3, 2, 3, -2, -3, -1, 0, -2, 4, 1, -1, 0, 1, -1, + 2, 3, 2, -1, -4, 1, 2, 1, -3, 0, 3, 3, 6, 3, -1, 4, 0, 1, 2, -4, -3, -5, -2, -2, -3, 2, 6, 4, -2, 6, + -3, -1, -1, 0, -1, 3, 3, 1, -1, -4, -4, -2, -4, -6, -6, -7, -2, -4, -3, -3, -4, -6, -1, -2, 3, 0, -1, -2, -1, -3, + -4, 1, -2, 3, -3, 0, 5, 1, -1, -1, -5, -5, 0, 2, 8, -12, -21, 25, 10, 2, 1, -11, 5, 4, -2, 2, 11, 3, 1, -7, + -10, 5, 2, 1, 4, 1, 0, -9, -5, 6, 4, 4, -4, 0, -3, 8, 1, 3, 2, 2, -4, 1, -2, -5, 0, 7, -5, 6, -8, -1, + -6, 2, 1, -10, 0, 2, -2, 4, 11, -5, -7, 2, 6, 1, -4, -6, 2, -3, 11, 27, -8, -6, 0, 1, -2, 1, 1, 2, -5, -8, + -13, -3, -2, -3, -2, -8, -3, -4, 1, -6, 0, -5, -1, 2, 2, -6, -7, -7, -4, -4, -2, -6, -1, 5, 7, 11, 9, -5, 1, 1, + -3, -6, -8, -4, -1, -5, -5, -4, -1, 5, 4, 3, 6, 4, -4, -7, -3, 4, 2, -2, 6, 6, 6, 9, 11, 5, 5, 6, 7, 5, + -2, -4, -3, 4, 3, -1, 2, 2, 9, 5, 3, 11, 7, 4, 9, 2, 2, 4, 9, 7, 11, 9, 7, 1, 9, 9, 10, 0, -5, -24, + -24, -16, -14, -21, -13, -5, -1, 0, 5, -8, -5, -6, -6, 1, -3, -11, 2, 5, 11, 11, -4, -4, -4, -6, -1, -3, -3, 0, 0, -3, + -3, 1, 1, 0, 0, 0, -4, -5, -7, -1, 4, 1, 6, 2, 4, 0, 2, -3, -4, 1, -2, 0, 2, -1, 2, 4, 3, 0, 5, 5, + 1, -3, -7, -2, 7, 3, 7, 3, 1, 0, 2, 2, 2, -1, 3, 1, 4, 7, 5, -1, -1, -4, -2, 2, -3, 2, -3, -2, -1, -1, + -4, -6, 0, 0, 3, -1, -1, 4, 7, 1, -3, -6, -7, 0, 2, 2, 8, 6, 3, -5, 4, 2, -4, -7, -4, -8, -4, -2, 3, 2, + -2, -2, -4, 0, -2, 2, 4, 9, 8, 0, -12, -7, -3, 4, 0, -1, -1, 5, 10, 9, -22, -45, 56, 21, 3, 23, -11, 14, 9, 16, + 4, -1, 2, -6, -9, -3, 1, 14, 11, 8, -5, -2, -5, 1, 3, 9, -6, -4, 2, -3, 2, 5, 3, -8, 0, 2, -1, -8, -2, 6, + 4, -5, 0, -3, 1, -7, -3, -3, -5, 3, -1, 1, 1, -2, 2, -3, 4, 5, 2, -4, 5, 0, -3, -4, 40, -2, 0, -6, -10, -15, + -12, 5, 3, 0, 0, -9, -12, -6, -6, 2, -2, -4, 0, -7, -15, -5, -4, 5, 3, 9, 6, 0, -5, -7, -10, -15, -17, -4, 4, 9, + 17, 7, 1, -4, -3, -10, -5, -6, -4, -9, -4, -7, 4, 1, 8, 16, 22, 23, 11, -5, -13, -15, -9, 0, 15, 19, 18, 22, 19, 2, + 4, 13, 12, 16, 16, 10, 5, 8, 11, 2, 1, 0, -14, -1, 1, 16, 15, 10, 2, -3, -8, 7, 5, 11, 8, 7, -8, -7, -10, -4, + 0, 23, 21, -6, -30, -42, -57, -54, -35, 1, 23, 35, 18, 2, -19, -32, -16, -13, 5, 9, 12, -8, 0, 0, 16, 2, -1, 0, -5, -4, + 0, 0, -2, 6, 6, 5, 3, 3, 0, -6, -6, -6, -1, -6, -2, -5, 1, 2, 8, 6, 5, 0, -1, 2, 1, 1, 0, -5, -4, -6, + -7, -9, -11, -15, -17, -20, -20, -23, -17, -10, -5, -3, 6, 3, 8, 15, 12, 11, 5, 0, -6, -9, -2, -1, 2, 1, -2, 0, 6, 4, + 4, 6, 8, 8, 8, 3, 2, -1, -2, -2, -5, -6, -10, -11, -5, -2, 2, 1, -2, 0, 4, 12, 15, 25, 26, 21, 25, 24, 24, 21, + 10, 4, -13, -51, -93, -121, -127, -116, -80, -21, 28, 53, 58, 36, 14, 3, 4, 6, 12, 16, 10, 12, 4, 0, -11, -20, -91, 76, -7, -45, + 37, -22, 12, 32, 1, 15, 22, -46, 18, -9, -25, 22, -15, 2, 14, -14, 4, -16, -9, 18, -8, -6, -6, -5, 6, 6, -5, -7, -3, -4, + 11, 4, 2, -2, 2, -1, 2, -5, -6, 4, -2, -6, 6, -7, -1, -2, -4, 4, 1, -5, 5, 1, 6, 5, -3, -4, 0, 1, -7, 72, + 11, 1, 0, 3, 9, 4, 4, -6, 3, 9, 15, 7, -14, -1, -2, 7, 9, 6, 11, -3, -12, -12, -5, 15, 14, -1, -5, 0, -3, -7, + 0, 8, 14, 11, 5, 9, 7, 7, -4, -7, -14, 1, 2, 15, 6, -1, -16, -13, -16, -8, 2, 12, 6, 13, 20, 9, 5, -3, 3, -7, + -6, 10, 5, 7, 6, -9, -17, -11, 14, 13, 5, 4, 3, 6, -3, -9, -9, 2, -2, 4, 9, 10, 16, 1, -13, -13, 11, 7, -3, 0, + 11, -4, 11, 5, 7, 0, 7, -1, -6, 3, -2, -8, -2, -2, -3, -1, 10, 27, 3, 3, 5, -8, -28, -4, -10, -11, -6, -32, -42, -15, + 1, 0, 6, -1, 7, -4, -3, -5, -10, -10, -2, -4, -1, -6, -6, -5, -2, 6, 5, 4, -2, 9, 6, 5, 1, 9, 7, 10, 4, 2, + 12, 11, 11, 1, 5, 7, 4, 10, 3, 7, 1, 11, 12, 5, 10, 6, 0, -8, -6, -8, -5, -5, 1, 9, 0, -6, 4, 6, 3, 6, + 2, 1, 7, 12, 5, -2, 3, -4, -3, 0, -3, 5, 0, 12, -5, -2, -5, -7, -4, -5, 2, 9, 10, -1, 7, -3, -1, -13, -9, 2, + -4, -3, -8, -8, -1, 1, 3, -3, -5, -1, -6, -3, -13, -7, 3, 4, -3, 12, 3, 7, 10, -7, -10, 8, 10, 0, 9, 3, -4, -18, + 5, 8, 18, 2, 7, -24, 14, 17, 2, -17, -6, 7, -16, 0, -13, -1, -2, -27, 4, -3, 1, 20, -11, -33, 15, 9, 0, -8, 14, 8, + -7, 3, -8, 0, -1, 2, -11, -2, -7, -14, -12, 4, 0, 9, 5, 4, -14, 2, -1, 0, 5, 4, 7, 6, 2, -5, 1, 4, 9, -8, + -2, -15, -2, 5, -21, 10, -6, -9, 10, 11, 6, 1, -16, -1, -6, 3, 7, 11, -4, -5, -7, -15, -3, 4, -12, -10, -9, 0, 4, -2, + -1, -4, -8, -7, 2, -2, 4, 11, -6, -3, -6, -4, 12, -6, -13, -19, -10, -4, -1, -4, 0, -16, -28, -10, 6, 9, -5, -8, -8, -4, + -1, -2, 4, 9, -2, 2, -8, -8, 7, 7, -3, -5, -17, -9, -3, -6, 3, 0, 6, 13, 19, 0, 13, 15, 2, 17, -4, -2, 0, -24, + -16, -2, 11, 2, 5, -1, -6, -13, -10, 1, 2, -1, 18, 5, -8, -5, -14, -7, 2, -3, 1, 9, 6, -1, 5, -19, -15, -14, -9, -8, + 1, -11, 1, -21, -25, -3, -6, -4, 4, 1, -3, -3, -6, -2, -2, -2, 5, 9, 6, 3, 2, -11, -2, -10, -1, 3, -2, 3, 6, -2, + 1, 12, 2, 5, -1, -2, 2, 6, -5, -11, -8, 2, 14, 8, 6, -3, 3, 9, 11, -2, -10, -11, -5, 0, -6, 1, -11, -8, 4, 1, + -1, -1, 6, 7, 1, 6, -1, 3, -3, 1, 8, -6, -7, -5, -1, -4, 12, 2, 6, -4, -2, -18, -17, -5, -14, -3, -4, 0, 3, -3, + -6, -4, 4, 3, -1, 1, -6, -6, 1, -3, -5, 5, 4, -10, 3, -9, -6, 6, -17, 3, -8, -2, -4, -4, -1, -3, 7, -5, -7, -5, + -3, -9, 3, -6, -9, 7, 13, 19, 8, -14, -4, 22, 3, 0, 5, 17, 11, 10, 2, -6, -16, -7, -32, -35, -4, 11, 2, 13, -5, 10, + -3, -11, -6, 12, 15, 11, 4, 2, -5, 1, 9, 12, 22, 15, 0, -4, 6, -4, 3, 12, -16, 1, 15, 3, 4, 22, 8, 12, 6, 5, + -4, 9, 11, 19, 13, 15, 12, 4, 1, -31, 7, 0, 3, 10, 16, 13, 0, 6, -6, -7, -6, -10, 0, -2, -4, -2, 9, 1, 14, 19, + 10, 18, 17, 2, -6, -9, 4, 6, 12, 5, 0, 13, 11, 0, -2, -5, 5, 9, 4, -10, -6, -8, -9, -2, 4, 8, -6, -9, -11, 7, + -8, -4, -13, -9, -11, -19, -8, 9, 5, -5, 3, -5, -17, 13, 18, -8, -2, 10, -3, 4, 7, -8, 10, 9, 12, 4, 17, 20, -8, 11, + -11, -17, -3, -2, 3, 3, 16, 3, 4, 0, 0, 1, -9, -11, 17, -8, 14, 11, 9, 15, 7, -6, -2, -31, -16, -5, -7, -1, 1, -3, + -11, -13, -4, -12, -13, -5, -8, -15, -14, -16, -7, -12, -7, 1, 2, -6, -6, -5, -1, 1, 3, 6, 8, -1, -5, -7, -1, -3, 0, -8, + 2, 5, 11, 11, 9, 4, 14, 21, 1, 5, -5, 7, -3, -8, -2, 1, 7, 0, -2, -8, -18, -10, 3, -4, -4, 6, -1, 4, 0, 1, + 5, 9, -4, -8, -11, -3, -6, 4, 7, 2, 6, 3, -5, 2, -5, -3, 1, 2, -5, 4, 2, 6, -2, -2, -7, -16, -7, -4, -5, 4, + -5, -12, 6, 12, 15, 12, 7, 4, -1, -13, 2, -3, -7, 0, -3, -13, 6, 15, 7, 5, 8, -9, -10, -13, 4, 10, 0, 5, 3, 4, + -6, -3, 7, -5, -2, -14, -7, 3, -3, 4, 7, -1, 1, 26, -27, 1, 36, 4, 2, 24, 27, 31, 17, 20, 29, -7, -5, -1, -18, -8, + 1, 8, -5, -18, -2, 4, -16, 2, 9, 5, 10, 2, -3, -14, 18, 2, 3, 17, 5, 18, -10, 3, 3, -2, 1, -4, 4, 10, 0, -1, + 1, 5, 12, -4, -1, -27, -16, -13, -2, 5, 7, -6, -9, 11, -39, -22, 3, -20, -5, -1, -3, 0, -25, -7, -28, -14, -7, 23, 9, 2, + -11, 14, 28, 22, 12, 15, -16, -5, 21, 0, 6, -27, -21, -7, -15, 13, -9, -4, 10, 10, 3, -3, 9, 9, 14, -12, -11, 2, -3, -23, + -11, -6, -8, -14, 3, -2, -3, -11, -3, 5, -11, 2, 12, 7, -15, -14, -7, 14, 18, -10, 0, -11, -36, 8, 0, -21, -13, -13, 14, -19, + -4, 28, 12, 8, 0, 9, 3, 26, 12, 28, -2, 8, 5, 29, 11, 24, 15, 9, -6, 15, 22, 6, 38, 17, 13, 12, 21, 13, -7, 1, + 14, 9, 16, 20, 4, 2, 19, -4, -12, 3, -26, -27, -28, -25, -21, 7, 7, 6, 19, 16, 4, 8, 3, -3, 5, -4, -4, -5, 0, -5, + 5, 5, 2, -5, -1, -4, -2, -8, -6, 4, -8, -7, -4, -12, 0, 0, 2, -6, -8, 0, 0, 8, 6, 4, 0, 0, 3, -3, -13, -19, + -11, -14, 1, -3, -3, 19, 16, 17, 23, 1, 3, 8, -3, -4, 4, 1, -2, 1, -10, -8, 8, 2, 1, -3, -1, -6, -5, -2, 3, -6, + 3, -2, -8, -14, -7, -9, -16, -1, 5, 10, 14, 1, 5, 0, -7, 11, 15, -6, 2, 8, 6, 11, 18, 8, -3, -16, -5, -9, -10, 11, + 0, 12, 5, 4, 15, 7, 10, -5, -8, -12, -8, -5, -8, 2, -3, 11, -33, 6, 10, -20, -16, -5, -5, -14, -3, 33, 8, 17, 23, 5, + 9, 9, 15, -9, -3, -11, 5, -21, -17, -9, 1, -2, 5, 0, 6, 19, 10, 10, 1, -1, 5, -9, 5, 5, 17, 8, -13, -23, 9, 5, + 7, 3, -15, -13, -3, -4, 7, 0, -4, 8, 7, -23, -1, 0, -2, 6, 2, 3, 8, -35, -28, -10, 3, 4, 1, -9, -30, -36, -37, -46, + -24, -16, -17, 9, 2, -4, -9, 1, 0, 0, 8, -13, -6, -14, -8, -8, 0, -14, -19, -12, -7, -11, -23, -11, 8, -5, -5, -17, 0, 18, + 7, -1, 11, 2, -3, -7, 7, 18, -2, 3, 11, 2, -4, -12, -25, -25, -27, -20, -17, -10, -9, -21, 15, 29, 9, 13, 10, -4, -6, -16, + -14, -9, -16, 6, 19, 24, 27, 4, 8, 32, 33, 14, 25, 30, 24, 30, 20, 28, 10, -2, 22, 32, 34, 21, 38, 34, 43, 39, 28, 16, + 19, 33, 22, 3, 38, 1, 16, 9, 21, -3, -11, -19, -12, -35, -33, -34, -41, -14, -7, 16, -9, -4, 8, 8, 7, 0, -5, -6, -3, -10, + -7, -5, -3, -1, -1, 1, -2, -15, -7, 10, 15, 5, -12, -8, -2, -2, -4, -10, 0, -10, -16, -18, -15, -16, -6, 1, 0, 8, 20, 16, + -2, 1, 6, 8, -2, -4, 0, 2, 0, -12, -2, 0, 4, -1, -5, -6, -14, -17, -18, -17, -14, 0, 2, 6, 7, -5, 10, 2, 6, 6, + 2, 7, 2, 4, -5, 5, -1, -13, -12, -6, -1, -8, -1, -5, -14, -9, -1, 11, 6, -3, -3, 9, 7, -2, 5, 3, 6, 6, 23, 7, + 9, 9, -4, -1, 18, 17, 6, 3, -7, 3, 11, 23, 15, 11, 1, 0, 10, 4, 0, 20, 16, -102, -11, 1, -49, -46, 0, 13, -6, -29, + 17, -4, -20, 18, 14, 17, -5, -10, 6, 18, 2, -7, -15, 0, 2, -1, -11, 12, 4, -2, 26, 9, 11, 9, -11, -14, -16, 17, 11, 17, + 0, -1, 0, 12, 12, -2, -14, -6, -16, -1, 1, 4, -9, 9, 9, 4, 4, 2, 4, -2, 7, 4, 0, 4, -48, -7, -9, 1, -5, -1, + -3, -16, -29, -40, -43, -31, -26, -11, -8, -6, -21, -13, -17, -12, -4, -2, -1, 9, 1, -12, -20, -25, -25, -12, 6, -20, -21, -41, -31, -33, + -21, -26, -33, -23, -12, -7, -11, -10, 0, 11, 14, 3, -5, -14, -14, -29, -34, -35, -43, -40, -30, -16, -6, -15, -22, -38, -43, -35, -46, -16, + 11, 6, 24, 7, -9, -16, -16, -23, -9, 24, 6, 9, -2, -2, 5, -13, 3, -5, -2, -15, 3, -13, -15, -4, 12, 35, 43, 31, 28, 42, + 35, 38, 12, 4, -3, -8, 20, -10, 14, 13, -15, -3, -18, -30, -39, -37, -23, -51, -93, -46, -78, -92, -72, -92, -42, -24, -14, -20, -14, -10, + -11, -12, -14, -19, -18, -1, 2, 6, 9, 13, 4, -4, -10, -11, -2, 1, 6, 1, 13, 8, 15, 6, 2, -8, -10, -16, -27, -31, -33, -37, + -37, -42, -36, -15, -12, -12, -11, -10, -2, 0, 0, 0, -3, -10, -25, -25, -29, -20, -18, -15, -13, -9, -16, -29, -38, -45, -22, -28, -24, -14, + -8, -6, -14, -25, -28, -31, -38, -24, 8, 32, 28, 18, 21, 16, -11, -19, -41, -42, -39, -58, -54, -71, -59, -39, -37, -31, -26, -15, -35, -23, + -13, -5, -17, 6, 21, 34, 47, 37, 22, 36, 20, 7, -8, -4, -16, -21, -13, -19, -6, 2, 9, 13, 1, 13, 39, 41, -127, -23, 10, -65, + -99, 9, 101, -3, -49, 30, 3, -64, -46, 51, 45, -25, -1, -10, -5, -25, -3, 14, 1, -10, 2, 4, 18, -11, -3, 26, -5, -10, -24, 9, + -1, 0, 14, 13, 4, -6, -19, 3, -3, 3, 2, -4, -1, -7, 7, 5, 2, -4, -5, -7, -6, -8, 3, -9, 2, 11, 11, -4, 1, -32, + 2, 1, 10, 18, 6, 6, 2, -2, 11, 12, 16, 15, 7, 7, -5, 1, 5, -4, -6, 7, -1, 4, 3, -2, 0, 2, -7, -3, 1, 8, + 12, 7, 6, 1, -14, -7, -15, -5, -2, -7, -10, -6, -2, -1, -4, 2, 0, 11, 9, 10, 1, 2, -1, 2, 6, 8, 8, -4, 5, 6, + -11, -3, -10, -8, 12, 6, 7, 2, -10, -8, 5, -5, -9, -5, -6, -3, 3, -6, 1, -10, -5, -1, -7, -8, -11, 0, -1, 2, -3, -18, + -8, 5, 2, 2, 8, -4, -7, -4, -2, 12, 10, 9, 10, -2, -11, -13, -8, -3, 3, 6, 4, -13, -10, -21, -12, -16, 6, 4, 24, 18, + -3, 3, 1, 3, 1, -4, -6, -6, -4, 5, -3, -5, -15, -9, -9, -7, -6, -1, -3, -7, -5, 0, -1, -1, -7, -8, -1, 1, 1, -3, + 2, 13, 8, 3, 2, 3, 2, -9, -7, -1, -8, -8, -8, -4, -1, 2, 7, 5, 6, 7, 8, 2, -10, -3, 5, 5, 1, -1, 0, 3, + 0, 8, 16, 8, 10, 12, 21, 8, 3, 3, 4, -1, 0, -8, -9, -8, -12, -5, 0, -2, 2, -1, 4, 7, 1, 10, 3, 11, 5, 1, + 5, -5, 9, 8, 4, -4, 7, 5, -1, 11, 5, 3, 1, 10, 6, 4, 0, 4, 5, 7, 2, 3, -8, -2, 6, 1, 10, 4, 9, -1, + -35, 55, 21, -9, 17, -1, 19, 13, 17, 14, 13, 4, -14, -13, -22, -4, -3, -8, 6, 0, 2, -5, 5, 2, -2, 5, 19, -4, -8, -17, + -12, -15, 4, -4, 4, -4, 7, 0, -7, -5, 0, 2, -8, -2, 4, -2, -5, -5, -2, 1, -10, 9, 5, 5, 3, 0, 4, 8, 13, 4, + 1, -9, -3, -8, 29, -7, 6, -4, 1, 1, 2, -1, 0, -5, 7, 4, 1, 0, 6, -2, 1, -2, -3, -3, 10, 5, -2, 8, 14, 5, + 1, -13, -19, -8, 4, 6, 2, 12, 6, 5, 0, -4, 11, 9, 8, 1, 3, 8, 9, 4, 0, 17, 21, 11, 6, 14, -3, -1, -10, -10, + -9, -21, -11, -7, -10, -4, 3, -3, -17, -3, -7, -15, -4, -7, -5, 4, -8, -20, -11, -10, 2, 0, 2, -4, -4, 5, -5, 3, 14, 1, + 8, -4, 3, -6, 17, -6, 15, 13, 16, -1, 7, 6, 7, 6, 7, -8, -5, -7, -8, 0, -1, -3, -4, 10, -7, -7, -3, -3, -14, 1, + -9, -7, -1, 18, 11, -15, -10, -3, -3, -1, 2, -3, -2, -5, -11, -3, -4, 1, -1, -8, -5, -9, -6, -9, -1, -5, 5, 10, 6, 2, + 0, -3, 3, 7, 0, 7, 0, 1, 5, -2, 0, -1, 1, 1, 6, 2, -5, 4, 8, 9, 1, 0, 0, 1, 0, 1, -5, -8, -10, 2, + 2, 0, 3, 5, 6, -1, 6, 0, -4, 1, 2, 3, -11, -4, -3, -6, -3, -4, 6, 3, 1, -2, 8, 1, -4, -2, 2, 3, 0, 2, + 8, 5, 4, 1, 4, 10, -2, 10, 3, 6, 4, 0, 8, 2, 0, -4, -2, 2, 5, 0, -1, -11, -1, 4, 6, 8, 2, -7, -16, -15, + -2, 10, 9, 13, 19, -21, 37, 25, 1, 9, 4, 12, 21, 5, 13, 1, -7, -6, 0, -6, -5, -4, 4, 9, -7, -1, 5, 2, 7, 2, + 4, 1, -3, 3, -2, -14, -9, 1, -1, 2, -2, -1, 12, 2, -2, 7, 13, -2, -8, -5, 2, -2, -2, 6, -10, -5, 5, -13, 1, -2, + -1, -8, 11, 9, -1, -3, -5, -2, -14, 24, -8, 8, 2, 0, 11, 8, 2, 13, 5, 10, 8, 1, 0, 10, 2, -1, 7, -4, -8, 8, + -1, -3, 5, -1, 8, 4, 0, 6, -7, -4, -10, -7, 7, -7, -3, -1, 3, -2, -13, -19, -7, -12, -5, -16, -18, -12, 0, -2, -6, 3, + 6, 3, -2, -3, 4, 15, 5, -4, 0, -5, -10, -1, -4, -14, -4, -17, -12, 6, -12, -16, 6, -9, -8, 11, 3, 9, 5, 16, -9, -2, + 1, 2, 0, 0, -11, -3, -7, -5, 2, -5, 2, -2, 12, -3, -11, 11, 1, 3, 9, 0, 1, 14, 9, 5, 8, 6, 3, -5, 11, 10, + 5, 17, 18, 3, 5, 0, 2, -4, 1, 3, -3, -8, -4, -1, -1, -5, -8, 0, -2, 7, 6, -2, -3, 3, 0, 3, -9, -11, -4, 1, + 4, 4, 1, 6, 4, 5, 5, -1, 2, 0, -2, -4, 3, 8, 6, 4, -1, 2, -5, -3, -5, -6, -4, -1, -4, -2, -4, -9, -2, -3, + 0, 2, 9, -3, 11, 7, 0, -2, -12, -18, -11, -9, -15, -8, -7, -5, -12, 3, 2, -2, 6, -3, 4, 5, 4, -1, -2, -5, 0, -1, + 0, 14, 11, 8, -2, -1, -3, -2, 4, 5, 0, 1, 1, -5, -8, 3, 0, 5, 12, 10, 9, 10, 2, 7, 7, 10, 1, -7, -5, 1, + -2, -7, -2, -8, 0, -2, -2, 5, 8, 1, -34, 15, 9, -1, 21, 0, 17, 32, -3, 2, 3, 5, 2, -1, -14, -8, 0, 19, -7, -2, + 6, 19, 9, 7, 6, -4, 2, 1, -23, -4, -9, -7, 4, 3, -9, 4, 9, -5, 3, 6, 10, 18, -5, 0, -14, 3, -1, -7, -2, -9, + 4, -5, 4, 17, 13, -6, 5, -3, 5, 5, 8, -10, -9, -1, 12, -7, -12, -7, -6, -11, -21, -9, -20, -8, -15, 0, 1, 1, 7, 0, + -5, -3, 7, 2, 11, 10, -8, -12, -4, 4, 7, -3, 8, -13, -5, -5, -6, 10, 6, 7, -1, -1, -3, 0, 2, -6, -10, -5, 1, -4, + -10, -3, 2, -3, 4, 0, 6, 2, -1, -1, 7, 2, 8, 7, 11, 6, 10, 15, 7, 1, -8, -17, -19, -21, -11, -8, -8, 0, -10, -11, + -1, -6, -5, -7, -22, -12, -31, -27, -22, -22, -11, -12, -10, -16, -7, -10, 5, 3, 3, 7, 25, 26, 27, 13, 21, 13, 16, 12, 16, 21, + 6, 5, -5, 21, 6, 4, 21, 9, 1, 14, 3, 11, 13, 9, 11, -14, -17, -17, -9, -9, -8, -13, -11, -3, -4, -2, -3, -2, -3, -6, + -7, -8, 0, -2, -2, 2, 1, -3, -5, -8, -8, -4, 2, 1, -8, -1, 2, 1, 6, 9, 6, 7, 16, 11, 5, 2, 4, 6, 1, 5, + 9, 2, 7, -5, 0, 3, -6, -9, -3, 5, 8, 11, 12, 16, 6, 5, 12, 1, -2, -3, -3, -11, -2, -11, -12, -11, -8, 1, -10, -5, + -5, -9, -5, 3, -4, -3, -9, -12, -4, 0, 4, -1, -1, -2, -2, 2, 0, 8, 0, -4, 0, 0, -13, -12, -12, 3, -1, 10, 7, 8, + 7, -15, -8, -7, -9, -8, -11, -1, 1, 5, 10, 11, 8, 6, -10, -25, 29, -18, -9, 0, 2, 28, 25, 17, 26, 4, -5, -7, -1, -4, + 3, -8, -7, 0, -6, -1, 10, -8, 3, -4, -14, -3, -15, -9, -3, -8, 3, 6, 4, -12, 14, 10, 2, -3, 9, 9, 8, 3, 8, 4, + -2, 3, -16, -13, -10, -5, -2, -5, 0, -6, -6, -8, -5, -1, -7, -9, -7, -2, -17, 11, -15, -18, -9, -13, -4, -1, -8, -14, -17, -11, + -9, -13, 1, 0, -20, -23, -23, -8, -3, 10, -5, -11, -16, -21, -10, -26, -21, -21, -30, -12, -17, -22, -36, -26, -8, 1, -2, -2, -5, -5, + -24, -20, -12, 2, -6, -9, -14, -8, -23, -10, -6, -10, -13, -11, -21, -10, -11, -3, 6, 0, -16, 3, 0, 5, 16, -4, -28, -14, -32, -20, + -30, -42, -36, -41, -26, -34, -27, -45, -36, -28, -35, -25, -21, -15, -25, -24, -26, -15, -11, -4, 2, 6, 6, 3, 20, 28, 25, 22, 23, 11, + 23, 14, 25, 15, 37, 16, 33, 15, 36, 30, 39, 32, 36, 24, 15, 7, 3, 12, 6, 19, -25, -20, -18, -8, -8, -17, -16, -14, -17, -6, + -4, -6, -6, -11, -8, -4, -11, -19, -12, -6, -7, -11, -20, -15, -10, -16, -7, -5, -10, -12, -8, -11, -13, -11, -2, 9, 0, 2, 1, 4, + 4, 4, 7, 5, 2, 15, 4, -4, -1, 7, 0, 9, 6, -9, 1, 10, 10, 16, 18, 23, 14, 22, 12, 5, 8, -2, -1, 1, -4, -7, + -6, -6, -2, -14, -5, -3, -13, -7, -4, -7, 10, 3, 14, 11, 3, -3, -2, -4, -7, 7, -11, 10, -2, -8, -7, 11, -1, 2, 5, -6, + 3, 5, 5, 12, 9, -3, -6, -18, -15, -14, -11, -17, -9, -23, -33, -25, -16, -24, -31, -35, -36, 12, -46, 10, -62, -28, -2, 9, 43, 6, + -1, -23, -17, -8, -10, 16, -13, 10, 4, -10, -7, -5, -13, -13, -20, -6, -9, -3, 2, -4, -8, -2, 3, 8, 5, 17, -6, -14, -3, -4, + -7, 3, -3, -5, 3, 3, -16, -3, -3, -1, 2, 4, -2, 4, 7, 4, 1, 4, 11, -3, -9, -7, -10, 0, -6, -10, -12, -17, -9, -5, + -8, -1, 3, 21, 21, 23, 12, 13, 4, -8, -16, -13, -4, -5, -2, -5, 0, 11, 18, 12, 22, 14, 11, 16, 3, -3, -12, -23, -25, -24, + -15, -4, 5, -2, -18, -22, -33, -26, -25, -14, -16, -19, -32, -25, -16, -30, -27, -34, -27, -21, -29, -40, -41, -33, -44, -47, -46, -39, -57, -48, + -30, -19, -7, 3, 4, 13, 14, -4, -12, -30, -24, -33, -41, -36, -24, -6, 10, 10, 1, -4, -8, -3, -2, 6, 16, 19, 13, 6, -1, 10, + 12, 7, 8, 13, 12, 22, 16, 7, 30, 30, 26, 21, 22, 15, 22, 18, 15, 49, 50, 46, 42, 18, 21, 39, 35, -4, -5, 7, 11, 11, + 9, 8, 11, 18, 13, 13, 6, 5, 5, 5, 6, 0, -11, -7, -2, 5, 8, 12, 7, 8, 6, 9, 14, 1, -1, -6, -3, -10, -15, -11, + -18, -19, -19, -18, -16, -18, -12, -3, -2, -7, 10, 3, -7, -3, 2, -6, 4, 1, 4, 2, 4, 6, -4, -3, 3, 7, 11, 12, 12, 11, + 18, 34, 27, 22, 25, 26, 20, 13, -1, -4, -15, -19, -17, -11, -7, 7, 11, 12, 5, 1, -14, -13, -19, -2, 1, -3, 3, -3, -2, 4, + 5, -6, -2, -9, -19, -6, -10, -14, -6, -5, -6, -4, -3, 2, 0, -4, 7, 11, 20, 19, 10, 6, 4, -2, -12, -41, 127, 74, -29, -67, + 18, 21, 24, 70, 13, 14, -20, 21, -2, 23, 18, 13, 6, 6, 11, 8, -4, -5, 8, -17, 6, 4, 19, -7, 1, -3, 2, -3, -9, 12, + 12, 20, 9, -3, -1, 10, 5, -4, 18, 6, 9, 0, -17, -1, 9, -1, 17, 8, 17, 23, 15, 12, -1, 12, -2, 5, -3, 9, 7, -45, + 3, -1, -6, -3, -7, -7, -10, -8, 10, 3, -4, 5, -7, -7, 0, -7, -11, -2, -5, 7, 14, 5, 7, 2, -1, 7, -3, 3, 1, -7, + -1, -6, -6, -2, 4, 4, -11, -13, -8, 10, -15, -10, -4, 6, -4, 1, 2, -2, -8, -3, 1, -1, 1, 15, 7, -5, 0, 4, 5, 18, + 11, -7, -3, -5, -8, 2, 9, -5, -1, 5, 1, -2, -9, -15, -16, -6, -12, -6, 2, 6, 23, 8, 5, 5, 21, -1, -4, 9, 4, -5, + 6, 9, 8, -9, 1, 9, 3, 4, -1, -6, 0, -20, 0, -10, 1, 0, 0, -2, 4, 9, 6, 8, 7, 8, 10, 15, 6, 1, 3, 12, + 12, 7, 3, 4, 6, 1, 9, 2, 5, 3, 0, -5, -12, -13, -14, -12, -11, -7, 0, 2, 4, 0, -3, 0, -1, -8, -4, -3, 0, 11, + 4, 0, -4, 3, -3, 0, 7, 3, -1, 2, 4, 4, 1, 8, 1, 10, 8, 2, -1, 5, 0, -6, -3, 8, 1, -4, -1, 3, 3, 3, + 9, -4, -13, -13, -11, -7, 0, -10, -12, -8, 0, -4, 5, 5, 2, 2, -5, -3, 1, 2, 4, 3, 12, -2, 1, -7, -4, 4, 6, -2, + -6, -4, 3, -5, -2, 7, 6, -3, 2, -2, -4, -4, -4, -5, -11, -8, -9, -10, -10, -10, -3, -10, 4, 9, -2, 5, 11, -1, 5, -8, + -8, -24, -12, -12, -19, -32, -23, -6, -8, -15, -5, 4, -21, -4, -7, -5, -4, -7, -11, -20, -25, -8, -10, -6, 4, 5, 3, 0, -1, 6, + 3, 4, 3, -11, -16, -2, -7, -2, 4, -7, -2, 2, -9, 0, -14, -7, -15, -20, -8, -1, 8, 14, 11, 5, 29, 5, 10, 6, 0, -8, + 9, 0, 8, 0, 9, 6, -2, 2, -1, 1, -26, -19, -15, -16, -13, -3, -10, -17, -11, -3, -13, -14, 4, -3, -1, 16, 5, 2, 5, -2, + 6, 7, 5, 1, 0, 2, -8, 1, 4, -1, -2, 0, -1, -4, -8, -12, 3, -4, -2, 7, 13, 4, 5, 3, 2, -2, -7, 3, -3, -5, + 2, 3, -12, -4, 7, -3, -16, -2, -4, -10, -1, -2, -6, -3, -4, -3, -7, -15, -18, -8, 3, -12, -11, -3, 0, -1, 0, 2, 4, -2, + -5, 3, 1, -8, 4, 15, 11, 19, 11, 5, -3, -2, 11, 5, 3, 10, 7, 5, 8, -4, 10, -3, -3, -5, 0, -14, -6, -3, 4, 3, + -1, 2, 14, 11, 9, 5, 5, -1, 3, 3, 6, -1, 5, 3, 10, 2, 3, -8, -1, -6, -4, -1, -2, 5, 2, 10, 1, -4, 3, 4, + 7, 2, 2, 0, -7, -1, -3, 2, 5, -6, 1, 2, 4, 1, -8, 2, -1, -5, 4, 5, -2, -2, 0, 0, -2, 3, -2, 8, 5, 9, + 2, -1, 1, 5, 11, -2, -3, -1, -7, -13, -3, -4, -9, -10, 4, 15, 4, 3, 3, -3, 7, 1, -1, -13, -7, -13, 5, 1, 3, -1, + -6, -11, -1, 10, 5, 2, -1, -6, -8, -8, -9, -6, -6, 5, 1, 11, 4, 4, 11, 3, 5, 5, 4, -6, -10, 4, -3, -2, 3, 5, + 14, 13, 9, 16, 5, -7, -21, -1, -9, -23, -9, -16, -1, -10, -16, 0, -8, -11, 10, 8, -7, 2, 11, 1, -2, -3, -8, -15, -2, 11, + -14, -1, 6, 10, 3, -5, 6, 0, 3, -4, -8, -6, -6, 1, -11, -4, 1, 2, 6, 2, -2, -7, -17, 8, 11, 3, 4, 1, 7, 5, + 2, 2, -3, 2, -3, -1, 8, 7, 10, -2, 9, 15, 5, 3, -3, 0, -15, -5, 14, 14, 12, 0, -5, -2, -1, 12, 10, 10, 2, 2, + 10, 5, 1, -3, -3, 0, 2, -3, -13, -17, -5, -3, -4, -4, -8, -6, -3, -8, -3, 1, -11, -15, -4, 6, -5, -8, -5, 6, -5, -8, + 2, 1, 1, 10, 11, 1, 4, 3, 3, 17, 11, 3, 8, 6, 10, 11, 4, 0, -2, -3, 12, 5, -7, -9, -15, -3, 1, 1, 4, -5, + 0, -10, -4, -5, 12, 7, -2, -2, 0, -8, -7, -2, 8, -5, 8, 7, 3, -5, 4, 3, -12, -5, -7, -15, -7, -2, 2, -1, -5, -3, + -5, -16, -18, -15, -11, 8, 16, 4, 18, 7, 15, 7, 10, 11, 3, 5, -1, 1, 6, 8, 14, 8, 1, -4, 4, 4, 0, -4, 3, 1, + 2, 4, -1, -1, 6, -3, 0, -1, 5, 8, 4, -1, -3, -1, 0, 2, 4, -4, -3, -2, -8, -2, -5, 3, 0, -1, 2, 3, -3, -7, + -3, -2, -5, 0, 2, 3, 3, 0, 1, 2, -5, -3, 0, 9, 9, 9, 11, 12, 4, 2, -1, 6, -2, -5, -5, -1, -18, 0, -1, -3, + -9, 7, 5, 0, -3, -3, -6, -7, 0, -1, 0, -2, 0, 8, 1, 7, 7, 11, 9, 15, 15, 8, 1, -4, -5, 0, 9, 5, 1, -6, + -2, -10, -15, -11, -2, 8, 15, 3, -3, -3, -9, 9, -6, -1, -1, -24, -26, -21, -21, -28, -19, -6, 6, 2, 3, -5, -4, 1, 8, 19, + 0, 2, -6, -8, -9, -5, -2, 6, 8, 8, 11, 1, 7, -16, -9, 1, 0, 6, -4, -2, 7, 10, -2, -13, 8, 4, -1, 1, -8, -20, + 0, 1, 6, 5, 1, 16, 10, 4, 5, 6, 11, 8, 8, 22, -15, 23, 21, 7, 5, 1, 7, 2, 13, 10, 0, -2, -5, -11, 9, 3, + -3, 1, 4, 13, 28, 36, 16, -3, -10, 5, 12, 10, 2, -13, -5, 1, -1, -22, -10, -12, -4, -21, -19, -22, -15, -20, -29, -9, 20, 11, + 12, 15, 19, 5, 8, -2, -4, 4, -4, -6, -11, 2, -11, -1, 0, -1, -2, -2, -8, -12, -4, 2, 3, -3, -3, 1, 6, 5, 7, 8, + 6, 14, 13, 9, 5, 8, 7, -5, -4, -11, -3, -27, -8, -2, -13, 9, 24, 29, 0, 3, -8, -20, -14, -15, -2, -2, 1, -16, -8, -14, + -5, -13, -11, -9, -8, -17, -23, -3, 5, -7, 14, 7, 15, 8, 5, -9, -2, 0, -5, 1, -5, -10, -10, 1, 0, -1, 1, -4, -10, -11, + -5, -7, -12, -10, 1, 5, -1, -3, -5, -1, -2, 3, 1, -4, -4, -3, 8, -3, 3, 4, 8, 0, -5, -7, -10, -11, -3, 15, 14, 18, + 11, 13, 9, 4, 1, 4, 7, 7, -3, 0, 2, 2, -8, 2, 2, 1, 4, -3, -6, -4, -4, -1, 2, -3, -1, 8, 7, 13, 13, 4, + 13, 1, 4, -3, -1, -12, -11, -21, -7, -6, -4, -6, 0, 1, -1, -4, 5, -1, 8, 5, -11, -10, -3, -2, -4, 10, -3, -4, -8, -13, + -1, 0, 6, 1, -3, 1, 8, -3, 2, -5, 1, 0, 7, 13, 11, 6, 12, -15, 31, -28, -6, 11, 31, 4, -25, 16, 33, -12, 5, 13, + 4, -8, -9, 12, 5, 0, -16, -5, -15, -8, -7, 7, 4, -2, 6, 8, 12, 9, 2, 1, 5, -1, 7, 0, -7, 3, -1, -1, -16, -7, + 0, -20, -13, -2, -6, 5, 3, -8, -9, -1, 6, -10, -8, 2, -6, -4, 14, 9, 9, -35, 8, -1, 9, 3, 6, 7, 12, 6, 15, 12, + 8, 4, 4, -8, -11, -12, -9, 7, 23, 9, 7, 10, -8, -12, -8, -4, -1, -8, -8, -9, -9, -6, -11, -10, -5, -4, -11, -6, -18, -24, + -27, -23, -23, -7, 2, 2, 1, -9, -1, 5, 1, -5, -17, -14, -13, 0, -2, 13, 17, 10, 15, 9, 14, 12, 0, -7, 12, -2, -7, -8, + -4, -6, 6, -4, -4, -1, -3, 9, 8, 13, 18, 10, -1, 1, -5, -13, -20, -35, -19, 0, 15, 27, 17, 38, 39, 24, 17, 1, -2, 0, + -6, -17, -22, -34, -31, -32, -15, -12, -22, -7, -19, -15, -5, -4, -8, 3, 14, 20, 11, 7, 8, 6, 6, 12, 11, 7, 10, 8, 5, 10, + 1, 3, 2, 0, -3, -5, -5, -9, -8, -7, -13, -13, -18, -10, -15, -5, 6, 4, 4, -1, -1, -8, -3, -3, -5, -3, -5, -8, -9, -12, + -12, -6, 6, 10, 8, -3, 2, 14, -3, -2, -2, -1, 3, 3, 0, 1, 2, 3, 4, 0, -9, -3, -3, -6, -5, -5, 5, 8, 4, 1, + 4, 7, 16, 12, 5, 7, 5, 2, -3, -10, -14, -6, -7, 6, -2, -1, -9, -7, -9, -7, 1, 2, 3, 11, 22, 10, 5, 6, 8, 0, + 3, 1, -5, -14, -7, -11, -11, -6, -1, 3, 5, 7, 4, 2, -1, -2, -8, -2, -4, 6, 2, 6, -20, 71, -35, 5, 30, 24, 6, -31, + 46, 58, -5, 30, 20, 16, 0, 7, 10, 26, -8, -12, 3, 2, 8, -1, 5, -4, -12, -4, 12, 20, 5, 7, 10, 1, 0, 18, 9, -6, + 5, 3, 3, -6, -3, 6, -10, -11, 0, -3, -14, -3, 5, 1, 6, 10, 10, -7, -6, -9, -6, 3, -1, 16, -45, 6, 28, 28, 25, 13, + -6, -3, -16, -2, 2, -2, 0, -1, 2, 8, -7, -9, -5, 0, 5, 27, 23, 5, 18, 18, 9, -2, 0, -11, 1, 1, 0, 10, 16, 4, + 5, -9, -26, -24, -16, -6, 2, -2, -1, -20, -16, 1, 4, 10, -2, -4, -10, -19, -20, -17, -5, 6, 12, 4, 16, 13, -2, -3, 10, 3, + 6, 12, 1, 14, 21, 19, 9, 11, 9, 15, 24, 25, 10, 21, 8, 4, 5, -12, -5, -5, -7, -3, -28, -29, -29, -26, -18, 15, 23, 13, + -6, -15, -32, -39, -36, -48, -54, -32, -44, -35, -26, -26, -18, -10, -6, -16, 9, 10, 4, 11, -2, 4, 29, 9, 29, -11, -7, -5, -5, -4, + 1, 0, 1, 1, 8, 10, 3, 3, 2, -6, -5, -3, -10, -11, -14, -12, -5, 5, -4, 0, -2, 11, 13, 2, 0, -2, 3, -11, -18, -18, + -22, -34, -39, -37, -27, -19, -9, 0, -2, 0, -1, 4, 10, -7, -6, -1, -11, -12, -18, -16, -5, 12, 13, 19, 20, 3, 4, 11, 13, 20, + 13, 5, 2, 3, 7, 13, -2, 3, 1, 5, 8, 18, 14, 24, 20, -1, -10, -21, -18, -22, -33, -40, -51, -54, -55, -55, -37, -19, -18, -23, + -33, -41, -60, -56, -42, -25, -5, 17, 28, 40, 44, 32, 18, -12, -31, -40, -41, -30, -24, -26, -33, -50, -40, -37, -10, -32, -26, -35, 121, -127, + -26, 73, 52, -4, -68, 61, 49, -80, -5, 61, -42, -1, 45, 7, 3, -4, -10, 0, 1, -6, 9, -33, -21, 1, 3, 6, 2, 12, -4, 0, + -8, 6, -6, -17, 2, -7, -5, 4, -14, -13, -11, -24, -25, -18, -14, -3, -6, 0, -13, 7, 8, 0, 8, -7, -12, -11, -8, -11, -6, -11, + -1, -1, -6, -8, 0, -2, -2, -5, 6, 3, -7, 4, 5, 8, 2, 11, 2, -1, 0, 3, 0, 5, 0, -6, 6, 0, 6, 0, -7, -8, + -3, 1, 2, -4, -9, 0, -3, 5, 1, -6, -13, -14, 1, 0, -6, -2, 3, 0, -11, -13, -2, -4, -2, 2, 4, -9, -6, 1, 4, 6, + 11, 11, 3, 1, 1, 3, 6, 2, -5, 8, 5, 1, 2, 9, -3, -4, 1, -1, 4, -9, 6, 5, -5, -1, 0, 15, -13, 10, 16, 10, + 0, -5, -6, -2, -4, 5, -5, 0, -1, -3, -1, -6, -9, 3, -2, -7, -1, -3, 7, 0, 8, 10, -2, -5, 6, -12, -1, 1, -4, 7, + 2, -1, -1, -8, -4, -2, 7, 0, 4, 3, 3, 8, 0, 0, -3, -6, -4, -4, -11, -14, -9, 1, 3, 9, 9, 12, 11, 1, 0, -4, + -6, -4, 0, -3, 1, 6, -2, -2, 4, -7, -5, -5, -5, -5, 0, 5, 8, 0, 3, 0, 14, 4, 4, 4, 7, 3, -4, -2, -2, -4, + 1, -2, -4, -1, -5, -4, 3, 2, 3, 0, -1, 3, 2, 9, 0, 0, -9, -2, 2, 0, -2, 0, -6, 5, 7, 16, 6, -7, 2, -3, + -3, 1, 7, -2, -2, 0, 3, 0, 4, -1, -1, -7, -7, -3, 5, -1, -5, -2, 5, -7, -4, -4, 0, 0, 2, -2, 2, 4, 8, 10, + -3, -3, -19, 10, -6, -6, -6, 1, 8, 2, -5, 10, 10, 10, 2, 6, -7, 4, 5, 13, 10, 5, 1, 0, 2, -9, 1, 3, 8, -8, + -9, -3, 8, -3, 1, -1, -6, -1, -6, 8, 2, -6, -2, 7, 6, 14, -4, 8, 5, -2, 1, -7, 9, 6, 6, -8, -20, -1, -4, -16, + -11, -5, -11, -5, -8, 5, 0, 0, -9, 8, 9, -2, -7, -9, -2, 1, -5, -11, -6, -12, -6, -1, -14, -3, -1, -3, 6, -2, -6, 1, + 3, 0, -2, -10, -3, -3, 14, 7, 5, 12, 8, 7, 13, 6, 8, 6, 9, 17, 5, 5, 4, 13, 6, -11, 2, 18, -3, -9, 1, -11, + -1, 3, 1, 0, 1, 13, 8, 3, -7, 14, 5, -1, 7, -9, -5, 3, 0, -3, -7, -2, -5, -3, -2, -8, -6, -15, -13, -4, -3, -6, + 0, -14, 2, -3, -15, -7, -7, -1, -4, -8, 5, 5, -7, 3, -16, -15, -5, -8, 5, 3, 11, 7, 12, 9, 0, 9, 13, 13, -3, 11, + -8, 6, -12, 2, 1, -13, -6, -2, -4, 0, -4, -4, -3, -1, -4, -2, 3, 7, 0, -3, -3, -3, -7, -5, -1, 5, -2, 6, 4, 6, + 11, 8, -2, -6, -9, -12, -8, -8, -3, -4, -1, 6, 2, 5, -1, 3, -1, 4, 5, 14, 10, 1, 1, -6, -6, 7, 2, 0, 3, 6, + 9, 5, 7, -6, -6, 1, 2, -3, -2, 1, 3, 7, 1, -2, 1, 5, 13, 6, -1, -1, 1, 0, 5, -3, -6, -5, -2, -5, -2, 1, + 4, 1, -9, -4, -3, 9, 0, 6, 8, 3, -1, -5, -7, -10, -4, -1, -5, 0, 2, 14, 5, 6, 3, 4, -4, 8, 2, -4, -2, -3, + -6, -7, 2, -9, 0, -5, 0, -14, 4, -22, 0, -2, 10, 15, 10, 2, 13, 10, -5, -4, 8, 2, -4, 5, -7, 3, -2, -6, 17, -13, + -11, -6, -7, -3, -5, 4, 6, 6, 5, 15, 0, -1, 1, 2, -6, -9, -9, 4, 13, 11, 18, 7, 0, 10, -9, -2, -3, -12, -5, -1, + -5, -13, 0, -2, -25, -23, -10, -6, -4, 3, 5, -5, 3, -6, 4, 1, -16, -6, -6, 0, -1, 3, -6, 2, 4, 17, 7, 2, -3, -3, + 1, 2, -3, 7, 4, -7, -8, -13, -10, 0, -2, 6, -7, -9, -10, -1, -5, -3, 1, -11, -12, -8, -5, 3, 6, 3, 4, 2, -2, 0, + 9, 1, 2, -1, -4, 12, 0, -4, 0, 0, 8, 5, -2, -6, -10, -4, -6, -7, -13, 2, -3, 1, -10, -15, 4, -1, 15, 9, -6, -3, + -1, -3, -12, 5, 2, -5, 4, 14, 0, 2, -7, -14, -5, -1, -10, 9, 1, -2, 8, 6, 9, 14, 2, 2, -4, -7, 1, -1, -3, 1, + 1, -5, 0, -2, -3, 6, -4, -8, -1, 19, 0, 4, 6, 3, 3, -4, -10, -10, -5, 0, -3, -2, -3, 1, 6, 2, -3, -2, -4, 8, + 10, 4, 5, 3, 6, 5, -1, 0, -2, -4, -5, -9, -1, -7, 2, -1, -3, -9, -6, 3, 2, -4, 2, 8, 18, 15, 1, -1, 3, 2, + 13, 4, 0, 0, 1, 0, 1, 1, 1, -4, -5, 3, 2, 1, -8, -5, 1, 0, -5, 0, 0, 6, -8, -5, -1, -5, 3, 5, -4, -4, + -6, 4, 0, -10, -2, 6, 8, 3, 3, 3, 7, -1, 1, 2, -2, -3, -1, 2, 4, -2, 1, 0, -1, 1, 1, 4, -4, -9, 2, -5, + 1, -7, -2, 3, -10, -4, 1, 10, 7, 9, -1, 8, 4, 13, -14, -5, -7, 1, -6, 10, -1, 12, 8, -3, -7, -1, 4, 2, 11, 9, + -8, -13, -4, 12, -9, -12, 4, -9, -6, 7, -5, -10, 3, -2, 10, 0, -4, 6, -1, -11, -4, -3, -8, 0, -12, -8, -3, 2, 9, -14, + -3, -8, -7, 10, 16, -2, -8, 0, -5, -7, -19, -6, 3, 7, -3, 9, 11, 8, 5, 2, 1, -6, -3, -4, 11, 4, -2, 4, -8, -15, + -11, -11, -10, -6, -11, -13, -6, -3, 9, 8, -11, -18, -21, -11, -8, -12, -6, -11, -2, -5, 9, 6, 6, -1, -1, -1, 5, 5, 0, 4, + 8, -5, -3, -6, 11, 15, 7, 0, -9, -11, 6, -5, 1, 3, -12, -8, -2, -6, 1, -2, -6, -2, -2, 3, 10, 4, -4, -11, -11, 1, + -7, -1, -7, -8, -6, -5, 3, -5, -6, -9, -14, -6, -10, -3, -8, 8, -7, -2, -8, 0, 8, 2, -16, -5, -15, -7, 7, -7, 5, -2, + 1, 8, -2, 10, 12, 12, 15, 10, 4, 14, 4, 9, -1, -6, 6, 0, 3, 4, 1, -5, -7, -13, -6, -6, 4, 4, 3, 10, 4, 9, + 4, 0, -5, -1, -9, 1, 1, -2, 5, 3, -2, -4, -10, -5, -4, 0, 0, -1, -6, 4, 14, 6, 0, -3, -3, -6, -3, -5, -1, 2, + -2, -2, -2, 1, 10, 6, 14, 8, 10, 6, 6, 1, -3, -3, 0, 6, 7, 4, 4, 2, -5, 12, -5, -7, -7, 0, 1, 6, 9, 7, + 3, 3, 2, 1, -2, 7, 7, -5, -8, -2, 0, 3, 4, 3, 1, -4, -2, -12, -4, -5, -2, -3, 1, -2, 2, -1, -6, 2, 8, 7, + 4, 4, 6, 17, 9, 3, 4, -6, -11, -7, -7, -1, 1, 1, 3, -33, 6, -11, 36, -25, -5, -19, -10, 7, 32, 22, 19, -6, -1, 8, + 6, -2, 2, 7, -1, -5, -5, -6, 10, -10, 10, -2, -9, -1, -5, -5, 3, 7, 7, -5, 16, -11, -4, 3, -3, 0, -13, -3, -6, 8, + -4, 7, 14, 7, -13, -9, -4, -13, 0, 1, 13, 2, -1, -16, -2, -3, -1, -3, 14, 22, -26, -21, -13, -9, -1, -1, 8, -1, -9, -9, + -5, -12, -2, -13, -20, -16, -2, 4, 16, 14, 5, 10, 18, 14, 15, 9, -3, -1, 3, 10, 22, 13, 11, 8, 1, 5, 7, 1, -1, -5, + -14, -13, -16, -4, -10, -12, -16, -14, 5, 13, 15, 8, -1, -5, -3, -8, -11, -9, -12, -29, -31, -17, -6, 3, 2, -11, -12, -3, -7, -5, + -8, -18, -8, -10, -8, 1, -1, -10, 3, 2, -7, -7, -11, -16, -10, -17, -23, -37, -17, -12, 0, 9, 13, -6, 6, 4, 4, 2, 1, -17, + -7, -6, -9, -1, 1, 2, -2, 7, 0, -7, 17, 15, 24, 8, 4, 17, 11, 12, -2, 15, -10, -12, -5, -6, -3, -5, -8, -9, -13, -12, + -15, -6, -8, -6, -1, 0, 10, 7, 9, 2, 1, 9, 8, 11, 9, 7, 11, 9, 13, 18, 7, 6, 2, -2, -1, 1, 5, 2, -2, 2, + 0, -5, -6, -1, -1, -4, -7, -6, -2, 0, -7, -6, -5, 3, 4, 0, 8, 4, 5, 4, 2, 6, 2, 13, 8, 2, 2, 6, 9, 2, + 1, 0, 4, 4, 5, 3, -3, 6, 7, -4, -4, 0, -6, -14, 0, -2, -7, 1, 3, 6, 9, 4, 0, 7, 17, 11, 9, 2, 0, 0, + 5, 14, 11, 11, 16, 10, -2, 3, -3, -13, 7, 9, 14, 5, 2, -9, -10, -6, -12, -25, -57, 56, -4, 83, -68, 13, -6, 12, 4, 49, + 18, -30, -5, 17, -13, -6, -9, -4, 0, -7, -5, 2, 6, 3, -18, 2, -6, 1, -2, 0, -6, 3, 3, 19, 3, 1, 3, -7, 3, -9, + -5, -5, -3, 3, 9, 11, -6, 8, -12, -8, -14, -1, 0, -6, 3, 3, -5, -5, -12, 3, -1, 2, -7, 2, 33, -10, -9, -14, -16, -15, + -8, -21, -20, -29, -18, -18, -9, -8, -5, 5, 8, 5, 7, 12, -6, -11, -19, -20, -17, -4, -13, -11, -14, -8, 4, -6, -6, -9, -12, -16, + -10, -3, 4, 7, -3, -7, 2, 3, -3, -9, -10, 3, 0, -7, 4, 12, 4, -2, -16, -34, -39, -31, -28, -24, -20, -17, -20, -19, -6, -22, + -31, -33, -36, -33, -16, -18, -1, 3, -5, 10, -3, -18, -29, -47, -57, -58, -38, -22, -24, -34, -23, -16, -22, -34, -39, -40, -32, -28, -11, -11, + -5, 2, -6, -9, -3, -11, 18, 11, 33, 19, 32, 19, 12, 2, 2, 32, 36, 27, 17, 13, 22, 13, 14, 22, 38, -27, -23, -23, -12, -12, + -12, -3, -1, -2, -3, -2, -4, 4, 7, 2, 3, 7, 7, 4, 9, 9, 4, -3, 4, 0, -5, -4, -2, -3, -7, -7, -5, -3, 3, 0, + 1, 4, -5, 0, -5, -4, 4, 8, 5, 5, 5, 6, 9, 17, 20, 25, 29, 26, 15, -9, -12, -7, -9, 1, 8, 9, 17, 21, 14, 2, + -16, -18, -17, -15, -7, -2, 12, 19, 11, 3, -7, -33, -58, -67, -83, -103, -83, -67, -54, -40, -35, -19, -15, -14, -22, -21, -10, -2, 5, 13, + 22, 24, 18, 15, -20, -31, -24, -25, -5, 7, -6, -22, -30, -25, -50, -46, -39, -40, -46, -54, -61, -72, -86, -71, -65, -116, 62, -46, 90, -127, + 51, -39, 14, -11, 121, -6, -24, -44, 89, -30, -4, 24, 1, 0, 7, 0, 13, 8, 4, 9, 8, -9, 6, -1, -2, 3, 4, 0, -19, -23, + -1, 4, 6, 6, -12, 4, 14, 21, 15, 24, -2, 6, 5, 8, -4, -8, -6, -8, 10, -1, -3, 6, 3, 0, 6, -3, -16, -13, -5, 45, + -2, 0, 1, -3, -7, -4, -9, 1, 6, 0, 1, 1, -13, -13, -1, -2, 8, 5, 3, 7, 20, 14, 5, 5, 1, 19, 12, 0, 7, -1, + 4, 16, 6, -6, -2, 5, 12, 9, 0, -3, -1, 1, -6, -6, 0, -9, -8, 0, 6, 3, -2, -6, 2, 8, -2, -6, 1, 0, -9, 0, + -3, 4, 14, 4, 2, 20, 22, 9, 11, 9, 9, 3, -15, -9, -13, -17, 1, 17, 3, 4, 1, 13, 12, 4, -6, -5, 3, -7, 0, 12, + 14, 10, 6, -1, -4, 0, 7, 12, 23, 6, 1, -5, -13, -8, -23, -19, -5, 2, -1, -8, 0, -7, -9, -1, 1, -3, 3, -8, -6, 10, + 1, -3, 4, 4, -2, 1, -2, -3, 1, 13, 8, 10, 11, 5, 5, 3, 3, 6, 6, 8, 6, -2, -2, 1, -3, 6, 4, 11, 7, 3, + 5, 7, 2, -7, -11, -7, 1, 2, 0, -1, -8, -5, -8, -13, -16, -6, -3, -2, 0, 0, 9, 2, -2, 5, -6, -7, 1, -2, 1, 4, + 3, 3, 6, -1, -6, 1, 11, 5, 1, 1, 1, 3, -3, 4, 3, 4, -3, 12, -4, -5, 0, 11, 0, 6, 7, 7, -5, -10, 1, 3, + 7, 13, 0, -3, -1, 7, 6, -5, -2, -6, -18, -9, -4, -1, 2, -3, -8, 1, 2, 0, 0, -6, -7, 5, 1, -1, -4, -13, -6, 4, + -15, -20, 23, 12, -39, -27, 29, 26, 10, 14, 25, 8, -8, 0, -8, 5, 14, -5, -14, -10, 7, 11, 7, -2, -13, -4, -3, -23, -1, 7, + 6, 21, 7, 3, 3, 9, 7, 0, 7, 1, -2, -3, 5, -11, -11, -2, 7, 7, 6, 18, 13, 5, 5, -6, -1, 0, 8, -5, -3, -3, + 0, -5, 0, 0, 10, 1, 6, 7, 8, 5, 5, 2, 3, -6, -1, 8, 11, 5, 5, -1, -4, -1, 5, 5, 6, 10, 4, -2, -4, -11, + -10, 4, 10, 5, 11, -2, -4, -9, -14, 5, 2, -4, -6, -2, -7, -11, -18, -17, -5, -2, -9, -14, -14, -16, 2, -2, 1, 8, -5, -8, + -1, -1, 8, 11, 9, -5, -10, 4, 8, 3, 6, 6, -3, -2, -7, -10, -5, 0, 8, 4, 4, 2, 4, -1, 3, 4, -5, -5, 5, 0, + -8, 0, -3, 2, 12, 14, -10, -7, -12, -7, -6, 2, 9, 12, 9, 1, 8, 8, 9, 9, 4, 18, 11, -3, -2, -4, 0, -18, -7, -2, + 8, -5, -6, -12, -12, 6, 7, 8, 5, 0, 3, -2, 1, -2, -2, 4, 3, 2, -2, 0, -3, -2, 1, 3, 5, 4, 6, 3, -2, -2, + 0, 5, 5, 3, 0, 4, 3, 7, 5, -2, 0, 2, 10, 12, 5, 2, 0, 5, -1, -3, -5, -2, 8, 3, 1, -2, 4, 5, 4, 1, + 4, 5, 8, 2, -6, -11, -1, 3, 2, 1, 0, 6, 4, 0, -1, -3, 2, -10, -3, -11, -7, -4, -2, 1, 4, 5, 9, -7, -7, -2, + 1, -4, 0, -4, -4, 2, 9, 3, 2, -4, -1, 2, 0, 8, 3, 9, 8, 7, -3, -9, -11, 1, 0, 4, 2, 1, 1, -9, -7, -2, + 2, -1, 5, 1, 5, -22, -9, 20, 3, -29, -18, 32, 41, -1, 13, 22, 10, 0, 3, -1, 9, 3, -3, -3, 9, 18, 7, 17, -1, 1, + -13, -9, -3, -4, 1, 19, 11, 8, -1, 2, 8, 5, 6, 2, 2, 5, 2, -9, -12, 4, -2, 0, 8, -14, 5, 4, -5, -4, -4, 3, + 3, -4, -1, -5, -7, -5, -3, -7, -7, 19, -1, 4, 7, 15, 4, -1, -6, 3, 8, 1, 7, 7, -7, -15, -1, -7, 7, 10, -3, 5, + 3, 2, -2, 2, 9, -4, 7, 10, -3, 0, 0, -2, 4, 8, 8, 1, -5, -1, -7, -12, -13, -13, -22, -13, -23, -23, -19, -12, -5, -2, + -2, -5, 0, -2, -2, -16, -1, 0, -3, 2, 14, 6, 5, 5, 19, 13, 11, -3, 3, 4, -8, -8, 2, -5, 5, 15, 3, -3, -10, 2, + 0, -12, 5, 2, 9, -8, -4, -9, -1, 0, -2, 6, -9, 2, 12, 2, 10, 2, 5, 7, -1, -9, 4, -15, -4, 15, -5, 10, 0, -7, + -6, -4, -5, 2, 5, 9, 10, -5, -11, -1, -5, -2, 5, 5, 6, 3, -3, 0, -2, -2, -3, 2, 3, 2, 5, -1, -1, 1, 3, 3, + 5, 4, 2, -2, -1, -1, -1, 5, -2, -6, -3, -7, -2, -8, -13, -8, -9, -6, -5, -4, -15, -10, 0, 2, 5, 9, 10, 8, 0, -3, + 10, 6, 7, 4, 1, -8, -6, 2, 5, 6, -5, 2, 5, 2, 5, 6, 13, 2, -2, -4, -7, -5, 0, 2, 1, 0, -7, -8, -3, 1, + 1, -4, -1, 5, 3, -1, -5, -1, -2, 5, 12, 10, -11, 5, -6, 2, 3, 0, -1, -2, 5, 3, -1, -8, -7, -7, -4, -1, 0, 1, + 0, -4, -9, 0, -5, 2, 0, 0, -3, 9, -17, -13, 7, 7, -20, -20, 34, 31, 2, 5, 22, 10, 3, 1, -2, 12, 6, -17, -5, -1, + 5, 15, 10, 1, 8, 5, -8, 0, -1, 7, 14, 9, 12, -7, 5, 7, -3, 4, -1, -2, -22, -1, -5, -2, -6, 2, -2, 0, 1, 3, + 11, -1, 6, -6, 2, 4, 5, -1, -8, -7, -12, 2, 5, -3, 16, -1, -2, -1, -1, -8, -15, -5, -5, -1, -12, -4, -9, -1, 10, 11, + 9, 5, 14, 12, 6, 18, 17, 3, 2, -3, 2, 14, 13, 16, 7, 7, 3, -10, -9, -10, -10, -6, -1, -21, -15, -14, -18, -23, -2, 8, + 10, -3, -1, 5, 2, 4, 4, 13, 8, 9, -4, -5, 9, 23, 17, 12, 2, 9, 13, 9, 10, 23, -2, -1, 2, -7, -4, -6, 7, 12, + 13, 14, -2, -9, -9, -17, -16, 15, 3, 1, 2, -2, -13, 0, 2, 13, 10, -7, -4, -5, -23, -17, -12, -4, -13, -3, 7, -9, -1, 1, + 8, 4, 4, -1, 0, -10, -3, -1, 3, 9, 7, 12, -3, -8, -7, 6, 5, 3, 1, 6, -1, 2, 2, 1, 2, 4, -2, 3, 3, 0, + -1, -1, 0, 3, 0, 0, -1, -1, -3, 2, 1, 13, 18, 11, 7, 4, -2, -6, -9, -4, -7, 0, -4, 0, -9, -8, -1, 6, 0, -2, + 7, 7, 12, -5, -8, 3, 1, 5, -3, -3, -2, 0, -4, 4, 5, 5, 2, -2, 0, -3, 1, 2, -1, -7, -6, 1, 5, 7, 9, 1, + 6, -4, 1, 3, 1, -3, -6, 1, 4, 1, 5, -2, -5, -1, 1, -1, 6, 1, 7, 2, -1, 5, 2, -3, 0, -5, -2, -4, -3, 0, + 5, 3, -10, -6, 2, -10, 1, -1, -5, -4, -1, -1, 5, 10, 7, -14, -26, -1, 2, -23, -29, 35, 26, -10, -9, 17, 14, -11, -1, 7, + 15, 2, -1, -5, -8, -1, 1, 0, -10, 2, 6, -9, -5, -5, -2, -4, 17, 10, 1, 2, 12, 1, 3, -5, 2, 2, -10, 5, -4, -10, + 2, 11, 2, 1, 6, 11, 5, 2, -2, -8, 11, -4, -5, -13, -5, 0, 0, -2, -6, 21, 10, 4, 3, 4, -8, -22, -12, -4, -5, -6, + -13, 2, 10, 9, 7, 8, 7, -18, -7, -13, -19, -14, -27, -24, -19, 2, 6, -13, 3, -13, -5, -11, -8, -25, -28, -22, -15, -1, -14, -18, + -5, -10, -19, -23, -10, -6, -7, 0, 2, 6, 7, 15, 21, 24, 19, 5, 10, 22, 11, 2, 16, 8, -4, 3, 0, -1, 8, -1, 2, -10, + 4, 9, -4, 6, 0, 6, 4, -8, -13, -7, 11, 1, 19, 27, 11, 14, 25, 13, 17, 11, 13, 14, -6, -4, -11, -4, 3, 2, 5, -5, + 8, 15, 5, -4, 8, 6, 7, 7, -7, -1, 1, -1, 5, 6, 3, -5, 5, -10, -6, 4, 14, 10, 16, 7, 7, 6, -4, -1, -1, 1, + 3, -1, 1, 5, 4, 4, 1, -2, -4, 4, 5, 1, 6, 6, 5, 3, 8, 3, 4, -3, 0, -3, -7, -10, -5, -3, 3, 1, 2, -11, + -7, -9, -12, -19, -15, -1, 5, 14, 7, 4, 6, 5, 6, 7, 1, -5, 3, 13, 3, -4, 3, 1, -3, 2, 5, -13, 6, 1, 2, 3, + 2, 10, 12, 2, 6, 0, -1, -9, -9, -4, -1, -3, -1, 1, -3, 4, 0, 3, -1, -5, 0, 4, -4, -3, -1, -7, 3, 2, -1, -7, + -3, -6, -7, -6, 4, 9, -3, 0, -3, 3, 3, 4, 4, 3, 10, 8, 6, -4, -6, -7, -5, -56, 3, 18, -28, -37, 10, 19, 2, 1, + 31, 20, -2, 5, 11, 15, 22, -6, -18, 10, 3, 8, -1, -2, 4, 5, -4, 1, -4, 2, 10, 2, 10, -2, -8, 9, -2, -6, 5, 7, + 2, 1, 0, -6, 6, -7, 7, 8, 4, 13, 9, 5, 1, 2, 4, 0, -12, -10, -10, 0, -10, -4, -11, -1, 0, 13, 16, -5, 4, -11, + -13, -5, -10, -13, -12, -7, -7, 8, 10, 6, -2, -3, 4, 14, 12, -1, 4, 11, 7, 9, 28, 17, 26, 5, -11, -3, -6, -11, -18, -12, + -2, -3, -6, -18, -12, -16, -26, -31, -33, -20, -14, -26, -28, -32, -39, -38, -27, -25, -17, -28, -29, -25, -16, 8, 9, 12, -1, -6, -3, 3, + -3, -6, 7, -1, -17, 7, 11, 8, 21, -3, -7, -9, -19, -8, -4, 3, 6, -2, -3, 9, 5, 0, -8, -7, -3, 19, 10, 2, 13, 9, + -4, -6, -6, -2, 4, 17, 12, 8, 15, 9, 26, 23, 13, 20, 2, 4, 10, -8, -19, -12, -18, -5, -1, 5, 5, 9, 7, 3, 1, 1, + 4, 5, 12, 14, 10, 12, 11, 9, 13, 8, 14, 14, 17, 12, 11, 12, 9, 9, 13, 11, 9, 21, 13, 0, -5, -6, -7, -10, -16, -9, + -9, -10, -14, -16, -22, -22, -32, -34, -30, -26, -12, -9, 0, 2, 6, 1, 7, -2, 0, -10, -19, -12, -17, -10, -7, -17, 8, 3, 6, 12, + 14, 6, 9, 7, 7, 11, 9, 16, 9, 6, 0, -2, -6, 0, 2, 10, 5, 6, 4, 3, -7, -11, -14, -12, -17, -7, -1, -8, -5, 4, + -7, -1, 3, 1, -3, -9, -8, -4, -7, 5, 5, 12, 16, 13, 7, -2, -6, -1, -4, 0, 8, 10, 6, 9, 3, 3, -127, -50, 55, -66, + -101, -3, 15, -17, -53, 25, 20, -52, -9, -7, -8, 29, -2, -33, 7, 1, -3, -11, -1, 0, -15, -19, 0, -6, -3, 1, 8, 3, 7, 7, + 23, 23, 6, 4, 2, 11, -3, 5, -2, 8, 8, 17, 20, 12, 20, 31, 26, 8, 18, 22, 18, 14, 21, 12, 17, 10, 21, 21, 23, -5, + 0, -4, 6, 2, 1, -5, 3, 1, -1, 8, -2, 5, -1, 3, -7, -12, 0, -3, -4, -2, -8, -4, 2, -3, -6, -2, 0, 5, 5, 2, + 7, 1, -3, 6, -4, 3, 2, -1, 3, 3, 4, 4, 10, -3, -2, -5, -3, -5, 5, 5, 6, -9, 5, 1, -5, -10, 0, -13, 2, -6, + -6, 8, 5, 5, -1, -4, 0, 2, -5, -12, 2, 12, -2, 5, 6, -5, 2, -17, -3, -7, -14, 5, -7, 1, 3, 15, 11, 11, -4, -5, + 1, 7, 7, 13, 16, 19, -8, 5, 9, 15, -3, 3, 4, 5, 4, -7, -11, 5, -2, -1, -4, -7, -3, -9, -2, 5, -4, -2, 13, 5, + 0, -8, 0, -9, -9, -5, -8, -12, -2, 4, 3, 0, -8, -5, -10, -8, -5, 1, -2, 1, -6, -1, 4, -6, -4, 0, 6, 2, 4, 0, + 2, -1, -6, -2, -1, 13, 10, 0, -4, 1, -4, -6, -5, -3, 1, -8, -3, 9, 3, 4, -9, -5, -10, -1, 5, -4, -2, -10, -5, 1, + -10, 14, 8, 8, -6, -9, -7, -7, -12, -3, 2, 13, 4, 1, 6, 4, -7, -9, 1, -8, -7, -1, -13, -10, -3, 4, 16, 8, -2, -10, + 2, -4, 2, 10, 4, -2, -4, 6, 2, -7, 4, 12, -6, 10, 16, 9, 4, 4, -4, -10, -14, -11, -11, -7, -8, -8, -1, 3, 17, 25, + -2, 13, 7, -1, 22, 12, 10, 28, -1, 3, 13, 3, 6, 16, -1, 4, 14, -10, -4, -16, 1, -12, 6, 1, 16, 3, 6, 0, -12, -5, + 1, -10, -5, 9, 8, 9, -4, 10, 10, -2, 12, 2, -3, -12, -4, -4, -15, -8, 7, -8, -6, -2, -11, -7, -10, -8, -8, 15, 6, 0, + -4, -2, -2, 6, -10, -6, -7, -6, -1, -5, 6, 10, 15, 6, 1, -5, 1, -7, -3, -3, -1, -7, -5, 3, 0, -3, -2, -2, -7, -1, + 3, 6, 8, 8, 1, -5, -8, -5, 7, -5, -10, -8, -5, -5, -7, -5, -15, -4, -2, -7, -1, -3, 6, 0, -1, -4, 7, 17, 9, 2, + 6, 11, -1, -9, -5, -3, 0, -5, -3, 4, 4, 11, 7, 2, -4, -4, 6, -5, -2, -3, -11, -12, -1, -5, -10, -7, -5, -10, 0, 9, + 7, 2, -2, 7, 0, 9, 5, 9, -3, 1, 5, -4, -1, 7, 14, -13, -3, 11, 1, -2, 0, -5, -4, 13, -1, 1, 15, 7, -1, 0, + -1, -5, -7, 11, 8, -2, 1, 6, 3, 0, 4, 12, 2, 4, 0, -4, -1, -7, 5, 10, 16, 17, 8, 4, -3, -2, 4, 4, -3, 1, + 8, 3, 7, 1, 5, -6, -8, -4, -7, -4, 1, 2, 7, 3, 0, -4, 0, 1, 0, 0, 0, 3, 1, 8, 10, 3, 1, -2, -6, -10, + -6, 1, -12, -12, -9, -4, -4, 3, 11, 18, 4, 12, -2, -4, 4, -2, 0, 9, 1, 9, -4, -6, -10, 6, -1, 7, 8, 2, -7, -1, + 8, 2, -8, -8, -12, -10, -22, -14, -4, 6, 2, -11, 5, 5, 1, 1, 9, 8, 12, 0, 2, 0, -7, -7, -2, -6, 14, 7, 9, 16, + -5, 6, 6, 3, 2, -13, -6, 12, 7, 6, -10, -21, 10, -2, -2, -6, -3, 3, 13, -3, -12, -7, -6, -2, -16, 2, 0, 10, 2, 0, + -23, -12, 4, -1, -15, -8, -12, -6, -2, 2, -4, 5, -1, 17, 14, 20, 6, -11, 1, 6, -1, 0, 8, 2, -8, -2, -8, -12, -4, -5, + -2, 1, 12, 6, 2, 12, 4, 7, 3, -2, 2, -4, -9, -17, 2, 6, -10, -5, -1, -2, -1, 11, -6, -1, 0, -4, 2, 19, 6, 2, + 4, -6, -4, 8, 11, 4, 5, -13, -5, 12, 6, -3, 0, -2, 5, 6, -2, 0, 2, 1, -4, 2, 2, 6, -5, 2, 1, -17, -37, -14, + 11, -6, -5, 2, -18, -11, -12, -7, -17, -5, -10, -17, -16, -3, -16, -20, -8, -13, -2, -7, -20, -7, -5, -11, 4, -11, -12, 18, 3, 1, + -2, -6, -7, -1, -1, 5, 10, -6, 11, 11, 16, 28, 19, 3, 6, 23, -1, 9, 10, 0, 14, -1, 6, -22, -5, -5, -8, -6, -12, -8, + 1, 7, 3, -5, 7, 19, 5, -4, -3, -13, -3, -6, -11, -11, -4, -13, -17, -10, -4, -2, -8, -1, -4, 4, 7, 8, 6, 3, -5, -4, + -6, 2, 1, -6, -14, -7, 3, -1, 2, 5, -2, -5, -7, -3, -5, -3, -7, -7, 12, 11, 10, 5, 1, 3, 4, 9, 8, -13, -8, -9, + -7, 3, 10, 5, -5, 3, 2, -3, 7, 8, 10, 0, 4, 8, 2, -9, -8, -2, -2, 1, -5, 2, 4, 1, 8, -4, -6, -1, -8, 0, + -6, 4, 6, 17, 11, 4, 4, 4, 7, 13, 3, 1, 9, -5, 0, -1, -11, -10, 8, -4, 6, -4, -2, -4, -5, 4, -4, 9, 4, -11, + -4, -11, 0, -4, 9, -3, -2, 2, 1, 17, -11, -27, 12, 10, 14, 2, -2, 22, -9, -10, -8, -5, 10, 4, -1, 4, 7, -7, -8, 0, + 2, 2, 0, -1, 1, -13, -6, 4, -3, 8, -8, 1, 1, 2, -2, -8, 5, 2, 7, -5, 4, 3, -13, 2, 6, 9, 0, -6, 5, 3, + 2, -4, 1, 2, 4, 4, -7, 16, 11, 6, 0, -4, 3, 3, -6, -10, 3, 20, -1, 3, 3, 7, 9, 12, 6, 18, 4, 0, -10, 7, + 7, 0, 9, 0, 0, 2, 9, 10, 4, -14, -8, -1, 5, 1, -9, -11, 5, -1, -7, -3, -10, -1, -8, -2, 7, 11, 0, -18, -14, -15, + -17, -14, -1, -7, -9, -2, 6, -2, -12, -3, -6, -7, 1, -7, 1, 10, -7, 2, 1, 5, -6, -3, -1, 8, -2, -2, 8, 14, 9, -4, + -9, -9, 6, 8, 5, -11, -18, 3, 10, -3, 7, 5, -19, -7, -8, -7, 3, 7, 6, 4, 21, 13, 9, 3, 2, 8, -3, -11, 1, -10, + -22, 11, 3, 5, -4, -10, -1, -10, 3, -12, -6, -4, 3, 1, -2, -6, -5, 2, -2, -1, -5, -12, -8, -6, -9, -4, -9, -13, -12, -3, + -3, 6, 13, 6, 1, 1, -1, 2, 2, -2, 9, 13, 4, 4, -11, -4, 3, -8, -11, -12, -2, -9, 2, 3, 8, 9, 9, -5, 1, 9, + 3, 4, 4, 8, 1, 13, 8, 1, 4, -2, 3, 3, 0, -4, 4, 2, -5, -5, 3, 7, -3, 3, 6, 0, -2, -8, 0, 3, 14, 6, + 10, 7, 4, -1, -10, -4, -4, 1, 4, -3, -8, -11, -3, -2, -11, -6, 0, 3, 18, -10, 0, 1, 0, -2, 0, 1, -1, 5, -6, 1, + 0, 1, 4, -8, 7, 3, -8, 6, 6, 13, 6, 1, -5, -10, -14, -13, -1, 10, -20, -7, -23, -4, 28, -15, 3, -39, -5, 22, 8, 1, + 5, 12, -1, 4, -15, 3, 2, -3, -2, 20, 0, -9, -1, 4, 1, 7, -2, 8, -2, -20, 9, -4, 6, -3, 4, -16, 1, 13, -17, -1, + 2, 5, 4, -6, 5, -4, 6, 8, 10, 0, 1, 0, 8, 7, 3, -4, -21, -15, -18, -9, -22, -1, -4, 3, 9, 13, 7, 14, 33, 17, + 23, 6, 7, -3, 3, -10, 0, 4, 7, -3, 3, -9, -6, -12, 2, 1, -6, -1, -23, -18, -1, -4, -5, -10, 1, 1, 8, -1, -3, -2, + -6, -4, -10, 3, -4, -2, 0, 2, -18, -18, 4, -9, -9, 1, -1, -16, -1, -18, -32, -18, -15, -7, 5, 3, -7, -17, -18, -14, -18, -33, + -15, -34, -32, -16, -10, 23, 24, 18, 20, 6, 1, -7, 7, -25, -1, -2, 4, -11, 9, -9, 19, 7, 29, 0, 8, 20, 19, 24, 14, 21, + -10, 0, -15, -23, -9, -1, 0, 11, 2, 8, 2, 0, 11, 15, 11, 5, 6, 2, -34, -44, -14, -14, -6, 5, 7, -2, 4, -7, 3, -2, + 0, -6, -8, 1, 0, -5, -3, -4, 6, 10, 10, 6, 3, 4, 8, 13, 8, 15, 4, -7, 2, 2, -2, -4, -4, -4, 2, 0, 0, -4, + -8, -3, 2, 2, 2, -4, -1, 4, 7, 2, 1, -3, 4, 0, 1, 12, 20, 5, 4, -3, -1, -10, -6, -8, -11, -7, -10, -11, -10, -3, + 2, 1, 8, 11, 10, 12, 21, 20, 13, 2, 9, 4, 0, -15, -12, -11, -20, -16, -8, -5, -1, 8, 1, 6, 0, 18, 11, 1, -1, -20, + -14, -12, 4, 10, 3, 0, 4, 9, 6, 0, -14, -8, 4, 4, 6, 8, 9, 0, -10, -16, -24, 56, 14, -29, 27, -3, 3, 13, 16, 11, + -48, -14, -1, 21, 31, 28, 7, -3, 13, 11, 17, -2, -4, 14, 13, 2, -6, 3, 17, 5, -6, 5, 10, 10, -1, 11, 20, -1, 4, 8, + -4, 22, 0, 1, -1, -3, -11, -7, -20, 4, -3, 2, -3, 8, 25, 5, -3, 7, 0, -9, 3, -11, 1, -3, -10, -64, -29, -11, 13, 31, + 33, 10, 2, -10, -25, -11, 3, 20, 16, 11, -9, -13, -4, 6, 0, 0, -13, -25, -19, -22, -34, -16, -6, 10, 32, 52, 41, 21, 2, -19, + -39, -43, -32, -17, -14, -18, -16, -4, -9, -5, 1, 15, 14, -12, -20, -7, -5, -2, 9, 14, -7, -8, 8, 7, 6, 6, -7, 8, 12, -1, + 0, -18, -53, -62, -70, -75, -65, -45, 4, 55, 97, 115, 85, 58, 20, -22, -40, -41, -37, -22, -27, -9, -2, -10, 0, 13, 16, 30, 28, 37, + 33, 31, 30, 32, 14, -1, -8, -17, -3, -4, -7, -9, -2, -20, 8, 30, 26, 36, 21, 49, 35, 8, -10, -5, -19, -37, -26, -22, -7, -7, + -8, -11, -4, -7, 6, 2, 3, 2, -1, 7, 1, -1, -12, -8, -7, 0, 3, 1, 7, 7, 17, 11, 13, 4, -3, -2, -4, -8, -3, 10, + 17, 16, 17, 18, 18, 5, 5, 11, 13, 3, 12, 13, 9, 2, 0, -10, -3, -1, 1, 6, 8, 16, 12, 24, 27, 43, 24, 29, 17, -5, + -18, -31, -73, -80, -82, -85, -55, -23, 19, 64, 83, 84, 68, 37, 15, -13, -31, -55, -65, -43, -40, -25, -22, -14, -6, -2, 6, 8, 12, 4, + 8, 12, 5, 24, 25, 22, 12, 1, 8, 6, 6, 2, 24, 39, 51, 46, 42, -7, -48, -75, -106, -103, -108, -101, -96, -74, 127, -24, -113, 85, + -64, 37, -22, 34, -18, -94, 38, -41, 50, -6, 66, -23, 4, 20, 22, -10, -15, 14, 3, 1, -8, -10, 11, -7, 5, -2, 0, -4, -8, 4, + 4, 7, -20, 6, 13, -4, 0, -22, -11, -28, -18, -13, -20, -13, 1, -2, 8, 4, 20, 13, -2, -9, 9, -6, -2, -11, -15, 1, 0, -2, + 6, 6, 5, -3, 1, 6, 3, 3, 8, 2, -4, -6, -5, 8, 5, -2, -2, 2, 0, -1, -3, -4, -8, -1, 1, 0, -4, -5, -6, 0, + 6, 7, -4, -7, -1, -3, -6, -7, 3, 2, -2, 3, -5, 1, 2, -4, 5, 5, 4, 5, 5, 3, -3, -5, -3, 5, -7, -7, 1, 5, + -3, -4, -8, -4, -2, -1, 1, 0, 1, 4, 6, -6, -5, -5, -6, -2, -6, -7, -14, 4, 1, 4, -6, -7, -5, 2, 1, -4, -6, 3, + -2, -6, -1, 3, -3, 2, -2, 3, -1, -4, 0, -9, -1, 5, 11, 3, 5, 10, 4, 0, 14, 11, 6, 3, 4, -1, 4, -11, 1, 12, + 7, 4, 3, 0, -4, -5, 3, -1, 3, -4, 4, 5, 3, -2, -4, 1, 10, 13, 11, 11, 6, 0, 0, -4, -7, -8, -1, 3, 2, 7, + 2, 3, -3, -9, -7, 3, -2, 0, 6, -1, 1, 4, 2, 7, 1, -4, 2, -2, 2, -2, -2, -5, 0, -3, 1, -8, -6, -6, -1, 2, + -2, -5, -6, -6, -9, -9, 0, -2, 1, 4, 5, 0, 3, 6, 3, 1, -1, 7, 3, 9, 2, 3, -7, 0, 1, -5, 0, -7, -1, -5, + -2, 8, 2, -1, 1, -3, -5, -1, -1, -7, -2, -2, -2, 3, 5, 1, 4, 0, 0, 1, 6, 0, 6, 3, 4, -2, 2, 2, 7, 4, + -11, 11, 18, -5, 27, 5, 11, 7, 3, 0, -1, 4, 7, 0, 7, 8, 14, 3, -11, -6, 5, 11, 8, 9, 2, 2, -3, -6, -7, -7, + -3, 1, -7, -3, -1, -3, -10, -4, 10, -1, -1, -1, 1, -2, -1, 2, -6, 8, 3, 0, 1, 5, -3, 5, -3, -6, -2, 3, 0, 5, + -11, -3, 1, 5, -3, 2, 1, -4, -1, -7, 0, -8, -4, 1, -2, 0, -2, -1, 0, 2, 1, -1, 1, 8, 10, -3, -3, -4, -2, 5, + -3, -5, 6, 3, 6, 12, 3, 3, -1, 6, -5, -4, 4, 3, 1, 2, -5, -3, 2, -10, 5, 6, 9, 4, 12, 15, 7, 0, 6, 7, + 6, 2, 2, 6, -4, -2, -9, -8, -2, 9, 3, -4, 3, -9, -6, -3, -15, -6, -1, -7, 2, -3, -2, -3, 2, 10, -6, 5, 6, 4, + 1, -9, -22, 0, -6, 2, 1, 3, -7, 6, -5, -3, -2, -2, 5, -4, 8, 4, -6, 8, 6, 14, 7, 2, 3, -6, -6, 2, -3, -4, + 6, 9, 0, 0, 12, -1, -1, 0, -2, -6, -9, -10, -11, -4, -4, -10, -6, -5, -4, -1, 2, 2, 3, 0, -1, -1, -8, -7, -8, -6, + -4, -4, -2, -6, 0, 0, 5, 2, 3, -4, -7, -5, -5, 1, 1, 0, 3, 6, -7, -14, -7, -10, -10, -6, 1, 5, 3, -1, 1, 5, + 9, -3, -1, 2, -2, -1, -5, -2, 10, 10, 1, -1, 8, 6, 3, 11, 4, 2, 4, -9, -5, -12, -7, -5, -6, -4, -2, 6, 0, -7, + 3, -4, 4, 10, 0, 7, -2, -5, -4, -6, -4, 2, 3, 0, -7, -5, -7, -6, -11, 1, 6, 1, 0, 6, -1, 7, 7, -1, 3, -3, + 4, 3, -5, 3, 10, -12, 5, -1, -8, 11, 2, 11, -6, -10, -5, -5, 7, -2, -3, 0, -6, 4, 4, -11, -7, -3, -6, 10, 10, 4, + 3, -9, -13, -12, -5, 9, 0, 0, -9, -1, -3, 3, 1, -3, -5, 0, 1, 8, -3, 0, 6, -4, 8, -3, -3, 7, -2, -3, 2, 2, + 2, 1, -2, -2, -9, -10, -7, -1, -4, -12, 11, 3, 1, 2, 0, 8, -4, 10, 11, 4, -1, -3, -9, -3, 3, 6, 10, 3, 13, 10, + 0, -7, -6, -7, 5, -9, -5, 2, -7, 10, 7, 12, 3, 5, 12, 4, -2, -1, 5, 2, 5, 13, 10, 7, -6, 8, 5, 2, -3, 8, + 5, 0, 1, 3, 8, 1, 5, -1, -2, 7, 0, 4, -6, 1, 8, 4, -3, -11, -12, -2, -2, -13, 2, -11, -4, 0, 1, 2, -5, -2, + -9, -10, -4, -2, 2, -1, -1, -4, 5, -13, -1, -9, -5, -15, 3, -1, 1, 2, -2, -2, 1, 5, 5, -5, 0, 4, 6, 0, -15, -5, + 2, 3, 12, 6, -1, 9, 6, -2, 1, 12, -3, -6, -3, -3, 2, 0, -5, 1, -1, 0, -3, -2, -8, -7, -3, -3, 1, 3, 0, -3, + -3, 1, 1, 3, -2, 0, -1, -5, -2, -2, -6, -3, 3, 2, -3, 2, 0, 0, 3, -3, -6, 4, 4, 3, 4, 4, -1, -6, -4, 0, + -11, -1, 2, -7, -4, -3, -8, 2, -2, -3, -4, 1, 8, 7, 4, -4, 2, 2, -2, 4, 7, 5, -1, 3, -2, -1, -5, 0, -10, 0, + 3, -1, 2, 3, -3, 3, -3, -2, 7, -6, 5, 9, 5, 1, 3, -2, 0, -1, -7, -5, -1, 1, 2, -2, -1, 7, 6, 5, 0, 4, + 2, -6, -3, -3, -1, -2, -4, -1, 0, -5, -10, -6, 0, 0, 28, -2, 12, 6, -11, -12, -6, 1, 5, 0, 5, 2, -2, 11, -3, -9, + 1, 9, -2, -1, -4, 7, 2, 5, 1, 0, 2, 8, -3, 1, -12, -6, 4, 7, -8, 9, 5, 3, 2, 0, -4, 1, 1, 4, 3, -9, + -1, -4, 8, -1, 0, -1, 4, 0, -9, 1, 0, -11, -7, -4, -15, 10, 10, 5, 8, 15, 5, 7, -6, 8, 0, 5, 8, 2, 3, 2, + 3, 1, -4, -4, 1, 0, 0, -6, 3, -2, 3, -4, 9, -4, -6, 0, -4, 2, -1, -5, 7, 2, 0, 2, 1, 6, 4, -3, -5, -4, + 4, 7, 0, -1, 2, 2, 2, -5, 3, 5, 6, 14, 16, -3, -7, -10, 0, 5, -2, 1, 4, -3, -11, -5, -2, -4, 0, 7, 8, -8, + -6, -3, -1, -7, -10, -2, -2, 9, 0, 4, -2, 1, 6, -2, -4, 1, 10, 2, -8, -3, 4, -2, 6, -7, 6, 2, 6, 14, 0, 5, + -3, -4, 5, -5, -5, 7, 3, 14, -6, -7, -6, -10, 0, 5, -2, -2, -1, 2, 3, 5, 5, 2, 5, -2, -1, -2, -5, -6, 0, 0, + 2, 4, 0, -5, -1, -10, -1, -4, 2, 3, 0, -2, 6, 1, -3, -2, 2, 8, 8, 9, 7, 3, -3, -6, -3, -3, -9, 1, -9, -11, + -7, 2, 3, -2, -1, -2, 1, -1, 1, 2, -6, 2, -2, 1, -2, -6, 1, -1, 3, 4, -2, -4, -1, -1, 0, -5, 3, 5, -5, 2, + 4, -6, 2, 0, 2, 2, -3, -6, 6, 3, 9, 3, 6, 6, -7, 4, 4, 0, -3, -7, -5, -2, 0, -5, -11, -7, 0, 0, -1, 6, + 2, 0, 2, -7, 4, -7, 6, -2, -1, -10, -2, 3, 0, 1, 4, -6, -31, 20, -3, 46, -36, -7, 29, -21, -23, -6, 13, 14, -12, 3, + 5, 1, -4, 1, -3, 16, 20, 5, -3, 5, 14, 11, 5, 3, 3, 5, 5, 7, 10, 3, -1, 3, 4, 8, 7, 3, 6, 5, 4, 0, + 6, 4, 6, 1, 0, -1, 3, -4, 1, -4, 9, 2, 5, -5, 1, -4, 1, -6, -3, -13, -9, -3, -8, 0, 3, 11, -3, -1, 7, 4, + 1, 10, 10, 10, 5, 11, 3, 5, -2, -4, -7, -15, -6, -15, -5, -3, -12, -6, -14, -16, -14, -7, -12, -21, -10, -6, -17, -24, -26, -15, + -15, -11, -17, -7, -19, -19, -14, -2, -15, -15, -6, -3, 0, -2, 5, -14, -18, -4, 4, -3, 4, -2, -8, -3, -5, -13, -21, -19, -25, -7, + -3, -12, -18, 1, -5, 0, 11, 8, -5, 1, 24, 7, 9, 14, 10, 10, 7, 5, -4, 3, 6, 4, 1, -9, 7, 2, -1, 1, 1, 10, + 10, 13, 18, 15, 17, 16, 12, 23, 31, 14, 19, 3, 17, -2, -11, -3, -6, -7, -9, -4, -2, 6, -1, 3, 2, -7, -9, -7, -8, -1, + -2, 2, -3, -5, 1, -2, -4, -2, -1, 4, 0, 2, -3, 0, -3, 2, 2, 1, 0, -6, -5, -2, 0, -3, 3, 2, 2, -2, -7, -1, + 0, 2, 6, 4, 1, 2, 4, 2, -8, 0, 3, 6, 7, 6, 1, -3, -3, 5, 1, -1, -2, 0, 2, 7, 6, 1, -2, 3, -1, -5, + 4, -4, -4, 2, 2, -1, 0, -6, -9, 4, 11, 2, 3, 5, -6, -5, -3, 1, 6, 1, 0, -1, 2, -3, -4, -4, 1, 0, 2, -1, + -1, -4, -7, -5, 7, 5, 0, -1, 3, -2, -4, 1, 3, -1, -7, 6, 11, 6, 6, -1, -13, -79, 47, -15, 69, -71, 35, 44, -21, -24, + 8, 35, 13, -18, 5, 11, 0, -5, 8, -8, -15, 2, -5, -12, -5, -7, -13, 0, -11, -17, 0, 4, 9, 2, -2, -1, 2, 3, 3, 3, + -5, 0, 0, -10, 4, 8, 3, -4, -8, 1, -9, -7, -12, 0, 6, -1, 0, 6, 9, 2, -2, 4, -3, 5, -11, 3, 5, 11, 8, 9, + 11, -16, -16, -9, -12, -11, -7, -17, -14, -16, -7, -7, 0, -9, -8, -2, -5, -10, -11, 0, -9, -6, -11, -12, -12, -9, -10, -18, -33, -36, + -24, -29, -24, -19, -13, -15, -12, -10, -1, -8, -17, -21, -22, -26, -20, -17, -24, -28, -27, -28, -30, -28, -28, -24, -11, -9, -5, -14, -19, -15, + -19, -27, -29, -34, -24, -18, -20, -17, -12, -6, -3, -3, -2, -8, -2, 9, 12, 10, 22, 17, 19, 13, 14, 14, 15, 15, 16, 14, 19, 34, + 35, 35, 27, 35, 24, 19, 26, 17, 29, 37, 7, 14, 23, 10, 25, -8, -1, 3, -26, -4, -23, -40, -35, -20, -14, 0, 3, 2, -2, -3, + 0, 0, -7, -8, -11, -7, -13, -7, -7, -6, -5, -11, -15, -13, -10, -2, -5, 0, -1, 9, 5, -3, -7, -13, -15, -15, -16, -22, -22, -32, + -35, -32, -28, -29, -23, -15, -14, -10, -1, 4, 6, 8, 5, 3, 0, 7, 6, 7, 12, 12, 8, 7, 3, 1, 1, -1, -5, -18, -29, -34, + -34, -52, -58, -54, -41, -28, -33, -7, 3, 25, 19, 29, 26, 21, 24, 30, 16, 19, 13, 4, -1, -4, -6, -4, -4, -10, -15, -32, -27, -31, + -24, -32, -36, -35, -23, -17, -5, 8, 15, 39, 44, 49, 35, 23, 0, -22, -25, -37, -31, -35, -13, -4, 18, 35, 51, -35, -119, 97, -55, 80, + -127, 60, 75, -58, -44, -6, 64, -30, -34, 3, 12, -16, 5, 6, -7, -23, 22, -7, -10, -3, 7, 1, -8, -14, -7, 12, 4, 0, -9, 11, + 7, 4, -3, 0, -11, -13, 1, 12, -11, -4, 11, 2, 0, 0, 13, -4, -2, -3, 3, 9, 10, -10, 9, 3, -5, -8, 0, -14, -2, -8, + 22, 19, 3, 7, -4, -7, -7, -1, 0, -16, -13, -18, 0, -6, 3, 10, 16, -2, -5, -1, 12, 2, -3, -15, -18, -6, -4, 1, -4, -10, + 3, 0, -7, -3, -16, -10, -5, -14, -5, -3, -9, 3, 12, 9, -5, -8, 3, -7, -14, -19, -16, -7, -15, 4, 1, -6, 0, 10, -3, 1, + 11, 10, 5, -10, -16, 3, -10, 4, -4, -9, 8, 13, 14, 19, 8, 11, 11, -10, 6, 10, 5, -3, 3, -11, 10, 8, -2, 10, 19, 21, + 9, 9, -11, -16, -1, 2, 4, -1, 18, 2, -7, -13, 9, -6, -7, 5, -2, -1, 6, 7, 5, 0, -7, 4, 4, -3, -5, -5, -17, -5, + 6, 11, 4, 1, 5, 4, 1, -9, -16, -8, -18, -16, -10, -12, 1, 3, 9, 5, 0, 5, 2, 2, 3, 0, -1, -2, 10, 16, 3, 6, + 6, 1, 5, 7, 1, -8, 3, -3, -7, -6, 3, 8, 17, 1, -1, 6, 2, -5, -9, -8, 6, -1, -2, -4, -5, 5, 6, 9, -8, -11, + -3, -8, -8, -5, -3, 2, -5, 10, -8, -6, -3, -6, -3, 11, 0, 4, 8, 1, 10, -8, -12, -6, -2, -6, -3, 14, 15, 18, 9, -8, + 2, 7, -2, 5, -10, 0, 2, -8, 11, 7, -10, -18, 0, 4, -11, -8, 1, 9, 9, 0, 4, -11, -8, 2, 1, 3, 8, -10, 6, -8, + 0, -6, -13, 29, -1, 0, 9, 19, 8, 36, -7, 1, 10, 21, 0, 19, -12, 8, -1, -11, -10, 3, 8, -4, -16, 0, -2, 8, 14, -5, + -15, 4, 12, 4, 16, -3, -2, -7, 10, 14, -11, 19, -5, 11, -1, -7, 12, 8, -15, -1, -12, -9, 12, 8, -5, 5, -17, -2, 14, -1, + -9, -17, -9, -19, 9, 11, 0, -2, 3, 5, 6, 5, -1, -14, -5, -12, -4, 0, -4, -13, -11, -7, -14, -15, 4, 8, 10, 2, 1, -6, + -11, -1, 1, 0, 3, -2, -6, -6, 2, 2, 0, -5, 5, 7, 14, 6, -8, -1, -11, -10, -1, -4, -7, -8, -12, 8, 9, 17, 3, -9, + 1, -1, -9, -3, -8, -8, 2, -1, -20, -18, 5, 0, -4, 3, 19, 0, -5, 4, -9, 5, -4, -10, -8, 3, 10, -3, 8, 2, 7, 11, + 6, -2, 7, 0, -15, -11, 9, 3, 2, -8, 13, -1, 14, 15, 8, 18, 4, 4, 3, -5, -3, 7, 14, -4, -3, 6, -4, 8, 8, 9, + -9, -10, -8, -17, 3, -1, 5, -2, -4, 5, 1, 10, -3, -2, -2, -5, 2, 5, 3, -3, 1, 5, 1, 9, 11, 12, 9, 14, 1, 3, + -6, 3, 6, 3, -7, -9, -9, -12, -9, -7, 0, -1, -5, 3, -5, -10, -9, -12, -8, -15, 0, -3, -9, -2, 3, -2, -1, 6, 7, 8, + 4, 11, 0, 0, -3, -2, -6, -9, -7, 2, -5, -5, -5, -4, 10, -5, 11, 3, 2, -3, -2, 11, 12, 6, 3, 1, 7, -10, -11, 9, + 7, -2, 1, -2, -6, -3, 6, 7, 11, -8, -8, -9, 8, 7, 4, 2, -4, 3, 2, -10, 0, 9, 8, 2, 5, 5, -3, 10, 17, -8, + -12, -4, 17, -1, -2, 11, -4, 5, 21, 21, -24, -15, 14, 16, 17, -17, -2, -4, -2, -6, 13, 7, -3, -9, 8, 10, 12, -1, -10, -12, + -2, 3, 27, -9, -9, 6, -3, 1, 10, 1, -2, 4, 6, 1, 12, -4, 1, 7, 8, -1, 13, -7, -13, 11, -6, 8, -11, -5, -10, -10, + -10, 5, 13, 6, 9, -16, -19, -14, 7, 7, -2, 11, 5, 15, 6, 9, -21, -18, 6, -3, -5, 2, 3, 6, 2, 1, 6, 0, -11, -3, + -4, -1, -9, -15, -15, -5, -8, -13, -12, -4, 8, 0, 6, -17, -7, 0, -6, -9, 6, -9, -8, -11, 10, 4, 0, -9, -1, 1, 8, -3, + 6, -3, -9, 4, 17, 13, 14, 10, 2, 2, 0, 4, 22, 1, -1, -2, -2, 1, 6, -2, 21, 17, 4, -3, 6, 32, 14, 32, 0, 10, + 21, -8, -17, 2, 6, 0, -3, 1, -9, -8, -2, 4, 2, 23, 9, 5, 4, -4, -3, 8, 3, -10, 2, -4, -3, -1, -7, 0, -3, -14, + -5, -28, -11, -7, 4, -4, 2, -7, -8, 18, -1, 2, -3, -4, 0, 2, 1, 5, 0, -8, -11, -3, 1, -3, -3, 4, -4, 5, 1, 1, + 10, -3, -2, 0, 7, 6, 4, 0, 0, 3, -2, 1, -3, 5, -6, -6, 1, 6, 10, 2, 9, -2, -5, 0, -1, 1, 0, -1, -5, 0, + 11, 3, 4, 12, 0, -2, 0, -1, -10, -3, -4, -21, -14, 3, -10, -1, -1, -8, -6, -2, 4, 5, 6, -5, 6, -2, 0, 13, -5, 0, + -5, -8, -15, -5, 13, 19, 12, -3, 4, 2, -8, 9, 15, 3, -8, 4, -10, -1, -8, -6, -12, -9, 3, 9, 16, 0, 4, -7, -2, 8, + 10, 2, -3, 9, -3, 0, -2, 9, 0, -14, 20, -6, -14, -15, 16, -13, -29, 3, 17, 0, -29, -4, 11, -3, 5, 13, 14, 2, -18, -1, + -2, -8, -2, 9, -5, 25, 1, 23, -5, -3, -14, -16, -14, -16, -8, -5, -15, 0, 13, -5, -7, 4, 9, 17, 15, 14, 16, 12, 19, 2, + -4, -1, -7, 10, 1, -15, -4, -15, 7, 7, -14, -14, 3, -9, -13, 15, -7, -3, 14, -3, 2, -9, -15, -17, 10, 16, 6, 8, -1, 2, + 0, 7, 4, -3, 10, 3, 0, 4, -8, -3, -5, 12, 8, 11, 15, 9, 2, 14, 0, 4, -9, 1, -4, 5, 3, -5, -19, -1, -4, 14, + 11, 2, -6, -4, -3, 12, 7, 5, -6, 8, 17, 15, 5, -7, 12, 12, 13, 8, 4, 10, 8, 10, 14, 3, 12, 9, 8, 0, -1, 0, + 10, -5, 6, 5, 22, 10, 10, 4, -7, -12, 1, -19, -11, 4, -5, 3, -5, -9, -22, -13, -16, -12, -12, -4, 0, -5, -4, -11, -17, 1, + 3, -13, -7, 1, -3, -14, -3, -16, 9, 20, -17, -2, -2, -16, -9, -10, -5, 6, 8, 6, -7, -12, -17, -6, -5, -2, 4, 9, 16, 9, + 4, -3, -12, -6, 4, 5, -5, -19, -1, 7, 6, 5, 1, 0, 4, 1, 0, -3, 3, 12, 4, 10, 4, -4, -4, 0, -5, -7, 4, 6, + 8, 4, -9, -7, -2, 9, 9, 0, -9, 2, -1, 1, -1, -5, -6, 1, -1, 6, 10, -5, 0, 0, -10, -11, 2, -4, -4, -6, 4, 17, + 1, 8, 7, -1, -8, -2, -6, 0, -8, -3, 0, -6, 1, 6, 14, 15, 5, 3, 13, 7, 4, -1, 9, 15, 1, 11, 5, 12, 6, 1, + 2, -5, -5, 9, -12, -4, 1, -6, 4, 0, 9, 13, 21, -1, 1, -3, 7, -25, 1, 22, -12, -3, -19, -20, -1, -3, 26, 2, 20, -4, + -5, 4, 13, 2, 3, -6, -6, -4, 11, -22, -19, -8, 3, 6, -6, -31, -5, -25, -9, -5, -4, -5, 1, -6, -16, 5, 11, -1, 6, -2, + 8, 0, 12, 13, 1, -9, 3, 4, 8, 5, 2, 8, 13, 5, 7, -3, -8, 16, 12, -32, 0, -10, 12, 22, 15, 26, 34, 14, 3, 2, + 1, -13, 2, -3, -2, 8, 16, 9, 19, 36, 28, 29, 22, 12, 1, -20, -17, -5, -13, 2, 1, 3, 18, 4, -9, 2, 5, 26, 0, -15, + -25, -14, -15, -17, -13, 8, 1, 0, 9, 1, 8, 13, -3, -12, 8, 8, -4, -6, 7, 5, -6, 15, 11, -3, 8, -8, 0, 4, 7, 13, + 10, 2, 14, 10, 20, 31, 6, 15, 32, 24, 15, 4, 13, -1, -8, -17, 9, 1, -18, -10, 7, 22, 24, 25, -1, -7, 3, -24, -24, -19, + -13, 0, -16, -6, -6, 3, -4, 16, -10, -6, -3, -6, -15, -11, 4, -17, -21, -8, -14, -21, -8, -6, -3, 3, 0, -4, -6, -9, -4, 2, + -4, 4, 6, 4, 0, -4, 4, 11, 15, 13, 16, 13, 12, -2, -1, -3, -1, 10, -5, 2, 3, -1, 1, -2, -4, 1, 14, 6, 11, 11, + 7, 14, 11, -1, 6, 0, 7, 1, 4, 9, 3, 8, 1, 2, -1, -3, -11, -11, -9, -16, -16, -6, -14, -6, 2, -11, -9, -5, 0, 0, + 11, 6, -1, 6, 9, 14, 6, 11, 14, 7, 6, 3, -9, -7, -6, -7, -5, -9, -20, -23, -20, -14, -11, -10, 2, -1, -5, 12, 6, 10, + -4, 5, -6, 2, -11, -8, -9, -2, 10, 7, 12, 11, 6, 18, 9, 2, 6, 12, 7, 11, -45, 16, -63, 43, -11, 34, 5, -19, -18, 22, + 12, -6, 5, 31, -5, 0, 14, -10, -7, 11, 3, 6, 5, 15, -7, 7, 12, 27, 11, 14, -2, -1, 8, 6, 8, 1, 1, -12, -7, -2, + -1, 8, -3, 12, 14, 0, -1, 13, 3, -10, 2, 12, 11, 5, 7, 2, 12, 14, -1, -1, 1, 3, -6, 11, -21, -6, -11, -11, -11, 3, + -13, -2, 4, -3, 0, 5, 7, 5, -6, -5, -9, 2, 0, 9, -9, -1, 0, 7, 10, 15, 9, 5, -25, -21, -20, -11, -3, 2, 7, -16, + -12, -18, -11, -27, -30, -25, -26, -24, -39, -28, -23, -37, -35, -30, -16, -20, -20, -24, -20, -33, -23, -20, -15, -7, -16, -5, -10, -14, 0, -6, + -8, 11, -8, -14, -11, -24, -19, -35, -45, -54, -62, -58, -61, -39, -53, -62, -47, -55, -61, -61, -49, -32, -12, -23, -35, -36, -49, -27, -47, -47, + -47, -39, -20, -16, -38, -18, -10, 2, -9, -16, -21, -28, -28, -26, -18, 19, -11, 5, 11, -2, -9, 5, 18, 26, 14, -24, -23, -19, -17, -17, + -13, -8, 0, -1, 7, 11, 6, 10, 5, -8, -9, 2, 1, -7, 0, 4, 8, 12, 11, 4, 9, 6, 0, 7, 19, 15, 23, 26, 22, 25, + 16, 11, 2, -4, -5, -12, -17, -19, -33, -37, -50, -50, -53, -56, -50, -41, -35, -38, -24, -10, 7, 14, 22, 34, 40, 33, 20, 22, 28, 31, + 13, 6, -7, -7, -6, -4, -15, -37, -54, -73, -72, -89, -107, -110, -108, -109, -90, -88, -57, -14, 30, 81, 127, 127, 117, 111, 75, 37, -24, -56, + -73, -79, -18, 15, 26, 53, 71, 68, 55, 25, -22, -71, -75, -90, -79, -59, -69, -55, -27, 23, 19, 54, 61, 17, -79, -100, 42, -117, 114, -83, + 100, 45, -18, -18, 120, 9, 26, 8, -20, 10, -14, -38, -7, 4, -20, -3, -8, -17, 7, 5, -10, -9, 5, 18, -30, -20, -17, -9, 7, 11, + -15, -2, -4, -12, -12, 17, 1, 15, 16, 5, 3, 7, 14, 8, -4, -17, -13, 3, 4, 7, 15, 9, -1, -10, 3, -6, -12, 8, -14, 11, + 3, -3, 4, 13, 9, 8, 9, 9, 0, 0, 4, -1, -1, -1, -2, -1, 1, -6, 2, 5, 4, 6, 6, 4, 0, 3, -5, -4, 3, 6, + 1, -3, -3, 0, 3, -5, 4, 7, 4, 4, 0, 1, -8, -2, 4, 0, -9, -10, -4, -1, -9, -3, 1, 5, 1, 8, -1, -3, -2, 2, + -2, 2, 5, 1, 3, 11, 4, 4, -3, -1, 7, 8, 3, 11, 2, -3, -2, 1, -2, 0, -3, -3, 3, 2, -9, -12, 0, -8, -18, -15, + -8, -12, 4, 1, 6, -4, -1, -8, -11, 1, 2, 3, 8, 1, 12, -3, -2, -5, 1, 1, 16, 6, 3, 7, 4, 12, 7, -1, -15, -10, + 1, 1, 6, 5, 6, 4, 5, 7, -2, -2, -4, 0, -3, -2, 4, 2, 1, 10, 10, 10, 6, 3, 5, 2, -1, 3, -3, -1, 0, 2, + 2, -6, -3, -2, -2, -7, -3, 5, 6, 6, 2, -3, 1, -1, -3, -4, -3, -6, -4, -1, -7, 4, 7, 3, 1, 0, -9, -6, 2, 0, + 5, 4, 7, 1, -1, -1, -7, -2, -1, -1, 4, -2, -1, -2, 2, -8, -2, -1, -5, 0, 4, 4, 7, 8, 5, 6, 1, 6, 4, 5, + -2, 0, -2, -1, -2, -2, -2, -2, 1, 7, 7, 5, 1, -4, 3, 0, -9, -5, -5, 0, 4, 9, 5, 6, 5, 4, 5, 8, 7, -13, + -8, -4, 10, 15, 13, -5, -11, 8, 4, 6, -9, -9, -10, -1, 6, 2, 8, 0, -5, 8, 4, 10, 1, -14, 1, 6, -6, -5, -14, -6, + 3, 2, 1, -7, -3, 0, -11, -6, 0, 8, -2, 8, 3, -1, -4, 3, 12, 0, -4, -1, -1, 1, 2, -2, -15, -1, 12, 4, 6, -2, + -2, -6, 0, 2, -6, 6, -1, -2, -4, 3, -4, -3, -4, -4, -2, -5, -2, -2, 9, -5, -7, 0, 7, 7, 6, -5, -6, 0, 2, 1, + -2, -7, -10, -7, -2, -2, -7, -5, -3, -6, -4, 3, 7, 7, 7, 7, 3, -7, -1, 5, 14, 1, 0, 4, 6, 3, -1, 7, -1, 4, + 8, -2, -5, 4, -2, -13, -4, 4, 12, 6, 5, 9, 0, 1, -2, -7, 5, 1, -2, 7, -6, -5, -9, -8, -8, -8, 0, -6, 1, -9, + -1, -3, -3, -9, 5, -3, 5, 6, 2, 4, -5, -5, 5, 2, 1, -1, 2, 0, -5, -1, 8, 1, 3, 3, 6, 7, 5, 4, 4, -3, + -2, -13, 1, 3, 1, 1, -1, 2, -2, -1, -2, -3, -2, 0, -5, -1, -8, -2, -7, -4, -3, 4, 1, 2, 0, 1, 3, 3, -1, 1, + -8, -8, -5, -1, 5, 3, -4, 3, 5, 3, 1, -1, -2, -4, 2, 7, 3, 2, 3, -3, -1, -1, 2, 2, 4, -2, 2, 1, 0, 4, + 3, 1, -3, -1, 0, 3, -2, 5, 2, -3, -1, -9, -1, -3, 3, 2, -4, 0, 1, 1, 1, 8, 2, 7, 2, 1, -3, 12, 0, 4, + 8, 7, 0, -11, -5, -1, 1, 2, -7, -6, -9, -3, -6, 2, 4, 1, 5, 3, -5, -6, 1, -3, 1, -6, -1, -1, 0, 1, 5, -4, + 9, -3, 2, 6, 2, -9, 3, 1, 6, 0, -4, -25, 5, 14, 0, -13, -4, -6, 0, -2, -8, -3, 3, -8, 4, 8, 13, 2, -3, 5, + 7, 1, 3, 3, 7, 8, 5, -6, 5, -1, -8, 4, 1, 4, -1, 3, 9, 9, -1, -5, -4, 1, 3, -7, 0, 1, -3, 4, 4, 5, + 11, 14, 2, 4, -3, -7, 1, -16, -13, 0, -3, -4, 0, -9, -3, -11, -5, 2, 2, 0, -1, -1, -5, -2, -5, -11, -5, -1, -2, -6, + 0, -5, -12, -6, -7, -7, -1, -8, 11, 8, 4, 4, -3, 1, 2, 3, 2, -4, -15, -1, 1, -4, -13, 1, 2, 7, -3, -10, -15, 1, + -11, -12, 0, 1, -2, -5, 4, 3, 0, 3, 2, -5, -3, 9, -5, -4, -5, -12, -2, -2, -7, -3, -14, -2, 13, -1, 7, -5, 1, 1, + 0, -3, 5, -11, -6, 3, -12, -18, -5, 4, -8, 0, 4, -4, 7, 0, -6, -3, 3, -1, -5, 5, 0, 3, -3, 1, 3, 9, 6, 5, + 4, 6, 2, 13, -3, -4, -4, -1, -2, 5, -2, 1, 5, 1, -2, -4, -5, -1, -1, -3, 2, 3, 4, 8, 4, 5, 4, 6, 2, 3, + 5, -3, -8, -2, -2, -2, 1, 6, -1, -5, -1, -5, -8, -12, -3, 1, -1, 3, 1, 5, 1, -3, 5, -3, -2, 2, -2, 5, -1, 1, + 6, 3, 0, 5, 2, 2, -2, 1, -3, -1, 1, -3, 2, -2, 1, 4, -1, -4, 1, 12, 10, -1, 3, -1, 5, -3, -1, -3, -10, -7, + 6, -2, 6, 7, 9, 14, -2, -2, 3, 1, 8, -4, -7, -3, 2, 0, 5, 6, 4, 3, 3, 1, 4, -4, -4, 3, 6, -4, -7, 2, + -9, -3, 0, 9, 5, 3, 0, -6, 1, -1, -15, -2, -17, 11, 0, -13, -17, 6, 19, 14, -16, -12, 0, 3, 9, -3, -2, -5, -2, 8, + 6, 7, -4, -6, 3, -2, -3, 4, 5, 9, 4, -9, -11, -6, 4, 3, 0, 0, -3, 4, 1, -4, 7, 5, -2, 0, 10, 15, -8, -6, + -2, -3, -12, 0, -2, -1, 4, -3, 0, -6, -1, -4, -10, -7, 1, 8, 4, -5, 7, 12, -3, 5, 6, -2, -10, 1, -8, -10, 9, 9, + -1, -1, -2, -4, 1, -1, -5, -6, -3, -7, -3, -8, -7, -16, -18, -10, -13, -6, 5, 9, 2, -7, 4, 1, 0, 2, 2, -4, -4, 1, + 9, 2, -3, 8, 12, 0, 0, 3, -1, -4, 1, -2, -14, -1, 0, -9, -2, 3, -4, -5, 2, 12, 9, 13, 0, 2, -3, 2, -1, -6, + -1, -2, -9, -3, -2, 2, 2, 12, 0, 4, 2, 1, -3, 0, -7, -9, -1, -2, 3, 1, 17, 7, 22, 10, 8, 0, -6, -8, 0, -2, + -7, 1, -2, -12, -1, 0, -11, -11, -2, -2, -4, -3, -2, 15, 0, 5, -3, -3, -4, -6, -3, 1, -1, -1, 5, 6, 1, 0, -3, 1, + 1, 3, 7, 8, 5, 3, 1, 2, -1, 0, -1, 2, -1, 0, 1, 6, 2, 5, 3, 1, -5, -2, -2, 3, 3, 4, 1, 3, 1, 3, + -6, -6, -1, 2, 2, 0, -4, 0, 3, -1, 6, 6, -1, 3, 4, -2, 4, -5, -6, -5, 3, 4, 1, 0, 2, 3, -3, -2, -2, 7, + 1, -1, 3, -1, -1, -2, 0, 0, 1, 7, 3, 1, 2, -1, 0, -1, -3, -3, -4, 0, 6, 4, -9, 2, 4, -1, 10, 5, -1, 4, + -4, 5, 0, -5, 3, -4, -7, -2, -2, 0, -4, -2, 2, 2, 1, -6, -13, -16, 10, 14, -11, -33, 16, 22, 9, -2, -4, 7, -5, -1, + -5, 6, -14, -4, 10, 1, 6, 5, -3, 4, 9, -3, 4, -4, -5, 6, -4, 0, -13, 2, 4, -5, 0, -1, 8, -4, -5, -9, 8, 2, + -4, 1, 7, 1, 1, 0, -1, 1, 11, 3, 1, 4, 2, -11, -6, -1, -1, -1, -8, -3, 17, 1, -2, 7, 4, 3, 3, 4, 3, -9, + -3, -13, -16, -1, -10, -4, 8, -3, -6, -8, -5, -9, -6, -9, -15, -2, 0, -4, -7, -9, -3, -6, -5, -11, -10, -5, -11, -8, -14, -10, + -1, -1, 3, 3, 4, 19, 9, 4, 3, 4, 1, 1, 10, -1, 2, 9, 10, 5, 12, 5, 10, 4, 10, 4, 4, 14, 7, 12, 15, -3, + 12, 18, 12, 12, 17, 17, 12, 24, 9, 7, 11, 7, 8, 5, 6, 8, -3, -4, 10, 0, 10, 4, 0, 1, -5, -8, -18, -1, -7, 3, + -6, -6, -1, -12, -21, -19, -28, -8, -12, -10, -11, -10, -14, -12, -7, 0, -5, 6, 13, 14, 12, 7, 3, 1, 5, 3, 5, 5, 3, 6, + -1, -3, -12, -7, 5, 5, 3, 3, 5, 3, 5, 3, -3, -2, -1, 4, 2, 0, -7, -6, -12, -15, -4, -2, -7, 2, 2, 3, 3, 0, + 0, -2, -6, -1, -7, 1, 2, 2, 0, 0, 6, 1, 4, 5, 5, 3, 9, 4, 6, 5, 10, 7, 4, -1, -4, 1, 2, 2, 1, -1, + -9, -7, -9, -10, -12, -7, -5, -3, -1, 4, 7, 6, 7, -1, 1, 0, -5, 5, 8, 0, 1, 9, 2, -1, 0, -1, 3, -5, 1, 2, + 9, 4, -6, -10, -12, -13, -6, -4, 7, 2, -2, 7, 2, 7, -1, 3, 5, 9, 10, 16, 23, -27, -14, 17, 35, -34, -38, 30, 19, 5, + 0, -5, 13, -1, 6, 8, 5, 0, -5, 8, 5, 2, -5, 14, 5, 10, 7, 12, -6, 0, 8, 7, -12, -10, -3, -16, -5, 3, 4, 10, + -2, 0, 7, 13, 5, 2, 2, 4, -1, -1, 3, 1, -2, 5, 5, -6, 13, 2, -1, 2, 2, -4, 1, 0, -16, 5, -8, -8, 5, 8, + 8, 6, 19, 15, 3, 5, 3, 4, 18, 23, 19, 16, 12, -3, 1, -2, 4, 3, 0, 3, 10, 5, 2, -7, -5, -5, -6, -12, -8, -8, + -14, -21, -17, -13, -4, 8, 20, 34, 33, 24, 19, 5, 5, 7, 8, -8, -13, -9, 1, -3, -2, 5, 1, 12, 13, -3, -6, -1, -6, -6, + 5, 7, 15, 14, 6, 14, 18, 16, 22, 19, 19, 30, 22, 20, 28, 23, 17, 15, 10, 9, 20, 20, 23, 24, 8, 12, -4, -4, -1, -8, + -11, -12, -2, -11, -8, -18, -15, -14, -7, -15, -31, -23, -43, -45, -56, -39, -21, -21, -10, -7, 6, 5, 9, -6, -9, 12, 16, 16, 15, 15, + 9, 7, 4, 5, -2, -2, -1, 0, -4, 3, 6, 14, 15, 15, 5, 2, 4, 3, -3, -5, -9, -14, -17, -20, -22, -30, -26, -31, -36, -32, + -30, -27, -25, -7, 0, 11, 13, 12, 14, 14, 17, 13, 6, 10, 12, 4, 6, 5, 10, 10, 7, 12, 18, 17, 10, -6, -3, -6, -9, -12, + -8, 0, -1, -8, -5, -1, 1, 2, 3, 14, 9, 17, 14, 5, 2, 0, -10, 2, -1, -1, 16, 23, 27, 26, 17, 6, -3, -8, -12, -20, + -12, -15, -15, -1, 9, 13, 23, 28, 9, -16, -53, -84, -116, -127, -121, -102, -68, -33, 1, 25, 35, 28, 23, 10, 16, 47, -46, -16, 25, 4, + -60, -44, 85, 13, -23, -6, 22, 6, -54, 42, 16, -30, -10, 12, -4, -25, 4, 18, -4, -8, 6, -11, -9, 8, 9, 1, -3, 0, -6, -4, + -15, -11, 4, 5, 3, -1, -3, 11, 8, -3, 14, 8, 0, -10, 0, 5, -7, 0, -1, -3, 1, 0, 15, 0, 3, 3, 3, -1, 6, -20, + -7, -2, -8, -7, -3, -3, 0, -1, -1, 7, 6, 4, 0, 1, -2, 2, -1, 3, -2, -4, -2, -5, -4, -9, -7, -3, -3, 0, 1, 2, + -4, -1, -1, -3, 3, 2, -2, -1, 2, 0, -1, -2, -1, 2, 5, 8, 5, 6, 1, 3, 1, 3, 3, 7, 6, 6, 6, 3, 5, -2, + 0, 3, 5, -2, -6, -1, -2, -9, -13, -10, -5, -1, 7, 4, -6, 0, -6, -7, -9, -2, -2, 2, -2, 0, -8, -2, -4, 0, -3, -2, + -8, -6, 0, -3, -3, -12, 0, 0, -8, -11, -8, 0, -6, -4, -8, -6, 1, 2, 6, -3, -4, 6, 1, 4, -5, 4, 8, 3, 7, -2, + -1, -6, -7, -7, -1, -2, -4, 2, 2, 2, -3, -2, 0, 0, -5, -6, -4, -6, -4, -2, 0, -4, -6, -7, -1, 3, 2, -3, 5, 4, + -2, 0, 3, 4, 2, 1, 0, 4, 1, 0, -6, -3, 0, 1, 0, -2, 4, 11, 7, 3, 3, 3, 4, 7, 3, -1, 2, 5, 1, 4, + 8, 3, 6, 1, 1, -1, -2, -3, -4, -1, -1, 5, 8, 6, 3, -3, -1, 1, 2, -3, -3, -5, -7, -3, -6, -1, 0, 4, 5, 1, + 2, -2, -1, -1, 1, 3, 2, 4, 0, -8, -2, 0, 1, -4, -1, 1, 0, 4, 2, 3, 4, 4, 1, -3, 0, 0, 0, -2, 3, 1, + 25, -3, -6, 1, 20, 3, -1, -11, -7, -4, -4, 4, 1, -4, 14, 1, -1, 4, 2, 10, 7, -11, -2, 2, 12, 5, -5, 3, -2, -4, + 2, 7, -6, -7, 1, 2, 7, 3, 2, 0, 1, -3, -6, -6, -7, 1, 2, -1, 6, 5, -3, -1, -3, -2, -2, 2, 3, 2, 5, 4, + 2, -1, 6, 5, 11, -5, -2, -8, -4, 0, -6, 2, 3, 9, 3, 1, 5, 4, 1, 1, 2, 3, 4, -1, -2, 5, -8, -7, 6, 5, + 10, 0, -3, -1, -1, 3, 2, -1, -1, -5, 5, -3, -4, -6, 4, 1, 3, -2, -3, 8, 5, 3, -2, -2, 0, 1, -8, -2, 2, 4, + -2, 6, 8, -7, -8, 1, 4, 8, 7, 2, 6, 0, -2, 7, 4, 4, 7, 5, 9, 5, 5, 10, 2, 5, -5, 6, 3, 0, -4, -1, + -3, -2, 1, 0, 5, -6, -3, -2, 0, -5, 0, 1, 4, 6, 0, -6, -2, -1, -6, -3, -8, -3, -3, -3, -2, -9, 3, -1, 0, -2, + -5, -10, -10, -7, -6, 4, 0, -1, -8, -2, 1, 4, -2, 1, -4, 2, -2, -1, 3, -3, 1, 4, 9, 4, 5, -2, 3, 3, 0, 0, + -3, -2, -2, 1, -5, 1, 4, 6, 6, 3, 4, 6, 6, -2, -1, -2, 1, -4, 3, 6, -3, 2, 4, 3, 3, 5, -2, -3, 0, -4, + -3, -2, 0, 0, -1, 3, 3, -1, 3, -1, 7, 3, -5, -7, -3, 2, 2, 4, 3, 5, 1, 2, -1, 5, 0, 0, 1, -4, -5, -3, + -4, 2, 4, 5, 0, 3, -1, -4, -4, -2, 0, 6, 4, -4, -10, -3, 4, 2, 0, 11, 5, 2, 5, -4, -4, -2, 1, 5, 0, 1, + 0, -5, -9, -5, -3, 20, -7, -3, 1, 8, 3, 2, -1, -6, -4, -1, 6, 0, -6, -7, -9, 6, 5, 7, 0, -6, -8, -5, -10, -4, + 6, -2, -5, 4, 4, 7, -6, 2, -3, -1, -3, -1, 4, 3, -1, 3, -3, -4, -12, -2, -3, 1, 4, -6, 5, -1, -1, 2, 0, 2, + 4, 2, -5, -3, -1, -7, 1, -5, -5, 22, 1, -1, 5, -1, -1, -2, -1, 6, 3, 8, 10, 1, -4, 0, -3, -4, -6, -1, -1, -5, + 6, 3, -6, -2, -6, -2, 4, 4, 3, 5, -4, 2, -3, -1, 0, -1, -7, -5, -6, -1, -8, -3, -2, 2, 1, 6, 5, 6, 7, 7, + 4, -3, -1, 1, -2, 1, 4, 0, -3, 7, 3, 4, 5, 6, -7, -3, 6, -1, 2, 8, 1, 9, 10, 1, 12, -6, 3, 7, 4, 10, + -5, 3, 6, -5, 2, 0, -5, 0, 6, -7, 1, -2, 2, 0, 12, 4, 0, 4, -5, -3, 2, -4, -3, -8, -1, -3, 0, 3, 6, -3, + -5, -5, -3, 0, -5, -1, -2, -3, -9, -7, -5, 0, 2, 5, 6, 4, 6, 6, 1, 4, 3, 3, 0, 1, 2, 5, -2, 1, -1, 1, + 1, -3, -5, -6, 1, 2, -1, 2, -3, -3, 1, 2, 2, 4, 2, 4, 5, 1, 1, 1, -2, -3, 1, 4, -1, -1, -1, -1, 0, -1, + -4, -5, -7, -2, 3, 0, 1, 1, 0, 2, -8, 1, -3, -1, 1, -3, -1, 5, 8, 8, -3, -4, 4, -6, -5, -8, -5, 0, -3, -3, + -2, 4, 0, 4, 1, 1, 8, 3, 4, -4, 4, -3, -8, -7, 2, 2, 1, 5, -1, -2, -1, 1, 1, 4, 10, 0, 0, 2, -2, -2, + 1, 1, -3, -3, 0, 7, 2, -2, -1, -2, 15, -10, 0, -4, -3, 1, -3, -10, -5, -4, 6, 7, 1, -7, 13, -4, 4, 6, 6, -2, + 3, -7, -1, -8, -8, 2, 0, 1, 2, -2, -5, 2, -4, -7, 1, 3, -7, 3, -1, 7, 4, -2, -2, -6, -3, -2, -4, 1, 2, 6, + 8, 2, 1, 0, 0, 7, 10, 1, -1, -1, 5, 1, -5, -2, 24, 8, 0, 9, 6, 4, 6, 5, 6, 2, -2, 9, 1, -3, 6, 5, + 2, -4, -7, -3, -2, 1, 9, 9, 8, 8, 3, 1, 1, 5, 15, 1, 4, 7, 6, 6, -1, -4, -1, -9, -10, -9, 0, -5, 3, -1, + 3, -4, -5, 0, 2, 3, -5, -4, -14, -9, 0, 5, 0, -3, 1, -2, 2, 3, -2, -4, 5, 6, 13, 11, 10, 5, 7, -3, -4, 5, + -2, -12, 1, -1, 2, -2, -3, 8, -3, 2, 0, 11, 4, 5, 5, 9, -2, -3, 4, 7, 3, 5, 1, -2, -3, -3, 10, -1, 1, -2, + -3, -2, 5, -8, 0, -4, -5, -8, -8, -2, 1, 1, -1, -7, -12, 3, 2, 1, -2, -3, -3, -5, -4, -5, -5, -4, -2, -4, -1, 0, + -2, -4, -6, -4, 1, 3, -3, -4, -8, -6, -8, 0, -3, 0, 2, 3, 7, 6, 3, 3, 0, 7, 6, 4, -2, -2, -1, 2, -2, -2, + 0, -1, -4, 2, 1, 1, -2, -4, -6, -2, 0, 3, -2, 1, 1, -1, 4, 2, -2, 1, 5, -2, -4, -4, 1, 0, -3, -9, -6, -3, + -2, -1, 4, 0, 0, 0, -8, 3, 0, 5, 2, 3, -3, 1, 0, 0, -1, -2, -1, -5, -6, -11, 7, -2, -2, -5, 6, 3, -1, -1, + 1, -5, -4, 1, 5, 0, 2, 5, -5, 1, 4, 5, 5, 5, 1, 15, -11, -4, -4, 7, -10, -8, -15, -8, -11, 0, 5, 12, 10, 12, + 0, -3, 9, 9, 4, -5, -1, 1, -2, -3, -1, -4, 1, 8, -5, 4, 0, -1, -4, 7, -1, -1, 0, 4, -2, 1, 0, -3, -5, -3, + -5, -2, -4, -2, -2, 1, 0, 0, 1, 0, 7, 8, 10, -10, -3, 2, -7, -9, -2, 22, -11, -4, -3, -1, 4, 6, 15, 6, 7, 1, + 12, 5, 4, 4, 5, -7, -1, 2, 8, -4, -6, 1, 1, 9, 2, 11, -5, 7, 5, 9, 8, 9, 14, 14, 16, 10, 8, 9, 5, 5, + -2, -3, 4, 7, 1, 1, -3, 2, 6, 2, -1, -1, 2, 1, -7, -3, -2, -5, -3, 4, 1, -4, 7, 13, 10, 11, 9, 12, 10, 1, + 3, -3, -6, 1, -2, -2, -8, -2, 3, 1, 1, 0, 8, 6, 9, 4, 0, -5, 1, -6, -3, -8, -8, 2, -4, 2, -4, 6, -14, 2, + -8, -5, -1, -1, -3, 6, -1, 4, 0, -4, 6, 3, -6, -7, -6, -3, -3, -4, -10, -12, -5, 0, -3, 0, -2, -3, 0, 0, 4, 3, + 1, -1, -2, 0, -2, 2, 5, 2, 2, 3, 3, 4, -2, -4, -2, -2, -4, 3, 6, 3, 2, 5, 5, 1, 2, 1, -1, -2, 0, 1, + -3, -5, -1, -4, -2, -5, 0, 4, -1, 0, -3, -2, 0, 3, -1, -2, 1, 4, 0, 1, 3, 6, 6, 3, -1, 3, 4, 6, 7, 4, + -1, 6, 0, 5, 4, 4, 3, 0, -2, -3, 4, 5, -2, -5, -2, -1, 1, 5, 5, 2, -5, -2, 0, 2, 2, 0, 3, -1, 1, 6, + 4, 5, 4, -1, 1, 0, -3, 1, 0, -1, 5, 4, 1, 0, 3, 6, 4, 2, 3, -5, 61, -13, -5, -2, 16, -12, -18, -3, 1, -26, + -1, 3, -5, 0, 6, -3, -12, 7, 0, -7, 0, 0, -3, 9, -5, -2, 9, -1, 3, 0, 5, -4, -8, -1, 9, 2, -2, 5, 4, 6, + 1, 0, -1, 3, -1, -2, 1, 3, 5, 1, 7, -1, 2, 2, 12, 6, 2, 0, -6, 2, 7, -5, -2, 7, -3, 27, 24, 20, 17, 15, + 14, 12, 12, 9, 5, 8, 5, 2, 9, 12, 13, 11, 16, 13, 10, 13, 15, 13, 17, 7, 0, 4, -1, -12, -6, -13, -16, -12, -17, -19, + -13, -11, -10, -10, -7, 4, 18, 28, 28, 31, 39, 37, 34, 24, 22, 19, 15, 19, 12, 7, 7, 14, 14, 18, 22, 20, 18, 23, 17, 16, + 16, 19, 15, 18, 18, 4, 5, 9, 0, 7, 6, 7, 12, 5, 7, 4, 8, 9, 3, 0, 4, 6, 6, 1, 8, 6, 1, -2, -2, -1, + -7, -6, -5, -5, -3, -12, -4, -10, -14, -15, -6, -9, -9, -12, -19, -4, 0, -2, -18, -16, -16, -9, 2, -3, -14, 10, 10, 4, 7, -1, + 0, -4, -3, -1, -2, -4, -4, -6, -6, -6, -4, -6, -1, 5, 5, 8, 2, 5, 4, 3, 5, 1, 3, -1, -7, -4, -5, -9, -10, -7, + -3, -3, -6, -3, -2, 2, 7, 13, 16, 16, 17, 15, 12, 7, 6, 4, 4, -2, -1, 2, 4, 8, 2, 6, 6, 2, 7, 7, 1, 1, + 0, 4, 3, 8, 3, -1, 3, 7, 3, 9, 7, 11, 5, 3, -2, -2, 1, 0, 3, 3, 14, 21, 23, 26, 27, 24, 22, 15, 13, 17, + 11, 8, 13, 13, 8, 6, 5, 2, 0, -3, -4, -10, -12, -19, -23, -30, -30, -25, -24, -16, -11, -13, -14, -15, -11, 107, -96, -53, 127, 71, + -59, -42, 60, 10, -68, 0, 55, -15, -30, 29, -4, -28, 11, -2, -21, -4, 6, -3, 1, 3, -2, -2, 8, 6, -2, 4, 0, -9, -10, -11, + -3, -14, -16, -6, -4, -2, -2, -3, -5, -4, -3, -2, 4, 0, 6, 4, -2, 6, -3, -2, -5, 1, 9, 1, -2, 1, 2, -2, 8, -8, + -1, 1, 2, 6, -2, 1, 3, 2, 2, -2, -3, 3, 6, 5, 2, 0, 2, 1, 3, 0, -5, -3, -2, 2, 1, -2, 4, 8, 8, 2, + 2, 1, 5, -6, 0, 4, 7, 2, 6, 1, 7, 1, -7, -8, 5, 1, 4, 0, 5, -1, 1, 0, 4, 0, 0, -11, -3, -2, 3, -6, + -4, -6, -6, 2, 4, 0, -4, -8, -7, -6, -1, -2, -6, 7, -2, 0, -3, 0, -8, -9, 0, -10, -6, 7, 6, 4, 4, -7, -5, -1, + -6, 0, -7, 6, -6, -1, 3, 0, -1, 0, -8, 3, 0, -5, 6, -2, 3, 1, 10, -4, -2, 12, 2, -3, 1, 0, 3, 7, 10, 3, + 3, 2, 3, 1, 0, 0, 5, 2, 4, -1, 0, -1, 2, 2, 3, 3, 0, 2, -1, 2, 3, -2, -1, 1, 3, 0, -3, -6, -3, 1, + 0, 2, -1, -1, -2, 0, 1, 5, -1, -5, -3, 0, -7, 1, -2, 0, 1, 1, -4, 0, -3, -1, -1, -8, 0, 1, 1, -2, 4, 3, + 6, 6, 1, 5, 1, 5, -1, 2, 0, -2, 3, -2, 0, 0, 1, -1, 2, 3, -4, 0, -1, -1, -10, -6, -6, -3, 1, 5, 5, -2, + 2, -2, -5, 1, -2, 2, 2, 9, -2, 3, -3, 5, 1, -1, 2, -1, -2, 0, 1, 4, -2, 4, 5, -1, 1, -4, 4, -5, -6, 2, + 11, 21, 9, 6, 2, -3, -3, 3, 1, -4, 0, -2, 7, 5, 6, -13, -4, 0, 0, -1, 0, 2, 3, 4, 5, -4, -13, -6, -3, 2, + 2, 3, 5, 8, 0, -3, 1, -4, -4, -1, 7, 1, -1, -7, -1, 0, 4, 3, 1, 6, 8, 1, 3, -1, -1, -2, 9, -4, 3, 1, + -7, -2, -3, 6, -4, 1, -1, 5, -2, 1, 0, -1, -2, 0, -1, -4, 2, -1, -1, -4, -3, -4, 5, 2, 1, -3, -4, -1, 4, -2, + -3, 1, -8, 3, -3, -8, -2, -5, -5, 1, -2, 4, -1, -3, 3, 1, -6, -8, -1, 3, -1, 3, 5, -4, -9, -4, -6, -5, 2, 3, + -7, -4, 1, -3, -8, -1, -6, 2, 1, -4, -4, -3, -8, -1, -3, -8, 10, 3, -3, 4, -1, 6, 4, -1, 3, 2, 4, 2, 4, 6, + 5, 8, 2, -1, 12, -2, 6, -6, 2, -9, 2, 8, 11, 2, 3, 0, -1, -7, -2, 3, -5, -10, -10, -4, 0, -3, 2, -4, 0, 2, + -2, 5, 3, 1, -2, 3, 2, 1, -4, 0, -4, -2, -1, 1, 1, 0, 0, 4, -3, 1, 1, -1, 2, 3, -1, -1, 1, 2, 3, -2, + 1, 1, 2, 3, 2, 0, 4, 0, 2, 0, 0, 2, -1, 3, 1, -1, 1, -4, -4, -1, 1, -2, -1, -5, -4, -4, -4, -1, -5, -2, + -2, 2, 0, 3, 6, 7, 3, 2, 0, 3, 0, 1, 4, -1, 1, 0, -5, -6, -2, -4, 0, 4, 7, 4, -2, 4, 6, -1, -1, -3, + -5, 0, 5, 4, -3, -8, -2, -2, 2, 1, 3, 5, 7, 0, 0, -2, 3, -2, 3, -1, 0, 3, 3, 2, -1, -6, -4, -6, 0, -5, + 2, 1, -3, -6, -8, 5, 20, 1, 7, 1, 2, -11, -1, -8, -9, -2, 2, 8, 1, 0, 3, -1, 5, -6, 1, -4, 3, 0, -5, 7, + -3, -3, 2, 4, 5, -7, -1, -1, -1, -2, 3, -4, -7, 0, -1, 7, 3, 7, -1, 2, 0, 2, 8, -3, 2, 3, 6, 8, -1, -6, + 2, -2, 3, 0, 1, -3, -3, -1, 1, -3, -3, 2, -5, -1, -5, -5, -2, -2, -5, -1, -8, -4, -10, -1, -5, -6, -4, 4, -4, -4, + -7, -5, -9, -2, -1, 2, -4, -9, -3, -8, -5, -5, 0, 0, -1, 1, -10, -16, -13, -3, 6, -2, -11, -9, -4, -2, -1, 0, 2, 3, + 1, 1, -5, -2, 3, -8, 3, 4, 8, 3, 5, 0, 5, 0, -1, 1, -2, -3, 1, -1, -2, 1, -5, 1, 1, 1, -1, -4, 2, -2, + 2, 1, 1, -1, -4, 4, -3, -4, 1, 5, -3, 3, 1, 2, -1, 0, 6, -2, -2, -1, -1, 0, -4, 8, 2, 11, 9, 4, 3, -5, + -4, 9, 2, -5, 4, -5, 3, -2, 3, 2, 3, 2, 2, 1, 3, 6, 5, 5, 3, 4, 6, 2, 0, 2, 0, 0, 1, 3, -2, -1, + 3, 0, -2, -4, -3, 1, 1, 4, -1, -3, 1, -1, -4, -1, -1, 0, -3, -2, -5, -6, -4, 0, -2, -2, 1, 2, 2, -1, 6, 3, + -2, -4, -6, -4, -2, -7, -6, -2, 0, -3, -2, 1, -1, -1, -1, 4, -4, -6, 1, 6, 2, 1, 2, 0, 2, -3, 2, -1, 5, 0, + -3, 9, 1, 4, 6, -2, 4, 5, -2, 6, 4, -4, 5, 2, -4, 4, 5, 2, -1, -5, -2, 5, 3, 0, -1, -5, -2, -3, -1, -4, + -6, 1, -2, -3, 0, 4, 0, -5, -4, -4, -2, 20, 8, -1, 6, -12, -9, -1, -6, -2, 3, 5, -1, 1, 0, 1, -2, -10, -5, 7, + 6, 9, 3, -3, -4, 1, -9, -6, -2, -3, -5, -7, -1, 8, 3, 5, 3, -1, -4, -2, 0, -5, -3, 9, 1, -2, 8, -2, -4, 5, + 5, -4, -1, 2, 3, -5, 0, -2, -2, 5, -5, 0, -2, 0, 5, 1, 5, -1, 3, 4, 3, 2, 3, 4, -1, 2, -2, -2, 2, -1, + -4, 1, 4, -3, -3, 3, -1, -4, -2, 6, 14, 11, 4, -9, -8, 0, -10, -8, -6, 4, 6, -2, -3, 0, 7, 3, 3, 6, 5, -4, + -2, 2, 7, -5, -8, 0, 2, -4, 1, -2, -4, -1, 4, 6, 7, -4, -1, 7, 2, -8, -1, -4, -4, -5, -6, -3, -5, -3, -8, -10, + -3, -4, -8, -5, -4, 3, -1, -2, 1, 2, 4, -1, -7, 0, -9, -7, -5, -1, -3, -6, -4, 2, 0, -1, 0, 4, 8, 10, 9, 5, + -3, 0, -4, 5, 7, 8, 8, 6, -9, 0, 0, 2, -2, -12, 1, 6, 7, 0, 2, -1, 1, 4, 6, 3, 7, 7, 1, -2, -2, -3, + -3, 0, -5, -4, 4, 3, 4, 6, 7, 4, 4, 0, 0, -2, 2, -4, -5, 0, -3, 1, -4, -2, -1, 0, -2, 0, 4, 4, -1, -1, + -1, -3, 3, 5, 1, 4, 1, -2, -3, 2, 0, 1, 3, 2, -2, -2, -2, -1, -6, -6, 2, 2, -2, 3, 0, 0, 3, 2, 0, 2, + 0, -4, -3, -5, -6, -1, 1, 0, 2, 3, -2, 0, 1, 5, 2, 1, 0, 3, 4, -1, -5, 3, -3, -2, 2, 2, 6, 3, 2, 5, + -6, -9, 0, -2, -3, 0, 2, 8, 4, 3, -4, -4, -7, -6, -1, -5, 8, 0, -10, -1, -14, -6, -6, -8, -2, 6, 11, -1, 1, 0, + 3, 2, -8, 4, 3, 7, 2, -4, 2, 4, -2, -11, -6, -1, 5, 5, 9, 7, 4, -2, 7, 5, -2, -1, -1, -4, -2, -5, -2, -8, + 5, -3, -1, 6, 7, 3, 5, 8, -1, -3, -4, 1, 5, 3, 5, -7, -6, -2, -3, 2, -7, -4, -3, -1, -2, 3, 2, -6, 1, 0, + -4, 1, -2, -3, -8, -5, 6, -6, -3, -6, 4, 7, 9, 4, 2, 2, -3, 1, 3, 3, 7, -1, 1, -2, -3, -5, -11, -2, -5, -11, + -20, -17, -7, -5, -7, -9, -11, -6, 2, 2, 9, 11, 9, 11, 7, 4, 10, 7, 4, 4, 6, 11, 4, -3, -1, -2, -5, 2, -4, -7, + -5, -4, 0, -5, -4, -11, -11, -5, -2, -2, -2, -4, 2, -6, -7, -12, -4, -11, -2, -9, 3, -6, -3, -6, -2, 4, 2, 11, 10, 11, + 9, 11, 17, 1, 9, 2, -1, 3, 3, 0, -3, -7, -12, -9, -6, -12, -9, -3, -5, -8, -4, 1, -2, -2, -5, -2, -4, 2, 2, 8, + 2, 4, 2, 4, 5, 2, 2, 0, 1, 4, 6, 1, 5, -2, -3, -4, -1, -2, -1, 0, 3, 2, -1, -1, 2, 0, 6, 3, 3, 0, + -4, -4, -4, 1, 1, -4, -2, 5, 2, 2, -2, -3, 0, -1, -1, -2, 0, 7, 3, 0, -1, 6, 8, 7, 4, 9, 4, 2, 4, 8, + 4, 4, 3, -2, -2, -2, -3, -4, 4, 1, 0, -2, 6, 0, 8, 7, 7, 3, 3, 7, 4, 0, 4, 3, 7, 7, 11, 4, 5, 9, + 10, 11, 11, 12, 3, 5, 1, 1, -6, -4, -5, -3, -4, 1, -7, -3, -5, 1, 11, 14, -21, -16, 9, -10, -3, 24, 7, -6, -1, 10, + 14, 12, 1, -3, -13, 6, 6, -6, -17, -2, 2, 15, -7, 1, 2, 2, 5, -6, -9, -8, -8, 3, 2, 4, 1, 6, -1, 1, 2, 11, + 8, 2, -2, -6, -1, -9, 0, 5, 7, 10, 4, 5, 3, -10, 2, -1, -2, -2, -2, 3, 6, 3, -6, -1, 22, 2, 3, 1, 0, -2, + -4, -4, -7, -7, -4, -2, -4, -4, -3, 2, 3, 16, 18, 13, 8, 2, 4, 1, 7, 8, 4, -1, -5, -10, -10, -7, -10, -7, 0, -6, + -10, -9, -7, -1, -1, -9, -4, 3, 1, 3, -1, 0, 4, 3, 0, 0, -2, -10, -15, -8, -5, -4, -11, -14, -9, -14, -8, -6, -12, -18, + -16, -10, -8, -5, 0, -6, 1, 4, 9, 12, 15, 11, 9, 18, 18, 15, 8, 13, 13, 13, 3, 11, 7, 11, 11, 1, -11, -14, -18, -19, + -12, -3, -14, -16, -11, -15, -17, -7, -26, -15, -13, -18, -18, -28, -26, -18, -16, -17, 2, -5, 10, -8, 2, 7, 6, -3, -5, -4, -4, -2, + -5, -4, -9, -4, -2, 0, 3, 4, 0, 4, 3, 9, 8, 10, 10, 10, 3, 4, -2, -1, -5, -6, -12, -8, -9, -4, -8, -6, -8, -6, + 0, 9, 13, 8, 8, 6, 8, 8, 8, 8, 11, 14, 13, 7, 6, 4, -3, -4, -7, -12, -12, -10, 0, -2, 0, -2, 4, 7, 6, 9, + 6, 5, 10, 11, 9, 5, 4, 9, 10, 12, 16, 10, 11, 13, 10, 9, 1, 0, -7, -9, -16, -17, -21, -7, 1, 9, 23, 24, 32, 37, + 30, 14, -18, -48, -68, -85, -75, -59, -50, -21, 0, 15, 13, -2, 7, 7, 5, 8, 14, 14, 3, -14, -17, -24, -26, -27, -81, 50, -67, -59, + 127, -57, -48, 63, -48, -6, 42, -10, 9, -18, -40, 29, 8, -40, -13, 0, 8, -4, -16, -16, 6, 1, -16, -7, -9, -15, -3, -10, 10, 0, + -7, -9, 7, 0, -4, -5, 5, -8, -6, 0, 3, -2, -2, -5, -7, -9, -7, -10, -15, -13, -14, -22, -11, -8, -12, -12, -8, -7, -14, 48, + 9, 1, 2, -9, -3, -2, 6, 4, 12, 10, 10, 12, 13, -1, 4, -1, 2, 1, 1, 2, -5, -5, -5, -2, 0, 2, -7, 6, 2, -1, + 7, 6, 3, 7, 4, 3, 3, 0, -3, -2, 5, 4, 4, 3, 1, 0, 4, -3, 2, -5, -4, -5, -2, 4, 8, 4, 8, 11, 10, 4, + -5, -5, -5, -1, 4, 4, 2, 11, 4, 7, 3, 6, 2, -3, -8, -14, -2, -3, 2, -1, -1, -3, -7, -14, -11, -16, -10, -8, -3, -2, + -2, -7, -26, -17, -14, 1, -16, -7, -6, 6, -1, 1, 25, 13, -3, 2, -15, -18, -12, -6, -6, -1, -8, -2, 1, 8, 9, 12, 7, 12, + -11, -9, -4, 3, -4, -1, 1, -4, 4, 0, -1, -2, -5, 4, 10, 4, 9, 5, -1, 0, 0, 0, -5, -4, -9, -8, 2, 4, 2, 0, + 0, -3, -3, 0, 0, 3, 6, 7, 15, 13, 8, 9, 10, 5, 6, 4, 5, 7, 5, 3, 1, -8, -9, -5, 1, -4, -2, 12, 15, 10, + 12, 2, 6, 11, 12, 12, 3, 11, 5, 7, 5, 3, 2, -4, -4, -9, -14, -15, -8, -9, -11, -12, -19, -6, -8, -5, -7, -5, -12, -7, + -9, -9, -24, -17, -13, 4, 6, 9, 8, 6, 0, -7, 6, 19, 17, 4, -1, 8, 11, 5, 10, -5, -11, -5, -6, -3, -4, -3, -16, -22, + 3, 31, -14, 11, 35, 6, -5, 0, 15, -3, 2, -5, -8, 12, -3, 5, -4, -8, -15, -15, 4, -3, -6, -1, -4, 17, 2, 17, 13, -5, + 12, 2, -6, 12, 5, -16, 1, -4, -1, 5, -6, -8, -8, -4, -9, -2, 8, -14, -4, 5, 7, -8, -6, -5, 8, 11, 13, 19, 13, 6, + 3, 0, -8, -9, 24, -11, -8, -5, -3, 5, 1, 1, 0, 14, 5, 9, 5, -1, -8, 1, 3, -4, 5, 15, 3, 9, -3, 1, 4, 5, + 15, 7, 3, -1, -2, 8, 10, 4, 4, 5, 6, -5, -5, -4, 8, 9, 6, 5, 12, 9, -10, -5, 0, -1, 6, 8, 3, -3, 8, 2, + -4, -2, 4, -7, 0, 4, -8, -10, 1, -6, 2, -6, -11, -4, -7, 6, -3, -6, 11, -10, -11, 1, 5, 2, -2, -4, -16, 4, -3, 0, + -11, 2, 14, -1, 11, 0, -3, -19, -16, -28, -3, -14, -5, 0, 6, -3, -7, -23, -4, -13, 3, 0, 10, 0, -4, 7, -7, -5, 1, 2, + 5, 8, 3, 5, -10, -16, -11, -9, -3, 2, 3, 8, 7, 9, 4, 4, 4, -5, -5, -6, -1, 6, 8, 7, 0, -5, 0, 6, 6, 4, + -4, -1, -3, -4, 2, 6, -1, -8, -8, -4, -3, -9, -12, -12, -9, -11, -1, 1, -5, 0, -1, 3, 8, -7, -1, 8, -10, -13, -7, -13, + -20, -4, -2, -6, -9, -12, 2, 10, 15, 14, 2, 6, -3, 1, -1, -4, -5, 2, 8, -8, 0, -16, 8, 9, 12, 13, 5, 5, 4, -9, + -3, 0, 12, 4, 10, -2, -6, -5, -6, -2, -5, -14, 0, -3, 3, -6, -7, 2, 1, 6, 7, 4, 13, 5, 5, 5, 1, 7, 4, -4, + -8, -9, -2, -7, -22, 9, 12, -4, 19, 39, 13, 5, 17, -3, -23, -10, -8, -13, 6, 16, -4, -10, -15, -24, -18, -1, -7, 8, 2, 8, + 12, 4, 7, -4, -4, 5, 0, -2, 1, -5, 7, -6, 7, 8, 9, 11, -4, 2, 6, -3, -4, -3, -9, 2, -4, -6, -4, -3, 2, 13, + 9, 11, 20, 8, -5, 9, 2, 1, 2, 14, -13, -7, -20, -8, 5, 26, 30, 4, 6, -8, -10, -3, 4, 13, 7, -4, -8, -6, 6, 12, + 11, -14, -5, 1, 4, 20, 1, 5, 10, 0, -1, -4, -4, -9, -2, 0, -1, 4, 13, 15, 2, 6, 2, 4, -5, -10, -15, -19, -8, -4, + 8, 10, 9, 5, 13, 9, -2, -1, -5, 2, -8, -24, -13, -12, -5, 9, -8, -1, 2, -11, 2, 4, 2, 3, -2, -10, -13, 6, 8, -9, + 0, -6, 6, 15, 23, 12, 11, 22, 11, 1, 1, 3, -13, -21, -8, 10, 13, 21, 9, 18, 1, -16, -3, -8, -7, 0, -7, -11, -5, -8, + -7, -8, -10, 13, -3, -1, 3, 2, 14, 11, -14, -11, -4, -2, 5, 2, 5, -2, -2, -5, -6, -10, -12, -7, -3, -7, -7, -6, -1, 1, + 1, 2, -1, -1, 5, -3, -5, -2, -5, -1, 4, 2, 3, 7, 1, 5, -4, -8, 1, -2, 2, -1, -3, 1, -4, 3, -1, 13, -2, -2, + 2, -7, -5, 1, -8, -9, 6, -5, 5, 13, 8, 6, 0, 5, 6, -7, 6, 3, -1, -5, -1, 12, 6, 2, 4, -7, 5, 15, 1, 3, + -5, 11, -1, 14, 3, 4, 8, 6, 0, 5, -11, -3, -13, -9, 0, -7, 0, 10, 6, -1, 3, 1, -1, -2, 3, -7, 0, 1, 1, -3, + 8, -11, -20, -10, -12, -13, -5, 2, -6, -5, 8, 0, -11, 24, 22, -4, -1, -12, -4, -6, 8, 5, -5, -3, 13, 2, -4, -12, -28, 0, + 2, -9, 5, -2, 10, 12, 13, 12, 13, 9, 3, -1, -4, -4, 2, -5, -3, 16, 10, -1, 5, -9, 6, 8, -2, 10, -1, -7, 1, 9, + -8, -3, 3, -1, 8, 10, 14, 10, 9, 0, -5, -5, -5, -2, -4, 11, 4, -3, -3, 0, 0, 11, 17, 2, -2, 8, -7, 0, 6, 9, + 0, -10, 4, 3, 12, 19, 5, 4, 1, -16, -8, -7, 7, 10, 6, -11, -8, 1, 1, -3, -5, -4, 12, -6, 6, -14, 0, -6, 0, -4, + -4, -12, -21, -18, -4, -6, 0, -2, -8, -5, -6, -13, -17, -10, -2, -10, -12, -3, -1, 0, 8, 5, 5, 7, 4, 0, -7, -7, -6, -8, + -15, -7, 3, 6, -6, 1, -13, 16, 2, 3, 6, -1, -3, -10, 7, -1, -12, -8, -25, -11, -9, -14, 2, 7, 7, 10, -1, -9, 9, -13, + -6, -9, -4, 1, 4, 6, 12, -6, 2, 1, 3, -6, -4, 3, 7, -1, 4, 5, -1, 1, 3, 8, 6, -6, -7, -3, -2, -4, -4, -6, + -13, -16, -14, -6, -3, 7, 0, -10, -11, -9, 4, 9, 6, 5, 1, 4, 3, -4, 4, 7, 12, 3, -5, -4, -4, -15, -9, 2, 2, -2, + 5, -1, -6, -3, -6, -5, 12, 9, 13, -1, 1, -7, -2, -1, 7, -3, 4, 3, 3, -1, -1, -1, 4, -3, 2, -5, -1, -10, -1, 7, + -2, -9, -2, -7, -9, -6, -4, 15, 11, 6, 12, -3, -2, -1, 2, 7, 5, 11, 13, 4, -7, -13, -15, -3, -8, -6, -6, 8, 13, 0, + 10, 6, 10, 3, 10, 0, -1, -9, -7, -11, -3, -3, 4, -3, -6, 6, -1, -12, 18, 17, -7, -6, -24, -7, -20, 7, 5, -2, 10, 12, + -1, -9, -12, -17, -9, -2, -4, 21, -4, 3, 0, 0, 0, 5, 0, 1, 10, -4, -9, -10, 2, 5, 5, 8, -3, -3, 1, -13, -2, -13, + -1, 0, -15, 3, -3, -7, -5, -2, -4, 1, 10, 6, 6, 11, 7, -4, -6, -6, -18, -32, -6, 1, -4, -1, -7, 15, 22, 26, 25, 6, + 10, -1, 15, 6, 19, 19, 8, 8, -5, -2, 12, 4, 6, -18, -13, -20, -17, -3, -1, -10, -14, -7, -10, -12, -6, 1, -7, 9, -8, 1, + -9, -4, -17, 4, 3, 0, -3, -8, -16, -15, -20, -6, 3, -10, -9, -12, -13, -7, -6, 2, 3, 4, -11, -11, -6, -5, 4, 8, -6, -6, + -1, -10, -3, 1, -14, -15, -20, -4, 2, 0, 19, -8, 12, -7, 4, -2, -1, -14, -9, -11, -2, -12, 1, -21, 10, -6, 8, 11, 10, 3, + 15, -4, 0, 2, 0, 2, 5, 5, 0, 7, 11, 9, 6, 4, 0, 1, -13, -9, -1, -1, -12, -10, -6, 3, -2, 5, -1, 1, 7, 6, + 3, 5, 0, 0, -3, -5, -5, -14, -8, -4, -3, 1, 2, 2, 1, 2, 3, 2, 7, 1, 3, -2, -8, -8, -7, -5, -6, -12, 0, 6, + -1, -1, 6, -1, -6, -6, -14, -15, -15, -18, -10, -6, -6, -13, -12, -8, -1, -8, -3, -4, -4, 1, -3, -8, 6, 5, 14, 4, -2, -3, + -10, -13, -12, -8, 0, -6, 1, 0, 7, 8, 3, 0, 15, 15, 0, 9, 7, 8, 9, 20, 26, 17, 1, 1, 1, 4, 5, 14, 9, 7, + 5, 10, 10, 9, 7, 7, 10, 17, 10, 6, 7, 4, -11, -12, -20, -5, 5, 0, -2, 8, -4, -15, -25, 5, 0, 3, -19, -14, -15, -26, + -9, 23, 0, 9, 19, 1, 0, -16, -11, 3, -9, 1, 14, -13, -7, 6, 1, 8, 7, 0, -11, -2, 4, -3, -18, -9, -3, 5, 3, -10, + 3, 2, -6, -17, -6, -5, 3, -4, 5, 0, -1, 0, 3, -1, 0, 12, 15, 4, 0, -2, -10, -8, -5, -13, -58, 6, 12, 7, 2, 3, + 14, 15, 9, 14, 17, 21, 22, 17, 4, 15, 12, -9, -5, -15, -14, 2, 8, 15, 5, -15, -14, 0, 9, 5, -6, -1, 2, 11, 10, -4, + 6, 14, 19, 6, -1, -12, -13, -14, -22, -14, -5, 14, 10, 0, -15, -14, -24, -21, -17, -23, -21, -19, -18, -17, -4, 3, -3, 3, -13, -26, + -15, -18, -10, -5, -16, -9, -12, -13, 0, -27, -22, -14, -6, 22, 6, 10, 24, 20, -3, 2, -23, -16, -18, -28, -16, 3, 4, 10, -4, 2, + -14, -12, -24, -15, -23, -14, -7, 8, -5, 2, 8, 7, 24, 11, 22, 7, 1, 21, 1, 11, 8, -4, -2, 10, 25, -33, -21, -10, -1, 0, + 3, 2, 10, 7, 4, 3, -1, 2, 1, -8, -2, -10, -15, -10, -6, -6, -4, -6, -6, -12, -1, 4, 3, 8, 7, 2, 2, -1, 4, 9, + 9, 0, 3, 2, -4, -8, -8, -1, -4, -10, 0, 8, -1, -12, -18, -12, -10, -10, -6, -12, -10, -13, -19, -14, -7, -2, 1, 3, 8, 6, + 9, 23, 19, 13, 7, 7, 8, 7, 5, 13, 12, 17, 20, 24, 33, 33, 26, 23, 12, 4, 5, 3, 0, 0, -4, 5, -10, -4, -5, 6, + 3, -4, -8, -11, -21, -6, -8, -7, -5, -1, -9, -6, -1, -3, 1, 9, 6, 5, 11, 14, 12, 21, 39, 48, 50, -88, 32, -97, -123, -127, + -90, 8, -46, -75, -55, -4, 4, -11, -29, 6, -31, -7, -20, -10, 14, -10, -18, -9, -3, 1, 9, 2, -1, 4, -1, 3, -7, -2, -6, -16, + 0, 6, -2, 4, 6, 1, -7, -12, -4, 8, 5, -6, -10, -5, -4, -9, 9, 13, 1, 11, 13, 16, 9, -9, 0, -18, -17, -12, -3, -47, + 4, 2, -7, -4, 2, 3, 3, 3, -1, 2, -3, -6, -2, 2, 1, -2, 5, -3, 0, 7, 5, -1, 0, -5, -3, 3, 1, 0, -5, -2, + 1, 1, -1, 5, -2, 1, -3, -2, 3, 1, 0, -2, -1, -2, -4, -1, 0, -3, -2, 3, 5, 0, -1, 4, 5, 4, -6, 0, 5, 0, + -1, 5, -2, 1, 4, 2, -3, 0, -2, 3, 1, 7, 4, 0, 2, -1, 6, -1, 0, 3, -4, 1, 2, 3, 1, 2, -1, -2, 0, 3, + 1, 0, -3, -3, -1, 2, 0, 9, 4, 1, 4, 3, 2, -1, -4, 2, -6, 6, -3, 2, 0, -3, -7, -7, 0, -3, 7, 2, 0, -4, + 0, 1, 0, -5, -3, -3, 1, 0, 2, -1, 0, -2, 0, -3, -4, 0, 0, 2, 0, 0, -3, 0, 7, 1, 0, 5, 2, 2, 1, -3, + -6, -1, 1, 3, 3, 2, 3, -2, -5, -5, -4, -1, -3, 0, -1, 2, 2, 4, 2, -1, 1, -3, 2, 0, 2, -1, -2, 1, 1, 1, + -2, -3, -4, 3, 4, 0, 1, -2, 2, 4, 3, 2, 2, 3, 0, -1, -1, -5, 1, 0, -2, -2, 1, 1, 1, -3, -1, -2, -1, 1, + -2, 0, 0, -5, 4, 2, 2, -1, -1, 1, -1, -4, 0, 1, 2, 3, 0, 4, 1, -4, -1, 1, 4, -1, -2, 1, 1, 4, 3, -15, + 7, -6, 8, 5, 1, 2, -8, -9, -9, 1, 3, -1, -2, 3, 3, -4, 3, -1, 2, 0, 6, -4, -4, 0, 0, -8, -9, 0, -4, -6, + 8, 8, 4, -1, -2, -1, -2, 2, 3, 4, 0, -8, 1, 1, -2, -2, 3, 1, 2, 0, 5, 5, 3, 3, 9, 3, -2, 5, -2, -6, + -3, -4, -2, 2, -5, -2, 3, 3, 5, 2, 3, -2, 0, 2, 5, 3, 3, -2, -1, 0, 2, 2, 6, 4, 1, -3, -5, -2, 2, 3, + 6, 4, -5, -5, 2, 4, 1, -2, 1, -1, -3, -5, 1, 4, 2, 2, 0, 3, 5, 0, 1, -2, 0, 0, -1, -3, 2, -6, 3, -2, + 0, -1, -1, 2, 1, 3, 2, 3, 4, 2, 4, -4, 0, 5, 2, 2, 1, 0, -1, 7, 5, 0, -7, -7, 0, 0, 6, 1, 6, 3, + 8, 5, 4, 6, 11, 5, -2, -4, 1, -2, 1, 2, 0, 4, -9, -1, -7, -5, 0, -5, -5, 3, -5, -1, -4, 4, 3, -5, -10, -8, + -3, 0, 1, -1, 2, -6, -5, 0, -3, 2, -1, 1, 3, 0, 2, 4, 1, 2, 1, 0, 0, -1, 2, 0, -3, 3, 1, 5, 1, 5, + 4, 4, 2, -1, -2, -1, 2, 3, 2, 0, 3, -2, 2, -1, 3, 5, 2, 3, -1, -4, -4, -5, -3, -5, -6, -2, -4, -4, -1, -2, + -2, -3, 2, 1, 1, 0, 1, 2, 4, 3, 3, 4, -1, -1, 2, -4, 2, 3, -6, -6, -2, -3, 0, 2, 0, -2, -3, 0, 2, 2, + 0, -1, -2, -2, 4, 2, -1, 2, 3, 0, -1, 3, -2, 1, 5, 0, -5, 1, -2, 2, 0, -4, -3, -7, 0, 3, 5, -2, -2, -9, + -5, 4, -2, -1, 2, 8, -14, 0, 8, -1, 0, 0, 0, -3, 3, 3, -6, -6, 3, 5, -8, 5, -3, 4, 1, -6, -7, 2, 9, 0, + 0, -1, 2, 4, 3, 7, -6, 3, -2, -1, -2, 5, -3, 8, 10, 1, -3, -4, -3, -2, 0, -9, 4, 1, -1, 5, 5, 3, -3, 3, + -7, 1, 4, -3, -7, -10, -6, -3, 2, -9, 5, -1, -5, 0, 2, 0, 1, -5, -2, 0, -1, 2, 5, 3, -1, -5, -3, 0, 6, 2, + 0, -3, -2, 4, 1, 0, 3, 6, -1, 2, 6, -2, -1, -2, 0, 10, 4, 2, 0, -1, 4, 4, -1, -1, -1, 2, -1, 2, -4, 4, + 3, -7, -4, 2, -3, -6, -5, -2, 0, 0, 2, 2, 0, 4, -7, 0, -4, -8, 0, 0, -4, -1, 4, -3, -7, -4, -3, -2, 5, -2, + 2, 3, 4, -3, -1, -1, 3, -2, -1, -2, -4, -4, -1, 4, 7, 8, 1, -1, 0, 2, -1, 1, 5, 2, 3, 3, 0, 3, -3, 2, + 2, -1, 1, 9, 6, -1, -2, -6, -1, 3, -3, 0, 1, 1, -1, 0, 2, 2, 1, -1, -1, 1, 3, 0, -7, -7, -2, -2, -2, -2, + 2, -4, -6, -3, -1, -3, -1, -3, -2, -7, -2, 0, -3, -9, -1, 2, -2, -4, -2, -2, 2, 0, 0, -2, -3, -4, 0, -1, 1, -1, + -1, 0, 3, 2, -1, 1, 0, 5, 0, 1, -1, 1, 0, 0, 1, -7, -1, -4, -4, -2, -2, -4, 4, 1, 0, 3, 2, 1, 3, 0, + 3, 3, 4, 0, -4, 3, 1, -6, -3, 0, 6, 3, -3, 2, 1, 0, -2, 4, -2, 0, -2, -1, -2, -1, 0, 2, -1, -2, -4, 0, + -3, -6, -3, -1, 1, 8, 3, 2, 0, 1, 11, -8, 11, 6, -11, 5, -16, -5, -5, -1, 3, -4, -4, 4, 5, -1, 1, 8, 4, 7, + -3, 3, -2, 6, -1, 2, -2, 2, -1, -3, 4, 1, -3, -5, -5, -5, 4, 1, -5, 7, 0, -7, -8, -3, -3, 2, -3, 2, 3, 2, + -5, 3, 0, 2, -4, 2, 0, 3, -1, 0, 6, 0, -2, 6, -3, -2, -4, -3, 1, -1, -1, -2, 3, 1, 0, 1, -1, -1, 0, -1, + -4, -2, 1, -5, -5, -6, 0, 4, 1, -2, -1, -2, 4, 0, 6, 2, -2, -5, -10, -1, 4, 7, 0, -1, 2, 6, 3, 2, 3, 3, + 6, 0, -2, -7, 3, 0, -6, 0, -2, -8, -2, -1, 2, -1, 5, 2, 3, 1, -5, -4, -9, -12, -1, 2, -7, 4, 3, 3, -4, -5, + 3, -5, 4, -5, -7, 0, 1, 0, -7, 2, 2, -5, -1, 0, 0, -2, -4, -2, -2, 0, 2, -1, -4, -1, 1, -1, -3, 5, -6, -3, + -4, 1, 0, 1, -6, -4, -1, 4, 7, 10, 3, -4, 2, 1, 2, 0, 0, -5, -7, -1, -2, -1, 1, 2, 2, -2, -3, -4, -2, -1, + 2, 1, 0, 2, 2, 1, 4, 3, 3, -4, -2, 0, -1, 1, 0, 1, -2, -5, -7, -2, 0, -1, 0, 3, 0, -1, -1, -3, 3, 3, + -4, -2, -4, -3, 2, 1, -2, 0, 2, 1, -3, -3, -4, 4, 9, 4, 8, -1, -4, -1, -6, -3, 2, -2, 0, 3, 3, 3, -4, 1, + 5, 4, 0, -4, 6, 2, 4, 1, -9, -6, -6, -4, -4, -1, -4, 0, 0, 2, 5, 2, -2, -1, 3, 6, 7, 1, 7, 1, 4, 0, + -2, 2, 3, -5, 2, 3, 5, -2, 0, -4, 3, 2, -5, -4, -5, 0, -21, 21, -1, -11, 1, -19, 12, -12, 0, -3, -14, 8, 0, 10, + -4, 6, 8, 3, 0, 1, 3, -3, 4, -5, -1, 3, 7, 3, -10, -1, 8, 4, 2, 1, 8, 0, -1, 2, 8, -3, 0, 0, 7, 11, + 4, -3, 3, -2, -3, -4, -5, 3, 1, -2, 6, 1, 6, -3, -4, 2, 5, 1, 1, 4, 3, 0, -3, -1, -2, 1, 0, -4, -6, -1, + 2, 0, -2, 9, 4, 1, -1, -2, -8, 1, 4, 3, 12, -3, -1, 1, 4, 7, 5, -5, -4, -3, -4, 2, -2, 4, -1, 0, -2, 2, + 0, 10, 1, 4, 3, 8, 1, 3, -3, -5, -2, 0, -1, -6, -2, 2, -6, -5, 4, 4, -4, -4, -7, -7, -4, -8, -12, -4, -4, -1, + 12, 10, -1, -4, -6, -6, -5, -7, -2, -2, 6, 3, 4, 5, -4, -4, 1, 1, -1, 3, 0, 0, 3, 5, 11, -2, 5, 4, 7, 8, + 3, -2, 1, -6, -5, 2, 3, 5, 13, 0, -7, -9, -6, -2, -10, 3, -2, -3, 5, 3, -8, -4, -5, 0, -1, 4, 7, 5, 4, -1, + 2, 2, -3, 3, 3, 4, -2, -3, -1, -1, 1, 0, 5, 2, -2, -1, -1, 3, -2, -1, -1, 0, -3, -2, 1, 2, -2, -2, 1, 3, + 4, -2, -3, 0, 4, 4, 2, -1, 0, 2, 2, -2, -1, 0, 2, -1, 0, -6, 0, 1, -5, -2, -3, 0, -1, -3, -1, 0, 4, 4, + 9, 9, 8, 4, -5, -9, -11, -10, -6, -5, -2, 0, 1, 8, 3, 3, 2, -2, -1, 2, 1, 5, 7, 0, 3, 0, 6, 6, 3, -2, + -4, -2, -6, -8, -8, 3, 8, 5, 2, 1, 3, 2, -1, -9, 1, 1, 5, -1, -1, 4, -4, -24, 49, -7, -1, -3, -16, 19, -21, 1, + 5, -7, 11, -10, -1, -8, 1, 4, 1, 5, 0, 2, 7, 1, 3, -3, 8, 6, -5, -11, -2, 4, -1, 3, 3, 2, -1, 4, 14, 5, + -2, -4, 0, 5, 7, 9, -1, -1, 0, 1, 1, 4, 3, 3, -1, -5, 1, 1, 3, -1, 2, 12, 6, 8, 13, 12, 3, -3, -3, -7, + 1, 3, 1, 1, 3, -2, 0, -6, -3, 3, 5, 0, 1, -7, -8, -2, 2, 10, 16, 19, 9, -3, -8, -18, -17, -13, -17, -6, -2, 2, + 4, -4, -16, -5, -2, -3, -5, 0, -1, 3, 1, 3, -1, -2, -12, -5, -6, -4, -2, -9, -12, -10, -6, -6, -5, 2, -4, -4, -8, -16, + -14, -3, 6, 27, 41, 40, 29, 19, -8, -12, -14, -19, -13, -3, -2, -3, -5, -13, -7, -10, -13, -15, -1, 1, 7, 11, 6, -2, 0, 5, + 12, 10, 1, 2, 1, -2, -14, -12, -11, -6, -3, 3, 3, -3, -3, -27, -14, -5, -4, 20, 5, -6, -4, 1, 1, -2, 3, 3, 4, 4, + 9, 10, 12, 7, 8, 9, 3, 2, 5, 0, 2, 1, 1, 2, 2, 7, 4, -1, 2, -3, -3, 1, 1, 4, 7, 5, 6, 5, 10, 10, + 4, 1, 1, -3, 0, -1, -2, -1, 6, 9, 10, 12, 13, 7, 5, 4, 3, 3, 0, 3, 7, 5, 5, -1, -6, -8, -18, -26, -33, -46, + -41, -30, -17, 3, 18, 29, 23, 15, 6, 4, 0, -1, 5, 11, 7, 5, 8, 0, -3, -9, -9, -3, -1, 11, 12, 17, 15, 18, 21, 12, + 10, 3, -2, -10, -10, 3, 21, 34, 45, 51, 40, 14, -26, -66, -111, -127, -124, -105, -74, -38, -12, 6, 1, -1, 6, -26, -26, 43, -54, 55, + -21, -17, 71, -66, 45, -8, -14, 22, -31, 44, -53, 17, 26, -10, -10, -8, 15, -8, -5, 4, -2, -6, 6, 7, -10, -6, -2, -5, -5, -14, + -1, -10, -2, 1, -2, -3, -5, 2, 5, -3, -1, -3, 0, 2, -1, -5, -3, -14, 5, -2, -5, -11, -3, -1, -1, 3, 2, -7, 2, 35, + -3, 0, -4, 1, -2, -4, 1, 11, 5, 5, -1, -1, 3, 3, 3, -2, -3, -4, 5, 5, 7, 5, 8, 6, 11, 4, 6, 6, 5, 1, + 6, 8, 0, 3, 0, -6, -4, -5, -1, 1, 2, 3, -7, -14, -4, -6, -3, -5, -2, 3, -1, -7, 0, -1, -4, 6, 2, -5, 2, -1, + 0, 2, 0, 3, 3, 0, -2, 1, 0, 13, 10, 9, 5, 3, -6, -3, 0, 5, 5, 2, -1, -1, -9, -9, -3, -2, -2, -6, -14, -10, + -6, -10, -9, -18, -10, -2, -6, -6, 3, 4, 7, 6, 0, 3, -7, -4, 2, 9, 7, 2, -4, 1, -7, -9, -2, -9, 9, -3, 10, -1, + -8, -6, -5, -6, -3, -7, -1, -1, -2, -3, 1, 2, -2, 1, 7, 5, 2, -7, 3, 8, 11, 4, -2, 3, 2, -1, 4, -1, -1, -9, + -5, 0, -3, -3, -4, 0, 1, 0, 8, 5, -5, 1, -1, -5, -5, 5, 2, -6, 1, 1, -5, -4, -2, -3, -4, 1, 7, -3, -10, -4, + 2, -2, -5, -4, -4, -8, -8, -9, -6, 3, 4, 2, 6, 7, -1, -4, 4, 2, 3, -3, 5, 4, -6, -5, 1, -3, -5, 0, -1, 4, + 0, 6, 0, -4, -1, -2, -4, 2, 7, 4, 2, -3, 2, 6, 1, 8, 1, 6, -6, -1, -1, -9, -11, -8, -17, -8, -7, 9, 19, -17, + -2, -8, -6, 26, 2, -8, 9, 18, -3, 5, 4, -10, 2, -6, 2, -5, 3, 0, -1, 2, 2, 12, 11, 4, -9, 4, 8, -5, -4, 5, + 10, 4, 13, 7, 1, 4, 7, 6, 2, 6, 9, 9, 0, -1, -1, 1, -1, 2, 3, 7, 12, 6, 10, 7, -5, 0, -2, -4, 2, 7, + 7, 2, 3, 3, -11, -2, 10, 13, 14, 6, 0, -10, -6, -1, 3, 8, 6, 1, -3, -9, -3, 2, 5, 1, 4, 9, 8, 10, 14, 3, + 7, 4, 4, 3, 8, 3, 1, -2, -8, -1, -4, 1, 1, 5, -4, -2, -4, -3, -2, 0, -9, -2, 4, 8, 11, 5, -1, 2, -2, 5, + 0, 0, 0, -6, -9, -2, -4, 0, -2, -7, -8, -9, -1, 11, 1, 2, 8, -5, 1, 0, 2, -2, 0, -10, -5, -9, -9, -3, 1, 4, + 0, -1, -5, -15, 5, -6, -4, -6, 0, -3, -2, -3, 3, 6, 7, 2, 10, 7, -1, 2, -3, 4, 2, 2, 4, 6, 7, 8, 8, 3, + 1, 2, 1, 7, 10, 3, 1, -1, 1, 1, -4, -4, -7, -6, -10, -6, -2, 4, -2, -2, 0, 1, 2, 1, 5, 2, 7, 5, 1, 3, + 3, 2, 6, 0, -1, -1, 0, -7, -7, -5, -1, -2, 1, 1, 0, -7, -1, -1, -3, 0, -4, -5, 1, 0, 6, 7, -1, -2, -8, -4, + -6, 6, -1, 0, 1, -4, 4, 6, 0, -2, -3, -3, -4, -1, 1, 3, -3, 1, -5, 1, -1, 1, -3, -5, 2, -7, 3, -3, -10, 0, + 9, 4, 3, -6, 4, 5, 2, 5, 3, -4, -2, -4, -2, 2, 0, 4, 0, 4, -2, 8, 7, 7, 9, 2, -5, 4, 6, 4, 4, 0, + 9, 3, 4, 1, 0, 3, 0, 10, 32, 8, -8, 10, 19, 9, 0, 9, -4, -4, 9, -2, 0, -5, -3, -3, -4, 1, -4, 7, 0, -15, + 0, -5, -6, -5, 8, 6, -2, 1, -3, 5, 7, -7, -2, 4, 2, -1, 2, 3, -2, -5, -3, 6, -8, 1, 0, 2, 5, -1, -1, 2, + 3, -10, -15, 2, -5, 2, 3, 9, -1, -10, 11, 5, 0, -2, 4, -6, -2, -7, -11, -3, 0, 7, 6, 13, 6, -5, 5, 9, 0, 6, + -2, -11, -13, -6, -6, -1, -6, -11, -13, -12, -8, -1, -3, -3, -6, 2, 2, -2, 2, -7, 0, -3, 1, 2, -3, -4, -3, -9, -11, -8, + -14, -5, -11, -17, -8, -3, -3, -8, 2, 3, 0, 16, 20, 4, 2, 5, -11, -10, 6, 3, -4, -3, -2, -3, -6, -7, 3, -2, -5, -1, + -4, 4, -7, 1, -1, 1, 2, -3, 3, 6, -1, 2, 3, 3, 8, 5, -1, 4, -1, 2, -2, 5, -3, 5, 7, 10, 5, 7, 9, 5, + -5, 1, 14, 2, 2, 6, 9, -7, -6, -5, 5, 2, 4, 5, 3, 0, -5, -3, -7, -5, -2, -3, -2, -4, -7, -11, -7, -10, -7, -4, + 1, -2, -2, -3, 1, 1, 5, -1, 1, 2, 1, 0, 3, 2, 1, -1, 2, 3, 2, -1, -10, -7, 5, 0, 0, 4, 1, -7, -3, -6, + 0, -2, -2, 1, 5, 3, 7, 4, 3, 2, -3, 4, 8, -2, -5, -11, -9, -7, -4, -2, -6, -8, 0, -6, -2, 0, -3, 1, -4, 0, + 6, 6, 3, -7, -8, -1, -4, 2, -2, -1, 3, 4, -8, -5, 0, 1, 11, 4, 0, -2, -5, 2, -3, -7, -2, -3, -5, -3, -3, 3, + 0, 2, 1, 2, -6, -2, 1, 4, 11, -6, 2, 1, 17, 20, 6, -5, -1, 12, 12, -6, 8, 8, 3, 9, 2, -1, -5, 8, 2, -4, + -2, -7, 7, -3, -3, 8, 0, -1, 11, 7, 4, 2, 1, -3, 7, -3, 1, -5, -3, 0, 9, 0, -10, -2, -7, -3, -5, -10, 0, 0, + -2, 3, 2, 1, 10, 0, 9, -7, -5, -12, -8, -10, -2, -2, -18, 9, -2, -3, -2, 6, -5, -3, -3, -9, -11, -18, -9, -9, 1, 3, + 1, 0, -2, -9, 3, -4, 1, 0, 3, 4, 1, 8, -1, -7, -16, -7, -6, -2, -6, -10, -2, -4, -4, -8, -5, -1, 0, -1, 4, -4, + 1, -12, -7, -11, -3, -6, -4, -8, -6, -16, -21, -18, -10, -1, -11, -4, 1, -7, -13, -7, -8, -16, -13, -16, -8, -14, -13, -4, -2, -15, + -10, -2, -5, -3, -18, -8, -11, -7, -2, -9, -6, -6, -15, -2, -2, -14, -1, -10, 7, 0, 6, 8, -4, 13, 3, 10, 13, 3, 9, 1, + 16, 3, 14, 11, 10, 2, 11, 4, -1, 3, -9, 7, 16, 9, 11, 10, 14, 16, 12, 11, 6, 0, -3, -3, -5, -5, -6, -6, -4, -1, + -2, -3, 3, -3, -5, -4, 1, 1, 1, -2, 2, 4, 5, -2, -10, -6, -8, -6, -7, -4, -2, -6, -5, -4, 0, -3, 3, 8, 2, -2, + 5, 0, -1, 1, 6, 9, 0, -3, -8, -1, -3, -1, -3, -4, 0, 1, 3, 1, 4, 3, -8, -4, -9, -2, 4, 2, -8, -4, 4, -3, + 5, 4, 5, 6, 7, 3, -3, 1, -1, -6, -1, -6, -1, -2, 9, -5, -3, 1, 6, -1, -1, 5, 1, -3, 2, 5, 4, 0, 5, 2, + 3, -2, 2, -3, 1, 5, 1, 4, 4, -1, 0, -5, -8, -6, -11, 10, 2, 3, 23, -4, -8, -8, 29, 18, -2, 1, 15, 17, 4, 5, + 7, 13, 7, 4, 9, 1, -4, -2, 4, -3, 1, 3, -1, 4, 3, -2, 1, 4, 1, 2, 9, 3, 1, -3, 3, 7, -3, 2, -2, -2, + -6, -5, -6, 1, 5, 10, 7, 2, 8, 8, 9, 0, -2, -3, -2, -2, 0, -4, -3, -22, -9, -8, 1, 5, 6, 16, 9, 9, -3, -9, + -5, -1, 6, 16, 16, 19, 6, -3, 0, 5, 9, 5, 4, 6, 0, 0, 4, -8, -2, 20, 10, 2, -3, 3, 7, -2, -5, -2, 2, 1, + -4, -10, 0, -1, -9, -10, -15, -10, -3, 7, 15, 8, 7, 1, -3, -3, -1, 3, 0, -8, 0, -2, -3, -10, -8, -2, -5, -2, -4, -11, + -13, -6, -7, -7, 10, 1, -3, 2, 8, 4, -7, -12, -12, -10, -12, 3, 4, 0, 1, -1, 5, -2, 3, -1, 11, -2, -1, -3, 7, -10, + 1, 8, -6, 2, -8, 3, 15, 8, 2, -2, 8, 2, 7, 3, 9, 14, 16, 16, 20, 39, 6, 8, 14, 15, 18, 13, 13, 7, 8, 10, + 12, 6, 8, 11, 9, 13, 10, 1, 2, 5, 8, 10, 10, 6, 8, 2, 2, -3, 1, 6, -3, -3, -5, -5, 1, 2, 0, -3, 3, 2, + -6, -3, 5, -2, -2, -3, -4, -4, -6, 2, 3, 4, 9, 6, 5, 7, 4, -4, 0, 0, -4, -9, -7, -5, -13, -6, -6, -9, -8, -8, + -2, 1, 4, -3, -1, -3, -10, -6, 0, 3, -13, -9, -9, 0, -12, -10, 0, -1, -3, 2, 6, 1, 0, 5, 3, -3, -7, -6, -2, -7, + -3, -1, -9, -7, -18, -7, -3, -7, -13, -9, -9, -9, -5, 0, -2, 4, -4, 2, 5, 8, 19, -1, 7, 10, -21, -14, -3, 20, 5, -13, + -13, -9, -9, -12, -6, 1, -15, 5, -3, 1, 4, -2, 4, 5, 7, 13, 2, -2, 0, 4, -5, 1, 2, 11, 11, 1, 2, 5, 8, -1, + 5, -1, 4, -1, 8, 7, 0, 1, -6, 7, 7, 0, 3, 13, 16, 3, -1, -5, 7, 7, -4, -3, -2, -7, -36, -22, -8, -15, -6, 1, + -13, -14, -7, -2, -9, -19, -20, -18, -13, -8, -11, -7, -3, 3, -1, -5, -6, -12, -11, -15, -11, -7, -7, 1, 2, 4, -4, -11, 2, 3, + 6, 6, 21, 27, 31, 28, 23, 30, 22, 10, 1, 5, 7, 9, 8, 13, 6, 6, 15, 15, -3, -7, -3, -10, -8, -10, -12, -12, -10, -14, + -11, -7, 2, -5, -12, -7, -4, -9, -1, -3, 5, 15, 0, 10, 5, 3, 1, -4, 3, 7, 21, 15, 16, 20, 18, 2, 1, 5, -3, 2, + -1, 2, -9, 2, -3, 5, 5, -12, -8, -10, 8, 7, 2, 5, 1, 8, 10, 14, 28, 27, 16, -2, 7, 34, 32, -3, 4, 6, 7, 7, + 6, -4, 0, 2, 3, 1, -2, 0, -4, -5, -8, -2, -5, 1, 1, 8, 1, 2, 4, 3, 5, 3, 2, 0, -7, -12, -11, -11, -9, -3, + 3, -6, -5, 5, -2, -4, -8, -3, -12, -12, -12, -8, -13, -7, -10, -4, 0, 6, 5, 2, 7, 8, 3, 4, 2, 2, 3, 0, -2, 1, + 3, 3, -1, 1, 7, 6, 9, 10, 14, 14, 15, 10, 6, 14, 12, 11, 4, 4, 6, 14, 13, 9, 9, 9, 11, 1, 0, -2, -5, -5, + -12, -14, -14, -12, -19, -9, -9, -6, 0, 6, 1, 6, 2, 8, -1, -5, 1, 0, -3, 2, 5, 4, 4, 0, 12, 36, 34, -127, -29, 89, + 51, -46, 17, 34, 8, -36, 9, 12, -4, 12, 10, 16, 3, 1, -12, 8, 1, -2, -2, -6, 10, 1, 1, -4, -7, -6, -11, -11, -10, 3, + 8, 0, 2, 1, 1, -3, -1, 5, 0, 6, 3, 5, 1, 1, 7, 7, 14, 2, 1, 2, 2, 0, -5, -1, -5, -15, -13, -12, -6, -36, + 1, 4, 6, 4, 8, 5, 3, 2, 7, 5, -5, -7, 2, -4, -4, 2, 0, -2, -6, -8, -8, 2, -13, -8, 1, -2, -1, -5, 7, 6, + 6, 9, 9, 0, -9, -7, -7, -5, -10, -21, -19, -11, -12, -6, -8, -12, -5, -7, -7, 0, -5, -5, -1, 6, 15, 2, 2, 9, -8, -8, + 10, 5, -10, -14, -14, -11, 2, -16, -24, -4, 3, 2, -3, -7, -6, 3, 2, -2, -8, -10, -7, -4, 0, -11, -4, 1, -10, 0, 7, 14, + 3, 6, 7, 7, 6, 2, 5, 0, -2, 12, 1, 10, 2, -8, -4, 2, 2, 5, 12, -7, -4, -4, -1, 1, 1, -1, 2, -7, -8, 9, + -1, 2, 0, 1, 4, -7, -3, -8, -9, 1, 0, 0, 10, 5, -1, 0, -4, -5, -1, -9, -4, 2, 3, -1, -1, 2, 1, 3, -2, -7, + 1, 9, 9, 2, -1, -4, -1, -5, 7, 4, 0, -2, -8, -1, 1, 0, 8, 14, 9, 12, 10, 1, -1, 5, 3, -3, 3, 9, 0, 1, + -5, 5, 6, 1, 0, -1, 5, 6, -4, -6, 0, 3, 2, 4, 7, 0, -6, -2, -5, -9, -2, -10, -10, -8, -2, -2, -3, -2, 5, 9, + -7, 3, 3, 5, -1, 8, 12, 3, -3, 10, -2, 10, 1, 1, 12, 16, 6, 5, 1, 4, 5, -6, -5, -1, 4, 5, -3, 1, -4, 26, + 4, 11, -8, 13, -3, -21, -2, -24, 9, -8, -3, -2, -7, 15, 1, 23, 5, 8, 1, 1, -11, 3, 14, -1, 10, -1, 8, 0, -1, -3, + -2, -8, -5, -6, -1, 4, -2, 0, 15, 2, -2, -10, 4, 4, 0, 8, 6, 3, 2, 12, 6, 0, 7, 6, 3, 6, 11, 0, -9, -5, + -4, -11, 9, 0, 8, 2, 1, 2, 1, -1, 3, -1, 3, 13, 1, 14, -11, 2, -6, -6, 6, 7, -1, 4, 0, 9, 3, 0, 3, 4, + 1, -6, -2, -3, 2, 4, 4, 3, 2, 5, -13, -4, 8, 6, 20, -2, -1, 6, 6, -1, 8, 5, 21, 7, -7, 1, -8, 10, 7, 10, + 10, -5, -1, -2, -10, -8, -6, -13, -7, -3, -5, 6, 7, -8, -14, -6, -6, -1, -13, -16, -6, 0, -4, -9, 0, 7, 0, 8, -10, 4, + -2, 0, -1, 13, 2, 2, -4, 9, -6, 2, -2, 7, 8, 4, 13, -2, 8, 5, -3, -15, -18, -18, -16, -6, 1, -2, 11, 10, -14, -6, + -4, -14, -8, -2, 2, -1, -1, -2, 3, -1, 1, -5, 2, 2, -1, 2, 0, 4, 2, -2, 3, 3, 10, 10, 4, 1, 5, 5, 0, -1, + -6, -5, -5, -7, -8, 0, 2, 3, 2, -4, -1, -3, 4, 1, 4, -2, -3, 8, 3, 5, 7, 2, 2, -6, -10, -12, -5, -2, 11, 4, + -3, 3, 2, 1, -1, -1, 6, 3, -1, 4, -1, 8, 7, 2, -3, 7, -7, -9, -1, 8, 7, 6, 3, 3, 1, 9, -2, 7, -4, -3, + -4, -9, -3, 6, -3, -4, 0, -1, 8, -11, -8, 0, 3, -2, 1, 3, 5, 5, -1, 7, 1, 3, -1, -2, 3, 1, -1, 2, -8, -1, + -4, -2, 2, -6, 7, -4, 18, -9, 3, 8, -5, -3, 3, 5, 4, 3, -15, -18, 10, 10, 5, -2, -10, 3, -9, 4, -8, -3, -4, 0, + 8, 3, 3, -11, -3, -5, -6, 3, -3, -13, 4, -4, 4, -3, 7, -2, -9, 3, -10, -2, -8, -5, -6, 0, -1, -2, -3, 4, 5, -1, + 10, 11, 2, 2, 1, 5, -9, -10, 3, 20, 17, 2, -7, -10, -4, 2, -5, -2, -5, -2, -6, -10, -11, 8, 2, 3, -1, 2, -8, 0, + -1, -1, 6, -5, 0, -2, 2, -3, -4, -7, 5, 5, -4, -2, -3, 2, -2, 14, 13, 13, 6, 6, 0, 1, -2, 4, 8, 10, -1, 7, + 9, 7, 5, 1, 2, -6, -11, -12, 6, 0, -8, -2, -4, -4, 0, 4, 3, 7, 4, 3, 9, 5, 4, -3, -7, 0, 14, 2, -9, -11, + 2, -11, 2, -5, -2, -3, -4, 5, 5, -5, -12, 2, 3, -3, 7, -5, -2, 2, 13, -1, 1, -1, 8, 1, -2, 2, -12, 2, 2, 6, + 8, 1, -11, -4, 0, -3, -6, 5, 17, 9, -1, -6, -8, -15, -15, -13, -10, -2, -3, 5, 1, -1, -1, 1, 6, 7, 0, 1, 2, -5, + -2, 0, -3, -4, -8, -6, -6, -6, -2, 2, 4, 3, 2, 4, -1, -5, 1, 9, 3, 3, -6, -5, 11, 10, 12, 4, -5, -3, -6, -3, + -5, -1, 1, -1, 0, -1, -9, -1, 0, -3, 5, 8, 7, 3, -4, -5, -2, -5, -4, -3, 5, 3, -4, 4, 2, -2, 5, 2, 8, -3, + -2, 0, -4, -4, 0, 0, -1, -6, 5, -9, -1, 9, 6, 2, -6, 8, 4, 2, 1, -5, 4, -7, 2, 3, 1, 5, -2, 1, -6, 11, + 5, 6, 6, -2, -9, 0, 5, 1, 2, -9, 16, 11, 0, -3, 10, -8, -12, -9, -2, 10, -20, -4, -6, -8, -4, 4, 3, 5, 1, -2, + -1, 4, 1, 10, -3, 4, 1, 5, 11, -1, -7, -19, 1, 7, 8, -1, -1, 7, -2, -2, -3, 2, 2, 1, -9, -11, -7, 4, -3, -5, + 1, -12, -3, -6, 6, 7, 6, 7, 6, -1, 7, 0, -7, 0, 27, -4, -3, -3, -3, 1, -9, -20, -10, -4, 1, 1, 8, -7, -7, -11, + -6, 2, -9, -20, -8, 0, -7, 0, -9, -3, -1, -8, 7, 1, 1, 6, 5, -8, 2, -8, -8, -5, -2, 0, 2, 4, -2, -9, -2, 5, + 4, 5, 2, 10, 15, 12, 2, 1, 10, 7, 0, 11, 1, 13, -3, -7, 5, 6, -20, -1, -1, -10, -8, -6, 2, 4, -14, -14, -13, -5, + 0, 16, 4, -8, 9, -5, 0, -1, 0, -19, -7, -16, -10, -1, 4, 3, 4, -1, 2, 14, 9, 1, 3, -1, 5, 12, 12, 19, -6, -8, + 9, -10, 5, 4, 0, 3, -5, -1, -5, -7, 11, 6, 9, -14, 4, 2, 8, 4, 5, 6, 3, 0, 2, 8, 12, 13, 6, 5, 7, 3, + 7, -5, -5, -2, -4, 3, -3, 2, 1, -4, -5, -4, -3, 4, 3, 5, 9, 6, 7, 9, -2, -1, 3, 4, 7, -2, 4, -3, -1, -9, + -2, -2, -5, -2, -1, -7, -2, 3, -3, -4, 0, -4, -5, -1, 1, -4, -2, -9, -6, -2, 10, 13, 4, 0, -2, -2, 1, -2, 5, -2, + 4, 10, -6, -9, -10, -5, -6, -1, 6, -5, 1, 3, 4, 7, 2, 5, 5, -5, 0, 0, 0, -3, -4, -3, -5, -1, -3, 4, -3, 5, + -5, -8, 4, 0, 10, 3, -7, 4, 0, 6, 2, -7, -13, -7, -10, 22, -13, -2, 10, -1, -22, 16, -12, -5, 14, -20, -6, 8, 4, -1, + -11, -1, 4, 3, 4, 2, 4, -6, 6, 7, 8, 6, 7, -5, 5, -9, 0, 2, 1, -5, 1, 5, 9, -6, -9, 2, -3, 1, 11, -3, + -2, 0, 5, 14, 4, -4, -3, -7, -3, -5, 3, 13, -1, -5, -7, -2, -3, 4, 10, 17, -10, -8, -9, -5, -2, 1, -1, -3, 8, 13, + 9, 9, -4, -1, 11, 7, 5, 2, -7, -6, 3, -6, -24, -14, -5, -6, -8, -13, -14, -8, -6, -10, -17, -16, -9, -2, -9, -10, -11, -10, + -10, -18, -20, -17, -19, -20, -5, -7, -11, -5, 2, -5, 0, 8, 8, 9, 13, 9, -5, 1, 6, 3, -3, -5, -11, 5, 10, -12, -11, 13, + 12, -3, -7, -6, 7, 11, 19, 9, 7, 9, 9, 13, 12, 6, 7, 19, 24, 21, 6, 10, 4, 10, 7, -12, 7, 4, 3, 13, -1, -2, + 1, 9, 18, 8, 7, 7, 24, 21, 2, 7, 1, -5, 2, -11, -16, -22, -7, -14, -16, -4, 0, 1, 0, -2, -4, -6, 2, 4, 5, 7, + 14, 10, 6, 5, 9, -1, 1, -4, -3, -1, 2, -5, 5, -2, -2, 4, 3, -4, 1, -4, -11, -12, -7, -4, -5, -3, 0, 1, -3, -2, + 4, 0, 1, -9, -9, -3, 7, 11, 6, 2, 4, 2, -2, 10, 0, 2, 2, 3, 1, -3, 0, 8, 0, -5, 2, -1, 6, 3, -3, 2, + -3, -5, -3, -3, -6, -4, 0, -8, -2, -7, -5, -1, -6, -3, -4, -5, 2, 8, 7, 10, 0, -2, -1, -5, 2, 3, 7, 4, 5, -2, + -3, 3, 1, -3, 0, 4, 7, 4, -5, 1, -4, 0, 6, 9, 10, 10, 13, 17, 12, 9, 25, -55, -28, 10, -16, -24, 4, -46, -17, 12, + -41, -35, 12, 13, -20, -37, -12, 6, 3, 6, -8, 14, -1, 4, 8, 4, -2, -8, 4, 8, -8, -10, 4, -4, 1, -3, -1, 12, 8, 4, + 1, 1, 11, 14, 10, 16, 11, 11, 7, 18, 13, 2, -2, -4, 9, 16, 13, -4, 6, 11, 5, 7, 12, 8, 3, -22, -7, -5, -6, -7, + -22, -22, -18, -8, 1, 5, 5, 4, -4, 3, -2, 0, 3, -2, 4, 15, -7, -11, -14, -18, -19, -11, -17, -14, 4, 17, 7, 2, -1, -2, + 11, 16, 21, 22, 16, -3, -5, -19, -21, -28, -18, -5, -1, 5, -3, -2, -2, 5, 8, 8, 8, 8, -2, -17, -12, -12, -21, -4, -15, -5, + 1, 0, -10, -10, -11, -11, -12, -15, -17, 6, 12, 15, 2, 5, -7, -7, -5, -9, -10, -5, -4, 1, -3, 1, 6, 6, 21, 28, 12, 5, + -8, -10, -6, -1, 5, 17, 26, 24, 9, 9, 8, 17, 24, 6, 14, 18, 15, 10, 7, 4, -20, -10, -10, 8, 16, -7, -8, -9, -10, -11, + -9, -16, -8, -3, -3, 1, 9, 7, 12, 21, 18, 7, 5, -1, -1, -3, -7, -7, -12, -13, -6, 1, -2, -1, 2, 16, 21, 24, 23, 26, + 27, 26, 33, 19, 16, -1, -8, -20, -44, -60, -44, -30, -23, -26, -18, -15, -4, -1, 1, 5, 11, 0, -3, 1, 5, -9, 6, -12, -13, 2, + 0, -7, -12, -21, -22, -35, -28, -22, -20, -7, 12, 13, 0, 4, 8, 8, 19, 31, 36, 39, 30, 28, 24, 3, -20, -42, -36, -40, -53, -44, + -50, -45, -34, -9, -1, 15, 30, 25, 14, 17, 16, 18, 29, 32, 19, 34, 37, 9, -32, -71, -96, -127, -103, -72, -35, 11, -102, -32, 9, -36, + -44, 74, -60, -28, 80, -47, -78, 43, 78, -69, -42, 11, 27, 7, 16, -14, -20, 6, 20, -34, -10, 11, -5, -7, 13, -3, -8, -1, -8, 1, + -2, -3, -7, -10, 2, 4, -3, 12, 10, 3, 6, 1, -1, 0, -6, -4, -15, -8, -11, -7, 1, -5, 1, -7, 1, 5, -10, -1, 2, 7, + -1, 5, 6, -6, 4, -9, -4, -5, -16, -18, -3, -6, 5, -4, 0, -4, 3, -10, -2, -5, -13, 1, 1, 2, -2, 1, -4, 6, 3, 5, + -4, -8, -6, -9, -11, -20, 2, -3, -1, -12, -3, -3, -5, -3, 4, 12, 3, -3, -1, 6, 0, -6, -10, -2, -7, -8, -5, 15, 5, -4, + 11, 19, 11, 8, 13, 0, -1, 4, -2, 3, 0, 8, 0, 2, 12, 2, 4, 10, 2, 8, -6, -3, 11, 10, -12, 3, 1, -9, -1, 6, + -4, 1, 0, 4, 7, 25, 22, 2, 4, 8, -9, -14, -5, 1, 5, -6, -16, -6, -6, 2, -3, -13, -18, -7, -8, -2, -4, 5, 0, 8, + 7, 14, 10, 3, 8, -3, -6, -5, -10, 0, -4, -1, -2, 6, 2, -2, 0, 5, -5, -7, -5, -2, 8, 6, 2, -6, -4, -3, 11, 11, + 7, 4, -4, -8, -15, -11, 1, 6, 7, 3, -9, -7, -10, -6, -5, 0, 8, 10, -11, -11, -14, -8, -4, 1, 1, -6, -2, 4, -1, 9, + 9, 0, 2, 3, 1, -9, -16, -4, 2, 4, 9, 5, -2, 12, 10, 2, -3, -2, -10, -2, -15, -3, 9, 12, 6, 4, 10, -5, -5, -2, + 1, -3, -4, -6, 2, 12, 4, 3, -7, -7, -10, -8, -1, -11, -10, -16, -17, -1, 12, 13, 1, -6, -6, -3, -5, -4, -3, -6, -6, 15, + -10, 8, 26, 8, -12, 19, 11, 8, 19, 7, 13, 5, 4, -19, -8, 9, 3, 0, 4, -1, 2, -5, 11, 5, -7, -3, -10, -1, -1, -13, + -11, -3, -3, 12, 7, 8, 1, 8, 25, 10, 7, 1, 23, 12, 10, -4, 12, -10, 12, -3, -5, 2, 2, -3, 1, -12, 12, 9, 5, 7, + -2, -15, -13, -4, -6, 21, 1, 4, 11, 4, -15, -1, 4, 2, 2, 4, 4, -3, 3, -7, -2, -7, -2, -7, -7, -13, -9, -7, 1, -8, + -6, -6, -1, 7, 14, 4, 2, 1, 0, 2, -5, 5, 10, 8, 7, 3, -5, -11, -3, -2, 12, -4, -15, -3, 1, -4, -4, 0, 1, 0, + 0, 0, -3, -3, 1, 4, -2, -1, 0, -9, 7, 11, 2, -1, 3, 13, 20, 8, 11, 7, 12, 11, 6, 8, 1, 5, 11, 7, 12, 4, + 8, 7, 11, 14, 10, 20, 10, -5, -5, 8, -1, 9, -8, -3, 12, 1, -15, -8, 2, 1, 3, -10, -18, -14, -16, -4, -13, -16, 16, 6, + 5, -2, 8, -4, -19, 9, -2, 1, 2, -1, -2, -6, -9, -8, 0, -7, -1, 4, -5, -4, 2, -2, -3, 4, 8, 11, 8, 5, 8, 8, + 2, 4, 3, -1, -3, -6, -4, -5, 1, -6, -2, 4, 1, 0, 4, -4, -17, -13, -11, -1, -6, 5, 9, 14, 7, 7, 6, 5, 6, -3, + 8, 9, 3, -7, -1, 2, -2, -3, -13, -1, 10, 5, 3, 7, -1, -1, -3, -6, 2, -1, -3, 5, 6, 11, 8, 8, 12, 4, -5, -4, + -11, -6, -8, -12, -18, -16, -10, -11, -11, -7, 0, 2, -9, -15, -2, -1, -8, 11, 1, -6, -5, -5, -11, -1, 2, -7, 0, -1, 19, 9, + 6, 5, -4, -13, 1, -3, 10, 27, 19, 9, 35, 41, 12, 27, 11, 10, -5, 14, 2, -6, 5, -2, 7, -2, 1, 7, -3, -1, 10, 19, + -4, -6, -2, -1, 3, -5, 8, 2, 1, 11, 2, 4, -6, -14, -3, -2, -3, 3, 14, 1, -7, -2, 8, 1, -20, -10, -12, -5, -9, -18, + -4, 5, 7, -2, -10, -6, -15, -13, 0, 11, 19, 4, 9, 13, 5, 13, -3, 6, 4, 8, 18, 22, 8, -6, -5, 0, 8, 6, -3, -6, + -1, 7, 9, -2, -5, -8, 1, 5, 14, 3, -3, 2, -5, 12, 12, 0, 3, 4, 5, 6, 11, 9, 0, 4, 7, 0, 2, -5, -1, -4, + 7, -1, 0, -5, -3, 2, 7, 4, 2, -4, 1, 12, 17, 6, 8, 9, 16, 10, 4, 7, 8, 9, 11, -4, 13, -1, 2, -6, -24, -3, + -20, -18, 11, 14, 12, 8, 4, 17, 18, 7, 15, 22, 17, 8, 14, 10, 2, -2, -14, -4, -7, -30, -10, -10, -8, -2, -8, -17, -33, -15, + -11, -5, -13, -8, -2, 8, -2, -2, -2, -18, -4, -4, 3, 12, 8, 3, -9, -8, 7, 6, 8, 9, 5, 3, 9, 7, 1, 7, 11, 9, + 14, 9, 5, 4, 8, -1, 4, 3, 3, -2, -2, -3, -7, -5, -6, -9, -11, -9, -12, -10, -6, -8, -17, -7, -11, -8, -10, 4, 5, 8, + 7, 1, 0, -2, -11, -3, 4, 4, 1, -4, -4, 4, -8, -12, -11, -6, 4, 2, 1, -5, -8, 0, -12, -10, -9, -3, 8, 18, 18, -2, + -6, -9, 5, -2, 1, -1, -3, 3, 8, 2, -7, -1, -10, -15, -9, -5, -1, -12, -10, -4, -10, -18, 6, 0, -3, -1, -15, -17, -23, -16, + -10, -10, -15, 4, -9, -4, -10, -12, -11, -8, -3, 9, 13, 28, 5, 21, 38, -27, 17, 17, 14, -4, 3, -3, -6, -1, 7, 4, 6, 1, + 0, 7, -7, 6, 0, 11, 3, 0, 7, 2, 3, -5, -5, 5, 6, 5, -1, 19, 8, 5, -10, 21, 6, 25, 25, 2, 10, 10, 3, 2, + -5, -5, 10, 2, -7, -3, 0, -2, -5, 2, 0, -8, -9, 15, 10, 14, 18, 31, 23, 27, 14, -6, 10, 12, 16, 20, 12, -17, -20, -4, + 1, 5, 8, -8, -6, -9, 1, 10, 16, 8, 0, -12, 5, 9, 11, -7, -5, -14, 2, 2, 0, 11, 6, 8, -3, 1, -13, 13, -3, 4, + 6, 8, 7, 4, 10, -7, -7, -7, -6, 5, 3, 14, -4, -4, 9, 9, 3, 13, 17, 4, 11, 10, 12, 10, 14, 14, -7, -12, 3, 10, + 7, -4, -9, -19, 12, -14, 2, -4, -5, -9, 10, -13, 7, -9, -3, -1, 6, -15, -4, -7, -4, 1, -8, -11, -5, -17, -7, -21, -10, -9, + 0, -22, -8, -30, -23, -3, -11, -29, -25, -19, -11, -11, -24, -17, -21, 1, -1, -2, -1, 2, -15, -13, -17, -8, -5, -5, -10, -12, -13, -7, + -12, -11, -14, -9, -16, -14, -3, -2, 10, 4, 11, 5, 0, 4, 2, -8, -16, -21, -11, -12, -13, -10, -14, -29, -27, -18, -11, -6, -8, -6, + -12, -12, -15, -18, -13, -18, -14, -21, -23, -24, -16, -14, -18, -15, -18, -9, -12, -10, -16, -23, -4, -8, -11, -9, -1, -8, -14, -10, -6, -7, + -2, 3, -5, -2, -1, 0, 7, -2, 16, 4, 8, -3, 0, -5, 0, 9, 9, 6, 1, 3, 12, 19, 19, 14, 15, 13, 9, 4, 6, -12, + -2, -18, -23, -15, -7, -18, -19, -32, -22, -9, -23, -14, -24, -29, -28, 20, 10, 15, 19, 3, 35, 38, 10, 10, 15, 18, 4, 0, -22, -22, + -20, -20, -12, -1, 7, -7, -5, -20, -3, 0, -8, -13, -2, -8, -2, 3, -6, -8, -12, 4, 3, -1, 7, -13, -8, -11, 14, 14, 16, -7, + -6, -1, 4, 5, -8, -10, -8, -11, -10, -11, -10, 7, 4, -7, 2, 2, -15, -6, -8, -13, 23, 24, 24, 23, 18, 18, 19, 15, 12, 10, + 12, 10, -10, 2, 6, -8, 9, -3, -6, -10, -14, 2, -5, -14, 4, 8, -6, -2, -6, -17, 0, 8, 4, 3, 24, 33, 29, 24, 14, 15, + 22, 13, 2, 5, 15, 24, 7, 3, -3, -11, -5, 2, 6, 1, 4, 7, 18, 7, 25, 31, 11, 18, 40, 48, 44, 33, 35, 29, 15, 24, + 41, 21, 30, 31, 31, 29, 20, 32, 8, 27, 27, 20, 35, 26, 18, 27, 17, 24, 16, 12, 19, 26, 19, 21, 14, 29, 31, 34, 2, 9, + -12, -29, -10, -12, -5, 10, 15, 32, 21, 34, 20, 26, 6, 0, -18, -13, -25, -2, -24, -42, 17, 12, 7, -2, -5, -5, -10, -4, -5, -2, + 8, -3, -2, 1, 10, 17, 12, 13, 7, -4, -1, 2, 7, 7, 7, 10, 9, 17, 11, 10, 2, 2, -5, -7, 2, 1, 9, 15, 7, 6, + 7, 3, 4, 3, 9, 13, 1, 8, -5, -5, 6, 5, 12, 5, 7, 11, 13, 12, 12, 16, 9, 15, 11, 5, -8, -10, -11, 3, 0, 4, + 6, 4, -8, -6, 8, 8, 24, 11, 18, 27, 26, 24, 24, 21, 4, 8, 3, 6, -7, -11, -24, -16, -26, -25, -18, -25, -31, -38, -43, -43, + -47, -58, -56, -70, -78, -68, -58, -53, -32, -29, -45, -45, -49, -61, -75, -92, -94, -92, -102, -127, 31, -5, -20, -6, 1, 29, 6, 11, 35, 5, + 29, 25, 10, -21, -19, -16, -11, 0, 7, -1, -13, -18, -5, 4, 6, 0, -4, -5, -5, 3, -2, -19, -8, -14, 10, 1, 4, 9, 3, -2, + -14, 3, 6, 1, -13, -27, -5, -6, -1, -12, -8, -14, -14, -13, -19, -10, -3, 11, -28, -15, -4, -19, -4, -11, -34, 1, 4, 15, 0, -9, + -5, -2, 3, 5, 14, 23, 19, 7, 6, 10, -10, -11, -7, -23, -30, -26, -17, -5, 5, 6, -3, -10, 15, 11, -4, -19, -15, -19, -1, 4, + -3, 8, -4, -10, -6, -8, 1, 4, 10, -8, -7, -10, 4, 1, -15, -18, -11, -2, -11, 0, 7, 9, -1, 6, 18, 10, 9, 7, 9, 9, + 7, 7, 8, 14, 29, 21, 8, 12, 24, 25, 7, 0, 2, 7, 22, 1, 7, 25, 10, 21, 12, 14, 12, 15, 15, 24, 11, 2, 9, -1, + 24, 17, 36, 6, 24, 8, -16, -1, -9, -21, 6, -1, 1, 8, -5, -5, -3, -29, -30, -9, -24, -22, -18, -41, -17, 7, 10, 1, 5, 3, + 1, 7, -2, -7, -9, 1, -6, 0, 2, 16, 16, 12, 15, 14, 5, -1, 5, 2, 6, 8, 8, 15, 8, 15, 14, 10, 8, 6, 1, 3, + -1, 3, -3, -4, -8, 5, 8, -1, 0, 2, 5, 4, 14, 13, 9, 9, 3, -4, 1, 4, 3, -2, -5, -7, -9, -26, -25, -26, -20, -21, + -23, -25, -7, -5, -7, -9, -16, -17, -9, -6, -9, 1, 2, 8, -6, -3, -11, -12, -6, -9, -10, 6, 22, 13, 12, 3, 6, 2, 10, 6, + 4, -6, -6, -10, -12, -31, -29, -26, -16, -3, 7, 9, 7, 20, 14, 21, 11, 13, 23, 30, 15, 19, 22, 20, 16, 39, -24, -38, -57, -120, + -48, -16, -37, 9, -30, 12, 29, 8, 7, 2, -10, 18, 19, 23, 33, 21, 21, 20, 8, -10, -2, -12, -6, 5, 17, -5, -4, 10, -9, -8, + 10, 11, 10, 10, 4, 15, 20, 8, -2, 1, -3, 6, 16, 12, 4, -8, 13, 17, 19, 19, 4, 11, 13, 10, 19, 3, 13, 25, 35, -57, + 2, 2, 7, 3, 2, 0, -3, -5, 1, 2, 3, 2, -2, -1, 1, -1, 8, 3, -3, -1, 0, 0, -1, -1, -5, -3, 0, 2, -2, 5, + 3, 8, 0, 0, -3, -3, 1, 0, 3, -6, -2, -3, 2, 4, 2, -2, -3, -2, -2, 1, -5, -4, -5, -2, -2, 3, -2, -3, 3, 1, + -4, 3, 0, -4, 4, 9, 0, 3, 0, -7, -5, -6, 0, 1, 3, 1, 6, -1, -2, 3, 2, 5, 2, 3, -2, 3, -1, 3, 4, 1, + -7, 2, -3, 9, -5, 7, 2, 2, 4, 6, 0, 0, 3, -4, -6, -3, -6, 3, -2, -2, 5, -5, -8, -4, -9, -7, 3, -1, 0, 0, + 1, 1, 1, -2, -2, -3, -5, -3, -3, 2, 0, -4, -4, -8, -6, -2, -2, 4, -2, -1, -1, -2, 2, -3, -7, -1, -1, 1, -2, -4, + -3, -2, -5, -2, -5, 0, 2, 0, 2, 0, -1, 1, -2, 7, 6, -1, -2, 1, -2, -4, -5, 1, -1, 0, 2, 0, 2, 0, -2, -7, + -7, 3, 1, 6, 3, 2, 3, 2, -4, -2, 2, 0, -1, 7, 4, 5, 5, 0, -1, 4, -5, -4, -3, 0, 2, 1, -1, 3, -1, 0, + -4, -2, -2, 4, 2, -2, 1, 1, -2, 3, 2, -1, -3, 1, -3, -2, -6, 1, 5, 7, 3, 1, 3, 2, 3, 3, 5, -1, -4, -5, + -11, -1, 18, -4, 6, -9, -2, 4, 8, -3, -1, 4, -8, -8, -2, -7, -4, -3, 3, -1, 4, -2, 3, 3, 14, -6, 3, 7, 2, -3, + 3, -5, -9, 1, 3, -1, -2, 2, -3, -1, 0, 3, 7, 5, 6, 1, -4, -1, 4, -2, 1, -2, -5, 1, -8, -1, -3, 4, 9, 2, + 3, 4, 3, 7, 4, -3, -3, -7, -2, -1, -6, -2, 0, 3, 4, 1, 2, -3, -2, -1, 3, 4, 4, 0, 4, -2, 1, 1, -7, -5, + 2, 2, 1, 3, -3, -2, 4, 4, 6, -2, 2, 1, 3, -3, 2, 1, -1, -1, 2, -1, 1, -5, -5, -6, -6, 0, -7, -5, -3, -3, + 1, -1, 0, 1, 0, -1, 8, -1, 4, 6, 1, 0, 4, -2, -9, 0, -5, -4, -4, -4, -4, 3, -5, 5, 5, 4, 7, 10, 9, 0, + 3, -8, -1, 1, 1, -2, 4, -1, 3, -1, 6, 5, 4, 4, -4, 0, -2, 2, 2, -4, -2, -1, -2, 1, -4, 2, 4, 2, 4, 6, + 4, 1, -1, -4, -3, -3, 1, -1, 3, -2, -1, -3, -4, -2, 1, 0, 0, -2, 4, 6, 3, -4, -7, -2, -1, -4, -5, -1, -5, -5, + -1, 3, 7, 2, 1, 2, 2, -3, -1, 2, 0, -1, 1, 3, 4, -5, -6, 0, 1, -3, 0, -1, -5, -3, -4, 1, 2, -2, 3, 1, + 3, 1, -2, -1, -6, 0, -2, 1, 0, 5, -3, 5, -1, -1, 0, -3, 3, 2, 0, -4, 1, -1, -3, 0, 1, 5, 0, 1, -2, -2, + 2, -1, 5, 0, -2, 1, 2, -2, 0, 0, -5, -3, 5, 0, 4, 5, 3, 0, 4, -1, 3, -3, -6, 2, 2, -6, -1, -2, 3, 2, + 0, 8, 2, -2, -14, -3, -1, 10, 5, 1, -15, -5, 3, -6, -1, -3, 3, -2, -8, -4, -1, 10, -4, -3, -4, 7, 1, -5, 9, -1, + -1, -6, 1, 6, -3, -4, -4, -2, -2, 4, 0, 3, -3, -3, -3, 1, 2, 3, 3, 1, 0, -1, 0, 1, 0, -2, -1, -5, 2, -5, + -11, -4, 7, 16, 3, 9, 7, 6, 6, 4, 0, -3, -2, 0, -3, -5, 1, -1, -1, 1, 3, -5, 5, -5, 1, -5, -7, -3, 2, 0, + -2, 0, -4, -2, -2, 2, 3, 2, -2, 1, -1, -2, -4, -4, 3, 5, 7, 4, -5, -3, -3, -1, 1, 6, 0, 0, -3, -3, 0, -2, + 4, -1, -3, -3, 6, 6, 5, 2, 0, 2, -1, -1, 2, 3, 4, 2, 6, -2, 1, 4, -3, 5, 4, -3, -1, 1, -3, 6, 3, 0, + 5, -6, 4, -2, -1, -10, -1, -6, 3, 1, 4, 0, -3, -1, -2, 3, -3, -2, 9, 7, 8, 8, 2, 1, -2, 0, 2, 1, 7, -3, + 4, -6, 0, -3, -8, 0, -2, -3, 1, -1, -1, 2, -2, 2, 2, 0, 0, -4, -2, -1, -3, 3, 6, 1, 0, 2, 4, 5, 4, 0, + -4, -1, -1, -2, 1, 3, 3, 5, 4, -4, 0, 2, -1, 3, 2, 1, 3, -1, 2, -1, 0, -5, -3, -2, 1, 1, 0, 4, -2, -2, + 4, 4, 3, 2, 3, -2, 2, -2, -1, -2, -1, 0, 1, 0, 6, 3, 8, 0, 0, -2, 2, 2, -1, -2, -2, 3, -3, 5, 3, 2, + 1, -6, 3, 0, -7, -1, -6, -3, 1, 3, 5, 0, 1, 5, 5, 1, -3, -1, -3, 0, 4, 1, -3, 4, 1, 1, -3, -4, -4, 2, + -2, 0, 0, 2, 1, 3, -1, 4, 0, 1, 4, -10, 1, 0, 4, -8, 5, 5, 1, -1, 6, -1, 5, -7, 0, 7, 0, 1, -1, 2, + 0, 0, -6, 7, -3, -3, 1, 4, 5, 4, 3, 4, -2, -5, 0, 4, 10, 4, -1, -6, -5, -3, -2, -4, -2, 0, 0, -1, 6, -1, + 2, 0, 4, -4, -1, -4, -6, -1, 1, 1, -2, 5, -3, 9, -2, -2, -2, 0, -1, -6, 4, -5, -8, 0, 2, 9, 2, 0, -1, 2, + -1, -3, -7, -3, 3, 7, 4, 2, -6, -3, 0, -2, 6, -2, -7, 0, -5, 3, -6, -2, 4, 1, -2, -2, -1, -1, -2, 1, 4, -2, + -5, -7, 4, 1, -3, 3, 7, 1, -2, 0, 1, 4, 2, -2, 3, 9, 9, 7, 2, 7, 8, -1, 3, 2, -2, -1, 0, 10, -3, -6, + 3, 4, 3, 0, -6, 1, -8, -1, -7, -11, -3, -2, -6, 3, -2, 3, -2, 4, -1, 0, -1, 13, 3, -1, 3, -1, -4, 0, -1, 1, + -2, 5, 7, 4, -1, -1, -5, -4, -7, -3, -1, 2, 8, 6, 6, 9, 5, 1, 1, -2, -1, -1, -4, -2, 4, -1, 1, 0, -3, -1, + -1, -3, 3, 0, -1, 1, -5, -6, -1, 2, 3, 5, 4, 1, -1, -2, -2, 0, 5, 2, 4, 7, 6, 2, 1, 1, 0, 1, 5, 2, + -1, -3, -6, -3, -2, 2, 2, 0, 0, -1, 0, -6, -7, -1, 0, 1, -3, -4, -1, 4, -1, 4, 2, -4, -8, -4, 5, 6, 1, 2, + 10, 5, 2, -1, -1, -1, -5, 3, -4, 1, -1, -1, -1, -1, 0, 2, -3, 0, -1, 0, -3, -4, -2, -1, 1, 4, 3, 2, 0, 3, + -1, -5, -1, 0, 2, -1, -4, -4, 1, -1, 3, 0, 0, -4, -4, 7, -11, 2, -10, 4, -12, -3, 0, -4, 2, -4, 0, -3, -3, 0, + 6, 0, -1, 6, 2, -1, 9, 0, 0, -1, 2, 3, -4, -1, 3, -3, -2, -9, -5, -9, 0, 7, -3, -1, 9, 0, -3, -3, -2, 0, + 2, -3, 0, 7, 10, 0, 0, 3, 0, -1, -1, -2, 4, 6, 5, 2, 4, 3, 3, -12, 4, 2, 4, 8, -1, -5, -1, -6, -8, -5, + -8, -2, -1, 0, -1, 2, 3, 1, -4, 2, 2, -3, -3, -6, -1, -3, 1, 4, -6, -7, 4, 2, -1, 0, -5, -2, -1, -1, 0, 6, + 1, 0, -9, -8, -5, -5, -8, -4, -10, -14, -16, -8, -3, -3, -6, -9, -9, 6, 15, 9, 8, 16, 9, 5, 12, 13, 7, -5, -5, 2, + 2, 6, 5, 1, 7, 18, 16, 9, 10, -1, 1, 0, 6, 2, 0, -5, -3, 0, -2, -1, 2, 1, 0, -5, 8, 7, 3, 5, 7, 8, + 3, -8, 5, 3, 8, 0, -2, 0, 3, -3, 1, -6, -2, -14, -10, -7, -8, 1, -6, -9, 5, 5, 3, 2, 3, -4, -5, -4, -1, 4, + 4, -3, -1, -2, 2, 0, 0, 3, 2, 3, 3, 0, -4, -2, 0, 2, 4, 1, 1, -2, -4, -3, -4, -3, -2, -3, -1, 1, 3, 3, + 6, 3, 8, 5, 4, 4, 0, -10, -8, -4, -4, -2, -2, -7, -8, -6, 1, 6, 9, 11, 6, 4, 3, 5, 2, 5, 5, 3, 1, -3, + 1, -1, 3, 2, 0, 6, 4, 5, 1, 3, 7, 0, 6, 9, 5, 1, -4, 1, 2, 1, 1, -3, -7, -4, -2, -4, -1, 0, -3, -2, + -1, 0, -3, 3, 6, 2, -1, -1, 3, 2, -1, -1, 5, -5, -2, 1, 10, 5, 7, 10, -5, -24, 18, -15, 17, -20, -2, -13, -5, 5, + -1, 14, 2, -10, -9, -3, 6, -7, 3, 1, 3, 6, -1, -3, 1, -6, -6, 8, 0, -6, -5, 4, 3, -8, -13, -9, -1, -7, -5, -2, + -6, -6, 3, 0, 6, 2, 4, 6, 7, 5, -5, 2, -2, 2, -4, -10, -3, 1, 2, -1, -6, -4, -1, -2, -5, 3, 9, 13, 3, 8, + 9, -1, -7, -11, -13, -5, 2, 7, 4, -1, -2, 0, 5, 0, -1, 0, -3, -10, -12, -12, -7, -4, -2, 5, 3, 2, -11, -2, -3, -4, + -5, -10, -14, -11, -8, -12, -18, -19, -13, -10, -11, -8, -6, -20, -19, -11, -10, -18, -18, -14, -21, -21, -15, -15, -9, -5, -8, -6, -8, -11, + -19, -22, -29, -28, -30, -19, -7, 2, 13, 15, 17, 5, 3, 0, -2, 3, 0, 7, 9, 13, 14, 12, 15, 8, 10, 18, 21, 21, 22, 23, + 26, 25, 22, 20, 15, 18, 22, 12, 16, 17, 4, 0, 7, 2, 5, -10, -15, -21, -30, -24, -28, -23, -12, -3, -5, 0, -3, 1, -2, 0, + 1, -2, -3, 2, 6, 5, 0, -4, -4, -2, -6, -5, -5, -2, 0, 3, 4, 0, 0, -6, -7, -6, -6, -8, -5, -6, -4, 2, 2, 1, + 4, 0, 5, 2, 5, 3, 9, 11, 8, 7, 9, 11, 9, 9, 7, 9, 12, 17, 18, 17, 14, 12, 12, 10, 12, 20, 13, 8, 8, 3, + -8, -9, -17, -16, -19, -11, -9, -7, 1, 5, 4, 4, 2, -2, -1, -4, -7, -7, -6, -6, -10, -4, -5, -7, -3, -2, -3, -1, 3, 9, + 13, 12, 14, 17, 18, 21, 21, 18, 20, 21, 27, 19, 20, 13, 4, -7, -24, -34, -43, -46, -38, -20, 0, 24, 36, -64, -3, 127, -96, 10, + -52, 53, 21, -40, 35, -17, 37, -24, 11, -32, -3, 1, 1, -6, -7, 1, 8, -8, 2, 6, 9, 0, -2, 1, 1, 0, -1, 3, -7, -10, + 0, 0, -5, -2, -6, -10, -2, 3, 8, 1, 1, -2, -7, -3, 10, 2, 0, -4, -1, 3, -1, -11, 1, 7, 4, 2, -6, -15, -7, 14, + 6, -2, -6, 1, -2, 11, 9, 10, -1, -4, 1, 3, -5, 9, 8, 7, -4, -1, -3, 2, -2, 5, 4, -9, -11, -11, -16, -17, -15, -8, + -5, -3, 4, -6, 1, -5, -6, -1, -9, -5, -6, -2, -5, -16, -7, -4, -12, -16, -9, -8, -9, -4, -6, -4, -6, 8, 8, 0, 7, 4, + 1, 4, -3, 1, 11, 7, 9, 17, 10, -1, 4, -2, 4, 3, 1, 0, 0, 0, 1, 3, 2, -6, 3, 7, 1, 9, -2, 10, 4, 14, + 5, -3, -7, -7, 9, -3, 0, -5, -1, -15, 5, -3, 2, -5, 0, -3, 0, 1, 0, -6, 2, 10, 0, 0, 2, -18, -2, -2, 5, 1, + 3, 3, 8, 5, 5, 9, 3, 6, 0, -2, 5, 5, 0, 5, 3, -5, -1, -4, -4, 0, -3, -6, -2, 3, 8, 0, 2, -1, 1, 3, + 4, 10, 9, 13, 11, 6, 12, 4, 0, 5, -2, 0, -5, -4, -5, 1, 0, -5, -7, -5, -4, -4, 0, 0, 7, 8, -2, -3, 0, 0, + 5, 0, -7, -3, -7, -1, 7, 8, 5, 0, 3, 7, 8, 3, 0, 2, -3, -6, -9, -8, -13, -9, -6, -4, 0, -5, -5, -3, 3, 10, + 4, -4, -2, -5, 3, -4, 1, -2, -4, 3, 8, 1, -3, -3, 7, 8, -8, 0, 9, 9, 5, 3, -4, -8, -3, -6, 3, -1, 0, -10, + 4, -7, 1, 5, -11, -10, 13, 11, 9, -6, 10, -4, -2, -2, -3, 1, 1, 11, 4, -5, -11, 9, 10, -4, 1, -4, 4, -10, -14, -6, + -7, -6, 10, 9, -2, 2, 3, 0, 4, 5, 2, -6, -8, 6, 8, -1, -9, -7, 3, 9, 1, 2, 12, 5, 16, 1, 1, 3, -1, -2, + -4, -2, 6, 10, -5, 8, -5, -3, -1, -1, 1, 3, 5, 4, -7, -3, 1, 5, 7, -3, -9, -4, -8, -3, 4, 3, 2, 9, 8, 6, + 2, 3, 6, 7, 5, 4, -4, 6, 2, 0, 2, 0, 8, 14, -2, -4, -2, -6, 0, -4, 9, 0, -4, -4, 7, 5, 6, 5, 5, 5, + 3, 5, 6, 5, -4, -15, -8, -4, -14, -4, -1, 1, 1, 12, 4, 3, -4, 3, -6, -4, 9, 5, -2, 2, 8, 9, -13, -6, 9, 17, + 0, 8, -7, 4, 9, 3, -2, -2, -6, -3, 0, 6, 1, -2, -6, -1, 10, 5, 3, 12, 1, 1, -4, -10, -8, -1, 4, 2, -11, -11, + -12, -13, -8, -13, -3, -1, -2, 1, 0, 1, 0, -2, 1, 0, 1, 5, 4, 10, 6, -2, 0, 3, -2, 3, -2, 2, -3, -2, 0, 3, + -1, -2, -7, -8, -8, -6, -2, -2, -1, -3, -7, -2, 0, -3, -1, 4, 0, 0, -6, -1, 3, 1, 0, -6, 0, 1, 10, 3, -2, 6, + 3, -2, 6, 13, 3, 1, 1, 3, -2, -6, 2, -6, -2, -3, -3, 0, 3, -7, 0, -4, -5, -3, 0, -6, 4, -4, -4, 0, 8, 8, + 0, -4, -1, -2, -9, -2, 1, 1, 2, 2, 4, 10, -3, 6, 12, 9, 3, -5, 3, -4, -6, -4, 1, 0, 4, 5, -5, 4, -2, -5, + -9, 5, 0, 10, 7, 18, 14, -6, -8, -6, -3, -5, -7, -5, -2, 10, 4, 12, -4, -3, -1, -2, 4, 12, 10, 4, -1, -5, 6, 8, + -7, -21, -9, -11, -2, 0, 3, -3, 3, 0, -6, -5, -8, -5, 2, 8, -8, 3, 5, 4, 1, -5, -13, -11, 1, 5, 1, 5, 9, 5, + -2, -7, -6, -5, -3, -1, 0, 2, -7, -5, -7, -1, -9, 2, 8, 11, 12, 6, 0, 2, 2, 7, 4, -1, -11, -7, 2, 0, -2, -1, + 0, -7, -8, 2, 7, 2, -9, -8, -3, -6, 4, 6, 8, 11, 9, 13, 11, 12, 12, 2, 6, -4, -5, -6, -7, 1, 8, 1, 2, 2, + 12, -1, 8, 0, 1, -10, -2, -3, -6, -3, -9, -7, -3, -5, 3, 14, 4, 5, 11, 2, 1, -11, -9, 8, -3, 7, 6, 9, 9, -1, + 6, 16, 6, 15, 0, 4, -2, -3, 6, -2, -9, -5, -5, 1, -5, 2, 2, -2, -3, 1, -10, 1, -13, -3, -6, -5, -6, -13, -11, -4, + -5, 2, 6, -10, 4, -6, 13, 6, 7, 10, -7, 0, 3, 2, 0, 3, -2, -8, -6, -7, -2, 3, 5, 7, 2, 1, 5, 8, 4, 2, + -2, -3, -5, 6, 16, 11, 6, 1, -2, 2, 4, -1, 2, -3, 7, 5, 1, -1, -4, -7, -5, -1, -1, 2, 3, 2, -2, -4, -1, 0, + -1, 2, 3, 9, 3, 5, 1, 2, -3, -2, -5, -13, -4, -8, -2, 9, -8, -1, 7, 1, -4, -5, -7, -1, -9, 3, -4, -8, 2, -6, + 2, 3, 0, -6, -10, -10, -2, 3, 2, 0, 3, 5, 5, -7, -4, 7, 3, 1, 2, 13, 9, 6, -5, -5, -2, -2, -4, -2, -7, 2, + -8, 2, -1, 4, 0, 0, -1, -3, -1, 2, 11, 22, -18, -10, 4, -1, -2, 16, -4, -1, 4, -15, -4, 3, -24, 1, -2, 4, 1, 6, + 1, 2, -2, 5, 3, 3, -1, 0, 1, -11, 1, -6, -3, -2, -7, 11, 0, -5, 0, 9, 10, 6, 4, 4, 5, 6, -6, -14, -11, -1, + 8, -2, 7, -5, -3, 5, 6, -1, 11, 6, -2, 9, 6, 7, 4, 2, 6, 3, 6, 11, 3, -4, 4, 15, -4, -8, 7, 6, 4, -3, + -4, 7, 5, 1, 10, -9, 2, -2, -14, -8, -12, -9, 12, 6, 2, 7, 11, 5, 11, 11, 3, -2, 4, 3, 2, 1, -3, 1, 7, -1, + 17, 12, 22, 16, 13, 4, 3, 17, 26, 14, 5, 7, 7, 12, -8, -12, 3, -3, 6, 12, 0, 4, 11, 3, -2, -6, -10, 4, 10, 1, + 6, 12, 7, -5, -3, -2, -9, 3, 11, -4, -6, -4, -13, -2, -9, -4, -4, 2, -2, -1, -13, -9, -7, -5, 3, -12, 1, 9, 7, -3, + 7, -11, -13, -6, -8, -4, 2, 1, 0, -3, -1, -8, -7, -1, 11, -20, -16, -12, -10, -9, -6, -4, -7, -7, -14, -9, -8, -4, -3, -5, + -4, -4, 2, -1, -6, -7, -4, 1, 3, -3, 2, -3, -3, 0, 5, -1, 1, 4, 7, 5, 11, 6, -1, 2, 3, 3, 0, 0, 1, 1, + 5, 4, 7, 5, 1, 6, 3, 11, 13, 8, -3, -4, -8, -7, -4, -13, -1, -4, -10, 5, 6, 9, 9, 5, 1, -3, -3, -2, 0, 4, + 11, 7, 0, 0, 2, -11, -4, -3, 0, -5, 0, 5, -5, -4, -5, -2, -5, -1, -2, -4, -9, 2, -4, -12, -3, 3, 15, 4, 0, 4, + 6, -3, -1, -4, 2, -2, -3, 8, 2, 3, 1, -15, -10, -11, -4, 12, 15, -15, 4, 0, -3, 1, 12, -10, -1, -1, -15, -1, -6, -12, + -4, -17, -4, 2, -11, 3, 5, 10, 3, -13, -4, -2, -2, -6, -8, -8, -3, -3, -1, 4, 3, -5, -1, -14, -3, 1, 3, -3, -3, 1, + -2, -5, -10, -2, 11, 6, 9, 2, -7, -8, -5, -3, -14, 1, -3, -5, 12, 2, 3, 1, 3, -7, -2, 7, 9, 12, 18, 14, 5, 9, + 6, 1, 2, -7, -11, -9, -12, -14, 1, 0, 0, 2, -5, -7, -10, -19, -22, -20, -17, -11, -18, -18, -8, -5, -8, -19, -18, -4, -1, -8, + 0, 1, 2, 3, -1, 5, 1, 5, 23, 18, 15, 12, 13, 11, 16, 10, 6, 10, 4, -7, 2, 5, -1, -3, 3, 7, 19, 2, -8, 11, + 9, 5, 10, -4, -7, -2, 4, -1, 0, -5, 4, 7, -10, -6, -11, -8, -11, -25, -19, -28, -16, -10, -4, -5, -8, -10, -7, -4, -7, -15, + -17, -9, -10, -10, -7, -15, -9, -10, -10, 11, 2, 0, 10, 5, 13, 8, -7, -1, 1, 5, 0, -2, 1, 9, 7, 8, 11, 5, 6, 5, + 2, 4, 1, 0, -8, -9, -3, 5, 2, 3, -2, -1, 0, -4, -8, -10, -6, -2, 2, -3, -6, -10, -7, 1, -7, -5, -2, -9, -9, -5, + -3, -4, 3, -3, 2, 5, 1, 4, 1, -3, -1, 2, 9, 6, -1, -3, -5, 1, -2, 0, 6, -3, -1, -2, 0, -2, 3, 4, 0, 5, + 9, 1, 6, 1, 6, 8, 8, 7, 10, 12, 12, 13, 10, 7, 14, 9, 10, 2, 3, 0, 7, 5, 12, 9, 7, 6, -5, 0, 1, 1, + -3, 0, -5, -10, -4, -3, 3, -5, 6, 4, 8, 7, 9, 9, 8, 11, -2, 1, 4, 3, 0, -5, 0, 16, -20, -22, 13, 6, 0, 25, + -9, -9, 16, -8, 5, 23, 18, 16, -2, -12, -4, 20, 20, 10, -5, 4, 12, -1, -11, -4, 1, 6, -1, 8, 1, 8, 3, 7, 12, 10, + 10, 10, 12, 10, -3, 7, 0, 0, 13, 10, 8, 19, 2, -9, 6, -4, -2, -12, 2, -3, 0, 15, 13, 19, 16, -14, -16, -22, -20, -13, + -16, -24, -26, -18, -7, 3, 14, 13, 7, 12, 5, -11, -13, -11, -3, -4, -3, 8, -5, 0, 2, 2, 12, -3, 2, 5, 17, 15, 36, 33, + 38, 34, 28, 31, 16, 9, 19, 5, 8, -10, -4, -9, -14, -25, -14, -8, -23, -22, -14, 5, 19, 32, 31, 26, 11, 12, 8, -10, -13, -10, + -19, -20, 1, 8, 6, 9, 0, 0, -6, 6, -3, 9, -3, -1, -5, -22, -8, -10, 5, -5, -10, -8, -25, -15, 0, 7, 0, 13, 0, 12, + 5, -3, 2, 10, 6, 6, 1, 1, -6, -15, -31, -23, -27, -8, -17, -14, -7, -17, 16, 24, 12, 16, 4, -18, 20, 2, 2, -4, -1, -1, + 5, 2, 2, -4, -11, -3, 2, 0, 2, 4, 4, 3, 0, 4, 3, 12, 3, 0, 3, 6, 9, 9, 8, 8, 7, 9, 16, 23, 24, 25, + 21, 16, 11, 9, -1, -9, -12, -7, -22, -35, -33, -48, -59, -57, -61, -65, -60, -50, -34, -18, -4, 9, 15, 14, 14, 10, 8, 7, 1, 1, + 4, 3, 5, 10, 6, 9, -2, 3, 3, 4, 5, 7, 13, 23, 23, 8, 9, 15, 9, -15, -34, -54, -68, -61, -48, -41, -30, -20, -20, -16, + -15, -14, -12, -9, -14, -12, 0, -16, -13, -3, -10, -3, -1, 10, 6, -1, -2, -5, -2, -4, 0, -4, 0, 1, 16, -6, -87, 63, 37, -127, + 23, 36, -46, 4, 69, -37, 0, 33, -22, 5, 16, 17, 23, -11, -18, 10, 12, 8, -2, -8, -3, 13, 9, 2, -10, -8, 5, -6, -1, -10, + -4, -8, 17, 4, 4, 11, 8, 17, 8, 10, 7, -5, -8, 1, 12, 3, 2, 1, -9, 0, 5, -9, 4, 1, -2, -5, 0, -3, 0, 38, + 8, 12, 2, 8, 13, 1, 3, -5, -1, -8, -10, -7, -5, -4, 0, 5, 4, 1, 3, -4, -3, 2, 2, -6, -2, -8, -1, 1, 1, 1, + 3, 5, 9, 7, 16, 12, 0, 10, 6, 5, -1, 10, 7, 3, -1, 8, 2, 6, 8, 9, 8, 9, 8, 2, -1, -4, 1, 3, -12, -10, + -8, 2, -3, -4, 4, -2, 3, 9, 9, 7, 4, 2, 6, 3, -8, -3, -3, -3, -5, -2, 2, -5, 3, 12, 14, 6, 5, 15, 8, 6, + 7, -1, -3, -12, 10, 10, 9, 9, -4, -5, -8, 6, 10, 1, 8, 7, 18, 7, 2, -6, -15, -4, -3, -4, 1, 4, 2, 4, -8, 3, + -2, 4, -3, 5, -1, -1, 1, 0, 4, -4, -4, 1, 0, -2, 1, -1, -3, 0, -2, 4, -1, -4, -9, -6, -3, 3, 2, 8, 9, 13, + 11, 12, 5, 4, 4, 7, -2, -4, -3, -4, -6, -2, 2, -6, -6, -1, -5, -3, 1, 5, -2, 2, -2, -1, -11, -9, -6, -10, -9, -14, + -8, -5, 0, 2, 3, 7, 10, 1, -2, -2, -6, -5, -7, -6, -5, -4, 1, -8, -2, 1, 2, 0, 3, -2, 13, 7, 2, 14, 12, 8, + 3, 10, 8, -6, 1, 1, 12, 5, 2, 4, 4, 5, 1, 6, 3, 0, 6, 8, -4, 4, -5, -13, -15, -24, -17, -9, -7, -9, -6, -22, + 17, -20, 31, 15, -10, 3, 38, 12, 2, 5, 2, -14, 3, 18, 3, 4, -3, -7, -16, 8, 14, 1, -4, -19, -7, -6, -14, -9, 1, 5, + -3, -5, -1, 10, 3, -2, 5, -2, 6, 5, 3, 10, 7, 7, 6, 4, -3, -1, -12, 6, 1, -1, 14, 9, 0, -6, 5, 10, 6, 8, + -2, -4, 1, 1, 17, -9, 1, -6, -4, -3, 8, 0, -5, -4, -13, -4, -2, -2, 9, 1, 6, 14, 14, 11, 2, -3, -4, 10, 4, 5, + 8, -6, 6, 2, 1, 1, 4, 6, 2, 2, 2, 3, 5, 4, -3, -10, 0, -2, -7, -11, -2, -5, -1, -7, 0, 5, -1, 3, -4, -6, + -11, -2, -4, 3, 5, -3, 3, 11, -3, -11, -12, -13, -1, -6, -14, -5, -9, -5, -9, -20, -19, -12, -6, -2, -1, -1, 5, 6, 1, -1, + 17, 6, 7, 6, 5, -1, -10, 5, 6, 4, 2, 2, 0, -7, -7, -16, -3, -8, 5, 9, 14, 27, 12, -2, -6, -3, -11, -6, 0, 1, + 11, 9, 13, 1, -10, -6, -4, 2, 6, 1, -4, -4, -3, -6, -3, -4, 2, 6, 2, -3, -2, 5, 5, 3, 6, 7, 7, 8, 8, 8, + 3, 0, 0, 7, 9, 7, -1, 1, -3, -5, -5, -3, -9, -7, -12, -4, -8, 1, -8, -16, -9, -1, -4, 7, 1, 0, 1, 1, -3, -4, + -10, -6, -1, -13, -13, -12, -10, -3, -1, -2, 7, 3, 6, 0, 3, 3, 2, -7, -5, -6, -6, 8, 8, 9, -3, -5, 6, 3, 5, 9, + 6, 4, -2, -2, 1, 4, 4, 7, 5, -1, -4, 6, 2, -2, -16, -7, -11, -9, -6, -3, -8, 4, 4, 2, -14, -5, -1, 5, -1, -8, + 0, -8, 0, -3, -16, 19, -1, 33, 14, -7, 34, 43, 14, -10, 3, 16, -3, 17, 3, 9, -2, -8, -15, -9, 15, 5, 0, -8, -27, -6, + -7, -22, -13, 0, -3, -4, -3, 1, 1, 6, 7, 2, 17, 4, 7, 6, 7, 6, 0, 6, 5, 5, -3, -3, -1, 7, 7, 15, 6, 13, + 11, 3, 1, 1, 10, 3, 2, -2, -3, 22, -1, -11, -7, -8, -7, -4, -3, 9, 0, 11, 6, -2, -5, -2, 10, 9, 8, 8, 3, -3, + -5, 6, 4, 8, 14, 8, 17, 2, 5, 8, 9, 10, 6, 6, 11, 16, 3, -4, -4, -5, -2, -8, -9, 3, -9, -4, -15, -4, -10, -11, + -11, -9, 0, -8, -2, -17, 2, -3, 7, 2, -1, -3, -8, -8, -3, -6, -4, -1, -5, -4, 2, -2, 0, -13, -7, -9, -4, 1, 3, 6, + 3, 17, -1, 13, -1, 3, 4, 15, 8, 11, 8, 3, -9, -3, 0, 0, -4, -11, -6, -6, -26, -8, -27, -9, -3, 2, 10, 20, 0, 13, + 8, 9, 4, 16, 12, -9, -4, -11, -16, -13, -2, -5, -6, 0, 1, 4, 3, 1, 1, 1, 3, 6, 4, 3, 0, 0, 1, 6, 1, -6, + -1, 0, -3, 7, 15, 6, -1, 1, 3, 11, 9, 10, 1, -1, 5, 4, 4, 2, -3, -6, -4, -4, 3, 3, 1, -8, -4, -7, -1, -4, + 1, 2, 6, 6, 7, -2, 4, 0, -1, -1, -6, -9, -3, -4, -3, -4, -7, -5, 2, 2, 3, 1, 1, 1, 6, -1, -5, -1, 5, 2, + 5, 16, -4, -2, 9, 7, 15, 16, 3, 3, -6, -8, -10, -15, -12, 3, 1, 14, 0, 16, 3, 7, 3, 3, 5, -2, -8, -5, -5, -2, + -9, -3, -1, -3, -5, -1, -5, -11, -4, -2, 4, -10, 20, 5, -8, 20, 46, 6, -14, 7, 8, -1, -2, -5, -2, -8, -7, -11, -11, 4, + 18, 6, -5, 2, 5, 4, -4, 4, 7, 0, -5, -6, -2, -1, 3, 1, 0, 11, -5, 7, -10, -3, 11, 3, -7, 1, -4, 8, 1, 8, + 3, 5, 17, 0, -4, 3, 1, -4, -2, -6, -2, -5, -3, -2, 24, -14, -9, -10, -4, -1, 2, -8, -1, 7, 15, 3, 6, -9, 11, 6, + 7, 2, 1, -4, -3, -1, 8, -1, -15, 2, 12, 15, 24, 4, 20, 25, 21, 5, 11, -4, -8, -13, -10, -18, -23, -18, -23, -22, -20, -22, + -27, -24, -23, -7, -3, 8, 1, 1, 14, 15, 12, 5, 2, 19, 5, 13, 22, 6, -2, 6, 6, 5, 1, -7, -9, -11, -14, 6, -3, -2, + -6, 2, 1, 0, 9, -10, 5, 14, 5, -21, -5, -5, -12, -12, -10, -19, -26, -19, -11, -6, -14, -10, 11, 0, -2, -3, -3, 6, -13, -8, + 10, 4, 0, 2, 8, 1, 8, 14, 2, -3, 1, -3, -4, 3, 7, 4, 5, 10, 9, 9, 9, 8, 5, 0, -7, 0, -3, -1, -6, -1, + -8, -1, 1, -2, 2, -1, -1, -2, -1, -3, -5, 2, 3, 9, 13, 15, 7, 5, 6, -4, -6, -8, -5, -12, -11, -9, 0, 4, -1, -3, + -4, -4, -5, -2, -3, 5, 5, 8, 13, 5, -3, 3, -7, -8, 0, -9, 2, -4, -6, -2, 2, 8, 0, 1, 1, -1, 8, 9, -2, -8, + 1, -6, -7, -2, 6, 0, 9, -1, 9, 4, 13, 10, 4, 5, 1, -6, -13, -4, -7, 8, 20, 11, 9, 0, -6, -7, -5, -4, -11, -3, + -5, -5, -7, 3, 8, 4, 9, 8, 0, -5, -6, 3, 3, 1, -1, 21, -19, 16, 20, -8, 18, 44, 2, -40, 10, 6, -20, -8, -1, 4, + 2, -3, -7, -13, 1, 13, -4, -9, -7, -5, 8, 1, -2, 7, -4, -18, -6, 5, 4, 7, -1, -8, 1, -2, -10, 9, 11, 5, 3, 6, + 0, 7, 0, -11, -1, 6, 12, 15, 9, 8, 15, 6, -7, 7, -2, 4, 9, 7, 1, 19, -21, -16, -3, 2, 2, 5, 2, 9, 2, 10, + 10, 9, -10, -7, 0, -8, -14, -12, -5, 3, 4, 13, 5, -1, 12, 10, 17, 11, 9, 16, 3, -4, -17, -19, -22, -31, -38, -38, -28, -25, + -17, -27, -25, -29, -32, -18, -18, -11, -7, 13, 4, 5, 19, 12, 15, 15, 29, 10, 7, 8, 11, 0, -4, -10, -7, -2, -2, 8, -5, 9, + 15, 0, 3, 4, -1, 0, -1, 13, 0, 5, 0, 6, -4, -1, -19, -10, -12, -8, -16, -2, -8, -3, -19, -16, -10, -9, 2, 9, 11, 1, + 3, 22, -2, -9, 1, -1, 2, 5, -19, -10, -15, -9, 0, -3, -6, -11, -4, -1, -1, -2, 10, 9, 3, 6, 3, 1, 4, -2, -5, -3, + -6, -6, -10, -12, -12, -10, -11, -9, -1, 4, 4, 11, 8, 7, -3, 1, 4, 10, 13, 9, 12, 6, 8, 3, -7, -5, -9, -8, -8, -8, + -8, -9, -3, -6, -11, -7, -7, -3, -2, 5, 14, 7, 5, 15, 13, 3, 3, 4, 3, 6, 8, 1, -9, -13, -1, -3, 4, 8, 12, 13, + 18, 12, 14, 3, 6, 3, 4, 6, 3, 9, 3, 5, -2, 6, 1, -2, 3, 9, 4, 4, 12, 14, 0, 2, 3, 3, -1, -10, -3, 1, + 3, 12, -2, 1, -3, -6, 0, -13, -6, -3, -5, -5, 1, -1, -7, -9, -8, 10, 12, 11, 29, -77, 21, 11, -19, 19, 15, -6, -23, 41, + 0, -49, -4, -10, 4, 13, 4, -4, 5, 6, 4, 2, -10, -11, -18, -9, -1, 2, 2, -3, 4, -12, -1, -12, -6, -4, -19, -3, -4, 1, + 11, -8, 0, -5, 12, 10, 2, 9, -2, 7, 14, 8, 5, 0, 1, 6, 7, 11, 8, 7, -4, 6, 7, 12, 27, 1, -4, 5, 7, 2, + 4, -10, -9, -1, 1, 6, 9, 15, -8, -12, -9, -6, -11, 0, -1, -11, -6, 2, -18, -15, -20, -17, -7, -14, -8, -17, -10, -5, -7, -1, + -8, 10, 27, 24, 33, 20, 25, 25, 15, 11, 9, 9, 1, -4, -12, -11, -25, -24, -16, -2, -10, -3, -2, -7, -21, -18, -13, -10, 4, 21, + 3, 0, 9, 1, -6, 3, 8, 10, 6, 14, 16, 7, 24, 13, 20, 6, 3, 13, 3, 8, 2, -1, -2, -1, -4, 13, -1, -3, 8, 12, + -7, -3, 8, -10, -3, -3, 16, 8, -1, -8, -13, -2, -6, 12, 17, 17, 23, 29, 18, 16, 15, 18, 16, 22, 16, -9, -1, -2, 3, 10, + 6, 6, 4, -4, -3, -2, -2, 1, -1, -3, -3, -11, -19, -18, -16, -11, -14, -12, -16, -32, -28, -22, -14, -17, -19, -16, -15, -7, -3, -5, + -3, 4, 13, 16, 14, 18, 23, 18, 14, 5, -6, -22, -29, -26, -24, -20, -28, -23, -13, -3, 1, -2, 1, 2, 1, -21, -6, -8, -12, 4, + -4, -20, -12, -11, -13, -18, -18, -14, -19, -16, -21, -21, -13, -13, -16, -24, -25, -8, -2, -9, -3, 1, -4, -5, -5, -2, -19, -42, -47, -45, + -57, -55, -35, -27, -15, 0, 6, -4, -15, -21, -23, -11, -17, -12, 2, -2, -2, -4, -3, 2, 6, 4, 6, 2, 13, 38, -127, 6, 10, 11, + 46, -33, -30, 38, 52, -76, -56, 25, -10, 2, 29, 0, -4, 23, -11, 5, -10, 6, 10, 3, -7, 10, 22, 17, -1, 4, -5, -1, -3, 12, + -4, -19, -5, -2, 5, 20, -3, 14, 10, 11, 4, 7, 17, 10, -7, -8, 7, -2, -10, 0, -7, -3, 8, 3, 2, 7, 5, 0, 8, 23, + 15, 6, -1, 2, 1, -5, -7, -9, -13, -12, 0, 4, 8, -1, 0, -5, 4, 0, -4, -5, -1, -8, -5, -3, -17, -5, -1, -4, 0, -5, + 0, 8, -5, -1, -6, -4, 6, -4, -3, 3, -1, -6, -10, -8, 2, 7, -2, -2, -3, -4, -3, -6, 0, 4, -1, 4, 9, 5, -3, -6, + 3, 6, 10, 8, -4, 11, 7, 0, 8, 0, 1, 19, 16, 12, 2, -4, 9, 0, 2, 6, 4, 7, 11, -5, 12, 12, 23, 5, 13, -4, + -4, -14, -7, -1, -13, -17, -21, -5, -7, -22, -10, 9, -4, 0, 0, -11, -8, -18, -4, 2, 4, 3, 6, -2, 2, -8, 2, -10, -10, 16, + 5, 3, 5, -5, -5, -1, -3, -10, -13, -7, -5, -4, 2, 0, -3, -12, -11, -3, -7, -8, -1, 5, 3, -6, -4, -6, -8, 1, 4, -1, + 0, -1, 0, 1, -7, -14, -7, -3, -11, -9, -5, -9, -10, -15, -6, -4, -2, 2, -2, -3, -4, -1, -1, -2, -3, 0, 3, 6, 3, -3, + -1, -1, 1, 8, 4, 13, 1, 8, 2, 2, 11, 6, 7, 5, 5, -4, 1, -2, 3, 2, 0, 2, 12, 4, 9, 3, 2, 11, 8, -4, + -12, -13, -14, -15, -12, -7, -13, -7, -7, -1, -7, 2, 7, -10, -5, -3, -2, -3, -2, 4, -9, -2, 4, 1, 7, -2, 9, 7, 20, -6, + 10, 17, -2, 15, 24, 4, 19, 27, 2, 7, 0, -12, -10, 4, -9, 0, -6, -1, 14, 9, 13, 20, 16, -5, -4, 2, -8, -18, -16, -11, + 3, -11, -20, 1, 1, 5, -7, 4, 8, 12, 4, 14, -3, 4, -2, -12, 3, -8, -11, 7, 2, -12, 5, 11, -1, 0, 9, -10, -6, 0, + 0, -6, -3, -6, 17, 8, -9, 0, 0, 11, 5, 2, -1, 6, 6, -4, -6, -3, -5, -2, -8, -4, 4, -2, -3, 3, 7, 1, 0, -13, + 3, 8, 2, -2, 1, -4, 4, -10, -10, 1, -2, 0, 2, 7, 4, -1, -8, -9, -6, 7, 12, 5, -3, 2, 8, 9, -3, -8, -4, 4, + -4, -2, 7, -2, 2, 2, -6, 6, 3, -6, 0, 2, -3, -4, -8, -10, 14, -2, -16, -4, -11, -4, -8, -3, 4, 4, -1, -4, 2, -2, + 7, -8, 5, -2, 4, 3, 13, 9, 14, 12, -2, 5, 12, -7, 4, -3, -5, 7, 3, 3, -16, -1, -13, -19, -11, 1, 6, -9, 3, -9, + -14, -13, -10, -6, -2, 1, 2, -2, -3, 2, 1, 1, 4, 1, 3, 2, 2, 3, 9, 3, 2, 5, -4, 6, 5, 12, 6, 7, 5, 2, + -5, -4, -1, -5, 3, 3, -7, 0, 5, -11, -15, -6, -2, -1, -3, 0, -8, -13, -7, -2, 6, -6, -3, -1, -3, -2, -3, 2, -3, 4, + -3, -3, 2, 6, 4, 3, 12, 8, 2, 4, 7, 5, -11, -7, -11, -5, 1, -4, -13, -6, 2, -5, -4, 1, 7, 8, 10, 7, 8, 7, + 9, 3, 6, 4, -9, -7, -8, -10, -16, -9, -7, 2, 12, 7, 14, 5, 0, 3, -8, -10, -1, -1, -6, -10, -2, -1, 3, 1, -5, -16, + -22, 1, 4, 12, 1, 33, 4, -6, -7, 11, -21, -3, 9, 0, 3, -1, -25, -2, -5, 4, -7, 4, 1, 3, 4, 10, 13, -12, 10, 0, + -4, 12, 1, -10, -5, 5, 9, 0, -7, 4, 2, -12, 4, -1, 2, 3, -1, -7, 6, -1, -7, 3, -8, 4, 7, -7, 1, 8, 1, 12, + 12, 7, 8, 12, 6, 0, -13, 1, 5, 36, -10, -11, 0, 4, 9, 8, 4, 6, 1, -10, 8, 3, 4, 9, 1, -8, 2, 7, 10, -7, + 0, -4, 2, 2, -8, -15, -9, -4, 7, 8, 1, -1, 4, -3, -6, -5, -3, 4, -6, -7, -17, -4, -2, -13, -14, -15, -9, -12, -2, -2, + -10, -12, -3, -2, -4, -2, -3, -7, -11, 1, -13, -13, -5, -10, -20, -6, -6, -5, -1, -4, 3, 3, 3, 3, 11, 13, 9, 10, -8, -2, + 3, 10, 20, 5, 9, 13, 10, 1, 19, -6, 7, 2, 6, -2, 2, 5, -17, -7, -3, -3, 3, -5, 7, 3, -8, 3, -4, -13, -9, -2, + -7, 4, -3, -1, -2, -13, -13, -2, -9, 5, 2, 2, -6, -6, -2, 4, -1, -5, -11, -11, -9, -1, 1, 4, 3, 3, -4, -2, 7, 7, + 10, 14, 12, 9, 1, -2, -9, -6, -6, -11, -13, -17, -5, -1, -5, -8, 7, 14, 4, 5, 4, 1, -5, 4, 7, -6, -7, -3, -3, 2, + 0, -9, -3, -1, -3, -2, -1, -7, -4, 6, 6, 3, 12, 9, 0, 6, 7, 0, -5, -2, -1, -2, 1, 1, -4, -6, 5, 7, 0, -5, + 4, -4, 4, 4, 7, 1, -1, -3, -1, 1, 8, 4, 3, 3, -3, -12, -4, -2, -6, 1, -11, -5, -2, 0, -5, 2, -6, -5, -5, -13, + -9, 8, 5, 5, -1, -9, 0, 1, 5, 14, 19, -5, -7, -6, 1, -14, 17, 9, -15, 3, -4, 8, 17, -2, -18, -27, -14, -15, -2, -1, + 3, 4, -7, 1, -12, -5, 2, -2, -10, -2, 13, 5, -2, -8, 26, -2, -12, -3, 9, 14, 10, 7, 5, 7, 9, -11, 8, 0, 2, 7, + 4, -6, 15, 9, 21, 13, 10, 0, 11, -7, 9, 9, -3, 14, 41, 16, 21, 9, 14, 9, 12, 3, -2, -5, 2, 5, 8, 4, 2, -1, + -3, 5, 4, 8, -3, -3, -2, -2, -1, -1, 1, 2, 5, -4, -10, -5, 3, 4, 4, -3, -4, 5, -1, 0, 1, 5, 7, 16, 7, 13, + 14, 7, 4, 7, 0, 3, -1, -8, 0, 7, 3, -6, -3, -1, -7, -13, 5, 5, 2, 8, 4, 6, 9, 7, 13, 10, 6, 19, 14, 8, + 6, 3, 11, 10, 2, 1, 13, 11, 16, 18, 15, 8, 25, 21, 4, 9, 4, 15, 28, 27, 27, 25, 22, 1, 0, -5, -13, -7, -8, -22, + -11, -13, -1, -11, -5, -13, -12, 1, -11, -3, 3, 3, 3, -1, -3, 6, 3, 0, 3, -2, -2, -9, -9, -11, -11, 1, 3, 3, 10, 6, + 6, 6, 8, 11, 6, 7, 10, 3, 6, -2, 1, 1, 4, 6, 5, 7, 4, 6, 6, 11, 7, 9, 11, -3, -2, -6, -2, 5, -1, -3, + 0, 3, 3, 9, 9, 8, 12, 12, 6, 9, 5, 10, 6, -1, 6, 13, 2, 12, 10, 9, 10, 7, -5, 5, 8, -2, 7, 4, 5, -2, + 10, 13, 8, 10, -2, 7, 0, 0, -3, 5, 4, -6, -2, -4, -14, -11, -13, -18, -22, -26, -34, -32, -23, -31, -27, -44, -44, -39, -37, -34, + -30, -28, -24, -16, -4, -16, -19, -20, -37, -33, -30, -25, -34, -24, -22, 24, 0, 27, 17, 7, 8, 30, 2, -26, 1, 8, -16, -11, -8, -18, + -13, -16, 0, -2, 10, -3, 14, 0, 0, -7, 10, 5, 0, -10, -11, 3, 3, 5, -3, 9, -4, -1, -5, -1, 9, 11, 7, -7, 8, -6, + -12, 13, 9, -14, 4, -9, -6, 6, 12, 12, -6, -5, 0, -8, -13, -14, -9, -10, -2, 36, -6, -12, -12, -12, -5, -8, -2, -8, -12, 1, + 13, 10, 5, 17, 9, 4, 15, 3, -2, -9, -6, -9, -1, -3, 8, 5, 2, 11, 6, -8, -13, -1, -1, 6, -4, -15, -2, -4, -10, -14, + -4, 1, 4, -13, 8, 6, 8, 3, -13, -12, -13, -5, -4, -17, -5, -15, -23, -16, -3, 0, -9, -5, -3, -9, -9, -8, -10, -7, -10, 1, + 5, 6, 16, 12, 16, 8, 10, 13, 7, 19, 1, 16, 19, 15, 7, 15, 6, 21, 4, -4, 13, -1, 10, 11, 4, -2, 2, 0, -14, -9, + -26, -49, -36, -49, -57, -47, -50, -64, -76, -86, -100, -86, -95, -77, -66, -42, -11, -15, -14, -13, -5, -2, -9, -5, -11, -2, -11, 0, -4, -3, + 3, -3, -1, 1, 1, 3, -6, -11, -5, -12, -14, -9, -4, -2, -4, -1, -2, 5, -4, -1, -13, -11, -5, 3, 0, -2, 3, -1, -2, -11, + -4, -2, -3, -2, -11, -9, -12, -32, -26, -19, -17, -14, -16, -15, -10, -13, -15, -13, -4, -6, -13, -17, -10, -3, -11, -13, -16, -22, -15, -10, + -5, -10, -10, -13, -17, -14, 1, 4, 1, 2, 0, -1, 3, -4, 5, -2, -8, 1, -17, -11, -3, -8, 14, 13, 4, -7, -2, 0, 2, 7, + 13, 9, 15, 6, -6, -15, -10, -15, -27, -16, -28, -7, -18, -11, -13, -10, 0, -15, -13, -27, 127, -8, 53, 39, 16, 32, 60, 9, 9, 1, + 4, -15, 1, -2, -1, -1, -8, 1, 7, -4, 1, 6, -13, 7, 6, -20, 5, -4, -15, -3, 15, -10, -12, -16, -10, -17, -16, -18, 11, 21, + 8, 11, -7, 8, -3, -10, -13, -17, -12, -9, -6, -8, -6, -8, -1, -19, 1, 8, -18, 4, 8, -24, -13, -3, -21, -4, -7, -8, 1, 2, + 5, -8, -7, -10, -10, -15, 3, 4, 10, 10, -6, -8, -12, -9, -19, -6, 0, 5, 0, 8, -1, 8, -12, -18, -5, -2, -3, -9, 0, -3, + 6, 2, 2, 6, 5, 4, 3, 2, 1, 17, 21, 7, 15, 23, 11, -4, -16, 0, -7, -13, -12, -4, -1, 9, 4, -7, -8, -7, -22, -17, + -12, -5, 2, -7, -2, 11, 22, 25, 5, 19, 18, 3, 12, 17, 24, 20, 26, 20, 29, 20, 24, 36, 23, 19, 18, 39, 14, 29, 20, 25, + 15, 8, 1, 2, -12, -6, -3, 5, 5, 0, -16, -19, -40, -43, -46, -24, -22, -43, -60, -42, -42, 0, -3, -28, -44, -11, -9, -6, -12, -6, + 7, 10, 7, 0, -4, 5, 4, 8, 7, 12, 2, 2, 5, -1, -10, -15, -13, -16, -10, -13, -16, -18, -14, -18, -18, -16, -16, -17, -19, -14, + -8, -4, 2, -9, -3, -7, -9, -19, -21, -28, -26, -26, -27, -11, -16, -17, -25, -28, -23, -21, -24, -25, -28, -29, -21, -22, -28, -19, -20, -22, + -18, -21, -22, -16, -17, -18, -16, -16, -11, -6, -8, -17, -12, -1, 5, 8, 21, 12, 10, 3, 13, 18, 31, 28, 19, 28, 26, 16, 17, 1, + -8, -5, 3, 18, 22, 31, 50, 53, 54, 50, 35, 30, 16, 22, 21, 28, 34, 32, 18, 21, 18, 31, 51, 56, 66, 92, -91, -11, -3, -59, + -17, 66, 10, 13, 19, -3, 6, -19, 6, 11, -20, 9, 24, 0, 18, 16, 17, 8, 22, 15, 7, 18, -2, -2, 5, 0, -25, -5, -10, 0, + -19, -1, 9, 13, 15, 27, 9, 16, 22, 19, 9, -8, -18, 0, -8, -6, -1, 14, 15, 7, -16, 7, 1, -18, -4, -7, -25, -25, -22, -9, + -3, 2, -2, 5, 4, -1, 0, -6, 0, 8, 4, -2, -3, 0, -5, 6, 1, 0, -4, 1, 4, 6, -2, -2, -2, 1, 8, 6, 2, -4, + 2, -1, -4, -3, 0, 3, 1, -5, -10, -2, -2, -5, -1, 4, 1, -5, 1, 4, -1, -3, 2, 1, 0, -6, -2, 0, 3, 0, 4, 3, + 0, 0, -7, 1, 2, 5, 9, 9, 3, 7, 9, -1, 1, -3, -7, -2, 6, -9, 3, -6, 4, 6, 0, 0, 5, 4, 1, 8, 1, -1, + -4, 2, -4, -5, 0, 0, -6, -2, -2, 1, 5, 3, 5, -3, -7, -5, 0, -4, -1, 3, 1, 3, 8, 1, 3, -3, -5, -7, -8, 4, + 0, 0, 3, -3, -3, -4, 0, 0, -1, -2, -4, 0, 0, 2, 2, 5, 2, -3, -2, -1, 0, -3, -7, -4, -1, -2, 0, 1, 4, 4, + -1, -1, 2, 0, 1, -4, -3, 0, 1, 0, 0, 1, 6, 4, 4, 5, 2, 2, 3, 0, 2, 5, 5, 1, 0, 0, -1, 1, -3, 1, + 0, -4, -4, -5, 1, 0, -1, -1, 1, -2, 0, -2, -1, 5, -1, 1, 0, -5, -1, -1, 5, 2, -3, 2, -1, -2, -3, 2, 4, 2, + 3, 5, 0, -3, -5, 0, -1, -9, -4, -2, -2, -10, 0, 0, -1, -4, 3, 0, -9, -6, -2, 1, 0, 7, -2, 4, -1, 0, 9, -27, + -1, 25, -12, 3, 5, 5, 7, 13, -2, 7, 6, 10, 7, 0, -2, -13, -7, 1, -4, -3, 5, 0, 4, 0, 2, 9, -3, 4, -4, 4, + 7, 0, 8, 5, -5, 8, 9, 7, 0, 9, 2, 6, 1, -3, -2, 3, -6, -6, 0, -2, 2, 0, 6, 6, 8, 0, 0, -3, 2, -4, + -2, 2, 2, -5, 25, 1, -3, -8, 5, 7, 1, -3, -4, -3, -1, 2, 8, 4, 2, 2, -3, 1, 6, 7, 5, 1, -4, -2, -1, -5, + 0, -2, 3, 0, 3, 9, 0, 5, 2, 5, 2, 3, 5, 2, 6, 4, 1, 3, 3, 2, -2, 1, -6, -2, 5, -1, -3, -6, -2, -3, + -3, 4, 4, 5, 7, 1, -3, 6, 6, 8, 3, -7, -5, 0, 2, 3, 1, 0, 1, -11, 0, -1, -1, 0, 0, 0, -3, 1, 2, 9, + -1, 3, 2, -2, -5, -3, 2, -3, -3, -2, 0, -7, -2, -5, -2, 12, 0, 1, 4, -7, -4, -6, -5, -1, -1, -1, 2, 0, -8, -13, + -12, -4, -7, 0, 6, 4, 1, -1, 2, 2, -2, 0, -2, -2, 1, 2, -1, 0, 1, -2, 1, 2, 5, 4, 0, 0, 0, -2, 2, -2, + -3, 2, -1, 0, 1, 1, 0, -2, -4, 2, 3, 0, -2, -2, 0, -6, -1, 8, 2, 4, 0, -1, -3, -1, 2, 1, 3, -4, -6, -3, + -3, -2, -1, -3, -1, 3, 1, 1, 0, 2, 4, -1, -2, 1, 3, 3, 3, 0, -4, -6, 0, 0, -1, 0, 1, -1, -4, 7, 1, 3, + 3, 6, 4, 0, -2, -7, -2, -1, 1, 9, 7, 0, -5, -3, -3, 0, -5, -6, -5, -3, -2, 2, 0, 0, 1, 6, 2, 5, -1, -5, + 6, -3, -2, -2, -4, 2, 16, -7, 11, 2, -6, 8, 8, -3, -1, -5, 3, 0, 1, -2, -4, 4, 1, -2, -1, 5, 3, 0, -5, 2, + 1, 2, 0, -6, 3, 2, 0, 1, -3, 3, 3, 2, 1, -2, 0, 5, -4, -2, -2, -8, 3, -5, -3, -3, 0, 7, 4, 2, -7, 0, + 1, 2, 0, -1, -2, 3, -2, 2, 2, 19, 0, -1, 3, 7, 9, -4, -5, -3, 1, -4, -4, 2, 8, -5, -2, 3, 0, -3, 1, -5, + -6, -2, -3, 1, -7, -1, 2, 9, 8, 1, -3, 3, 3, 2, 2, -3, -3, 0, 0, 1, 6, 7, 11, 3, 3, -3, -7, -1, 2, 1, + -2, -5, -4, 4, 6, 5, 0, 6, 0, -2, 0, -2, -8, 3, 1, 0, 3, -2, 6, 4, 5, 14, 8, 6, 2, 3, 4, -1, -3, 1, + 5, -7, -10, -7, 4, -10, 4, 5, 5, -5, -1, -4, 1, -2, 2, 1, -7, -4, -1, 0, 4, -1, -3, 6, 5, 2, -6, -6, -4, -2, + -1, 4, 4, 4, -4, -6, -2, 0, 10, 9, 0, 0, 2, 1, 4, 3, -3, 0, 2, 7, 4, 5, 2, 4, 1, 0, -5, -6, -4, -5, + -2, -4, -1, -1, 1, -1, 4, 6, 2, -1, -3, -4, -2, 0, 0, 0, -2, -5, -1, -1, 0, -1, 7, 4, -2, -2, -4, -8, 1, 2, + -1, -4, -5, -1, 1, 0, 5, 0, 1, 1, 4, 3, 7, 9, 2, 7, 5, 2, 1, -2, -6, 0, -3, 0, -6, -3, -6, -3, -2, -1, + 0, 1, -9, -7, -3, -1, -2, 0, 6, -3, 2, -1, -3, 4, 2, -1, -3, -5, 3, 1, 2, -2, -2, -1, -2, 0, 1, 3, 2, 6, + 9, 3, -2, -9, -7, -11, -7, -6, 0, -14, -4, 2, -10, 11, 2, -8, 0, 7, -6, -1, 6, 2, 5, 1, -10, -17, -10, -5, -8, -7, + 1, 0, 2, 3, -2, 1, 3, 2, 3, 3, -4, -5, -7, -7, -4, 2, -2, -1, 5, 3, -4, -6, -5, -6, 1, 6, 2, 3, 2, 1, + 2, 2, 4, 1, 1, -3, 4, 5, 1, -2, -2, -1, 2, 0, -1, 6, 7, 10, 12, 6, -2, -3, 2, -3, -1, -1, 1, 6, 2, -1, + -1, -4, -9, -1, -2, -2, -8, -9, -5, 0, -3, 0, -5, -1, 3, 0, 5, 7, -4, -6, -5, 0, 1, -5, -9, -2, 10, 8, 1, 2, + 1, -1, -3, 0, -1, -4, -3, -3, 0, 0, -5, -4, -7, -5, 0, 0, -4, -9, -4, 0, 2, -1, -6, 2, 5, -4, 1, -1, -2, 3, + 8, 7, 11, 2, 3, -1, -6, 0, -3, 7, -7, -1, 4, 2, 0, 5, 4, -1, -5, -5, 2, 2, -1, 7, 5, 3, -1, -3, -3, 2, + -3, -1, 0, -3, -5, -3, -2, 1, 3, 0, -8, 7, 4, 4, 6, -4, -2, 1, 1, 3, 4, 1, 1, 2, -2, -2, 0, -1, 2, -5, + -4, 0, 0, -1, -2, -2, -2, -4, -2, -5, -7, -1, -2, 3, 0, 2, 5, 3, -1, 1, 2, 2, 1, 1, -2, 2, 2, 2, 4, 0, + 4, 2, 1, 1, -1, -3, -7, -3, 4, -2, 2, -2, -1, 3, 5, 4, 4, -2, 2, 0, -3, 0, -2, 1, 2, 1, 0, -5, 0, -4, + -1, 0, 2, 0, 8, -1, -3, 8, 6, 0, -2, -4, -2, -6, -1, -3, 3, -6, -5, -3, 1, 1, 4, -2, 0, 3, -2, 3, 2, -3, + 0, 1, -4, -2, -2, -1, -4, -3, 2, 3, 3, -1, 2, 4, 2, 1, 5, -18, -1, 5, -13, -3, 7, -7, -2, 8, 3, 0, 7, -7, + -1, 7, 10, 3, 3, -3, 6, 5, 1, -8, -4, 2, 3, -4, 2, 0, 0, -6, -3, -3, 5, -2, -4, -1, -1, 4, 0, 6, -3, -5, + 5, 3, -6, 3, 1, 0, 0, -10, -5, -3, -6, 0, -6, 9, 2, -5, 0, 3, 6, -18, -2, 8, 7, 5, 0, -4, -4, -7, -5, 0, + -3, -4, 5, 1, -1, 9, 7, 9, 9, 0, 1, 5, 0, 5, -2, -1, -10, -10, -9, -6, -11, -7, 1, 5, 0, -1, 4, 4, 4, -1, + -1, 0, 6, 1, 2, -9, 1, -2, 2, -1, -1, -1, -6, -2, -8, -12, -15, -12, -13, -10, -5, -8, -8, -8, -5, -2, 2, -1, 0, -5, + -1, -2, -7, -2, 1, 4, 0, 12, 13, 14, 11, 20, 15, 15, 20, 16, 10, 21, 10, 25, 14, 13, 9, 10, 4, -8, -7, -11, -14, -13, + -10, -13, -13, -8, -6, -1, -2, -1, -2, -3, -4, -4, -6, -2, -5, 0, 6, 4, 12, 22, 5, 4, 2, 5, 6, 3, 1, 1, 0, 3, + 2, 2, 4, 4, 3, 3, -2, 1, 1, -5, -6, 1, 1, -3, 0, 0, 4, 6, 0, 4, 5, 2, 1, 4, 2, 2, -2, -3, 0, 2, + -2, 1, 2, 2, -1, -2, -2, 2, 0, -1, 1, 6, 4, 7, 6, 8, 9, 3, -2, 1, 2, 5, 4, 5, 3, 5, 7, 7, 5, 3, + -3, -2, -1, 1, 1, -2, -2, -3, -3, -6, -3, -3, -4, 0, -1, -5, -4, 0, 2, 0, -3, -6, -5, -2, 0, 1, -6, -8, -3, -3, + -4, 0, -1, -4, -2, 2, 3, -1, 3, 5, 7, 8, 3, 6, 9, 11, 8, 10, 13, 11, 4, 15, -20, -19, 25, -6, 1, -8, -21, -10, + 5, 2, 5, 0, -9, 9, -1, 10, 4, 5, 13, 1, 8, -1, 2, -1, 7, 5, 6, 4, 0, -1, -2, -5, 2, 1, 0, 2, 3, 3, + 5, 12, 7, 1, 8, 8, 6, 9, 5, 6, 2, -4, -6, -4, -8, -4, 3, -4, 10, 5, 5, 0, 5, 1, -33, 15, 10, 16, 16, 14, + 8, 10, 4, 5, 5, -8, -9, 4, 9, 6, 7, 11, 8, 15, 11, 12, 8, 7, 9, 7, 7, -3, 1, 10, 4, 6, 17, 19, 16, 15, + 15, 8, -1, 0, 4, 10, 4, -2, 4, 1, -8, -9, -6, 1, -4, 0, 2, -1, -7, 1, -6, -12, -7, -3, -7, -3, -4, -11, -4, -6, + 2, 5, 2, 9, 4, 2, 4, 0, 15, 9, 12, 16, 13, 11, 5, 6, 8, -6, 2, 4, 10, 12, 9, 17, 19, 8, 11, 7, 9, -2, + -4, -1, -9, -16, -7, -8, -7, -13, -18, -18, -9, -14, -15, -11, -12, -5, -5, -6, -1, -15, -9, -2, -6, 9, 15, 16, 15, 15, 11, 12, + 9, 4, 4, 5, 6, 3, 5, 5, 1, 4, 4, 5, 0, 1, 5, 4, 6, 7, 5, 8, 8, 6, 7, 10, 5, 11, 13, 8, 10, 16, + 11, 9, 5, 4, 10, 4, 6, 6, 7, 10, 5, 4, 7, 9, 6, 3, 4, 5, 3, 3, -3, -3, -5, -5, -4, 1, 0, -1, -3, -5, + -4, -4, -6, -2, -7, -4, -1, -7, -7, -13, -22, -27, -28, -30, -35, -36, -30, -38, -29, -27, -22, -26, -23, -23, -30, -29, -31, -28, -26, -26, + -31, -24, -20, -14, -8, -7, 1, 14, 11, 19, 20, 21, 18, 19, 19, 21, 18, 20, 20, 18, 16, 17, 15, 16, 19, 8, 127, -33, 38, 73, + 30, 37, 20, -24, -13, -1, -9, -5, -4, -6, -4, -15, -6, -8, -11, -3, -3, -2, 0, -11, -2, 1, -3, -8, -2, -11, -6, -3, -3, -1, + 3, -5, 0, 4, 2, 0, 5, 4, 0, 2, -1, -7, -4, -6, -7, -6, -5, -8, -4, -3, -9, -1, 0, -1, -5, -7, -9, -4, -19, -12, + -4, -7, -1, -10, -3, -2, -6, -2, -8, -2, -3, -3, 4, 2, -3, -6, 12, 6, -1, -1, 5, 3, 9, 9, 5, 3, 4, 0, 8, 4, + 4, 12, 4, 4, -3, 3, 3, -5, 1, -6, -4, -9, 4, 10, 9, 4, -6, -7, -9, 2, -2, 5, -2, -12, -8, -4, -3, -2, 2, 7, + -2, -2, -4, -4, -5, -5, -4, -8, 4, -2, -2, 1, -7, -3, 4, -4, 1, 2, -4, -3, -1, 9, -9, 1, -3, 7, -11, 6, 10, 2, + 0, 11, 4, -1, 2, 4, 5, 6, 6, 14, 2, 3, -1, 10, 1, 3, -5, 12, 2, 3, 5, 3, 7, 4, -7, -5, 0, -1, 1, -8, + 1, 0, 2, 2, 3, 5, 1, 8, 7, 11, 6, 2, 1, 3, 0, 0, 1, 4, 5, -4, -5, -3, 8, -1, -5, -4, -1, 3, 2, 0, + 0, 0, -4, -2, 2, -2, -1, 2, -4, -5, -9, -5, -4, 2, 10, 7, 5, 3, 1, 4, 5, 0, -1, 0, -7, -5, 1, 1, 9, 6, + -4, -3, -7, -2, 3, 1, 1, 1, 1, 3, -3, 0, -7, 0, -3, -5, 2, -5, 0, -3, -9, -5, 1, 1, 9, 7, 0, -4, 3, 5, + 0, -1, 2, -6, -5, -3, 3, 0, -1, 1, 4, -2, -3, 3, 4, 4, 0, 1, -11, -7, -5, 3, 6, -2, -9, -6, 4, 0, 2, -9, + -5, -12, 21, 1, -12, -10, -7, -4, 22, 5, 16, -7, 5, 1, -5, -9, -1, 2, -4, 3, 10, -10, -3, -5, 8, -6, -8, 1, 10, -5, + -2, -2, 6, -1, 11, 10, 6, -3, -8, -7, -3, -1, 0, 4, 0, 8, -4, 9, 7, -14, -1, -7, -3, 8, -1, -4, -12, 5, 2, -1, + 11, 0, -4, 7, 1, -3, 8, -2, 2, -3, -6, -6, -5, 7, -1, -1, 2, -13, -5, 2, 2, -4, -10, -15, -2, -2, -1, 3, -3, -6, + 10, 9, -4, 1, -11, -6, -3, 1, -6, -4, -5, -3, 6, 2, 6, -2, 4, 6, 3, -4, 3, 2, 4, -6, -5, 1, -5, -7, 0, -4, + 1, 12, 7, 8, 14, 2, -8, -10, -6, -8, -2, -7, 0, 5, 3, 13, 0, -8, 6, 2, 2, -8, -7, -10, -10, -3, -7, -5, -9, 0, + -9, -3, 2, 2, -5, 0, 0, 0, 6, -4, -3, 8, 6, 11, 0, 4, 5, 2, 1, 5, -7, 0, -7, 9, -2, 0, 6, 6, -7, 9, + 4, 0, 0, -9, -10, 0, 2, 3, -1, 3, 2, -4, 2, 3, 2, 4, 1, -10, -5, -1, -5, -2, -10, -10, -3, -2, 6, 7, -2, 0, + -3, -4, -4, -3, -5, -7, -3, -2, 4, -1, 1, 2, 4, 5, -1, -7, -5, -1, 2, 0, 4, 11, 9, -4, -1, -3, -2, -2, -4, -2, + 0, 1, 0, 0, 2, 0, 0, -4, 1, 3, -9, -5, -1, -5, 0, -5, 6, 6, 3, 2, 2, -3, -2, 8, 0, 5, -3, 1, 0, 6, + 3, 0, 2, -6, 3, 2, -2, 7, 8, 4, -3, -7, 3, -2, 5, 2, -1, -4, 0, 6, 2, 2, -3, -3, -5, -3, 1, -1, 5, 7, + 3, 0, 4, 1, 3, 8, -17, 18, -2, -3, -19, -10, -1, 14, 12, 5, 3, 1, 3, -4, -4, -5, 4, -2, 5, 2, 6, 1, -4, -7, + 5, 0, 15, 4, -6, -5, -4, 12, 8, 0, 9, 14, 2, 3, 7, 6, -3, -6, 2, 3, 6, 2, 4, 8, -2, -2, -7, -4, 1, -8, + -11, -3, 11, 4, 2, 5, -2, -4, 4, -3, 4, -4, 0, 7, -3, -7, -8, -5, 1, 8, 4, -9, -1, -7, -4, -3, 3, 5, -1, 6, + 2, -3, 3, -2, -15, -4, 4, -2, -1, 0, -6, 3, 1, -14, -5, 4, 3, -5, -4, -7, -2, 7, -5, -2, 1, 5, -5, -13, 9, 0, + -12, -15, -7, -6, -3, 3, 4, 6, -3, 8, -7, -5, 0, 2, -3, -1, -2, 1, 0, 0, -5, 12, 10, -7, 0, 7, 5, 13, 3, -8, + 2, -1, 1, -1, 13, 5, 10, 4, 6, -3, 5, 12, 5, 7, -1, 6, -1, 1, 6, 6, -1, 10, 1, -1, 8, -2, -2, 5, 2, -12, + -2, -8, -4, -2, 2, 6, 0, -12, -8, -11, -1, 3, -1, -2, 6, 3, 1, 2, 2, 5, 2, 5, -2, 2, 5, 3, 9, 7, 5, 2, + -3, -2, -1, 0, -2, -5, -2, 5, 3, 7, 7, -1, 4, 3, -3, -3, 2, 2, -2, -2, -5, -4, -3, -2, 4, 1, -1, 2, 4, 1, + 0, -6, -3, 3, 0, -8, 4, 6, 0, -2, -1, -1, -6, 1, 7, -4, 5, -1, -5, -2, -2, 0, -4, -5, -4, -2, -5, 2, -2, -6, + -5, 4, 7, 0, -1, -3, -6, -2, 0, -1, -4, 1, 2, 2, 5, 4, 12, 9, 3, -1, 0, 1, -11, 0, 6, -1, -1, 1, -6, -1, + -6, -3, 1, 0, 1, 1, -1, -6, -18, -7, 24, -16, 14, -13, -2, -17, -12, -1, 0, 4, 2, -15, -7, 0, -1, 5, -4, 3, -8, 2, + 6, 12, 10, 4, -1, 14, 11, 10, 0, -7, -7, 5, 2, -4, -8, 5, 5, -5, -16, -11, -5, 3, 4, 10, -2, 4, 1, -1, 2, -7, + 1, -8, 3, 4, -4, -7, -2, 1, -3, 2, 8, 0, -5, 7, -6, 10, 3, 6, 6, 8, -8, -2, 4, -2, 10, 8, -2, 0, -6, -2, + -4, -3, -2, 1, -4, -3, 3, 12, 4, 3, -5, -3, 1, 5, -11, -10, -1, -7, -2, -1, 1, 7, 2, -8, -4, -6, -4, -4, -5, -2, + 4, 1, 4, 7, 7, -8, -3, 1, -6, 5, 2, -3, -7, -7, 12, 8, 0, 1, -6, 4, -5, -2, -4, -3, 11, 15, 4, 1, 5, -3, + -2, 9, 7, 0, 7, 3, 0, 8, 5, 7, 2, 2, -3, 7, 2, 5, -3, 1, -2, 3, -10, -1, -3, -3, -3, 4, -3, -1, 11, 3, + -4, 2, -6, -5, -3, -6, -1, 1, -1, 5, 3, -10, -9, -13, -4, 10, 2, 3, 0, -1, 1, 4, -2, -1, 5, 5, 3, 0, -3, -12, + -10, -8, 0, -1, -12, -7, -8, 1, -3, 4, 4, 6, 7, 8, 1, -3, -1, 4, 7, 2, 2, 8, 8, -5, -2, 0, 1, -3, 0, 4, + -1, 0, -2, 1, 6, 4, 3, 3, 8, -1, 3, -5, -3, -2, 0, -4, -2, -5, 1, 5, 1, 2, 0, 0, -1, 6, 12, 7, 3, 1, + 7, 2, 0, -1, 0, -3, 3, 0, 0, 7, 2, -5, -1, -6, -10, -4, -5, -7, -1, 2, 7, 7, 4, 5, 2, -2, -5, -1, 0, -1, + -4, -1, 3, -8, 0, 1, 1, -1, -1, -2, 0, 1, 1, -3, 5, 21, -13, 31, -30, 18, -11, -21, 21, 9, 3, 7, -4, 0, -11, -1, + -15, -9, -3, -3, -6, 0, 14, 0, -4, 10, -8, -4, 4, 2, -9, -26, -14, 1, 5, -14, -6, -13, 1, -14, 5, 2, -1, 1, 7, 8, + -1, -3, 5, 0, -2, -8, -9, 7, -11, -12, 2, -3, 10, 13, 2, 8, 5, 11, -1, -13, -7, -18, -6, -2, -8, -7, -9, -4, -8, 7, + 8, 1, -6, 5, -4, -3, -7, -6, -18, -9, -4, -5, 4, -12, -4, -10, 4, -2, 3, 7, 5, 8, -6, -3, -11, -4, -4, 1, 1, 10, + -3, -1, -9, -3, 5, 8, 3, 11, 11, 9, 5, 5, 3, 1, 13, 28, 15, 16, 22, 18, 6, 11, 0, -9, -8, -7, -15, -13, -5, 2, + 0, 6, 4, -11, 0, 9, 14, 0, 10, 2, -11, -5, 7, 13, 5, 9, 11, 23, 1, 13, 13, 19, 7, 18, 20, 6, 18, 7, 8, -5, + 9, 0, -2, -3, -3, -4, -4, -8, -2, -7, -14, -10, -11, -18, -12, -11, -14, -2, 3, -13, -1, -7, -6, -5, -4, -3, 7, 2, 2, -1, + 1, 1, -3, -7, -4, -3, 4, 4, 10, 1, 8, 4, 3, 2, -8, -4, 1, 2, -2, -2, 8, 6, 8, 2, 2, -1, 0, -6, 3, 0, + -2, -3, -1, 1, 1, 3, 0, -6, 1, 4, 4, 1, 4, 1, -1, 4, 2, 2, 8, 8, -3, 2, -1, -9, -2, -9, -9, -7, -11, 0, + 0, -6, 1, -4, -1, -1, 5, 4, -6, -13, -6, -5, -1, 5, -2, 2, 4, 1, -3, 0, 7, 5, 3, 3, 6, 4, 7, 7, -5, -1, + -2, 0, 3, 3, 3, -4, -9, -7, -10, 2, -1, 0, 3, -9, -6, -4, 5, -3, 4, 1, -9, -29, 37, -52, 34, -13, -7, 2, -15, 24, + 9, 4, -15, 0, 3, -6, 2, -2, 0, 4, 5, 7, 10, 2, 6, -2, -6, 11, 5, -2, -8, 17, 15, 15, -1, 10, 4, 4, 8, -6, + 0, -3, -5, 7, 9, 9, -5, 9, 4, -4, -3, 2, -7, 0, 2, -4, -2, -1, 7, 2, 5, 8, 3, 6, -9, -5, 2, 2, 1, 7, + 4, -13, -10, -11, -16, -6, -3, 4, 7, -4, -2, -4, -2, -1, -6, -7, -8, -3, -7, -15, -22, -9, -11, 4, 0, -3, -13, -7, -9, -5, + -12, -3, -5, -7, 3, -3, -13, -7, -3, -4, -5, -4, -9, -19, -14, -7, -10, -10, -6, -7, -13, -13, -12, -9, -7, -5, -3, -7, 2, 2, + -13, -13, -17, -19, -11, 2, 12, 16, 21, 23, 16, 2, 7, 5, 10, 21, 23, 28, 9, 16, 14, -1, 3, 8, 6, 14, 20, 21, 24, 28, + 20, 18, 10, 17, 9, 10, 16, -2, 5, 10, 6, 2, 0, -5, 18, -13, -11, 6, 12, 21, 4, -16, -14, 5, -26, 9, 7, 9, 10, 9, + 13, 6, 8, 15, 17, 12, 7, 6, 10, 4, 10, 12, 10, 5, 10, 2, 7, 3, 10, 6, 3, 2, 1, 12, 10, 2, 5, 4, 3, 5, + 6, -2, -4, -3, -3, 1, 2, 11, 1, 5, 2, -3, -7, -4, -10, -10, -10, -13, -14, -13, -19, -18, -22, -22, -20, -21, -26, -23, -32, -36, + -52, -46, -49, -44, -27, -14, 0, 0, 3, 10, 22, 10, 15, 18, 28, 34, 31, 39, 40, 42, 32, 35, 36, 35, 34, 40, 34, 33, 41, 35, + 37, 32, 40, 46, 38, 39, 38, 20, 15, 4, -13, -36, -50, -69, -87, -108, -120, -120, -116, -107, -80, -46, -19, 11, 35, -88, 34, 92, -98, 127, + -17, 20, 37, -2, 46, -25, -12, -24, -3, -26, -18, -7, -24, 4, -15, -30, -17, -10, 14, -3, 3, -5, -2, 1, -6, -16, -5, 5, -1, -5, + 6, 0, 0, -5, -2, -14, -2, -3, 2, 0, -6, 4, 10, -6, -1, -2, -4, -6, -2, -14, -17, -14, -10, -6, 11, 5, -10, -16, -1, 16, + -13, -7, -10, -8, 6, -3, 0, 0, 3, 1, -8, -5, 12, 9, 3, 3, 10, 1, -2, 7, 18, 7, 4, 10, 4, 7, -5, -2, 7, -7, + 3, -3, 0, 6, 4, 1, -8, -10, -8, -8, -5, -2, 4, 3, 3, -3, 0, -1, -7, 5, 3, -2, -4, 11, 15, -6, -14, 4, 0, -4, + 3, 3, 4, -6, -3, 21, 12, 10, 10, -8, 8, 7, -7, 2, -3, 3, 4, -5, 9, 3, 10, 1, -4, -11, -10, -8, -2, 3, 11, 6, + 13, 10, 11, 5, -1, 0, -7, -6, -7, 8, -15, -3, -1, -11, -10, 2, -4, 12, -7, -10, 0, 1, -4, -1, -7, -13, 0, -4, -13, -2, + 6, 5, 2, -8, -5, -11, -8, -9, -5, -8, -2, 3, 9, 0, 4, 3, 2, 6, 5, 3, 3, 5, 9, -2, -2, -5, 0, 1, -3, -1, + 2, 0, 0, 6, -1, -8, -7, -5, -2, 5, 5, -1, 1, 0, 5, 0, 2, 7, 0, -6, -13, -9, 3, 11, -1, -5, -9, 0, 5, -1, + -11, -3, -1, -9, -8, 3, 6, 3, 4, 1, -1, -3, -7, 5, 7, 10, 2, 0, 12, -1, 0, 0, -7, -7, -1, -6, 0, -4, -9, -10, + -4, -2, 3, 11, 10, 9, 8, 5, -2, 1, -17, -14, -6, -7, 4, -7, -2, 5, 2, 5, -2, -4, 4, 6, 0, -4, -3, 2, 5, 14, + -14, -7, -19, 6, 7, -9, 19, -3, 1, 5, 9, -1, -2, -2, 1, 12, -1, -25, -19, -9, 0, -18, -6, 2, 12, 2, 0, 13, 7, -1, + 0, -3, -5, 4, -7, 4, -2, 4, 14, -2, -2, -3, 3, -1, 6, -6, 2, -4, 2, 1, -1, 0, -6, -4, -11, -12, -1, 13, 4, 2, + -3, -6, 5, 5, -23, 1, -10, -1, 3, -4, -2, 4, -9, -13, -7, 7, 5, 11, 7, 11, 7, 1, 5, -12, -7, -15, -10, -9, 1, 0, + -6, -16, -12, -7, 8, -4, -5, 1, -5, -12, -2, -1, 1, 0, 6, 6, 2, -2, -3, 0, 9, 0, -4, -4, -3, -12, -10, 1, -2, 1, + 11, 8, 6, 13, 18, 7, 4, 2, 3, 2, 2, 9, 7, -6, -11, 8, 1, 10, 8, 15, 22, -8, 2, 4, -6, -3, -4, 0, -9, -4, + -6, -3, -1, -11, 0, -8, 1, 1, -13, -11, 9, 9, 4, 7, 4, 4, 4, -5, 4, 0, 4, 0, 7, -2, -16, 8, 1, -2, 11, -1, + 0, -14, 2, 5, -12, 3, 6, 9, 8, 5, 1, 4, -5, -4, -3, 0, 7, 6, 3, 1, 3, -3, -1, -2, -2, -3, 0, -3, 5, 4, + 7, 11, 6, -2, -8, 0, -4, -1, -1, -1, -1, 1, 2, 4, -1, 4, -2, 2, 5, 2, -2, 3, 2, 1, 2, 5, -1, 7, 6, 1, + -2, -5, -10, -1, -1, -6, -2, -7, -1, -2, 4, 4, 2, 4, 0, 1, 5, 3, 7, 8, 4, 1, -1, 6, -10, -3, 0, -10, -5, 9, + -3, -5, 0, 2, -10, -5, -7, -1, 0, -10, 0, -4, 7, -4, -2, -2, 4, 3, -3, 3, -3, 0, -2, -4, -7, 2, 0, -5, 6, -2, + 3, -9, 2, -10, -23, -17, -5, -12, 7, -2, -24, 3, 6, -13, 14, 4, -2, 13, 12, 6, 10, 8, -20, -16, -7, 6, -2, 1, 6, 7, + 7, 3, -1, 2, 6, -2, 5, 8, -5, -9, 0, 6, 1, 12, 14, 4, -3, -2, -4, -2, 1, 1, 1, -4, 1, -5, -1, -3, -5, -12, + 0, 0, -1, 4, 0, 8, -8, 0, 6, -4, 2, 0, -5, -15, -6, -4, -2, 5, 1, -3, 5, 1, -8, 12, 14, -5, -8, -11, -5, 1, + 1, -14, -11, -14, -8, -11, -8, -12, -18, -16, -10, -11, -15, -3, 8, 3, -4, -9, -5, -3, -7, 2, 1, 3, -16, -13, -3, 5, 12, 4, + 8, 0, 8, 3, -1, 8, 6, -5, 11, 12, 1, 6, 18, 19, 22, 3, 3, 0, -2, 5, 2, 6, 21, 7, 6, -15, -7, -1, -11, 12, + 1, 4, 7, 0, -4, -7, 5, 0, -4, -13, 3, 5, 14, 8, 11, 5, -5, 0, -9, -21, 2, -20, 3, -5, 2, 2, 11, 6, -2, 5, + 0, -2, -8, -8, -18, -7, -16, -9, -6, 1, -3, -5, 4, 0, 5, 5, 5, 8, 1, 5, 5, 6, 2, 11, 11, 12, 4, 5, 2, -7, + -3, 2, 5, 6, -2, 4, 5, 3, 4, -3, -3, -4, 0, -5, -2, 3, -1, 3, 4, -5, 0, 1, -4, -1, 4, -2, -11, -1, -13, -9, + -7, 4, 7, -7, -4, 0, 5, -4, -2, 0, -2, -10, -6, -2, 0, -2, -4, 2, -4, -1, 3, 5, 0, 2, 0, -2, 4, 3, 12, 6, + -6, 2, 14, 8, 6, 11, 9, 5, 6, 0, -5, -5, -3, -1, 5, 5, 1, 1, -11, -7, 10, -4, -4, 3, 3, 13, 8, 12, -7, 3, + 7, 4, -2, -3, -4, -4, -5, -2, -7, -16, 1, 3, -12, -3, 17, -11, 2, 8, 5, 22, -4, -1, 3, 1, 6, 6, 8, -13, -19, -8, + -13, -17, -13, -8, -6, 1, -11, -5, 1, -2, -8, 1, 10, -3, 0, 9, -3, -2, -4, 2, -1, 8, 2, 4, 5, -9, 3, -2, 8, 6, + 7, 6, 13, -4, 0, -6, -2, 0, -2, -4, 14, -7, -3, 7, -4, -12, -12, -6, -5, 3, -4, -4, -6, -1, -9, -10, -4, -6, 0, -7, + -15, 5, 8, 3, 8, 13, -3, -12, -8, -15, -10, -11, -3, -5, -9, 0, 7, -1, -6, -6, -7, -6, -11, -16, -8, -6, -15, -11, -18, -3, + 0, -1, 4, 0, 8, -8, 1, -3, -1, 2, -12, -13, -15, -17, -25, -32, -16, 3, -3, 0, 16, 10, -13, 0, 10, 5, 8, 9, 5, -6, + 4, 6, -3, -2, 3, 3, 6, -5, -9, -9, 6, -4, -11, 3, 14, 9, 3, -3, -5, 0, -5, -8, 9, 7, 10, 11, 10, 0, -4, 10, + 3, 5, 12, 2, -24, -22, -22, -15, -18, -4, -23, -15, -9, -12, -2, -17, -19, -8, -7, -11, -9, -3, -4, -2, 6, -1, 5, 9, 9, 10, + 3, 2, -12, -2, 6, 5, 2, -12, -7, -2, -1, -10, -8, -5, 2, 1, 2, 3, 4, -1, -6, 4, -1, -3, -5, 3, 6, 1, -2, -2, + -8, -7, -5, 5, 6, 4, 13, 22, 4, 2, 1, 5, 2, 0, -1, 1, -2, -2, -3, 1, 20, 8, 2, 4, 7, -4, 1, -1, 1, 0, + 1, 9, -1, -6, -8, -4, -8, 2, 12, 8, 10, 3, -6, -12, -9, 1, 0, 0, 0, -2, -7, -2, 1, 1, -7, -14, -3, 2, 6, 3, + 2, 6, 15, 12, 2, -11, -13, -9, -7, 7, 4, -3, 7, 9, 23, 5, -11, -8, -17, -11, -20, 24, 16, 2, 10, -4, -6, 10, 26, 15, + 22, 9, -8, -2, -2, 7, 11, -2, -1, 5, -3, -8, -3, -10, 1, 0, 2, 9, 6, 3, -7, 5, 1, 0, -7, 3, -6, -10, 11, -6, + 4, 2, -7, 1, 1, -6, -7, 3, 2, 0, -1, 3, 10, 1, 6, 13, 6, 13, 1, -32, -34, -9, -5, -8, -1, 2, -5, -5, -1, 0, + 6, 2, 2, 0, 16, 11, 15, 6, 10, 11, 12, 0, -4, -7, -6, -3, -7, -1, -2, -3, -3, 0, -6, 5, 14, 2, -4, -11, 1, 5, + -11, -29, -18, -1, 3, -2, 10, 8, 10, -4, 6, 4, -3, 4, 0, -3, 1, -1, -6, 2, -5, -8, 5, 13, 13, 19, 8, -14, -14, -3, + -5, 1, -1, 12, 16, 9, 11, -2, 10, 14, 11, -2, 15, -5, 3, 5, 8, -5, -4, -9, 3, 7, 2, 1, 11, 6, -1, 5, -4, 1, + -3, 2, 7, 11, 20, 13, 13, 17, -1, -12, -14, -24, -20, -29, -24, -35, -17, -6, -3, 1, 1, -2, -3, -4, -2, -1, -5, -6, -1, 5, + 2, -1, -6, 3, 5, 7, 3, 9, 9, 5, 10, 2, -4, 1, 7, 11, 8, 4, 4, 1, 3, -5, 4, 2, 4, 7, 9, 3, 5, 6, + 11, 5, 2, 4, 4, 2, 5, 6, 4, 3, 8, 4, 3, 5, 3, 5, 1, -1, 0, 3, -2, 2, -7, -7, 3, 8, 5, 4, 3, 13, + -3, -7, -4, 6, 1, 4, 4, -5, -4, 5, -5, 5, 2, 8, 3, 4, 5, 0, 5, 0, -7, -4, -10, -5, 5, 0, -7, 16, 11, 9, + 8, 6, 8, 7, 7, 6, 6, 12, 6, 6, 5, 5, -11, -25, -15, -1, 9, 8, 8, 14, -4, -29, -19, -33, -9, -20, 14, -3, -5, 15, + -36, -27, 7, 9, 4, 21, 16, -4, -4, 0, -3, 13, 16, 3, 11, 2, 6, 18, 5, 10, 7, 5, 1, -5, 6, 9, -14, 7, 5, 2, + 6, 4, -9, 1, 4, -10, -5, -10, -12, 11, 8, 8, 17, 10, 11, 2, 11, 24, 1, 10, 14, 7, 10, 4, -48, -10, -7, -13, -24, -27, + -21, -11, -14, -15, -6, -4, 1, -7, -2, -11, -1, -2, 13, 13, 6, -6, -23, -18, -19, -13, -10, 10, 11, -5, -14, -8, -11, -5, 7, -11, + -17, -21, -16, -15, -2, -14, -9, 6, 10, 5, 16, 29, 19, -4, -8, 11, 22, 29, 30, 22, 13, -2, -18, -19, -18, -11, -9, 11, 8, 9, + -3, -8, -18, -12, 5, 14, 27, 42, 31, 23, 16, 11, 6, 18, 8, -14, -7, 5, 15, 25, 21, 10, 37, 9, 10, 15, 18, -6, -15, 5, + 14, 8, 12, 18, 6, 4, 4, 2, -5, -2, 2, 20, 13, 11, 1, -23, -36, -51, -83, -27, -43, -20, 2, 0, 22, -27, -21, -18, -10, -10, + -18, -15, -14, 2, 10, 7, 2, 6, 3, 11, 10, 12, 2, 9, 17, 17, -5, -13, -13, -3, -12, -17, -20, -18, -18, -6, -10, -8, -9, -15, + -9, -14, -13, -7, -2, 5, 8, 13, 17, 22, 17, 20, 28, 11, 0, 2, 7, 8, 20, 27, 24, 12, 8, 4, 12, 14, 5, 9, 7, 6, + -3, -8, -13, -14, -2, -1, 8, 7, 7, 9, 6, 9, -6, -7, -16, -23, -30, -13, -12, 0, 3, 18, 35, 35, 32, 12, 5, -4, -6, 2, + 7, 9, 20, 30, 20, 24, 28, 18, 25, 28, 41, 46, 32, 24, -19, -55, -79, -118, -127, -114, -104, -70, -46, -30, -36, -65, -65, -12, -114, -11, + -23, 84, -1, -41, 71, -41, -9, -36, 16, 7, 4, -19, -4, 47, -33, -24, -3, 7, 9, 0, -9, 1, -4, -4, -13, -11, 2, -2, -3, 7, + 10, -12, -14, -6, 2, 6, 6, 1, 3, 5, 5, 2, -10, -14, -3, -8, 1, 1, 8, 6, -5, -11, 7, -2, 9, 13, -11, 6, 0, -16, + 5, 8, -1, 9, 6, 4, 8, 2, 0, -4, -3, 3, 13, 4, 11, 6, 7, 8, 9, 5, 9, -1, 0, 3, 3, 3, 1, 7, 2, 3, + 1, -6, -12, -4, 2, 6, -2, -8, -8, 2, 4, 2, 5, -4, -12, -10, -7, -2, 4, 3, -6, 6, -1, -10, 0, -9, -8, -1, 3, 7, + 8, 9, -1, 6, 6, 13, 2, 1, 2, 0, 4, 12, 6, -3, -10, 4, 7, -2, 3, 10, 10, 10, 5, 11, 6, 12, 0, 4, -9, -10, + -16, -17, -31, -15, 9, 2, -4, 0, 5, 7, -9, -4, -14, -11, -28, -19, 13, 6, 9, -2, -3, -9, -1, -7, -4, -12, -2, -2, -13, 5, + 4, 1, -1, -1, 1, 4, 5, -1, 4, 1, -1, -2, 3, -3, 4, 0, -2, 5, -1, -2, -8, -14, -6, -8, -5, -5, -8, -5, -5, -5, + -10, -7, -7, 2, -2, 0, 10, 9, 10, 6, 13, 8, 9, 17, 9, 9, 6, 3, 5, 1, 4, -1, 1, -6, -6, -9, 3, 12, 4, 3, + 4, -5, 5, 3, -5, 6, 8, -4, -5, 3, 7, 1, 16, 0, -3, -5, 1, -2, 5, 7, -3, 15, 14, 7, 5, 9, 10, 11, 1, -3, + 1, -5, -13, -7, 2, -2, -5, -1, 13, 13, 4, 2, -9, -3, -13, -6, 10, 9, 2, 1, 1, -2, -5, -3, -2, -1, 2, 2, 6, -70, + 11, -7, 3, -31, -3, 15, 12, 13, -15, 11, -9, -13, -10, 9, 0, 14, 4, -8, -3, -16, 2, 0, -4, 14, 8, 6, 4, 13, 17, 15, + 21, 16, 24, 16, 2, 3, -7, -16, -16, -5, 5, 3, 12, 8, 7, -8, 8, 13, 4, 8, 3, 9, -1, -2, 5, -9, -25, -2, -2, 0, + 7, 6, 9, -5, 12, 18, 17, 12, 6, 3, 6, 5, 5, 3, -8, -9, -9, 4, 6, 9, 6, 12, 8, 5, 12, 4, 2, -2, -7, 3, + 4, 7, 4, -11, -14, -6, -4, 1, 4, 1, -4, -11, -15, -5, -2, 5, 2, -3, -3, -3, -8, -15, 0, 7, -6, -8, -6, 1, -2, 0, + -2, -15, -2, 2, -6, 0, 0, -1, -7, -1, -2, -9, 10, 7, 10, 21, 13, 6, -11, -7, -5, -2, 6, 4, 6, -1, -5, -9, 1, -1, + 4, 3, 4, -1, 2, -14, -11, -10, -1, 1, 0, -4, -12, 9, 8, -4, -10, -3, -1, -9, -8, -5, -2, -9, 3, 2, -3, -1, 3, 13, + 8, 0, -12, -12, 1, 5, 4, -2, 3, 1, 1, -8, -5, -6, -6, 0, -2, 6, 7, -3, -2, 6, 2, -5, 0, -8, -9, 1, 1, -7, + -2, 5, 1, 3, 2, -2, 4, 9, 11, 9, 6, 0, 7, -1, -1, 1, 4, 2, -3, -5, -5, -8, -4, -6, -6, -2, 0, -5, -1, -1, + 3, 10, 3, 1, 4, 1, -8, 0, 0, -5, -2, -6, -2, -6, 3, 3, 2, 0, -12, -7, 0, 6, 9, 9, 9, -3, 4, -10, -8, -1, + -4, -5, 3, 8, 3, -2, 3, -9, -3, -5, 6, 0, 5, -3, -3, 3, -4, -1, 5, -9, -4, 5, 4, -6, 5, 20, 0, 7, 8, -2, + -3, -5, -8, -7, -43, 4, -1, 3, -2, 2, 16, 15, 9, -3, 7, -3, -14, 14, 8, 17, 13, 5, -9, 4, 0, -17, -4, 6, 12, 6, + 0, 9, 8, 7, 8, 16, 17, 6, 6, -2, -6, 0, 7, -12, 5, 10, 7, 5, 9, 17, 3, 6, -1, 4, 11, 4, 14, 6, 0, -2, + -9, -21, -17, -3, 11, -8, -5, 7, 7, -21, 22, 7, 7, -2, -3, 6, 2, 9, -2, -9, -20, -15, 0, 5, -2, 9, -4, 4, 14, 9, + 10, 0, -3, 8, 4, 0, 7, 3, 9, 1, 0, 5, 1, 19, 17, 10, 2, 17, 9, 12, 3, 15, 21, 8, 8, 4, -3, -10, -4, -13, + -13, -2, -7, 6, 6, -6, -22, -10, -3, -13, -3, -3, -8, -9, -9, -3, -2, -1, 9, 9, -12, 10, 0, -15, -5, -6, -1, 4, 3, 11, + 12, -7, -3, -2, -13, -18, -13, -1, -10, -10, -4, 0, -16, 1, -11, -4, 1, 0, 2, 7, 5, -14, -8, -10, -16, -2, -14, -8, 7, 2, + 6, 7, -8, -10, 4, -9, -9, -11, -2, 4, 13, 3, 5, 4, 1, 3, 5, -1, 1, 3, 7, 2, 2, 2, 12, 3, 3, 4, -5, -1, + 0, -3, -1, -10, -11, -10, -8, -10, -8, -2, 1, -6, -4, -3, 1, 1, -10, -1, -4, 1, -5, 0, 2, -5, -9, -2, -4, -8, -16, -14, + -8, -10, -2, -2, -1, 1, 1, -1, 4, 3, -5, -3, -7, -4, -12, 0, 10, 7, 4, 5, 3, 15, 11, 0, -7, -12, -8, -4, -4, 6, + 5, -1, -6, 1, 8, 8, 7, 15, 1, 2, 4, 1, -8, -4, -2, -3, -10, -18, -17, -4, -6, -12, -1, -1, -18, -19, -17, -19, -17, -4, + 6, -10, -6, -6, -5, -10, -12, -13, -20, -43, 5, 1, 4, -5, 5, 6, 28, -3, -15, 11, -6, -1, 16, 2, 1, 18, 18, 1, 7, -11, + -18, -9, -1, 3, 3, -1, 11, 4, -6, -2, 10, 16, 5, 0, -2, 6, -8, 1, 2, 5, 1, 9, 16, 10, 8, 21, 15, 3, 14, 11, + 8, 4, -3, 1, -2, -10, -7, -15, -6, -1, -10, 8, 3, 8, -41, 15, 11, 8, 7, 9, 8, 4, 5, 3, 2, 6, 9, 17, 16, 14, + 9, 1, 4, 23, 18, 11, 5, 4, 16, 12, 5, 8, 2, 13, 3, -3, 4, 16, 15, 6, -2, 12, 12, 8, 3, 3, 5, 15, 8, 1, + -2, -9, -14, -3, -5, -2, -3, -6, -3, 6, 0, -4, -4, 0, -1, 2, -11, -14, -2, -4, -2, 1, -5, -2, 4, 6, 8, -2, -7, -3, + -12, -13, -1, -3, -9, -9, -8, -8, -7, -5, -7, 2, 1, -5, -6, -7, -4, -13, -7, -10, 2, -13, -10, -3, -9, -17, -13, -14, -15, -18, + -1, -1, -18, -3, -4, -8, 3, 3, 0, -12, -23, -4, 8, 5, 22, 7, 9, 12, 15, 8, 7, 9, 6, 5, 1, -3, -5, 1, -2, 2, + 1, 1, 1, 1, -1, 7, 5, -6, -3, -8, -6, 2, -1, 2, 8, 2, 2, 1, 4, 2, 5, -1, -7, 1, 0, 1, 6, 9, 2, 4, + 2, 1, -3, -7, -8, -6, -14, -8, -1, -3, -6, 5, 2, 2, 3, 7, 5, -2, 4, -7, -5, -5, -3, -1, 5, 5, 2, -4, -7, -7, + -6, -10, -6, 0, 7, 8, 4, -2, 11, 16, 11, 12, 9, -4, -7, -3, 2, -18, 4, -2, 3, -4, 3, 16, 16, -5, -8, -9, -5, -20, + -3, 7, 0, 1, 0, 8, 3, -1, -1, -5, -5, -11, -4, 3, -26, 18, 1, 14, 18, 12, 31, 34, -8, -15, 14, -10, 18, 26, 10, -3, + 16, -1, 10, -2, -12, -6, 0, -2, -11, -11, -9, 6, -6, 6, 5, 2, 13, 7, -5, -2, -3, -14, -7, -9, 1, 21, 9, 18, 15, 13, + 9, 5, 3, 2, -4, -2, 14, 8, -3, -8, -6, -9, 2, 7, 6, 5, 10, 5, 1, -80, 25, 14, 15, 10, 12, -11, -3, -4, 3, 8, + 8, 9, 9, 6, 24, 32, 28, 34, 33, 22, 15, 12, 11, 13, 12, 8, 13, 17, 6, 19, 6, 1, 9, 12, 7, 8, 16, 9, 6, -3, + 4, 15, 27, 19, 10, 1, -5, -9, 4, 9, 12, 23, 23, 27, 35, 22, 16, 26, 11, 9, 11, 10, 5, 12, 3, -8, 8, 3, 5, 0, + 5, 13, 5, -20, -21, -3, -8, -7, -12, -19, -7, -11, -12, -13, -16, -6, 6, 2, 6, 15, -1, 8, -11, -10, -17, 2, -18, -19, -1, 5, + -17, -20, -24, -22, -21, -9, -5, 4, 20, 5, 3, 12, -6, 1, -12, -10, -1, 2, 0, 6, 10, 10, 8, 15, 3, 0, 2, -1, 3, 0, + -4, -6, -4, 0, 0, 2, -6, 3, 1, 7, 0, -6, -10, -5, -7, -7, 2, 4, 0, -2, -4, -3, -4, 4, -3, 1, -5, -5, -6, -5, + 3, 2, 12, 1, 0, -1, -6, -10, -20, -9, 0, 5, 5, 3, -3, 1, 12, 6, 2, -3, -10, -8, -14, -15, -6, 1, 11, 14, 17, 15, + 17, 13, 10, 14, 11, -2, -12, -16, -22, -13, -9, 3, 3, 4, -3, -6, 1, 4, 5, 12, 10, 1, -13, -7, 4, 10, -5, -12, -6, -5, + 1, 1, -1, 1, -3, 0, 9, 6, 4, 8, -2, 4, -5, -12, -16, -9, -19, -8, -15, 3, 49, 3, 15, 43, 68, 46, 27, -23, -15, 24, + 0, 20, 34, 18, 10, 4, -5, 5, 3, -2, -3, 15, 8, -10, -7, -3, 5, -3, -6, -2, -10, 5, 0, -5, -17, -15, -24, -16, -7, -13, + -2, -1, -5, -20, -5, -5, -10, 11, -5, -5, -13, -10, -2, -13, -26, -19, -19, -21, -6, -4, -3, 0, -15, -16, -127, 21, 15, 10, 6, 4, + -8, 4, 0, -16, -21, -31, -28, -17, -14, -2, 4, 4, 19, 27, 11, 9, 3, 2, 9, 1, 7, 1, 1, 8, 4, 2, -2, 9, 14, -4, + 1, 6, -4, 0, -11, -2, -2, -3, -12, -8, -7, -21, -20, 5, 13, 11, 23, 24, 3, 14, 1, -4, 12, 8, 17, 9, 3, 7, 4, -1, + -7, 1, -14, -2, -10, -7, -2, -9, -2, -8, -7, -5, -3, 15, 1, 0, 12, -7, 3, 6, 1, 0, -8, -3, 9, 4, 4, 0, 18, 17, + 19, 24, 18, 17, 15, 11, 13, -10, -12, -1, -8, -1, -2, 4, 9, 8, -2, 16, 4, 2, 3, 30, 23, 9, 20, 12, 13, 7, 8, 5, + 6, 2, -5, 0, -4, -12, -7, -5, -8, -7, -5, -12, -8, -14, -6, -8, -15, -12, -7, -8, -7, 8, 2, -1, -7, -5, -1, -1, -2, -8, + -8, -1, -2, -11, -1, 4, 4, 16, 14, 13, 4, 3, -4, -2, -6, 0, -6, -2, -10, -10, -14, -12, -12, -8, -5, -9, -7, -1, -5, -9, + -7, -8, -6, -5, -8, -5, -5, -12, 3, 2, 3, 11, 0, 2, 5, 3, 2, -7, 13, 13, 2, 6, 1, -7, 1, 2, -11, -8, -5, -2, + 1, -7, -16, -7, -5, -12, -6, -15, -8, 2, -9, -7, -9, -9, -10, -12, -13, -7, -3, 4, 6, -4, 4, 12, 15, 59, 14, 64, 62, 47, + 39, 80, 4, -48, 14, -3, 12, 45, 15, 13, 5, 6, 18, 24, 17, 17, 26, 21, 17, 7, 20, 2, 15, -7, 2, 2, 14, 14, 4, 10, + 4, -4, 4, 10, -2, 13, 13, 8, -2, -14, -11, -8, 13, -2, -7, -11, -6, -9, 7, 3, -12, -9, -9, 14, -7, -16, 3, 12, -2, -112, + -3, -3, 2, -1, 0, 4, 3, -5, -4, 2, 0, -1, -1, 0, 1, 0, 3, -3, -2, 5, 7, 1, -6, -5, 6, 4, 2, -5, -2, 4, + 0, 4, -1, 1, 4, 0, 1, -3, -6, -2, -8, 0, 3, 6, -4, 1, 4, 7, 3, -7, 7, 3, 1, -5, 4, 4, 3, 4, 1, 2, + 2, -2, 1, -2, -9, -4, -3, -4, 4, 4, 6, -1, -3, -2, 1, -4, -3, -6, -9, 3, -1, 6, 0, -6, -1, 2, 3, 5, 12, -2, + 5, 0, -3, 7, -7, -3, -1, -3, -12, -4, -2, 1, 2, 0, 6, 7, 2, -7, 5, 3, 2, -1, -3, -4, 3, 0, 5, 0, -3, -9, + -2, -1, 2, -1, 3, 0, -2, 2, 0, 5, -1, 3, 4, 5, 6, 4, 3, 0, -1, -4, -1, -3, -7, -8, -3, -2, 4, 1, 7, 7, + -3, -1, -4, -7, -1, 0, -4, -1, -3, 2, 3, 4, 4, -2, -6, -3, 0, 0, -1, -5, 3, -6, -2, 1, -3, 1, -1, 0, -4, 0, + 1, 4, 2, 0, 1, -1, 6, 9, 9, 5, -3, 3, 2, 0, -1, -3, 3, 0, 4, 4, 7, 3, 5, 4, 3, -3, -3, -2, -3, 3, + 7, 1, 0, 4, -7, -4, 0, 1, 2, 5, -2, 2, 0, 0, -2, 0, 5, 5, -2, -3, -4, -5, -4, 1, 2, 0, -5, 3, 5, -8, + 8, 3, 0, -10, -5, 13, 9, -4, -15, -2, -2, 6, -3, -5, 1, 2, -4, -8, -7, -1, -7, -10, -5, 7, -6, -11, 3, 8, -1, -8, + -3, 2, 2, 1, -9, -4, 0, -4, -2, 2, -2, -3, -3, 10, 3, -1, 9, 3, 1, 2, 7, 2, -7, -5, -2, -5, -2, -6, -1, -2, + -9, -3, 0, 4, -33, -5, 3, -1, 1, -7, 0, -8, -5, 1, 1, -5, -2, -4, -5, -3, -2, 0, -2, 0, -7, -7, 1, -2, 2, -1, + -1, 3, 5, -3, -5, -2, -6, -2, -5, 1, -5, -12, -3, -4, 0, -2, -6, 2, -1, -8, -7, -2, -1, -4, -10, -6, 0, -3, 0, 5, + -4, 3, -1, 0, 5, 3, 1, -6, -9, -5, -4, 1, 3, 0, 7, 3, -6, 7, 11, -1, 3, 3, -4, -7, -2, 8, -1, 5, -6, -4, + 3, -4, 2, 10, 4, 3, 5, -5, -1, 6, 13, -1, -1, -1, -2, 2, 0, 2, 2, -3, 3, 0, -4, 6, 6, 6, -5, -11, 0, 2, + -4, 5, -2, -8, -5, -5, -1, 3, 3, 4, 3, 5, 7, -2, -7, 0, 3, 3, 3, 1, -2, 2, -4, -2, -1, -3, -3, 1, -1, -4, + 0, 5, 5, 5, 7, 1, 4, -3, -2, 4, 0, -4, 0, 4, 6, -2, 3, -2, 0, -2, 1, 1, -5, 0, -4, -5, -3, -1, -6, -4, + 0, -2, 1, 2, 4, 0, -2, -1, 1, 1, 0, 6, -3, -4, 2, -6, -3, 5, 4, 1, 2, 4, 5, -2, 0, 9, 2, -4, 2, -4, + 7, -1, -3, -2, 5, -2, 3, 1, -4, -4, -2, 2, 4, -3, -2, -2, 7, 2, 4, 0, 2, -6, -1, 2, 2, -2, 0, 2, 2, 5, + -2, 1, -7, -1, 1, 17, -2, 6, -17, 1, -1, -2, 6, -3, -3, 5, -9, -15, 8, 4, -7, -1, -7, 3, -7, 0, 0, 2, 7, 0, + -7, 8, 10, 4, 9, 8, -1, 2, 2, -6, 4, 1, 0, -3, 1, -2, 5, -3, 0, 11, 10, 4, 11, 2, 6, 1, 3, 2, 2, 1, + -3, 7, 5, 1, -2, 5, -2, 3, 6, -31, 3, -5, -4, 7, -3, -1, -5, -2, -3, 3, 2, -7, 1, -4, -19, -7, -6, -8, 2, -7, + -10, -10, -4, -1, -6, -7, 0, 1, -1, 0, -3, -4, -2, -14, -4, -7, 11, 4, 5, -4, 3, 1, 3, -5, 6, -6, 0, 2, 6, -4, + -7, -5, -2, -3, 4, 6, -11, 2, -4, 1, 6, 5, 12, 9, 0, 2, 6, 6, 1, -4, -2, -2, 7, 1, -4, 4, 0, 3, -4, 7, + 4, 6, 5, 0, 0, -2, 0, 6, -2, 0, 3, -6, 3, 2, 0, 9, 9, -1, 9, -4, 1, 2, -4, -9, 8, -9, -3, 0, 2, -7, + 1, -9, 3, -4, -1, 2, -2, -4, -8, -6, -1, -2, -5, -9, -10, -4, 3, 3, 4, 3, 2, 2, 7, 0, -1, 0, 2, 1, 0, 1, + -2, -3, 0, -2, 5, 0, 4, 2, 4, 8, 6, -1, 1, 2, -1, -3, -1, 7, 0, 0, -3, -1, -7, -5, -1, 3, 0, -2, 2, -1, + -9, -1, 8, 2, 7, 1, -2, -2, -3, -5, 0, -5, 2, 4, -2, -3, 1, -2, -3, -7, 3, 1, 6, -2, -2, 2, -2, 4, -3, 1, + 6, 2, 3, 3, 1, 3, 7, 5, 4, -3, -9, 3, 6, -7, -1, 3, -2, 8, 10, 5, 5, -4, 8, 1, 6, -2, -4, -3, -4, 0, + 3, -6, 9, 1, -1, -11, -12, -7, -2, 2, 10, -12, 4, -17, 6, -15, -7, 2, -7, -9, 9, -8, -1, 1, -3, -12, -8, -2, 0, -9, + -9, -3, -4, -2, 4, -8, 10, 4, 2, 3, 5, -9, -9, 2, -9, -9, -7, -5, -2, 3, 1, 1, -5, -2, 6, 5, 3, 5, -5, -3, + 1, -3, -7, 6, 1, -13, -7, 0, -3, -9, -3, -3, -2, 5, -16, -4, -9, 0, 1, 0, 2, -1, 6, 8, 9, 10, -2, -2, -1, -4, + -2, -7, -8, -5, -4, 1, 5, 1, -4, 3, -2, -5, -3, -3, -6, -10, 0, 1, -8, 0, 0, 4, 8, -1, -6, 0, -2, 6, -1, 6, + 5, 4, 9, 6, 6, 4, 1, 4, 4, 6, 3, -11, -10, -6, -3, -1, -5, -7, -8, -3, -7, -8, -3, -12, -4, 5, -8, 4, -2, 1, + -1, 2, 6, -2, 11, 2, -3, 2, -2, -12, -9, -15, 3, -6, 0, -4, 4, 3, 11, 8, 2, 2, -8, 0, -4, -2, 3, 0, 4, 11, + -3, 4, 3, 1, -5, -1, 0, 1, -5, -3, 3, 5, 8, 2, -5, 0, -5, -2, -2, -7, -6, -6, -2, 1, 3, 7, 4, 9, 5, 2, + -1, -3, 1, 0, 5, 5, 4, 7, 0, -1, -4, -2, -2, -4, -4, -5, 0, 4, 11, 2, 5, 0, 2, 1, 0, -1, -6, -4, -2, 6, + 5, 1, -2, -1, -3, 2, 4, 0, 4, 7, 0, -3, -6, -3, 2, 3, -6, -3, -4, 0, -2, -3, 1, -2, -3, -2, -6, 0, -2, -2, + -2, -4, -2, 2, -1, -2, 3, 7, 5, 2, 7, 4, -4, -3, -2, 0, -2, 5, -2, -6, -4, -2, 3, 0, 6, 3, -2, 6, 2, 1, + 3, 0, 2, -4, 1, 1, 2, 4, 7, 3, 5, 5, 7, 1, -3, -24, 11, 2, -18, 38, -34, 18, -3, -4, -5, 18, -8, -5, 1, 1, + 3, -8, -3, 1, 2, -2, -14, -4, -4, 3, 7, 11, 2, 4, 4, -9, -9, 4, 1, 3, 0, 0, -3, -3, 7, 8, 8, 5, 15, 0, + 2, 3, 4, -1, -7, -7, 0, -6, 0, -6, -6, -11, -1, -2, -6, -1, -2, 4, 2, -1, -12, -9, -9, -7, -2, 4, 2, 8, 0, -8, + 2, 4, 0, 6, 3, -1, 4, -5, -11, 1, 3, 6, -3, -6, 1, -2, -2, -3, -9, -10, -13, -10, -5, 1, 0, -5, 9, 13, 1, 4, + 1, 4, -11, -8, -12, -10, -5, -5, -11, 1, 0, 6, 8, -3, 1, 8, 6, 5, 15, 8, 8, 4, 2, -2, -3, -15, -14, -23, -24, -23, + -19, -29, -34, -32, -29, -35, -29, -29, -19, 0, -6, -3, 9, 9, 3, 2, 0, 2, 4, 2, 0, 7, 20, 9, 17, 20, 24, 18, 8, 0, + 4, 8, 9, 9, 11, 22, 15, 9, 27, 16, 2, 13, 5, -3, -4, 3, 7, 2, 1, -17, 5, 1, 7, 2, 6, 4, 3, -2, -3, -3, + 1, -1, 0, 4, 0, -1, 1, 2, 0, -2, -6, 2, 9, 0, -3, -6, -5, -1, -6, -6, -5, -3, -5, -3, -7, -7, -1, -3, -5, 2, + 0, 3, -5, -5, -4, 0, 0, 1, 2, 2, 6, -1, -1, -2, -1, 7, 11, -2, 2, 10, 9, 10, 4, 2, 3, -5, -3, -11, -10, -6, + -5, -7, -7, -5, -6, -5, 2, -1, 4, 8, 17, 12, 14, -1, 1, 1, -4, -8, -3, -2, -4, -1, 2, 5, 4, 2, 4, 2, -5, -9, + -5, -1, 2, 9, -3, -5, -2, -3, -3, 1, -4, -5, -9, -14, -13, -13, 4, 3, 12, 6, -42, 30, 15, -13, 59, -66, 46, -24, 19, 3, + 25, 0, 2, 11, 4, 10, 0, 2, 5, 7, -14, -3, -1, -5, -7, 0, 10, 3, 6, 5, -3, -5, 6, 15, 3, 2, 8, 0, 1, -4, + -3, -1, 1, 2, -1, 7, 0, -5, -3, -2, 2, -5, 0, 4, -4, 7, -8, 0, 4, 5, 0, 2, 2, 0, 22, 10, -2, -7, -7, -11, + 5, 7, 9, 9, 4, 6, 0, -2, 1, -5, -13, -8, -3, -4, -4, 1, 11, 18, 12, 13, 4, -4, -10, -13, -16, -24, -22, -15, -12, -6, + -10, -11, -16, -13, -16, -9, -10, -12, -20, -4, -9, -11, -14, -27, -18, -19, -13, -12, -13, -19, -20, -17, -8, -5, -4, -3, -12, 1, 3, 3, + 12, 12, 25, 29, 23, 18, 3, -9, -20, -32, -42, -51, -32, -24, -1, 1, 8, 6, -6, -5, -1, 3, 17, 3, 0, -5, -8, -2, -2, 11, + 6, 18, 11, 4, 2, 13, 13, 3, 11, 9, 15, 5, 11, 5, 4, -6, -6, 17, 17, 26, 32, 25, 11, 28, -12, 4, 4, 9, 12, 14, + 7, 0, 4, -1, 2, 4, 3, -1, 3, 13, 11, 8, -1, -1, -1, -4, -2, -2, -10, -8, -7, -5, -5, 1, 1, 0, 0, -4, -5, -15, + -20, -16, -13, -19, -14, -18, -16, -14, -19, -20, -18, -13, -18, -3, 5, -3, 2, 3, -2, 0, 3, -1, -6, 3, 3, 6, 8, 13, 19, 18, + 22, 32, 22, 19, 5, -9, -32, -48, -65, -77, -76, -72, -52, -31, -9, -3, 2, -2, 9, 5, 1, 5, 11, 2, -3, 2, 5, 4, 11, 8, + 6, 12, 1, -3, -9, -12, -13, -9, -3, 1, -7, -11, 7, 4, 14, 26, 33, 43, 34, 23, 3, -24, -58, -93, -127, -50, 51, -9, 1, 53, + -89, 62, -88, 21, -44, 45, -66, 38, -19, 10, -15, 10, 5, 10, 8, 2, 15, 10, -11, -14, 5, -6, -6, -2, -12, -11, -8, -3, 10, 6, + -9, 2, -12, -10, -5, -7, -4, -11, 1, -9, -7, 6, 2, 6, 4, 0, -1, -5, 0, 1, -3, 3, -5, 0, 5, 10, -6, -5, 6, -5, + 10, 5, -4, -3, -3, -4, -3, 1, 2, 7, 2, 3, -6, -4, -3, 7, 3, -1, -6, 0, -3, 2, -2, 2, -5, 0, 1, 4, -4, -1, + 4, 0, -1, 4, 5, 4, 0, -2, 0, 2, -8, -4, 1, 3, 0, 5, 8, 5, 4, 7, 8, 3, 2, 2, 8, 7, 17, 5, 11, 11, + 11, 7, 1, -5, 4, 5, -1, 6, 5, 9, 12, 10, 5, -2, 1, -4, -3, -1, 0, 1, -4, -3, 1, -1, -6, -9, -16, -1, 1, -2, + 9, 11, -1, -1, -2, 10, -5, 11, 0, 3, -2, 5, 1, 4, -6, -2, -2, 0, -3, -2, -2, -2, 5, 0, 5, 1, -8, -7, -2, 5, + 4, 3, 1, -2, -4, 1, 3, 3, 2, 8, 5, 5, 5, 5, 5, 8, 4, 2, 0, 1, -1, 0, 2, 0, 0, -3, -4, 1, 1, 0, + 1, 2, 2, 3, 0, -2, -5, -1, -3, 2, -5, -1, -1, 0, 3, 2, 5, -6, 1, -1, 0, -1, -2, -1, -2, -1, -1, 3, -2, 7, + 3, 2, 3, 0, -1, 7, 0, 2, 5, 7, 4, 1, 2, -1, 1, 6, 6, 1, -1, 2, -3, 1, -7, -3, -4, -8, -2, 1, 2, 3, + -3, 1, -4, -3, -6, -3, -10, -5, -1, 1, 0, 0, 1, -1, -6, 1, 1, -4, -8, 0, -6, 1, 0, 7, -2, -6, -6, -5, -3, -1, + -1, 23, -3, -23, -23, 8, -13, -18, -12, -1, -10, -8, 3, -2, -2, -3, -1, -2, -4, -4, 4, 4, 5, 1, 12, 4, 11, 26, 5, 7, + -8, -10, -5, -7, -6, 0, 7, 12, 3, -3, 2, -1, 3, -8, -2, -8, -5, -7, -9, -5, -12, -7, 4, -3, 11, 7, 7, 10, 7, 6, + 7, 12, 6, 1, 10, 8, 3, -2, -2, 3, -2, -12, 0, -7, -6, -1, 3, 2, -1, 4, -7, -1, 0, 3, 1, -2, -11, -9, -2, -2, + 3, -3, -2, -7, 2, 3, 8, -5, 6, 3, -5, -1, -13, -5, -8, -11, -7, 4, 2, 4, 4, 0, -4, -6, 3, -6, -10, 3, 2, -8, + -2, 6, -3, 2, 9, 10, 4, 8, -6, -3, -10, -12, -7, -6, -4, -2, 5, 0, 3, 11, 0, 6, 0, -10, 7, -10, 0, -11, -8, -3, + -14, -10, -12, -6, -3, 3, 14, 6, -2, -3, 8, -5, 7, -4, 5, -2, -1, 1, 1, -8, 2, -4, 4, 7, 10, -4, 7, 1, 2, 5, + -3, -2, 2, 11, 7, 8, 7, 2, 2, -1, -6, -6, -3, -2, 1, 2, -1, 1, 4, -4, -4, 1, -1, -2, 1, -1, -3, -5, -2, 2, + 2, -3, -3, -2, -1, -3, -2, 0, -1, -3, -1, -7, -2, 4, 5, 1, 3, 13, 11, 8, -1, -3, -7, 0, -3, 3, 1, 0, -2, 2, + 4, 5, 0, 2, 3, 8, 2, -2, -6, -1, -5, -2, -6, 0, 2, 0, 4, 5, 1, 8, 7, 4, 4, -2, -4, -5, -5, -1, -3, 0, + -6, -7, -2, -1, 2, 3, 5, 8, 5, 5, -3, -5, -3, -6, -3, 1, -3, -2, 7, 0, 0, 1, -2, -2, -4, -1, 1, -2, 0, 3, + 4, 1, -1, 8, 7, 1, 3, -6, -9, -20, 11, -11, -8, -9, -1, -5, 0, 3, -11, -5, -1, -5, -5, 3, 2, 1, 3, -2, -1, 4, + 1, 7, 8, 3, 6, -4, 4, 2, 4, -1, 1, -2, 1, 9, 0, 2, -4, -2, -2, -6, -2, -4, -7, -6, 1, 0, 2, 0, -4, 2, + 6, -5, -1, 0, 4, 8, 5, 12, 8, 1, -6, 2, 7, 6, 2, 2, 4, 3, 0, -3, 3, 7, 3, -4, -4, 3, -2, -3, 1, -7, + 2, 8, 7, 6, 1, 4, -3, -2, 0, -7, -5, 0, 6, 6, 2, -3, -3, 2, 2, -1, -2, 0, 2, 3, 2, -5, -3, -5, 1, -7, + -11, 0, 0, -2, -9, -3, -7, 2, -3, 0, 1, -2, -4, 0, -7, -4, 2, 9, 3, 9, 5, 1, -5, 2, 0, -3, -2, 8, 3, 3, + 6, -2, 0, 9, -4, -15, -8, -2, -8, -4, -6, 7, 4, 8, 8, 9, 0, 6, -1, 1, -1, -14, -2, 2, 1, 1, 6, -5, 1, 0, + -7, -2, 4, -4, 0, -2, 0, 1, -1, -5, -6, 2, 6, 6, 5, 4, -6, -3, 3, 10, 6, 5, -3, -2, 1, -3, -3, -5, -2, 0, + -1, 1, 0, 3, 2, 0, 0, 3, 1, 4, 0, -1, 1, 2, 3, 3, -6, -4, 1, 5, 3, 2, 4, 1, 1, 4, -1, -2, -1, 3, + 1, -2, 2, -2, -2, 5, 9, 0, -2, -1, 7, 5, 4, 1, 1, 6, 6, 5, 4, 2, -6, -2, -2, 0, 6, 5, 3, -2, -3, 4, + -7, 2, -8, 1, 5, 2, -1, -8, -9, -1, -1, 1, 4, 9, 5, 0, 3, 8, 8, 9, 10, 8, 3, 6, -2, 1, 4, 2, 2, -5, + 0, -3, 1, -1, 0, -4, 1, 0, -2, -6, 2, 8, -17, -4, -20, 9, -3, -12, -4, 3, -7, -8, 8, -1, 3, 1, -6, -2, -1, -11, + -12, -3, 8, -3, 0, 0, 13, 17, 12, -1, -3, -4, 0, 3, 3, -1, 9, 13, 14, -3, 6, 10, -1, 3, 0, -5, 2, -4, -10, -1, + 5, 0, -9, 11, 0, 6, 7, 2, 9, 4, 2, 4, 11, 3, -3, 9, 0, 5, 9, 3, 2, -1, 1, -1, 1, -3, 0, 4, -1, 3, + 2, 2, -4, -3, -6, -5, 5, 12, 6, 3, -2, 3, 0, -8, 5, 0, 0, -8, -3, -7, -8, -4, -12, 1, -5, 2, -3, 6, 1, -1, + -3, -5, 4, 8, -3, -2, 2, -2, -14, -17, -14, -11, -7, -2, -5, -9, -5, 1, 4, -3, -7, -2, 2, 1, -5, -15, 8, 13, -3, 1, + -1, 0, -6, -4, 8, -1, 9, -10, 12, 8, 2, 6, -1, -1, -18, -1, 1, 1, 2, 13, 9, 14, 2, -8, 1, -10, 7, 7, 5, 10, + 1, -11, -15, -4, -6, -3, -10, -7, 1, -10, -11, -7, 0, -4, 7, 0, 3, 5, 4, 5, 1, -2, -2, 6, 3, 5, 1, 1, -5, -8, + -8, -11, -8, -3, -5, 3, 3, 7, 5, -3, 0, -4, -1, -4, 0, 6, 6, 3, -1, 2, 0, -1, -1, 0, 4, 3, 5, 3, 2, 4, + 1, -1, -6, 1, -2, 0, 2, 1, -2, -2, -6, -4, 6, 6, -2, -1, 7, 3, 5, 5, 0, -3, -3, 3, -5, -6, -1, 1, -1, 1, + -2, -3, 1, -2, 3, -2, 6, 6, 6, 1, -3, -1, -2, -7, -9, 2, -1, 0, 5, 3, 3, 6, 0, 1, 6, 7, 2, 0, 3, 3, + 0, -5, -3, 3, 1, 5, 2, 5, 5, -3, 0, -3, 0, 1, 5, -12, 17, -8, -12, -41, 1, 2, -8, 4, 11, -3, 4, -5, -2, -3, + -8, -2, -10, -8, -15, -10, -5, 8, 2, 8, 5, 16, 0, 0, -3, 2, 7, -3, 2, -3, -1, 1, 8, 11, 5, 8, 5, 8, 3, -1, + 4, 3, -5, 2, -6, -3, -3, -3, -2, 9, -7, 4, 2, 6, 9, 3, 12, 7, 4, -7, -9, -6, 4, 1, 2, 4, 0, -11, -15, -4, + 3, 10, 16, 1, 0, 7, 4, 4, -1, 4, -1, 3, -4, 2, 0, -4, -3, -5, 0, 1, -1, 6, 7, -3, -8, -8, 4, 8, 10, 3, + 6, 11, 6, 4, -3, 3, 6, 4, 8, 9, 17, 18, 9, 3, 0, -1, 1, 8, -1, -6, -5, 1, 0, -9, -9, -2, 3, -7, -7, -18, + -17, -11, -2, 3, 2, -8, 0, 3, 6, 5, 2, 5, 0, 0, -1, -1, 3, 2, -11, -13, -8, 1, 0, 14, 19, 20, 30, 17, 17, 10, + 2, 2, 0, 6, 14, -10, -4, -13, -13, -2, -1, 0, 0, 5, 0, 2, 4, 5, 3, 3, 2, 5, 5, 11, 5, 7, 1, -1, 4, 0, + 2, 4, 9, 7, 9, 3, 9, 11, 8, 5, -2, -1, 1, -4, -8, -6, 1, 0, -5, 0, 1, 9, 1, 2, 1, 1, 4, 4, 2, 5, + 1, 4, 4, 5, 1, 1, -5, -6, -8, -11, -10, -4, -8, -18, -10, -1, 5, 7, 7, -1, 3, 5, 4, 3, 2, 2, -2, -2, -3, -11, + -18, -13, -4, -3, 2, 4, -2, 3, 5, 5, 8, 0, 6, 1, 4, 4, -1, -3, -5, -4, -4, -6, -3, 7, 9, 5, 6, 2, 3, 0, + 0, -2, -4, -1, 0, -1, 2, 4, 1, -1, -1, 0, -10, -4, -5, -1, -1, -5, 1, 5, -34, 41, -16, -9, -29, 16, 23, 3, 4, 9, + 1, 6, -12, -13, -5, -12, -7, 11, 11, -5, 5, -3, 4, 0, -2, -7, 9, -1, 1, -9, -15, -6, -7, 1, -5, -3, 0, 0, 4, 4, + -1, 1, 0, -2, -1, 3, -3, -9, 3, 3, 5, 0, -2, 9, 11, 5, -2, 3, 6, 5, 2, 11, 8, 9, -2, 2, 0, -1, 7, 6, + 9, 7, 13, 1, 5, 9, 17, 28, 46, 30, 18, 13, 8, 0, 8, 5, -5, -4, -1, 15, 11, 2, 0, -7, -11, -15, -9, -7, -1, -6, + -10, -5, 1, 6, 10, 13, 9, 7, 0, -6, -10, -2, -4, 3, 10, 10, 11, 13, 1, -5, -1, -14, -13, -1, 6, -3, 9, 0, -6, 7, + 7, 0, -2, -9, 3, 6, -7, 10, 4, 3, 0, -10, -6, -10, -1, -11, -3, -2, 14, 13, 21, 20, 21, 4, -5, -39, -28, -33, -23, -10, + 15, 24, 19, 20, 9, -8, -10, -9, -13, -7, -17, -2, -13, -8, -3, -11, 2, 2, 18, 7, 15, 12, 11, 13, 30, 3, 4, 3, 3, 0, + 4, 4, -2, 2, 0, 2, -2, -2, 5, 0, 2, -1, -3, -1, 7, 6, 1, 0, 3, 5, 1, 2, -1, -11, -9, -7, -2, -2, -7, -3, + -10, -10, -16, -11, -3, 0, -2, 6, 4, 7, 10, 8, 13, 5, 6, 3, 4, 4, 5, -2, -1, 5, 6, 3, 6, 15, 11, 10, 10, 15, + 11, 9, 8, 3, 4, 8, 9, 9, 14, 14, 11, 5, 0, -3, 4, -7, -10, -12, -7, -10, -9, -16, -27, -41, -48, -59, -57, -42, -39, -17, + -4, 7, 7, 2, -8, -12, -11, -9, 0, 7, 15, 19, 16, 21, 23, 22, 20, 15, 10, 5, 2, -8, -18, -30, -51, -58, 127, 59, 19, -25, + 78, 58, 23, 38, 37, 9, 34, -18, 1, -4, -17, -5, 11, -7, -18, -4, 7, 1, 9, -1, 0, 3, 2, -11, -2, -14, -16, -14, -7, -6, + 1, 4, 10, -4, -6, 0, 2, -2, -9, -5, -6, -10, -23, -11, -8, 4, -5, -9, 0, 0, -6, -1, -19, -6, -12, -16, -18, -2, -12, 46, + 2, 10, 9, 5, -6, -6, 2, -5, -1, 9, 2, -3, -1, -2, 0, 6, 3, 1, 1, -2, 6, 0, 2, -16, -12, 0, 1, 4, 1, 1, + 4, 5, 0, -1, 0, 6, 10, -8, 5, 11, 15, -3, -7, -2, 11, 2, 7, 6, 4, -10, -7, -2, 4, -8, -5, 1, -5, -2, -10, -9, + -2, -1, -6, -5, -8, -12, -7, -6, 3, -5, -3, 1, -3, -1, -7, -9, -6, -6, -6, -3, -6, 7, -2, 2, 14, -2, 0, -6, -8, -6, + -4, 1, 2, -9, 6, 2, 8, 5, 2, 2, 0, 3, 3, 8, 11, 13, 9, 4, 9, 4, 11, 5, 1, 4, -12, 1, -4, -7, -2, -9, + -6, -4, 1, 0, -3, 0, 0, -2, -2, -1, 0, 3, -1, 0, 5, 6, 4, 2, 4, -2, 1, 0, -6, -9, -1, -6, 1, 3, 3, 3, + -3, -4, -6, -5, 1, 2, -5, -7, -3, 1, 6, 9, 3, 5, 11, 9, 8, 12, 10, 1, -6, -8, -7, -8, -4, -1, -8, -7, -4, 5, + 6, 1, 0, 6, 1, -10, -2, 2, 3, 0, -3, -1, -1, 1, 6, 0, -8, -1, 4, 0, -3, 3, -2, -3, -1, 8, 3, 3, 1, 3, + -1, 2, 3, 5, 1, 5, 0, 0, 7, 1, 8, 6, 8, 1, -6, 6, -2, 7, -1, 0, -5, -11, -13, -3, 0, 6, -5, -13, -2, -2, + 3, 0, -19, 4, -1, 3, 3, -3, -18, -17, -11, 7, 7, -3, 0, 1, -2, 3, 0, 13, -6, 5, 0, -8, -9, -3, -5, -8, -11, 0, + -6, -9, -1, -2, 1, 14, 11, -6, -4, -7, -1, 2, -16, -4, -1, -6, 5, 6, 2, -3, 6, 2, -6, -1, 2, 4, 14, 8, 0, 2, + 0, 0, -3, -8, -17, 0, 2, 5, 4, -5, -5, 8, -1, 2, 15, 2, -1, 0, 2, 1, 14, 1, 1, 1, 12, 6, -1, -7, -6, 3, + 4, 6, -3, -4, -7, -2, -7, -9, -8, -3, 4, 4, -1, -2, -3, -4, 3, -5, -2, 0, -3, -3, 11, 1, -4, -7, 1, 2, 0, 6, + 7, -8, -7, 0, -3, 1, 3, -10, -5, 6, -4, -7, -9, -2, -2, -7, -5, 0, 3, -2, 3, -1, -2, -2, -3, -5, -5, -9, 0, -6, + -14, -2, 9, -9, 1, -5, -2, 3, 3, 0, -6, -6, -3, -11, 5, -7, -9, -2, -16, -3, 4, 3, 1, 18, 5, -3, -3, -2, 10, 6, + 15, 10, 9, -1, -11, 0, -6, -3, -3, -6, 2, 8, 4, -1, -6, -5, -3, -5, -2, -3, -1, -1, 1, -2, -6, -6, -5, 3, 4, 3, + 5, 6, -2, 4, 5, 4, 6, 2, 2, 8, 12, 6, 0, -1, 1, -1, -2, -10, 0, -1, -9, -3, 7, -4, -4, -3, -2, -4, 1, 3, + -5, -1, -8, -2, 2, 3, 4, 9, 9, 14, 7, 5, 10, 4, 4, -2, -8, -1, 3, -4, 1, -5, -8, -6, 5, 6, 1, -3, -3, -2, + 1, 1, 4, -5, -7, 7, -3, -2, 2, 1, 3, 4, 0, 1, 0, -8, -7, 6, -11, 2, 4, 2, 5, 8, -3, -3, -3, 2, 4, 5, + -5, -3, -13, 6, 0, 4, -1, -5, -3, -4, 9, 2, 1, -11, -5, -8, -1, 7, -3, -5, -1, -9, 14, -7, 0, 4, -10, 4, 7, 8, + -5, -10, -1, -5, 4, -2, 4, -1, -2, -2, 10, 12, 17, 11, 3, -10, 4, -1, 1, 1, 5, 1, 12, -4, -7, -7, -3, 1, -2, 4, + 0, -3, -3, 6, -6, -6, 4, -4, -6, -9, 5, 8, 9, 5, 6, 1, 7, -2, 6, 4, 10, 3, 1, 3, 8, 9, 8, -2, -5, 1, + 1, 0, 2, -3, -2, 4, -9, 1, -9, -5, -7, 2, 6, 0, -1, 7, 9, 7, 1, 6, 10, 4, -3, 7, 1, -8, -10, -10, -13, -9, + -11, 0, 5, 6, 5, 7, 5, 4, -11, -3, 7, -2, 3, -4, 6, 1, -6, -4, 5, 0, -2, -4, 2, 6, -2, 4, -4, 5, -3, -8, + -15, -7, -8, -12, -7, -3, -4, -10, 0, -2, -5, 1, 1, 1, -1, -3, 6, 5, -5, 9, -6, 8, -2, -6, -2, -3, -2, 2, 11, 12, + 4, 8, 2, 5, -5, -2, -2, -6, -1, -5, 0, -6, 1, -5, -1, 1, -2, -3, -6, -3, -3, -4, -6, -4, 2, 4, 0, 1, 8, 5, + 3, 8, 9, 4, 3, 5, 0, -2, 1, -5, 1, 6, -1, 1, -4, 3, -4, -6, -3, 3, 1, 1, 1, -2, -2, -10, -1, 9, 2, -5, + 4, -6, 1, 2, 0, 2, -3, 1, -3, -2, -4, -8, -6, -7, -4, -4, 0, -1, 10, 10, -1, 3, 8, 9, 10, 2, -2, -1, 1, 4, + -1, 6, 2, -13, -10, -5, -11, -5, -6, -4, 2, 8, 8, 7, 4, 3, 3, 2, -7, -6, -14, 4, 3, -4, 1, 0, 6, 13, 3, -6, + -13, -11, -4, 5, -4, 1, -5, -1, 5, 3, 4, 15, 11, 10, -11, 17, 7, -23, -13, 5, -12, -4, 0, 10, -1, 10, 0, 2, 0, 0, + 6, 4, -7, 2, 14, -3, -1, -12, -2, 7, -3, -7, 0, 2, 11, -10, -2, 3, 11, -1, -3, -1, 2, -7, -2, 1, -3, 4, 1, -11, + -6, -9, 0, -1, -3, 1, -1, 7, 5, -3, 4, 6, 0, -4, -12, 1, -1, -3, -6, -3, -4, -3, 9, -3, 0, 4, -6, -14, 4, -13, + -9, -7, -10, -13, -11, 1, 5, 1, 0, -4, -2, 4, -10, 3, -3, 6, 6, -2, 4, 1, 8, 11, 13, -2, 11, 8, -1, 0, 2, 1, + 5, -2, 6, -2, 2, 0, -6, 8, 6, 1, 3, 1, -6, -5, 2, -5, -11, -2, -3, -9, 4, 0, 0, -1, -4, 2, 5, 4, 18, 14, + 12, 18, 8, 17, -3, -2, 5, 14, 4, -9, 13, -17, -10, -5, -16, -11, -7, 8, 10, 17, 9, 10, 8, 14, 4, 6, 5, 3, 1, 4, + 0, -3, 3, 1, -2, -8, 1, -10, 4, -3, 4, 0, 0, 7, 5, 6, 2, 0, -4, -3, -1, -2, -4, 1, -7, -7, -8, -7, -4, -3, + -1, -5, 1, -2, 7, 9, 5, -1, 2, -1, 0, 3, -1, -3, 1, 3, 4, -1, -1, 0, 0, -6, -1, -4, 0, 2, 0, -7, -1, -3, + -1, 3, 4, 3, 2, 3, 8, 3, 1, 3, 5, -4, -3, -1, 2, -2, -7, 1, 3, 2, -4, -5, -3, -2, 2, 6, -6, -6, 0, 0, + -1, -10, -7, -1, -2, -1, 3, -5, -8, -9, -3, -9, -7, -5, 3, 2, 9, 1, 1, -9, -3, -6, -11, 0, 3, -2, -3, -3, 2, 3, + 3, -2, -4, 2, 2, 6, 7, 1, 2, -6, 2, 0, 1, -2, 4, 6, 9, 12, -8, -17, 7, 5, -10, -22, -7, -9, 5, 6, 17, 5, + 9, 8, 5, 6, 5, 4, -15, -12, -11, 1, -14, -4, 6, 2, -3, 8, 9, 13, 4, -3, -1, 3, 3, -5, -2, -13, 5, 6, -2, 8, + -1, 9, -2, -2, -3, -5, 0, -12, 7, -6, 4, -5, -3, 7, -4, 4, 6, 2, 1, 9, -5, 3, 7, 1, -4, 6, 10, 1, 2, 6, + 6, -4, -6, 10, -2, 4, 0, -2, -1, -6, 4, 0, -1, 3, 12, -1, -12, 1, 12, 15, 4, 19, 23, 21, 12, 20, 11, 11, 4, -6, + -15, -16, -3, -11, -7, -18, -7, -3, -4, -5, -16, 0, -12, -16, -14, -8, -11, -1, 7, 8, -1, -11, -4, -1, -5, -2, 3, -6, -16, -4, + -13, -27, -17, -7, -2, -11, 0, 18, 19, 10, 17, 28, 24, 25, 10, 16, -5, -8, -23, -23, -25, -19, -10, -11, 0, -5, 3, 2, -8, -4, + 4, -1, 4, 3, 9, 2, 9, 7, -3, -7, -7, -18, -18, -10, -2, -8, -10, -15, -10, 1, -9, -7, -1, 2, 1, 3, 2, 5, 3, -2, + -3, 0, 1, 2, 6, 5, 6, 5, -2, -2, 2, -1, 4, 0, -3, -4, -4, -5, -6, -7, 4, 3, 1, 3, 4, 3, -2, -2, 2, 2, + -1, -6, -4, 0, 1, -2, 1, 6, 3, 0, -4, -1, 3, 4, 6, 2, -4, -4, 0, 0, -2, 2, 4, 3, 5, 7, 3, 3, -4, 0, + -3, 8, 5, 2, 5, 10, 14, 15, 12, 13, 14, 3, 9, 4, -11, -2, -3, -2, -11, -9, -3, 4, 6, 4, 9, 8, 8, 5, 6, -5, + -3, 4, 9, 10, 14, 9, 10, 3, -5, -1, -4, -11, -11, -18, -9, -9, -6, -1, 1, 4, -5, 28, 8, -15, 6, -27, 4, 8, -28, -52, + 14, 18, -7, 11, 13, -12, -18, 13, 6, -4, -4, 0, 6, 12, 6, 6, -1, 4, 8, 3, 10, 3, 15, -1, 1, 1, 6, 6, -6, -16, + 2, -8, -3, 11, 11, -7, -10, -6, 13, 11, -6, -7, -5, -4, -16, -8, 5, -2, 10, 5, 6, 10, 14, 11, 30, -13, -3, -2, 3, 1, + 0, -8, -14, -12, -20, -11, 2, 5, 22, 23, 11, -1, -17, -21, -29, -12, -10, 0, -3, 2, -9, -4, 2, 5, 8, 11, 10, 4, -9, -9, + -13, -5, 1, 4, 12, 22, 31, 21, 11, 8, 18, 9, 13, 6, 15, 17, 11, 4, -1, -12, -7, 5, 4, 15, 28, 9, 0, -7, -6, -19, + -16, -19, -7, -10, -19, -20, -24, -7, 7, -1, -2, -13, -16, -27, -35, -45, -33, -24, -16, 0, 15, 11, -7, -10, -28, -25, -31, -9, -1, 3, + 3, 5, -9, -21, -22, -20, -18, -1, -5, 10, 20, 15, 10, -10, -7, -1, 3, 8, 24, -12, 17, 2, 33, 17, 25, -14, -10, -4, 2, 2, + 9, 6, 3, 1, 2, 2, -2, 1, 4, 10, 8, 3, 2, 2, -1, 0, 1, -5, -10, -12, -9, -7, -7, -9, -15, -7, -9, -13, -18, -14, + -10, -4, -3, 7, 17, 11, 16, 13, 16, 17, 16, 15, 8, 6, 7, 5, 9, 15, 17, 15, 15, 17, 20, 22, 18, 13, 13, 17, 15, 13, + 13, 20, 22, 23, 19, 21, 17, 15, 7, -4, -27, -42, -43, -51, -50, -38, -16, 13, 32, 57, 62, 61, 44, 37, 22, 11, -3, 1, 1, -7, + -7, -10, -13, -23, -22, -22, -24, -24, -38, -51, -66, -73, -78, -67, -43, -10, 8, 18, 22, 19, 18, 20, 17, -10, -33, -56, 32, -126, 87, 18, + -41, -46, 127, -3, -81, -57, 123, -19, -67, 38, 60, -45, -31, 18, 33, -53, -37, 32, 5, -7, -2, 6, -8, 0, 10, 5, -10, -3, 6, 0, + -12, 6, 5, -2, -1, 10, 1, -4, -6, 2, -9, -3, -6, -8, -11, 1, -5, -2, -11, -14, -2, -8, -1, -14, -9, -18, 5, -2, -14, 96, + -5, -4, -8, 5, 9, 7, -3, -5, -3, 0, 2, 0, 2, 2, 2, 3, 2, 2, 3, 10, 5, 1, 2, 3, 6, -1, -3, 0, -5, 3, + 7, 15, 10, 11, 0, -4, 1, 0, 3, -2, -2, 3, 7, 4, 6, 6, 2, -4, -7, 1, 5, -1, -2, 5, 3, 2, 1, 0, 0, -1, + 0, 1, -12, -9, -3, 2, 1, 2, -3, 2, 9, -4, -3, -8, 1, 7, 6, 3, -2, -9, -5, -3, -9, -5, -4, -2, 1, -1, -2, 6, + 0, -3, 4, -3, -1, -4, -7, -5, -2, 0, -8, -1, -4, -2, -13, -7, -7, -3, -3, -14, 8, -3, 3, 4, 5, -3, 3, 1, -2, 3, + 3, 5, 4, 3, 4, 2, -2, -4, -2, 1, -3, 5, 4, -2, 1, -4, -2, 4, 4, 6, 0, -2, 1, -3, -6, -6, 0, -3, -1, -1, + -7, 0, 3, 5, 0, 2, -1, 5, -1, 2, 1, 5, 5, 3, -2, 1, 3, -2, -3, -6, -1, 2, 6, 5, 6, 3, 4, 5, 1, 4, + -5, -2, 0, -1, -7, -4, -10, -5, 4, 3, 1, -6, 3, 4, 5, 4, -3, -4, -2, -1, -3, -1, -7, 3, 6, 4, 8, 1, 4, 8, + 1, -5, 2, 3, 6, 2, 2, 6, 1, 6, 6, 3, -3, 0, -1, 2, 0, 0, -6, -6, 0, 0, 2, -2, -7, -8, 2, 7, 5, -4, + -18, 11, 18, 2, -6, 10, -3, 1, 17, 8, -3, 5, -4, 2, -6, 5, 4, -6, -4, -1, 1, 10, 4, -8, 1, -2, 2, -1, -4, -5, + 2, 6, 10, 4, -1, 2, -2, -4, 2, 2, -8, -15, -7, -10, -10, 9, -1, 1, -3, 0, 5, 3, -11, -7, -8, -1, 2, 2, 7, 0, + 3, 7, 9, 3, -21, 4, 3, 5, 6, 9, 6, 1, -3, -5, -6, -5, -4, 0, -5, -6, -2, 3, 0, -1, 1, -5, -2, 0, 7, 3, + 3, 2, -2, -6, -2, -6, -2, -6, 7, -4, -4, -11, -7, -1, 2, 2, 5, 0, 5, -6, -5, -5, 0, -6, 4, 10, 10, 0, 2, 1, + 0, -6, -5, 0, -1, -6, -1, -7, -2, 3, -1, -5, 6, 5, 5, -1, -6, -6, -4, 2, 5, 8, -8, 7, 10, 1, 2, 5, 17, 12, + 12, 8, 4, 0, -3, 1, 4, 3, -2, -3, 1, 2, 7, 8, 0, 0, 1, 5, 3, -4, -3, 12, 2, -1, -1, -6, -2, -5, -5, 9, + 9, -4, -5, -8, 4, -3, -4, 3, 3, 5, 3, -6, -2, -4, 0, -2, -3, -5, 2, -1, 2, 1, -3, 1, 3, 4, -2, 4, -1, -1, + -1, -1, 2, -3, 4, 2, -4, 5, 5, 8, 0, 1, 0, -1, 0, 0, 4, 7, 1, -3, 2, 0, -8, -5, -1, -2, -4, -2, -1, 0, + -3, -7, 0, -4, 2, 1, 3, 2, -6, 0, -5, -1, 0, 7, 1, -2, -3, 1, -5, -5, 4, 3, -5, -6, 8, 3, -4, -9, 1, 2, + 3, -2, 5, -2, 1, -4, 4, -2, 4, 0, 3, 3, 2, -2, -1, -1, -1, 1, -2, -3, 5, 3, -3, -5, -2, -1, 3, -2, 0, 5, + 1, 4, -1, 1, 3, -16, -6, 15, -2, -15, -11, -1, -11, 6, -4, -5, 9, -9, 2, -9, 3, 4, -10, -2, -2, 6, -3, -8, -2, -12, + -6, 9, 9, 6, 12, 6, -4, 1, 7, -2, -4, 0, -4, -1, 0, 0, -10, -2, -8, -4, 4, 10, 8, -4, 5, -1, 1, -2, -5, -4, + 0, 1, 14, 9, 4, 7, 0, 1, 2, -17, -2, -5, 0, 0, 9, 6, 2, -2, -4, -4, -6, -1, 3, -3, -4, 0, 0, 2, -2, -3, + -8, -4, -3, 0, 2, 1, -11, -9, -6, -2, -11, -9, -6, 2, 9, 0, -5, -3, -9, -6, 1, 8, 1, 0, -4, -9, 0, -4, -5, 0, + 4, 0, -3, 4, 3, -3, 5, 5, -1, 1, -2, -6, -1, -3, -5, 4, 1, -6, -5, 2, 11, 1, 0, 6, 11, 5, 0, 2, 3, 0, + -3, -9, 5, 4, 3, 1, -2, 3, 0, 10, -2, 6, -3, 5, -3, 8, -4, -3, -3, -11, -1, -3, 0, -6, 1, -5, 5, -8, -5, 2, + 5, 4, 4, 11, -3, 8, 3, 3, 0, 9, -3, -4, -1, -2, -1, 4, 2, -1, 4, 1, -3, 1, 4, 1, -2, 2, 2, 2, 0, -1, + -6, -6, -5, -3, 0, 0, -1, -1, 0, -1, -2, 2, 5, 6, 2, 4, 0, 3, 0, -2, 1, 3, 3, -2, -3, -5, 0, 1, -2, -4, + 0, 6, 5, 1, 3, 3, 4, 6, 8, 5, 0, 7, 3, 1, 1, -2, 1, 7, 3, -1, -4, -7, -8, -8, -8, -5, -9, -4, -7, 2, + -4, -4, 7, 4, 0, 3, -2, -4, 2, -6, 2, 1, -1, 1, -9, -4, 4, -5, -2, 0, 0, -2, 2, -7, 0, 4, 3, 4, -2, -3, + -2, 2, 5, 7, -2, -4, 1, 0, -2, -2, -15, -4, 17, 4, -4, -10, -4, -11, -11, 0, -5, -7, 6, -3, 0, 7, -9, -6, -4, -4, + -6, 16, -1, -14, -6, -2, -9, 0, 7, 2, 1, -1, -1, 1, -1, 2, 3, 1, 0, 4, -1, 3, -3, 6, -2, -3, 11, -4, 4, 3, + 6, 3, 2, 0, -18, 7, 7, 4, -1, 1, 12, 3, 5, 3, -5, -12, -2, 5, -2, -4, -9, -11, -10, -7, -4, 10, 4, -7, -6, 2, + -4, 2, 1, 0, 5, 5, 3, 1, -1, 4, 2, -9, -3, -1, 1, -4, -5, -3, -7, 0, -3, 7, 4, -6, -9, -1, -1, -1, -1, -8, + -4, 4, 0, 0, 2, -2, -1, -5, 2, 0, 5, -1, -9, -8, 4, -5, -6, 5, 4, -1, 4, -3, -1, -4, -1, 11, -3, 4, 8, 4, + -5, -9, 3, -4, 3, -3, 2, 7, 13, 6, 3, 2, -2, -1, -6, -3, 4, 3, 0, 6, 11, 2, 3, -3, 1, 0, 5, 1, -3, 0, + 1, 5, 8, 6, -5, -14, -10, -10, -6, -8, 5, 2, 14, 8, -5, -2, -3, 4, 0, 2, 0, 3, 9, 8, 5, 3, 4, -2, -1, 2, + 5, -2, 1, -4, -2, -9, -4, -2, -1, 7, 4, 2, -1, -1, 1, 2, 4, 0, -1, 0, -1, 0, 3, 0, 4, 4, 10, 7, 0, -2, + -3, -3, 0, 2, -2, 3, -2, -6, -6, -3, -1, -4, -1, 0, 3, 1, -3, 1, 5, 1, -4, 4, 1, -5, -2, 0, 4, 4, 6, 3, + 0, -4, 0, -9, -2, -5, -4, -7, 1, -6, -7, -5, 2, 3, -1, 9, 11, -1, 4, 1, -1, 2, -4, 3, 2, -2, 4, 1, -1, -4, + 0, 2, -3, 0, 8, 4, -1, -3, -7, 1, 2, -5, 2, -1, 1, -21, -17, 34, 2, 23, -15, 8, 12, -1, 13, 5, 2, 4, -11, -7, + 4, -3, -2, 2, -5, -6, 7, -8, -14, -4, 3, -9, 0, 2, -3, -2, -7, -3, -10, -17, 0, -9, -8, -5, -6, -8, -12, 3, 6, 4, + -5, 5, -1, -2, 8, 1, 1, -6, -3, -9, 5, -4, 2, 2, 0, -7, -1, 1, -8, -2, -13, -5, -10, -1, 1, 0, -4, 0, 2, 2, + 4, 0, -2, -2, 1, -3, 2, 1, 1, 4, -1, -1, 6, 5, 7, -3, -3, -7, -2, -4, -3, -1, 1, 1, 2, -8, -7, -11, -10, -10, + 8, 0, -14, -11, -6, 2, 7, 2, 3, 7, 7, 7, 8, 1, 10, 8, 1, -2, 1, 1, -4, 3, -6, -5, -3, 3, 0, -4, -1, -2, + 1, -9, 0, 2, 0, 12, 5, 9, 8, 18, 22, -2, 10, 9, 12, 2, 12, -10, -7, -5, -10, -8, -2, -2, 12, 12, 14, 9, 20, 21, + 10, 24, 20, 18, 16, 5, -4, -9, -11, -18, -23, -19, -5, -13, -18, -8, -18, -6, -10, -18, -4, 0, 7, 11, 5, 5, 5, 2, 1, -1, + 3, 2, 0, 1, 4, 4, 3, -2, 1, 2, 1, -1, 1, -3, -4, -8, -10, -5, -4, -9, -5, -6, 0, -3, -2, -3, 0, -3, -5, -5, + -1, 3, 1, 4, 7, 9, 7, 0, 4, 3, 7, -1, -6, -3, 1, 1, -4, -10, -6, -8, -5, -5, -5, 0, -1, -3, -1, 3, 0, 0, + 4, 8, 3, 11, 8, 4, 1, 7, -2, -4, -2, -3, 2, 3, 0, -8, -5, -3, 0, 2, -7, -4, -1, 0, 0, -1, -2, -2, 5, 13, + 10, 7, 1, -2, 0, 3, 3, 2, -4, -2, -5, 1, 3, 0, 6, 2, 7, 6, -2, 7, -35, -19, 29, -26, 60, -46, 27, 5, 10, 23, + 14, 31, 19, 0, 5, 9, -2, -3, -4, -12, -6, 5, 9, 4, 2, -3, 0, 4, 2, 2, -1, 10, 2, 11, -10, 8, -1, 3, 3, 7, + 13, 9, -1, 7, 2, 2, 2, 7, -8, -3, 3, 9, -4, 5, 0, -2, -8, -4, -4, -11, -8, -7, -12, -10, 6, 6, 1, 11, 6, 8, + 5, -2, -1, -5, -21, -10, -11, -11, -7, -4, -2, 5, 4, 0, 3, 7, 8, 5, 1, -2, -6, -2, -4, 0, -9, -18, -7, -10, -12, -15, + -16, -16, -12, -3, 0, -2, -1, -9, -6, -12, -16, -10, -13, -3, -8, -13, -18, -19, -20, -24, -12, -1, 4, -2, -3, 10, 17, 15, 10, 4, + 2, -2, -7, -16, -11, 0, 8, 4, 9, 21, 16, 23, 23, 20, 15, 21, 5, 3, 10, 11, 6, 4, 1, -6, -4, -6, -7, -1, 17, 22, + 33, 18, 18, 22, 19, 13, 8, 13, 24, 15, 4, 5, 1, 3, -7, -8, -15, -26, -37, -23, -32, -30, -28, -14, -19, -7, -4, 0, -4, -5, + -3, 5, 4, 8, 8, 5, 3, -4, 1, -1, 0, 2, 0, 6, 10, 12, 8, 6, 4, 2, 3, 3, 1, -3, -1, -6, -14, -7, -3, -4, + 2, 12, 15, 17, 21, 19, 13, 8, 5, 1, 1, 5, -1, 0, 1, -4, -10, -14, -7, -2, 3, 6, 3, 3, 1, 8, 14, 7, -3, -8, + -2, -10, -16, -16, -10, -8, -2, -1, 9, 15, 17, 18, 16, 12, 19, 9, 15, 17, 28, 17, 7, 1, -17, -42, -45, -57, -48, -27, 7, 18, + 26, 33, 36, 21, 20, 12, 12, 8, 18, 15, 30, 30, 30, 15, -19, -31, -62, -95, -108, -119, -117, -105, -78, -24, 36, -51, -22, 22, -37, 100, + -127, 60, 17, 11, 54, 8, 53, -8, 21, -23, 29, 46, -17, -13, 4, 14, -3, 2, 19, -4, 11, 14, -1, 0, 17, -3, -1, 9, 0, -9, + 6, 4, 4, 3, 9, 13, 0, 3, 3, -2, -2, -11, -6, 7, 7, 2, 7, -4, 3, -5, -2, 1, -1, -8, -10, -4, -12, -12, -13, 24, + -3, 1, 2, -2, 1, -1, 8, 6, 2, 1, -1, 1, 8, 5, 3, 1, -3, -9, 0, -2, -2, -1, 5, 6, 0, 2, 3, -4, 5, 1, + -1, 5, 1, -7, -12, -8, -6, -5, -2, 2, 7, 3, -7, -6, 1, -3, -2, -2, 1, -2, 0, 6, 1, -7, -8, -5, -3, 3, 2, 0, + 2, 0, -2, 1, 4, -3, 0, 1, 8, 5, 2, -2, -4, 4, 4, 5, -3, 8, 2, -6, -4, 4, 3, 7, 9, 5, 8, 1, -7, -1, + -9, -2, -6, -1, 2, -4, 6, -1, 3, -12, -5, -12, -10, 3, 2, 3, 6, 0, 2, 6, 8, 11, 10, 11, 0, -7, 4, 3, 8, 12, + -1, -2, -3, 0, -1, 2, 2, 0, 0, 0, 2, 0, -1, 1, 4, 3, 1, -5, 0, -3, 2, -4, -4, -5, 1, 3, 1, 2, 5, 1, + 2, 0, -2, -4, -3, -3, -6, -4, -1, 2, 2, 1, -1, 3, 2, 6, 3, 0, -3, -2, -2, -3, -7, -8, -8, -10, -2, -2, 2, 2, + -4, -5, -5, -2, -2, -5, -9, -2, -4, -2, 3, 0, 3, 3, 5, 1, 0, 1, 1, 1, 1, 8, -4, 5, 1, 1, -1, -1, 3, -5, + 0, 3, 3, 2, -2, 4, -2, -5, -4, -6, -9, -3, 2, 5, 5, 0, -2, 4, -9, -1, -3, -4, 0, 3, 3, 3, 5, -1, -1, -3, + -11, 6, -6, 15, -9, -5, -8, -4, -4, -3, -2, -10, -10, 3, 13, 6, 2, 4, 1, 3, 5, 10, -2, -2, 3, 8, 7, 4, 6, 4, + 1, -4, 8, 3, 5, 5, 1, -4, 5, -4, -1, -6, -3, 6, -9, -3, -7, 2, -7, 6, 1, -4, 7, 9, 2, 13, 4, 1, 5, 4, + 7, -3, 2, -1, -5, -2, -7, -3, 3, -1, -2, -3, -5, -1, -4, -1, 6, 2, 4, -3, 6, -6, -3, -2, -1, -1, 2, 4, 7, -2, + -6, -5, -1, -5, -9, 7, 1, -3, -10, -3, -7, -6, 3, -1, 0, 5, 1, -1, 3, 7, 1, -9, -2, 6, 3, 1, 7, 1, -1, -3, + -7, -4, -2, -6, 1, 10, 3, 4, 6, 8, 4, 0, -7, 3, -5, -5, -7, 1, 6, -1, 13, 13, 5, 3, 2, -3, -13, -4, -1, 3, + 5, -3, 6, -2, 1, -1, -2, -3, -1, 1, -6, 4, -3, -2, 3, -12, 1, 3, -2, -1, -2, 4, 1, -8, 1, 2, 0, 7, 10, 4, + 0, 10, -1, 5, -3, 9, 4, 0, 0, 0, 3, 0, 2, -2, -1, 4, 3, 6, 3, -1, -2, 3, -2, -3, -3, 0, 5, 7, 9, 1, + 5, 6, 5, -2, -6, 0, 0, -5, -8, -2, -3, -5, -5, -3, -1, -2, -1, 3, 1, 5, 5, 4, 0, 5, 3, 6, -1, 2, -1, -7, + -3, 0, -3, -2, 0, 3, 2, 5, 2, 2, 2, -3, -5, 0, -3, -5, -7, -8, -9, -2, 0, 0, -2, 2, -1, -2, -2, -5, -2, 0, + 5, 1, -1, -1, -2, 1, 3, 0, 4, -1, 0, -2, 0, 4, 2, -5, -5, 5, 1, 2, 4, 5, 3, -4, 2, 1, -2, -1, 0, -3, + -4, -2, 4, 7, 0, -10, 3, -2, 12, -4, 0, -4, -8, 1, -4, -8, 0, -3, 1, 3, 14, 1, 3, -4, 1, 10, -3, -2, -1, 3, + 0, 6, -1, 4, -4, 3, -14, -4, 6, 2, 1, 4, 7, 6, -2, -6, 4, 2, 8, 0, -7, -12, -3, -6, -7, -3, -3, -4, 2, -1, + 1, -1, 0, 3, 0, 1, 5, -2, -2, 1, 2, -3, -3, 5, 10, 4, 3, 4, 8, 2, -1, -1, -4, -5, 3, -3, -4, -5, -7, -3, + 0, 0, -1, 6, 4, -1, 0, -2, -10, -6, -11, -1, 5, 2, 2, -5, -2, -4, 3, -3, -6, -9, -1, -2, -6, -10, -9, -4, 3, 3, + -2, -2, 3, 5, 1, 3, 1, -3, -7, 6, 10, 6, 0, -6, -4, 5, 5, -3, 10, 12, -1, 4, 8, -4, -9, 0, -3, 9, 4, 4, + -5, -5, -6, -2, 7, 4, 2, 3, 3, 3, 5, 5, 7, 1, 4, 3, 1, 1, -2, -1, 0, -2, -2, -4, 6, 8, -1, -6, -1, 2, + -4, -2, 4, 6, 4, 1, 8, 3, -1, -1, 1, 3, -3, -3, 1, -4, -3, 0, -1, 0, -1, 0, -4, -2, -5, -2, -7, -4, -2, -1, + 2, 6, 4, 5, -2, -1, 1, 2, 0, -4, -5, 0, -1, -3, 0, 2, -1, 2, 9, 6, -2, -2, 3, 0, -7, -2, 1, -2, 0, -3, + 2, 0, -2, -1, 0, -8, -8, -1, 3, 4, 0, 4, 1, -2, 0, -3, 1, -4, -5, -1, -2, -3, 1, 0, -1, -5, -5, -5, -1, 4, + 7, 2, 3, 6, 6, 5, -1, 0, -5, -12, -2, 2, -2, -6, -4, -3, 1, -3, 2, 1, -4, -3, 6, -2, -1, 2, 5, 1, -4, -1, + -6, -5, -8, -3, -1, 0, 6, 7, 7, 0, -13, 3, 18, 7, -8, -9, -11, -10, -13, -3, 10, 0, -10, -4, 2, -1, 6, 0, -6, -7, + 3, 0, -1, -3, 14, 6, 4, -2, 1, -2, 0, -7, -5, 2, -4, -7, -4, -4, 3, 5, -7, -1, 2, -7, -11, -2, -5, -7, -2, -2, + 1, -4, 5, 1, 1, 1, 4, 4, 0, 1, -3, 0, 2, 1, -15, 7, 5, 7, 2, 0, -15, -2, 1, -5, -10, -3, -2, -1, -2, 2, + 1, -4, -2, -11, -7, -4, -6, -1, -2, -9, -4, -6, -6, -3, 0, -2, -6, 2, 6, 2, -3, -2, 4, -2, 8, 0, 1, 1, 4, 2, + 2, -5, -4, 2, 1, -6, -5, -1, -5, -7, -5, 6, 5, 2, 1, -1, -5, -5, 0, 0, 3, 4, 1, 0, -5, -5, -1, -6, 6, 3, + 4, -9, -6, 3, -1, -9, -17, 3, -4, 1, 0, 3, 0, 8, 6, 2, 7, -5, 3, 3, -4, 1, -2, 10, 4, 15, 18, 2, 10, 6, + 7, 6, 4, 0, 9, 1, 7, -9, -5, -7, -7, -7, -8, 0, -5, 2, 0, -1, 0, 3, 0, 2, 0, 7, 6, 1, 1, 1, 3, 0, + 5, 1, -3, -1, 0, 2, -5, -4, -2, 2, 1, -2, 1, 0, 2, 1, -2, -1, 1, -1, 3, -1, -3, 3, 6, 8, 6, 5, 4, 2, + 2, 4, 0, 2, 0, 5, -2, -2, 0, 0, -1, 5, 2, -1, -5, -8, -5, 0, 1, 6, -4, 2, 3, 3, 6, 5, 3, -2, 6, 0, + 3, -2, 1, 3, 4, 6, -1, -2, -3, -8, -4, -9, -5, -2, 4, -1, 3, 1, 6, 3, -1, 2, -2, -1, -1, 0, 3, 1, -2, 0, + -2, 2, -4, -5, -3, 2, 4, -2, 0, -5, 0, -1, -7, -2, 7, -12, -4, 2, 7, -8, -7, -7, 8, 1, 7, 17, 5, 4, 2, -2, + 0, 0, 3, 1, -8, -1, -2, 1, -6, 8, 4, -3, -2, -1, 1, -3, 3, 1, 4, 4, 7, 3, 1, 1, 3, -3, 11, 8, -1, 0, + -10, 1, -5, -3, 1, 1, -1, 0, 7, -1, 5, -2, 4, 2, 3, 2, 1, 2, 6, -28, -8, 2, 6, 7, -6, -9, -4, -3, -15, -13, + -5, -11, -7, -3, -13, -9, -6, -11, -1, 1, -8, -3, -6, -11, -12, -3, -1, 10, 14, 17, -2, 1, 14, 12, -1, -2, -2, 0, 3, 3, + -1, 0, 2, 1, 6, 1, -6, -2, 6, 11, 6, 5, 13, 3, 3, -1, 3, 3, 10, -1, 3, 2, -5, -5, -7, -16, -12, 2, -12, -18, + -17, -18, -9, 3, 11, 4, -17, -1, 11, 3, -8, -6, -5, -3, -4, -6, -12, -12, -9, -9, -4, -2, -2, 2, 7, -2, 1, 9, 9, 24, + 16, 27, 10, 14, 7, 9, 5, 9, 5, 6, 0, 5, -3, -3, -4, -2, -8, -16, -11, 3, 1, -2, 3, 4, -1, -4, -9, -4, -6, 1, + -1, 1, 2, 4, 4, 7, 2, -2, 3, 8, 3, 3, 2, 2, 1, -2, 1, -4, -3, -1, -1, -2, -2, 0, 1, -4, -1, -1, 1, 4, + 6, 4, 7, 9, 4, 8, 4, 1, 3, 1, -2, 7, 7, 0, 4, 1, 5, 6, 4, 6, 2, 8, 3, 1, 5, 0, 4, 5, 4, 0, + 1, 9, 6, 9, 17, 13, 7, 3, 9, 9, 3, 1, 7, 8, 5, 4, 0, 2, 2, 2, -1, -2, -3, 1, 9, 5, 0, 4, 4, 2, + 1, 4, 9, 3, 0, 6, 1, -1, 2, 6, -4, 2, 5, 4, 2, -2, 2, 2, 6, 12, -38, -18, -12, 4, -28, -19, -14, 11, 8, -8, + 4, 13, 6, 2, 0, 5, -6, -4, -3, -4, -1, 7, 2, -8, -8, -13, -20, -11, -4, -3, -2, -4, 3, 5, 0, -1, 0, 6, -6, -8, + 2, 3, 3, -3, 9, -5, -9, -6, -7, -2, -6, -10, -12, -6, -5, -7, -1, -14, 0, 0, -2, -2, 3, 3, -43, 4, 8, 5, 4, -2, + -14, -8, -4, -7, -3, 3, 10, 6, 6, 7, 11, 6, 15, 21, 9, 13, 12, 15, 22, 15, 16, 11, 7, 8, 0, -8, -9, -3, -9, -12, + -5, -3, -9, -2, -2, 10, 8, 4, -5, -1, -10, -16, -11, -2, 10, -1, 3, 3, 4, -3, 1, 2, 6, 3, 6, 10, 7, 11, 15, -1, + -5, -10, -17, -10, -14, -18, -20, -27, -20, -31, -37, -42, -44, -35, -43, -39, -32, -38, -21, -19, -15, -14, -16, -15, -6, -7, 0, 3, 0, 13, + 12, 9, 9, 14, 3, 16, 14, 4, 6, -4, 3, 4, 14, 14, 5, 3, 0, -1, 11, 8, 7, 9, 11, 22, 12, -3, -7, -5, -3, -4, + -5, -1, -5, -2, 0, 1, -2, -4, -4, -4, -5, -1, 2, 4, 4, 3, 8, 7, 0, 2, 5, 2, 3, 3, -3, 1, 1, -1, -3, -3, + 0, -3, -3, -2, 1, 2, 4, -1, -8, -10, -18, -17, -15, -11, -8, -9, -5, -6, -5, -5, 1, 4, 0, 4, 8, 6, 10, 12, 14, 10, + 12, 18, 13, 14, 14, 16, 16, 14, 7, 4, -4, -16, -17, -14, -18, -11, -12, 0, 2, 10, 13, 18, 19, 13, 12, 8, 12, 10, 8, 10, + 14, 12, 16, 16, 14, 5, 1, -3, -4, -2, -13, -8, -7, 1, 5, 5, 9, 16, 15, 24, 29, 31, 31, 22, 22, -15, 26, -127, 57, 33, + -79, -47, 54, 46, -35, -46, 35, 15, -36, -6, 32, 0, -16, 13, 6, 4, -3, 12, 0, -10, -4, -15, -11, 1, -1, -2, -8, 0, 3, 10, + 1, 17, 10, 4, 4, 6, 10, -8, -4, -7, 0, -5, -7, -2, -2, -4, 4, 0, 0, -2, 4, 7, -4, 3, 1, -6, 7, 8, 2, -66, + -6, -4, -5, 2, -5, -3, -3, 2, 1, 4, 3, 1, 3, 4, 3, -2, -4, -12, -17, -9, 2, 2, -5, -12, -11, -9, -10, 0, 3, 6, + 4, 5, 1, -3, -8, 2, 3, 3, -5, 0, 1, 2, 2, 2, 4, 4, 2, 4, -1, -3, 5, -5, -7, -1, 3, -11, -18, -4, -13, -13, + -3, -6, -8, 6, 0, 1, 9, -7, -13, -1, 3, -3, 8, 11, 7, 0, -1, -4, 1, -1, -1, 0, 3, 6, 1, 13, 0, 1, 11, -9, + -14, -20, -5, -8, 0, 4, -4, 10, -9, 13, 9, -3, 3, 4, 10, 13, -4, -3, 11, 6, 16, 15, 3, -7, -6, -10, -2, 3, -7, 3, + -13, -13, -12, -9, -8, -6, 0, -6, 2, 5, 2, 5, 5, 3, 6, 0, -1, -7, -11, -7, -3, -5, -9, 1, 6, 7, 2, 0, -4, -3, + 5, 3, -6, -5, 5, 12, 2, 2, 5, 3, 8, 5, 6, 3, 1, 5, 1, 0, -6, -7, 0, -6, -2, -8, -6, -5, -8, -1, -4, -7, + -1, -3, 3, -3, -2, -7, 9, -4, -4, 6, -1, -5, 0, 3, 1, 1, -11, -6, 1, 8, 9, 4, -6, 1, 6, 3, -7, -2, 0, 9, + -2, 6, 13, 2, -11, 0, 8, 3, 10, 7, 7, -3, -4, -4, -9, -7, -10, -5, 5, 0, 4, 12, 0, -4, -11, -10, -10, -6, -9, 4, + 11, 13, 3, 5, 9, 0, -9, -2, -2, 11, 14, -2, 0, -15, 1, -3, -4, 0, 4, -14, 7, 5, 4, 10, 7, 11, 3, -10, 6, -2, + -5, 9, 2, -3, 5, -3, -12, 0, 0, -1, 8, -7, -5, 4, 5, -4, -6, -4, 1, -4, 5, 7, -3, -12, 15, -4, 6, 0, -1, -7, + -4, -3, -8, -18, -4, 6, 2, -2, -10, -1, -7, -15, 10, 0, 1, -1, -3, -6, -3, -1, -9, 4, -2, -1, 4, 0, -1, -2, -1, 7, + 6, -1, 0, 4, 7, 5, -7, -5, -10, -8, -11, -9, -17, 6, 2, -1, -12, -2, 2, -1, 8, 8, 1, -5, 5, 8, -6, -1, 10, 0, + -5, -5, -5, -1, -1, -3, -6, 0, 5, 4, 6, -10, 7, 0, 0, -1, -4, 2, -1, -1, -1, -3, 3, -9, 5, -10, -3, -10, 0, -1, + 9, -3, 8, 10, -3, 0, 10, 8, 0, -3, 7, 7, -1, 9, -4, -3, 2, 4, -4, -3, -1, -11, -4, -1, -1, -5, -3, -6, -12, -1, + 5, 0, 0, 7, 5, 3, 0, 4, -1, -3, -2, 1, 6, 8, 16, 15, 10, 2, 7, 7, 5, 1, 3, 5, 5, 1, 6, 2, 3, -2, + 1, -5, -3, -3, 0, 3, -4, -1, -8, -1, -1, 3, -5, -6, -3, 4, 3, 1, -2, 6, 1, 7, -2, -1, 2, 7, -5, -1, -2, -1, + 1, 4, -5, 0, 10, -2, 4, 6, 4, 9, 10, 0, 8, 8, 7, 4, 2, -5, -4, -3, -11, -10, -2, -10, 4, 0, 0, 1, 10, 4, + 7, 5, 9, 3, 2, 7, 4, 4, 7, 7, 7, 5, -8, 1, -3, 2, 7, -4, -5, -8, -6, -5, -4, 1, -3, 1, 0, -2, -7, -8, + -5, -3, -5, -2, 13, 2, 14, -6, -8, -15, 0, -1, -10, -16, 3, 7, 7, 9, 2, 8, -16, -2, -6, 3, 2, 16, -6, 2, 11, 1, + 7, 10, 4, 10, -5, -1, -4, 3, -12, -4, -11, 0, -2, 3, -1, 14, 0, 6, -1, 6, 0, -8, -5, 9, -2, -4, 1, 3, -1, 7, + 8, 7, -1, 6, 1, 8, 5, -4, -15, -6, -6, 6, -8, -7, -10, 6, 15, 13, -3, 3, 1, -13, -3, -2, -7, 3, -10, -14, -8, -5, + 0, 3, 5, -4, 0, 10, 4, 3, 2, -12, -11, -14, -10, -2, -4, 3, 13, 6, 2, 7, 8, -4, -2, 0, -3, -13, 3, 1, -7, -9, + 11, 15, 4, -2, -5, -5, 0, 5, -5, -8, 5, -5, -5, -4, 1, -16, -16, 12, 4, -14, 2, -13, -11, 5, -11, -4, -6, -4, 10, 10, + -5, 4, 7, -2, -1, 11, 4, 1, 5, -2, -7, 1, 1, -2, -2, 5, 6, -16, -5, 7, 0, 6, -5, -5, -10, 0, -3, -17, -3, 4, + -7, 4, -1, 6, 0, -1, -11, -5, 2, -12, 0, -1, -2, -5, -5, -2, -2, 0, 7, 7, 7, -2, -3, 2, 2, -3, -3, 0, 0, 3, + 6, -3, -7, -8, 0, 0, 1, 6, 3, 8, 6, 7, 3, -5, -8, -9, -8, 0, 1, 2, -1, 1, 1, 5, 3, 2, 0, 4, -1, -1, + 9, 3, -1, -10, -2, -9, -7, -6, -1, -2, 12, 9, 1, 1, 0, -4, 4, 6, 3, -1, -2, 7, -9, -2, -2, 0, 5, -1, 7, 1, + -2, 0, -3, -7, -10, -8, -4, -5, 4, 6, -2, 9, 3, -2, 16, 9, 7, 4, -5, -4, 1, 0, 10, 2, 1, -8, -16, -3, 2, 6, + 0, -2, 5, 2, 9, 10, 0, 4, 3, 11, 21, 4, 1, -3, -21, -24, -10, 8, -1, 12, 1, -6, 0, 1, 3, -12, -3, -4, -3, 15, + 10, 9, -10, 6, -2, -5, -1, -10, 5, -10, 14, 3, 12, 1, 11, 5, -4, -2, -11, 8, -2, -12, -7, 1, 12, 9, 5, 5, 6, 0, + -7, -6, -5, -8, -3, -6, -5, -7, -6, -6, -6, 5, -8, -6, 1, -7, -4, -1, -5, 0, 3, -7, -3, 4, -11, 4, -5, -5, -6, -4, + -9, -3, -7, 1, -3, -2, -11, -19, -13, -9, -6, -5, 1, -6, 1, -7, -6, 2, -11, 4, 0, -3, 11, 1, 7, -5, 9, 5, 12, -11, + -10, -10, -5, -12, 5, 16, 11, 2, -9, -17, -16, -4, 0, -2, 3, 13, -1, 3, 3, -2, 8, -8, -3, 9, 1, 7, 0, 4, -7, -10, + 2, 4, -10, -17, -11, 4, -3, 4, -2, 3, 4, 8, 5, 4, 8, -4, 12, 8, 8, 6, 16, 14, 0, -1, 2, 2, 6, 2, -3, 0, + 5, 12, 8, 7, 6, 2, 8, 2, 6, -8, 7, -11, -3, -5, -5, -5, -3, -5, -11, -9, -2, 2, 5, -3, -1, 2, -2, -7, -2, 8, + 9, 4, 0, 1, -9, -4, -1, 5, -2, -7, -2, -1, -4, -5, 1, 1, 2, -3, 1, 4, 0, 3, 1, 8, 0, -2, -3, -5, -5, -5, + -12, -7, 2, -2, 1, 6, 1, 5, 5, 3, 6, 10, 5, 2, -2, 0, -8, -4, -10, -6, -2, 0, -12, -5, 6, 8, 5, 12, 12, 6, + 3, 4, 1, -9, -1, 1, 1, -4, -3, 2, 2, 11, 5, 1, 5, -1, 6, -2, -5, 2, -3, -6, 6, -2, 4, 1, -4, 2, -5, -3, + -5, 3, -5, -10, -1, 9, 3, 2, -1, -3, 0, 1, 5, 11, 6, -21, -8, -14, 28, -33, -15, 24, 3, -13, 16, 25, -5, -8, 0, -2, + 1, 7, -2, 5, 17, 2, 10, -5, -2, -8, 11, 1, -3, -2, -1, 6, 3, -9, -2, -5, 5, -4, -2, -4, 2, -3, -2, -12, -3, -4, + 4, -6, 3, 10, -12, 4, -5, 0, -9, -5, 10, -7, -15, -3, -4, -8, -4, -13, 0, 35, -11, 1, -2, -11, -7, 3, 10, 9, 8, 0, + -7, -10, -8, -8, 0, 1, -12, -18, -6, 2, 7, 9, 1, 2, 13, 11, 8, -11, -5, -7, 9, 14, 19, 12, 9, 14, 10, 10, 10, -5, + 0, -4, -9, -12, -13, -8, -2, 2, 6, 5, 6, 14, 9, -1, 7, 7, 5, 12, 15, 10, 22, 3, 1, 15, 12, 12, 9, 0, -2, 10, + 9, 14, -1, 1, 5, 0, 11, 10, 8, 2, 1, -8, -17, -11, -25, -37, -22, -30, -27, -35, -18, -9, 2, 10, 22, 25, 28, 21, 17, 22, + 15, 13, 18, -6, 15, 13, 10, 15, 12, 6, 9, 6, 4, -2, -4, 2, 12, 8, 4, -10, -12, -13, -9, -11, -2, -3, 7, 10, 6, -5, + 1, 0, 10, 6, 3, -1, 2, -3, -2, 2, 2, -4, 0, 2, 5, 6, 1, 7, 5, 8, -4, -3, 2, -3, 2, -3, -2, -7, -13, -15, + -13, -18, -5, -9, -4, -8, -4, 3, 6, 6, 0, -1, -6, -6, -10, -3, -11, 0, 2, 0, 8, -1, -6, 3, 0, 0, 5, 1, -4, 3, + 0, 1, -3, 3, 3, -7, 4, 0, 3, -2, -15, -8, -12, -2, -6, -14, -13, -7, -1, -3, -2, 5, -1, -3, 9, 12, 10, 2, 2, 1, + 3, 0, -3, -7, -4, -2, -4, 0, -1, -3, -11, -4, -2, -6, 5, 6, 3, 14, 18, 9, -29, -9, -25, 66, -55, 5, 69, 8, -38, 8, + 23, -20, -12, 14, -16, -21, -2, 0, -9, 7, -14, 0, -4, 0, -1, 5, -9, -3, -7, -14, 0, -6, -7, 16, -8, -1, 9, 5, 0, 2, + -5, -19, 1, 3, 0, 3, 1, 5, -6, -7, -3, -5, 4, -4, 0, -3, -6, -5, 5, 3, -2, -4, -6, 4, 49, -10, -4, 7, 5, 5, + 6, -5, -10, -18, -10, -6, 2, 3, -2, 1, -4, -9, -7, -7, 2, 13, 12, 16, 4, 3, -6, -18, -20, -13, -5, -14, -7, -6, -2, -7, + -13, -3, 9, 8, 6, 10, 3, 0, -11, -15, -19, -9, 5, 21, 18, 22, 21, 12, -1, 0, 11, 11, 18, 7, -3, 1, 7, 15, 2, 8, + 7, -1, -1, 15, 22, 16, 29, 26, 18, 29, 13, 16, 13, 12, -5, -7, -7, 0, 8, 11, 5, 16, -5, -20, -24, -22, -7, 6, 24, 30, + 15, 7, -3, 1, 2, 9, 21, 0, 11, -24, -6, 0, -1, 3, 9, 13, 22, 23, 8, 23, -8, 25, -17, -48, -32, 3, 8, 3, 4, 7, + 14, 7, 8, 11, 12, 6, -2, 5, 7, 7, 7, 1, -4, -2, -1, 3, 0, -4, 1, 5, 7, 4, 4, 1, 5, 8, 12, 12, 18, 9, + 5, 4, 0, -10, -14, -26, -30, -29, -43, -39, -31, -22, -15, -4, -5, 2, 9, 4, -2, -1, -2, 0, -6, 1, 0, 0, -3, 9, 7, 12, + 10, 14, 14, 16, 14, 20, 16, 20, 22, 22, 23, 22, 29, 38, 31, 28, 23, 17, 3, -23, -50, -66, -90, -102, -87, -63, -31, 11, 44, 55, + 47, 50, 32, 23, 10, 15, 23, 20, 17, 11, 13, 16, 12, 12, 0, -14, -29, -41, -64, -82, -93, -93, -78, -37, 28, -57, -53, -56, 106, -100, + -47, 127, 26, -86, 21, 107, -85, -52, 63, -81, -52, 68, -10, -61, 26, 27, -19, -19, -7, -33, -2, 9, -20, 14, 0, -11, -5, 3, -9, 8, + 11, 3, -6, -10, -6, -5, -8, 3, -9, 10, 0, -7, -10, -7, -2, -10, 3, -2, 10, 17, 12, 7, 2, -6, 6, 7, 3, -11, 16, 36, + 1, 2, -3, 4, 8, 9, 13, 11, 5, -4, -4, -4, -3, -3, -6, 1, -1, -1, 1, 0, -2, -6, -3, 2, -2, 2, 0, 2, 9, 6, + 1, -1, 0, 0, -2, -3, -1, 6, 1, 2, 8, 4, -1, -3, 2, 1, 1, -3, 1, 0, -7, -1, 6, -4, -7, 0, -1, 2, -7, -4, + -1, 1, -1, 2, 3, 0, 5, 0, 2, -6, -5, 4, 2, 6, -3, -4, 3, -2, -8, -2, 4, -7, -4, -3, 2, 3, 11, 3, -2, 5, + 9, 2, 9, -3, 5, 0, 9, 3, 5, 5, 4, 11, 10, 2, 1, 7, 10, 2, 3, -4, -4, 7, 0, 4, -7, -8, -5, -1, 3, -4, + -1, -2, 0, 7, 4, 1, -1, 3, -4, -5, -2, 1, 0, 0, 2, 5, 1, 3, 0, 1, 3, 3, -3, 0, 5, 3, 6, 3, 2, 1, + -4, -5, -7, -8, -6, -8, -9, -3, -4, -2, -11, -5, -3, -4, -5, -5, 0, 4, 6, 0, -3, -3, 2, 1, 0, 0, 0, -1, -4, 0, + 1, 0, 6, 3, -2, -2, -1, 0, 0, -2, -7, 0, -1, 6, 5, -6, -4, -1, -1, -6, -1, 0, -5, -2, 4, 0, -1, 0, -1, -4, + -5, 3, -4, 0, 2, 4, 2, 4, 4, -5, -2, -2, 7, 2, 1, 6, 1, 6, -7, 1, 0, -3, 3, -2, 0, 5, -6, -1, 10, -7, + 9, -29, -10, 28, -8, -12, 2, 3, -8, 9, 16, 11, -6, -7, 6, -4, -7, 2, -3, 15, -17, -14, -5, -13, -5, -1, 1, 2, -5, -3, + 7, 9, 9, -4, 0, 3, 0, -8, -2, -3, -3, -6, -6, 9, 1, 9, 4, 8, 8, 9, 4, 3, -4, -4, -7, -3, -1, -1, -8, 8, + 3, -4, -2, 1, -9, -5, 1, 0, 10, 0, -6, 2, 5, 8, 3, 2, 11, 9, 9, 4, 4, -4, 3, 1, 2, 4, 6, 5, 7, 7, + 7, 4, -5, -5, -1, 3, 0, -3, -9, -3, -3, -1, 7, -1, -1, -1, 6, -1, 0, 4, -5, -6, -1, 1, 3, -5, -5, -4, -10, -6, + -1, 5, 8, 4, 2, 4, 3, 4, 5, 2, 6, 5, -5, 2, -4, -6, -1, 4, 4, 4, 4, 1, 3, 6, 0, 3, -2, 3, 6, 5, + 6, 0, -2, -10, 7, 3, 2, 2, 5, 12, -3, 1, 3, 0, 9, 5, 2, 13, 3, 0, 5, 2, 1, 2, 5, 4, 4, 5, 5, -5, + 3, -4, -1, -5, -3, 5, -1, -1, -6, -3, 0, 0, -3, -3, -9, -2, -3, -1, -2, -6, -3, -5, 0, 3, -2, 1, 1, 6, 2, 4, + 8, 5, -2, -4, -7, -5, 3, -5, -3, -3, -4, -2, 1, -2, -2, -1, 4, 2, 2, 1, -1, 2, -1, 5, 3, -3, -2, -3, -5, -7, + -4, -9, -6, -9, -3, -2, 2, 1, -2, -2, 9, 2, 1, -1, -4, -1, -2, 1, -2, 1, 4, 1, -3, 2, -2, -9, -3, 0, -4, 3, + 1, 3, -6, -8, -5, -1, -6, 0, 0, 1, -4, 4, -3, 1, 0, -8, -3, -4, -9, -2, 1, 0, 5, -6, 0, 0, -3, 3, -2, 0, + 5, -4, 8, 2, -3, 6, -10, 0, 4, -2, -11, 6, 12, 15, 1, 2, 1, 0, -1, 3, 5, -5, -1, -5, 6, -6, -10, 3, -12, -4, + -8, -4, -8, -2, 4, 6, -1, 5, 0, -2, 7, 10, 2, 5, -1, -3, -1, 6, 0, 5, 2, 2, 6, 5, 2, 2, 0, 9, 1, 6, + 4, 3, -6, -1, 2, 2, 3, 4, 0, -2, -7, 0, 8, -1, 4, -5, 5, 4, 5, 9, 6, 15, 1, 5, 12, 4, 8, 8, 7, 1, + -3, -1, -5, -7, -9, -13, -2, 2, 4, -1, 3, 3, 6, -1, -3, -2, -2, -1, 2, -4, -2, -2, -3, -1, -4, -1, -4, 2, -1, 1, + -6, -5, 1, -2, -9, -12, 1, -1, 3, 7, 6, 0, 1, 4, -3, -2, 3, -1, 1, -2, -4, 4, 10, 10, 5, -6, 1, 3, 0, 1, + -3, 10, -3, 10, 13, 10, 14, 3, 15, 9, 9, -1, 0, 4, -2, -1, -6, 4, -2, 3, 1, 4, 4, 4, 0, 4, -2, 1, -5, -6, + -12, -14, -7, -12, -10, -3, 2, -5, -16, -14, -1, 2, 1, 3, 2, 3, 3, 0, 6, 4, 3, 3, 2, -2, -7, -8, -6, 1, -5, -5, + -3, -7, -3, -5, -1, -2, -6, 0, -4, -1, -3, -3, -7, -10, -7, -3, -3, -2, 0, -2, -7, -5, 4, 2, -3, -2, 1, 1, -2, 3, + 3, -3, -4, -8, 0, 1, 0, 4, 5, 0, 1, -1, -2, -3, -6, 1, 2, -3, -1, 2, -1, -7, 2, -8, 7, 5, -3, -3, 1, -5, + 1, 0, 3, 3, 6, 1, 0, 0, -1, 1, 3, -4, -9, -11, -7, -2, 4, -4, -2, 8, 0, -3, 3, -6, -6, -1, 2, 3, -1, -1, + -3, -5, -5, 0, 3, 5, -2, -2, 8, 0, 8, 0, 20, -3, 3, -4, -1, 20, 19, -9, 11, 10, -7, 6, 6, -7, -8, -2, -7, 2, + 4, -9, 8, -9, 0, 8, -5, -6, 3, 6, -1, -1, -3, -8, 0, -6, 2, -8, 5, 10, 0, 4, -2, -4, 0, -3, -4, 8, 8, 2, + 1, 4, 5, 1, 1, 1, 3, 2, 4, 0, 1, -1, -2, -1, -2, -4, 3, -1, -3, 2, -2, -8, -1, -1, 3, 3, 6, -9, -2, -4, + -9, 2, -2, -7, 0, 3, 8, 6, -1, -8, -3, 5, 5, 0, -4, 7, 4, -1, -9, -6, -3, -3, -4, -11, -8, -1, -4, -8, -3, -5, + -8, -1, -6, -4, 0, -1, -1, -8, -4, -1, -2, 0, -8, -4, -15, -12, 0, 5, -2, -6, -2, 3, 5, 1, 0, -6, -2, 4, 7, -3, + 2, 2, 8, -3, 1, -5, -3, 11, 13, 0, 4, 9, -4, 2, 0, 7, 7, 5, 12, 15, 1, -7, -3, 6, -3, 9, 12, -1, -1, -9, + -3, -4, 0, -5, -8, -7, -6, -7, -19, 0, -1, -3, -3, -9, -6, -3, -2, -3, 1, -2, -3, -3, -3, -2, -1, -2, -3, -2, -6, 0, + 2, 2, 4, 7, 2, -2, 5, 7, 4, 4, 7, 8, 9, 3, 7, 2, 4, -3, -2, -3, -4, -5, -6, -8, -8, -7, 1, 4, -7, -11, + -1, 4, -3, 1, -3, 4, -1, -6, -1, 4, 6, 11, 1, 1, 1, -5, -4, -2, -1, 0, 3, 1, 0, 3, -2, -4, -4, -5, -1, -3, + 9, -6, -2, -2, 0, 0, -1, 10, 5, 1, 9, 4, -6, -2, 7, 7, 7, -2, -3, -7, -7, -6, 2, -1, -7, 3, 9, 7, 6, 2, + 8, 1, -3, -3, 1, 4, 4, 2, -1, 3, 5, -5, -7, -9, -9, 14, 18, 14, -11, -21, -21, -19, 8, 16, -11, -4, 1, 3, -10, -11, + -9, -4, 3, 0, 10, 8, 1, 9, 4, -1, 1, 0, 0, 1, -4, -4, -1, 6, -4, 5, 0, 2, 1, 10, 3, 3, -4, 6, -3, -3, + -6, -1, -3, -5, 0, 5, 0, 1, 8, -5, -2, -1, -2, -7, -6, -3, 1, -2, 1, -3, -16, 3, 8, 6, -2, 7, 7, 8, 1, -15, + 1, 4, 2, 14, 8, 7, 4, -5, -3, -12, 0, 4, 3, 4, 8, 12, 1, -2, 7, 13, 7, -2, -10, -12, -10, -22, -22, -11, -6, 6, + 11, 4, 18, 13, 5, -8, -3, -2, -3, -9, -10, -4, 6, 2, -9, -11, -8, -11, -4, -18, -2, -13, -4, -11, -18, -12, -4, -5, 3, -12, + -8, -14, -17, -7, -2, 2, 1, -2, -1, -12, -14, -17, -7, 1, 8, 7, 7, 5, 3, 8, 17, 13, 20, 26, 21, 6, 12, 18, 6, 7, + 10, 19, 10, 2, -4, -2, -7, -4, -15, -20, -14, -12, -11, 4, -1, 8, 11, 2, 4, 6, -1, -1, 4, 0, 0, -4, -7, -8, -6, -3, + -3, -6, -8, -8, -4, -4, -11, -10, -9, -2, 2, 6, 8, 7, 5, 1, -2, -3, 4, 2, -6, -7, -5, -8, -8, -11, -4, -5, 3, 3, + 8, 12, 9, 8, 5, 3, 3, 0, -4, -9, -4, -4, 0, 6, 8, 2, 0, -6, -5, -7, -4, -10, -1, 0, 0, -1, 2, 5, -3, -2, + -1, 0, -2, -3, 2, 5, 3, -2, -4, -3, -4, -2, 3, 1, -2, 7, -1, 2, 1, -1, 3, -4, 2, 3, 4, -2, -3, -4, 1, -5, + 2, 2, 1, 3, 2, 2, 0, -6, -3, 4, 2, -1, -3, 2, 1, 1, -3, -3, -3, -7, 32, 30, 19, -30, -10, -21, -12, 15, 12, -21, + -6, 13, -2, -21, 6, 21, -9, -9, 7, 4, -2, -1, 11, 10, 0, 0, -2, -11, -5, -5, -5, -4, -5, -4, 8, 1, 7, 4, 2, 4, + 7, -1, -2, 1, 6, -1, -6, -7, 0, 4, 2, 2, -5, -2, -2, -7, -9, -11, -3, 0, -1, 4, 2, 3, -7, -20, -14, -8, 0, 12, + 11, 19, 21, 20, 18, 22, 26, 22, 20, 14, 5, 6, 4, 1, -7, -7, -2, 0, 12, 5, 5, 0, -8, 0, 1, 2, 5, 1, -8, -6, + 0, 4, 16, 30, 45, 56, 40, 23, 17, 15, 10, 0, 7, 13, 14, 15, 17, 18, 20, 13, 11, 19, 18, 11, 8, 8, 6, 10, 2, -9, + -3, -5, -7, -10, -17, -24, -14, -24, -15, -9, -16, 4, -2, -4, -17, -14, -12, -3, 9, 15, 20, 8, -7, -5, -2, -5, -1, 0, 13, 6, + 11, 15, 10, 4, 2, 6, 17, 2, 3, -6, 4, 2, 1, -12, -26, -6, -8, -18, -15, -17, -12, 2, 12, 12, 6, 6, 7, 8, 5, 3, + 0, -4, -6, -7, -8, -1, -2, -2, 0, -8, -10, -5, -1, 1, 3, 5, 7, 7, 4, 2, 5, -3, -5, -6, -12, -9, -12, -14, -11, -8, + -5, -5, 2, 10, 21, 23, 21, 14, 9, 0, -3, -7, -8, -10, -12, -9, -5, -2, -6, -3, 6, 4, 1, -2, -4, -10, -5, -4, -12, -7, + 1, 2, -7, -4, -5, -8, -8, -4, -6, -1, -4, -2, -4, -4, -4, -6, -1, 4, 10, 14, 21, 16, 14, 18, 12, 11, 11, 12, 10, 5, + 5, -2, -2, -2, 4, 4, 9, 9, 3, 4, -7, -5, -3, 8, 4, 9, 9, 12, 8, 10, 8, 7, 8, 5, 14, 85, 7, -127, 85, 76, + -32, -83, 49, 60, -30, -66, 35, 24, -42, 0, 37, 5, -35, 12, 12, -9, -18, 18, 9, -2, -1, 14, -6, -5, 4, 13, -5, -8, 5, 7, + 4, 12, 19, 11, 12, 4, 2, 2, -5, 4, 0, -4, 9, 5, 5, -1, 7, 4, -8, -9, -6, -6, 2, 1, 3, -3, 5, 5, 3, -9, + 2, -6, 0, -4, -7, 2, -1, 11, 11, 0, -1, 3, -3, -8, -6, -2, -8, -4, 6, 2, -2, 3, -5, 2, -5, -5, -2, -8, -5, 0, + -1, 11, 1, -2, 6, 4, 6, 10, 8, 10, 0, 4, 0, -2, -4, 7, 6, 9, -2, -2, 0, -6, 1, 13, 10, 3, 8, 8, 0, 2, + 3, -6, 6, 7, 1, 4, 1, 2, 9, 5, 1, 4, 8, 2, -3, -6, -2, 9, 7, 4, 8, -5, -3, 2, -6, -3, -6, 6, 4, -4, + 6, -1, 6, 12, -9, -7, -15, -22, -14, -7, -7, -9, -7, -5, -5, -7, -13, -11, -13, -8, -4, 4, -1, 5, 7, 2, -1, 6, 7, 12, + -1, 5, 2, 8, 4, 0, -1, 1, 2, 3, -3, -1, -4, -7, -2, -5, -3, -4, 0, 5, 3, 4, -1, 7, 2, 1, -6, -7, -6, -3, + -8, -15, -9, -6, -7, -3, 6, 7, 8, 3, 2, -9, -14, -19, -15, -3, -1, 0, 1, -1, 0, 2, 7, 14, 4, 2, 6, 2, 6, 3, + -4, -4, 4, 3, -7, 7, 1, -3, -1, 0, 0, 6, 1, -6, -8, -3, -4, 4, 2, 8, 3, -6, -9, -4, 5, 7, 3, 1, -2, 0, + 5, 2, -2, 6, -2, 3, 4, 2, 1, 5, -3, -6, -3, -4, -4, -5, -10, -15, 4, 6, -6, -11, -3, 4, 3, 5, 3, 4, 4, 7, + 19, -45, 4, 3, -25, -17, 12, -5, -27, 17, -6, 5, 25, 7, 1, -1, 5, -4, -8, -8, -10, 1, -11, -18, -2, 2, 6, -5, -6, 0, + 7, -2, 5, 7, -1, -1, 2, -4, 4, -5, 3, 8, -4, 4, 14, 1, -2, -3, 2, 10, 2, -3, 10, 9, 10, 9, -2, -13, -14, -12, + -8, -3, -8, 3, -2, -2, -4, -12, -5, 8, 4, 2, 7, 0, -7, -8, -3, -8, -8, 7, 2, -5, 4, 3, -1, -2, -1, -7, 5, 4, + 2, -1, 5, 10, 10, 23, 16, 3, 0, 1, 0, -5, 6, 2, 5, 5, 0, -6, -15, -4, -1, -2, -6, -2, 0, 4, -4, -2, -7, -12, + -10, -4, -6, -7, -1, 7, 6, 6, -3, -7, -5, 3, 5, 5, 9, 1, 0, 5, 14, 2, 7, 15, 6, 14, 9, 10, 1, 2, 2, -4, + -4, 1, 0, 1, -4, -1, -7, -2, -4, 0, 13, 1, -2, -5, -5, -11, -13, 8, -4, -1, 1, 1, -11, -14, 4, 0, 13, 14, 5, 4, + -3, -11, -11, -8, 3, -7, -1, -7, -5, 0, -1, -3, 2, -2, -3, 7, 9, 10, 9, 6, 1, 0, 1, 6, 8, 8, 4, 1, 2, -3, + -4, 0, 2, -2, -3, 0, -2, -10, -14, -5, 2, -3, 1, 9, 5, 3, -5, -6, -5, -8, 4, -2, -4, -3, 1, -5, 3, -4, 1, -3, + -2, 1, -7, -4, -7, -5, -4, 7, 2, -1, 6, 2, 3, 2, 2, 3, 1, -2, 6, -5, -3, 0, -10, -7, -9, -12, -1, -2, -4, -4, + 0, 4, 1, 5, 1, 3, -1, 1, -1, 0, 1, -4, 0, 7, 7, -8, -6, 1, 7, 7, -4, -4, -13, -3, 5, 0, 9, 2, 5, 2, + 0, -4, -2, 4, 5, -1, -40, 6, 5, -22, 6, 13, 8, -9, 9, 14, 3, 16, 0, 10, 11, 7, 7, 1, 5, 0, -4, 1, 1, -4, + -3, -2, -3, -1, 5, 1, 1, -1, -2, 13, 5, 9, 5, -5, 0, -5, 13, 8, 1, 11, 7, 3, -8, -1, -1, -1, -4, -1, 6, 3, + 4, -3, -11, -13, -5, -10, -1, -8, -3, -4, -2, -3, -2, -3, 1, 6, -12, -10, -1, -2, -8, 7, 11, -6, -12, -3, 5, 9, 7, -2, + 3, -3, 2, 8, 1, -3, 0, -6, -8, -5, 9, -4, -2, -3, 6, 10, 14, 2, 6, 8, -2, 4, 7, 8, 1, 6, 17, 13, 2, -6, + 9, 2, -5, 8, 14, -1, 2, 9, -2, 6, 6, 5, 8, 3, -8, -6, -1, -10, 3, 7, -3, 0, -7, -6, -5, -1, -6, -6, -9, -4, + -2, -7, -4, 0, 6, 4, -5, -3, 9, 1, -9, 3, -7, 2, -17, -5, -6, -3, -2, -10, -13, -16, -2, -5, -4, 1, 2, 5, 5, -5, + 0, 12, 5, 9, 7, 3, 15, 14, 9, 11, -6, 1, 1, 12, 7, 3, 5, -1, 4, 10, 2, -2, 3, 2, -2, 0, 2, 3, 8, 8, + 6, 3, 3, -2, 0, 2, -2, -6, -4, 3, 3, -2, -1, -5, -1, 1, 1, -3, -2, -5, -5, -4, -4, 1, -4, 1, -2, -6, -2, 1, + 5, -7, -8, 4, 8, 4, 10, 3, 0, 2, 3, 3, 7, -6, -13, -5, -10, -7, -7, -7, -4, 7, 5, 2, 0, 3, -2, -1, -5, 4, + -3, 2, -4, 0, -2, -5, -9, -12, -5, -10, -7, 7, 15, 9, 0, 7, 2, -2, -1, -1, -7, -6, -5, -8, -10, -2, 0, -4, 2, 10, + -3, 0, 0, -3, -13, 8, 2, 3, 9, -2, 4, -27, 19, 0, -23, 7, 16, 18, -7, 35, 10, 3, 5, -7, -3, 6, 8, -6, -17, -1, + -7, 3, -6, 10, -2, 8, 14, 15, 8, 18, 9, 3, 17, -10, -1, 4, -9, -3, -3, -3, 0, 4, 3, -4, 2, 7, -2, -9, -9, -1, + -8, -9, -1, -10, -8, -2, -2, 3, -8, -1, -2, -6, 1, 5, -7, -2, 0, -1, -14, -11, -17, -4, 6, 12, 8, 13, 5, 7, 1, 2, + 9, 8, -1, 1, -1, 4, 2, 3, 2, -2, 6, 7, 2, 4, 4, 12, 4, 0, 0, 0, 9, -1, -2, 0, 2, -1, -9, -16, -10, -16, + -11, -11, 5, -6, -16, -12, -7, 2, 13, 18, 14, 10, 7, 1, 1, 3, 1, -3, -6, -5, 1, -2, 3, 0, 0, 11, 15, 2, 4, -1, + 1, 2, -17, 1, 6, 6, 3, 6, 3, 6, -10, -6, -4, 8, 8, 14, -3, 10, 4, -13, -5, -18, -13, -8, -19, -13, -4, 0, 2, -2, + 5, -12, 1, 1, -11, 1, 2, 1, 12, 6, 10, 4, -4, 2, 6, 6, 2, -1, 4, 0, 4, 2, 7, 5, 5, 5, -2, 4, -6, -9, + -7, -4, -4, -10, -4, -4, -3, -5, -3, -3, -3, 3, 4, -1, 2, 2, 6, 1, 5, 10, 5, 5, 3, -3, 3, -1, -2, -13, -11, -15, + -21, -12, -9, -13, -18, -4, -9, 1, 6, 5, 8, 7, 3, 4, -2, 4, 4, 5, -2, -6, -8, -3, 1, -3, -2, 8, 1, -7, -12, -11, + -5, -13, -13, -9, 2, 0, 5, 0, 2, 7, 2, -3, 1, 5, -8, -12, -8, 1, -2, -2, -5, -8, 7, 10, 2, 4, 4, 5, 4, 1, + -5, -3, 0, -1, 0, 1, -2, 11, 0, -3, 1, 10, -1, -7, -10, -4, -37, 32, 32, -23, 2, 42, -8, -22, 67, 8, -22, 9, 1, -17, + 7, 15, 6, -10, -24, -8, 0, -9, 1, 4, -5, 1, 8, 4, 24, 8, -1, 0, -3, -5, -7, -2, -9, 17, -11, -10, -16, 0, 1, 8, + -1, -7, -2, 13, 1, -8, -3, -9, -2, -5, 9, -6, 4, -5, 0, -7, 4, -9, 14, -6, -6, -2, 8, -3, 1, -12, -6, -1, 5, 5, + 17, 23, 19, 2, 15, 14, 10, 8, 12, 11, 8, 6, 3, 6, -1, -2, -7, -13, -6, -1, -15, -12, -8, -7, 4, 3, -2, -6, 0, 0, + 4, -2, -7, -10, -11, -6, -14, -5, -8, -3, -12, -23, -19, 2, 19, 12, 22, 14, 3, 0, -2, -4, -9, 0, -3, -10, -3, -10, -3, -11, + -3, 2, -5, 0, 7, -11, -10, -6, 2, 3, 2, -5, 12, 8, 0, -2, 8, -2, 1, -3, 5, 4, 9, 9, 2, -5, 0, -14, -16, -2, + -14, -6, -12, 1, 8, 5, 12, 18, 15, 15, 20, 16, 11, 11, 6, 12, 19, 25, 17, 9, 10, 9, 9, 7, 1, 7, 2, 5, 3, 0, + 7, 0, -2, -2, 1, -2, 3, 3, -3, -2, -2, 5, 4, 7, 6, 3, 4, -4, 6, 9, 10, 6, 7, 10, 9, 10, 12, 5, -3, 1, + 7, 0, -10, -16, -21, -29, -24, -16, -16, -17, -11, -18, -11, 10, 3, 9, 19, 10, 4, 0, 5, -1, 0, 2, 7, -3, -4, -1, 3, -1, + 6, 9, 0, 1, 4, -6, -5, -5, -6, 4, -7, -9, -3, -11, -16, -14, -3, -11, -11, -10, -6, 5, 6, 4, -10, -9, -10, -14, -11, -5, + 7, 2, 1, 9, 11, 0, 3, 6, 7, 9, 8, 0, -8, -10, -7, -14, -10, -3, -8, -1, 4, -73, 38, 39, -37, 6, 63, -25, -14, 68, + 2, -26, 29, -25, -31, 0, 9, 2, -15, -12, 6, 12, -3, -2, -9, -2, 5, 5, 6, 8, 9, -1, -2, -2, 2, -8, -13, -4, -13, -6, + -3, -11, -5, 14, 6, 12, 5, -4, -9, -7, 7, -5, -9, 2, -2, 6, -3, 9, -2, -2, -13, 1, -12, 0, -30, 2, -3, 6, -3, -1, + 2, -2, 0, 6, 11, 25, 27, 20, 16, 3, 11, 3, -7, -2, 0, 1, 6, 6, 0, 4, 8, 27, 32, 14, 5, -1, 0, -2, 6, 5, + 1, 3, 9, 6, 2, 2, 7, 0, -13, -18, -14, -7, -6, -4, -5, -8, 3, -2, 5, 10, 22, 14, 10, -1, -8, -13, -6, -16, -24, -24, + -15, -14, -4, 1, 5, 10, 13, 24, 16, 14, 0, -5, 0, -2, 1, 1, -3, 11, 10, 7, 16, 10, 3, 2, 0, 2, 7, 13, 16, -1, + -7, -9, -6, -16, -30, -34, -17, -18, -6, -5, -4, 2, 8, 0, -8, 24, -5, 16, 14, 21, 10, 43, 42, 16, 19, 10, 11, 14, 15, 12, + 10, 9, 4, -3, -11, -10, -10, -6, -4, -7, -8, -5, -3, -5, -3, -3, -2, 2, 1, -4, -1, 0, 7, 11, 10, 9, 6, 0, 3, 3, + 0, -3, -2, -9, -9, -16, -15, -23, -34, -39, -41, -33, -26, -22, -8, -8, -6, -3, 0, 8, 18, 13, 21, 21, 11, 7, 9, 7, 5, 11, + 8, 8, 13, 14, 13, 17, 20, 18, 21, 17, 21, 23, 17, 13, 19, 9, 10, 7, 15, 18, 14, 13, 15, 2, 1, -12, -19, -27, -35, -45, + -46, -43, -35, -30, -18, -4, 6, -5, 12, 16, 11, 19, 11, 7, 5, 10, 17, 19, 16, 9, -4, -19, -28, -37, -50, 2, -127, 101, 70, -66, + -33, 55, -56, -30, 91, -19, -36, 42, -61, -37, 41, 7, -5, 1, -22, -18, 24, 9, -23, -18, -11, -3, 7, 2, -1, -8, -2, -2, -5, -6, + -12, -14, -14, -6, 4, 1, -4, 11, 12, 5, 6, -2, -8, -11, -6, 13, 1, 24, 14, 3, 22, 19, 10, -1, -1, -3, 3, 11, 16, -44, + -1, -1, -10, -6, -2, -1, 0, 5, 0, -2, 2, -1, 0, 3, 1, -5, -3, 3, -4, -5, 6, -1, -3, -1, 0, 2, -2, -3, -1, -1, + -1, 3, 4, 3, 1, -8, -4, 2, 3, 3, 5, 2, 6, 4, 4, 3, -1, -3, -7, -5, -4, -2, 9, 7, -1, 3, -2, 2, -1, -2, + -5, -5, 5, -2, -3, 4, 1, -7, 1, -1, 5, 2, -6, 4, -6, -4, 2, -2, -1, 1, 0, -3, 2, -9, -6, -1, -1, 2, 1, 2, + -3, -6, 5, -4, 1, 6, 6, 10, 4, -1, -5, -4, -3, 11, 10, 3, 2, -11, -6, -2, 3, 1, -4, -3, -8, -6, 4, 4, 7, -9, + -3, -4, -2, 0, 4, 4, 2, -1, 3, 6, 6, 1, 2, 2, 2, 0, -1, -2, 3, 1, 0, 0, -4, -1, -3, -3, -1, 0, -1, -2, + 2, 1, 1, 0, -1, 4, -1, -2, 0, -2, -1, 3, 3, -2, -4, -3, -1, -2, -4, -5, -1, 1, 2, 4, 3, 0, -2, 2, -2, 1, + 1, 0, 6, 1, 1, 4, 1, 2, -3, -4, 2, 4, -4, 1, -1, -1, 0, 1, 2, 1, 0, -1, -1, 3, 0, -1, -7, -2, -5, -5, + -8, -6, -3, -3, 0, 2, -3, 0, 4, 0, 2, 1, 1, 1, 5, 0, 2, 0, 0, 1, 5, 4, 4, 1, -2, -6, -6, -3, 10, -3, + -8, -8, -3, 6, 6, 4, 7, 4, -4, 10, 12, 5, -5, -6, 6, 6, -3, -2, 0, -3, 2, 2, -8, 1, 3, -4, -6, 3, -6, 2, + -1, 5, 6, -3, -1, -4, -1, -5, 0, 5, -4, 2, -8, 4, -5, -2, -1, 2, 4, 1, 1, 3, 0, 2, -4, 4, 1, 8, 5, 7, + 0, -3, 7, 3, -9, 1, -1, -7, -1, 1, -2, 1, -2, 2, 1, 1, -3, -3, 2, -1, 6, 0, -2, -2, -8, -3, -2, 1, 4, 1, + 0, 4, 2, 0, 0, 8, 3, 7, 3, 1, 6, 3, 7, 3, 6, 5, 5, 4, 6, 4, 0, -11, -13, -3, 3, 5, 5, -3, -3, 3, + 5, 0, -1, -3, -4, 1, 0, -2, -1, 0, 2, 8, 1, 8, 1, -6, -1, 3, 2, -5, 3, -1, -3, -2, -3, 6, -6, -6, -4, -10, + -6, -1, 7, -8, 0, 0, 0, -2, -1, 6, 6, 10, 6, 11, 1, -6, 3, 6, -5, 7, 8, -3, -3, 0, 3, -7, 3, 3, 1, -3, + 0, -2, -5, -1, -3, -2, -1, -2, -2, 0, 0, 8, 5, -2, -3, -3, -3, 0, 3, 0, 0, 1, -1, -5, -7, -1, 1, 4, 1, -2, + -1, 2, 6, 0, -8, -8, -4, -1, -2, 1, -4, 4, 4, 2, 4, 3, 3, -3, -1, 0, -2, -2, 6, 2, 1, 4, 0, 2, 5, 3, + -4, -7, -2, 0, -4, -2, 3, 2, -1, 4, -4, 4, 8, 5, 4, 1, 3, 2, -3, -4, 1, 2, 1, 2, 5, -2, -2, 0, 1, -1, + -2, -2, 0, 5, 5, 6, 2, 1, 4, 4, 2, 5, 2, 0, -2, -8, -5, -6, -11, -2, 1, 0, 3, 2, -7, -1, -1, 4, -5, 1, + 1, -1, -6, 0, 0, -10, -12, 0, 3, -1, 7, 2, -6, 2, -7, -3, -9, -7, -3, 2, 1, -6, 4, 4, -11, -4, -9, -1, 6, -5, + -8, -6, -6, 6, -2, 7, 4, 7, 5, -3, -7, 1, 1, 0, -4, 1, 8, 2, 12, 8, 2, -7, 1, 4, -1, 2, 4, 6, 4, -3, + 6, 1, -3, -2, 3, -3, 0, -8, -3, -1, 4, 0, -7, -9, -3, 2, 1, -1, 8, 1, 3, -6, -1, -5, -2, -7, 0, -6, 7, 6, + 7, 6, -3, -5, -2, -2, 1, 5, -1, 1, -1, -3, 2, 1, 0, 1, 0, -3, 4, 2, -1, -4, 1, -2, 3, 3, 4, -1, -9, -2, + 0, -2, -3, -2, -7, 2, 0, 2, 4, 7, 2, 2, 3, 3, 5, 2, -8, -8, 0, -3, -1, 2, 10, 2, 3, -3, -6, -1, -5, 7, + 3, 1, -5, 0, 5, -1, 5, 8, 10, -4, -3, -8, 3, -3, -2, 6, -2, -3, -7, -6, -4, 3, 0, -8, 0, -4, 6, 11, -6, 1, + 3, 5, 6, 1, 1, 6, -1, -8, 1, 7, -2, -3, 0, -1, -1, -2, 1, -1, 4, -2, 1, 2, 1, -4, 0, -5, -1, -3, -4, 3, + 2, 0, 2, -2, 0, -1, -1, 1, 2, -1, 4, 2, 4, 0, -7, -6, -2, 0, 4, 2, -3, -2, -3, 2, 1, -1, 1, 3, 2, 2, + 6, 1, -1, -2, -1, -2, -4, 3, 2, -2, 0, -1, 0, 3, 5, 3, -3, 2, 6, 1, -3, -7, 2, -3, 1, 2, -4, 6, 1, 4, + 8, 1, 1, -4, -2, -5, -4, -2, 0, 3, 4, 0, 1, -6, 0, -6, -4, -1, -6, 4, 2, 2, 1, -3, 1, 3, 1, -1, -5, -1, + 8, 3, 1, 4, 0, 3, -6, -9, -7, -3, -12, -8, 7, 7, -6, -1, -10, -6, 3, 0, 4, -2, -13, -15, 0, 3, 3, 7, 5, -2, + 1, -6, -1, -3, 4, 3, -5, 1, 6, 10, 12, 6, 4, 2, 3, 7, 5, 6, 0, 3, 2, 2, 1, -4, -8, -4, -3, 6, 3, -6, + -7, -6, -3, -6, -7, 0, 3, 2, -1, -3, 0, 1, 1, -4, 1, -16, -3, -6, 4, 6, 4, -7, 0, -7, 1, 8, -4, -6, 1, -2, + 0, -7, 3, -10, 1, -2, -5, -4, -17, -2, 6, 1, 1, -2, -2, 0, 0, 0, 3, 6, 0, -3, -2, -1, 4, -3, -2, -1, 3, -1, + -2, 2, 1, -3, 2, 3, -6, 3, 2, -3, 12, 4, -4, 3, 10, -4, -2, 7, 1, 1, 1, 2, 12, -4, 0, 14, 0, 3, 6, 2, + 5, 1, -2, 3, 6, 1, -3, -1, -3, -4, -2, -4, 9, -4, 3, -6, -2, -1, -8, -5, -2, -5, -2, -3, -20, 1, 0, 11, 12, 9, + 5, 7, 4, -1, 6, 4, 10, 10, 6, 5, -2, -3, -5, 0, 2, -8, -6, -1, 2, -3, -3, -3, -2, -2, 4, 3, -1, 2, -2, 3, + 1, -5, -2, -5, 3, 1, 5, -1, 5, 5, 7, -2, 0, -1, 0, 0, -2, 2, 1, -1, 0, 0, 3, 2, 3, 3, 0, -1, 0, 2, + 5, 2, 0, 0, -1, 0, -2, 1, 1, 2, 5, 5, -2, -1, -1, -4, 1, 4, 3, 4, -5, -1, 3, 1, 2, 7, -3, -1, -3, -1, + -2, -4, -2, 1, 8, 6, 1, 4, -2, -3, -3, -3, 1, 0, 3, -1, 7, -1, -3, 3, -1, -3, 2, -1, -3, -1, 3, 0, -3, -4, + -3, 6, -3, 4, 6, 5, 3, -2, -8, -6, 0, 2, -2, -4, -1, -24, -11, 0, 6, 6, -17, -16, 16, 2, -4, 8, -1, 2, -1, -4, + -4, -3, 5, 0, 2, -2, -7, -4, -3, -17, -1, -2, -4, -2, -6, -1, 2, 4, 2, 0, 5, -6, -3, -13, -7, -3, -9, -10, -1, 5, + -2, -5, 3, 1, -3, -7, 0, -3, 7, -4, -1, -3, -6, -6, -6, -7, -4, 0, 0, 8, -3, -2, -3, -5, -12, -6, -1, 2, -3, 0, + -3, -10, -2, 8, 8, 15, 9, 5, 6, 13, 6, 9, 4, -1, 4, 7, 3, -1, -1, -1, -3, -7, -8, 1, -4, -8, -10, -8, -9, -13, + -11, -8, -7, -6, -11, 0, -2, 2, 1, 0, 1, 5, 8, 2, 7, 7, -2, 3, 16, 2, 4, 6, 3, 7, 5, 5, 6, 9, 4, -3, + 3, 0, -2, -2, -1, -11, -15, -16, -8, -7, -15, -4, -5, -7, -6, -6, -3, 4, 2, 2, 8, 10, 10, 9, 8, 1, 4, 8, 4, 4, + 12, 13, 11, 1, -9, 5, 0, -6, 7, 2, 2, 2, -8, -17, 0, 2, 0, 8, 7, 4, -5, -4, -1, 3, 3, 1, 1, -4, -2, -5, + -1, 3, 2, 0, 3, 2, 0, -1, -4, 3, 3, 4, 2, 2, 0, 0, -4, -4, -6, -5, -2, 2, 4, 4, 5, 6, 0, 1, 4, 4, + 2, 2, 0, -2, -2, -4, 2, 3, 0, 0, -1, -2, 3, -1, 2, 0, -1, 1, 0, 6, -4, -1, -1, 0, -6, -9, 0, -2, -3, -3, + 3, 2, -3, -3, -3, -2, -3, -8, -4, 0, 1, 3, 2, -3, 2, 2, -1, 2, -1, -3, -5, 1, 6, 1, 3, -2, -2, 1, 2, 2, + 3, 3, 1, -1, -4, -4, -3, -7, 1, 0, 2, 4, 0, -5, -3, -3, 1, 7, 8, 8, -36, -25, -13, 15, 9, -27, -13, 22, 11, -12, + 19, 9, 0, 8, 5, 8, -2, -5, 0, 12, 1, -9, -10, 4, -5, -8, 11, -2, -3, -6, 9, 1, 4, 4, 9, 3, 4, 4, -2, -5, + -2, -2, -4, 2, 4, 1, 4, 0, 11, -3, -3, 5, 1, 7, 2, 1, 3, -2, 2, 3, 3, 0, -3, 0, 15, -18, -10, -4, -5, -10, + -5, -4, -6, -7, -1, -16, -15, -17, -16, -13, -2, 2, -1, 3, -6, -11, -8, -6, -6, 1, -5, -4, -7, -3, 1, 1, 6, 5, 5, 4, + 3, -5, -8, -12, -9, -6, 1, 7, 9, 7, 9, 9, 10, 5, -4, 3, 4, 1, 8, 12, 6, 10, 14, 14, 10, 5, 5, 0, 10, 7, + 6, 0, 1, 8, 3, 0, -3, -8, -10, -7, -15, -11, -9, -1, -11, -11, -12, -23, -15, -15, -12, -5, 0, 7, 11, 12, 1, 10, 5, 11, + 3, 17, 9, 24, 9, 17, 11, 2, 6, 1, 11, 3, 8, 5, -3, -5, -4, -5, -13, -2, 15, 12, 26, 15, 7, 1, 4, 3, 5, 5, + 2, 4, 0, 6, 3, 1, 1, -6, -6, -7, -4, -5, -4, -4, -11, -11, -15, -16, -13, -5, -8, -3, -3, -6, -10, -9, -6, 1, 1, 1, + -2, -2, -3, 1, 0, 2, 1, 2, 5, 5, 5, 8, 8, 5, 5, 0, 3, 2, 0, 8, 8, 7, 13, 15, 14, 14, 16, 18, 16, 15, + 13, 11, 8, 1, -6, -11, -15, -21, -25, -28, -27, -26, -16, -14, -24, -22, -20, -22, -20, -12, 3, 14, 21, 32, 29, 31, 20, 17, 12, 2, + 0, -2, 3, 5, 3, -5, -10, -14, -18, -29, -28, -32, -28, -28, -26, -26, -22, -6, 7, 28, 35, 36, 20, 10, -6, -37, -59, -74, 127, 26, + -78, -28, 87, 22, -36, 37, 33, -21, -19, 44, 0, -32, 17, 18, -24, 2, 22, 0, -17, 9, 4, 3, -4, 14, -3, -6, 7, 6, -1, 1, + -1, 4, -4, -9, -8, -3, -5, -6, -7, -4, -8, -2, -4, -3, -7, -6, -5, -1, -3, -4, -3, -6, 8, -3, 1, -5, 0, -10, -5, 29, + 14, 15, 7, -2, 11, 10, 4, -5, -7, 3, -1, -2, -6, 3, -4, 1, 13, 3, -3, 0, -3, 4, 2, -4, -11, -9, -4, -4, -3, -8, + 5, 2, -9, -2, -7, 3, 0, -2, 3, 7, 8, -1, 9, 4, 6, -1, 0, 2, -5, 4, 8, 3, 0, 2, 3, 18, 15, 7, 10, 3, + 7, 6, 0, -6, 0, 1, -5, 5, 9, 1, 0, 2, 4, 3, -5, 2, 13, -2, 4, 10, 3, 8, -2, -4, -3, -1, -8, -4, 5, 0, + 2, 5, 16, 5, 6, -4, -7, -12, -4, -9, -3, -9, -4, -7, -3, -10, -14, -2, -18, 4, -5, -6, 2, -4, -7, -11, -4, -3, -3, 15, + 12, 12, 5, 6, 6, -1, -7, -7, -8, -7, -3, -7, -2, 6, 6, 6, 0, -2, -4, -2, -8, -4, 8, 1, 3, 7, 3, 8, 1, 0, + -6, -1, -4, -2, -2, 0, 4, -1, -2, -7, -4, -4, -1, -5, -3, 6, 1, 5, -1, -9, -8, -2, 3, -1, 9, 9, 10, 7, 6, 4, + 3, -3, -5, -2, -4, -14, -10, -12, -5, 1, 10, 6, 2, -1, -4, -2, 0, 3, 4, -1, -9, -5, 3, -4, 0, 4, -4, 4, 4, -3, + -3, 2, 8, -3, 0, -5, -5, -13, 9, 1, 2, -1, -1, 5, 12, 0, -4, 0, 4, 5, -1, -4, -7, -10, -8, -7, -5, -7, 11, 3, + 21, 45, 33, -12, 3, 13, 5, 3, -14, -6, -12, -21, -1, -7, -15, 10, -10, -10, -2, -12, -18, 4, 4, 27, 15, 14, 18, 17, 12, -3, + -8, 8, 7, 2, -3, -2, -5, -3, -14, 3, -7, -5, -9, 0, -2, -9, -5, 3, -5, 0, -8, 1, 8, 20, 15, 25, 0, 5, 21, 2, + 2, 6, 3, 12, 30, 2, 8, -1, 14, 1, 5, -11, -8, 2, 1, 1, 3, -17, -4, -7, 1, 8, 8, -9, -8, 4, 2, 4, -7, -8, + 4, 9, 4, 1, -2, 5, 5, -4, -10, -2, 4, 0, 2, -8, 0, -7, 1, 4, 11, 2, -5, 1, 0, -3, 0, 10, 4, 4, 8, -9, + 5, -4, -1, 4, -1, -1, -1, 3, -7, -2, -4, -6, 8, 2, -3, 6, 2, 1, -7, -15, -12, -2, -5, -4, 9, 11, 5, 7, 9, -3, + 7, -5, 9, 8, -2, -5, -12, 4, -9, -1, -9, -1, 6, -2, -7, 4, -13, -3, -15, -17, -14, 2, 3, 2, -5, -13, 3, -2, -11, 12, + 13, 5, -3, -12, 8, 6, 4, 5, 6, 3, -3, 0, -7, 4, 6, -1, -4, 5, 2, -6, -5, 3, 11, 4, -5, -2, -7, -2, 0, -2, + -7, 8, 9, 4, 6, 4, 0, -2, -2, -4, -1, -5, 5, 5, 4, -5, -4, -5, 4, -4, 2, 3, 4, 2, 3, -6, 3, 6, -1, 1, + 2, 7, 5, 3, 2, 6, -5, -2, -7, 1, 7, 6, 6, 3, 8, 2, -2, -3, -4, -12, 0, 1, 12, -6, -1, -3, -10, 8, 3, 7, + 4, 11, -2, -2, -1, 1, -3, -9, -9, -7, -5, 4, 0, 3, 7, 7, 3, 12, 4, 2, 3, 2, 5, 0, -11, -15, -7, -5, -7, -6, + -2, -3, 0, -3, -2, 1, 18, 19, 4, 10, 20, 19, 3, -23, -10, -14, -18, 4, 5, -8, 5, -10, -21, -1, -6, -31, 4, -4, 5, -5, + 9, 19, -2, -12, -9, -2, -7, 14, 6, 0, 1, 3, 1, -3, 3, -19, -4, 1, -5, -1, -1, 0, 4, -12, -7, 15, 4, 1, 10, 3, + -4, -5, 11, 9, 12, 10, 8, 5, 12, 28, 5, -2, -2, 3, 2, -3, -1, -11, -4, -2, 6, 6, 7, 8, 6, 6, -5, 1, -8, -8, + -11, -10, -15, -4, -9, -4, -4, -4, 3, -6, -5, -4, -8, -1, -9, 5, 7, 9, -8, -8, -9, -5, 6, 4, -1, -5, -5, -11, -4, -13, + -11, -4, -3, -4, -2, -1, 2, 8, 5, -1, 6, 10, 15, 9, 10, -2, -4, -1, 2, 7, 8, 2, 1, 6, -3, 3, 6, -3, 9, -12, + 3, 1, -3, -8, -9, 3, -4, 2, -15, -10, -5, 0, -2, 0, -4, 1, 0, 3, 0, 6, 7, -3, 11, 12, 11, 20, 5, -6, 1, 8, + -9, -1, 2, -3, 8, 2, 7, 8, 6, 25, -11, -2, -4, 0, 1, -2, -6, -12, -4, -3, -3, -5, 0, 0, -1, 1, -4, -12, -9, -9, + -2, -5, -14, -1, 2, 0, 1, 7, 6, 7, 8, 0, -1, 0, -6, 3, 2, 2, 2, -2, -1, 2, 5, 13, 13, -1, -5, -4, -5, -4, + -5, 0, 1, -10, -5, -2, 5, -4, -2, -4, 4, 4, 6, 4, -3, 1, 1, 5, 2, -1, 2, -7, -2, 0, -10, -7, -13, -4, 7, 4, + 7, -5, 10, 8, 10, 5, 5, 2, -7, 4, 5, 8, 4, 7, -4, -3, -6, 5, -12, 0, -4, 0, 3, 11, -1, 10, 0, -5, -10, -9, + -12, -4, 4, 9, 5, -9, -2, 10, 8, -5, -9, 2, 15, 12, -18, 4, 9, 2, -11, -15, -23, -17, 1, -5, -15, 10, 10, -15, 3, -15, + -6, -3, -3, 15, 7, -2, -1, -6, -13, -6, -22, -14, 4, -5, 5, -12, -3, -10, 6, 0, 9, -4, 0, 3, -7, 0, 3, 2, 2, -4, + -4, -9, -7, 13, 8, 1, -12, -1, 2, -6, 5, -5, -3, -1, 26, -5, -9, -9, 3, 6, 6, 2, 5, -4, -13, -18, -9, -22, -12, -18, + -17, -12, -4, 1, -6, -7, -7, 2, -8, 3, -1, -1, -2, -1, -3, 1, -12, -17, 0, 2, 8, 5, -2, -10, -18, -24, -15, 9, 6, 3, + 1, 8, 6, 13, 14, 7, -1, 6, 4, -16, -4, -1, -2, -7, 5, -12, -2, 11, 2, -16, -12, -8, 6, -4, 1, 3, 1, 7, 4, 3, + 2, 13, 0, -1, 7, 9, 10, -8, 9, -8, 14, -8, 9, 9, 0, -4, 6, 8, 1, 15, 7, 13, 6, 6, 3, 0, -18, 4, -9, 3, + -8, 2, -4, -1, -5, -4, -1, -12, -4, -7, -14, -1, 1, 2, 21, -13, -2, -1, 2, 3, 3, -2, -3, 1, -1, 1, 0, 2, 1, -1, + 1, -4, -4, 2, -2, 4, 2, 0, 4, 0, -5, -5, -5, -6, -5, -5, -3, 2, 6, 4, 12, 10, 1, 2, -5, 0, 4, 4, 3, 2, + 0, 3, 0, -2, -4, 2, 3, -2, -1, -5, -8, 2, 1, 0, 1, -3, 6, 9, 9, 12, 2, 13, 14, 12, 3, 0, 2, 3, -6, 1, + -11, -14, -16, 6, 10, 11, 6, 7, 5, 5, 5, -1, -2, -9, -11, 1, 4, 6, 6, -1, 5, 0, 1, -1, 0, 5, -1, -5, -2, -2, + -14, -10, -4, -1, -7, -1, 8, -3, 2, 2, 2, 3, 0, 17, -4, 6, 9, 52, -9, -9, -2, 9, 6, -6, -16, 9, 15, -7, -6, -11, + 2, 22, -6, 4, 2, 5, 14, -12, -4, 1, 7, 4, -6, 1, -15, -15, 10, -1, -2, 17, 3, -7, -5, -1, 10, 10, 4, -3, -8, 3, + 2, -5, 1, 5, 8, -7, -1, -5, 2, 0, 1, -6, 0, -6, 4, -2, -3, -2, 10, 17, 3, -8, -2, 7, -6, -7, 2, -5, -10, -6, + -10, -8, -7, -7, -15, -12, 7, 0, -8, 7, -9, 0, -5, -7, -8, -5, 2, -2, -12, -11, 0, 5, 6, 13, 9, 13, 8, -7, -10, -10, + -10, -7, 6, -5, -3, -9, -5, -4, 8, 0, 10, 1, 5, -4, -1, 3, 4, 10, 17, 4, 4, 21, 16, 10, 0, -9, -10, -4, -9, 3, + 0, 2, 8, -13, -11, -1, 7, 2, 19, 22, 7, 2, -8, -2, -17, -3, -12, -12, -2, -15, -6, -1, -13, 8, -7, 7, 0, 5, 4, 12, + 19, 3, 10, 10, 10, 15, 8, -1, -1, -30, -21, -19, -21, -19, -9, -2, -5, 2, -2, 10, 1, -1, 7, 1, 4, 4, 4, 2, 5, 0, + -2, 4, -4, 5, 4, 15, 13, 16, 17, 13, 15, 10, 0, 6, 6, -1, 3, -4, -5, -13, -7, -8, -10, -5, 0, 5, -5, -1, -4, -1, + 0, 0, -1, -9, -7, 3, 2, 2, 5, 7, -6, -2, -4, -10, -7, -5, -7, -10, -11, -3, -1, 3, 6, 4, 10, 6, 9, 9, 4, 2, + -2, 0, -9, -20, -17, -16, -7, -6, -3, 10, 7, -1, -2, -1, 9, 6, 4, -2, -10, -5, -3, 1, -5, -6, -2, 4, 1, 11, 7, 9, + 14, 3, 11, 6, 1, -3, -8, -1, 2, 0, -3, -4, 0, -6, 2, 2, 1, -5, -3, 2, 46, 0, 71, 4, 7, 38, 44, 5, 20, 1, + 10, 6, 12, -6, -6, 9, 26, 6, -8, -8, 6, 2, -5, 2, 1, 7, 18, 7, -2, -7, -21, -8, 2, 5, -5, 15, 4, -5, 16, 13, + 8, 6, -10, -4, -10, 1, 4, 1, -5, -11, 2, 8, -3, 11, 7, 10, -5, 8, -3, 2, -10, -3, -19, -1, -15, -17, -10, -2, -1, -8, + -12, -6, -4, -6, 3, 1, 1, -1, -7, -9, -19, -3, -7, -5, -18, -15, -18, -19, -14, -20, -27, -24, -31, -21, -15, -21, -19, -18, -11, -19, + -11, -12, -22, -23, -33, -31, -42, -32, -31, -18, -15, -18, -12, -3, -2, 0, -3, -9, -15, -20, -14, -11, 0, 8, 21, 19, 18, 9, 5, -13, + -19, -16, -20, -21, -28, -19, -28, -39, -29, -17, -22, -20, -14, 4, 10, 14, 31, 26, 26, 9, -4, -12, -26, -8, -7, -3, -7, -6, 11, -7, + 19, 1, 1, -4, -17, -3, 1, 9, 16, 24, 42, 52, 39, 23, -10, -26, -39, -38, -24, -17, 4, -16, -6, 0, -18, 15, 7, -1, -1, 3, + 2, -5, -2, -7, -7, -4, -10, -12, -16, -19, -19, -11, -7, -6, 0, 2, 4, -3, -2, -2, -5, 4, 8, 2, 0, -5, -9, -15, -16, -7, + -9, -11, -9, -12, -13, -1, 2, 0, 2, 5, 1, 3, 0, 3, 8, 7, 9, 10, 5, -4, 1, 1, -3, 6, 9, 6, -2, -11, -16, -30, + -29, -25, -34, -37, -35, -21, -21, -36, -25, -22, -20, -18, -13, 0, 8, 11, 20, 24, 30, 27, 20, 21, 20, 26, 26, 29, 15, 10, 13, 11, + 19, 13, 17, 13, -4, 6, -1, -1, -3, -8, -10, -27, -54, -89, -120, -127, -113, -79, -42, 4, 42, 49, 69, 90, 107, 62, 5, 116, -6, 60, + 102, 43, 48, -64, 27, -10, -10, -8, -8, -20, -32, 12, -3, -45, -6, -6, 1, -14, -19, -11, -11, -5, -15, -28, -20, -13, -12, -10, 3, -12, + 8, 3, 4, 8, -6, -1, -11, -9, -20, -12, -9, -25, -23, -20, -12, -35, -5, -15, 14, 7, -5, 5, 1, 3, 3, -15, -20, -18, -10, -11, + 4, 0, -10, -1, 0, -2, 0, 6, 7, 0, 0, 6, 0, -5, -5, -7, -3, -3, -7, -3, -2, 6, 7, 7, -4, -5, -3, -5, 5, 0, + 9, 1, 1, 4, 0, -3, -8, -7, -5, 1, 7, 2, 0, 2, -3, -4, 0, -6, 0, 4, 1, -1, -7, 2, -9, -7, 2, 3, 2, -1, + -1, -2, -4, -8, -5, 1, 6, 6, -2, -2, 2, -1, 1, -9, -8, 6, 2, -1, 7, -6, -5, -3, 1, 7, -2, 3, -8, -5, -3, 9, + -5, 8, 10, 8, 1, 3, 4, -7, 5, 4, 0, 6, 5, 6, -10, -3, -5, 1, 2, 4, -2, 3, 3, -7, -4, -11, -4, -1, -5, 0, + 0, -1, 2, -2, -1, 7, 0, 5, 9, 11, 2, -1, -8, -6, 0, 3, 1, 5, 2, 4, -2, 2, -4, -2, -5, 0, -3, 5, -1, 2, + 1, 1, -3, -2, -4, 1, -3, -3, 1, 3, 5, 2, 1, 3, 4, 1, -3, 5, -1, -1, -1, -7, -7, 4, 1, -7, -2, -6, -5, 0, + -4, 3, 2, -7, -1, -2, 4, 1, 2, -5, 6, -1, -1, -6, -4, -5, -3, 7, 7, 5, 6, 1, -4, -1, 0, 1, 1, 2, 4, 3, + 7, 5, 0, -6, -6, 7, -3, -7, -3, -3, 3, 7, 6, 11, 2, -3, -9, -2, 3, 4, -1, 4, 0, -4, 0, -3, -2, 5, 14, -8, + -1, -1, 19, -6, -7, -12, -3, 0, 0, 20, 5, 1, 4, 9, -6, -4, -2, -2, -4, -13, -4, -4, 3, -20, -5, -2, -11, 0, -10, -4, + 7, 4, 5, 5, 4, 8, -14, -2, -12, -12, 6, -2, 10, 11, -12, -11, -11, -2, 9, 7, 3, 9, 3, -3, -3, -1, -3, -9, 3, 2, + 6, 1, 5, -2, 7, -1, 3, 4, 11, 10, -5, -2, 2, 1, 6, -1, -3, -4, 6, 2, -1, 2, 9, 5, 4, 2, 4, 9, 14, 2, + -2, 7, 8, 9, -4, 4, 11, 3, 5, -3, -7, -9, 0, -8, 5, 7, -4, -3, -4, 3, 2, -8, 4, 12, 10, -7, -3, -8, 0, 2, + -4, -8, -8, 0, -3, 2, -7, -14, -5, -7, 2, -12, -1, 8, -8, -4, 3, -6, 0, -6, -4, 2, 2, 8, -2, -3, -7, -4, 7, 3, + 5, -1, 2, -11, 1, 2, 7, 3, 18, 12, 9, 11, -5, 3, -2, -1, -10, 1, 14, 0, 16, 5, -3, -5, -1, -3, -9, -8, -16, -5, + -10, -5, -9, -4, -5, 1, -8, -3, -3, -2, -1, -6, 0, -2, 1, -3, -5, -8, -4, 5, 9, 7, -1, -5, -4, -7, -8, -6, -5, -10, + -6, -3, 0, -3, 2, -8, -12, -4, 2, 1, -1, 3, 6, -1, 7, 6, 5, 2, 3, 5, -2, -4, -2, -3, 0, -8, -8, -2, 3, -3, + 0, 1, -2, 3, 9, 1, 4, 4, 2, 5, 6, 12, 2, 9, 3, -2, 0, 2, -6, -10, -5, -6, -3, -3, 1, 2, 1, 5, -4, 1, + -3, 2, 1, -6, 3, 6, -6, -8, -2, -1, -1, 0, 0, -2, 9, 2, 0, -3, 5, 2, 7, 10, 3, -5, -3, -4, 2, 1, -2, 0, + 1, -4, 1, -3, -12, -6, -16, 13, 0, -15, -14, -1, -1, 4, 11, -4, 0, 8, -9, 5, -1, 15, 6, 2, 0, -16, 1, -7, -8, -6, + -5, -10, -1, 5, -6, 2, -4, 14, 1, -8, 1, -1, 9, -6, -3, 4, 11, 21, 8, 3, -1, -6, -1, 1, 2, 4, 7, -8, -3, 3, + -3, -12, 3, 1, -6, 9, -4, 3, 2, 3, -11, -6, -7, -10, 0, 1, 1, 1, 3, 2, 4, 6, 5, 3, -6, -2, -3, 7, 17, 16, + 6, 3, -1, -5, -3, 2, 2, 5, 11, 12, -2, 2, -2, -6, -3, 3, 3, 5, -10, -1, 4, 9, 9, 2, 5, 3, -1, -9, 0, 0, + 0, -4, -9, -5, 3, 6, -1, 3, 6, -2, -2, 9, -1, 6, -4, -6, -7, -3, -8, -5, 5, 13, 2, 5, 9, -4, -4, -5, -16, -5, + 3, -7, -1, 0, 3, 8, -1, -1, -12, -2, -8, 0, 7, 11, 6, 4, -5, -9, -11, -7, -11, -6, -11, 3, -7, -3, 9, 1, 5, -3, + -2, -2, -6, -7, -2, -5, -7, 2, -1, -3, -4, -4, -2, 4, 2, 0, -6, -2, 4, 9, 4, 1, -8, 0, -6, 1, -4, 6, 0, 8, + 6, 0, -8, -4, -3, -4, 3, -1, 3, 10, 6, -3, 4, -3, -5, 2, 0, 5, 5, 4, 3, 3, 6, 1, 3, 4, -1, -3, -5, -1, + -6, -2, 2, 5, 2, -2, 1, -5, -5, -5, -1, -5, 0, -5, -6, -6, -4, -2, 3, 0, -2, 3, -7, 3, 3, 4, 3, 5, -8, 3, + 7, 3, -2, -1, -6, -1, -4, -5, -1, -1, -3, 4, 2, 11, 14, 9, 11, 0, 3, -2, -1, 4, -1, 4, 3, 4, 4, 0, -5, -4, + 9, 2, 5, -2, 3, 1, -3, -3, -5, -19, 11, -1, 11, -11, -31, -27, 0, -6, 1, -1, 6, -7, 11, 1, 9, 0, 17, 11, 8, 3, + -4, 4, -7, -4, -1, -8, -7, -4, -1, -6, -10, 8, 1, 7, -10, -12, 1, -11, 0, -11, 4, 7, 15, -1, -11, 2, -3, 8, -2, 16, + 13, 8, 3, 2, -2, -3, -1, 6, 2, -7, 10, -2, 2, 13, -11, -8, 0, -5, -4, -8, -7, -2, 10, 8, 7, 10, -2, -9, -9, -4, + -2, -5, -1, 9, -3, 5, -2, -2, -8, 1, 1, 6, 0, -4, 0, -5, -2, -1, 0, 8, 6, 4, 0, 3, -5, -1, 3, 10, 14, 5, + 3, -5, 8, 7, 4, 1, -6, -5, -6, -5, 3, 7, 1, -12, -6, 4, -2, -8, -2, 4, -3, 11, 1, -11, 1, 6, 9, 9, 1, 4, + -9, -17, -10, -12, -6, -7, -3, -7, -4, 3, 4, 7, -5, 5, -10, 11, -4, 9, -2, 11, 0, 0, -5, -6, -1, 2, -7, 1, 9, 10, + 2, 5, -4, -1, 5, -3, -11, -12, -3, -7, -5, 1, 8, 8, 10, -6, 2, -1, 0, 6, 5, 1, 2, 3, 2, -2, -7, -2, -12, -11, + -4, 2, 4, 6, -1, -8, -9, -7, 0, 4, 0, -5, -1, -3, 0, 0, 4, 7, 3, 5, 1, 6, 3, -5, -3, 3, 3, 2, 1, 6, + 3, -1, -3, -1, 2, 1, 3, -5, -8, -7, -5, -1, 3, -5, 2, 5, 6, 0, 4, -6, -5, -2, -1, 7, 0, 3, 3, 4, -5, 8, + 3, -7, 3, 6, 8, 10, 1, 3, -6, 1, -3, -3, -6, -10, -10, -1, 8, 2, 1, 2, 0, -1, -5, -1, 1, 1, 0, 5, 1, -2, + -8, 6, 1, -1, -1, 9, 7, 4, -6, 1, -11, -5, -1, -5, 0, 28, -7, 5, -21, -11, -26, -10, 8, 9, 3, 10, 1, 1, -12, 6, + 4, 8, 4, 4, -3, -12, 1, 2, -12, -13, -2, -13, -10, -2, -4, 2, 17, 11, -4, 4, 4, 2, -8, -14, -19, -11, 1, 9, 7, -6, + 0, -9, 9, 6, -1, 1, 11, 11, -3, -7, -12, -2, 9, 4, 2, 1, -1, 9, 9, -48, 30, 23, 4, 6, 6, 19, 18, 14, 12, 8, + 5, 5, 14, 18, 18, -5, -11, -9, -8, 4, 4, 8, 7, -2, 6, 7, 5, 4, -4, 10, 21, 14, 10, 2, 12, 7, 15, 5, 5, 11, + 1, 3, 4, 6, 0, 6, 13, 1, -1, -2, 2, -4, -11, -6, -11, -18, -15, -11, -14, 7, 2, -6, -6, -2, -7, -3, 1, 4, 2, -2, + 10, 7, 10, -8, -12, -1, -18, -5, -12, -14, -10, -8, -8, -16, -6, -8, -16, -29, -11, -9, -3, -1, 2, 3, 2, -2, -3, -12, -13, -9, + -18, -15, -10, 3, -1, -3, 15, 15, 8, 11, 11, 9, -10, 1, -5, 4, -3, 5, -7, -1, -3, -1, -1, -6, -1, 2, 0, 5, 5, 5, + 2, -3, 0, 6, 5, 2, -3, -4, 3, 3, 3, -5, -7, -8, -11, -8, -5, -6, 1, 3, 0, 3, 3, -1, 6, 7, -1, 4, 3, 2, + 2, 2, 14, 6, -1, 1, -4, -10, -1, -2, 1, 1, 2, 0, 4, 0, 3, -5, -1, -7, 1, -5, -2, -3, -2, 4, 1, 9, 8, 9, + 1, 6, 5, -3, -7, -8, -8, -3, -3, -7, -4, -2, 10, 3, 10, -1, -1, 2, 0, -1, -2, 11, 3, 2, 8, 6, -1, 3, 0, 0, + -9, -6, 6, 1, 1, -5, 1, -2, 2, 3, 1, 3, 9, 2, 10, 6, 5, -1, -1, -6, 51, -11, 5, -23, -6, -24, -18, 5, 14, 10, + 29, 11, -7, -20, -3, -8, 14, 19, 12, 3, -8, 0, 16, -2, 2, 3, 2, -4, -9, -3, -1, 11, 19, 3, -4, -9, -7, -4, -14, -9, + -5, 5, 1, 1, -4, 4, -15, 1, 7, 0, 2, -11, -4, 1, -2, -5, -2, 8, -1, 7, 3, 2, 1, 8, -80, 37, 20, 37, 26, 40, + 33, 27, 33, 31, 37, 20, 18, 19, 26, 15, 8, 4, 9, 15, 8, 12, 18, -4, 6, 0, -7, -11, -7, -4, 4, -5, 6, 10, 2, -2, + -1, 12, 4, 21, 19, 24, 19, 14, -1, 4, -10, -12, -6, 2, -2, -11, -13, -15, -14, 0, -1, -9, -7, -8, -1, -6, -4, 7, 13, 12, + 19, 30, 11, 8, 10, 4, 14, 9, 6, 6, -2, -11, -6, -24, -20, -18, 4, -5, -3, -3, -7, -11, -10, -14, -6, -7, 6, -3, 3, -7, + -7, -15, -36, -30, -18, -19, -11, -24, -17, -22, -22, -30, -16, -6, 17, 26, 8, 23, 20, 6, -6, -20, -10, -2, -17, 20, 6, 7, -6, 0, + 5, 6, 7, 4, 9, 0, 2, -7, -3, -3, -4, -4, 2, 2, 2, 4, 1, -2, -10, -12, -6, -1, 4, -2, 2, 3, 2, -7, -4, 3, + 3, -6, -8, -13, -6, 1, -3, -4, -9, -18, -22, -11, -6, -8, -12, -5, -10, -17, -14, -17, -16, -11, -20, -17, -7, -6, -10, -8, -7, -11, + -8, -3, -7, -11, -8, -7, -1, -4, 1, 6, 4, 11, 7, 8, 13, 16, 8, 14, 24, 24, 27, 28, 41, 39, 52, 53, 51, 51, 59, 40, + 39, 37, 37, 34, 35, 31, 24, 30, 18, 19, 12, 8, 4, 5, -5, -14, -27, -40, -61, -75, -102, -97, -106, -116, -127, 75, 78, 26, -85, 13, + -23, 19, -15, -3, 31, 20, 10, -19, -6, -13, 2, -4, 12, 1, -7, -8, 6, 26, 16, 4, 4, -5, 1, 3, 6, -1, 7, 8, 11, 6, + 1, -6, -5, -2, -9, -7, -1, 1, 6, -7, 2, -3, 3, 6, 9, 11, 3, 4, 3, 3, -10, -5, -1, 6, 6, 10, 4, 13, 13, -72, + 7, 6, -5, -4, -4, -9, -3, 1, -5, -4, -9, -8, 3, -2, -3, -1, -6, -8, -1, 1, 5, 4, -2, 3, 0, -1, 1, -6, 0, -4, + 5, -3, 1, -4, -8, -5, 9, 8, 8, 2, 9, 3, 5, 4, 7, 10, 3, 0, 3, 1, -2, -1, -1, 3, 0, -3, 5, 10, 6, 2, + 4, 3, 1, 1, -1, -5, -1, -3, -2, 1, 0, 3, -3, 0, -5, 8, 6, 13, 15, 5, 5, 3, 0, -1, -4, -14, -2, -13, -5, 2, + 1, 4, 4, -2, -2, -4, -5, -2, 3, -1, -4, 0, 3, 7, -10, -2, -5, -2, -1, 0, 5, 3, 2, -2, -2, -5, 4, -3, 3, -2, + 6, 9, 6, -1, -3, -1, 4, -1, 1, -7, -4, -2, -2, 5, 5, 5, 4, 0, 4, 5, 1, 2, 4, 0, -1, 0, 0, -2, -4, -7, + -9, -3, -3, -7, -3, -1, -1, -5, -4, 1, 0, -2, 0, 4, 8, 8, 2, -1, -2, 1, -13, -11, -4, -5, -2, 6, 11, 5, 3, 7, + 1, -6, -2, -1, 0, -5, 1, 1, 5, 5, 5, 0, 5, 1, 1, 4, 6, 12, 7, 4, -1, -3, -6, 0, 0, -5, -12, -8, -7, -4, + -4, 4, 3, 8, 8, 5, -5, 3, -2, -2, -1, -7, 2, 9, -6, -5, -10, 0, -4, 3, 14, 4, 3, 8, 7, 6, -2, -5, 3, -20, + 9, 37, -16, -1, 27, 1, -2, -16, -21, -18, 1, 9, 5, -14, -9, 0, 4, -5, -5, -3, -5, -1, -1, -1, 0, 6, 5, 1, -5, -8, + -9, -1, -6, 5, 2, 1, -6, -6, -2, -8, 0, 1, -2, -11, -9, -10, -5, -6, 5, -5, 5, 5, 5, 4, -2, 1, -4, 2, 13, 7, + 11, 3, 1, -6, 18, -2, 5, -1, 0, -5, -3, -5, -4, -3, -9, 2, -4, -4, 0, 0, 6, 4, -6, -2, 0, 6, -5, -3, 4, 3, + 7, 3, -7, -3, 1, -4, 0, -2, -2, 6, 5, 8, 9, 14, 5, 3, 9, 7, 0, -10, -7, -1, -5, 0, -2, -6, -7, -1, 4, -3, + 1, -2, -8, -4, 2, 13, 0, -1, 0, -7, -2, -1, -9, 6, -1, 9, 13, 0, -4, -7, -6, 4, 5, 5, -1, -2, 0, 4, 7, 6, + 2, 8, 6, 2, -19, -6, -3, 8, -3, -8, -6, -6, 2, 3, 2, -3, -1, -4, -4, -12, -10, -5, 2, 4, 0, 0, 1, -5, 8, -1, + 6, 1, -9, 1, -6, 9, 3, 4, 2, 4, 1, -5, -6, -3, -2, -4, -6, 1, 2, 2, 0, 0, 4, 1, -2, 0, -2, 0, -1, 2, + 1, 4, 3, -4, 0, -7, -6, -4, -7, -1, 0, 6, 7, -2, 2, -1, 5, 4, -1, -4, 3, 1, -1, 5, 5, -3, -9, -5, 1, -5, + 0, 0, -4, -1, 2, 0, 2, 4, -2, 5, 7, -1, 1, 3, 4, 5, 0, -10, -9, -6, -5, 0, 4, 6, 0, 1, 0, -5, 1, 3, + 3, 3, 0, -7, 3, 3, 9, 2, 2, -1, -2, -4, -8, -6, -5, -4, -6, -4, -5, -1, -3, -1, -2, -2, 4, 5, 3, -1, 3, -1, + -3, -4, -5, -3, -4, -10, 16, -6, -3, 12, 7, -10, -22, -9, 4, 1, -4, 7, 4, 2, 1, 7, 2, -12, -2, 3, -2, 6, -6, 2, + 10, 10, -8, 1, 5, -2, 3, -2, 5, 6, 7, 8, 5, 9, 9, -2, 0, 1, -3, -11, -5, -4, -1, 1, 1, 1, 2, 8, -8, -3, + 6, -3, 5, 5, 4, 6, 12, 7, 1, 11, 11, -1, -1, -8, 5, -2, 2, 2, -8, -3, -5, 1, 2, 7, 5, 1, -8, -11, -3, 6, + 5, -4, -6, 4, 13, 16, 10, -2, -3, 0, -4, 5, 5, 13, 9, 1, 5, 4, -5, 2, 2, 13, 10, 4, -2, 3, 1, -6, -1, 10, + -5, 6, -2, -2, 6, 12, 10, -1, -1, -7, 0, 2, -5, 0, -1, 5, 3, 3, 6, 10, 3, 4, -1, -6, -8, -3, 0, 6, -8, -7, + -4, -5, -4, -6, 2, -3, 2, 5, 0, 3, -4, 12, 0, -3, 4, -4, -2, -4, -1, 1, 5, 7, 0, 11, -5, 0, -3, -13, -6, -2, + -15, -11, 0, -2, -3, 5, 6, 0, 5, -5, 6, 7, 3, 4, 2, -1, -5, -7, -4, -4, -10, -8, -10, -5, 3, 5, -1, -5, 3, 12, + 14, 6, 6, 2, 7, 9, 4, 6, 4, -4, 0, 3, -1, -3, 5, 1, -1, 3, 0, 0, -3, 0, -2, -2, 0, -6, -1, -3, -2, -4, + -1, 3, 3, 1, 2, 6, 5, -2, -8, 1, 2, 4, -1, -1, 0, -7, 3, -2, 1, 5, -6, -8, -2, -2, -10, -5, 5, 5, 9, 3, + 7, 2, 5, 3, -5, -8, -5, 3, 2, -7, -4, 5, 1, 11, 4, 3, 1, -8, -8, -2, -5, 7, -6, 1, 2, -3, -1, 0, 3, 7, + 1, 3, -2, 5, 4, -2, 4, -2, -5, -2, -10, 18, 7, -8, 6, 13, 8, -14, -22, 6, 3, 10, 11, -7, -6, -8, 8, 1, -6, -5, + -7, -5, -2, 3, 5, 8, 5, -3, 5, 5, -9, 2, -2, 8, -3, -3, 1, -5, -3, 5, -6, 1, -6, 3, -7, -11, -6, -7, -9, 2, + -8, -9, -2, -8, -6, -4, 2, 1, -1, 2, 8, 0, 11, 1, -4, 11, 6, 9, 3, 2, 0, 9, 0, -1, -4, -14, -3, -3, -4, 1, + 0, -3, -2, 3, 2, 3, 6, 10, 22, 15, -1, -6, -10, -7, -6, 4, 3, -3, 0, -13, -7, -5, -1, 0, -5, -4, 4, 7, 0, -4, + 0, 2, 5, 1, 3, 1, 13, -1, -3, -4, -7, 2, 0, 7, 4, 3, -4, -1, 0, -4, -1, 4, -12, 6, 3, -2, -3, -2, -6, -6, + -4, 8, -4, 3, 3, -4, 7, 4, 14, 0, -1, -2, 6, 6, 1, 6, 7, 9, 8, 3, -2, 6, 2, 0, 1, 0, -1, -1, 4, -4, + 0, 2, 7, -1, 0, -11, 4, -4, 2, 7, 1, -6, -8, 2, 0, 8, 13, 10, 6, 0, 0, -1, -5, -3, -6, -7, -8, -6, -3, -2, + 5, -2, -2, 4, 0, 5, 11, 13, 6, 7, 5, 5, 7, 4, 6, 10, 11, 5, 1, -7, -11, -10, -7, -1, 4, 1, 6, 3, 1, -8, + -4, -7, -4, 0, -4, 3, 4, 0, -1, 2, 2, 6, -4, 0, -6, -8, -6, -7, -7, -5, -9, -10, -11, -3, -1, -8, -2, -1, 3, 0, + -2, -1, -2, 5, 1, -2, -1, -8, 3, 0, 2, -2, -1, -2, -5, 2, 4, 4, 10, -5, -9, -3, -3, -7, -2, 1, -3, -1, 3, 4, + -1, -2, -4, -12, -1, -6, 1, 1, -1, 2, -5, -4, -3, 3, -12, 6, 9, 18, 3, 6, 14, 4, -3, -30, -8, 3, 12, 8, -8, -10, + 9, 17, -1, -9, -2, -4, -4, -9, -2, 4, 5, 3, -5, -5, 3, -3, 5, -1, 7, -2, 13, 7, 2, 6, 1, -4, 6, 14, -3, -3, + 4, 1, 2, -1, 2, 4, -3, 0, -8, -10, 2, 3, 0, 5, 7, 4, 1, 13, -4, -15, -5, 0, -9, -20, -14, -13, -11, -7, -5, 1, + -6, -3, -2, 0, -8, -11, -13, -10, -4, 6, 9, -3, 6, 8, -3, -10, -9, -12, 6, 11, 3, 2, -7, 1, 2, -5, -5, -1, 9, 5, + -7, -13, -9, -6, -9, -8, 4, -1, -8, -3, 8, -7, -7, -7, 1, -5, -9, -1, -2, -9, -1, -1, -1, 2, 8, 8, -1, -8, -2, -13, + -7, -8, -6, -6, -5, -20, -18, -10, 3, 5, 10, 9, 4, 2, 3, 6, 5, 6, -7, 0, 3, 17, 19, 7, 10, 6, -1, -6, 6, -3, + 3, 11, 11, 9, 9, 3, 5, 15, 4, -1, 13, 3, -4, -7, -18, -19, -22, -6, -4, 5, 5, 5, 11, 9, 7, 11, 5, 3, 2, 3, + 3, -3, -1, -2, -4, -6, -7, -6, -7, -4, -2, 6, 6, 0, 3, -3, 2, 1, 2, 8, 3, 4, 5, 0, 3, -1, -6, 1, 6, 3, + -5, -5, 0, 5, 4, 7, 3, 3, 3, -1, 5, 3, -1, 1, 6, 9, 3, -2, 1, -2, -10, 2, 2, 1, 3, -1, -2, 4, 8, 10, + 2, 2, 1, 3, 0, -2, -5, -4, 1, -2, -7, -3, -2, -1, -1, 0, -4, -12, -9, -10, -9, 1, -2, -3, -4, -1, 2, -3, -1, -8, + -2, 0, 5, 5, -5, 6, 3, -3, -4, -3, -1, 0, -1, 1, 2, 1, 1, 0, -1, 3, 16, 1, 7, -3, 1, 27, 16, -32, -42, -20, + 14, 8, -11, -20, -1, 6, 5, 10, -8, 2, -4, -1, -3, -4, 12, 7, 10, -2, 4, 3, 7, 4, -1, 3, 10, 4, 3, 0, 1, 1, + 4, 8, -4, -5, -3, -7, -6, -6, 3, -1, 2, 8, 6, -1, -4, -8, 7, 6, 0, 3, 0, 5, 7, -1, -49, -15, -11, -18, -21, -27, + -28, -26, -23, -23, -29, -25, -12, -8, -2, -2, -2, -4, 2, -7, 1, -7, -2, -2, 5, 9, 8, 13, 21, 21, 14, 6, 12, 7, 6, 1, + 2, -10, -4, 9, 20, 29, 25, 20, 20, 11, 14, 9, 1, 12, 6, 5, -1, 6, 10, 7, 3, 6, 16, 4, 11, 6, -6, -9, -4, -9, + -10, -9, -10, -18, -22, -23, -29, -25, -22, -18, -33, -30, -32, -12, -6, -9, 7, -3, 11, 15, 28, 29, 34, 32, 31, 28, 33, 7, 7, 1, + 5, 11, 8, 8, 20, 13, 11, 12, 9, 4, 6, 10, 9, 6, 19, 15, 14, 7, 11, 10, 0, -13, -5, 19, 18, 2, 4, 1, 2, 4, + 2, -2, 1, -6, -11, -8, -10, -10, -7, -5, -1, -8, -4, -3, 2, 5, 6, 7, 12, 10, 16, 19, 19, 12, 12, 7, 1, -2, -1, 3, + -1, -6, -13, -4, -8, -4, -2, -6, -5, -6, -3, 0, 1, -7, -3, -3, 0, 1, 8, 3, 3, 15, 8, 11, 13, 8, 14, 10, 8, 10, + 7, 13, 9, 9, 9, 13, 19, 10, 20, 17, 10, 9, 0, 5, 2, 3, -3, -7, -5, -6, -8, -1, -3, -1, 7, -6, -1, -1, -4, -3, + -4, -5, -4, 3, 3, 2, -2, 2, 4, -2, 1, -5, -1, 3, 1, -3, -8, -3, -11, -4, -6, -11, -12, -6, -4, 2, 57, -127, -97, 68, + 110, 32, -55, -78, -3, 35, 47, -27, -32, 19, 13, -2, -1, 1, -10, 0, -6, 3, 4, 7, 16, -3, 1, 5, -6, -7, -6, -9, -10, -8, + -2, -7, -4, 2, -1, -2, -11, -9, -17, -9, -8, -6, -13, -2, 7, 6, 8, 9, -7, -9, -2, 10, 0, 4, 8, 3, 6, 7, 9, -46, + 2, -1, -4, 3, -1, -4, 4, 6, -2, -3, 4, 3, 5, 6, -2, 3, 2, 3, 5, 8, 1, 7, 3, 12, 9, -1, -6, -6, -10, -1, + 0, 0, 3, -2, -4, -8, -12, -4, -9, -13, -14, -6, -3, -1, -4, -7, -6, -6, -4, 1, -8, -8, -5, -8, -11, 1, 0, 0, 3, 10, + 4, 11, 5, 1, 9, 3, 2, 5, 11, 14, 11, 16, 14, 6, -4, 5, -1, 2, 1, -1, 10, 11, 7, 6, -9, -13, -3, 10, 6, 13, + 7, 1, 9, -1, 3, 8, -5, -15, -8, -7, -6, -3, -3, 3, -1, -5, -6, -4, -10, -9, -10, -6, 4, -9, -4, -7, 3, -10, 2, 6, + 12, 13, 9, 12, 7, 5, 4, 4, -2, -3, 3, -2, -4, -8, -12, -12, -5, -8, -3, -1, -1, -3, 2, 5, 13, 12, 5, 1, -4, -13, + -5, -7, -6, -6, -3, -1, -1, -5, -8, -11, -9, -6, -4, -12, -7, -10, -8, -10, -10, -7, -10, -11, -7, -4, 3, 8, 6, 8, 15, 9, + 16, 6, 11, 5, -4, -3, 1, -2, -2, -6, 5, 4, -3, 0, -12, -11, -7, -3, 1, 3, 7, 9, 7, 9, 10, 8, 0, -5, 1, 2, + 2, 1, -3, -5, -9, 6, -1, -9, -8, -10, -5, 0, -4, 2, 1, -2, -1, 2, 1, 8, 6, -1, 1, -8, -2, 2, 10, -3, -6, -20, + 57, -31, 0, 47, -1, -27, 39, 5, -11, 7, 16, 13, 0, -8, 6, 2, -1, -2, 0, 7, -6, -7, 10, -3, 4, -3, 3, -2, 0, -5, + 3, 9, 5, 11, 6, 9, 0, -15, -4, -6, -13, 0, -10, -2, 2, -1, -8, -2, -8, 0, -2, 5, -1, 10, -8, 1, -1, 7, 4, -4, + 2, -11, 0, 4, -8, 4, 0, -3, 2, 0, -7, 5, 8, -5, -6, -3, 8, -3, 2, 3, 4, 10, 10, 16, 10, -1, -12, -7, -3, 4, + 0, -14, -9, 2, 4, 5, -1, 8, 11, 12, 6, 5, 15, 7, -12, -3, 5, 4, 3, -3, 2, -3, -6, -9, -10, -6, -7, -3, -1, -9, + -12, -4, 4, 6, 8, 14, 20, 8, 3, 15, -6, -13, 0, 0, 0, 8, 1, 1, 1, 0, 8, 5, 0, 7, 4, 5, -5, -3, 0, -20, + -15, -7, -6, -1, 3, -4, -15, -3, -7, -5, -2, 4, -1, 2, 1, 1, 3, 3, -1, 2, 2, -2, 5, 1, -2, -8, 4, -1, 6, 11, + 8, 2, 5, -2, -10, -1, 6, 3, 9, 4, 4, 3, 2, -1, -11, -4, 2, 1, 1, -6, -4, -6, 1, 1, -3, -2, -1, 6, 4, -3, + -2, -7, -3, -4, -1, -1, 2, -3, 1, -6, 2, -2, 2, 0, -1, 1, 1, 9, 0, -3, -8, -4, -7, -2, 0, 5, -4, -4, -9, -5, + -7, -4, 1, -3, -5, -4, 0, -5, -3, -6, -5, -2, -5, 1, 1, 10, 6, 2, 5, 5, -4, -10, -1, 4, 1, -14, 4, -13, -2, -11, + -6, -5, -5, -1, -4, -5, -2, -5, -3, -14, -8, 1, -3, 0, 8, 4, 7, 0, -6, 1, 4, 13, 5, 10, 4, 13, 11, 13, 3, 8, + 4, 10, 5, 3, -2, 54, -17, 4, 40, -13, -15, 25, 6, -5, 12, 15, -1, -1, -2, 7, -4, -4, 8, 6, 6, 8, 3, -2, -9, 10, + -3, -9, -1, 8, -2, 0, -6, 2, 5, -4, 12, -1, -2, 1, 2, 3, -3, -10, -9, 11, -5, 0, 2, 6, 4, 1, 9, 14, 9, 7, + 16, 14, 8, 2, 1, 3, 13, 9, 8, -12, -9, -2, 3, -6, 1, -2, -17, -10, -15, 3, 6, 11, 10, 10, -6, -11, -1, -4, 4, -4, + -19, -9, -7, -1, 5, 0, -7, -6, -2, -5, -12, -9, -7, -1, 0, 3, 13, 8, -2, -9, 0, -8, -1, -8, -8, -5, -2, 4, -5, 0, + 8, -5, 7, 1, 12, 8, 10, 13, 27, 16, 10, 6, -1, 4, 18, 2, -4, 3, 2, 11, 10, 3, 5, 17, 9, -2, -2, 1, -8, 5, + -13, 11, 11, 14, 16, 4, 11, -1, 13, 25, 8, -2, -1, 8, -3, 11, -2, -3, -2, 9, 5, 7, 12, -2, -10, 6, 0, 7, -6, -4, + -19, -16, -2, -7, 1, 7, 6, -11, -1, -2, -13, -2, 0, 7, 6, 8, 9, 6, 4, -2, 8, 8, 13, 7, -1, 2, 0, 7, 1, -6, + -8, -6, 0, -6, -6, -3, -7, -7, -8, -6, -10, -16, -10, -7, -3, 2, -8, -2, 0, -2, -11, -8, 8, -7, -6, 2, 0, 4, -6, -2, + 8, 2, 0, 4, 6, 4, 1, 6, 3, 3, 2, 5, 6, 8, 4, 7, 1, 4, 9, 6, 6, 4, 4, -10, -5, -13, -22, -12, -18, -5, + -16, -2, 1, 2, 0, 0, -2, -4, -3, -4, -3, 2, 3, 9, 0, -1, 0, 6, -3, -4, -3, -2, -9, -5, -14, -17, -5, -2, -4, -4, + -1, -3, 5, 9, 8, 6, 3, 0, 9, 7, 57, -26, -6, 15, -23, -10, 31, 4, -18, 6, 8, -1, -6, -9, -18, -5, -7, -13, -15, 6, + 15, -4, -11, 1, -8, -1, -11, -14, -3, -7, -5, -7, -4, -16, -3, 4, -9, -8, -18, -2, -6, -2, -20, -12, -11, -3, -1, -2, 9, -4, + 3, 14, 13, -5, 5, -1, 4, -1, 2, 8, -1, -4, 7, 6, -21, -1, -3, -14, -13, -9, -9, 3, 5, 9, -5, 5, -3, -10, 10, 1, + 6, 6, 3, -3, 2, -3, 3, 1, 8, 10, -3, -8, -4, -5, -6, -5, 2, 5, 18, 6, 10, -2, 0, -2, -4, -6, -2, -7, 2, -2, + -3, -16, -10, -11, 1, 1, -5, -5, 0, -5, 8, 4, 0, 6, -4, -3, 4, -7, -10, -2, -7, -3, 1, -8, 0, -1, -7, 3, 3, -6, + -2, 11, 10, 18, 5, -3, -5, -5, 4, -13, 7, -7, -3, 8, 19, 8, -2, 9, 8, 5, 9, 9, 8, 6, 4, -4, -2, -4, -5, -6, + 4, -5, -2, 3, -3, -3, -7, 1, 0, 4, 7, 0, -4, -9, -9, -3, 1, 5, 2, 2, 4, -3, 3, -4, -2, 1, 0, 4, -3, -8, + -5, 3, 12, 10, -1, -1, 9, 15, 9, 5, 1, -6, -1, -3, -5, -4, 2, -3, -7, 4, 8, 2, 5, 1, -4, 0, -5, -5, -15, -12, + -5, -13, -15, -13, -5, -8, -10, -6, -1, 1, -1, 5, 9, 9, 9, 8, 10, -3, -3, 4, 3, 9, 6, 1, -5, -16, -14, -5, -6, -8, + -11, -4, 1, 7, 6, -4, 4, 0, 6, 2, 1, -1, -6, 2, 6, 3, 2, 5, -1, 2, -2, 1, 8, -3, 6, 4, 1, -2, 0, 11, + 6, -4, -2, 1, 5, 8, 6, 8, 3, 1, -5, -1, -8, -12, -15, 88, -26, 6, 19, -21, -5, 27, 0, -5, 19, 1, -1, -2, -19, -15, + 3, 3, -5, 1, -5, 6, 3, -12, -4, -13, -2, 2, 3, 2, -1, -10, -1, 3, -1, 2, 1, 1, 3, -12, 2, -4, -9, 1, 0, -1, + 7, 0, 3, 11, 18, 18, 14, 12, 1, 5, 8, 8, 5, 6, 5, 16, 6, -3, 1, -31, -24, -22, -14, -20, -8, -2, -15, -4, 2, 2, + 5, -4, -12, -13, -22, -9, -5, -4, -8, 2, 1, 10, 1, 3, 2, -16, 0, -8, -8, -12, -12, -10, -10, -7, 5, -1, 2, 10, -2, -8, + -20, -19, -22, -4, -19, -13, -15, -9, -7, -6, -8, -19, -17, -10, 2, -1, -28, -13, -11, -12, 3, 5, -4, 2, 2, 9, 24, 20, 10, 13, + 2, -2, 1, 1, -5, -5, 15, 11, 12, 19, 20, 6, 30, 17, 3, -4, 7, -2, 6, 15, 11, 17, 10, 0, 4, 0, 0, -5, 8, -2, + -6, 0, 7, -9, -15, -11, -3, 2, 2, -2, 5, 2, -5, -3, -8, -7, -19, -17, -21, -15, -1, -4, -1, 3, 9, 7, 6, -2, 5, 8, + 7, 9, 8, -1, -5, -12, -4, -3, -4, 0, -5, 4, 0, -3, -7, -3, 2, -5, 0, -1, 1, 1, -7, -3, 7, 7, 8, 2, 8, 6, + 6, 6, 4, 1, 1, 5, 7, 1, 2, -1, -4, 3, 7, 5, 4, 5, 6, 6, 1, 2, 1, 2, -5, -10, 6, 2, 10, 7, -5, 0, + -4, -8, 7, -9, -10, -16, -12, -8, -5, 1, -4, 7, 5, 16, 0, 7, 4, 1, -3, 4, 6, -1, -1, -12, -16, -4, -3, -5, 4, 0, + 8, 6, -4, -1, -7, -3, -3, 4, 1, 6, 3, 0, 14, 7, 2, 13, 2, 10, 3, 1, 99, -73, 24, 31, -24, 20, 42, -5, 13, 14, + -9, -22, -4, -11, -1, -3, 6, -17, -12, 5, -4, -19, 7, -15, -16, -6, -5, 13, 6, 0, 7, -6, 6, 7, -12, -2, -9, 1, 8, -1, + -6, 0, -5, -6, -1, 2, 5, -4, 5, 8, 4, 14, 4, 7, 2, -1, 6, 5, 11, 9, 0, 11, 9, 15, -40, -16, -11, -6, 1, -5, + -8, -25, -26, -24, -20, -4, 4, 1, 4, 10, 2, 4, -7, -15, -18, -26, -20, -14, -28, -39, -45, -18, -6, -8, 8, -1, -2, -12, -30, -31, + -30, -30, -20, -14, -19, -2, -1, 2, 5, 0, 3, 1, 1, 1, -11, -31, -35, -31, -26, -23, -24, -12, -8, -1, -9, -6, -3, -16, -24, -30, + -25, -17, -6, -7, -19, -20, -13, 9, -1, 13, 17, 15, 18, 9, -3, -7, 7, 3, 10, -10, 17, 31, 29, 21, 16, 26, 9, 9, 11, 21, + -6, 10, 15, 23, 19, 23, 21, -4, 1, 5, 0, 8, 9, 4, -8, 9, 15, 11, -5, 10, -2, -27, -26, -32, -5, -19, -11, -8, -6, 1, + 1, 4, 1, 5, 5, 12, 9, 18, 12, 10, 1, -4, -14, -11, -8, -3, 0, 0, 2, -5, 3, 1, 7, 7, 5, 3, 1, 7, 5, 6, + 3, -4, -6, -3, 0, -4, -5, -10, -11, -4, -5, -5, 1, -7, -15, -19, -26, -23, -17, -12, -1, 12, 15, 16, 20, 16, 22, 10, 4, 10, + 2, 9, -5, -13, -15, -10, -12, 4, -8, 0, -2, 1, 12, 10, 7, 14, 5, 13, 8, 2, -3, 6, 0, -2, 1, 8, 3, 5, 11, 16, + 11, 7, 7, -3, -15, -22, -25, -42, -34, -11, -19, -12, -19, -19, -19, -17, -8, -4, -1, -6, -7, -21, -23, -21, -17, 87, -127, 9, 35, -39, + -3, 29, 14, 51, -4, 9, 23, -6, 12, 39, 7, 24, 13, 0, 25, 5, 14, 30, 6, -6, 12, 18, 8, 14, 11, 9, 7, 21, 12, 15, + 23, -6, 3, 4, -7, -3, -2, -2, -3, 4, 9, 3, 4, 7, 16, 17, 23, 19, 18, 14, 14, 19, 20, 16, 6, 6, 15, 4, 22, -26, + 4, 6, 7, 0, -3, -1, -7, -5, 3, 0, 5, 2, -7, 0, -1, -1, -5, -6, -11, -8, -14, -9, -12, -6, -5, 2, 2, 0, -5, 6, + 2, 3, -4, -7, 5, 0, -3, 0, 2, 2, -1, 1, 8, 5, -5, -1, -3, 2, 1, 1, -5, 0, -5, -4, 7, 8, 10, 0, 6, 11, + 1, -2, 5, -2, 2, -2, 1, -1, -1, -1, -1, -3, -3, -10, -3, -8, -8, -1, -12, 7, 2, -5, 5, 11, 6, 8, 5, -2, -1, -3, + 3, 0, -3, 0, 9, 11, 11, 4, 2, -1, -5, 3, -1, -5, -2, -2, 0, 6, 4, -4, -2, 5, 2, 8, 9, -4, -4, -10, -5, 0, + 12, 8, 6, 2, 5, -3, -4, 0, 1, -2, -3, -8, -6, -3, -1, -3, 0, 3, -2, -1, -6, 0, 4, 2, 6, 3, 9, 11, 0, -5, + -3, -1, -2, -7, -5, -5, -5, -6, -6, -7, -5, -2, 2, 2, 8, 2, 8, 8, 7, 4, -2, 2, -2, -6, 5, 3, 1, -3, 1, -3, + 1, 0, 3, -1, 0, 0, 2, -4, -5, -3, 0, 4, 2, -2, 0, 1, -1, 7, 4, 5, 6, 5, 1, -2, 7, 4, -3, 4, 11, 4, + -1, 0, -6, -7, 1, 3, 8, 6, 5, -1, -3, -1, -1, 1, 1, -2, -11, -9, -5, -5, -2, 2, 3, -2, 1, -5, -10, -4, -4, 16, + -18, -14, 32, -10, 2, 9, 12, 20, 11, 5, 10, 6, -2, -11, -10, -12, -6, -10, -12, -9, -8, -9, 8, 4, -5, -1, 16, -2, 6, 1, + -1, 12, -1, -2, 8, -10, -5, -7, -7, -10, -5, -4, 12, 11, 11, 12, 16, -1, 2, -3, -9, -4, -4, 1, -4, -3, -1, 8, 9, 2, + -1, -1, 5, -1, 6, 12, 7, 5, 0, 4, 6, 3, 3, -2, 4, 3, 2, 0, 0, -5, -5, -2, 2, 1, -1, -8, -7, -9, -2, 11, + 3, 2, -5, 5, 6, 1, -2, -11, -7, -2, 5, 7, -1, 0, -4, 4, 6, -6, -7, -4, 8, 7, 0, -1, -2, 1, -4, -3, -3, -3, + -3, -2, 2, -9, 3, 2, 4, 0, -5, -8, -6, -6, -10, -6, -1, -6, -10, -8, -4, -2, -7, -1, 0, 0, -3, 3, 5, 0, 2, -8, + 0, -1, -6, 0, -1, -6, 1, -3, 5, 1, 11, 18, 6, 9, -4, -7, 14, 1, 6, 3, 4, -4, 5, 4, -1, 6, 5, 1, 14, 4, + 1, -1, -4, -5, -2, -4, -3, 2, 4, 4, 3, 3, -2, -1, 1, 1, 1, 2, -1, -3, -5, 3, 1, 2, 5, 1, -2, -3, 0, 1, + -2, 5, 8, 2, 8, 3, 0, -1, -10, -11, -5, -5, -7, 2, -1, 5, 2, -1, 2, 2, 7, 9, 1, 3, -2, -2, -6, -1, 0, 5, + 3, -2, 2, 2, -1, 0, -2, 3, 1, -4, -5, 1, -4, -6, 2, -1, 9, -3, 9, 2, 2, -2, 0, 2, -1, -13, -5, -1, -4, -2, + -5, 3, -5, 1, -4, 1, 2, -1, -8, 3, 6, 4, 1, -2, 1, -2, 3, -7, -3, 2, 7, 0, -2, 0, 3, 6, 5, 3, 6, 3, + -6, 0, -3, 1, 1, -15, -10, 24, -10, 7, 15, 6, 5, -1, 6, 9, -8, -11, -10, -5, 0, -4, -9, -9, 0, -5, 2, 6, 11, 8, + -2, 3, 5, 3, -2, -3, 4, -5, -6, 2, 1, 2, -3, -6, -1, -3, 5, 2, -1, 4, -1, 9, 1, -4, -4, 3, -4, 8, 1, -7, + 7, 11, 6, 8, 4, -4, -5, -2, 2, 3, -1, 4, -2, 2, -2, -1, -5, -8, -12, -14, -8, -1, 5, 3, 2, 0, 3, -1, -5, 1, + 1, -2, 0, 1, -2, 6, 10, 5, -3, -8, 3, 7, 6, -2, 2, 0, 0, -4, -9, -3, 3, 4, 10, 13, 11, 4, -4, -5, -4, -7, + -6, -6, -12, -11, -12, -16, -10, 4, -7, -6, 0, -1, -4, -6, -10, -5, -8, -1, 12, -5, -9, -8, -10, -1, -6, 2, 0, -5, -3, 0, + 9, -9, 9, -5, -2, -2, 1, 1, 17, 13, 13, 10, 2, 3, 4, 6, 5, 7, 7, 5, -4, 6, 9, 7, -3, 3, 3, 1, -6, -13, + -3, 5, -4, 0, 4, -1, 2, -2, 6, 3, 4, 2, 4, 6, 4, 4, -2, -8, -3, -5, -2, -3, 1, -1, -1, -5, 0, 0, -1, -6, + -7, -8, -11, -6, -1, 5, 3, 7, 9, 8, 2, -2, -1, 1, -1, -3, -6, -6, -17, -10, 5, 4, 7, 6, 5, 6, 5, 3, -2, 0, + 2, -5, -8, 2, 3, 0, 9, 1, 2, 6, 2, 3, 3, 1, -2, 4, 6, 0, -5, -1, 0, 7, 0, 13, 3, 1, -4, 7, 3, -3, + -4, -1, 5, -2, -4, -4, -2, -2, 2, 0, 4, 6, -2, 6, 3, 9, 6, 6, 1, -6, -1, 0, -3, 2, -5, -9, -7, -6, -10, -3, + -5, -2, -2, -1, -7, -5, 3, 3, 6, 10, -29, -19, 12, -7, -19, 17, 22, 10, 5, 13, -5, 0, -8, -18, -6, 7, -2, -9, -20, -6, + 6, 8, 4, 6, -12, -9, 0, -1, -5, 5, -2, 2, -2, -11, -3, 5, -6, 0, -8, -9, -5, 12, -2, 6, 6, 4, 2, -5, -8, -5, + 1, -1, -1, -9, -1, 2, 0, 5, 4, 3, -2, -6, -3, 6, -6, 3, 8, 4, 5, -2, -6, 3, -2, -8, -6, -3, 7, 5, 9, 8, + -1, -5, -13, -6, 0, -11, -9, -8, -7, 8, 9, 1, 3, 4, 5, 0, -24, -17, -5, -1, -9, -19, -13, -15, -16, -19, -19, -16, -15, -9, + -5, -9, -5, -2, 0, 3, -5, -12, -12, -8, -6, 2, 1, 0, 1, 2, 2, -11, -21, -5, -9, -12, -12, -5, -4, 2, -16, -8, 6, -1, + 4, -9, -15, 0, 4, 4, -2, 3, 6, 2, 1, 2, 5, -5, 8, 10, 6, -5, 2, 1, -1, 8, 5, 10, 6, -5, -1, -3, -6, 9, + 5, 8, 12, -3, -3, 2, -2, -6, -3, -1, 3, 7, 4, 12, 10, 3, 8, 5, 5, 7, 5, -1, -4, -1, 0, 3, 0, 0, 0, -1, + -2, -3, -4, 0, 4, 5, 0, 1, -2, -1, 5, 7, 4, 4, 9, 4, 1, -2, -6, -5, -2, -4, -4, -4, -5, 4, 1, 3, -5, -6, + 0, 5, 0, 0, 0, 2, -2, -7, -8, 0, 1, 0, -4, 3, 9, 6, 3, -5, -2, -4, 4, 8, 5, -1, -2, 3, 4, 7, 0, -2, + 1, 1, -1, -3, -1, -3, 0, -4, 2, 0, 0, -2, -4, -1, -4, -6, 3, -5, -1, -2, 0, 11, 8, 0, -2, 0, 5, -2, 1, 7, + 6, -8, -5, -6, -8, -5, -4, 1, 0, 0, 5, 8, 5, 8, 1, -30, -30, 21, -6, -16, 18, 21, -8, 9, 31, -6, -3, -4, -6, -6, + 8, 5, 14, -13, -6, -1, 5, 7, 4, -6, -4, 5, 1, 0, 7, 2, 2, 0, -6, 3, 2, -1, -2, -1, -3, -6, -12, -7, 3, 9, + 6, -4, -7, -8, -1, -6, 0, 3, -7, 2, 5, -1, 7, 14, 1, 3, 1, -8, 0, -5, 7, -5, -1, -2, -6, -10, -11, -8, -18, -24, + -25, -15, -3, -5, 0, 2, -2, -10, -6, 9, -2, 1, 2, 10, 8, 4, 8, 9, 3, 0, -5, -1, -4, 2, -1, 5, 4, 13, 11, 9, + 16, 16, 13, 10, 2, 3, -4, -3, -4, -12, -21, -27, -29, -30, -25, -39, -27, -25, -26, -21, -15, -16, -19, -21, -9, -9, -12, -4, -11, 1, + -7, -2, -6, -6, 0, 5, -1, 0, 3, 3, 15, 2, 4, 6, -3, 2, 1, 2, -5, -4, -2, 11, -3, 0, 6, 11, 11, 8, 11, 10, + -1, -1, 9, 19, 6, 2, -3, 3, -4, -2, -4, -3, 12, 17, 9, 0, 4, -4, -3, -8, 2, 5, 4, -1, -4, -3, 2, -1, -3, -3, + -1, -3, 6, 0, 4, 2, 5, 3, 0, 3, -2, -5, -7, 2, -1, 9, 9, 18, 9, 6, 3, -6, 4, 3, 5, 7, -2, -1, -8, 0, + 2, 2, 1, 2, -2, -3, -3, -11, -10, -11, -21, -19, -12, -9, -19, -15, -12, 0, -2, -6, -6, 3, -1, -2, 13, 6, 3, 4, 5, 3, + 5, -3, 2, -1, 13, 4, 6, 0, -2, 4, 12, 1, 3, 4, -2, -12, -10, -14, -11, -19, -11, -8, -2, 4, -2, 5, 10, 12, 11, 3, + -6, -12, -14, -15, -5, -9, -8, 2, 2, 2, 2, 5, 6, 1, 1, -2, -3, -3, 3, 1, -24, -39, 22, -10, -42, 36, 25, -19, 19, 30, + -19, 16, 4, -14, 2, 9, 18, -3, -6, 5, 13, 2, 6, 0, -4, -3, -4, 0, 6, 10, 6, 12, 8, 4, 1, 11, 9, 10, -3, -13, + -4, -2, -7, 2, -1, 2, 0, 5, -1, -8, 4, 7, -1, 2, -3, 4, 5, 5, 1, 5, -9, 1, -3, -3, -23, -4, 2, -1, -5, -4, + -12, 1, -2, -17, -7, 2, 24, 40, 40, 41, 19, 21, 2, -2, -3, -10, -6, -4, -2, -1, 4, 0, 1, 0, 1, 2, -12, -21, -20, -26, + -21, -17, -13, -10, -16, -15, -17, -26, -25, -28, -16, -11, -12, -24, -23, -23, -17, -15, -23, -27, -9, 17, 32, 38, 39, 19, 8, -5, -10, -8, + -13, -6, -4, -4, -9, -3, -4, 3, 13, 6, 10, 9, 6, 19, 11, -4, 0, -5, 3, 0, -5, 4, -6, 3, 6, 0, 9, 11, 8, 7, + 7, 5, 13, 8, -2, -11, -8, -5, -7, 5, -7, -5, 0, 2, 5, 13, 7, 14, 4, 0, -2, 8, 24, -3, 3, -6, -4, -4, -2, 0, + 6, 1, -1, 4, -1, 4, 2, 0, 1, 1, 0, -5, 1, -2, -4, -4, 3, 7, 5, 5, 7, 3, 5, 6, 9, 9, 12, 10, 9, 6, + 8, 12, 16, 9, 11, 10, 3, 0, 1, 0, 4, 2, 2, -7, -7, -11, -11, -11, -13, -5, 5, 9, 23, 27, 24, 18, 9, 5, 5, 7, + -4, -8, -6, -4, -8, 1, -6, 2, 1, -7, -5, -4, -12, -3, -1, 0, 3, 0, 1, 7, 3, 12, 4, 8, 6, 10, 18, 16, 8, 4, + 3, 1, -5, -6, -5, 5, 11, 12, 12, 16, 11, 17, 14, 7, 9, 11, 7, 5, 0, -5, -4, -10, 1, 7, 9, 23, -119, 127, 50, -108, + -11, 52, -67, 13, 34, -47, 39, 9, -20, 21, -8, 0, 10, -25, 8, -6, -18, 14, -1, -8, -4, 2, 1, 4, 14, 9, 11, 19, 9, -2, + 6, -2, 0, -5, -8, -6, -3, 4, 0, -4, -5, -3, 3, -9, -7, 1, 10, -2, -1, -3, 4, 7, 14, 10, -1, 1, 0, 5, 5, -51, + -1, 6, 11, 4, 0, 1, -7, -4, -5, 1, 8, -2, -4, 2, 3, 8, -3, 9, 6, 2, -6, -3, 3, 0, 8, 6, 9, 9, 7, -3, + -5, 3, -5, 12, 15, 2, -2, -6, 2, 10, -3, -2, -3, 1, -6, -6, -7, -10, -7, 4, 6, 3, -1, 6, 10, 2, -6, -15, -1, 3, + 2, -4, -4, 5, 5, 3, 3, 4, -6, 2, 17, -6, -8, 2, 15, -2, 1, 0, 5, 6, -3, -11, -3, -9, 4, 2, 9, 27, 13, 17, + 15, 6, -5, -10, 5, -5, 6, 5, 5, 2, -4, 6, 8, -2, -11, 6, 10, 4, -8, 0, 0, 6, -4, -8, -2, -12, -1, -5, -9, -12, + 4, 4, 5, -2, -5, -3, -4, -2, -2, 2, -2, -6, 2, -3, -8, -12, -7, -7, -6, -5, -6, -10, -5, -8, 1, 5, 8, 11, 0, -8, + -3, 2, 2, 7, 10, 15, 5, 1, 5, 10, -1, 3, -1, 2, -2, 1, -1, -2, 0, 7, 0, 2, 1, 11, 6, -2, -2, 4, -2, 0, + 5, -13, -9, -1, 7, 1, 0, 3, -2, -3, -5, -13, -12, -7, 7, 5, 4, -2, 1, -3, -5, -8, -2, -4, 2, -4, -3, -5, -6, 8, + 4, -2, -8, -7, -5, -6, 0, -6, 0, 8, 7, 11, -5, -1, -1, 3, 4, 0, 4, 3, -5, 10, 9, 4, 7, 11, 10, 5, -8, -8, + -16, 3, -5, -4, 1, 0, -1, 14, -2, 3, 7, -3, 3, -8, -3, -7, 9, -23, -17, -12, -17, -6, -5, 8, 6, -5, 13, 2, -4, -1, + -3, -7, -1, -3, 2, 12, 12, 4, -3, -2, 3, 4, 12, 0, -2, 3, 1, 2, 6, -7, 3, 3, -8, 0, 5, -6, 1, 5, 4, 1, + -6, 3, 5, 0, -12, 9, 8, 10, 3, 7, 0, -4, -3, -2, -1, -1, 1, 3, -1, 7, -5, -9, -2, 0, -5, -5, 1, 11, 0, 1, + -5, -14, -7, -8, 2, -8, -9, -10, 12, 9, 1, -16, -2, 1, 3, 3, 11, -5, 10, 2, 7, 0, 9, -3, 8, 4, 6, -1, -4, -6, + 3, 3, -2, -9, 3, 2, -1, -5, -7, 5, -1, 7, 18, 3, -11, -6, -6, -11, -3, 10, -4, 11, -8, 1, 3, 0, -4, -7, 11, 23, + 9, 26, -5, -8, 0, 0, 0, 5, -5, 3, 1, -2, 0, -4, -6, -6, -14, 3, -6, 0, -2, -1, 2, -25, -14, -9, -3, 0, 3, -3, + -7, -10, -7, -9, 6, -1, 5, -4, 1, -7, -11, -8, -15, -3, -5, -6, 3, -1, 2, 2, 2, 10, 7, 8, 6, 0, 3, 1, -1, 2, + 1, -9, -10, -9, 1, 2, -2, 1, 6, 9, 8, 7, 1, 8, 6, 4, 7, 2, -2, -2, -8, -13, -12, -5, 3, 7, -1, -7, 3, 2, + 4, 1, 8, 1, 5, 0, 2, -6, -3, 8, 9, 0, 10, 7, -6, -2, 10, -3, -1, 7, 2, -1, -7, -2, -1, -3, -14, 0, -3, 6, + 4, 3, 13, 12, 12, 2, 9, 4, 2, 12, 1, 6, -4, 1, 1, 3, 5, 0, -2, -4, 2, 2, 5, -5, 4, 2, 1, -3, 4, 3, + 8, -4, -7, 3, 2, -16, -8, 3, 11, -8, -15, 1, 17, 5, 9, 15, 11, 11, 6, 5, 6, 17, 9, 3, -5, 4, 1, -5, -12, 16, + 0, 16, 13, 20, 1, -6, 5, -9, -6, 3, -7, 2, -6, 4, -5, 1, -5, 1, -5, -12, 3, 21, 1, 5, -5, -14, -6, 13, -5, 8, + -9, -11, -9, -6, -3, -8, -2, 3, -7, -14, 6, 8, 0, 7, -3, -6, -2, -9, -1, -7, 6, 4, -5, -12, -2, 4, -1, 1, 8, 9, + 2, -9, -4, 7, -3, -4, -13, 2, 7, 18, 12, -8, -6, 0, 2, -2, -7, -4, -9, -8, -4, 7, -7, -15, -19, -1, 9, -4, -2, 5, + -6, 7, 10, 3, 12, 6, 2, 2, -9, 4, 0, 4, 1, -8, 6, 8, 12, 16, 1, -6, -9, -8, -7, -2, -5, 5, -3, 0, 3, 4, + 5, 2, -5, -3, -11, -6, -1, -4, -2, -9, 6, 15, 14, -13, -5, -10, -4, -7, -21, -1, -2, 15, 8, 8, -1, 0, -13, -6, -10, 5, + 13, 2, 4, 3, -1, -14, -13, -8, 2, -2, -1, 0, -3, 2, 2, -1, -2, -2, 0, -4, 4, 1, 4, 0, 1, 0, 0, 3, 2, -2, + 0, -7, -6, 8, 8, 1, 1, -4, 9, 15, 4, -7, -6, -5, -4, 0, -11, -3, -5, 5, 4, -3, 4, -5, -11, 7, -1, -10, 0, 8, + -4, -2, -6, 0, 2, -4, -1, 4, 5, -2, -3, -2, 3, 8, 5, -1, -3, -1, 1, -9, 3, -1, -2, -5, -2, 7, 0, -3, -6, 7, + 2, 4, 11, 11, 2, 3, 8, 1, -2, -1, 0, -9, -4, 1, 9, 3, 4, -2, -13, -1, -2, 5, 1, -8, -1, 7, 14, -3, -7, -2, + 6, 5, 2, 7, -4, 3, 2, 3, -5, 5, -32, -5, 0, 11, 7, -4, 8, 8, 2, -10, -9, -9, 2, 3, 2, 2, 6, -7, 18, -5, + -6, 1, -4, -8, 4, -13, 12, 7, -4, -2, -20, 13, -16, -7, -3, -8, -3, 1, -9, -1, 18, 7, 3, 6, 7, 0, 12, -9, -1, -3, + 2, 8, 11, 0, -9, -3, 8, 7, 5, 5, -4, 6, 5, 0, -9, -5, 6, 14, 11, -2, -7, -20, -13, -11, -19, -14, -7, -17, -11, 2, + -12, 0, -4, 6, 9, 11, -3, 5, 4, 6, 3, 4, -7, -11, 5, 3, 14, 13, -7, -3, -4, -3, -5, 10, -6, -2, 0, 6, 5, -7, + -10, -6, 2, 3, -6, -4, 5, 5, 1, -6, -15, -4, -10, -1, 2, -10, -9, -3, -1, -13, 0, -3, 0, -13, -11, -12, 4, 5, 3, 18, + 14, 4, 15, -1, 14, 11, 3, -1, 15, -2, 6, 9, 5, -5, -1, 11, 11, 3, -4, 2, -1, -1, 11, 11, 24, 2, 10, -11, -9, 5, + 1, 4, 0, -5, 2, 4, -11, 6, 1, -4, -8, -1, 0, 0, 12, 10, 9, 6, 7, -1, 9, 6, 5, 5, 5, 6, 5, 6, 7, -2, + 0, 2, 4, 2, 1, -2, -1, -5, -3, -8, -9, -6, -4, 1, -2, 3, 7, 5, 0, -4, -5, -1, 1, -8, 3, 4, 2, -6, 4, -7, + -5, -11, -1, 8, 5, -3, 3, -1, 3, 4, 0, -3, 10, 3, 9, -6, -9, -3, 3, 3, 2, -4, -3, -9, -8, -3, -3, 2, -7, 6, + 0, 1, -3, -2, 6, 8, -3, 8, 14, -2, -7, -2, 1, 2, -2, 4, 1, -7, -5, 3, -2, 5, -2, 2, 5, -5, -2, 4, -5, -5, + 6, 3, 0, -9, -7, -7, 0, -5, 1, 0, -1, 6, 3, 4, 7, -38, 6, 8, 17, -26, -9, -13, -5, -20, -9, -3, -2, 5, 8, -1, + -6, -1, -2, -4, 7, 4, 2, -8, -9, -3, -13, 10, 7, -6, 0, -2, -6, -1, -5, -13, -7, 1, -3, 5, -4, 11, 12, 9, 8, -2, + 4, -6, -22, -8, 2, 9, 7, -4, 7, 13, 3, -2, -12, 0, 3, 12, 20, 11, 2, 6, -4, 6, -6, -8, -10, -8, -7, -11, -1, 0, + 13, -1, 1, -11, -6, 8, 13, 17, 17, 17, 13, 7, 9, 12, -1, 2, 8, 6, 12, 8, -5, 9, 8, 1, 2, -5, -5, 1, -1, -4, + 10, 3, 3, 6, 8, 12, 15, 2, -5, 9, 9, 12, -4, 1, -11, -7, -9, -8, -2, -10, 1, 5, 2, 13, 4, 0, -10, -12, -2, -13, + -8, -5, -5, 17, 13, -1, -5, 14, 9, 2, -10, -13, -3, -11, -4, -8, -1, -13, -9, 6, 2, 12, 2, -13, -16, -12, -11, 0, 17, 25, + 26, 19, 5, 18, -3, -4, 0, -1, -4, 0, -15, -23, -12, -5, -19, -9, -3, -1, 11, 23, -7, -1, -2, -4, -5, -2, -5, -2, 0, 7, + 2, 5, -5, 1, -1, -4, -4, -2, -6, -1, -5, 6, 9, 1, -2, -5, -1, 4, -3, 0, -6, -5, 8, 8, 5, 7, 9, 16, 10, 11, + 11, 8, 8, -3, -5, -9, -16, -8, 2, 4, 1, 2, -1, -8, -8, 1, 0, -13, -1, 6, 5, 6, 12, 8, 6, 11, 5, 11, 6, 8, + -2, 2, 2, 6, 1, 2, 6, 9, -1, 1, -1, 12, 11, 7, 1, -1, 1, 1, 6, 17, 6, 5, 10, 2, 9, 6, 3, 9, 8, 15, + 11, 13, 11, 6, 4, 6, 4, 14, 3, 8, 9, 8, 3, -2, -13, -8, -8, -11, -10, -1, -67, 59, 24, 15, 13, 10, 7, 58, 0, 14, + 3, 6, 13, 29, -2, 3, 4, 0, -3, -1, 3, -14, -1, 1, -7, -2, 9, -2, 3, 3, 0, -11, -7, 2, -2, -3, -6, 10, 6, 8, + 7, 13, -13, 5, -2, -10, -17, -18, 1, 9, 2, 14, -12, 11, -4, -7, -12, 2, 3, -8, -5, 6, -11, -12, 28, -11, -3, -1, -16, -21, + -22, -15, -11, -13, 8, -1, -6, -9, -13, -14, -4, -12, -5, -6, -6, -6, -8, -10, -12, -7, 2, 7, 5, 18, 13, -2, 3, 0, 2, 13, + 28, 24, 4, -4, -9, -10, -4, -11, -2, 2, 5, 11, 14, 5, -9, -10, -4, 10, 8, 10, 8, 0, -1, 1, 0, 13, 22, 14, 11, 15, + 32, 15, 25, 26, 35, 34, 35, 32, 32, 39, 26, 23, 12, 11, 10, 18, 22, 7, -9, -35, -51, -57, -63, -49, -34, -43, -53, -61, -75, -83, + -86, -75, -47, -15, 13, 30, 21, 7, 16, 9, -14, 6, -1, 0, -14, -32, -33, -31, -26, -18, -18, 14, -9, 3, 27, -23, -27, -15, -15, -17, + -9, -9, -11, -6, -8, -1, 1, 2, 4, 2, -1, -1, -1, -6, 1, 0, -4, 1, 5, 4, -1, -1, 3, 2, -5, -5, -7, -7, -6, -8, + -11, -11, -12, -3, -5, 2, 0, 5, 3, 0, 3, 3, 4, 5, -5, -9, -4, -14, -23, -19, -23, -24, -27, -24, -21, -15, -18, -27, -22, -19, + -5, -1, 21, 32, 31, 38, 42, 53, 58, 53, 51, 60, 59, 53, 57, 32, 32, 11, -2, -36, -54, -72, -91, -96, -80, -63, -74, -60, -86, -88, + -72, -51, -12, 24, 63, 106, 99, 82, 73, 48, 42, 35, 16, -1, -31, -48, -61, -63, -60, -41, -11, -16, -36, -62, -73, -112, 96, -52, -4, 78, + 7, -1, 127, 15, 53, 8, -12, 40, 17, 16, -6, 0, 18, 4, -22, 8, 23, -7, 17, 15, 1, 5, 31, -5, 9, -12, 1, -7, 14, 6, + 20, -9, -1, 16, 9, -1, 8, -2, -4, -9, -16, -38, -16, -1, 4, 1, 3, -2, 5, -7, 5, -3, -5, 0, -6, -11, -11, -10, -15, 78, + 8, 0, -1, -3, -3, -4, -7, 4, 7, 2, 4, -2, -1, -6, -4, 1, 1, 5, -4, 1, 8, 5, -1, -5, -2, -3, 1, 3, 1, 7, + -1, 2, -5, -4, 0, 4, 5, 1, 1, -5, -1, -3, -2, 3, 7, 10, 6, 1, -7, 0, 2, -4, 2, 7, 1, -1, 2, 5, -3, -5, + 2, 0, 5, 1, -5, 0, 4, 4, -5, 0, 5, -4, 1, -1, 0, -2, -4, -1, -9, 0, -3, 3, 3, 3, -3, 1, 0, 0, -4, 3, + -4, -4, 2, -4, -7, -1, 0, 1, -3, 0, -3, 0, -5, -2, 2, 4, -3, 6, 2, -5, -2, -7, -3, 0, -2, -2, 0, 1, 4, 4, + 0, -1, -2, -1, 0, 1, 0, 0, 1, 1, 4, 1, -1, -1, -2, 2, -2, 1, 2, 4, 3, 0, -2, -2, -1, 4, 2, 3, 2, -1, + 1, 4, -2, -3, 3, 1, 4, 2, -2, 1, -3, 0, 7, 6, 0, 5, 3, 2, 0, -1, 1, 2, 2, 7, -1, -1, -3, 2, 0, 3, + 3, 5, 0, -2, -5, -3, -2, -6, 1, 1, 5, 9, 8, 5, -3, -5, -5, 0, 2, 1, 0, 1, -5, -4, -1, -3, -2, -3, -2, 3, + 2, 2, 0, -2, -2, 0, -2, 0, 0, 4, 6, 2, 4, -3, -1, 3, -1, -2, 4, 3, -3, 0, 0, 0, 0, -1, -2, -4, 3, -1, + -6, -10, -15, -1, 3, -3, 8, 0, -5, 15, 5, -7, 9, 4, -5, -2, 4, 0, -6, -2, -4, 4, 6, 2, 5, 1, 2, -1, 3, 0, + 1, 3, -5, -3, -7, -7, 0, -12, -2, -2, -2, 5, 3, 4, 4, 4, -4, 1, 12, 5, 3, -2, -3, 1, -3, 0, 3, 2, -9, 2, + 4, 4, -5, 6, -35, -2, 1, 4, 2, 2, 6, 7, 3, 1, 4, 6, 0, 1, 0, 1, -1, 5, 5, 4, -1, 0, 2, 0, -1, -3, + -3, 2, 5, 2, -1, 0, 1, 0, 0, -2, -2, 2, 6, 0, -4, -2, 2, 4, 2, 6, 1, 0, -2, -3, -1, 1, 8, 7, 3, 3, + 2, 0, 0, 1, -3, -4, 2, 0, 0, 0, -1, 0, -3, -2, 3, 0, 1, 4, -2, 1, 2, -3, -6, -8, -3, -5, -2, -4, -1, -4, + -1, -1, -3, -1, 6, 1, -7, -7, 2, -1, 1, 3, 3, 1, -4, -7, -4, -2, 1, 6, 1, -1, -1, 0, -6, 2, -2, -6, 1, -1, + 6, -1, 2, -2, 2, 1, 1, 2, -2, -1, 1, 2, -2, 2, -1, -1, -2, 1, 0, -3, -3, 1, -1, 0, 1, 0, -1, 3, -4, -7, + -1, 2, 4, 0, -1, 1, 0, -2, -3, -2, 3, 1, 3, 0, -3, 1, 1, -5, 1, 2, -1, 2, 2, -2, -3, 2, -2, 1, -2, 1, + -4, -5, -3, 3, 3, 1, -5, 0, 4, 2, 4, 3, -1, -4, -3, -2, -2, -1, 0, 1, 2, 5, -3, -1, 5, 0, 5, 3, 5, 3, + 1, 2, 2, -1, 4, 4, -1, -9, -5, 1, 4, 4, 4, -3, -5, -6, -4, 1, 1, -1, -4, -8, -3, 0, 3, -2, 3, 2, 1, -2, + -4, 1, 4, -4, -9, 5, 5, -4, 0, 1, -6, 8, -3, -3, 15, 4, 3, 7, -2, -9, -6, -2, -4, -1, -1, -2, -5, -1, 1, -10, + 0, -4, 0, 1, -2, -1, -5, -1, -4, -6, -6, -4, 0, 3, -4, 0, 2, -4, 0, 2, 1, 6, 1, -2, -2, -7, -5, -2, 2, 8, + 1, 3, 1, -5, -3, 3, 5, -1, -3, -21, -1, -2, 5, 4, 1, 1, 3, -1, 2, -1, 10, 3, 6, 0, -2, 0, 4, 1, 1, -1, + -1, -4, -2, 0, -2, 1, 5, 1, -2, 1, 5, 6, 1, 0, -3, -1, 5, 2, -3, -1, 2, -3, -4, 6, 5, -2, -1, 2, 4, -3, + -4, 1, 1, -1, -1, 0, -2, 6, 4, -2, 0, -3, -4, -3, -2, 3, 5, 4, 10, -3, -10, -2, -3, -4, -1, -4, 0, -6, -1, -5, + -10, -4, 4, -3, -1, -4, 0, 1, 4, 4, -4, -4, -2, -5, 2, 0, -1, -2, -5, -1, -7, 3, 0, -3, 6, 1, -4, 1, 2, 2, + -1, 2, 6, -1, -4, -2, 3, -4, 2, -1, -5, -2, -2, -3, -4, -9, -11, -9, -5, 3, 1, 2, 1, 2, -2, 1, -2, -1, -1, 2, + -1, 4, 0, 1, -1, -2, -2, 2, -3, -2, -1, 1, 2, 1, 1, 0, 5, -2, -7, -4, -4, -3, -3, 2, 0, 2, 2, 4, 1, 3, + 4, 1, 2, -4, 0, -3, 0, 8, 1, -2, -4, -4, -4, -2, -2, -5, 6, 2, 3, 0, -1, -2, 2, -2, 4, -1, -1, 2, -3, 1, + 2, -2, 6, 2, 3, 0, 4, 5, 2, 0, 0, 2, -1, -6, -2, 0, 2, 0, 3, -1, -4, -1, 0, -4, 3, -2, -4, -1, -3, 2, + 3, 6, 4, 3, -1, -1, 1, 1, -4, -8, 13, 4, 1, -6, 2, 12, 3, 2, 1, 2, 2, -4, 2, -3, -5, -5, -13, -1, -2, 2, + -4, -4, -13, -1, 2, 8, -2, -1, 0, -3, -3, 6, -3, 3, 1, -4, 0, -2, 0, 8, -4, 5, 1, 3, 4, -1, -9, 2, 9, -1, + 4, 1, 8, 1, 1, 0, -3, 4, -6, -3, 3, 0, -1, -5, -8, -2, -1, 2, 1, 3, 5, 1, 4, 2, -2, -4, -3, 2, 0, 1, + 1, 4, 9, -1, 2, 9, 10, 2, 0, -8, -4, 3, 0, 0, -1, -1, 5, 1, 0, 2, 0, 2, -4, -1, 7, 4, 3, 2, 7, 0, + -4, -6, -6, -7, 0, 2, 1, 5, 3, -2, -5, -4, 2, 3, -6, -7, -7, 2, 1, -5, -2, 2, -5, -7, -4, -7, -2, -4, -9, -5, + -7, -3, -3, -8, -5, -5, -6, -2, -3, 1, 0, 7, -3, -4, -5, -11, -10, -9, -5, 3, 2, -5, 2, 3, -3, 0, -8, 4, 7, -1, + -3, 7, 1, 5, 1, 1, 2, 8, -3, 0, 7, 2, 4, -3, -3, 8, 5, 3, 2, 1, -1, -4, -2, 1, 2, 0, -2, -3, 0, -3, + -1, 3, 2, 7, 4, 0, 2, 4, -3, -3, -4, -3, -1, 0, -2, 1, 3, 4, 4, 3, 2, 3, 6, 3, 2, 3, 0, -1, 2, 6, + 0, 2, 0, 1, -1, 4, 1, 2, 2, 2, -1, 0, 2, 1, -1, -1, -1, 6, 7, 2, -2, 4, -1, -2, -1, 3, -1, 1, 1, 1, + 2, 8, 4, 4, 4, -4, -5, -3, 0, 3, 4, 2, 0, -1, 5, 0, 0, -2, 2, -3, 2, -1, 2, 2, 4, 4, 0, 8, 1, -5, + -6, 0, 2, 0, 2, 4, -5, -5, -6, -11, 1, -2, -2, -4, -7, 16, 7, 1, -2, -1, 15, 12, 0, 7, 12, -5, 6, 1, -2, -5, + -4, -5, -3, -4, -4, 2, 6, 0, -2, 1, -1, -13, -4, 1, -6, 0, -1, 3, 6, 0, 2, 2, 4, 4, 2, 3, 7, -1, -3, 5, + -2, 2, 5, -1, 1, 7, -3, 5, 2, -1, 3, -2, 6, -9, -8, -2, -2, -9, 0, 29, 14, 6, 2, 2, -3, 0, -2, 4, 7, -1, + -9, -7, -2, 0, 4, 3, -4, 0, -1, 5, 7, 11, 0, -7, 1, -6, -3, 2, 4, 4, 10, 2, -7, 2, 7, 8, 1, 1, 5, 2, + -11, -5, 2, 8, 10, 6, 6, 1, -1, -4, 5, -7, 1, 4, -2, -4, -6, 0, 5, 3, 9, 5, 8, 10, 8, 11, 19, 14, 7, 11, + 6, -4, 5, 4, 10, 11, 7, 3, 11, 14, 10, 16, 3, 6, 2, -10, -8, -4, -11, -6, 0, -8, -10, 0, -6, -8, -9, -7, -8, -12, + -15, -12, -6, -7, -12, -6, -2, -6, -7, -5, -6, 0, 3, -3, -5, -1, -3, -4, 0, 10, 2, 3, 1, 3, 0, 1, 0, 0, 3, 1, + -1, 1, 0, -1, 1, 0, 1, 2, 0, 0, 2, 3, 4, 2, 1, 3, 1, 0, 2, 2, 5, 3, 4, 2, 5, 6, -1, 2, 1, 0, + 2, 2, 6, 4, 5, 1, -1, -3, -1, -7, -8, -7, -5, -1, 0, -4, -7, -4, 3, 5, 3, 1, 3, 5, 3, 2, 9, 3, -1, 2, + -5, -7, -3, -4, 0, -2, 3, 1, 3, 6, 6, 1, -1, 0, -1, -2, -3, 2, 1, -1, 2, -1, 3, -1, -3, -2, 1, 1, 3, 2, + 2, 2, 5, 4, 2, 3, 7, 2, 1, 7, 0, 0, 2, -3, 0, 0, 1, -3, 4, 1, 13, 6, 7, -11, -8, 9, -3, -24, -4, -7, + 5, -11, -7, 1, -9, -9, -9, -6, -11, -7, 3, 13, -9, -1, 0, -2, 3, -4, 1, -1, -2, 3, -2, -2, -4, 2, 2, 0, 3, -1, + -2, 2, -2, 3, 7, 0, -4, 4, -2, -4, 2, -2, -1, 1, 6, 5, -4, -9, -4, -4, -3, -1, -3, -7, 63, 8, 5, -5, -4, -12, + -7, -3, -2, 0, -1, -3, 1, -1, -7, -9, -8, -6, -7, 1, -1, -5, -4, -8, -4, -1, -3, -3, -2, 0, -3, -9, -9, -4, -10, -1, + -7, -8, -5, -12, -18, -12, -18, -12, -9, -2, 4, -1, -8, -15, -11, -8, 0, -4, -7, -4, -8, -5, -2, -5, -11, -1, -8, -11, -8, -7, + -13, -13, -12, -13, -5, -1, 0, 1, -5, -8, -4, -13, -3, -10, 4, 9, -3, -1, -6, -6, -11, -13, -23, -8, -6, 2, 3, 0, 0, 6, + 8, 14, 12, 12, 8, 14, 8, -5, 6, 4, 19, 8, 11, 9, 6, 3, 7, 3, -1, -1, -5, -6, -11, -1, -17, 0, 4, 2, 6, 5, + 2, 2, 2, 4, 1, 6, 10, 10, 4, 1, 0, 0, 1, 0, 3, 2, 2, 2, 1, 5, 1, 0, 3, 5, 11, 8, 8, 11, 13, 12, + 10, 9, 10, 9, 8, 6, 8, 17, 14, 14, 12, 10, 7, 3, 2, 4, 3, 1, -3, -2, 0, -1, 1, 5, 3, 7, 3, 8, 12, 8, + 8, 4, 4, 6, 7, 5, 1, 8, 2, 3, 7, 2, 10, 8, 12, 17, 14, 7, 3, 5, 5, 1, -3, -2, 4, 6, 13, 8, 7, 3, + 2, 7, 11, 15, 11, 6, 7, 8, 9, 7, 9, 13, 10, 13, 13, 7, 8, 5, 11, 8, 15, 20, 17, 14, 16, -37, -41, -32, 89, 127, + -44, -7, 45, 0, 18, 32, -4, 8, 28, 24, 11, -3, -3, 5, -11, 12, 7, -7, -1, 1, -4, 5, -1, -5, -6, -10, -5, -5, -17, -9, + -3, -3, -4, -4, 4, -4, 2, 13, 10, 6, -1, 2, 2, -4, 3, 15, 6, 10, 4, -7, -10, -12, -4, -3, -7, -6, -4, -17, -8, 93, + 4, 6, -1, -5, 3, 2, 3, 1, 0, 1, 1, 8, 3, -7, -8, 5, 0, 6, 0, -4, 5, 1, -5, -8, -8, 1, 11, 11, 6, -7, + 0, 5, 4, -1, -4, 0, 0, -1, 5, 13, 2, -5, -3, 2, 6, 4, 2, 4, -2, -4, 1, 5, 3, -3, 1, -4, 4, 0, -13, -11, + -1, 0, -4, 1, 0, -3, 9, -5, 0, -1, 3, 11, 8, 11, -5, -1, 9, 2, 4, -6, -4, -8, 0, 3, 12, -5, -18, -5, -5, -4, + 1, 0, 5, 2, 12, 4, 15, 9, 16, 2, -1, 1, -7, -6, -5, -8, -4, -18, -5, -7, -6, 9, 10, 12, 3, -4, -4, -2, 1, -7, + -4, -4, 4, 3, 1, -1, -4, -3, -8, 0, -7, -5, 0, 4, 2, 9, -1, -5, 0, 2, 1, -9, -8, -6, 4, 7, 2, 2, 6, 9, + 1, -1, 0, 1, 6, 5, 4, -2, -3, 1, 5, 4, 0, -3, 8, 9, 4, 7, -4, -1, 0, -6, -3, -2, -5, -4, -6, -8, -5, -6, + 7, 0, 5, 1, 2, 1, 9, 4, 3, 1, -2, 8, 1, 2, 5, 4, 4, 11, 11, 5, 2, 9, 3, 0, 0, -1, -11, -6, -3, 3, + 2, 3, 0, -3, -4, -2, 0, -5, 0, -1, 1, 1, -5, -4, -6, 3, -4, -4, -7, 1, 6, 5, 2, 5, -1, 3, -2, -1, 12, 10, + -1, -3, 1, 1, -10, 4, -8, -27, -8, -4, -15, 1, -4, 5, -5, -6, -8, 5, -5, 10, -3, 3, 6, 0, 1, -4, 8, 9, -2, -1, + -7, -9, -5, 0, -13, -6, 6, -9, -12, -7, -2, 0, -10, 0, 0, -5, 1, -4, 3, 2, -4, 1, 4, 7, 11, 11, 9, 0, -1, 3, + -3, 6, -4, 0, -7, -4, -4, -2, 3, 1, 1, 8, 10, 4, 4, 6, -5, 0, -2, 0, 10, 2, -1, -6, 3, 6, 7, 7, -2, -3, + -7, 0, 9, 2, 1, 5, 7, 9, -1, -3, 0, 11, 3, -3, 3, -5, -7, -9, -9, 3, -3, -4, 5, 8, 2, -3, 0, 1, -1, 4, + -4, -9, -7, -3, -11, -8, -5, -9, -12, -7, -10, -10, -8, 1, -10, -24, -18, -3, -5, -13, 3, 5, 17, 12, 9, 3, -1, 5, 0, 3, + -11, -4, 15, -5, 4, 4, 8, 12, 7, 5, 0, 8, 3, 10, 13, 7, 4, 0, -12, -5, 2, -5, -6, -3, -2, -8, 4, 7, 2, -4, + -8, -1, 3, 11, 0, 7, 0, 1, -5, 0, 1, 5, 7, 5, -1, 6, 3, 3, 1, 4, 5, 1, 9, 6, 0, -6, 5, 7, 8, 8, + 3, 4, 3, -1, -8, -6, 0, -10, -10, -2, 4, -2, -6, -1, -2, 0, -2, -8, -2, 5, -7, -2, 4, -2, 0, -2, -4, -1, 0, 1, + -3, 7, 0, 1, 3, 0, 0, -1, 2, 0, -3, -6, 0, 8, -1, 1, 3, 4, -4, 6, 5, 7, 5, 5, 7, 0, 3, 1, 3, 3, + 1, 0, -1, 0, 2, 0, -1, 6, 4, 0, 3, 6, 2, 10, 10, 12, 0, -2, -2, -3, -4, -7, -7, -13, -12, -6, -1, 4, 3, -6, + -10, -11, -3, 6, 6, -13, -10, 10, -7, -8, 4, -9, 4, 8, 6, 4, 2, 7, -6, 6, 2, -8, -3, 5, 12, 14, -10, 2, 2, -5, + -6, 2, 10, 6, 5, 0, 5, 8, 4, 0, -2, -4, 2, -7, -4, -3, 1, 3, 8, 11, 6, 5, 1, 13, 3, -1, 2, 3, 4, 10, + 6, 2, -5, -1, -3, 1, 3, 7, 5, -9, -1, -5, -6, -7, 4, 6, 1, -12, -7, -6, -4, -3, -9, -4, -7, -3, -6, -8, -3, -7, + -10, -10, -9, -1, -10, -13, -8, -14, -8, -14, -16, -3, -4, -2, -7, 4, 2, -1, -1, -12, -3, -7, 1, 4, 5, 1, -1, 1, -3, 5, + 5, 10, 2, -10, -9, -2, -10, 3, -11, -5, 11, -2, -5, -4, 0, -3, -2, 2, 9, 0, -4, 5, -1, 2, -13, -13, -3, 1, 0, -9, + 3, -3, -16, 0, -8, -3, 3, 9, -10, 4, 0, 8, 8, -2, -1, 2, 7, 10, 1, -1, -6, 6, 11, 7, 10, 13, 6, 8, 9, 8, + -7, 4, 3, 0, 2, 1, 3, -5, -7, -9, -8, -6, -4, -8, -4, 0, -4, 1, -4, -2, -5, -3, 1, 1, 3, 7, 2, 1, 2, 0, + -3, -3, -2, -1, 3, -1, 1, -4, 2, 0, 0, -1, -1, 3, 5, 7, 8, 5, 6, 11, 3, 2, 5, 6, 2, 0, 1, 6, -1, -3, + 5, 1, 2, 2, -6, -1, -7, -4, -5, -1, 5, -1, 3, 2, -4, -7, -9, -5, -5, 0, -9, 1, 0, -1, 8, 2, 0, -2, -1, 0, + -5, 7, -6, -1, 2, 4, 2, -2, -5, 7, -5, 0, -6, -3, 0, 0, 7, 7, 10, 3, 2, -2, 1, -2, 1, 1, 6, 2, 9, 8, + 14, 5, 7, 4, -6, -4, 1, 1, 6, -5, -5, -9, -1, -9, -23, -5, -3, -11, 0, 3, -2, -5, -10, -2, -2, 1, 5, -4, 7, 0, + 14, -1, 13, -1, 10, 4, 2, 2, -1, 4, -5, -12, 4, -1, 2, 2, -2, -8, 2, -6, -2, -3, 4, 0, 7, 10, -3, 0, 3, 4, + 11, 7, 4, 7, 4, 3, 0, -2, 1, -5, 1, 0, 6, 4, -8, -16, -9, -13, -7, -6, -11, -14, -9, -2, 1, -1, -1, -10, -4, -8, + 2, -5, -2, -11, -12, -4, 4, 4, -11, -4, -3, 4, -6, -7, -6, -4, 11, 0, 6, 1, -2, -5, 2, -4, -6, -7, -8, -12, -1, -11, + -5, -7, 8, 5, 17, 14, 13, 12, -1, -3, 1, -5, -2, 8, 4, 5, 2, 0, 4, 5, -3, 5, 4, -11, -8, -4, 3, -1, -6, -6, + -4, 10, 2, 1, 9, 5, 1, 4, 6, -3, 8, -3, -4, -3, -9, -14, -12, 9, 0, 9, 5, 3, 0, 0, -12, 4, 8, 9, 8, 9, + 13, 11, 0, -9, -6, -9, 0, -11, 1, -9, -3, -3, 1, -5, -3, -10, -6, 1, 3, 2, 2, -2, -1, -3, 0, 0, 4, 9, 6, 5, + 3, 2, 3, 8, 3, 4, -2, 0, 1, 5, 3, 4, 3, 5, 8, 6, 1, -3, -3, 2, 0, -3, -6, -1, 0, -2, -5, 0, 4, 8, + 5, 5, 7, 3, 4, 1, 3, 5, 2, 0, 2, 1, -1, 1, 0, -1, 1, 4, 4, 2, -8, -2, -1, -2, -6, 1, 6, 1, 4, 1, + 1, 1, -6, -6, 6, 8, 5, 7, -1, 0, 6, 6, 0, 5, -5, -9, -10, -8, -1, 2, 5, 1, -1, 2, 0, -3, -10, -2, -5, -5, + 4, 6, 2, -2, 0, 14, 12, 3, -5, -3, 1, -5, -7, -5, 8, -10, -3, -13, 1, -31, -31, 9, 4, -4, -9, -15, -1, -6, 8, -1, + -4, 11, 10, 13, 11, 8, 3, 18, 11, 8, 7, 4, 0, -4, -4, -12, -9, -8, -1, -5, 7, -1, 4, -1, 1, 4, -7, 11, 3, 11, + 0, 5, 4, 13, 7, 11, 15, 5, 11, 10, 1, 1, -2, 10, 5, 12, 15, 3, 8, 4, -3, -2, -2, -20, -13, -5, -1, -5, -19, -13, + -5, -7, 4, 7, 13, 13, 10, -6, -7, -10, -1, 9, -4, 0, 17, 15, 12, -1, -12, -2, -9, 3, -11, -5, -13, -14, -7, -5, -3, 11, + 20, 14, 20, 19, 2, -10, -1, 6, -3, 1, 14, 27, 20, 3, -3, -4, 3, 11, 1, 0, -1, -1, -14, -20, -14, -6, 2, 1, 3, -3, + 4, -4, 3, -1, -12, -12, -17, -12, -18, -13, -29, -13, -14, -3, 5, 26, 25, 15, 2, -3, -11, -14, -11, -1, -8, -3, 17, 2, 4, -6, + -9, -1, -6, 10, 0, 7, 13, 10, -3, 8, -6, 11, -3, 4, -2, 8, 4, -9, -8, -8, -10, -9, -7, 2, 2, 0, -4, -1, -1, 2, + -4, -2, 0, 2, 3, 3, 0, -7, -4, -4, -1, 4, 4, 6, 1, 5, 4, 3, -3, -4, -2, -4, -12, -13, -3, -8, -8, -7, 3, 7, + -3, 1, 8, 2, -3, -4, 2, 0, -3, -4, -4, -3, -1, -10, -7, -5, -4, 2, -4, -1, -2, 0, 3, 1, 8, 9, 12, 12, 3, -1, + 2, 5, -3, -4, -2, -4, -6, -5, -6, 2, -3, 4, -2, 7, 0, 4, 5, 14, 10, 5, 4, 3, 5, 8, 10, 13, 10, 3, -3, -5, + -10, -8, -2, 1, 1, 2, 0, 4, -2, -3, 5, 2, -5, -2, 5, 1, -1, 14, 10, 0, -37, 27, -22, 20, -45, -31, -5, 10, -12, -4, + -14, 6, -7, 3, 6, -7, 3, -7, -4, 2, 13, 4, 15, 1, -1, -1, -1, 6, 2, 4, -15, -14, -12, -2, 3, -3, 10, -2, -2, 0, + 13, 5, 7, 12, 15, 13, 6, 1, 9, 4, 7, -1, 9, 10, 0, 4, 0, -1, 11, 6, 6, 14, 10, 14, 16, -19, -4, -6, 4, 1, + -1, -4, -10, -17, -19, -15, -16, -9, 0, 12, 14, 2, 7, 0, -2, -5, -5, 6, 1, 6, 23, 11, 21, 18, 18, 16, 15, 8, -6, -1, + -3, 6, 12, 17, 19, 30, 35, 23, 4, -11, -24, -14, -14, 3, 19, 34, 31, 27, 11, -1, 15, 15, 15, 17, 20, 1, -2, 3, 12, 1, + 8, 1, -1, -5, -13, 4, 4, 10, 19, 10, 17, 20, 9, -9, -20, -21, -25, -28, -16, 3, 12, 33, 24, -6, -32, -44, -54, -42, -25, 2, + 12, 24, 25, 8, 1, 11, 17, 19, 22, 13, 25, 33, 18, 14, -4, 19, 10, 14, 10, -2, 11, 25, 12, 11, 21, -4, -4, -4, 0, -2, + -2, -1, 5, 2, 8, 5, -2, -3, -4, 4, 6, 2, -1, -1, 4, 1, 1, -3, -1, -5, -2, -3, 3, -4, -15, -12, -14, -15, -8, -3, + -2, -4, 1, 11, 9, 1, 6, 7, -7, -8, -4, -4, -13, -12, -4, -2, 2, -1, -7, -7, 1, 4, 5, 3, 0, -5, -3, -3, 3, 2, + 0, -2, -6, -7, 1, -2, 8, 16, 5, -8, -8, -25, -27, -41, -46, -47, -37, -22, -1, 19, 27, 43, 42, 22, -1, -14, -22, -15, -6, -1, + -1, 9, 16, 8, 6, 6, -7, -7, -8, -15, -25, -20, -23, -18, -18, -6, -3, -3, -5, 0, 5, 10, 2, -15, -26, -64, 90, -90, 127, -42, + -29, -13, 75, -2, -4, -64, 35, -20, -21, -17, 17, -17, -16, 6, 12, -15, -15, 37, 8, -11, 3, 7, 6, -6, -9, -6, -20, -17, -13, -17, + -4, 3, -3, -11, -8, -2, 2, -2, -5, 6, -7, -11, -10, 0, -11, -6, -3, 1, -1, 3, -12, -5, -6, -1, -14, -12, -11, -2, -9, 54, + -11, -9, -5, 2, -2, -13, -11, -10, -8, -3, -5, 0, 7, -1, 1, -10, 4, -3, 9, -2, -3, -6, -3, 1, 3, -4, 7, 4, 11, 5, + 4, -8, -6, -3, -10, -6, -8, 1, -8, -9, 4, 1, 9, 9, 9, 18, -6, -10, -2, 3, -12, -6, 0, -3, -4, 4, 8, 8, 2, -1, + 0, 4, -3, 2, 14, 11, 2, 9, 0, -9, -14, -13, -2, -2, 8, -3, -8, -8, -6, -6, -16, -12, -2, -2, 3, -1, -5, -13, 14, 0, + 5, 3, 0, -16, 7, -12, -9, -6, 4, 10, 4, -4, 11, 5, 11, 11, 3, -2, 7, 14, 30, 12, 11, 19, 4, 7, -8, -7, -8, -23, + 13, 18, 12, 7, 3, 3, 4, 3, 5, 12, 4, 1, -1, -1, -1, -1, 9, 9, 6, -2, -4, 1, 0, -4, 7, 5, 7, 6, 1, 0, + -2, 0, 1, 0, -7, -4, -13, -7, -1, -2, -2, -2, 1, 3, 10, 11, 4, -3, 3, 5, 12, 11, 4, 4, 5, -2, -6, 0, -3, -13, + -2, -17, -4, -1, 0, 5, -10, 1, -7, -3, -3, 1, 3, 3, 24, 20, 3, 1, 6, -2, 6, 4, -4, 0, 6, 11, 6, -3, 8, -3, + 3, 3, 5, -10, -1, -8, -11, -6, 14, 15, 4, 9, 6, 9, 5, -13, -16, -11, -14, -11, -5, -8, -14, -1, -7, -10, -19, -26, -43, -8, + 2, -11, -24, 20, 4, -11, 17, 26, 17, 16, -4, -10, -6, -1, -2, 9, -24, 7, -3, -8, -1, -23, 9, 14, -7, -13, -13, -3, 19, -4, + 0, 12, 0, -4, 3, -17, -11, 19, -1, -15, -9, -2, -4, -4, -6, -5, 11, 18, 1, 10, -8, -9, 0, -4, -21, -3, 1, -1, -2, 8, + -2, -2, -5, 5, 15, -12, -10, -2, 4, 6, 2, 10, 3, -11, 1, -4, -11, -6, -4, 2, 6, 3, 4, -15, -8, -5, -5, -1, -4, -4, + -1, -1, 4, 14, -3, 2, -9, -15, -3, -1, -6, -4, 4, 7, 8, 6, 8, 11, 11, -5, -9, -13, -9, -6, 1, 2, 8, -5, 0, -6, + -10, -5, -2, -16, 13, 11, 5, 14, -1, 2, 14, 23, 10, -10, 9, -6, -13, -7, 8, 0, -7, -13, -18, -9, -13, -14, -10, 9, 5, 8, + 22, 2, -3, 0, 3, 8, 0, -7, -2, 3, 10, -5, 2, -14, 0, 8, -2, 2, 1, -9, -5, 3, -5, -12, 4, 21, 2, 3, 25, 4, + -8, -22, -12, -20, -32, 15, 7, 0, 3, 1, 3, 5, -3, 6, 0, 0, -2, -8, -3, 8, 7, 6, -1, 5, 1, 5, 2, 3, 1, 6, + 3, -2, 0, -7, -7, -7, -12, -7, -3, 1, -5, -6, -15, -10, -6, -4, -5, -4, -6, 6, -4, 2, 8, 7, 15, 13, 11, 10, -3, 2, + -3, -9, -12, 0, -6, -3, -14, -11, -8, -3, 3, 1, 3, -5, 1, 8, -2, -4, -6, 12, 3, -10, -7, -1, -2, 5, 12, 3, 2, 11, + 4, -4, -10, 3, 7, 6, 13, 8, -3, 4, 4, 5, 11, -1, 6, 9, 3, 4, -2, -23, -30, -5, -13, -11, 0, 11, 4, 13, 7, 4, + -2, -11, -9, -22, -5, -4, 2, -13, 14, 8, 0, 11, 7, -1, -1, 0, -25, -10, 6, 11, 12, 7, -3, -2, 1, -5, -4, -6, 9, -2, + -3, -13, -5, 12, 2, -4, 9, 22, 5, 12, -3, 14, 3, -20, -9, -3, -4, 6, 0, -6, -3, 7, -3, 5, 7, -7, 1, -3, -13, -14, + 3, 13, -4, -2, 5, 9, 0, -4, 10, -1, -19, -6, -1, -3, -2, -1, -4, 4, -2, 9, 8, 3, 0, 15, 5, 10, 4, 0, -3, 0, + -1, 7, -2, -19, -9, -2, 2, 13, 1, 6, 6, 4, 3, -8, -12, -11, -6, -7, -3, 0, 9, 8, 14, -3, -10, -9, 1, 0, 0, -14, + 5, 7, 4, -4, 4, 21, -2, 1, -5, -10, 9, 27, 10, 8, 14, -10, 20, 11, -13, -9, -13, -11, 8, -15, -13, -23, -20, -20, -22, -9, + -3, -5, -7, 15, -1, 27, 2, 13, -10, -9, -7, 7, 4, -3, -15, 3, -8, 2, -21, -2, 7, 0, 0, -20, -13, -12, -6, 2, 20, 5, + 26, 29, 1, -1, 11, 11, -6, 2, -12, -26, 9, 4, 10, 1, 7, -4, -4, 3, 2, 2, 0, 1, 2, -1, -2, 3, 5, 7, 5, 8, + 15, -5, -5, 1, 9, 9, 3, 4, -1, 10, 3, 8, 12, 8, -1, 4, 5, -4, -3, -13, -10, -4, -11, -5, -11, -6, -13, -16, -7, 0, + -6, -1, 2, -6, 3, 10, 5, 2, -7, 0, 9, 1, -9, -3, -2, -4, -3, -1, 0, 1, 3, 0, -7, -3, -7, -2, -4, -5, 6, 0, + 8, -13, 10, 5, 14, 10, 0, -9, -3, -1, -17, 2, 7, -13, -4, 11, 4, 2, 1, 15, 10, 1, -4, -2, -13, -12, -11, -4, -2, -16, + 2, 2, -10, -6, 13, 10, -9, -5, -16, -9, -13, 4, 2, -10, -14, -25, 2, -20, -3, -10, -12, -23, -10, 4, 6, 3, -2, 9, 13, -15, + -6, 10, 19, 12, 2, -7, -12, -14, -1, 5, -2, 19, 8, 13, 8, -16, -5, -13, 1, -9, 6, -1, 12, 1, 3, -12, -1, 11, 10, 4, + -8, -4, -6, -3, -6, -1, 1, -1, -6, 2, -7, -10, 2, 9, -11, 12, 11, -2, 1, 9, 12, 7, -5, -6, 15, 24, 17, 21, 22, 8, + 14, 7, 1, 32, 37, 24, 25, 13, -10, 4, 10, 1, 10, 13, 9, 9, -4, -11, -11, -5, -10, 10, -2, -2, 3, -4, 1, -7, -2, 8, + 28, 15, 0, -8, -13, -11, -20, -18, -27, -22, 8, 4, 6, 15, 11, 17, 28, 4, 16, 37, 29, 30, 17, -12, -12, -3, -11, -3, -10, -2, + -14, -34, -29, -35, -22, -23, -21, -15, -23, 2, -1, -4, -7, -7, -4, 10, 22, 12, 12, -3, 8, -12, -5, -3, -2, 9, 12, 2, 8, 6, + 10, 7, -2, 0, 23, 31, 17, -2, 1, 8, -4, 3, 0, -8, -31, -6, -2, 9, 8, 3, 7, 3, 3, -9, -2, -6, -3, 0, 8, 6, + 8, 5, -6, -2, 10, 16, 0, 0, -2, 10, 17, 4, 12, 7, 7, 7, 1, 4, 14, 10, 13, 16, 1, -8, -2, 9, -4, -7, -4, -4, + -11, -11, -11, -11, -2, -11, -5, -2, -18, 6, 15, 10, 17, 4, 7, 24, 15, 5, -1, 0, 7, 14, 16, 5, -6, 2, 3, 23, 16, 10, + 2, -5, -11, 2, -3, -2, -3, 6, -5, 0, 9, 8, 2, -1, -2, -5, 3, 12, 10, 0, 8, 5, -13, -4, -18, -1, -15, -6, -15, -13, + -1, 5, 3, 9, -10, -5, 2, -10, -16, 3, -1, 2, -7, -27, -26, -6, 38, -11, -18, -26, -15, -3, -20, 2, -6, 4, -14, 1, 17, 32, + 14, 4, 17, 14, 10, 5, 18, -1, 8, -7, -13, -5, 1, 0, 5, 16, 1, 11, 2, 17, 3, 4, -4, 14, 7, 4, 3, 3, 9, -14, + 0, 6, 24, 15, 19, 11, 9, 10, 13, -6, -3, 12, 7, -11, -10, 3, 1, 6, 14, -13, 2, 7, 2, 4, 4, 17, 9, 0, -1, 15, + 18, 32, 11, 11, 7, 14, 15, 21, 4, 17, 24, 18, -2, 5, 13, 24, 16, 22, 12, 15, 16, 5, -7, -13, -9, 9, 21, 14, 43, 40, + 23, 3, 26, 35, 31, -1, -4, -7, -27, -23, -16, -32, -37, -31, -28, -3, 3, 3, 8, 4, 7, 5, 21, 21, 11, 9, 6, 7, -3, 3, + 2, -4, -9, -5, -15, -15, -62, -66, -69, -69, -83, -44, -47, -21, -5, -17, -28, -4, 2, 6, 5, 8, 9, 8, -2, 14, -5, 5, -10, -3, + 16, -4, -14, 0, -4, -13, 6, 8, 20, 40, 74, 56, 28, 36, 29, 4, 2, -26, -25, -62, 4, 0, 4, 0, 3, -1, 2, -4, 6, 5, + 1, 2, -9, -5, -6, 3, 13, 15, 11, 4, 11, 7, 1, 8, 4, 5, 3, 0, 0, 8, 13, 4, 7, -4, 1, -5, 3, 5, -4, 3, + 11, 13, 6, 4, 7, 2, -3, -5, 0, 3, -7, -6, -9, -3, 4, 13, 12, 15, 9, 12, 22, 10, 7, -3, -9, 2, 3, 3, -2, 3, + 4, 6, 4, 6, 7, 18, 9, 1, 8, -3, 13, 14, 7, -2, 17, 16, 9, 6, 0, 0, 0, -3, -9, -9, -23, -11, -20, -18, -19, -4, + -6, -13, -9, -8, -24, -21, -13, -9, 7, 10, 2, -4, -4, -5, -8, -33, -8, -42, -67, -97, 28, 81, -2, -38, -65, -22, -33, -21, -11, 6, + 4, -5, 1, 1, 22, 14, 4, 9, 17, -8, -4, 0, -4, -13, 4, 5, -6, 3, 9, 5, -3, -9, 11, -5, 9, 0, 8, 11, 18, -4, + -9, -6, -7, -4, -7, 1, 7, 23, 18, 5, 5, -6, -1, -6, 5, 10, 4, 14, -5, -3, -5, -3, 3, 1, -26, 23, 29, 25, 19, 4, + -10, -10, -4, 19, 50, 49, 30, 22, 29, 9, 21, 21, 13, 2, -2, 8, 9, 23, 28, 38, 39, 43, 21, 19, 11, 2, -18, -19, -7, -6, + -1, 7, 33, 12, 21, -1, 6, 22, 17, 26, 24, 12, -1, -18, -17, -20, -39, -35, -7, -6, -11, -10, -14, 2, 11, 11, 19, 22, 13, 3, + 19, 15, 4, -8, 6, 20, 22, -8, -4, -7, -48, -87, -110, -97, -90, -78, -31, 4, -15, -1, 12, -21, 5, -7, -17, 2, -1, 10, 6, 12, + 20, 11, -2, 4, -11, -5, -22, -7, 6, -10, 14, 14, 25, 18, 33, 60, 40, -1, 17, 20, 4, 0, -8, -49, -98, 22, 17, 20, 19, 23, + 16, 7, 5, 1, 6, -4, -5, -4, 2, 10, 12, 21, 15, 17, 17, 16, 14, 10, 19, 23, 16, 8, 1, 3, 9, 5, 10, 8, 7, 6, + 1, -13, -13, -6, -1, -6, -3, 6, -3, -20, -15, -18, -18, -20, -12, -25, -22, -13, -6, 14, 12, 7, 14, 17, 10, 19, -11, -8, -15, -31, + 4, -3, -16, -22, -10, -8, -13, -24, -24, -45, -40, -72, -90, -100, -73, -66, -7, -9, -33, -11, -3, -7, 5, -4, -13, 7, 10, 2, 2, -20, + -18, -15, -36, -24, -21, -26, -20, -3, 0, -3, 14, 5, 12, 8, 15, 12, 12, 11, 24, 22, 6, 35, 6, -40, -127, 44, 75, -32, -81, -123, + -77, -21, -63, -25, 0, -4, -3, -30, 16, -2, -10, -30, 43, 7, 2, 8, 24, 3, 7, 12, -8, 9, -9, 3, 2, -22, -2, 2, -2, 3, + 1, 9, -6, 7, 2, 18, 16, -2, -6, -7, -5, 11, 12, 17, -7, -7, 1, -5, 6, 4, 26, 6, 4, 7, 10, 8, 6, 9, 3, -53, + 14, 6, -2, 3, 3, 5, 2, 6, 2, -4, -5, -10, 2, -3, -1, -1, 1, -4, -1, 9, 7, 9, 4, -9, -3, 1, -1, 2, -1, -4, + -8, 2, 3, -4, 3, -3, 3, -4, -6, -10, -3, -1, 5, 5, 3, 1, -4, -10, -10, -5, 4, 0, -3, 2, 4, 7, 2, 10, 0, 5, + 2, 3, 0, -3, 8, 10, -2, -1, -4, 4, 18, -3, 2, 7, -1, 0, -4, -2, 0, 8, 0, 4, 5, 0, 0, -1, -1, -3, -2, 1, + -4, -6, -8, 4, 6, 5, 5, 3, 4, 6, 8, 5, -4, -5, -2, -7, 4, 4, -5, -5, -5, -3, 4, -6, -5, -2, -12, -5, -5, 3, + 5, -2, 2, -4, -3, -2, 2, 2, 0, -1, 4, 6, 3, -1, 4, -4, -5, -1, 1, -3, 4, -2, 2, 0, -3, -3, 0, 3, 5, -1, + 2, 9, 3, 5, 1, 0, -4, -7, -8, -8, 3, 4, 0, 0, -1, -2, -3, 1, -8, -4, 1, -3, 1, -5, -9, -2, 0, 13, 6, -3, + -3, -4, 1, -2, -6, 5, 6, 1, 1, 0, -3, -10, 0, -4, -8, -2, 1, 0, -5, -12, -8, 0, 3, 4, 6, 1, 8, 6, 2, 0, + 1, 3, 4, 1, -6, -3, -1, -5, -7, 5, 1, 4, 1, -2, 1, -2, 7, 1, 1, -2, 0, 5, 7, 1, 1, 4, -2, 4, -2, -18, + 6, -3, 3, 6, -1, 0, 13, -5, 2, -2, 9, 7, -1, 9, -4, 1, 13, 13, 21, 9, -5, 16, 11, -1, -4, -10, -12, -12, -3, -5, + 3, 5, 5, 0, 2, -3, 13, 4, -2, -2, 1, 1, -5, -11, -2, -6, -9, -16, -13, 7, -8, -6, -3, 4, 7, 6, -1, 10, -1, -3, + 2, 3, 2, 7, -11, 3, 3, 7, 5, 12, 6, 1, 6, -8, -6, 1, -4, 6, 3, -3, 0, 2, 2, 3, -3, -1, 6, 8, 8, 3, + -6, 0, 8, 3, 2, -11, 1, 4, -2, 2, -2, 4, 1, 5, 0, 0, -7, 1, 5, 11, 5, -1, 2, 5, 2, -4, 5, 3, -3, -8, + -3, -5, 8, 8, -1, -4, -5, -6, -7, -4, 1, 1, -4, -1, 3, 1, -7, -2, -7, -3, -3, -3, -4, -12, 3, -1, 2, 0, -5, -4, + -4, -11, 1, -7, 4, -1, -3, -4, 3, -3, 7, 4, -7, 5, -8, -2, -3, 0, 5, 23, 11, 16, 12, 2, -8, -3, -11, -6, -7, -12, + -5, -14, -6, -10, -7, -1, 6, 0, 0, 3, 2, 1, -1, 2, 3, 8, 10, 4, 4, 1, -4, -6, 0, -1, -2, -2, -7, 1, -6, -5, + 1, -6, -2, -3, 2, 0, 2, -4, -4, -6, -12, -7, 0, -1, 1, -1, 1, 5, 9, 10, 4, 2, -7, -3, -7, -4, 4, 9, 1, 8, + 4, 1, 12, 5, 4, 2, -1, -2, -1, -7, 4, 3, 4, -3, 1, -3, 0, -4, 1, -1, -2, -2, 3, -2, -12, -3, -5, 2, 7, 7, + 1, -3, -1, 9, 1, -1, 6, 3, 1, -3, -3, -1, 4, 0, 6, 7, -1, -6, 0, 3, -2, 5, -2, -1, -1, 5, -2, 5, 5, -3, + 3, -5, -1, -5, -11, 3, 8, 6, -3, 7, 1, 5, -4, 2, -4, -2, -9, 0, -14, -7, -10, -6, 0, 17, 11, 4, 2, 2, -2, -4, + -7, -16, -3, -5, -6, -4, 5, 5, -4, 8, -2, 6, 8, -2, 1, 2, -3, 3, -3, -2, -3, -5, -10, 5, 1, 5, -9, -7, -2, 14, + 11, 8, 6, -6, -4, -7, -1, -5, -5, -13, -3, -3, -3, 6, -7, -7, 4, 10, -1, -6, -6, 5, -4, -9, 0, 2, -6, 3, -2, -1, + -6, -1, 7, 1, 3, 2, 5, 3, -4, -10, 5, -4, -3, -2, 2, 4, -6, -3, 10, 9, 3, 6, 3, -3, -3, -5, -6, -3, 5, -5, + -5, -8, 5, -5, -14, -17, 3, 2, 0, 2, -2, -6, -5, -5, 6, 7, -2, 2, -4, 6, 8, -3, 3, 0, -4, 8, 5, -7, 6, -6, + 3, 3, -1, 4, -4, -9, 11, 3, 1, 2, 9, -2, -5, 9, 16, 5, 14, 21, 14, -6, -2, -1, -2, -5, -4, -6, 4, -4, 1, 5, + 8, 0, -6, 0, 10, -5, -3, 12, 1, 10, -10, -5, -9, -6, -3, 0, 5, 6, -2, 3, 4, 3, 6, 0, 2, 2, -1, 2, 5, 2, + 7, 6, 1, 3, -2, -2, -10, -10, -7, -7, -5, -11, -8, -4, -4, -1, 4, 7, 2, 4, 5, 5, -1, 2, -1, -5, -11, -6, -8, -3, + -2, 4, -1, 2, -3, -1, 2, 7, 3, 1, -3, 6, 4, 6, 2, -2, 6, 6, -1, -1, 0, 2, -5, -2, 4, 9, 5, -4, -4, 2, + 3, -5, -1, -1, 4, 3, 4, -6, 4, -1, -2, -1, 9, -1, -3, 4, -1, 0, 1, 0, 5, 0, -4, -3, -1, -3, -2, -1, -3, 1, + -4, -2, 8, 9, -1, 1, 5, -1, 0, -9, -5, 0, -2, 8, -3, -1, 1, -6, -11, -8, 5, -1, -7, -4, -12, -6, 2, 2, 16, 13, + 1, -1, 4, -5, -8, 3, -12, -7, -11, -1, -11, -5, 1, 4, -1, 2, -4, 4, 6, -1, 2, 5, -2, -11, -2, -4, -4, -7, -3, 0, + -3, 1, -1, -2, 13, 12, 5, 1, 0, 3, 4, 0, 0, 2, 0, 7, 2, -7, -12, -3, 6, -3, -6, 1, 17, -5, 4, 0, -6, -5, + -6, -5, 4, 5, -3, -6, 1, 2, -1, -8, -7, 0, 6, 8, 6, -5, 7, 5, 11, 5, 12, 11, 4, 3, -3, -8, -8, 1, 5, 5, + 3, 1, -6, -2, -6, 10, 4, 5, -3, 7, 1, 6, 4, 8, -5, -14, -16, -13, 6, 10, -9, -9, -11, 0, -1, -13, 0, 1, -7, 1, + -15, 10, 4, 0, 11, 10, 13, -3, 3, -1, 1, -8, -10, -3, -1, 9, -9, -2, 9, 5, 2, -9, 11, -14, 2, 1, 0, 2, -1, 4, + 9, -6, -9, -4, -5, 4, 2, 1, -8, -4, 4, 6, 2, -2, 8, 9, 7, 4, -2, -3, -3, 0, 7, 3, -1, 0, -1, 1, 2, 2, + 3, -5, -7, -3, -1, -2, 4, 1, 4, -5, -5, 3, 3, -5, -5, -4, -1, -1, -4, -2, -6, -3, -1, 4, 3, -7, -1, 0, 2, 1, + 4, 6, -5, 2, -1, -5, 9, 7, 2, 2, -8, -1, 7, 3, 1, -1, 4, 0, 0, 3, -3, 4, -5, 2, -1, 1, 10, -1, 1, 4, + 1, 3, -6, -6, -1, -3, 4, -2, -1, 4, 2, 0, -8, -4, 6, 2, 2, -1, -3, 3, 2, 1, 6, -1, 1, 0, 3, -10, -4, 9, + 0, 5, -5, 0, -3, -4, 6, 5, 4, -3, 7, -11, -3, -4, 1, -6, 4, 3, 15, 0, -14, 18, -4, -14, 3, 20, 9, -11, -2, 7, + 6, 19, 8, 5, 0, -5, 8, 8, 4, -4, 4, -16, -9, -10, -1, 5, -3, 4, -1, 15, 2, 9, 15, 13, 9, 12, 2, 2, -15, -2, + -3, -1, 0, -2, -4, -2, 0, 6, -4, 5, 7, 10, -4, 5, 3, -8, -5, 8, 3, 14, -13, -4, -5, -10, -2, 5, 2, -9, -1, 8, + -2, 2, -2, 6, 1, 3, 8, -8, 3, 3, 6, 2, 0, 4, 7, 11, 4, 2, 2, -8, 4, 8, 1, -2, 0, 16, 1, 3, 0, 6, + 16, 2, 4, 6, 6, -10, -15, -12, -23, -20, 0, 1, -3, 4, 11, 8, -7, -8, -3, 2, -5, 13, -6, -7, 8, 14, 8, 0, 12, 10, + 14, 2, 5, 16, 14, 8, 6, -1, 9, 2, 5, -4, -10, 5, -5, 10, -10, -2, 5, 3, 0, -8, -11, -13, -15, 3, -3, 20, 8, 14, + 1, 2, -4, -4, 8, -7, -2, -1, -24, -7, -20, 2, 2, 1, 3, -3, -2, -1, 3, 0, 0, 2, 0, 4, 1, -1, 1, -2, -3, 3, + 3, -1, -1, -2, -3, -1, -10, -12, -9, -5, 4, 3, 4, -1, -2, 0, -6, 1, 1, -6, 4, 2, 3, 7, 0, -3, 3, 4, 5, 6, + 7, -1, 1, -1, -3, -1, 0, -7, -11, -4, 7, 4, -3, 0, 2, 6, -2, 3, 2, 1, 0, -1, 1, -4, 4, -1, -1, 4, -2, -2, + -3, -4, -10, -4, 7, 4, 7, 9, 7, 10, 3, 5, 2, 3, -4, -2, -6, -11, -8, -6, -7, -4, -1, -8, -1, 2, -3, 5, 4, 0, + 8, 5, 7, 7, 10, 5, 0, 4, -9, -12, -11, 1, -1, -6, -11, -4, -8, 2, 6, 6, -16, -21, 1, 9, -20, -28, 27, -18, -43, 13, + -6, -28, 7, 3, -4, 7, 21, 8, 1, -2, -4, 11, 1, -9, 0, 6, 8, -18, -10, 14, 7, 12, 16, 7, 23, 2, 5, -1, -10, 6, + 17, -2, -1, -5, 3, -1, -1, 0, -2, 8, 7, 7, -5, -2, 3, 11, 6, 2, -3, 3, -4, 7, 5, -1, 42, -12, -17, -21, -9, -2, + 4, 20, 20, 19, 11, -10, -21, -19, -7, -8, -3, 0, -8, -1, -4, -12, -11, 5, 0, 10, 12, -5, -7, -21, -14, -26, -28, -20, -19, -19, + -17, -10, -18, -11, -7, -9, -1, -11, -9, -14, -4, -14, -18, -16, 6, 18, 28, 50, 50, 28, 26, 2, -14, -1, -9, -2, 21, 13, 17, 31, + 15, 19, 21, 3, 16, 19, 3, 0, 0, 15, 21, 11, 17, 21, 18, 12, 10, -2, -8, 7, 12, 17, 10, 9, 15, 6, -9, -8, -19, -7, + 14, 20, 56, 52, 39, 3, -2, -16, -41, -21, -38, -9, -16, -18, -13, -18, -23, -15, 2, -1, -6, 21, 14, 5, 4, 19, 19, 10, 7, 1, + 2, 0, 5, 3, -6, -5, 2, 4, 0, 6, 0, -3, -7, -2, 3, 4, 3, 1, 1, 3, 4, -2, -11, -7, -8, -4, 2, -1, -4, -5, + -9, -6, -12, -16, -20, -10, -12, -17, -16, -11, -21, -21, -10, -19, -7, 11, 16, 16, 22, 22, 14, 10, 6, 5, 4, -3, 3, 9, 11, 19, + 10, 13, 9, 13, 6, 2, -1, -3, 0, 8, 9, 17, 6, 12, 10, 11, 19, 13, 15, 11, 8, 5, -17, -32, -47, -64, -81, -82, -83, -61, + -29, 6, 31, 31, 21, 16, 10, -6, -12, -5, 4, 17, 27, 36, 36, 33, 28, 21, 18, -11, -39, -74, -91, -105, -127, -25, -119, 87, 46, -47, + -35, 125, -17, -56, 110, 7, -70, 70, 5, -66, 55, 26, -55, 25, 5, -27, 18, 6, -14, -3, 3, -15, 5, 0, -5, 15, -1, -10, 5, 2, + -4, 8, -5, -9, 1, 13, -8, 6, 1, -10, -8, 9, 17, -6, 2, 8, -9, 7, -4, -18, 0, 2, 0, -14, -9, -7, 1, -2, -6, 90, + 4, -16, -4, -1, 6, 6, 8, 4, 8, 2, -7, -8, 3, 1, -7, -8, -3, -11, -8, -10, -8, -6, 0, -7, -6, 2, -4, -8, 0, -6, + -4, -2, 7, -7, 4, -3, -4, -3, 1, 4, -3, -10, 2, 10, 8, 6, -11, -8, -6, 12, 5, 5, -8, 1, -4, -16, -2, 5, 9, 3, + 2, 5, 16, 3, 2, 3, -2, -5, -2, -18, 2, 8, -3, 4, 0, 13, 18, 16, -1, -8, -7, -13, -13, -13, -13, -3, 0, -12, -15, -14, + -9, -7, 1, 21, 2, 6, 25, 6, -5, -5, -7, 6, -8, 10, 3, -2, -3, 11, 5, 4, 12, 12, 1, 0, 8, 8, -10, -7, -6, -6, + 9, -5, -6, -9, -5, 4, 7, 7, 17, 15, 6, 5, -14, -11, -1, -4, 8, 1, 9, 7, 10, 10, 9, 8, 0, -7, -3, -11, -15, -19, + -15, -8, -11, -7, -9, -7, -1, -6, 5, 11, 10, 5, -4, 2, 9, 4, 5, 10, 5, 6, 0, -11, -8, 4, -2, -1, 4, -3, 2, -4, + -5, 11, 11, 4, -3, -19, -10, -9, -11, -9, -6, 10, -3, 12, 7, 14, 9, 12, 11, 1, -7, -4, -1, -9, 2, 2, 6, -8, -6, -7, + -3, 4, 13, 5, -6, -1, 2, 7, -4, 3, -9, -5, -7, -2, -12, -11, -5, -2, 18, 8, 15, 29, 14, 5, 2, 5, 2, -1, -5, 17, + 0, -28, 34, 1, -4, 11, -28, -10, 9, 14, 5, 3, 11, 9, -3, 12, 5, 9, 12, 5, -2, -26, -16, -20, -7, -19, -12, -1, -6, -1, + -1, -14, -13, 6, 0, -6, -11, 22, -2, -13, 3, 7, -10, 2, 5, -7, 9, 0, 14, 5, -1, -14, -3, -16, -7, -8, -12, 3, -4, -10, + -9, -4, -13, -4, 27, -11, -13, 0, 4, 2, 4, 13, 16, 11, -8, -8, -5, -3, 3, 10, -3, 12, 1, -4, -7, -6, -3, 13, 6, 4, + 5, 2, -8, -4, 17, 1, 20, 12, -7, 2, -5, -9, -8, -1, -10, 2, 1, 3, -8, 1, -3, 2, -10, -1, -11, -11, -19, -12, 0, -5, + -23, -5, -4, -5, 8, 5, -5, 2, 9, 5, 6, 8, 7, 6, -9, 7, 11, -5, -3, 9, 12, -8, 21, -13, -8, 20, 4, 7, 2, 2, + 1, -1, -6, 9, 14, 5, 14, -3, 8, 0, 6, 16, -2, -4, -8, -7, -18, -14, 2, -4, 1, -16, 1, 2, -13, -14, 3, 5, 12, -4, + -15, -8, 3, 1, -23, -12, -11, -11, -7, 2, -2, 8, 11, 1, -7, 1, -9, -5, 4, 8, 3, 1, -5, -7, -6, -5, -1, 13, 7, 8, + 6, 12, 8, -9, -9, -5, -4, -1, 5, -4, 0, 8, 11, 5, 3, 5, 11, 10, 5, -2, -3, -2, -1, -1, 7, 1, 2, -4, -7, -4, + 7, 5, 3, 6, 2, 9, -5, -7, 1, 5, 2, 7, -3, -7, -16, -16, 5, -1, -12, 3, -5, -1, 5, -4, -12, 15, 7, 3, 3, 5, + 5, -10, -3, -3, -12, -3, -2, -3, 3, -3, 1, 6, 2, -1, 11, -1, -4, 3, 16, 14, 8, -8, -2, 4, 9, -11, 12, -4, 3, 5, + 7, 9, 4, -11, -9, 3, -56, 15, 11, -18, -8, -27, -11, -14, 2, 11, 11, 10, -21, -10, 2, 7, 15, 23, 2, 6, -2, -3, -6, 3, + -5, -5, -7, 0, 3, 3, 14, 14, -3, -6, 12, -8, -7, 10, 3, 5, 4, 6, -4, 11, 4, 2, 10, 13, -6, -3, 7, 8, -6, -6, + -3, -4, 0, 9, -4, 10, -7, 1, 9, 42, -16, -7, 8, 14, 6, 0, 8, 10, 10, 8, 3, 1, -17, 0, 13, 12, 4, -6, 3, -14, + -7, 0, -2, -4, -1, 9, 5, 1, -4, -11, 2, 9, -1, -7, 0, 15, 5, -3, 6, 8, 17, -8, 0, -8, -1, 3, -3, 5, -4, -5, + -12, -22, -18, -10, -12, 4, 8, -7, -3, 5, -7, -8, 1, 6, 5, -9, -8, 4, -7, 2, 5, 6, 8, 2, -2, 6, -7, 12, -1, 3, + -5, -7, -5, 16, 1, 18, -3, -15, -15, -5, 11, -12, 3, -4, -5, 2, -3, -2, 1, 3, 20, -7, 2, -7, -6, -5, -11, 1, 22, 10, + 9, 15, -2, -14, -8, -10, -15, 17, 14, -9, -15, -1, 4, 15, 14, 9, 6, 2, 5, 12, -4, -9, -26, -14, -1, 12, 7, 7, 1, -5, + -6, 4, 14, 14, 8, 17, 7, 7, -3, -12, 4, 6, -3, -1, -1, 2, 1, -2, -3, 1, 12, 6, 0, 2, 4, -4, -4, -8, -13, -16, + -7, -2, -7, -6, -11, 4, 10, 1, -3, 6, 15, 2, -6, -3, 4, -4, 2, 4, -5, -8, -2, -4, -4, -1, -7, 7, 3, 17, 10, 2, + -1, -5, 3, 7, -4, 0, -6, -14, -5, 1, 24, 10, 11, 13, 5, 1, -5, 1, 7, -5, 9, 8, 4, 2, -2, 9, 2, 4, 9, -2, + 1, -10, -2, -10, 8, 7, 1, 22, 11, 2, 14, -54, 18, 6, -24, -20, -41, 11, 6, -5, 10, 12, 3, -3, -6, -1, 7, 14, 13, 8, + -9, -15, -21, -21, -13, -12, -17, -17, -19, -6, 2, 14, 16, 14, 4, 15, 3, 1, -2, -15, -6, 1, -2, -13, 4, 0, 5, -5, -2, 0, + 9, -7, 11, -6, -6, -9, -14, 4, 6, 4, -1, -1, 3, 21, 40, -5, 4, 5, 1, 2, -1, 6, 15, 22, 6, 4, -10, -8, -13, -9, + -13, -3, -1, 6, -2, 2, -20, -2, -1, -18, 1, -9, -5, -12, -2, 10, 2, 14, 1, 0, 3, -6, -9, 9, 25, 11, 5, 13, 15, 3, + 1, -2, 7, -13, -13, -16, -11, -12, -9, -5, 17, 11, 8, 10, 2, -7, 5, 0, 7, 16, 7, -17, 0, 3, -8, 8, 18, 4, 0, 9, + 13, 19, 7, 12, 4, 12, -4, 9, 10, 14, 2, 10, -4, 28, -2, 33, -6, -3, -14, -5, 3, -22, 0, -32, -4, -9, 11, -7, -3, 11, + -14, -2, -2, -6, 3, -4, -4, -4, -14, -4, -16, -17, -14, -24, -19, 7, 2, 0, 0, -2, -3, 4, 0, -2, 6, -8, -11, -13, -15, -6, + -3, 1, 3, -2, 4, -5, 4, -3, 3, 7, 6, 3, -11, -13, -16, -2, -1, -1, -5, -1, 3, 6, 12, -1, 4, 15, 7, 8, 9, 1, + -8, -3, -2, 4, 8, 3, 1, 0, -3, -11, -6, -12, -3, 0, -7, -12, -14, -13, -6, -1, -9, -11, 0, -1, 3, -2, 10, 5, -5, 11, + 20, 6, -1, -9, 1, 8, -8, 5, -4, -1, -4, -6, -13, 2, -1, 17, 13, 7, 9, -2, 7, 18, 17, 13, -4, -10, -1, -15, -8, 2, + -2, -6, -6, 4, 0, 8, 10, -3, 16, 7, 4, 12, 7, -3, -11, 36, -62, 16, -8, -32, -29, -16, 37, 0, 12, -9, 8, 36, 16, -2, + 23, 4, 21, 23, 19, -5, -18, -28, -12, -3, 2, -3, 13, 2, 5, 6, 27, 13, 14, 5, -1, 2, 1, -3, -10, -12, -5, -11, -3, -8, + -13, 1, -8, 2, 1, -9, 0, -1, -13, -15, -3, -19, 3, -11, 9, 8, 9, 30, 15, 34, -25, -4, -6, 1, -5, 14, 15, 12, 4, -7, + -11, -1, 0, -2, -4, -21, -17, -29, -18, -15, -1, -2, 6, -14, -11, -4, 1, 8, -2, -11, 9, 9, -9, -7, -3, -2, -2, -1, 10, 21, + 4, -13, -3, 12, -5, 8, 9, 23, 5, -7, 5, -2, -5, 18, 3, -1, -1, 6, 3, 4, -16, -4, -21, -25, -7, 5, -17, -13, -20, 4, + 12, 0, 2, 13, 32, 26, 35, 13, 16, 24, -7, -14, 2, 2, -9, 6, 12, 9, 9, -8, 32, 21, 27, 18, 30, 2, 12, 18, 24, 23, + 13, -4, 31, -4, 11, -20, -4, -7, -11, -5, -7, -4, -24, -42, -21, -47, -56, -74, -83, -61, -12, -3, -10, -4, -3, 7, 17, 14, 20, 12, + 8, 7, -3, 7, 12, 14, 11, 2, 2, 1, 4, 4, -3, -15, -20, -17, -3, -4, -17, -17, -3, 3, -7, -15, -9, -10, 2, 2, 16, 18, + 24, 13, -2, -1, 6, 3, 6, 14, 7, 5, 0, 6, -3, -8, -4, 2, -3, 4, -9, -20, -11, -9, -27, -23, -17, -9, -11, -1, 13, 18, + 21, 6, -4, 6, 12, 10, 7, 3, -7, -16, 3, -23, -6, -22, -16, -15, -15, -4, -2, 7, 3, 15, 14, 2, 8, 4, -2, 7, 9, 6, + -4, 6, 9, 4, 4, 6, 11, 5, 13, 18, -2, 11, 3, -4, -8, -17, -12, -31, -35, -39, 63, -64, -2, -40, -47, -45, -46, 29, -13, 14, + -22, 15, 26, -9, -2, 0, 28, 37, 7, 5, 1, -4, 3, 10, 18, 13, 4, 6, 11, 3, 12, 20, 21, 11, -1, -1, -3, 12, 3, 12, + 7, 4, -6, 16, 15, -9, -7, 7, 2, 13, 9, 6, 5, 7, 1, -3, 3, 25, 7, 13, 18, 19, 34, 31, 13, -10, 8, 12, 14, 31, + 38, 19, 1, 1, -3, 7, 14, 13, 16, -1, -6, -18, 3, -8, -7, 10, 21, 15, 10, 14, 10, 11, 7, -4, -6, 5, -13, 2, 1, 8, + -12, -29, -32, -2, 34, 14, -4, -7, -2, -12, -7, 7, 5, -28, -24, -20, -27, -32, -16, -15, -10, -9, -11, -20, -31, -56, -50, -39, -41, -32, + -19, -5, -4, -12, 14, 24, 40, 49, 48, 56, 68, 46, 35, 31, 10, 0, -17, -7, -5, 27, 54, 33, 46, 23, 28, 31, 18, 27, 24, 25, + 24, 24, 18, 19, 15, 11, 21, 21, 28, 30, 0, 11, -10, -14, 7, 7, 10, 3, -20, 5, -18, -39, -43, -63, -79, -11, -6, -13, -15, -7, + -12, 1, -3, -7, -9, -7, -9, -8, 3, 4, 5, 9, 6, 7, 7, 12, 5, 1, -1, -2, -4, -2, -7, -15, -14, -13, -15, -3, 2, 4, + 5, 7, 2, 6, 4, 14, 6, 0, 6, -4, -6, 7, 5, 3, 1, -1, -5, -1, 12, 12, 11, 14, 15, 1, -3, 3, -18, -14, -14, -16, + 0, 8, 8, 11, 8, 17, 19, 17, 24, 23, 6, 1, 4, 8, -8, -18, -27, -15, -14, 2, -3, 7, 20, 18, 20, 20, 19, 23, 21, 5, + 12, 20, 28, 30, 31, 37, 38, 21, 17, 10, -6, -8, -25, -16, -12, -9, -14, -31, -43, -60, -71, -81, -101, -105, -124, 11, 0, 127, -64, -97, + -51, -68, 90, 7, 44, -30, -17, 49, -2, -38, 12, 47, 28, -10, -4, 6, -29, 16, 3, 10, 5, -28, -14, 4, 23, 1, 20, 1, -5, -1, + 9, -2, -9, -32, -22, -5, -7, -33, 1, -13, -4, 1, 2, 19, 3, 5, 14, -4, -13, -17, -8, -22, 13, 9, 12, 19, 26, 24, 35, 31, + -5, 0, -2, 0, 0, 3, -2, -1, -3, -6, -6, 3, 10, 4, 3, -4, -5, -1, -3, 2, 10, -1, 1, 2, 3, -4, 3, -3, -5, 3, + 8, 2, 2, 2, 6, 8, 10, 1, 3, 2, 2, -6, -4, 3, 1, 0, 3, 2, 2, 0, 4, 4, -3, 3, 8, -2, 0, 9, 2, 4, + 5, 2, 5, 14, 6, -2, -1, -7, 14, 13, 9, 5, -6, 4, 1, 6, -2, 2, 4, -1, -2, 1, -6, 2, 4, -5, -6, -6, -1, 5, + 1, 1, 3, 1, 3, 1, 13, -10, 3, 9, -3, 3, 5, 1, -4, 0, -2, -4, 14, -11, -11, -17, -3, -9, -4, 2, -3, -6, -4, -9, + -4, -6, 3, 6, 1, 2, -1, -3, -2, -4, -6, -2, -1, 6, 2, 4, 0, -3, 2, 1, 5, -3, -4, 0, -1, 0, 2, -4, -3, 2, + -2, 3, 2, -8, 4, -1, 1, 2, -4, -2, 3, 3, 0, -3, 2, -2, 3, 3, 0, 1, 2, 1, 0, -5, -6, 3, 0, -8, -3, 0, + 3, -2, 0, -3, -1, 3, -3, 3, 4, 2, 2, 7, 1, -7, -4, -3, -5, 4, 0, 0, 2, -2, -2, -3, 5, 7, 3, 1, -1, -2, + 1, 0, 3, -6, 8, 1, -6, -7, 2, -8, -1, -2, -1, -2, -6, -2, 4, 8, 6, 6, 5, -2, -2, 2, 7, 5, -5, 2, 6, -1, + 2, 12, -3, -2, -3, 4, 5, -4, -9, 1, -6, 0, 7, 5, 1, 4, 4, -3, -6, 2, -2, 2, -5, -6, -7, 1, -10, -5, -4, -7, + -9, 4, 11, 5, 4, 3, 3, 8, 3, -6, 0, -5, 3, 2, -1, 11, 2, -4, -6, -3, -4, -1, -4, 3, 1, 3, 9, 5, 16, 3, + 1, 3, -5, -2, -3, -1, -2, -1, -10, -2, 4, -1, -4, 1, 7, -5, -1, -1, -3, -1, 4, -10, -1, 0, 4, 2, 1, -2, 0, 7, + 5, 3, -2, -1, 1, -6, -9, -8, -10, -2, 4, 6, 3, 3, 0, -1, -2, 7, 3, 0, -4, 2, 3, -2, 2, 12, 3, 0, 1, 9, + 1, -3, 1, -2, -10, 4, 5, 4, 2, -3, -6, 0, -2, 7, 10, 3, 7, 4, 0, 1, -7, -9, 2, 2, 1, -6, 8, 9, 4, 1, + 8, 4, 2, -6, 1, -8, -2, -16, -2, -6, 7, 10, -6, 2, 10, 7, 6, 2, 6, 7, -5, 10, -5, -1, -5, -1, -2, -5, -1, 1, + -11, -9, -6, -8, -9, -6, -10, -8, -4, -3, 4, 5, 4, -2, -5, 0, 3, 2, 5, 5, 4, -5, -6, -7, 5, 1, 0, -4, 0, 0, + 2, -3, 1, 3, 6, 3, -4, -5, 0, 4, 6, -1, 0, 1, 5, 0, 5, 0, 2, -4, -1, 1, 2, 4, -2, 1, -5, 1, 0, 2, + -3, -4, -1, 2, 0, 7, 10, 4, 0, 3, -6, -5, -4, 5, -1, -2, 3, 1, -5, -3, 4, 2, 8, 5, -3, -2, 2, -7, -7, -7, + 2, 4, -3, -5, 10, 11, 8, -5, -3, 2, 0, -2, -5, 1, -2, -3, -5, 1, -5, 4, 5, 0, 6, 7, 1, 7, 3, -1, -3, 0, + -3, -5, -5, -5, -2, 10, 1, -6, 0, 6, 2, -7, -6, -5, 15, -3, 3, -2, 3, -1, 1, 8, -4, -2, 4, -1, -3, 0, -5, -3, + 4, -1, 3, -4, -8, -16, -3, 4, 5, -4, 10, 4, -9, 1, -7, -2, 5, -3, 4, 12, 1, -6, -5, -3, -7, -6, -9, -7, -12, -1, + 1, 12, 8, 12, 5, 5, 5, -4, -1, -2, -4, -3, -1, -5, 2, 5, 8, -1, 4, -1, 0, -5, -3, 4, 5, 1, -3, -6, 2, 1, + -1, 2, 3, 1, 2, 13, 1, 4, 5, -4, -9, 1, -3, 2, 3, 4, 3, 7, -2, -4, -3, -2, 3, 9, 8, 0, -2, -2, 6, 2, + 2, 0, -1, -1, 2, 8, -2, 7, 6, 2, 1, 0, -6, -5, 0, -3, 4, 2, 7, 6, 2, 0, -8, 8, 8, -8, 4, 10, 7, 10, + 8, 2, 3, 1, -1, -2, -5, -2, -10, 0, 5, 8, -1, 12, 3, 5, 3, 11, -5, -1, -8, 2, -3, 8, -5, 0, -3, -8, -13, 3, + -1, 7, -9, -1, 0, -10, -13, -9, 4, 0, 8, 2, 0, 5, 2, -1, -2, 3, 0, 1, 3, -2, -1, 1, 3, 4, -1, 3, 1, -1, + -2, -2, -7, -4, 1, -1, 0, -1, 1, 4, 0, -5, -1, 7, -2, 1, 0, -3, 1, 6, 5, 0, 3, -2, -2, -1, -1, 0, -3, 0, + -2, -6, -4, 2, 9, 9, 3, -2, -6, -4, -1, -3, -2, -5, 1, -5, -6, 3, 3, 0, -3, 5, 8, 6, 2, -2, -4, -4, -2, -3, + 3, -4, 4, 4, 4, -5, 4, 9, 2, 9, 3, 0, 0, 8, -2, 5, 1, -4, 2, 4, -5, -1, 0, -1, -1, 3, -5, 4, -2, -1, + -2, 6, -2, -1, 7, -6, -1, -3, -4, 0, 6, 1, -8, 2, -1, -5, -7, -6, -9, 10, 4, -2, 0, -5, -1, -8, -6, -1, -8, 0, + 6, -16, -1, -6, 3, -4, 3, 3, -6, -5, -8, 0, 8, -6, 5, 1, 7, -3, 8, -4, -6, -8, -6, -4, 3, 4, -11, -3, 6, 0, + 1, -1, 7, 0, -4, -4, 2, 15, 10, 0, 4, 2, 10, -3, 12, -10, -3, 1, -4, -2, 2, 5, -1, 4, 7, 5, 5, 1, -10, -8, + 2, 0, -3, 8, 1, -5, -3, -4, -5, -4, -2, -4, 1, 5, 0, 1, -4, -3, -7, -4, -7, -5, 1, -1, 2, -10, -4, 1, 9, 4, + 7, 1, 4, 2, -4, 3, 4, 5, 0, 10, 4, -1, 6, -4, 3, 11, 2, -4, 10, 3, -4, -3, -2, -1, -3, 2, -1, -8, 1, -5, + -1, -1, 3, -7, -3, 11, 1, 2, 5, 5, 2, 0, 5, 11, 7, 11, 9, 6, 7, 2, -8, -1, -4, 6, 4, 1, 0, -12, -13, -15, + -13, -17, -16, -9, -7, -10, 7, -14, 5, 0, -1, 5, 4, 8, -6, -10, -5, 0, 4, 2, 7, 3, 6, 2, -2, -3, 2, -3, -1, 2, + 0, -2, 0, 3, 0, 4, 2, 4, 2, -1, 2, 7, 8, 2, 0, 3, 0, -8, -2, -5, -5, -4, -5, -4, 5, 11, 1, -4, 2, 2, + -2, -2, -2, -7, -5, 6, 2, -4, 1, -4, -1, -4, -1, 0, 1, 1, -2, 3, -3, 1, -5, -3, 3, 3, 8, 6, 0, 1, 6, -3, + -3, 2, 0, -2, -2, 0, -2, 2, -3, -2, 6, 5, 9, 1, 9, -3, -2, -7, -1, -3, -3, 2, -2, 5, 4, 2, 2, 5, 4, 3, + -1, -4, -1, -3, 7, -5, 3, -3, 6, 5, 2, 8, -4, -6, -4, -8, 7, -23, 6, 21, 0, 6, -8, -30, -4, 15, 4, 0, -3, 4, + 10, 2, 2, -7, -3, 3, 3, -1, -5, -1, -1, -3, 4, -3, -1, -13, -1, -3, 2, 0, 5, 1, 3, 8, 2, -2, 3, 0, -5, 4, + 2, -4, 2, 2, 4, -2, 5, -6, -2, -1, 0, 3, 7, 5, 2, 4, 1, 5, 5, 44, 6, -1, 7, -5, -5, -5, 4, -4, 9, 13, + 0, 2, -6, -3, -3, 3, -5, -1, 5, 1, 5, 6, -5, 8, -2, -3, 2, 4, -1, -4, -3, -1, -5, 0, -10, -11, -2, 3, 6, -4, + 2, 10, 3, 7, 8, 12, 3, 9, 8, 0, 8, 12, 6, 8, 17, 3, -2, 4, 5, -4, 0, -3, -5, 12, 5, 11, 4, -1, 12, 18, + 1, 3, 5, -5, -11, -16, -10, -12, -19, -26, -23, -13, -12, -10, -17, -10, -4, -1, 5, 14, 17, 0, 10, 26, 11, 19, 21, 10, 12, 11, + 3, 3, -8, -11, -18, 0, -8, -15, -7, -11, 13, 2, -9, 0, 6, -7, 4, 15, 8, 15, 4, 0, 1, 0, 1, 2, 7, -1, 3, -6, + -6, -1, -3, 0, 7, 1, 7, 2, 3, -3, -5, 1, 4, 3, -2, -6, -3, 0, 1, 1, 0, 3, -3, 2, 3, -1, -5, -2, 3, 1, + 6, 4, -2, -4, -1, -5, 0, 5, 2, -2, -3, 2, -2, -2, -3, -6, -8, 4, 7, 5, 2, 7, 3, 5, 3, -2, 3, -1, 0, 1, + -2, 1, -8, -13, -10, -8, 0, -2, 7, -4, -3, -9, -1, -4, -1, 5, 6, 5, 1, -2, 8, 11, 2, 6, 5, 8, 10, 2, -4, 0, + -4, -6, -1, -1, -4, 4, 6, 3, 1, -3, -1, -7, -11, -2, 3, -4, -1, 5, -2, 11, -46, 15, -53, 36, 2, 35, 6, -5, -31, -10, + 30, 31, -3, 0, -6, 1, 0, 3, -6, 4, 11, -5, 2, -4, 5, 1, -3, 3, 14, -5, -7, -15, -3, 1, -4, -6, 1, -3, 2, -1, + 1, -3, -4, -4, 0, -5, -12, -5, 3, 0, -6, -1, 5, -10, -10, -6, 3, -2, 2, -10, -2, 2, 5, -10, 79, -8, 2, 1, -2, -12, + -14, -7, -2, 8, 0, 1, -1, -2, -7, -2, -1, 6, 10, 9, 10, -1, 3, -4, 0, -1, 4, 6, 13, 17, 8, 2, -8, -17, -16, -13, + -10, -2, 0, -5, -17, -17, -29, -20, -20, -14, -8, -5, -3, 6, 6, 7, 1, 2, 2, 5, 1, -6, -7, -8, -11, -1, -4, 10, 18, 16, + 4, -2, -5, 5, -1, 1, 4, 12, 12, 9, -2, -16, -29, -29, -27, -18, -16, -10, 6, -8, -5, -14, -14, 5, 2, 1, 14, 20, 34, 27, + 27, 31, 26, 21, 24, 21, 5, -16, -31, -45, -33, -33, -34, -22, -24, 10, -4, -5, 11, -10, 27, 2, 33, 50, 54, -6, -7, -4, 0, -3, + 2, 2, 3, 4, -1, 0, -2, -5, -5, 5, 3, 4, 7, 12, 10, 11, 8, 1, -2, -4, -5, -5, -5, -10, -12, -7, -11, -8, -3, -4, + -7, -5, -1, -8, -6, -17, -14, -16, -20, -18, -12, -21, -20, -14, -3, -4, 0, 10, 10, 7, 13, 10, 16, 14, 19, 19, 18, 25, 32, 24, + 25, 24, 20, 27, 30, 31, 31, 29, 20, 5, -14, -34, -55, -61, -63, -59, -50, -41, -27, -7, 1, 8, 20, 35, 32, 32, 38, 38, 46, 37, + 22, 24, 21, 16, -1, -29, -63, -83, -106, -120, -113, -91, -56, -27, -6, 11, 8, 2, 20, 33, 33, 45, 45, 42, 43, -51, 31, -127, 73, -20, + 59, -48, 26, -67, -20, 28, 73, -15, -9, -46, 39, -4, -17, -12, -20, 3, 0, -6, -6, 10, 9, 14, 13, 4, -13, -5, -2, -2, -17, -6, + -4, -6, -5, 1, 10, 13, 0, -2, -5, 1, -11, -11, -7, -3, -12, 1, 4, 2, 3, 7, -3, 1, -5, -1, 2, 1, 4, 10, -1, 56, + -4, -2, -4, -6, -3, -4, -12, -6, 2, -2, -4, 1, -4, -3, -2, 2, 0, 2, 5, 1, 0, 0, 1, -7, -2, -1, 2, 4, -4, -2, + 1, 1, -2, -5, -5, -2, 0, 1, 1, -1, -5, 0, 0, 2, -1, 4, 5, 4, 8, 4, 3, -9, -2, 6, 3, 3, 3, 8, 3, 1, + 1, 1, -1, 4, 8, 5, 10, 9, -2, 1, 7, 7, 2, -2, -2, 1, 5, 7, 5, 2, -7, -3, -7, 2, 4, 5, 1, -2, -1, 0, + 8, 6, -2, -7, 5, 6, -2, -7, -3, 2, -4, -10, 1, -6, -11, -7, -5, -3, 6, 3, -5, -1, -1, 7, 5, -4, 1, -4, -9, -4, + 2, 4, 0, 0, -1, 0, 3, 3, 3, 2, 0, -2, -3, -4, -3, -1, 3, 3, 6, 3, 3, 2, 3, 5, 4, 3, 6, 2, 5, -4, + 1, -2, -6, -4, -3, 0, -6, -5, -1, -6, -4, -5, -1, -1, 0, 4, 5, 2, 5, 4, -4, -7, -4, 1, 3, 1, 5, 4, 0, 0, + 0, 1, 6, 5, -2, -5, -2, -4, 0, -1, 0, -3, 1, 5, 1, 0, 0, 5, 5, 9, -2, 0, 6, 4, 7, 3, 8, 7, 5, 2, + 3, -1, 4, -4, 2, -4, -1, -2, 5, 4, -1, -12, -2, 0, -7, 4, 6, -3, 1, 3, 3, 4, -3, -1, 1, 1, -4, 0, -1, 11, + 8, 23, -5, 0, 0, 18, 4, 7, 0, 1, -2, -13, 6, -4, -1, -9, -1, -3, 4, 6, 7, 3, -1, 3, -6, -7, 3, -4, -3, -3, + -10, -6, -5, -1, 0, 9, 12, 3, 4, 5, 4, 6, 6, -1, 4, 7, -1, 4, 6, 0, -6, -8, 7, -4, -1, -5, -3, 4, -6, 2, + 2, -4, -3, -2, -4, -3, -2, -7, -11, -5, -1, -4, 7, -3, -4, 1, -2, -6, -1, 2, -6, -6, 2, 1, 4, -7, -5, -6, -2, -1, + 1, 0, -5, -4, -4, -3, -2, 0, 4, 5, -2, 2, 2, 4, -2, -1, -4, 2, 1, -1, -3, 3, 3, -8, -3, -2, -4, 3, 0, -7, + 0, 4, -1, 3, 5, 1, -2, 4, 2, 3, -1, -1, 2, 3, -2, 10, 6, 0, -2, -7, -3, -1, 9, 8, 4, -3, -2, 1, 4, 1, + -3, 3, -3, -2, 0, 13, 12, 6, -2, 3, 4, -4, -4, 7, -3, -6, -3, -8, 4, -8, -6, -3, -2, 3, 0, -4, -4, 2, 0, 7, + 2, 7, -1, -1, 0, 1, -4, -4, -5, -3, 3, 1, 3, 2, -1, -1, 2, -1, 4, 3, 5, 9, 8, 3, 5, 5, 1, -2, -1, 4, + 0, 1, 1, -2, -4, -5, -3, -1, 2, 0, 1, 2, -3, 0, 5, -2, -2, -3, -3, -2, -4, -6, -1, 0, 4, 3, 2, 0, 3, 0, + 1, 6, 2, 1, 4, 5, -4, -3, 4, 9, 3, 0, 2, -5, -7, -5, -10, -7, -7, -1, -1, 1, 4, 5, 9, 8, -2, 7, 4, 2, + 1, 5, -4, -5, 1, 7, 1, -1, 1, 0, -5, -5, 0, 6, 8, 1, 3, -2, 1, 0, 3, 2, 0, 5, 4, -1, -9, 0, 1, 1, + 1, -2, 3, -1, 3, -1, 15, -7, -8, -9, 7, 0, 3, -7, 6, 3, -5, -3, 1, 2, -1, -5, -1, 6, 4, 5, 5, -4, -2, 0, + -12, -8, 3, 1, -9, -1, -1, -6, -7, -8, 2, -5, 0, 8, 0, -3, -1, -5, -3, 6, 0, 3, 5, 14, -2, 5, 4, 7, 0, 3, + 2, 4, -2, 5, -1, -2, -1, -3, -7, -4, 3, -3, -6, -6, -1, -10, -7, -6, 4, -2, 3, 5, 0, -3, 2, -4, -6, -3, -1, 7, + -4, -4, 1, -2, -4, 1, -3, 2, -4, -4, -8, -5, -7, 3, 1, 2, -3, 1, -3, -7, 0, -1, -6, -3, -2, 3, -2, -2, -2, 2, + 4, -2, 2, 4, -6, -11, -5, -4, 1, 3, 7, 6, -2, 2, 8, 9, -5, 0, 4, -1, -4, -3, 3, -1, 1, -11, -5, -2, -3, 1, + 1, 2, 1, 4, -1, 0, -7, -7, -7, -2, 3, 5, -2, 6, 4, 8, -1, 2, 0, 6, 3, 1, -5, -2, -2, 1, -1, -4, -3, 0, + 0, 6, 5, 9, 13, 7, 5, 6, 0, -5, 6, 10, 9, 10, 6, 6, 0, 1, -1, 0, -3, 1, 1, 1, -4, 0, -3, -5, 3, 0, + 4, -2, -3, -4, 1, 2, -1, -3, 1, 3, -1, 2, 3, 2, 8, 10, 5, 0, 3, 2, 3, -2, 0, -5, -3, -4, 2, -2, 2, 0, + 0, -5, -6, 5, 0, -2, 1, 0, -5, 3, 0, -1, -5, -1, 2, 2, 5, -1, -2, -3, -8, -1, 2, -1, 0, -2, 7, 5, 3, 1, + 4, 2, 0, -5, -4, -3, -4, -5, -5, -5, 3, 5, 1, 5, -2, -1, -6, -5, -3, -1, -2, 4, 0, 1, 2, 3, 2, -2, -2, -1, + -1, 2, 8, 6, 1, -3, 1, 1, -2, -4, -13, 15, 1, 5, 6, 9, -4, -6, 3, 4, 6, -11, -1, 5, -5, -9, 2, -4, -5, 5, + 13, -11, 1, -6, -7, 1, 9, 11, 4, 4, 0, 0, -3, -6, -4, 5, 6, 11, 9, 2, 3, -2, -7, -3, 0, -7, -8, -5, 5, -3, + 6, -1, -1, -4, 4, 10, 5, 0, 10, 1, -8, 2, -1, -4, 11, 9, 8, 2, -1, -7, 0, -8, -2, 1, 3, 2, 6, 1, -4, -4, + -3, -1, 6, 2, 5, 10, 3, 8, 7, 3, -2, 4, 6, 0, -4, -2, -2, -4, -10, -6, -8, -2, -6, -5, -11, -8, -8, -9, -7, -7, + -7, -2, -5, -10, -2, 3, 3, -2, 2, -2, -9, -5, 0, -5, -4, 0, -2, 1, 2, -2, 1, -2, 1, 0, 4, 3, 5, 8, 1, 0, + -8, -5, 3, -5, 2, 4, 10, 10, 14, 8, 8, 10, 6, 3, 10, 8, -2, 0, -3, -1, -4, -5, -10, 2, 6, -6, -5, -6, -7, -7, + 0, -2, 3, 9, 2, 0, -6, 4, 8, -3, -1, 4, 4, -1, -5, 10, 9, 3, 2, -1, -1, -2, -1, 3, 1, 4, -2, -5, -1, -8, + -7, 1, 2, -2, -2, -4, 2, 4, 0, -4, -4, -4, 3, 4, 0, 3, -1, -3, -9, -3, -4, -1, -4, -1, 0, -2, 4, 5, -1, -3, + -1, -2, 0, 2, 3, 1, 2, 3, 0, 8, 3, 4, 3, 3, 5, 6, 0, 3, -2, 1, -1, 1, -1, -2, -5, 1, -4, 2, 0, 0, + -1, 2, 7, -1, 5, -4, -5, -1, -3, -1, 0, -3, -2, -6, -1, -2, -6, -2, 0, -1, -5, 4, 4, 1, 1, 0, -4, 1, 4, 2, + 3, -3, -3, 6, 0, 4, -6, 1, 1, -2, 2, 3, 1, 0, 4, -36, 33, 1, 20, 2, 26, -7, 7, -11, -6, 7, -5, 15, 17, 5, + -4, -5, 1, -1, 11, 9, -7, -1, 4, -2, -5, 0, 3, 0, 1, -7, 1, 7, -5, -8, 1, 1, 3, 9, 2, 1, 3, -2, -1, 4, + 1, -4, -7, 3, -3, -1, 0, 5, -1, 3, 2, -1, 7, 5, -2, 0, 2, -8, -16, 31, 9, 8, 8, 6, 4, 6, 2, 5, 6, 4, + 8, 5, -3, -3, 3, 6, 2, 1, 2, 2, 7, 6, 6, 3, 5, -1, -2, -3, -2, -1, -5, 3, -1, -1, 0, 0, 0, -1, 0, 2, + 1, 2, -1, 6, 3, 1, -8, -10, -4, -9, -5, -3, -3, -14, -13, -4, -5, -6, -9, -6, -1, -5, -2, -3, 0, 0, -2, 1, 3, 14, + 8, -1, -3, 6, 4, -1, 0, 1, -4, -4, -6, -10, -11, -7, -15, -8, -8, -5, -8, -3, 2, -2, -6, -3, 3, -6, -1, 3, 0, 5, + -4, -3, -12, -4, -3, -4, 2, -3, 2, 4, 1, -4, 4, 7, 9, 13, 10, 11, 10, 16, 1, 0, 4, 3, -1, 0, 2, 1, 3, 3, + -3, 4, 0, -2, -4, -6, -1, 3, 1, 4, 5, 1, 5, 0, -1, -3, -6, -5, -4, -3, -4, -2, -3, -3, 8, 11, 4, 4, 6, 4, + 9, 8, 4, 2, 3, 3, -2, -3, 1, 3, 1, -1, -2, 4, 4, 3, 3, -4, -5, -3, -6, -6, -3, -1, 1, 2, 3, -2, 6, 10, + 14, 5, 5, 3, 4, 5, -2, 3, 4, 0, 0, -1, 3, 3, 0, 3, 4, 3, -5, -4, -5, -8, -5, 2, 3, 6, 4, 0, -3, -3, + -1, -4, -2, 1, -9, -6, 2, 5, 2, 8, 9, 5, 2, 4, 0, -2, -3, -1, -5, -9, -67, 74, -16, 59, 5, 55, -42, 30, 6, 2, + -7, 2, 27, 14, -3, -5, -6, 2, -5, 3, 7, -17, -4, 1, 5, -4, 0, -7, -9, -10, -10, 0, -14, -3, -1, -5, 3, 3, -1, -9, + 0, 3, -5, 0, 0, 0, -14, -13, -6, -4, -7, -7, -3, -3, -5, -2, -16, -4, -6, -8, -2, -2, -14, -20, 54, 10, 8, 1, 5, 4, + 11, 9, 13, 5, -5, -7, -12, -15, -6, 1, 9, 10, 8, 9, 2, -1, 5, 6, -1, -3, -9, -6, 3, -8, 1, 3, 6, 6, 2, 1, + -5, -9, -11, -7, -7, -10, -5, -2, 0, 1, -2, -5, -4, 4, 5, 8, 5, 4, 5, 7, 6, 3, 0, 0, 4, -9, -16, -22, -21, -9, + -8, 1, 15, 18, 21, 14, 11, 18, 16, 19, 25, 22, 32, 27, 20, -7, -18, -25, -25, -26, -25, -16, -12, 5, 3, 6, -3, -6, -5, 4, + -2, -6, -6, 1, -9, -4, -4, 7, -7, 1, -8, 8, -4, -3, 2, -2, 5, 5, -6, 7, 1, 10, 1, 0, 31, 1, -3, -4, -2, 2, + 2, -2, 0, 0, 6, 2, 0, 4, 2, 2, 3, 3, -3, -2, 0, 4, 6, -2, 0, 1, -2, 5, 2, 3, 6, 1, 3, 1, 6, 3, + 8, 11, 13, 12, 10, 10, 6, 7, 4, 2, -1, -5, -9, -10, -13, -14, -11, -5, -4, 1, 1, 4, 0, 0, 1, -3, -13, -15, -15, -18, + -14, -11, -6, 5, 16, 21, 25, 33, 36, 39, 36, 33, 32, 27, 8, -22, -45, -60, -67, -67, -59, -46, -27, -4, 6, 16, 12, 8, 12, 5, + 0, -6, -5, -1, -3, -4, 3, 9, 9, 2, -9, -23, -30, -33, -26, -26, -13, -9, 0, 4, 1, -2, -6, -12, 9, -74, 91, -90, 38, -63, + 69, -127, 34, -25, 2, -20, -6, 60, -14, 8, -8, 0, 7, 26, 13, 1, -12, 18, 6, 13, 14, 14, 2, 2, 1, -7, 0, -2, -6, -9, + 2, 0, 16, 8, 5, 4, 11, -2, 10, 18, 2, -4, 4, 9, 5, -7, 4, -3, -6, -6, -11, 5, -1, -2, 1, -5, 6, 1, -4, 44, + -6, -7, -4, -2, -1, -1, -11, 1, 4, 2, -6, -7, -2, 1, 6, -3, -2, 0, 1, 1, 1, 1, -8, -8, -6, -6, 0, 2, -2, -1, + -4, 11, 1, -11, -5, -7, -7, -5, -3, -7, -5, -7, -7, -7, -2, -3, 2, 5, 3, 7, 1, 0, -4, 4, 4, -3, -9, -8, -8, -5, + -8, -1, 3, 1, 8, 4, -12, -7, -11, -4, 8, -1, 3, 10, 10, 1, 8, -2, -10, -2, 4, -1, 6, -6, -2, 10, 11, 1, 4, 11, + 6, -12, -4, -2, 2, -7, -2, -1, 5, -2, -3, -3, -4, -4, -4, -7, -3, -2, -4, -7, 4, 0, 2, -7, 12, 2, 0, 9, 11, 20, + 4, 0, 0, 1, 2, 5, 3, 2, 8, 6, 6, 4, -2, 2, -2, -2, -7, -6, -8, 2, 5, 0, 2, 1, 1, 5, 2, 7, 3, -1, + 1, 3, 10, 4, 3, 3, 6, 8, 3, 3, 1, 0, -6, -6, -6, -1, -1, -2, 0, 2, -1, 4, 3, 3, -2, -3, -3, 8, 2, -1, + -2, 6, 7, 7, 11, 5, 1, -1, -3, -6, -3, -3, -6, -2, -4, 1, 0, 2, -8, -2, -1, 2, -5, -8, -1, -2, -5, -6, -6, 3, + 6, 2, -1, -7, 1, 0, -3, -6, -8, -6, -7, -3, 6, -2, 2, 2, 2, 6, 3, 7, -9, -6, 2, -4, -1, 6, 4, 8, -12, 1, + 1, 8, 9, -7, -11, 1, 4, 0, -7, -10, -20, -5, -4, 5, -7, -1, -9, 5, -2, 2, 3, -5, 3, 6, 16, 10, -7, 4, -6, -3, + 5, 0, 7, 7, 1, -3, 3, 2, -10, 2, -2, -7, 0, 1, 1, 6, 4, -4, 0, 12, 0, -5, -7, 3, 3, 10, 4, 9, 9, 12, + 0, 10, 8, 14, -21, -6, -2, -4, 3, 0, -4, -8, 2, 6, 0, -9, -2, -4, -7, -6, -2, 1, 2, -2, -9, -5, 0, 2, 4, -14, + -13, -3, -4, -2, -4, -4, -1, -5, -1, 2, 0, -2, -3, 2, -2, -5, -8, -7, -3, 1, -6, -4, -11, -4, -4, -1, -4, -2, 4, -2, + -7, -2, -2, 4, 1, 2, -2, 1, 2, -2, 3, 3, -1, 0, -4, -9, -1, -4, 3, 13, 3, 9, -8, -2, 3, -1, 4, 3, -4, -6, + 3, -2, 2, 5, 7, 5, -12, -5, -14, -6, -6, -1, 2, 5, 2, 1, -3, 1, 8, 5, 8, 3, -13, -14, -5, 1, 2, 8, 3, 3, + -7, -1, 7, 7, 7, 3, -2, 2, 0, -3, 1, -6, -5, 0, -1, 5, 7, 1, 5, 3, 3, 1, 3, 4, 2, 6, 8, 4, 5, 7, + -2, -5, 0, -6, -4, -4, 0, -1, -9, -4, -7, 3, 0, 2, 0, 3, 5, -1, 0, 5, 7, 4, 0, -4, 2, 3, -2, 5, 5, -3, + -3, -6, 1, 1, -3, -4, 0, 3, -4, -6, -2, -1, -1, 3, 1, -1, 4, -5, 2, 6, -2, 1, -3, -6, -4, 3, -2, 0, 1, -6, + -1, -3, -1, 3, -3, 8, 0, 0, -3, 2, -2, -1, -7, -5, 1, 4, 0, -1, 4, 3, 8, 0, 2, 0, -2, 1, 2, 0, -1, -2, + 0, 0, 6, -5, 1, -2, 14, 18, 4, 0, 12, 3, 5, -5, -4, -12, -4, -6, -11, 10, 5, 3, -6, -1, -4, 2, -3, -16, 13, 10, + 5, -16, 0, -6, -6, 0, -2, -7, -7, -1, -2, -7, 2, -6, -8, 0, 3, 12, -1, 2, -7, -2, 0, 1, 6, 2, -12, -3, -4, 0, + 5, 0, -7, -2, 1, -8, 1, -4, -3, -9, 0, 1, 0, -1, -4, -7, -8, -14, -6, -4, -8, -4, -13, -11, -9, -2, -8, -7, -1, -1, + 1, -3, -2, -1, -1, -1, -2, -4, -2, -2, -2, -3, -9, -1, 0, -3, 1, -4, -7, -7, -4, -2, -5, -11, -8, 3, 2, -6, -4, -5, + 5, -2, -4, 0, 7, -4, -3, 3, -1, 10, 11, -2, 0, -5, -6, -1, -1, -3, -8, -1, 1, 1, -4, 0, -2, -6, -4, -8, -2, -2, + -8, 6, 4, 0, -8, -6, 2, -6, 0, -3, 5, 5, 3, -2, 1, -1, -1, 9, 3, 7, 0, 1, 11, -1, 0, 0, 0, 0, 2, 2, + 8, 6, 0, 3, 7, 0, -5, -5, 2, 1, 2, -2, 4, 1, -2, -2, -5, -1, -7, -6, 1, 6, 8, 1, 3, -1, 5, 10, 8, 3, + 0, 2, -1, 0, -10, -9, -10, -2, -4, -5, 4, 4, 4, 1, 4, 1, 11, 5, 0, -1, 6, -1, -5, -3, 5, 4, -1, -1, -3, -5, + -5, 1, -4, 3, 0, -4, -7, 3, 0, -6, 5, -1, -4, -7, -8, -6, -1, 0, 6, 10, 10, 5, 2, 2, 5, 5, -4, 1, -1, -4, + 4, 5, 9, 4, -4, 2, 5, 4, 5, 2, 0, -3, 0, -4, 0, 4, -2, 6, -7, 0, -3, -4, 3, -4, -6, -4, -8, 0, -2, 8, + 0, 2, 1, -5, -3, 0, -1, 9, 6, 6, -2, 10, 16, 0, 13, -9, 2, 7, -5, -11, -5, -2, 4, -4, 3, -9, 0, 5, -1, 5, + -5, 11, -5, 4, 10, 6, -1, 2, -12, 0, -8, -10, -8, 6, 13, 5, 2, 1, 0, 4, -1, -6, -1, 10, 9, 5, 3, -4, 2, 3, + -5, -1, 2, 4, 0, 5, 1, 5, 7, 1, 5, 2, 2, 9, 12, 6, 4, 5, 3, -1, -1, -1, 0, 6, 3, 0, -4, -5, 2, -6, + -3, -2, 6, 1, -3, 0, 0, -5, -8, -11, -3, -7, 0, 3, 2, 4, -9, -6, 0, -4, -3, -4, 6, -2, -8, -6, 5, 10, 1, -3, + 6, 7, 8, 3, -3, -4, 4, 1, 4, 1, -2, -1, -6, -3, 1, 5, -2, 9, 0, 1, 5, 9, 10, 5, -2, 1, -5, -5, -7, -1, + -4, 8, -7, -7, -6, 3, 2, 4, -5, 0, -2, -3, -9, 1, -6, -1, -7, -1, -2, -9, -13, -12, 0, -6, 4, -3, -3, 2, 0, -2, + 3, 1, -4, -1, 11, 9, 9, 3, 1, -2, 8, -5, -2, -2, 2, 5, 3, -4, -4, 0, -2, -2, -3, 1, 0, 1, 2, 0, -3, 0, + -3, 3, 5, 3, 1, 4, 4, 11, 5, -3, 0, 1, 2, -4, 1, -5, -4, -9, -2, 0, -3, 2, 2, 0, 0, 0, -2, -2, -3, 1, + -2, -1, 3, 5, 8, 8, 6, 9, 7, 0, 2, -6, -1, 0, 4, 1, -4, -3, -6, 0, 8, 6, 3, -2, 3, -3, 3, -2, 0, 1, + 1, 1, -6, -2, 1, 5, 3, -1, 5, -2, -3, -2, -4, -9, -2, -5, -3, 5, 3, 7, 7, 9, 2, -12, 1, 4, 2, 7, 2, 1, + -7, -1, 7, -3, -2, -2, -2, -3, 1, 8, 4, -5, 0, 0, 5, -7, -18, 14, 5, -16, -11, 9, 7, -1, -2, 11, 0, 6, 1, 1, + -16, -16, -9, -13, -3, -9, 2, -7, -3, 11, -5, -8, -1, 0, 3, -1, 9, 8, -1, 3, 4, 9, -2, -3, 3, -5, -1, 1, 5, -2, + -1, -1, 0, 7, 11, 1, 4, 1, -2, -5, -1, 3, -7, 0, 0, -7, -4, -4, -8, 35, -10, -11, -2, -7, -1, 2, 6, 3, -7, -1, + -5, -5, -5, -7, -5, 0, 3, -3, 2, 10, 9, 12, -5, -15, -11, -5, -2, -7, -1, -5, 5, 0, -6, -8, -5, -12, -7, -7, -2, -5, + -5, -2, 3, -6, -5, -10, -5, -2, 9, 9, 9, 11, 4, -14, -4, -4, 2, -5, -6, -8, -3, -8, 1, 2, -2, -2, 6, -4, -7, -7, + -3, -4, -2, 7, -1, 7, 12, 2, -2, 11, 3, -4, -3, 1, -4, -4, -1, 6, -1, 0, -10, 1, -3, 6, 4, 9, 4, 3, -5, -10, + -8, -2, -6, -8, -14, -17, -15, -3, -1, 2, 0, -2, -10, 2, -7, -10, -2, -11, -6, -10, -5, -5, -6, 1, 2, 5, 4, 7, 6, 11, + 8, 5, 5, 5, 9, 17, 7, 4, 5, 4, 2, 7, 1, 3, 2, 3, 2, 4, 3, -2, -5, 1, 4, 5, -1, 2, -2, 3, -5, 2, + -1, 3, 1, -3, -2, 1, 0, -2, 1, 7, 2, 2, -2, -1, -4, -4, -3, 5, 3, 7, 9, 3, 0, 3, 3, 4, 10, 7, 7, 2, + -3, -3, -2, 0, 0, -10, 0, 0, -2, -1, 3, 8, -1, -6, 9, 0, 0, 2, 2, 3, 2, 3, 2, -1, -7, 9, 3, 2, -4, -2, + -1, 2, 6, 5, 3, 11, 3, 8, 6, 9, 17, 14, 2, -4, 4, 6, 4, 4, 12, 9, -7, -50, 36, -4, -28, -16, 28, -5, -28, 19, + 18, -14, 12, 24, -2, -3, -3, 7, -4, -2, -12, -10, -3, 3, 8, 11, 11, -12, 0, 17, 2, 7, 3, -3, 2, 7, 2, -12, -3, 4, + 10, -11, 2, 12, 3, -6, -2, -1, -1, 6, -4, 3, -1, -2, -7, -15, -4, -6, -5, -3, -10, -7, -9, -13, 65, -19, -16, -14, -11, -5, + 6, 6, 2, -7, -10, -4, 6, 14, 17, 10, 7, 0, -3, -5, -6, -6, -2, 2, 0, 4, 7, 14, 4, 9, 6, 1, 0, -2, 12, 3, + 8, 2, -2, 3, 14, 11, 9, -2, -10, -19, -27, -26, -23, -17, -11, -3, -2, -4, -10, -17, -10, 0, 7, 2, -4, -3, -7, -18, -27, -28, + -24, -12, 2, -4, 3, 12, 25, 16, 4, 3, 0, -1, 9, 16, 20, 13, 9, -6, -6, 4, 17, 14, 18, 3, -4, -6, -8, -8, 4, 8, + 17, 14, 12, 0, -1, -17, 8, 13, 25, 21, 25, 12, 8, -1, -8, 0, -20, -12, -9, -4, -13, 11, -13, -25, -35, -11, -9, -6, -6, -9, + -3, -4, -8, -1, -1, 5, 8, 8, 11, 9, 4, 6, 4, -1, 3, -5, -9, -7, -15, -9, -12, -3, 6, 10, 16, 10, 9, 11, 9, 12, + 11, 12, 14, 16, 9, 11, 6, -3, -10, -17, -23, -17, -12, -4, 10, 18, 24, 26, 24, 28, 26, 28, 24, 18, 8, -6, -16, -26, -34, -43, + -33, -22, -7, -4, 1, 10, 10, 5, 2, -2, -7, -6, -4, 3, 4, 7, 14, 8, 21, 27, 34, 28, 6, -21, -45, -75, -83, -75, -43, -13, + 16, 34, 36, 22, 12, 13, 26, 27, 32, 29, 24, -7, -30, -53, -75, -67, -59, -18, 13, 19, 16, -1, -25, -41, -31, -17, -105, 63, -81, -39, + -2, 58, -13, -127, 126, -20, -89, 68, 6, -5, -6, -1, -58, 22, 60, -43, -27, 1, -8, 2, -12, -19, 2, -7, -3, -5, -8, -6, 4, 3, + -9, 1, -8, -8, -7, 7, -6, 6, 2, -7, -9, 2, -5, -12, -12, -9, -11, -5, 7, -15, -9, -6, 0, -5, -1, 1, -12, -8, 8, 73, + 5, 9, 3, 12, 9, -2, 0, -3, -7, -7, -7, -2, 5, 9, 4, 5, 6, 7, 3, -1, -3, -3, -3, 1, 4, 5, -6, 0, -7, -1, + 0, -3, -4, -5, 0, -5, -2, 0, 5, 0, 7, 7, 5, -3, -4, 1, 1, 4, 4, -1, -4, -3, -3, -1, 2, -2, -2, 4, 3, 1, + -4, -1, -1, -2, -1, 2, 2, 0, -4, 2, 10, 4, 5, 2, 1, 10, 7, 6, -3, -1, 2, -3, 0, 6, 6, 10, 5, 5, 4, 2, + 3, -3, 6, 0, 7, 10, 5, 10, -2, 4, -1, 7, 9, 11, 6, 1, 1, -8, 0, -9, -6, -6, -5, -3, -2, -5, -12, -9, -7, -12, + -1, -4, -3, -4, -3, -2, -2, -1, -6, -4, -3, -1, 1, 1, 0, -1, 1, 1, 2, -2, -1, -4, 1, 1, 7, 1, 0, -1, 0, -3, + -6, -8, -4, -5, -5, -5, -4, -4, -3, -1, -2, 1, 4, -5, -5, -1, 2, -3, -8, -11, -8, -8, -8, -6, -9, -3, -3, 3, 3, -3, + -1, -2, 0, 0, 0, 4, 3, 0, -3, -5, 4, 5, 2, 0, 4, 3, 5, 5, 4, 4, 0, 2, 2, 2, 4, 3, 4, 3, 0, -1, + -6, -7, -2, -5, -2, 0, -2, 1, 0, 1, -2, 1, 4, 1, 7, 7, -1, -2, 0, -7, 3, -2, 8, 3, 3, 6, 5, 1, -1, -1, + 2, -9, 20, 5, -3, 13, 2, -11, 4, 1, 3, 2, -3, -6, -7, -3, -7, -7, -6, 0, -3, -1, 8, 2, -1, -2, -4, -12, -3, 0, + 2, 1, 0, 6, 0, -3, -8, -1, 2, -1, 0, 1, -3, -1, -1, 2, 2, -1, 2, 2, 0, -3, -5, -9, 0, 0, 1, 4, 5, 4, + -5, -2, 6, 0, -8, 5, 4, 7, 5, 4, -1, -4, 2, -1, 4, -1, -1, 3, 3, 1, 5, 2, 5, 3, 5, 2, 5, -2, 6, 6, + 5, 5, 1, -1, 1, 4, 6, 1, -4, -8, 5, 7, 5, 1, 0, -1, 0, -1, -1, -6, -1, -2, 6, 0, -2, 1, 0, -2, 0, 1, + 3, 0, -1, -3, -10, -3, -6, -3, 3, 1, -2, 0, 6, 2, 8, 6, 4, 5, 3, 0, 1, -1, -3, -2, -2, -3, 4, 0, -8, -2, + -3, -3, -10, -12, -4, -7, 1, 2, 2, -8, 0, 2, -3, 7, 1, 3, 4, -6, -1, 2, 2, -7, -4, 0, -2, 0, 1, -2, -5, -1, + 3, -1, 5, -3, 1, -8, -3, -3, 3, 0, -2, -5, -8, -8, -6, -3, 1, 1, -3, -1, -3, 2, 1, 0, 3, -1, 3, -2, -2, -4, + -1, -6, -6, -3, -8, 2, 3, -1, -3, 0, -3, 5, 3, 1, 1, 4, 1, 1, -1, 1, -1, 1, 3, 0, -5, -3, -5, -2, -1, 2, + -2, -2, 4, 2, 2, 3, 0, 3, 1, 0, 2, 0, 2, 2, 0, 4, -2, -2, -1, -2, 4, 5, -1, -4, 5, 1, 6, 7, 1, 5, + 0, -1, 2, 3, 1, 0, 1, 2, 2, 3, 1, 6, 3, 1, 0, 6, -5, -6, -5, 2, 0, 0, 2, 4, -1, -2, -2, -6, -9, -7, + -4, 0, -2, 2, -10, -4, 11, 13, -22, 8, 10, 1, 6, 13, -5, 8, 0, -1, -3, 2, -9, -4, -8, -5, -6, 1, 1, 10, 8, -3, + 1, -6, -3, 4, 2, 0, 5, 5, -1, -2, 0, -2, 3, -4, 0, 2, -1, 2, 3, 5, 6, -5, -2, 2, 3, 7, -4, 2, 0, 1, + -1, 3, 5, 2, 2, -2, 2, 10, 1, -4, -11, -14, -1, 2, -2, 3, -5, 2, -6, 1, -1, 2, 6, 8, 3, -1, 3, 2, 3, 5, + 5, 5, 2, -1, 4, 1, 2, 1, 5, 3, 5, 5, 2, 4, 2, 8, 3, -3, 4, 3, 4, -2, -9, -6, 2, 1, -6, 0, 4, 4, + 3, 0, 7, -2, -1, -6, -9, -1, -2, -1, 0, -9, -8, 0, -5, -3, -2, -5, -5, -1, 1, 8, 0, -1, 5, 3, 8, 0, -2, 2, + 3, 9, 1, 5, 1, 1, 8, 2, 8, 4, 3, -5, 4, 4, 2, -1, 7, -4, -4, -2, -2, -7, -7, -7, -2, -3, 0, 8, 1, -1, + 9, 9, 6, -4, 0, -3, 3, 1, 2, 4, -4, -7, 1, 2, 0, 2, 2, 0, -2, -1, 2, 0, 1, 1, 0, -2, 0, -1, -1, -6, + -3, -10, -11, -3, 3, 5, 2, -1, 0, -1, 1, 4, 1, 4, 5, 2, 5, 3, 0, -3, 4, 1, -5, -2, 0, -8, -5, -2, 0, 1, + 1, -1, -6, -9, -2, -3, -3, -2, -4, -1, 0, 0, 5, 0, -1, -2, -4, -4, 3, -2, 2, 3, -4, -5, -3, 1, -5, 4, -3, -2, + -2, 7, -2, -1, 0, 4, 2, -1, -3, -8, -1, -1, -3, 0, 0, -3, -5, 3, 1, 1, 0, -1, -7, -5, -2, -7, -7, -1, 4, 1, + 1, 6, 4, 4, 1, 2, -3, -4, -3, -4, 2, 24, 3, -21, -3, 4, -10, -12, 4, -4, 6, 2, 0, 8, 2, -10, -4, -6, -4, -4, + 2, -6, 1, 6, -2, 5, -5, -2, -1, -5, -1, -5, -5, -8, 0, 1, -6, 4, 2, -2, -1, -1, -1, -9, 1, -5, -2, -9, -3, -1, + 1, -1, -2, -3, -3, -7, 2, -2, -2, 0, 0, 3, 0, -9, 1, -7, -4, 1, 6, 5, -3, -7, -6, -3, -3, -4, -9, -7, 0, 1, + 5, 3, -5, -8, -5, -6, 2, -11, -19, -12, -7, -1, 1, -2, -4, -4, 0, -5, -3, 2, 5, 2, 10, 7, 10, 9, 6, 6, 7, 8, + 5, -1, -2, 3, 3, 0, -3, 2, -1, 0, 2, -1, -5, 7, 5, 5, 8, 1, 7, 0, -4, -4, -2, -8, -1, -3, -5, -6, -3, -2, + 3, 6, -2, -8, 2, 10, -2, 0, -1, -5, 1, -7, 0, -7, -6, -3, -3, 4, 0, -3, -2, -2, 8, 8, 6, 11, 4, 2, 0, -1, + 2, 3, -3, 2, 5, 4, 2, 10, -1, 6, 9, 11, 1, -9, -5, -8, -5, -4, -1, -3, 2, 0, 3, 3, 1, 4, 0, 6, 5, 5, + 5, 4, 5, 1, 1, 5, 1, 2, 3, -4, -2, -6, -3, -3, -2, -3, -2, -3, -7, -2, -2, -3, -2, -3, -2, -3, 3, 4, 4, 0, + 3, 1, 2, -1, -1, 4, 0, 4, 5, 2, 1, 3, -4, -3, 5, 7, 8, 7, -3, -3, -1, -1, -2, -1, 3, 1, 1, -2, 0, -1, + 1, 3, 6, 3, 4, -3, -2, 1, -3, 1, 2, 1, -3, 1, -7, -7, -4, 2, -3, 3, 3, -2, 4, -3, -1, 1, -4, -1, -4, -3, + 5, -3, -5, 5, 1, 3, 5, -2, -6, -6, 4, -1, 1, 0, 0, 1, 26, -3, -20, 1, 14, -24, -18, 7, -11, -10, 11, -2, 3, 3, + -5, 7, 2, 4, 1, 0, -1, 3, 5, -1, 7, 0, -7, -7, 1, 9, -4, -3, 1, -3, 5, 2, 2, 7, 2, 12, 1, 2, 4, 5, + -2, 1, 0, -5, 2, 8, 5, 5, 8, 9, -1, 11, 6, 6, 12, 6, 8, -2, 4, -2, 7, -3, -1, -1, -3, -3, -3, 2, 6, 4, + -8, -10, -11, -4, -2, 13, 11, 6, 1, 4, 6, 1, -2, 3, 11, 5, 3, 0, -4, 0, 0, -3, -11, -5, 7, 6, 6, 9, 5, 12, + 13, 11, 12, 20, 10, 12, 16, 13, 15, 13, 14, 8, 3, 5, 12, 3, 2, -1, -3, -7, 0, 12, 5, -9, -9, -5, -13, -14, -17, -2, + -7, -4, -8, -20, -13, -10, -3, -15, -25, -15, -8, -4, -7, -7, -4, -5, 0, -8, -2, -2, -4, 9, 1, 2, -2, 3, -3, -10, -7, -15, + -6, 1, -2, -4, -8, -3, 4, 7, 12, 8, -4, 1, -2, -10, 2, -2, -3, -10, -4, -3, -1, 0, -1, -7, 0, -2, 6, 1, -2, -1, + -2, 2, 6, 6, 1, -3, 0, -2, -1, 3, 6, 6, 8, 6, 0, 0, 2, 1, 3, -1, 0, -6, -8, -2, -2, 7, 8, 9, 6, 9, + 10, 10, 11, 7, 9, 9, 11, 10, 5, 0, -2, 1, 4, 2, 0, -2, -2, 1, -5, -7, -3, -2, -8, -11, -9, -14, -7, -4, -5, 0, + 3, 1, 8, -2, 2, 7, 7, 3, -3, 1, 1, 0, -6, -2, -2, 0, 6, 5, 7, 7, 0, -2, -6, -9, -5, -5, -2, -9, -3, -3, + 0, -2, -3, 2, 9, 3, 2, 7, 9, 7, 8, 8, 0, 2, 8, 4, -7, 0, 4, 3, 20, 20, -15, -18, -4, 2, -23, 5, 15, -28, + -6, 24, -13, 11, 21, 2, 8, -3, 3, 3, 9, 5, -1, 1, -3, 4, 3, -7, -6, 4, 12, 7, 2, -4, -3, 0, 2, 2, 9, 4, + 2, 2, 6, -2, 3, 1, 9, 0, 0, 3, -1, 4, 11, 1, 4, 3, 5, 5, 4, 12, 8, 8, 11, 5, 14, -3, -12, -6, -3, -2, + 1, -3, -1, -3, -4, -7, -1, 3, 5, 2, -2, -10, -14, -1, 0, -6, -2, -6, -7, 1, 0, -7, -11, -21, -11, -8, -9, -16, -10, -2, + -2, -2, -6, -5, -8, -7, 0, -16, -9, -11, 2, 5, 8, 11, 13, 14, 7, 7, 10, 4, 5, 1, 8, 8, 8, 17, 18, 7, 15, 12, + 2, 7, 14, 7, 18, 19, 12, 18, 4, 4, 16, 18, 14, 10, 12, 15, 17, 7, 11, 10, 8, 13, -4, 0, 2, 12, 5, 1, 0, -1, + -9, -11, -15, -15, -14, -8, -5, 1, -9, -11, -3, 2, -1, 12, -5, 15, 19, 16, -12, -16, -7, 13, 11, -24, -4, -6, -5, -8, -6, -7, + -2, 1, 5, 4, 3, 3, 2, 1, 0, -4, -5, -13, -14, -14, -10, -4, -2, 1, 4, -1, -4, -5, -8, -14, -14, -13, -10, -3, -2, -3, + -3, -5, 0, 2, 5, 3, 3, 2, 9, 11, 15, 22, 24, 18, 10, 10, 5, 1, 1, -5, -7, -4, -2, 2, 6, 2, 9, 3, 4, 8, + -2, 2, 1, 3, 2, 2, -1, 3, 1, -6, -5, -3, -11, -16, -11, -20, -18, -17, -17, -20, -20, -15, -12, -7, -1, 10, 17, 19, 18, 17, + 13, 3, -2, -7, -5, 1, 6, 5, 9, 16, 12, 11, 5, 1, -11, -14, -16, -19, -21, -17, -10, -12, -4, 9, 18, 11, -101, 25, 127, -74, + -25, 37, 62, -13, -31, 37, 15, -53, 41, 11, -49, 5, 1, -29, 11, 5, -6, -9, 16, 11, -3, 6, -2, 4, 8, 6, 0, -6, -5, -12, + -11, -11, -4, -13, -4, 3, -4, 1, -1, 3, 1, 2, 5, 0, 3, -2, -11, -16, -18, -8, -12, -10, -1, 0, -5, -7, -12, -12, -7, 67, + 16, 11, -9, 0, 5, 0, 8, 7, 10, 0, 7, 7, 6, 7, -3, 1, 4, 5, 9, 13, 2, 8, 1, -13, -9, -9, -6, 10, 8, 2, + 6, 13, 8, 7, 6, 5, -10, -2, 0, 7, -8, -15, -12, -8, 0, -12, -15, -9, -4, 9, 2, -6, 5, 2, -9, -16, -6, -1, -2, -7, + -8, -4, -2, -10, -3, -4, 2, 5, -17, -8, 3, -8, 3, 7, -11, 6, 1, 7, 12, 9, -8, 1, 0, 16, 4, -5, -21, -10, -20, 6, + 6, -4, -25, -7, 11, 19, -1, -2, 5, 21, -3, -4, 10, 9, -20, -18, -21, -25, -21, -3, -13, 2, -9, -6, 4, -2, 8, 7, -8, 17, + -5, 0, 1, -5, -1, -11, 0, -7, -1, -4, 0, -6, -6, 2, 5, 1, 13, 6, 10, 3, 5, 4, -6, -3, -8, 0, -11, -12, -5, -7, + -3, -10, -3, -6, -16, -11, -8, -8, -6, -5, 7, 7, -1, 4, -1, -10, -1, -5, 1, 9, 1, 4, -2, -6, -7, -5, -8, -8, 3, 0, + 1, -1, 4, 5, -5, 9, 5, 6, -2, 1, 8, 6, 8, 19, -4, 2, 9, 9, 2, -9, -26, -2, 4, -5, -8, 4, -6, -10, -6, 6, + 11, 12, 7, -9, 8, 5, 5, 9, -6, -6, -10, -3, 7, 17, 1, 3, 4, -3, 0, -6, -1, 0, -5, 3, 2, -3, -4, -5, 3, -11, + -31, -21, 4, -6, -4, -15, -23, -3, -7, -13, 9, -20, 2, 27, 8, 7, 14, 10, -5, -4, -9, -22, -1, -7, -2, 12, 6, -4, 0, -4, + 7, 7, 9, -1, -6, 4, 11, 8, 11, -12, -7, -12, -10, -1, -5, 7, 8, 4, 3, 5, 7, -6, -3, 10, 20, 10, 0, 13, 11, -12, + 3, 8, 7, -14, -46, -4, 7, -2, 2, 8, -10, -10, 1, 0, -9, -7, 2, -10, -6, -2, -8, -5, 8, 3, 0, -3, -3, 4, 8, 4, + -5, 1, 19, 20, 25, 17, 11, 12, 11, 2, 1, 4, 15, 5, 12, 16, 9, 1, -6, 0, -4, -12, 5, 27, 13, 13, -5, 9, 13, 2, + 6, 2, -1, -1, -11, -10, -8, -9, 1, 10, 0, -1, 0, -6, -6, -10, -8, 6, -1, 5, -13, -23, -10, -3, -8, -2, -21, -2, 10, 1, + 16, 6, 18, -1, 7, -5, -7, -6, -4, 3, 4, -14, -13, 9, -10, 1, -21, -8, -10, -28, -10, -20, -7, -8, -4, -4, -6, -9, -2, 12, + 12, 9, 16, 3, 18, -4, -11, -1, -4, -8, -10, -2, -4, 0, 3, 5, -2, -5, 1, -2, 0, 1, 0, 4, -3, -6, 1, -5, -1, 2, + 2, -7, -13, 3, -4, 7, 7, 3, 3, -8, -10, 1, -4, -9, -16, 3, -4, -4, -3, 1, -8, -6, 2, 12, 10, 10, 9, 2, 6, 2, + 1, 2, -3, -9, -17, -13, -11, -4, -10, -3, -2, 0, 7, 7, 3, 0, 4, 4, 8, 2, 7, 0, 0, -2, -8, -4, 0, -3, 11, 5, + -4, -5, 2, 8, -2, 6, 11, -5, 5, 11, -2, -6, -2, 3, -3, 11, 0, 12, 15, -6, 3, 18, -3, -1, -1, -2, -14, -9, -5, 9, + 9, 18, 18, 9, -9, -23, -14, -6, -1, 0, -10, -27, 9, 5, 10, 23, -26, -8, 19, 8, 2, 14, 11, 16, -6, -14, -18, -1, -20, -9, + -1, 7, 17, 22, 9, 9, 18, 8, 5, -3, 2, 3, -9, -5, 1, -6, -2, -14, -13, -9, 0, 1, -13, 9, -2, 0, 2, 1, 11, 20, + 5, 4, 4, -6, -1, 0, -16, -5, 5, -48, -1, -1, 6, 8, 5, 6, -8, -4, -2, 9, -6, 3, 1, 3, -8, 3, 8, 9, -4, 4, + 7, 6, 6, -5, -4, 0, 10, 9, 20, 3, 7, 5, -4, -11, -2, -6, -14, -14, -15, -8, -7, -17, -4, 6, 6, 5, -4, -1, 30, 4, + 9, 8, 3, 0, 15, 16, 7, 13, 21, 5, 2, 1, -10, 0, -4, 1, -14, 5, -7, 4, 3, 12, 6, 1, 5, 1, 1, 2, -9, -7, + -5, -21, -18, -15, -16, 9, -6, 1, -2, 4, -3, 3, -23, -13, -12, -20, -19, -25, -22, -16, 0, -26, 1, -10, -22, -24, -19, -28, -9, -12, + -10, -21, -1, -9, 19, 11, 10, 10, -11, 4, -40, -25, -18, -8, -7, -9, -8, -3, -11, -7, -4, -8, 5, -3, 0, 5, 1, -5, -5, 2, + 0, -10, -15, -15, -5, -2, 5, 8, 18, 22, 18, 13, 5, -4, -2, -5, -7, -13, -16, -13, -4, -9, -3, 1, 7, 5, 9, 2, 1, 12, + 10, 14, 5, 16, 13, 3, 5, 6, 3, 9, 10, 6, 4, 1, -10, 4, 4, -7, -10, -13, -8, 6, -6, -1, -6, 1, -8, -13, -1, 5, + -6, 5, -10, 10, 7, 21, 9, 15, 1, 3, 7, -6, 12, 3, -1, -6, -3, 3, 7, 2, 18, 5, 11, 10, -1, 6, 5, -2, 3, -8, + 10, 4, 7, 19, 4, 7, 3, 8, 9, -5, -33, 6, -20, -13, 9, -18, -34, 10, -11, 2, 12, 5, 6, 8, 8, 6, 10, 8, 4, 2, + -9, 0, 6, 12, 9, 19, 19, 2, 3, -1, 14, 24, 9, -1, -11, -5, -15, -5, 0, -4, -12, -18, -14, 0, -2, -8, -3, -12, 0, -1, + -18, -6, -4, -2, 2, -1, 20, 8, -2, 2, -1, 7, 2, -6, -59, -6, -7, -7, -4, -5, -3, -17, 0, -1, 3, -16, -5, -4, 10, -4, + -18, -11, 6, -11, -5, -3, -6, -8, -12, -8, -8, 1, -18, -21, -22, -4, 13, 14, -7, -9, -3, -5, 3, -1, -8, 13, 17, 35, 32, 17, + 8, 15, 13, 29, 30, 25, 14, 10, 2, 9, 6, 4, 12, 16, 14, 2, -4, 27, 10, -4, -7, 0, -13, 4, -1, -7, -7, -16, -4, -6, + -10, 2, 17, -1, 8, 23, 11, -2, -15, -29, -12, -42, -30, -22, -15, -17, -2, -19, -3, 5, -12, 4, -14, 9, -9, -16, -6, -1, -2, 21, + 7, -7, -14, -17, -17, -10, -17, 8, 16, 26, 21, 19, 18, 10, 3, -10, -1, 8, 6, 7, 5, -1, 1, -8, -7, 2, 9, 15, 10, 0, + -1, -1, 2, 1, 1, 0, 5, -3, 5, -1, 4, 7, 1, 3, 11, 8, 5, -2, -6, -8, -8, -11, -5, -3, -2, 3, 1, 15, 3, 3, + 3, 6, 5, 2, 1, 1, -1, 0, -5, -10, -14, -4, 3, 9, 0, -8, 2, 12, -1, -9, 2, 6, -1, 3, 9, 2, -1, 15, -1, 12, + 21, 12, 14, 0, 3, -1, 4, -7, 5, 4, 0, 2, 3, -5, 1, 2, 3, -11, 5, 12, 4, -2, 1, 13, 8, 1, 11, 1, -1, -6, + -7, -21, -24, -18, -20, -17, 7, 4, 10, 4, -3, -2, -2, 6, -13, -28, -17, 8, -2, -1, 15, -14, 37, 11, 0, 17, 1, 13, 30, 12, + 20, -8, 10, 8, 2, -5, 12, 11, 1, -9, 19, 16, 5, 13, 3, 7, 15, 10, 16, 11, 15, -8, -3, -3, -14, 7, -3, -5, 11, 9, + 14, 8, 0, -8, -15, 0, 9, -4, -6, -6, -6, -6, 11, 7, -1, -8, -2, -5, -23, -83, -6, 0, -12, -18, -15, -20, -15, -17, -9, 0, + -13, -4, 1, -5, -1, -8, -4, -2, 19, 14, 17, 20, 16, 30, 23, -8, -13, -8, 1, -10, -2, -3, 3, 4, -1, 6, -1, 10, 0, -7, + 11, 10, 8, 0, 2, 23, 16, -1, 10, 6, -5, -7, -17, -9, -8, -16, -16, -6, -24, -14, -8, -23, -15, 8, 0, 6, 22, 24, 25, 33, + 17, 23, 19, 27, 5, 4, 24, 24, 19, 14, 37, 14, 0, 4, -16, -5, -14, -30, -24, -18, 5, 14, -11, -9, -39, -40, -19, -57, -29, -23, + -38, -36, -30, -54, -48, -38, -30, -21, -13, -27, -14, -14, 16, -4, 3, 0, -5, 18, 2, -27, -21, -13, -10, -13, -5, -6, -6, -4, 4, 2, + 10, 12, 18, 15, 2, 6, 5, 9, -5, -9, -3, 4, 3, 8, 5, -2, 7, 6, 2, 4, -2, 0, -8, -4, -5, -10, -6, -3, -7, -9, + -18, -2, -4, -1, -10, 0, -4, 5, -2, -4, 11, 14, 10, 15, 13, 12, 13, 31, 22, 10, -12, -18, -3, 3, 8, 3, 14, 1, -1, -6, + -18, -26, -21, -1, -35, -39, -28, -11, -29, -28, -13, -22, -23, -7, -25, -18, 1, -3, -13, -8, 24, 25, 6, 13, 13, 0, 10, 7, 21, 10, + 3, -8, -4, -20, -12, -16, -12, 0, 7, -4, -3, 4, 12, -12, 6, 12, -11, -2, -3, -4, -33, -54, 37, -11, -17, 65, -5, 51, 9, 9, + 21, -26, 36, 6, 12, 26, 10, -7, -12, 2, -9, 9, 11, 3, -11, 27, 22, 6, 5, 14, -10, -4, 12, 11, 2, -4, -2, 9, 13, 2, + 9, 10, 13, -1, 4, 0, -5, -10, -10, -14, -9, -13, -10, -8, -18, -12, -1, -9, -12, -24, -19, -17, -34, -12, -106, 11, 23, 16, 8, 6, + 16, 11, 10, 29, 22, 8, -3, 10, 1, 1, 23, 14, 30, 18, 8, -3, -10, -7, -10, -10, -31, -42, -33, -9, -2, -19, -17, -15, -7, -18, + -30, -27, -23, -5, -2, 1, 6, 23, 20, 11, 8, 6, -11, 0, 7, 25, 22, 33, 38, 42, 28, 13, 11, -4, -3, 10, 6, 7, 6, 6, + 14, 18, 6, 13, 14, 3, 1, -2, 13, 28, 11, 21, 37, 25, 13, 18, 25, 0, -7, 6, 9, 7, 5, 8, 31, 44, 15, -19, -26, -16, + -23, -14, 6, 7, 12, -15, 2, -9, -12, 7, 3, 21, 6, 9, -20, -7, -16, -6, 13, 16, 26, 28, 34, 21, 32, -20, -12, -5, 13, 4, + 3, -1, -8, -3, -9, -10, -8, -12, -4, -2, 1, -6, -2, 2, 3, 2, 1, -7, -6, -4, -13, -4, -15, -4, -6, -7, -1, -4, 1, -5, + 0, -2, 2, -11, -2, 17, 18, 12, -5, -11, -23, -13, -17, -16, -13, -10, 4, 16, 26, 13, 10, 18, -1, -11, -5, -2, -10, 6, 18, 16, + 7, 6, -1, -5, -11, -9, -19, -22, -18, -16, -24, -23, -11, -13, -5, -5, -12, -19, -12, -9, -10, -5, -13, -10, 5, -1, -18, -21, -20, -10, + 6, 17, 22, 28, 21, 20, 12, -13, -16, -16, -18, -1, -12, -13, -11, -15, -13, 4, -4, 7, -9, -14, -10, -18, -26, -40, -127, 77, -44, -73, + 74, -29, 86, -19, 55, 72, -3, 53, -8, -14, 54, 16, -13, 24, -22, 10, 24, 18, 8, 14, 24, 27, 28, 19, 19, 11, 13, 15, 7, 8, + 11, 4, 13, 1, -3, 5, 14, 19, -6, -4, -15, -13, -13, -17, -16, -14, -5, -11, -15, -13, -13, -4, -8, -4, -1, -21, -12, -8, -8, -95, + -18, -2, -18, -11, -13, -13, -14, 0, 20, 0, -6, -8, -25, -17, -10, -12, -16, -14, -13, -6, 18, 9, 8, -6, -3, 1, 2, 2, -17, 1, + 17, 2, -6, 3, -4, 15, -2, 13, 8, 15, 9, 17, 17, 6, 3, -1, -4, 6, -6, 6, 7, 9, 17, 32, 10, -12, -6, -24, -3, 3, + -8, -9, 1, -12, 12, -2, -8, 4, -7, -5, -1, 3, 14, 6, -1, 10, 0, -27, -7, -9, 27, 15, 0, -14, -19, -1, -22, -12, -17, -37, + -9, -28, -9, -16, 2, 8, -20, 13, 15, 14, -37, 2, 4, 21, 14, 4, 0, -2, 4, 21, -1, -3, -12, -17, 7, 7, 19, 7, 18, 24, + 7, 6, 3, 2, 4, 0, -10, -7, -4, -7, -13, -10, -23, -4, -5, 1, 8, 8, 3, -4, 6, 5, 4, 6, 13, 7, 14, 7, 3, -5, + 0, 12, -2, -7, -2, 4, -3, -9, -1, 0, 7, 18, 11, 3, 8, 8, 3, -3, 9, 0, 15, 12, 20, 25, 14, 15, -1, -7, -21, -11, + -7, -1, -4, -9, -13, -2, -2, -19, -17, -3, 0, 17, 23, 12, 9, 2, 9, -8, 10, -10, -8, 5, -14, -7, -7, 22, 9, 1, -8, -8, + -10, -15, -10, -28, 10, -10, -6, 9, 6, 3, 6, 7, -4, 17, 5, -2, -4, -7, 2, -7, -13, -21, -22, -18, -4, 0, 10, 15, 17, 13, + 51, -5, -42, -18, 26, 12, 8, -2, -2, -2, 26, -19, -14, -21, -20, 8, 9, 10, -3, 10, 9, 3, -23, -13, -6, -19, -18, 9, 15, -8, + 19, 20, 16, 6, -4, -4, 5, -1, 3, 0, 10, 10, -7, -15, -12, -26, -14, -8, 6, -6, 23, 11, -7, -9, -22, -17, -19, -3, 0, -7, + -9, 7, -8, -3, 8, 3, 13, 9, -6, 2, 6, 2, 6, 14, 2, -3, 0, -19, -19, 6, 4, 8, 17, -1, 4, 2, -8, 15, -2, 1, + 15, -5, -21, -11, 18, 14, 5, -9, -4, 1, 0, -8, 0, 11, 20, 12, 18, 7, 16, -6, 13, 26, 7, -12, 6, 25, -14, 11, 15, -4, + 5, 12, -13, -15, 8, 17, 26, 18, 12, 12, 35, 23, 10, 17, 8, 2, 14, -21, -2, 8, -16, 2, -16, -4, -14, 1, -10, -15, -12, 16, + 5, 8, 0, 5, -10, -7, -28, -9, -21, -13, -14, 0, -10, -9, -9, 8, 22, 17, -3, -6, 5, -11, -1, 8, -3, -4, 16, -3, -2, 35, + 11, 15, -1, -2, 19, 3, 7, 1, 11, 22, 12, 2, 4, -13, -11, -24, -7, -8, 0, -4, 6, 6, -1, -2, -13, -4, -7, 5, -2, -3, + 9, -3, 4, 4, -2, -3, -4, -6, -8, -3, -5, -7, -2, 0, 6, 8, 7, 6, -9, -14, -14, -7, -12, -7, -7, 6, 8, 9, 26, 17, + 15, -4, -3, -6, -10, -5, 6, 0, 10, -2, -9, 4, -6, -1, -7, -35, -7, -19, 0, 2, -5, -9, -18, -1, -21, 10, 0, 16, 14, 20, + 12, -5, -2, -14, -13, -2, -17, -13, -13, 13, 5, 2, 2, -11, 1, 4, 11, 3, -4, 3, 4, -9, -15, -8, -11, -12, 10, 2, -4, -11, + -11, 15, 0, 5, -7, 29, 9, 5, 25, 2, 3, 19, -20, -23, -28, 0, 22, 0, 1, 5, 3, -8, 31, 2, 11, 15, 4, 6, 4, -1, + -14, -6, 1, 10, 20, 8, 0, 1, -7, -19, -22, 1, 6, 6, -11, 10, 5, -8, -9, 20, -11, 16, -5, 12, -5, 31, 13, 12, 9, 9, + 19, -15, -1, 4, -4, -12, 3, 11, -2, -2, -21, -15, -4, -5, 1, 24, 12, 12, 8, -19, -12, 6, 3, 18, -22, -31, -23, -10, -2, 21, + 8, -15, -36, -37, -11, -2, 5, -24, -25, 15, 10, 14, -2, -1, 11, 1, -18, 0, 3, 12, 1, -12, 2, 14, 11, 2, 4, -7, -14, -11, + 12, 6, 17, 10, -16, 28, 14, 4, 23, 4, -11, 17, 20, 1, 22, 9, -21, -12, -18, -10, -2, 18, -7, -30, 10, -16, -12, -19, -8, 9, + 9, -12, -27, -9, -7, 36, 3, 18, 12, 7, 3, -15, -9, -7, -27, 2, -22, -5, 21, -6, 29, 6, 14, 8, -20, -9, 12, -24, -1, 22, + 13, 7, -7, -22, 5, -5, 16, 8, 26, 12, -16, -7, 16, 23, 23, 18, 14, 7, -3, -6, -10, -19, -14, -9, 11, 5, -9, -8, 1, 11, + 16, 1, 5, 6, -1, -11, -10, -5, 6, 9, 13, 5, -5, -2, 1, 9, -4, 4, 10, 6, -2, -12, -10, -2, -1, -6, -1, -17, -21, -18, + 4, 1, -6, -4, -5, 5, 4, 5, 6, 1, 3, 0, 8, 12, 2, 0, -9, -5, 11, 9, 1, 20, 11, 3, 15, 3, 4, 5, 19, 13, + 6, -10, -11, -15, -15, -7, -24, -26, -27, -27, 4, 4, -6, -2, -18, -7, -1, 8, 7, -9, -4, 13, 7, -7, -14, 5, 9, 2, -9, -4, + 5, -9, -15, -4, -8, -15, 6, 3, -14, -15, 19, -4, -26, 3, -42, 11, 9, -13, -11, -11, -3, 10, 20, 3, -4, 3, 4, 4, 14, 28, + 27, -2, 22, 7, -29, 2, -14, -8, 10, -9, 17, 14, -2, -5, -8, 2, -11, -2, 9, -14, -12, -3, -9, -11, -22, -8, 11, -16, 4, 1, + 5, -16, 10, 15, -4, -14, -17, -1, 1, 24, -5, 2, -7, 3, 7, -29, 0, -30, -44, -20, -3, -17, -14, -15, -1, -18, -24, -27, -6, 4, + 18, 13, -6, -9, -14, -17, 4, -10, -18, 8, 7, -7, 2, 9, -12, 11, 23, -14, 4, -1, 10, -38, -44, -16, -11, -15, -21, 8, 16, -14, + -17, -7, -13, -29, -44, 9, -20, -11, -15, -2, 9, -5, -13, -6, 16, 16, 22, 8, -9, -4, -13, 25, 39, 9, 29, 35, 30, 25, 34, 16, + -11, 28, -9, -2, -13, -3, -16, -82, -57, -51, -19, -20, 3, 22, 11, 14, 26, 28, 17, 0, 22, 5, 10, 14, 2, -15, -20, -20, -7, -2, + 5, 9, -7, 2, 18, -16, -24, -3, -13, 15, -8, 22, -1, -2, 16, -9, -5, 7, 17, 12, 6, 4, 13, 1, 10, 10, 7, 11, 14, 19, + 15, 21, 12, 7, 8, 8, -3, -3, -12, -7, -6, -9, -12, -18, -11, 7, 21, 2, -7, 0, 9, 9, 4, 0, -3, 10, 18, 16, 16, 0, + 0, -7, -7, -16, -4, 1, -2, -17, -19, 5, 6, 3, -6, 1, -1, 15, 10, 7, 11, 2, -3, -4, -18, -15, -24, -18, -10, 13, 14, 4, + -4, -16, -18, 5, 1, -3, -14, -19, -19, -1, -3, 12, -2, -1, -10, -12, -14, -3, 20, 13, 2, -2, -2, 0, -12, 0, 6, -3, -7, 4, + 17, -7, 5, 5, 0, 3, -10, 16, 20, 13, 13, 18, -11, -2, -13, 38, -36, -31, -11, -53, 19, -47, -4, 3, 5, 17, 28, 6, 40, 26, + 4, -14, 0, 8, 1, -4, -20, 12, -7, -3, -17, -9, 5, 6, 6, 3, 7, 10, 9, 7, 21, 12, 17, 3, 11, -16, -1, 10, 1, -19, + 5, 2, 25, 20, 4, 3, -6, 5, 10, 10, -18, -17, 9, -17, 8, 7, -3, -10, 3, 14, 63, 73, 50, 20, 30, 20, 8, 38, 51, 53, + 23, 8, -15, -6, -19, -29, -28, -38, -34, -9, -25, -21, -10, -16, -4, 9, 17, 0, -17, -3, 14, 2, -31, 8, 2, -2, -21, -23, -30, -33, + -49, -36, 8, 10, -20, 7, 25, 26, 9, 18, 38, 6, 11, 17, -15, -20, -31, -46, -72, -87, -89, -77, -70, -69, -52, -58, -50, -17, -28, 0, + 16, 41, 70, 52, 41, 33, 51, 5, 15, 31, 15, 18, -21, -35, -49, 8, -15, -1, 28, 0, 28, 27, 23, 21, 11, 38, 16, 19, 28, -3, + 8, -2, 35, -11, -9, 21, 13, -15, 14, -19, 8, 5, -7, 0, 4, 1, 11, 47, 17, 46, -39, -22, -18, -14, -12, -9, -8, -4, 9, 8, + 14, 20, 25, 30, 16, 19, 13, 14, 14, 3, 6, -8, -12, -16, -2, -5, -12, -14, -36, -36, -19, -9, -26, -33, -27, -23, -35, -24, 5, 14, + 1, 3, 7, 0, -2, 5, 14, 25, 24, 12, 13, 20, 16, 21, 8, 6, -2, -15, -26, -26, -36, -9, -31, -28, -6, -17, 1, -9, -4, 9, + 16, 13, 28, -5, -1, -15, -22, -27, -12, -10, -2, -13, -20, -27, -34, 2, 5, 1, 13, 2, -3, -20, -25, -24, -31, -2, -9, -3, 7, -16, + -5, -2, -7, 12, -1, -10, -13, -13, 3, 14, 6, 16, 10, 5, 20, 32, 16, 18, 10, 0, 83, -13, -9, -33, -20, 20, -50, 42, -4, 7, + 27, -25, 6, 4, 13, 24, 0, 1, -11, -7, 0, -16, -15, 3, -13, 13, -3, 3, -6, 2, 16, 11, 3, 5, 1, 25, 10, 4, 21, 15, + 5, 15, 2, -12, -1, 25, -9, 8, 3, -6, 2, 2, 10, 2, 3, 2, -11, 5, -3, -9, -2, 9, 5, 20, -20, -48, -38, -38, -45, -25, + -26, -41, -20, -2, 9, -20, -17, 2, -1, 7, 30, 20, 25, 21, 16, 23, -7, -31, -27, -35, -67, -46, -70, -45, -31, -30, 7, 1, 31, 42, + 20, 6, -25, -33, -4, -26, -39, -9, -17, -25, -36, -20, -21, -30, -41, -40, -72, -68, -33, -6, -12, -18, -22, -44, -18, 40, 43, 55, 95, 92, + 88, 80, 26, -4, -53, -112, -86, -107, -77, -59, -40, -16, 3, 42, 53, 57, 31, -2, -33, -17, 0, -6, 31, 28, 2, -4, 4, 0, 3, 37, + 32, 65, 45, 66, 53, 58, 30, 15, 11, 9, 23, 24, -5, 10, 21, 16, 32, 44, 0, 33, 46, 8, 7, 30, 42, -14, -9, -2, 9, 11, + 4, -12, -10, -18, -17, -3, -5, -11, -16, -18, -27, -20, -16, -18, -17, -18, -8, 9, 22, 23, 22, 22, 28, 4, -1, 8, 23, 26, 26, 40, + 39, 5, -11, 0, -6, -22, -14, -5, -14, -30, -29, -28, -25, -27, -32, -54, -63, -59, -24, -20, -4, 6, -9, -14, -15, -3, 26, 31, 28, 34, + 30, 27, -5, -37, -55, -73, -58, -52, -56, -3, 8, 18, 42, 67, 73, 69, 23, -11, -55, -44, -31, -16, -1, 14, 18, 31, 17, 16, 18, 23, + 22, 14, 15, 12, -14, -34, -40, -90, -76, -36, -33, -12, 14, 10, -13, -48, -89, -121, -127, -120, -80, -43, -28, -6, -9, 57, 16, 2, -3, -6, + 28, -1, -33, 47, -11, 83, -37, -43, 7, 6, 46, 2, 23, 0, -60, 42, 24, 19, 42, 6, -6, -29, -18, 5, 6, -22, -14, 12, -24, -9, + -2, 7, 12, -6, -11, -15, 12, 8, -18, -23, -20, -9, -26, -12, 16, 14, 1, -17, -1, 12, 8, -4, 2, 8, -2, -19, -6, 4, 24, -23, + 10, 13, 10, 9, 6, 7, -6, -3, 7, 2, 2, -1, -14, -5, -1, -4, -6, 8, 9, -2, 0, -4, -6, -3, 1, -1, 3, 8, -3, -4, + -6, -1, -3, 0, 2, 3, -2, -4, -5, 2, 0, 4, 12, 4, 6, -3, 4, 12, 9, 5, 6, -2, -3, 0, -4, 5, 0, -2, 2, 3, + -2, -11, 5, 6, 4, 1, -1, -1, -2, 3, -7, -8, -2, 6, 5, 6, 0, 7, -2, -4, -3, -2, -1, 0, -4, 5, -5, 6, 2, 0, + 3, -7, 3, -2, -6, -1, -3, 3, 1, 10, 5, 0, -6, 3, 11, 6, 0, -4, -1, 15, -2, 4, 4, -1, -3, -6, -5, -13, -4, -5, + 2, -4, -3, -4, -7, -7, -3, -1, -4, -1, 3, 5, 6, 0, 6, 5, -1, -1, -2, -9, -7, -1, 1, 5, 2, 7, 2, 2, 3, -1, + -3, 2, -1, -3, 2, -2, -3, -3, -4, -5, -3, 2, 0, 0, -2, -3, 1, 9, 6, 8, 11, 8, 2, 3, 9, 8, 10, -1, 2, 0, + -4, 3, 4, 0, -6, -1, -6, 0, 0, 3, 0, -2, 8, 9, 3, -3, 3, 5, 1, -8, -2, 4, -6, 6, 1, -3, -10, -1, -2, -3, + 4, -2, -4, -11, -3, -6, -4, 1, 4, -1, 3, 3, -2, -1, -4, 2, -2, -1, -9, -1, 1, 4, 6, 7, 4, 4, 4, 2, 2, -13, + 3, 9, 1, 15, -8, 2, 4, -3, -11, -13, -14, -2, -2, -8, -11, -13, -4, 1, 1, -6, -9, 3, 1, -4, -8, -4, 7, 0, 1, -3, + -6, 3, 3, -9, -2, 10, 10, 3, -2, -6, 1, -2, -10, 8, 11, 3, 0, 8, -1, -11, -5, -2, -8, -9, 3, 2, 3, -1, 1, 1, + 0, 5, -7, 4, -21, 3, -1, -5, -3, 2, 1, -3, -3, 3, 2, 1, 8, 6, -3, -2, -8, -7, -5, -2, 7, 11, 2, -5, -8, -7, + -6, -7, 2, 4, -3, 1, 0, -4, 0, 4, 5, 0, -4, 2, 5, 2, 0, 0, 4, -1, -2, 0, -3, -2, -1, 0, -2, -1, 2, 5, + 0, 3, 9, 5, -5, -3, -5, -3, 3, 5, 1, 10, -7, 1, 2, -1, -5, 3, 7, 8, 5, 13, 2, -4, -7, 0, -9, -11, -10, -12, + -8, -3, -5, -1, -17, -8, -2, -3, -4, 4, -4, -9, -3, 0, 14, -3, -3, 1, 8, 3, 9, 6, -7, -1, -3, -2, 2, -5, 8, 8, + 0, 3, -1, 4, 0, -8, -4, -6, -8, -8, 0, 1, -2, 4, -3, 2, 1, 3, 0, 4, 4, 1, -6, -1, -6, 2, -1, 5, 1, -7, + -2, -2, 1, 4, 3, -4, -2, 3, 1, 7, 1, -4, -4, -1, 2, 1, 3, 4, 2, -3, 3, 0, -4, -1, 0, 6, 3, 4, -3, 0, + 2, 4, 3, 5, -1, -3, 0, 1, 1, 2, -2, 6, 4, -1, 6, -2, -10, 6, 5, 4, -3, -1, 2, -1, -4, 2, -1, -5, -1, 0, + 8, -3, 3, 1, -5, -7, -3, -6, 7, 10, 4, 5, 2, -1, -2, -3, 2, 1, -12, -10, -1, 5, -3, 3, 1, 1, 5, 4, 4, -6, + -6, -7, -9, -2, 2, 4, 9, 1, 12, -23, 0, -5, -13, 2, 3, -6, 1, 1, 1, -4, -2, -9, 13, -3, 0, 13, 1, 8, -1, 2, + 3, 10, 0, 8, -3, -3, -5, -7, 1, 3, 2, -3, 1, 2, 4, 10, 6, 2, 10, 4, -8, -8, 10, -5, -2, -9, 6, -5, 3, -3, + -3, 10, 13, 9, 3, 1, 0, -4, -6, -17, 5, -1, 8, 8, -6, -4, -3, 6, 6, 7, 2, 0, 2, -1, 0, 1, -1, 10, -8, -2, + 7, 4, 4, -10, -8, -13, 2, 1, -6, -4, -7, -7, 7, 5, -2, 2, 5, 4, 6, 7, 4, -1, 0, -2, 3, -12, 0, 8, 14, 2, + 1, -2, -3, 5, 8, 6, 0, 7, 7, -3, -5, -4, -3, 5, 6, -2, 4, 3, 4, 10, -1, 3, 7, -5, 10, 14, -4, 5, 2, 5, + 1, 0, 3, -4, 0, -2, 3, -5, 0, 10, -16, -5, -7, -7, -1, -12, -8, 0, 1, -1, -4, -5, -3, -10, -6, 0, -8, 0, -1, -3, + -1, -1, 6, -5, 3, -3, 11, -2, 2, 1, 10, 2, 0, -2, -6, -4, -1, -3, 2, -4, 0, -2, -1, 1, 1, 1, 3, 1, -3, 0, + -3, 2, 1, -9, -12, -8, 3, -1, -4, -2, 3, 5, 6, -1, 7, 3, 7, 5, 2, -1, -4, 3, 5, 5, 2, -1, 6, 1, 1, -1, + -3, -6, -4, -10, -5, -5, -3, 3, 7, 4, 2, 0, -1, -3, -3, 1, -1, -6, -7, -5, 0, -7, 4, -1, 7, 8, 1, -1, -3, -3, + 0, 1, 2, 2, 2, -3, 1, -1, -2, -2, -5, -3, -2, 1, 4, -1, -2, -4, 6, -1, 2, -3, 7, 3, -1, 3, 1, -4, 0, -2, + -2, -8, 1, -5, 0, -10, 3, 4, 2, 10, 7, 3, 1, 9, -13, 3, 4, -2, -5, 1, -9, -7, 3, 5, -7, 7, -17, -3, 6, -7, + -2, -3, -10, -10, -4, 2, -4, 4, 6, -6, 10, 2, -4, 4, -9, 7, 2, 7, 6, 5, -5, -4, 4, -2, -11, -4, -8, 1, -9, 1, + 1, -4, 4, 2, 4, -3, 4, 3, -3, 5, -2, 0, 7, 0, -11, 1, 1, 7, 8, -1, 5, 1, 2, 0, 4, -1, -8, -5, 0, 3, + 0, -2, 1, 2, 13, 13, 15, 8, 3, 6, 0, 0, 7, 3, 7, 8, 3, 3, 5, -3, 2, -2, 2, -3, 7, -1, -3, 0, 3, -1, + 2, 2, -1, 3, -2, -6, -8, -5, 0, 4, 1, -5, -6, -5, -1, 0, -4, 11, 14, 8, 6, 6, 17, 15, 15, 5, -3, 2, 9, 12, + 17, 14, 8, 16, -2, 1, 1, 3, 1, -3, -1, -8, 3, 2, -5, -11, 3, -4, 5, -6, -2, 6, 2, 7, 1, 4, -3, -7, -5, -14, + -6, -7, -8, -3, -12, -7, -10, -6, 0, 7, 8, -1, 0, 3, 3, -4, 1, -8, -7, -8, -5, -3, 0, -6, -7, -2, 2, -2, 6, 0, + 3, -1, -5, -3, 3, 5, 2, 2, 0, -3, -1, 7, 3, 1, 1, -1, 6, 2, 4, -2, 1, -1, 0, 4, -1, -2, -4, 2, -2, -3, + 3, 1, -2, -2, -3, -7, -9, -7, -6, 0, 2, -6, 4, 5, 2, -4, -2, -2, -2, -1, -14, -6, -5, -1, -2, 5, 2, -4, 2, -3, + 3, 3, -1, 3, -9, -5, -1, -4, 2, -2, -1, -4, 2, -3, 2, -3, 3, 1, 4, 1, -1, 3, -2, 8, 1, -6, -4, -3, -2, 10, + 6, 0, -5, -7, 0, -9, -8, 8, 7, -3, -5, 5, -4, 6, 0, 3, 10, 3, 4, -6, 2, -9, -3, 8, -2, 1, -7, -5, 8, 9, + -2, -20, 12, 3, 11, 4, 1, 1, -3, -7, 6, 0, 6, 4, 0, 0, -9, -5, 2, -10, 1, -4, 3, 2, 8, 0, -1, 3, 0, 5, + -2, 3, 6, -7, -6, -4, 2, -4, -2, -4, 7, 6, 8, 12, -1, 5, -6, -5, 3, 7, -1, -4, 0, 5, 3, -7, -4, -2, 0, -5, + 3, 0, -4, 4, -4, -5, 1, -6, -12, -8, -2, 10, 9, -1, -5, 10, 16, 14, 7, -1, -1, -1, -9, -6, -8, -5, 3, 0, -12, 0, + 8, 15, 0, -2, 8, 3, -4, -4, 2, 1, -4, -10, -7, -7, 0, 0, -7, -6, -7, -12, -17, -7, -6, -4, 0, -3, 6, 16, 14, 7, + 16, 25, 15, 14, 22, 14, 17, -1, 1, 9, -4, -9, 3, -8, -1, 0, 1, 3, -8, -8, -12, -13, -11, -17, -17, -11, -11, -9, -18, -10, + -11, -9, -5, -12, -12, -12, -8, -10, -3, -13, -6, -8, 0, 7, 3, 5, 5, -1, 13, 14, 1, 3, 0, -1, 1, 1, 1, -2, -1, -2, + -2, 2, 5, 0, -1, 0, 2, 4, 5, -1, 0, 0, 5, 3, -4, 0, 0, 1, -3, -3, 1, 3, 2, 5, 5, -2, 6, 6, 3, 3, + 8, 2, 5, 5, -4, -3, 1, 2, -1, -4, 0, 2, 0, -4, 0, -3, 1, 8, 5, 2, -5, -5, -3, -4, 1, 0, 0, 5, 4, 6, + 9, 7, 11, 9, 7, 5, -1, -11, -7, -10, -2, -11, 6, 11, -6, -2, -2, 0, -5, 3, 6, 8, 2, 8, 3, 2, 4, -4, -3, 3, + -2, 0, 3, 4, 2, 6, 8, 1, 1, 0, -5, -1, 5, 1, 6, 3, 4, 3, 10, 6, -6, -6, 22, -14, 9, -27, -25, 5, 17, -8, + -5, 10, -7, -3, 4, -5, -6, 7, -3, 2, -6, 12, 6, 18, -4, 12, 10, 4, 0, -8, -8, -2, -3, -2, -4, -2, -2, 0, 0, 5, + -14, -1, 13, 4, 14, 4, 9, 14, 8, -6, 3, 8, 8, 0, 2, 6, 3, -1, 9, 3, 3, -5, -3, -7, 41, -8, -3, -3, -17, -21, + -17, -20, -7, -5, -3, -5, -12, -11, -1, 4, -1, 2, -3, -4, -11, 1, 12, 7, 3, -3, 0, 1, 2, 7, 1, 1, 3, 1, 5, 11, + 8, 0, -3, -1, 4, 2, -3, -1, 10, 1, -2, 0, 6, -7, -16, -7, -6, 0, 7, 16, 13, 5, -6, -7, -5, -7, -14, -12, -8, -17, + -18, -10, -17, -17, -23, -23, -23, -27, -15, -16, -31, -21, -17, -22, -6, -11, -25, -22, -26, -7, -5, 14, 27, 46, 31, 32, 31, 16, 5, 14, + 8, 20, 28, 25, 21, 24, 4, -4, -15, -11, 4, -19, -10, 8, 5, -7, 2, -12, 9, 6, 12, -15, -21, 12, -20, -5, -4, -6, -6, -6, + -4, -7, -4, 1, 8, 2, 6, -3, 3, 2, -1, -6, -9, -10, -12, -11, -8, -3, -7, -9, -9, -7, -12, -17, -18, -17, -9, -6, 2, 2, + 9, 4, 2, 8, 3, 4, 1, -2, -1, 3, 1, 5, 7, 13, 24, 23, 14, 10, 3, 9, 6, -1, -10, -8, -1, 2, 16, 20, 26, 20, + 30, 26, 19, 0, -18, -27, -42, -45, -47, -40, -32, -22, -11, 1, 10, 9, 0, 12, 14, 24, 25, 27, 21, 19, 11, 15, 21, 21, 26, 28, + 22, 22, 1, -14, -43, -74, -86, -88, -86, -58, -27, 8, 24, 43, 60, 54, 41, 44, 27, 18, -1, -28, -58, -74, -88, -39, -31, -12, -35, 123, + -81, -38, -11, 127, -64, 10, -31, 38, 6, -53, 14, 32, -28, -34, -7, 10, 5, -32, 0, 2, 6, 6, -2, 6, 16, -7, -15, -7, -5, -3, + -5, -5, -3, -12, 0, -5, -4, -5, -1, -7, -14, -4, 14, -9, -19, 2, -10, 1, -9, -12, 4, 2, -12, 4, -8, -5, 2, -17, -14, 74, + -1, -1, -5, -4, -3, -2, -2, -5, 4, 10, 8, 0, 8, 0, -3, -11, -3, 5, -2, 1, -5, -1, 7, 8, 2, -2, -1, -1, -6, -8, + 3, 5, 6, 7, 3, 1, 10, 3, 8, 5, 9, 3, 7, 2, -2, -8, 2, 7, 3, 1, 10, 6, -2, -2, 17, 11, 4, 8, 7, 2, + -6, -7, -3, -4, -9, 1, -2, 0, -6, -3, 9, 7, -4, -4, -6, 0, 2, 0, 3, 3, 7, 10, 8, 10, 19, 8, 6, 3, -3, 3, + -10, 1, -12, -4, -4, 5, -3, -12, -2, 3, -14, -4, 4, -5, -12, -11, -9, 7, 7, 0, 11, 9, 8, 7, 17, 9, 13, -3, 1, 7, + 22, 15, 15, 10, 6, 13, 9, 7, 2, -4, 1, 2, -2, 2, 5, 7, 9, 17, 10, 3, 7, 11, 9, 4, -1, 4, 5, 10, 4, 6, + 5, 8, 10, 3, -1, 5, -1, 0, -5, 2, -1, 2, 1, -4, 1, 0, 4, 0, 7, 6, 10, 1, 4, 0, 4, 1, -6, 7, -3, -7, + -18, -16, -12, -14, -24, -10, -13, -11, -4, -8, -6, -4, -4, 0, -3, -1, -1, -8, 5, -5, -7, 10, 8, 8, 13, 19, 15, 8, 1, -5, + -10, -1, -7, -7, -5, 2, 2, -8, -20, -21, -11, -15, -20, -6, -10, -16, -9, -7, 1, -2, 7, 2, 4, 16, 12, 10, 5, 3, -7, -16, + -8, -3, -7, -30, -2, -15, -10, 8, 22, 8, 14, -2, -8, 4, -1, 0, 18, -6, 0, 10, 9, -1, -8, -12, -11, 18, 4, 2, 11, -3, + -2, -4, -9, 4, 4, 5, 15, 18, 6, -5, 11, 1, -1, -2, -9, -2, -2, -12, 3, -5, 7, 2, 8, 9, 12, 4, 2, 17, 8, -8, + 2, -3, 2, -3, 37, -3, -2, 4, -11, -9, -2, -7, -12, -9, -5, -3, -3, -5, -12, 1, 1, 0, -1, -5, 1, -7, 2, 0, 10, 9, + -2, -6, -4, -4, 2, -1, -4, -8, -1, 8, 4, -2, 2, 12, 18, 12, 5, 5, 2, -8, -8, 3, 3, -6, -9, 0, -5, -5, -3, -10, + -3, -3, 2, 4, 7, 7, 13, -4, -5, -1, -2, 5, 5, 1, 0, 11, 3, -1, -9, -6, -6, -1, 4, 2, -1, 8, -2, 2, 4, 5, + 7, 9, 0, -12, -15, -9, 3, -4, 4, 5, 18, 8, 2, -3, 0, -1, -8, -13, -1, 2, 7, 13, 16, 20, 5, 9, -3, 5, 4, 9, + 3, 0, 5, 5, 12, -8, -1, -7, -5, -2, 2, -4, 1, -6, -9, -3, -8, -8, -4, -9, -9, 0, 1, 1, -2, -3, 3, 10, 8, 9, + 2, 4, 6, -2, -1, -1, 6, -3, -5, -6, 4, 7, 7, 7, 7, 6, 3, -3, -4, 1, -3, -2, 2, -2, -5, -1, -5, -12, -11, -6, + -1, 7, 7, 5, 1, 1, 2, 1, 2, 2, 11, 13, 7, 6, 0, -5, -1, 2, 1, 0, 1, 1, 10, 20, 7, 5, 18, 9, -3, 6, + 2, 2, 4, 3, -4, -1, 3, 1, 5, 8, 2, -2, 3, 4, 3, 1, -2, -12, -7, -6, -12, -10, -6, -11, -4, -1, -3, -6, -2, -5, + -14, -12, -4, 2, -3, 1, -9, 2, -7, -7, 8, -15, 6, 9, 6, -4, -22, -10, 1, 3, 5, -13, -26, -23, 1, -12, -9, -8, -1, 4, + 3, -2, 4, 8, 2, -3, -7, -5, -9, -2, 4, 4, 1, 11, 10, 1, -3, -2, -4, 3, -14, -2, -14, 3, -4, -2, 4, 4, 1, 12, + 19, 9, 13, 10, 5, 1, 0, -5, 1, 28, 24, 22, 17, 0, 5, 4, 2, -2, -10, -7, -5, -6, -2, 4, -2, -7, -12, -11, -4, -5, + -14, -9, -1, -2, 1, -7, -10, -5, -2, 2, -7, -8, 0, 9, 18, 12, -2, 1, 3, 7, 10, 9, 10, 12, 5, -1, -5, 1, -10, -11, + -3, 3, 1, -10, -5, 8, -7, 4, 4, -1, 10, -8, -14, 5, 13, -12, -9, 9, 6, 7, 0, -8, -6, 4, 7, -11, -8, 2, -2, 2, + 0, -2, -9, -6, -11, -4, 3, -2, -1, -6, 6, 13, 4, 1, 3, -1, 3, -2, -9, -3, -2, -4, 8, -3, -4, 9, 2, 6, 10, 12, + -5, 3, 10, 4, 8, 13, 3, 5, 5, 9, 7, 9, 12, 9, 4, 4, 2, 1, -1, 4, -1, 0, 1, 0, 5, 6, 5, 4, -5, -1, + -3, -5, -1, 7, 2, 2, 1, 1, 3, 5, -2, 2, 0, 8, 9, 8, 10, 8, 7, 13, 14, 3, 2, -2, -5, -14, -9, 7, -3, 0, + -5, 0, 3, 2, -4, 4, 8, 3, 5, -2, 0, -10, -9, 3, 1, -1, -10, 0, 0, -3, -4, -2, -16, 1, -11, -20, -17, -3, 2, -2, + -6, 14, 3, 0, -2, -1, -1, 0, -3, -1, -3, -3, 0, 4, 1, -1, -2, 8, 3, 0, 0, 4, -1, -3, -6, -2, -6, 7, 10, 6, + 8, 7, 5, 20, 3, -6, -6, -3, 5, 6, -1, -19, -21, -20, -18, -9, -33, -16, 24, -4, -1, -6, 0, -7, -8, -1, 3, -24, -16, -7, + -6, -11, -18, -7, 14, 5, -2, 5, 5, 0, -1, -14, -1, -7, -3, 4, -3, 3, -8, -5, 5, -1, 1, 6, -5, 6, 0, -2, -1, 4, + 8, 7, 13, 13, 3, 11, 16, 4, 2, 11, -1, 5, 0, 9, 20, 6, -6, -4, 9, 5, -3, -5, 2, -13, -11, -10, -10, -1, 2, -4, + 0, -6, 5, 0, 9, -1, -6, -9, -2, 1, -19, -14, -11, -3, -8, -11, -11, -13, 0, -7, -12, -7, -2, -1, 3, 7, 6, 5, 1, -3, + -4, -12, -8, 2, -5, -6, -7, -3, -5, -3, 4, 7, 9, 1, 6, 12, 3, 7, 19, 21, 17, 16, -6, 6, 24, 5, -1, -3, -7, 3, + 3, 14, -12, 4, 8, 5, 2, -2, -8, 0, 1, -18, -12, -14, 3, -7, 5, -2, -1, 7, -9, 6, -4, -4, 3, 13, 18, 3, -8, -3, + -6, -4, -14, -1, 3, 11, 0, 7, 15, 24, 26, 6, 4, -6, 19, -3, -7, -10, -8, -7, -1, 2, 4, -3, -9, -10, -11, -6, -5, -1, + -7, 1, 3, 4, 8, 2, 2, -9, -2, -8, -7, -2, -2, -8, -8, -6, -3, -7, -4, -2, -7, 0, -3, 0, 9, 13, 11, 12, 12, 13, + 11, 2, -3, -1, -5, -3, 7, 15, 12, -3, -6, 5, 11, 10, 13, 12, 1, 3, 5, 5, -1, 2, -6, -9, -7, -11, -4, -5, -7, 1, + -8, 7, -4, 2, 0, -1, 7, -4, -4, -10, -6, -9, -11, -6, -12, 7, 4, -2, 8, 2, 2, -5, 0, 1, -2, 3, -5, -2, 7, 2, + 1, -4, 2, 8, 4, -1, -5, -2, 2, -9, -1, -5, -9, -7, 2, 11, -35, -18, -12, -14, -2, -9, 16, 37, 17, 19, 21, -13, 4, -3, + 15, -1, -9, 2, 4, -2, 6, 4, -10, 0, 2, 15, 10, 16, 14, -2, 3, 10, 1, -4, 2, 5, 3, 2, 4, 5, 5, -2, 4, 10, + 15, 5, -5, 5, 2, 5, 4, 1, -6, 12, 23, 8, 5, 14, 4, 1, -1, 4, -8, -1, 20, 21, 17, 15, 10, 9, -3, -1, -10, -14, + -10, -9, -13, -10, 1, -2, 1, 4, -13, 0, -1, 2, 10, 3, -4, -12, -8, 1, 1, 4, 10, 4, -5, -23, -23, -11, 6, -1, -7, -7, + -12, -7, -17, -8, -5, -2, 15, -4, 6, 16, 17, 21, 6, 1, -10, -19, -19, -12, -25, -22, -21, -15, 1, -5, 4, 9, 17, 17, 7, 20, + 19, -6, 3, 5, -1, 6, 8, 4, -7, -9, -2, 7, 16, 10, 3, 11, 4, -6, -10, 2, -18, -2, -24, -12, -9, 2, -12, -16, -1, -7, + -6, -5, 14, 0, 12, -2, -5, 9, 4, -12, -2, 2, -3, 1, 2, -15, -4, 4, -4, -16, -3, -1, 4, 0, 3, -4, -5, -1, -1, 2, + 1, -3, -5, -5, -2, 2, -7, -3, -11, -15, -16, -10, -13, -11, -6, 1, 6, 8, 8, -3, -1, -2, -2, -8, -7, -3, -7, -2, -3, -10, + -5, -7, -6, -4, -2, 8, 8, 7, 7, 3, 13, 10, -4, -14, -15, -17, -14, -5, -4, -10, -18, -6, -15, -3, 11, 11, 19, 16, 14, 11, + 12, 1, 8, 3, 8, 3, -3, -3, -11, -4, -4, 1, 5, 7, -1, 2, -5, -9, -6, -1, 7, 3, -7, 3, 9, 8, -1, 1, -6, -9, + -7, -9, -6, -2, -6, -3, -9, -3, 9, 3, 10, 3, -2, -14, -14, -10, 1, 0, 12, 3, 10, -51, -11, -15, -21, 21, 1, 29, 43, 17, + 36, 26, -4, 7, 5, 10, 23, 14, -17, 1, 7, 17, 26, 9, 4, 18, 10, 24, 21, 9, 8, 7, 4, 6, -1, 2, -5, 1, 3, 3, + 9, 6, 8, 12, 14, 6, -3, 1, 9, 9, 11, 9, 19, 9, 3, 8, 8, 12, 2, -1, 0, 7, -3, -1, -8, 20, 26, 11, 6, -5, + -4, -4, -10, -19, -17, -15, -7, -4, -7, 0, 6, 5, 18, 19, 16, 4, -2, -18, -40, -31, -32, -11, 1, -11, 0, 2, -5, -8, -14, -14, + -17, 4, -2, 0, 6, -12, -22, -7, 3, 1, -1, 12, -3, -9, -22, -26, -7, -6, -6, -24, -26, -27, -18, -28, -16, 7, -2, -7, 14, 7, + -8, -1, -1, -17, -10, -12, -17, 8, 4, 4, 24, 22, 28, 31, 26, 29, 27, 28, 6, 16, -2, -9, 2, -10, 4, 10, 21, 9, 11, 6, + -19, -7, -3, -2, 0, -5, 0, 16, 16, 21, 20, 15, 7, 5, 7, 1, -9, 3, -6, 2, 17, 6, 17, -2, 23, -4, 1, 9, 12, 11, + 8, 12, 10, 7, 8, 9, 10, 9, 11, 22, 18, 18, 13, 5, 1, 4, -5, -6, -5, -13, -4, 4, 4, -1, -7, -9, -10, -11, -11, -7, + -7, -6, -6, -7, 2, 3, 9, 16, 15, 10, 9, 7, 9, -2, -2, 0, -1, -2, 7, -8, -15, -16, -19, -17, -5, 0, 11, 15, 20, 26, + 11, 1, 1, -5, -5, -5, -1, -1, -5, 4, 1, -3, -8, -11, -3, -5, -4, -5, -6, -1, -2, 5, 7, 7, 2, 6, 6, 5, 5, 4, + -5, -7, -9, -10, -3, 4, -3, -4, -1, 3, 5, 5, 12, 6, -4, 1, -3, 0, -9, -5, -7, -10, -1, -17, -36, -42, -75, 67, -127, -103, + 69, 29, 12, -11, 0, 44, 35, -23, -19, -18, 0, -2, -19, 8, -14, -5, -6, 10, 16, 0, 14, 7, 9, 11, -3, -5, -8, -6, -3, 1, + 2, -8, -18, -13, -4, -3, 0, 4, 4, 6, 0, -13, -8, -8, -3, 8, 15, 19, 4, 14, 17, 6, 7, 9, 9, 1, -1, 7, 8, 21, + 2, -1, 3, 11, 7, 0, 6, 2, -4, 4, 6, 9, 4, 11, -3, 0, -3, 4, 0, -3, -2, -1, 4, 1, 5, 4, 9, 1, -10, -5, + -2, 2, 1, 9, 3, 4, -5, -2, -1, 4, 1, 6, 2, 2, 6, 3, -1, -2, 7, 1, -5, 0, 3, 2, -9, 1, 3, -5, -4, -3, + -2, 3, 3, 2, 2, -5, -5, -4, -2, 1, -6, 7, 4, -2, -2, -1, 5, -13, 9, 1, -5, -10, -10, -1, -5, 2, -8, 3, -5, -5, + -2, -12, -7, -2, 1, 9, -1, 7, 0, 4, 5, -4, 0, 0, 7, 2, 9, 5, -1, 0, 5, -4, -2, -5, -4, 1, -2, 6, 7, 7, + -10, -6, -5, -1, 2, -2, -3, 2, -2, 3, 1, 3, -1, -1, -1, -4, -1, -7, -3, -6, -7, -2, -1, 3, 1, -3, -11, -7, -8, 0, + -4, -4, -2, -4, 3, 4, 2, 2, 1, 8, 8, 5, 1, -1, -3, -1, 0, -2, -1, 3, 1, -4, -3, -7, 0, 4, -1, -5, -5, 0, + 3, 9, 5, 4, 4, 2, 0, -1, -1, -7, 2, 0, 0, 0, 4, 3, -1, 0, 3, 7, -2, -5, -4, 1, -3, -1, -4, 2, 1, 1, + -6, -12, -5, -3, -4, 1, 3, 4, 9, 0, 0, -4, -1, 2, 5, 8, 0, 7, 0, -3, -10, -9, -2, 7, 2, 7, 4, -8, -1, 3, + 9, 2, -8, 4, -5, 9, -6, 2, 2, -1, 2, 0, -3, 2, -1, 8, -5, 3, 0, 2, 3, 1, 4, -7, -4, 7, -5, -13, -1, -1, + -1, -5, 11, 6, 0, 1, -11, 4, -7, -3, 0, -4, -9, -7, 2, -6, 2, 6, 2, 6, 9, 8, 8, 2, 3, 1, -2, 3, -1, 3, + -3, -2, 0, -9, -3, -4, 5, -5, 2, 5, -2, 4, 3, 0, -2, -2, -3, 3, 5, 3, -2, -7, 0, 4, -3, -2, -7, 2, 6, -4, + -3, -2, -12, -7, -10, 4, -2, 0, 4, 5, 8, 0, -4, -3, -3, -1, -4, -9, -3, -4, -2, 1, 0, -3, -2, 2, 3, 3, 4, -4, + -6, 1, -6, -6, -2, 1, -2, -1, 7, -1, -4, -3, 3, -1, -6, -2, 5, -4, 8, 1, -3, 6, -4, 5, -2, 0, 0, -3, -9, 3, + 1, -2, -7, -5, 1, 6, 2, -1, -4, 3, 9, 0, 6, 10, -1, 3, 6, 2, 4, 6, 2, -5, 6, -3, 4, 3, 3, 1, 0, -2, + -2, 1, 0, 0, 0, 7, 1, 3, -1, 3, 2, 2, -3, 2, -2, -4, -1, -6, -3, -3, -5, -10, -11, -5, -7, -4, 4, 6, 11, 15, + 5, 0, -9, 2, 3, -1, -5, -1, 3, 9, 10, 9, 4, 4, 3, 4, 3, -3, -3, -1, -4, -4, -6, -2, 1, 7, 5, 2, 2, 1, + 0, -1, 1, -4, -1, -3, 2, 0, 0, 4, -3, -7, -5, 1, -4, -4, 6, 5, 4, 0, 6, 5, 1, 0, -3, 6, -1, 2, -8, -5, + 4, 2, 1, -8, 8, -1, -7, 0, -1, 4, -2, -6, -9, -1, -1, -2, 0, -8, 4, -3, -1, -9, 1, 0, 2, -1, 0, 1, -2, 1, + 2, 2, 0, 0, -3, -10, -8, -1, -3, 1, 11, 5, -3, 5, -6, 0, -8, -5, 13, 3, 3, 5, 4, -7, -3, 2, 6, 3, 1, 1, + -7, -12, -9, 6, 1, 4, 0, 7, 11, -3, -11, 1, -7, -1, -12, -3, 2, 5, 3, 5, 4, 2, 5, -5, 3, 1, 5, 2, 8, 3, + 1, -6, -3, 3, -5, -3, 1, 5, -1, -10, -3, 4, 0, 3, 3, -2, -7, -1, -5, -1, 3, -1, 4, -7, -2, -8, -1, 5, 7, 2, + 4, 4, -3, -3, -9, -8, -4, 1, 0, -3, -3, 0, 4, 6, 5, 4, 9, -9, -13, -5, 6, 4, 1, 3, 5, -2, 1, 5, -2, -1, + -4, 1, 2, 5, -6, -3, -4, -3, 1, -6, -5, -5, 3, 9, -3, -6, -3, -5, 2, -5, -4, -5, -6, 3, 0, 8, -2, 0, 0, 5, + 0, 8, 2, 1, 8, 0, -3, -7, 5, 5, -2, 1, 5, 0, -5, 0, -7, 3, 8, 4, 14, -4, 2, 8, -7, 6, 4, 3, 6, 4, + -7, -2, -3, 2, -11, 0, -7, -8, -6, -11, 2, 3, 2, 1, -2, -3, -9, -4, 0, -1, 2, -5, -6, 1, 7, 0, 1, -4, -1, 6, + 4, 7, 4, 3, 0, -3, -8, -3, 0, -3, 2, 0, 2, 1, -2, 0, -3, -3, -2, 0, 9, 6, -3, -8, 0, 1, 3, -3, 3, 5, + 2, 1, -2, 3, 1, -1, -1, 0, -4, 1, 5, 6, 5, 3, 7, 2, -4, -3, 7, -2, -3, -1, 6, -3, 8, 7, 10, -3, -3, 1, + 1, 4, 4, -3, -1, 0, 0, -4, -3, 5, -1, -1, -3, 2, 7, 4, 3, 1, 1, -4, 5, -2, -6, -5, -4, -2, 7, 7, 3, 0, + 7, -4, -7, -4, -6, -1, -3, -6, -6, -1, -5, 9, -1, -10, -5, 6, 0, 5, -16, -8, -1, -13, -7, 4, -15, -1, 10, 6, -4, 10, + -2, 1, 13, -1, 0, -7, 1, -8, -5, 4, 7, 1, 10, 7, -4, -5, 2, -11, 0, -9, -3, -3, -3, 2, 10, 6, 10, -10, -5, 0, + 0, -6, -1, 5, -1, -3, 2, -4, -2, 3, -3, 0, 3, -6, -19, -7, -2, 10, -3, -2, -4, -5, -4, -4, 2, 0, 5, -4, -5, 1, + 10, 2, 5, 9, 2, -5, 1, -3, 4, 2, 0, 2, -3, -6, 0, -6, -1, -1, 1, -4, -6, -12, -5, -4, -5, -12, -11, -12, -3, 0, + 4, 3, 11, -2, 6, 3, 8, 2, -4, -13, -4, -2, -7, -6, -9, -2, -4, -12, -7, -6, 1, 0, -3, -10, -2, -6, -5, 0, -4, 5, + 0, 7, 3, 12, 6, 4, 5, -9, 5, 0, -2, -11, -3, -6, 5, 12, 6, 2, 3, -5, 1, 1, -4, 1, -3, -3, 3, -1, 2, 2, + 2, 8, 2, 3, 12, 2, 0, -4, 1, -7, 3, 2, 0, 3, 8, -7, -1, -7, -6, -4, -7, -8, -4, -2, -4, -2, 2, 3, 3, -4, + -1, -1, 2, 4, -6, -1, 3, 6, 6, 0, 2, 0, -3, 0, 4, 1, -1, 0, 0, 0, 3, 2, 0, 4, 8, 6, 4, -2, -2, -5, + -2, -4, -1, -1, 4, 3, -1, -6, -4, -3, 4, 5, -5, -6, -5, 5, 0, 2, 3, 3, 0, 1, -2, 2, 4, 2, 2, 10, 1, 4, + 0, -2, 2, 1, 3, 2, 5, -3, -4, 3, 2, 1, -3, -1, 4, 2, 0, -1, 9, 3, 0, -2, 6, 5, 0, 3, -2, -5, 2, -3, + 1, 0, 0, -1, -4, 2, -1, 1, 5, 2, 0, -6, -5, -9, -2, -11, 31, -9, 0, 4, 19, -7, -2, -20, -9, -5, -23, 7, 11, -7, + 5, 8, 13, 4, 11, -8, -6, 3, 1, -4, -3, -3, -9, -4, -1, -1, -5, 2, 6, -4, -8, -3, -4, 7, 9, -1, 5, 8, 8, 6, + 10, -2, -11, 9, 6, 2, 1, -8, 2, 7, -6, -2, -2, 0, -2, 3, -1, 0, 1, -12, 6, 6, 0, -5, -3, -4, -3, -1, 1, 6, + -8, -16, -8, -6, -3, 4, 0, 1, 0, 6, 10, 7, -2, 2, 1, -4, 6, 0, 5, 3, 0, 10, 8, 22, 13, 13, 5, 4, -1, -11, + -10, -4, -2, 5, 5, 7, -1, 2, 3, 5, 5, 2, -2, 7, -2, 0, -6, -5, 4, 2, -1, -3, -7, -6, -7, -3, -8, -13, 2, -8, + -13, -9, -4, -7, -6, -8, 0, -9, 6, -2, -16, -11, -20, -16, -33, -29, -24, -25, -7, -1, 5, 0, 8, 6, 11, 11, 6, 5, 17, 6, + 15, 6, 0, 12, -5, 7, 15, 4, -3, 2, 0, -1, -2, -2, -4, -6, 6, 1, 1, 19, 2, 0, 3, -3, 2, 4, 6, 3, -7, -10, + -7, -2, 7, 3, -1, -2, 2, -1, 2, 4, 3, 3, 12, 5, -2, -4, 3, 3, 1, -1, 1, 4, -2, 1, 5, 5, 0, -3, 1, 8, + 4, 2, -6, -4, -6, -4, -8, -4, 1, -1, -5, -5, -12, -9, -5, -7, -1, -6, -1, 8, 9, 1, 10, 12, 5, 0, 4, -4, 4, -1, + 2, 3, 1, 3, -1, -2, -6, -2, -5, -13, -9, -7, -10, -15, -5, -7, -14, -11, 0, 7, 2, -2, -2, 6, 3, 3, 0, 3, 3, -1, + 0, -2, -2, -5, -7, -2, 6, 6, 2, 1, 14, 9, 0, 4, 4, 2, 1, 1, 5, 14, -35, 82, -40, 19, -8, 16, -19, 10, -21, -8, + 1, -12, 9, 1, -7, 0, 8, -1, -16, 2, 11, 6, 8, 3, 2, -2, 1, -9, -8, -1, 1, -2, 2, 1, 4, -1, 0, -3, -1, 4, + -2, 10, 6, 0, -5, -6, 2, -4, 9, -4, -3, -1, -3, -6, 6, -4, -10, -5, 6, 1, 2, 6, 2, -2, -7, 3, -3, -8, -12, -20, + -15, -9, -7, 0, -4, -7, -17, -17, -12, -9, -3, 8, 9, 20, 14, 6, -3, -12, -8, -9, -11, -7, -9, -11, -10, -6, 4, 12, 13, 19, + 16, 5, -2, -13, -17, -12, 2, 12, 18, 13, 24, 19, 12, 1, -3, 0, -7, 0, 2, 3, 8, 0, 1, 8, 5, 0, -11, -11, -6, -9, + -9, -8, -7, -1, 5, -9, -11, -20, -25, -18, -15, -7, -1, 7, 8, -2, -13, -28, -31, -40, -41, -32, -7, 37, 47, 65, 44, 25, -1, -20, + -29, -32, -34, -16, -12, 2, -1, 5, 5, -3, 4, 8, 8, 12, 11, 8, 9, 12, -11, -9, -8, 12, 9, -3, 15, 4, 4, 10, 11, 5, + 10, 4, 4, 6, 2, 5, 4, 4, -1, -1, -4, -1, -3, 0, 0, -1, -1, 4, 2, -3, -1, -7, -2, -6, -3, -2, -1, 0, -6, 1, + 4, -4, -7, 2, 1, -5, -2, -3, -6, -7, -3, 3, 6, 7, 6, 0, 6, 4, 0, -2, -1, 3, 5, 2, 2, 3, -6, -5, 0, -3, + 1, 3, -1, 2, 9, 3, 9, 5, -9, -1, 0, 5, 3, 8, -8, -27, -47, -85, -100, -106, -99, -85, -43, 9, 44, 56, 50, 41, 28, 12, + -3, -5, -13, -16, -16, -4, 6, 12, 23, 21, 19, 8, 8, 4, -4, -6, -13, -12, -13, -8, -7, -9, -25, -27, -29, -82, 127, -116, 71, -51, + 25, -32, 35, -1, -22, 23, -37, 26, -20, 3, -8, 8, 12, -18, -19, 11, 11, -13, -1, 16, 13, -9, -10, -3, 0, -5, 8, 9, 16, 10, + -4, -1, 3, -6, -4, -11, -6, -15, -4, 2, -12, -7, -8, -1, -6, 4, 8, 12, 7, 10, 8, 6, -4, -3, 3, -2, 0, 6, 3, 26, + -3, 4, 7, -2, -5, 12, 6, 5, -3, 22, 17, 7, -1, -4, -5, 2, 0, -6, 7, 6, 5, 15, 24, 6, 14, 3, -9, -7, -15, -12, + -12, 3, 1, 4, -9, -16, -4, -11, 1, 5, -2, -11, 2, -2, 0, -13, -10, -6, 9, 0, 2, 12, 0, -9, -2, 17, 7, -7, -1, -5, + -14, -2, -11, 1, 11, -11, -6, 8, 6, 7, 1, 4, 5, 9, 1, -5, 6, 7, -3, 5, -12, -6, -4, 1, -4, -6, -6, 7, -13, -3, + 7, 9, -3, 8, 16, 9, 23, 1, 12, 4, 13, 15, 10, 9, 2, 3, -2, -11, -17, -20, -4, -7, 0, -14, -6, -12, 3, -7, 19, 13, + -4, 5, 3, 8, 2, 1, 3, 4, 4, 5, -4, -7, -5, -3, 6, 2, 2, -5, 0, 0, 3, 3, -5, -2, 4, 0, -8, -8, -4, -7, + -2, 2, 7, 10, 10, 14, 10, 0, -1, 2, -1, 7, 15, 11, 6, -5, -7, -12, -4, -2, 0, 4, -3, 4, 4, 6, 18, 1, 4, 4, + -4, 4, 5, 1, -10, -13, -11, -5, -9, -10, -8, -3, -1, -9, -2, -4, 5, 11, 11, 11, 5, 21, 7, 4, -2, 4, -1, 0, -9, 3, + -4, 10, 5, 1, 5, -9, -8, -1, 1, -3, 5, 5, 1, 5, 9, 3, -6, 2, -5, 5, -4, -1, -6, -4, -3, 3, -8, 18, 1, -11, + 27, -10, -12, 7, 30, -13, -8, 13, 16, -23, -11, 7, -1, -22, 7, -5, 3, -1, -5, -8, -10, 22, -8, -21, -18, 4, 0, -6, -1, -2, + -16, -1, 23, -1, -4, 4, 5, -15, -14, -9, 6, -8, 4, 3, 5, 14, 0, 2, 6, 3, 2, 1, -5, -2, 2, 1, 2, -10, -2, -4, + -4, 3, -4, 0, 0, -9, 3, 8, 3, 5, -2, -13, -4, -10, -10, 1, 3, 6, -4, 1, -4, -8, -1, 18, 4, 2, -1, 15, 16, 4, + -2, 3, -1, -1, -1, 2, 10, 6, 4, 7, 10, 6, 11, 9, 4, 2, 2, -1, -2, -7, -10, -5, -5, -2, -2, 2, 8, 6, -15, -7, + -3, 2, 13, 9, 1, 9, 2, -9, 13, 9, -13, 0, -5, 10, 0, -12, 3, -8, -9, -1, -21, 11, -4, -3, 3, 12, -2, 17, 10, 10, + -3, 14, 8, 11, 11, 7, -6, 5, 5, 15, -3, 1, 3, 9, 10, -6, -6, -12, 1, 7, 0, -19, -9, -6, -16, 1, 11, -7, -17, 0, + -16, 5, -4, 2, 3, 7, 4, 9, 8, 7, 8, 3, 1, -4, -8, -6, 6, 2, 3, -7, -7, 1, 14, -1, -8, -12, 5, 9, 13, 12, + 1, 8, 0, -8, -6, -12, -4, 3, 2, 1, 1, -3, -4, -2, -1, 3, 1, 1, -7, -17, -20, -17, -8, -4, -5, 6, 10, 6, 1, 1, + 17, 9, 7, -4, -6, 6, -4, 5, 2, 1, -8, -15, -6, -8, -18, -16, -3, -5, -8, 2, 3, 7, 1, 3, 6, 4, 1, 0, -7, -6, + 1, 7, -1, -14, 7, 20, 2, -3, 9, 3, -3, -5, -3, -5, 3, 5, -3, 1, 3, -1, 1, -13, 6, 2, -3, 8, -9, -7, -17, -14, + -3, -4, 3, -7, -4, 22, -2, 7, 1, 23, -7, -9, -7, -8, -35, -5, -10, -11, 7, 14, 6, -13, 7, 19, 18, 13, 2, 9, -21, -25, + 1, 13, -6, 9, 8, 5, 10, 13, 2, -13, 3, -5, -5, -10, -11, 1, 5, 8, -6, 12, -1, 11, 4, 7, 12, 0, -8, -1, -4, 15, + 10, -15, -6, -9, -8, 4, 10, 11, -7, -4, 1, 3, -1, 4, 5, -2, -1, -14, 2, 15, 7, -2, 3, -4, -12, -17, -13, 7, 2, -6, + -5, -12, -14, 3, -4, -7, -18, -19, -24, -20, -19, -9, -3, 2, -3, 6, 22, 16, 7, -2, -8, -9, -4, 6, 8, 0, 0, 7, -13, -3, + -7, 2, -14, -14, -3, -1, -11, -8, 8, 2, 7, 8, 5, 10, 7, 1, -1, 2, 15, 25, 10, 9, -7, -2, 0, -3, 2, 2, -3, -1, + 8, 6, -4, -5, 3, 10, -1, -5, -2, 21, 15, 20, 12, 17, 11, -1, -11, -2, -5, -6, -8, -11, -7, 7, -9, -5, -14, -24, -1, 6, + -13, -13, 3, -6, 1, -2, 17, 13, 8, 13, -2, 0, 8, 12, 7, -3, -2, 1, 2, 5, 8, 6, 14, 6, -6, -9, 3, 7, 0, 11, + 5, -4, -10, -12, -18, -17, -13, -9, -3, -6, 0, -3, 1, 4, 8, 5, 4, 0, 6, 2, -6, 0, 6, 3, 5, 7, 5, 1, -3, -7, + -5, -4, -6, 1, 0, 5, -5, -4, -8, -6, -7, 2, 6, 10, 5, 3, 9, 8, 3, -1, -16, -10, -4, 4, -1, 7, -1, -1, 4, 8, + 17, 13, 4, -12, -6, -5, -9, -10, -16, 5, -3, 5, 1, 1, 5, -5, 5, -4, 3, -6, -4, -1, 0, 1, 5, 4, 1, -8, -4, -5, + 4, -7, 3, 2, -13, -15, 3, 11, 11, 1, 25, -11, 15, -21, -2, -13, -10, 4, -1, -11, -6, -14, 8, 28, -9, 25, 1, -2, 8, -2, + 5, 4, 14, -12, -15, -3, 4, -16, 0, 9, 8, -6, -6, 0, -8, -12, 1, -24, -4, 4, 3, 13, 5, 15, -2, 12, -2, 1, 7, -11, + -5, 9, -3, 10, 0, -2, -12, -10, -4, -3, -5, -3, -3, 1, -20, 0, -6, -9, -15, -12, -11, -15, -2, 8, 23, 17, 2, -5, 0, 1, + -11, -21, -12, -8, 0, -8, -4, -5, 16, 18, 13, 7, -4, -7, -7, -9, -6, -8, -2, 2, 18, 8, 10, 4, 5, -3, 0, -13, 13, -1, + -4, -5, 5, 3, -4, 10, 6, -6, -1, 8, 8, -2, -4, 9, -1, -1, -10, -15, -13, -4, -1, 4, 2, 4, 12, 6, 28, 16, -3, -2, + -16, 1, -19, -21, -19, 9, 16, 28, 26, 1, 15, 19, -13, 1, 7, 10, 10, 12, 29, 19, 22, 10, -7, 7, -15, 10, 0, -5, 5, -1, + -17, -13, -23, 0, -12, -3, -7, -14, -5, 2, -3, 5, 15, 2, 12, -4, 1, -5, -3, -9, -10, -11, -10, -12, 1, -6, 6, 0, -1, 3, + 6, 6, 16, 11, 5, 1, 1, 2, -4, 0, 6, 1, 3, 3, -1, -3, 3, -8, 2, 3, 11, -8, -10, 1, 1, -1, -2, 0, 4, 6, + 4, 10, 15, 8, 2, 2, 7, 5, 5, 5, 1, -1, -1, 2, 0, -7, -3, -12, -1, -5, -12, -3, 2, 10, 9, 13, 12, 11, 10, -1, + 0, -17, -18, -9, -4, 20, 16, 15, -3, -6, -11, -4, -16, -10, 1, 1, 2, -5, -8, -16, -16, -7, -23, -9, -3, -10, -9, -10, -3, -1, + -2, -3, 2, -7, 10, 6, 4, 1, 4, -2, -8, 6, -1, -2, -5, 34, -9, 9, -15, 18, -11, -18, 14, 13, -15, -13, -27, -3, 11, 1, + 10, 5, 4, 10, 5, 2, 1, 7, 1, 0, -5, -15, -13, 10, -7, -9, 3, -3, 11, -5, 5, 4, 0, -7, -7, -2, 11, 23, 6, 5, + -7, -7, 2, -6, -9, -4, 16, -7, -4, 12, 7, -9, -13, -4, 1, -2, 7, 6, 3, -19, -13, -16, -10, -16, -8, 0, -9, 4, -2, 4, + 3, 3, 13, 18, 19, 30, 11, 6, 8, 5, 10, 16, 6, 10, 8, 11, 14, 20, 21, 17, 7, -3, -3, 11, 15, 6, 5, -1, 14, 4, + 4, 1, 5, -7, -13, -20, -26, -18, -18, 2, 3, 7, -7, -6, -2, 2, -7, -3, -18, -16, 6, -14, -20, -16, -31, -23, -10, -23, -25, -27, + -7, 6, 17, 10, 14, -2, -1, 13, 5, 20, 9, 20, 3, 14, 11, 30, 14, 29, 16, 32, 9, 13, -2, 18, 15, 10, -2, -5, 2, 6, + -10, -17, -31, -42, -31, -18, 4, -14, -3, -19, 1, -1, -14, 10, -1, 2, 7, 20, 12, 27, -8, -6, -2, -1, 6, 5, 1, 2, -2, -13, + -11, -4, -2, 2, -3, 3, 5, 5, 2, -5, -9, 3, 1, 8, 12, 8, 2, -4, 2, 0, 4, -1, -4, 4, 1, 0, 5, 0, 5, 8, + -1, 0, 5, 4, -6, 5, 2, 0, -4, -8, -11, -2, -2, -11, -14, -3, -7, -8, 0, 0, -4, 1, -2, -13, -4, -6, 1, 0, -7, -4, + 7, 4, 6, -2, 9, -7, -8, 0, 8, 1, 3, 8, 4, 10, 8, 11, 4, 2, -5, -3, 2, 4, 8, 4, 10, 2, 3, -6, -6, 3, + -10, -9, -11, -9, -8, 1, 11, 7, 11, 7, -4, 0, 7, 16, 7, 15, 5, 4, 5, -6, 27, 29, 34, 8, 36, 2, -10, 23, 17, -23, + -10, -28, 13, 11, 4, 24, 11, 15, -24, 9, 23, 5, 12, -4, 3, 11, -6, -2, 15, 15, -8, -6, -1, 3, 0, -10, 0, -10, -9, -6, + 4, 11, 7, 11, 19, 9, -9, 3, 11, 7, 15, 13, 4, 0, 2, 11, 0, -20, 10, -8, -11, -4, -4, -3, -13, 23, 8, 5, -1, -13, + -17, -3, 5, 8, -7, -5, -6, -5, 8, 1, -8, -24, -5, 4, 2, 7, 22, 17, 11, 11, 31, 22, -12, -14, -28, -46, -37, -24, -9, 15, + 41, 45, 42, 23, 13, 14, -16, -14, -20, -18, -21, -38, -33, -29, -28, -29, -34, -38, -47, -47, -48, -33, -30, -23, -26, -19, -45, -20, -5, -16, + -13, 17, 34, 37, 24, 26, 33, -5, -2, -22, -37, -49, -31, -15, 5, 54, 52, 23, 6, 5, 24, -8, -2, 6, 5, -9, 6, -10, 1, 3, + -5, 5, -5, -7, -7, 1, 8, -5, 7, 6, 12, 2, 3, 20, 8, -9, -29, -14, -4, -17, 15, -2, 12, 52, 44, 12, 10, 14, 21, 15, + 14, 6, 1, 9, 6, 9, 6, -2, 0, -2, 5, 4, 1, 0, 5, 6, -1, 7, -4, -1, -2, 0, 1, -20, -29, -24, -21, -10, 5, 18, + 21, 15, 14, 9, 6, 10, 3, 7, -6, -6, -1, -8, -7, -5, 3, 1, 11, 19, 3, -1, 2, 12, 3, -6, -5, -9, -9, 3, 2, 9, + 21, 49, 53, 60, 62, 64, 61, 40, -9, -35, -56, -69, -56, -39, -15, 11, 19, 26, 29, 23, 25, 8, -4, -3, -20, -25, -22, -22, -16, -4, + 12, 22, 34, 26, 13, -11, -41, -69, -72, -69, -61, -44, -25, 2, 13, 14, -8, -8, -28, -21, -2, 8, 14, 3, -19, -25, 51, -126, -44, 127, + 27, -108, 98, 89, 1, -10, -62, 83, -32, -43, 93, 40, -30, -44, 23, 68, -28, -33, 33, 25, 11, -30, 24, 33, 3, 2, 11, 5, -5, 0, + 8, 9, 7, -13, 11, 8, -3, 16, 1, 6, 1, -5, 5, -2, 5, 24, 15, 8, 11, 4, 2, 17, 3, 2, -10, -9, -6, 2, 7, 21, + -7, 2, 2, 5, 5, 12, -3, -1, 6, 4, -2, -3, -8, -5, 1, 10, 3, -7, -7, 3, 10, 13, 8, -1, 7, 3, -1, 1, -1, -2, + 0, -1, -1, 3, -3, 4, 2, -1, -6, -5, -3, 1, 7, -2, -2, -8, -4, -8, -4, 1, 6, -4, -9, -8, -1, -5, -1, -4, -4, 3, + 8, 5, 0, -5, 6, 15, 5, 4, -3, 3, 7, -1, 1, 7, 8, 5, -2, 1, -1, 1, 4, 9, 4, 1, 1, 2, 7, 7, 7, -2, + -8, -5, -6, 1, 2, -10, 5, -10, -5, 8, 0, 5, -1, 3, 4, 14, -4, -4, -8, -10, -10, 5, 6, 11, 9, 3, 7, -7, 2, 0, + -1, -4, -1, 1, 2, -5, -6, -9, -1, -3, -2, -2, -5, -6, -5, -4, -5, -3, 1, -4, 1, 2, 8, 6, 6, 3, -1, 5, -4, -3, + -4, -1, -3, 4, 0, 1, -2, -4, 0, -1, -4, 5, 6, 1, -1, -2, 3, 0, -1, 6, 6, -5, -11, -2, -3, 0, 2, 1, 3, 7, + -5, 0, 1, 4, -1, -9, -4, 1, -4, -1, 3, -9, 2, 4, 5, 2, 4, 3, -3, 3, 5, 5, -4, 3, 2, -1, -7, -5, -9, -9, + -12, -8, -2, 12, 0, 2, -2, 3, -8, -4, 1, 0, -1, -2, 4, 6, -4, -6, -9, 4, 4, -3, 3, 11, 12, -3, -5, -5, -2, -5, + -1, 14, 22, -7, 4, 6, -10, 12, -9, -11, -13, 5, 1, -7, -12, -6, 7, -6, -8, -6, 2, 11, 9, -7, -1, 18, 5, 2, -8, -10, + -4, 1, 8, -10, 0, 3, -9, -7, 11, 2, 8, 1, 3, -3, 2, -2, 0, 3, -4, -10, -12, 1, -3, -1, -10, -4, 6, 4, 5, 1, + 14, 6, 0, -1, -2, -1, -11, 1, 0, 3, -4, -3, -1, 4, -7, -2, -6, -3, -1, 8, 3, 4, 2, 4, 7, 8, 8, -9, 4, 1, + 6, 3, -5, -9, 0, -1, -2, -6, 1, 10, 9, -3, -6, 1, 2, 1, -1, -2, 0, 4, 6, 0, -3, -1, -1, -6, -7, 6, 0, 0, + -2, -3, -7, -6, 2, 11, 1, 12, 15, 2, 7, 7, -8, -3, 7, 4, 7, -5, -23, 1, 8, 13, -2, -4, 7, 13, -4, -2, 0, -1, + -9, 1, 4, 8, -4, -4, -3, -5, -2, -4, -4, -5, 12, 1, 13, -16, -7, -5, 0, 1, 3, 1, 14, 0, 3, 6, 3, 5, -1, 9, + 11, 7, 1, 2, 6, -1, -6, -2, 1, 3, 5, 4, 0, 8, 3, 4, 1, -8, -4, 0, 10, 7, 5, 3, 7, 5, 2, 3, 1, -7, + -8, -6, 1, -1, -5, -2, 5, 5, 9, 0, -7, -5, 2, -3, -3, -1, -4, 3, -2, -1, 2, 2, 6, 11, 3, 3, 2, 4, 6, 0, + 2, 2, -2, -3, 1, -1, -5, -4, -1, -2, -7, 1, -9, -9, 0, 1, -5, -1, -8, 8, 4, 7, 7, 0, 1, 1, -4, -4, -5, -4, + 5, 3, 2, 5, -4, 2, 8, 3, 3, -6, -2, -5, -5, -3, -2, -11, 0, -1, -9, 0, 8, 1, 9, 3, 3, -4, 2, 3, 4, 4, + -7, -7, -4, 6, 0, 0, 18, 23, 17, -2, -2, 2, 2, -2, 0, -7, 10, 3, -1, 1, 3, 1, 5, 7, 2, 6, 7, -3, -14, -10, + -5, 5, 0, -1, -1, -3, -12, -5, 9, -1, -4, -5, 3, 6, 4, 4, 4, -6, 8, 1, -7, -5, -2, -1, -1, -10, -7, -5, 12, -5, + 3, -5, 6, -1, 2, 4, 1, -4, -9, 7, -1, -6, 4, 0, -6, -7, -5, -2, -5, -7, -7, -4, 2, 7, 10, 7, 11, 9, 7, -1, + -3, -11, -4, 15, 18, 3, 10, -3, 7, 22, -6, -4, -2, 14, 17, 7, -16, 6, 4, 5, -8, 7, -8, -2, -5, -5, 2, -4, -1, 0, + -2, -1, 4, -7, 6, 7, 2, -2, 12, 5, -4, 9, -1, -3, -4, -14, -6, -19, -5, 8, -6, 7, -5, -18, 13, 9, 1, -3, -2, 4, + -2, -10, 4, 2, -5, -8, 7, 0, -1, 2, -6, -8, 1, -21, 3, 0, -8, 3, -2, -4, 0, 3, -1, 1, -5, 6, 3, 11, -4, 0, + -1, -1, 0, 2, 12, 10, 0, 4, 3, 10, 10, 7, 1, 5, 5, 4, 2, 2, -9, -10, -7, -1, 0, 5, 5, 5, -1, -6, 1, 2, + 3, 1, 0, -1, -9, -4, -3, -8, -3, -2, -3, -3, 1, 5, -1, -7, 3, 5, 9, 5, -1, -3, 4, -1, 2, -1, -1, 4, 2, -7, + 4, 3, 2, 0, -7, -5, -1, -8, 2, -4, -9, 0, 6, -2, 5, -1, -2, 2, 0, 1, -1, -4, -1, 2, 8, 7, 4, -9, -7, 5, + -2, -4, -2, 4, -3, -5, -1, 3, 1, -8, 0, 1, -4, 3, 0, -2, 5, -1, 6, 4, -3, -2, -1, 2, -4, 8, 7, 2, -2, 1, + 1, -6, 2, -3, -5, 1, -2, 5, 4, 15, 9, 7, 12, 11, 2, -1, -2, 5, -8, 5, -13, 1, 8, -5, 2, 6, -3, 3, -2, 0, + 6, 6, -5, -3, -8, 6, 0, 2, 12, 4, -6, -4, -5, 12, -13, -7, -3, 6, 7, 8, -7, -8, -6, 3, -6, 8, 4, 11, -3, 7, + 0, 1, 1, 4, 0, -2, 9, -3, -8, 3, 12, -5, 0, 2, 14, -1, -14, -3, 0, 0, -11, 4, 3, -11, -11, -8, -8, -15, -11, 1, + 5, 1, 11, -10, -4, -3, 1, -1, 13, 13, 4, 5, 9, 8, 3, -5, -9, -5, 6, 8, -6, -5, 3, -2, 5, 7, -2, -5, -3, 4, + -2, -1, -3, 8, -1, -5, 11, 3, 3, -3, 4, 5, 0, 2, -2, 0, 7, 8, -3, 0, -8, 4, -3, -3, 7, -2, -12, 3, -10, -3, + 5, -2, -5, 4, 12, 0, 1, 15, 9, -5, 2, -1, 2, -16, -1, -10, -4, -15, -5, -7, -5, 3, 13, 15, -4, 9, 11, 1, -1, -2, + 0, -4, 9, 8, 9, 7, -1, -2, -3, 9, 1, 1, 9, 14, 5, 2, 1, -8, -9, -7, 1, -3, 0, 1, -2, -4, 2, 0, 4, 1, + -1, -2, -1, 6, 7, 4, 9, 8, -2, 1, 4, -2, 0, -7, -4, -6, 0, 7, 4, 2, 7, -2, 0, 2, 6, 0, 0, 1, -1, 1, + 4, -1, -8, 3, 9, 10, 13, 5, 0, -2, 0, -1, 6, 8, 4, -5, -5, -3, -1, -6, -14, -1, -7, -3, -2, -2, 1, -6, 2, 6, + 6, -1, -4, -6, -5, 0, -9, -1, 9, -6, -7, -15, -8, 3, 6, 2, 5, -3, 6, 3, -2, 4, -3, 1, -5, -2, 2, 6, 0, -1, + 4, 2, -6, -9, -3, -6, -7, 6, 2, 4, -3, -1, 5, 12, 5, -1, -12, 7, 4, 8, -25, -3, 9, 7, -15, -19, -12, 6, -4, 5, + -5, -7, -2, -4, -2, 11, 4, -3, -20, 1, 15, 7, 2, 0, -1, -11, 1, 0, 4, -4, -8, -3, 3, 5, 9, -2, 1, 0, 2, 1, + 7, 5, 6, 7, 8, 11, 7, 4, 2, 0, 5, 16, 14, -1, 0, -8, 4, 7, 1, 7, -23, -17, -2, -6, -11, -11, -15, -18, -16, -18, + -13, -25, -15, -8, -3, -9, -6, -8, -8, -8, 4, 4, -2, 0, 7, 8, 7, 12, 6, -1, -6, -7, -3, 6, 7, -3, 0, -7, -10, -8, + -3, 0, -11, 1, 14, 14, 9, 4, -5, -6, -2, 4, 2, -2, 7, 8, -9, -18, -5, -9, -14, -6, -9, -8, -1, -3, 1, -14, -8, -1, + 5, 0, 0, -10, -1, 4, -7, -10, 0, 18, -2, 1, 10, 2, 4, -3, 8, 1, 3, 8, 2, -12, 4, -5, -3, -8, 0, -5, -4, 0, + -9, -3, -4, -9, 0, 4, 11, 23, 4, 11, -4, -9, -9, -8, 1, -2, 12, 4, -4, 5, -7, -1, 3, 11, 6, 10, 7, 9, 5, 6, + -1, -1, 1, 8, 3, 11, 7, 6, 2, 6, 5, 3, -2, 3, 2, -2, 5, 3, 2, -3, -4, -2, 6, 9, 7, 8, 5, 5, 6, 5, + 4, -2, 5, 0, 6, 3, 1, 0, -7, 1, 7, 1, -3, -6, 0, 4, -1, -1, 5, 1, -6, -1, -6, -9, -12, -3, -6, -16, -8, 4, + 0, -4, -4, 4, 2, 4, -1, -2, 3, 6, -10, -9, 1, 2, -11, -12, -7, -10, 0, 8, -3, 6, 2, 4, 0, 0, 1, -2, 0, -1, + -4, -4, 6, -2, -1, 14, 13, 7, 6, 9, -5, -6, -11, -6, -9, -7, 7, -1, 3, 10, -18, -40, 0, 15, 36, -55, -9, 25, 19, 14, + -35, -7, 23, 15, 5, -5, 3, 2, -5, 3, 4, 9, 3, -3, -2, 8, -3, 14, 2, -6, -4, 2, 4, -1, 0, 2, -6, 6, 2, 5, + 5, -6, -5, 2, -1, 1, -13, 2, -2, -4, 6, 17, -3, -5, 14, 4, -4, -10, -2, -6, -2, 3, -3, -6, -6, -15, -3, -1, 5, -1, + 8, 0, -7, -11, -6, -7, -2, 1, 13, 9, 8, 13, 16, 16, 26, 23, 15, 8, -5, -12, -17, -15, -14, -16, -20, -18, -11, -7, -2, 3, + 10, 0, 1, 3, 4, 5, -5, 6, 11, 6, 1, 0, 9, 9, 10, 5, 0, -7, -5, -2, -12, -15, -18, -8, -17, -14, -14, -16, -18, -5, + -4, -1, -7, -12, -18, -12, -19, -19, -12, -6, -3, -6, -5, 1, -1, 2, -8, -13, -7, -5, 7, 15, 20, 23, 23, 14, 14, 12, 4, 23, + 20, 22, 20, 33, 9, 8, 1, -14, -11, -4, -3, 16, 28, 20, 26, 7, 11, -17, -22, 11, -29, -43, -43, -2, -13, -21, -16, -10, -6, 0, + 6, 5, 8, 11, 7, 6, 13, 15, 14, 21, 25, 17, 22, 15, 14, 14, 6, -2, -11, -18, -22, -13, -15, -18, -17, -20, -23, -19, -9, -4, + 3, -5, -11, -14, -15, -1, -10, -10, -3, -1, -3, -3, 6, 1, 4, 10, 5, 4, 10, 12, 16, 26, 19, 18, 28, 17, 17, 15, 11, 10, + 16, -4, -10, -18, -19, -27, -31, -35, -33, -12, -11, -7, -4, 3, 5, 2, -3, 4, 8, 10, 10, 18, 26, 27, 29, 32, 26, 19, 12, 14, + -3, -14, -24, -17, -23, -24, -25, -13, -6, 7, 31, 49, 58, 56, 49, 40, 25, 3, -27, -46, -65, -82, -86, -77, -59, -45, -60, -111, -40, 127, + -118, -48, -28, 99, 37, -101, -34, 59, 22, -38, 6, 32, 26, -35, -14, 35, 13, -28, -19, 1, 20, -22, -8, -3, 6, -7, 14, 7, -2, 10, + 14, -4, 5, 1, 2, -3, -17, 4, 5, -5, -4, 3, 1, -4, -3, 5, 6, 0, 3, 1, 13, 5, 2, 8, 0, 9, 0, 2, 4, 3, + 14, 7, 3, -5, -8, -16, -16, -5, -6, -11, -19, 13, 7, 0, 17, 22, 23, 15, 0, -3, -2, -6, -1, 3, -5, 11, 10, 8, 26, 18, + 18, 16, 6, 8, 19, 0, -13, 3, 18, 17, 14, 23, 49, 37, 15, -13, -5, 3, 7, 10, -3, -16, -13, -24, -28, -15, 17, 18, 5, 7, + 17, 31, 17, -7, -2, -4, 1, 5, 2, 23, 26, 7, -2, -2, -10, 3, -13, 4, -1, -4, 2, -22, -24, 0, 12, -3, 6, 15, 25, 17, + -6, -2, 9, 18, 23, 19, -6, -3, 0, -3, -10, -11, 4, 2, -14, -12, 1, 7, 11, -4, 5, -6, -7, 3, 3, -27, -5, -16, -17, 9, + 16, 11, 4, -7, 2, 3, -7, 1, 7, 8, 5, 4, 3, 13, 3, 15, 9, 4, -3, -4, -11, 0, -7, -1, -4, -3, 8, 2, 8, 3, + -8, -11, -5, -7, -1, -2, 5, -2, 11, 18, 2, 14, 20, 14, 11, 0, 0, -3, -4, -10, -6, -18, -18, -27, -12, -5, 7, 5, -8, -18, + -11, -7, -1, -17, -20, -20, 1, -7, -6, -6, -5, 3, 3, -1, -4, 4, -6, 3, 12, -4, 5, -1, 0, 3, 8, 13, 7, 8, 11, -3, + -16, -14, -8, -9, -5, 12, 9, 12, 3, -21, -15, -16, -7, 8, 10, -10, 0, 15, -6, 0, 2, -15, -11, -3, 5, -9, 11, 5, -5, -47, + -70, -36, 9, 7, -26, 23, 7, -15, 4, 14, -40, -34, 6, 19, -9, 2, -20, -18, -12, -14, -25, 6, 19, -1, 3, 5, -8, 1, 16, -7, + -16, 4, 11, 7, 6, 2, 6, -16, 0, 2, 2, -10, 0, 10, 1, 2, -6, -10, -15, -11, -12, -18, -3, -2, -1, 4, -29, -4, -1, 6, + -12, -22, 8, -17, -19, -22, -7, 7, 11, 4, 13, 7, 5, -3, -1, -4, 7, 6, 4, 25, 25, 16, 0, -3, 10, 6, 13, 3, 6, 11, + -1, -17, -15, -22, -13, -9, -13, -12, 0, 20, 13, -14, -20, 18, 11, 22, 16, 6, -5, -39, -44, -34, -18, -10, -14, -20, -31, -24, -28, -24, + -6, 4, 6, -8, 1, 13, 15, -1, -6, 19, 2, 8, 20, 5, 28, 13, -11, -12, -1, 3, 5, -7, -7, -8, 15, 18, -11, -26, 4, 18, + 4, -12, 2, -1, -25, -16, -11, -11, 9, -8, 5, 23, -13, 5, -6, -12, -10, -3, 8, -10, 11, 18, 15, 1, -4, 4, 8, -6, -6, 15, + 6, -6, -13, 10, 22, -12, -9, 0, 0, 2, 0, -7, -6, -11, -11, -9, -6, 4, 15, 14, 19, 12, -4, 7, -4, -5, -1, 4, -5, 1, + -7, -13, -5, -9, -7, -7, 1, -11, -8, -4, -9, 4, 12, 26, 23, -1, 2, 8, -6, -12, -20, -19, 3, 5, 2, -4, -23, -24, -13, -9, + -6, 10, -15, -24, -21, -8, -20, -19, -26, -21, -29, -17, -14, -3, 6, -4, 2, -20, -24, -23, -11, -17, 9, 6, 4, 12, 20, -15, 0, 18, + 17, 6, 14, 0, -1, 12, 23, 2, 14, -1, 2, 12, -4, -16, -26, -10, -23, 5, -4, 9, -10, 3, -18, -22, -14, -2, 0, -4, 13, 0, + -5, -4, -11, 13, -21, -44, -12, -20, 16, -9, 7, 6, 1, 12, 15, -36, -15, 31, 6, 19, 6, 4, -8, 4, -2, 1, 0, 14, 7, 8, + -1, -8, -2, 8, 7, -13, 11, 24, 4, 3, 0, 1, -4, -11, 16, 1, -1, -3, -10, 10, 0, 2, 2, 19, 5, 10, -1, 10, 7, -4, + 11, -10, 6, 17, 24, 4, -12, 13, 3, -27, 17, 13, 11, -1, 6, -1, -2, 14, 16, 4, -13, -11, -28, 0, 9, 3, -6, -16, -9, 3, + -5, 16, 18, 8, 5, 0, 11, 23, 8, 5, 9, 6, -3, -13, 0, -2, -19, -18, -10, -2, 6, 14, 16, 20, 2, -8, -3, -13, -10, -28, + -15, -19, -19, -2, 6, 0, -4, -6, 0, 7, -3, -13, -32, -31, -7, -15, 4, 9, 8, 14, 14, 16, 23, 18, -6, -16, 0, -1, 7, 28, + 23, -1, -2, -3, -3, -4, -1, 3, -28, -19, -13, 7, -20, -6, -6, -2, -7, -8, -3, -6, 5, 4, 47, 16, 31, 15, 8, -4, -12, 4, + -20, -16, 1, -5, 12, 15, 14, 12, 23, 13, 2, 8, 13, 20, 16, 13, 10, 4, 7, 0, -5, -15, -18, 4, 6, 16, 7, 11, 9, 13, + 6, -6, -11, -8, 6, -9, -4, -3, -1, 7, 2, 6, -7, -3, -2, -15, -18, -10, -1, 8, 8, 26, 39, 24, 17, 10, 8, 4, -3, -4, + 9, -3, 3, 6, 0, -5, -7, -15, -4, -9, -3, 0, -7, 2, 3, -2, 14, 17, 15, 3, 16, 10, 11, 16, 7, 7, 2, 4, 5, 4, + 8, 14, -13, -12, 1, -7, -11, -5, -15, -13, 3, 17, -1, 5, 0, 6, 1, 3, 0, -8, -12, -8, 1, 6, 3, -3, -18, -16, -17, 9, + -5, -9, -5, 12, -5, 10, 1, 19, 12, -7, -62, 5, -5, 6, -3, 10, -1, -12, 11, -11, -22, 13, 28, -8, 14, 35, 18, -4, 11, 18, + 5, 10, 5, 29, 6, -1, 4, -30, -27, -9, 2, 2, 18, -9, -9, 4, -9, 16, 11, -11, -4, -1, -4, -4, -27, -6, -5, -4, 1, -1, + -5, 10, 9, -5, -11, -8, -6, -12, 3, 20, 4, -4, -2, 1, -67, -10, 2, 15, 9, 8, -11, 3, 4, 0, 2, 1, 15, -14, -32, -2, + 6, -11, 9, -1, 0, -1, 8, -2, 12, 11, -13, -26, -34, -22, -28, -34, -36, -51, -27, -28, -44, -43, -13, 2, -2, -12, 10, 8, 4, -17, + -17, -21, -10, 3, 0, 10, -5, -1, 8, 1, -7, 20, 4, -2, -22, -1, -18, -26, -16, -25, -16, 12, -3, 8, 34, 22, -4, -16, -3, -3, + -21, -19, -26, -5, -5, -11, -24, -25, -8, -14, -23, 9, -15, -16, -6, 7, 11, 0, 5, 19, 8, 10, -1, 20, 6, -8, 9, 11, 7, -21, + 39, 7, -16, 11, 3, 4, 24, -2, 6, 21, 9, 14, 14, -6, 6, -23, -13, 9, 14, 13, 11, 8, -7, -12, -24, -23, -25, -20, -20, -8, + -8, -5, 0, 11, 6, 1, -3, -22, -22, -22, -22, -15, -10, -8, -9, -3, -14, -22, -24, -7, -16, -9, 1, 16, 5, 5, 11, 19, 6, -6, + -2, -3, -6, -5, 3, 4, 3, 10, 2, -2, 3, 13, 6, 1, -1, 21, -2, -6, -7, -21, -27, 5, -5, -6, -6, 8, 0, -16, 1, 1, + 15, -5, -8, 2, -8, -9, -13, -13, -12, -9, 0, -1, 2, 8, 6, 3, 4, -7, 2, 15, 24, 25, 43, 24, 17, -7, -5, -13, -9, 13, + 18, 16, -3, 5, 8, 16, 22, -11, -10, -14, -4, -2, 13, 15, -27, -70, -17, -34, 1, -2, 13, 24, -3, 5, -14, -29, 25, 22, -1, 10, + 21, 16, -1, 11, -9, -13, 25, 1, -9, -9, -10, -11, -18, -19, -13, -11, 20, 11, 10, 9, 2, -7, 14, 13, -11, 5, 3, -5, -7, -4, + -2, -5, -10, -12, -13, -9, 2, 0, -8, -16, -15, -12, 5, 15, 0, -6, 9, 18, 25, -80, 5, -8, 2, -7, -16, -15, -2, 0, -40, -37, + -40, -40, -38, -29, -17, -23, -8, -22, -25, -9, -15, -23, -28, -32, -21, -45, -38, -39, -29, -7, -2, -21, -30, -20, -8, -13, -12, -13, 7, 23, + 29, 23, 24, 34, 0, -16, -26, -11, -11, -25, -40, -33, -19, -47, -33, -23, -21, -34, -34, -21, -20, -9, -14, -20, -11, -20, -15, -11, -5, 9, + 19, 0, -20, -21, -17, -25, -27, -31, -30, -29, -29, -34, -32, -7, 3, -13, -20, -23, -7, -9, -7, 14, 5, 1, -4, 6, 5, -1, 21, 13, + -3, 17, 22, 25, 14, 24, 24, 1, 7, -26, -10, 5, 9, -2, 24, 17, 1, 11, -12, -7, -20, -13, 7, 5, 10, 17, 20, 12, 10, -1, + -5, -5, -17, -7, 1, -7, -7, -18, -17, -11, -10, -32, -31, -43, -43, -37, -26, -31, -27, -18, -12, -17, -15, -19, -5, 0, -5, 1, 0, 15, + 26, 29, 33, 18, 21, 12, -2, -3, -2, -5, 0, 2, -11, -23, -12, -1, 19, 14, 3, -10, -13, 0, -1, 2, 8, -9, 7, -3, -5, 10, + 11, 10, -1, 29, 23, 22, 7, 10, 14, 11, 0, -4, -14, 6, -5, -13, -10, 0, 9, 5, 16, 22, 1, -7, -4, 2, -6, -1, 12, 8, + 3, 0, -2, 0, 13, 5, -6, 6, 9, 12, 13, 9, 6, -12, 2, 5, 16, 18, 20, 9, -57, -41, 15, 46, 12, 41, 48, -2, 11, 12, + -22, 7, 26, 8, 13, 17, 2, -11, 12, -4, 3, 30, 25, -23, -20, -14, -6, -6, 7, 3, -12, 7, 14, 25, 13, -13, -5, 13, 17, -9, + 4, 3, -16, -11, -18, -10, -26, 5, 3, -1, -7, -4, -8, 9, -8, 5, -4, -10, 4, 6, -7, 13, 6, 16, -127, 8, 17, 2, -1, 4, + 14, 41, 35, 22, 8, -18, -10, 9, -22, -11, -17, 2, 20, 23, 8, 12, 15, 41, 40, 11, 3, 4, 8, 18, 4, -8, -18, -20, -11, -47, + -57, -36, -36, -44, -53, -42, -39, -53, -30, -28, -24, -35, -44, -12, -3, 41, 42, 45, 25, 29, -1, -2, 35, 9, -14, -19, -47, -55, -58, -82, + -92, -63, -39, -24, -32, -34, -12, -24, -14, -33, -24, -23, -36, -1, -7, -15, -8, -18, -24, -18, -18, -6, -27, 6, 18, 9, -5, -4, 10, 1, + -15, -14, -15, -30, -15, 3, 16, 18, 30, 12, 34, 28, 18, 40, 20, 47, 16, 20, 1, 0, -5, 20, -10, -27, -11, 23, 28, 24, 18, 18, + 26, 28, 21, 24, 12, 17, 16, 0, 19, 16, 29, 34, 29, 37, 39, 40, 25, 33, 30, 15, 30, 36, 37, 43, 36, 23, 21, 7, 7, -7, + -1, -5, -12, -24, -23, -11, -13, 3, 2, 4, -3, -19, -19, -17, -4, 17, 31, 40, 23, 21, 21, 17, 19, 15, 3, -8, 4, -8, -14, -23, + -27, -14, -12, 4, 10, 10, 12, 17, 36, 29, 27, 21, 22, 44, 55, 48, 48, 27, 34, 32, -2, -4, -26, -17, -21, -15, -20, -27, -21, -18, + -9, -29, -46, -38, -39, -35, -29, -34, -43, -30, -27, -34, -26, -13, 0, 15, 22, 31, 10, 4, -17, -35, -30, -28, -14, -76, -87, 63, 106, -83, + -39, 102, -25, -78, 41, 36, -83, 43, 6, -44, 15, 33, -43, 6, 19, -15, 29, 40, 2, 2, 0, -9, 0, 9, -6, 13, 18, 20, 23, 20, + 12, 13, 22, 4, -12, 15, 2, -3, -4, -9, 0, 0, 14, -2, -8, 13, 31, 12, -2, 21, -3, 20, 17, -6, 14, 1, 5, 11, 7, -106, + -6, -8, -2, -1, 5, 6, -9, 0, 2, 0, -3, 8, 5, 4, 4, 1, 5, 7, 3, 2, 2, -1, -4, -1, -10, 2, 4, 1, 5, -5, + -5, -10, -8, 4, -4, -6, 4, -3, 4, -3, -2, -8, -9, -8, 2, -3, 9, 0, 6, 22, 16, 4, -4, -1, 9, 0, -3, 12, 5, 8, + 1, -9, -3, -6, -5, 14, 15, 7, 9, -2, -1, -6, -16, 1, 3, 2, 9, 3, 5, 2, -8, -13, 9, 10, 9, 0, -12, -7, -20, 2, + -9, -4, -25, -8, -4, 4, -10, 0, 15, 6, -8, -3, 18, 10, -4, 12, -4, -8, 6, -8, 9, 1, -9, 16, 22, 13, 10, 6, 0, 2, + -9, -1, -1, -3, -2, 1, -3, -2, -4, -1, -7, -4, 5, 6, 3, 3, 2, 5, 2, 6, 3, -1, 0, -6, -3, 3, 8, 9, 9, -1, + 4, -6, -7, -2, -5, 7, -2, 8, 5, 8, 2, -2, -2, 4, 4, 5, 2, 3, 12, 6, 2, -3, -2, -3, -11, -21, -17, -5, -7, -1, + -5, -2, -8, 0, 1, 4, -4, 1, 21, 10, 9, 5, -4, 5, -13, -5, -12, -8, -10, -8, -15, -5, 7, 11, 2, 2, 5, -3, -15, 9, + 0, 1, 7, 11, 3, 8, 0, -8, -10, -8, -13, -14, 9, 5, 0, 7, 9, -4, -2, -4, 7, -7, -10, 12, -6, 5, 16, 4, 13, 9, + 17, 8, -10, 26, 20, 13, -19, 5, 1, -17, -23, 3, -5, -8, -6, -6, 6, 7, -14, -18, 6, -3, 7, 8, -11, 1, -6, 8, 3, 4, + -1, 0, 9, 6, 4, 11, -4, -5, 8, -3, -3, -13, -1, 6, 10, 12, 6, 3, 2, 3, -6, -4, -5, 7, 10, -5, -2, -1, 5, 7, + 16, 11, -9, -5, 1, 2, 8, 3, -7, -11, -3, 2, -2, 10, 7, 6, 0, -7, -6, 5, 0, -10, -13, 5, -2, 1, 5, -4, 4, -5, + 2, 12, 4, 3, 2, 6, 11, 5, 17, 5, 21, 1, 5, -2, 9, 6, -4, -3, 2, 9, -19, -15, 4, 15, -1, -4, 5, -6, -2, 11, + 19, 4, 6, 1, 1, 14, -5, -17, 9, 2, 9, 7, 0, -7, 0, -15, -6, -11, -7, -12, -13, -3, -3, -1, -14, 5, 7, -2, 5, -7, + 0, 3, -2, -2, 14, 0, -14, -3, 1, 2, -7, -7, 3, 15, 3, 7, 10, 4, 8, 3, 0, -20, -15, -14, -1, 10, 12, 6, 12, -6, + -3, 8, -3, 2, 4, -1, 2, -7, -12, -12, -1, -7, 2, 1, 9, 11, 8, 7, 0, -3, 1, 3, 1, 3, -2, -5, 0, -9, -7, -9, + -4, 1, 3, 4, 0, 4, 2, -3, 2, 0, -1, -3, -6, -3, -4, -5, 7, 8, 6, -3, -4, 5, 8, 3, 0, 10, -1, -8, 3, -7, + -18, -11, -1, -4, -3, -1, 5, 11, 13, 4, 8, 15, 1, 4, 6, -3, -9, -6, -6, -5, 2, 7, 14, 9, 8, 1, -4, -14, 22, -5, + -4, -2, 0, 3, 11, -3, 3, -10, -5, 3, 4, -2, 1, -2, -3, 7, 5, 12, 1, -6, 2, 3, -1, -2, 7, 6, -4, 4, 6, 3, + 4, 3, 1, -10, 12, -3, 13, -7, 37, 19, 1, -4, 24, -7, 12, 17, -12, -3, -2, 7, -11, -3, -3, -9, -18, 21, -11, -2, 14, -6, + -1, -4, -6, -10, -6, -3, 6, 2, -18, -4, 3, -3, -12, 4, -3, -15, -1, -11, 10, 8, 2, 8, 3, 3, -13, -1, -6, -3, 3, 14, + 3, -15, 1, -6, 5, 26, -6, 5, -4, 0, 4, -2, 7, 4, 2, 2, 2, 3, 4, 9, 20, 12, 2, -15, -7, -5, -4, -2, 2, 9, + 18, 4, -9, -14, -20, 0, -3, -2, 8, -6, -1, -5, -2, -2, 0, -7, -6, -15, -7, -6, -2, -8, -8, 11, 4, -2, -11, -4, 17, 4, + -9, 3, -4, -2, 12, 8, 9, 11, 1, 9, -1, -15, -6, -4, -2, 20, 1, -12, -6, -5, -3, 7, -10, -2, -9, -3, -1, 18, 14, 14, + 9, 5, 11, 15, 20, 5, 18, 12, 5, 7, 17, 27, 10, 13, 19, 0, -3, 6, 0, 0, 19, 9, 0, 8, 4, 5, 9, -5, -8, 2, + 1, -19, -12, -1, -1, -7, -10, -17, -6, -2, 1, -2, -7, -5, -5, -1, 2, 10, 3, 10, 11, 10, 6, 3, -7, -6, -2, -6, -7, 2, + 7, 4, 13, 3, -11, -4, -7, 4, -11, -11, -2, 2, -5, -1, 5, 1, -8, -16, -2, 3, -1, 4, -2, 6, 3, -2, 2, 5, 8, 6, + 7, 0, -7, -1, -11, -7, -5, -2, 7, 2, -15, -14, -7, 8, 6, 7, 1, -3, -2, 1, -1, -2, -2, 7, 3, -6, -8, 5, 4, 4, + -16, -3, -19, -8, -7, 6, 7, -11, -3, -2, -6, 6, -3, -3, 2, 3, -3, 13, 10, 6, 11, 12, -9, -6, -10, -3, -4, -6, -9, -11, + 12, 7, -2, -8, -8, -2, 0, 2, 3, -4, -22, -5, -18, 29, 10, -11, 23, 17, 9, 11, 22, 0, 1, 19, 14, 2, 5, 1, -12, -7, + 3, -5, 3, 0, 0, -15, 16, 21, 6, 0, 13, 13, 8, -3, -9, -4, 10, -4, 6, 0, 0, 4, 4, 23, 18, 5, 8, -9, 9, 0, + -4, 9, -14, 0, 4, 2, 11, -5, 2, 10, -9, 0, -14, -17, -5, -9, -3, 9, 7, -6, -10, -6, -1, -5, -1, -10, -13, -5, -13, 10, + 21, 5, -4, -4, -4, -6, -3, -8, -13, -7, 8, 6, 6, 16, 2, 8, 8, 6, 14, 2, 3, 4, 3, 5, 0, -1, 6, 8, 9, 8, + 8, -3, 3, 11, 4, -4, 12, 15, 16, 12, -7, -8, 2, 6, 8, 19, 1, -2, 6, 16, 21, 5, 5, 6, 11, 12, -9, -8, 5, 3, + 1, 4, -15, 12, -8, -17, -24, -14, -1, -10, -2, 7, 15, -2, -20, -13, -26, -26, -19, -15, -26, -1, -1, 5, -13, 20, -2, 10, 3, -4, + 8, -2, -6, -14, -4, -10, -6, -4, -1, 0, 25, 6, 10, -13, -6, -8, -2, -6, -5, -4, 1, -2, 7, 2, 3, -3, -3, -5, -9, 1, + 0, -4, -10, -9, -10, -9, -9, 0, -10, -7, 0, 10, 5, 12, 10, 16, 5, 3, 5, 1, 6, 3, 0, 0, -6, -10, -16, -7, -3, 1, + -1, 5, 6, 4, -1, -2, 0, 4, 15, -2, -1, 10, -2, -1, 1, -13, -14, 5, 15, 11, -3, -1, -3, -1, -8, -6, -6, -24, 1, -6, + -11, -14, -2, 1, 1, -7, 7, 4, -3, -6, -11, -9, -7, 3, -2, -7, -9, -1, 10, 12, 2, -9, -2, -1, -9, -15, -9, -10, -3, -11, + -3, 11, 7, -6, 0, -2, 9, 8, 15, 10, 16, 15, 14, 6, -10, -20, 28, -4, 40, -5, -16, 35, 13, -1, 25, 7, -3, -5, -4, 2, + -7, -8, 12, -7, -8, 2, -6, -2, -13, -8, -7, 1, -8, -3, -7, -1, -1, -5, -8, 12, 11, 6, 4, 9, -12, 8, -1, -16, 1, 3, + 11, 5, -6, 7, -8, -8, 2, -18, 3, 7, -6, -5, -6, 17, -6, -6, 2, 4, -16, -21, -21, -4, 0, 14, -5, -15, -6, -4, -4, -1, + 6, -5, 0, 4, 13, 6, -4, 7, 0, -15, -15, -20, -27, -17, -13, 0, -9, 1, 18, 18, 8, -15, -7, -5, -9, -2, 0, 2, -4, 7, + 4, 4, -2, 8, -10, -15, -15, -13, -2, 0, -8, 3, 16, 21, 28, 18, 0, -6, -8, 8, 6, -13, -19, -6, -4, 8, 8, 12, 21, 31, + 34, 20, 25, 26, 20, 11, 8, 24, 31, 20, 30, 36, 43, 28, 26, 36, 12, 2, -6, -25, -53, -71, -83, -99, -102, -104, -77, -36, -32, -14, + -4, -9, 12, 14, 10, 17, 29, 14, 10, 7, -8, 0, 8, -4, 1, -6, 12, -9, -6, 5, -24, -13, -7, 9, 0, -3, -7, -1, -8, -3, + 6, 10, 14, 10, 4, 1, 4, -1, 6, 3, -7, 0, 4, 3, 3, -5, 8, 0, 1, 4, 6, 2, -8, -20, -11, -13, -21, -11, -2, -2, + -9, -7, -2, 2, -1, -8, 6, 17, 19, 5, 7, -3, -9, -4, -8, -13, -14, -16, -5, -2, 0, -17, -1, 12, 26, 18, 11, 1, 3, 11, + -5, 4, -32, -2, -7, -17, -27, -8, -20, -18, -25, -8, -10, -23, -18, -40, -57, -76, -84, -94, -120, -127, -127, -122, -113, -90, -70, -23, -12, -5, + -15, -25, -18, -31, -25, -10, -7, 3, -7, -26, -17, -16, -18, 5, -17, -15, -31, -16, -6, -10, -43, 47, -23, 14, 22, -22, 54, 38, 29, 47, + 22, 17, 14, -7, -5, 8, 9, -3, -28, 5, 12, -1, 19, -7, -31, -18, 5, -1, -4, -7, -18, -12, -17, -4, 1, -2, -9, 7, -14, -10, + 4, -3, -16, -22, -7, -6, 6, -8, -9, -10, 0, -10, -24, -9, -19, -23, -20, -17, -4, -8, -16, 6, -6, -15, -45, 25, 23, -3, 0, 4, + -6, 14, 10, -1, -28, -24, -12, -15, -26, -14, 16, 36, 40, 44, 27, 7, -10, -1, -1, 13, 24, 14, 21, 7, -15, -19, -38, -8, -15, -13, + -6, -20, -18, -17, -26, -13, -3, 1, 21, 27, 1, -12, -33, -27, -5, 1, 20, 37, 32, 11, 2, -5, -5, -15, -16, -11, -4, -2, -8, -1, + -9, -11, 15, 1, -16, -7, -46, -27, -2, -17, 11, 0, 13, 10, -8, -1, -21, -10, -7, 0, -1, 31, 58, 89, 105, 83, 49, -8, -43, -40, + 2, 26, 77, 88, 72, 45, 21, 2, -20, 8, 15, 24, 18, -15, -16, -40, -32, -1, -4, -7, -5, -4, -18, -15, 10, -13, -12, -10, -8, -13, + -11, 0, -4, -2, -2, 5, 3, 4, 10, 3, -3, -3, 0, -8, -1, -4, -4, 0, -5, -1, 4, 4, 6, 8, 0, -8, 0, -4, -2, -3, + 4, 10, 2, -10, -11, -13, -17, -19, -14, -10, -1, -4, 13, 7, 8, 11, 7, -2, -7, -12, -13, -4, -12, -7, 1, 1, 3, 9, 26, 30, + 24, 15, 19, 12, -6, -9, -11, -14, -1, 4, 4, 11, -1, -8, 3, -23, -6, -18, 5, 13, 16, 36, 57, 57, 57, 22, -19, -69, -102, -100, + -72, -29, 20, 31, 20, 5, -16, -29, -28, -23, 2, -1, 0, -11, -11, -15, -19, -17, -16, -9, -10, -25, -18, -14, -10, -9, 35, -53, -33, -3, + -79, -59, 23, -53, 10, 11, -17, 41, -13, -27, 6, -7, -5, -17, 5, 16, 3, -7, 11, 0, 0, -6, 16, 18, 25, -4, 10, -4, 8, -3, + 0, -9, -5, -2, -2, -8, 11, 1, -8, 23, 13, 7, 16, 10, 16, 11, 5, 0, 8, 0, 11, 7, 6, 18, 5, 18, 22, 19, 12, -67, + -10, -14, -2, -9, 0, 5, -8, -1, 3, 1, -1, -3, -2, -7, -16, -15, -14, 1, -9, -12, -2, 2, -1, -9, -10, -6, 9, 6, -16, -12, + -10, 4, -8, -10, -4, 7, 0, -9, 3, 6, 3, -8, -7, -1, 4, 5, 13, 18, 2, 6, 6, 5, 3, 6, 3, -7, -5, -4, 6, 0, + -4, -12, -1, 10, 2, 6, -2, 12, 0, -2, 0, -6, -3, -16, -9, -17, -3, -5, -4, 2, -9, 1, -14, 2, -6, -4, -6, 2, -5, 7, + 9, -4, -10, 6, 1, 7, 2, 9, 2, -4, -11, -3, 2, 7, 8, -10, -5, -1, 8, 2, 11, 25, 13, -2, 14, 5, -6, -6, -7, -8, + -8, -14, -6, -9, -2, 0, 4, 5, 3, 3, 7, 6, 4, -1, -1, 2, -6, -6, -3, -4, 3, -4, -15, -8, 5, 1, 5, 4, 11, 11, + 1, 6, 5, 4, 2, 2, 5, -3, 6, -2, 6, -1, -8, -1, 6, 4, -1, 0, -2, 6, 7, 1, 1, -3, 3, -1, -2, 1, 5, 8, + 2, -2, -5, -2, -7, -3, 4, 7, 4, 5, 4, 7, 9, -1, 2, 0, 1, 1, 8, 6, 8, 9, 9, 1, 1, -9, -1, -3, -4, 0, + 1, -18, -8, 2, 0, 1, 3, 5, 4, -3, 1, 1, -11, -1, 8, 7, 9, 0, 9, 4, 1, -3, -5, -7, -2, -4, 1, -10, -1, 7, + -1, 0, 8, 1, -12, -5, -2, -4, -1, -14, -17, -11, 4, -9, -10, -14, 0, 0, 6, 5, 3, 8, 1, 15, 9, -1, 6, 1, -18, -6, + -12, -6, -13, 1, -2, -5, 5, 6, 0, 13, 12, -12, -1, -3, -8, -2, -2, 0, -2, -3, 1, 9, 3, -11, -8, -9, -11, -2, 4, -13, + -9, -2, -1, 6, -33, 2, 0, 8, 6, -4, 5, 3, 1, 5, -3, -4, 0, 3, -6, -5, -12, -5, 5, 3, 11, -6, -5, -3, -3, 6, + 8, 9, 8, 4, 8, 14, 1, 3, -4, 2, 7, -4, -3, 2, 9, 4, 0, -15, 5, -4, -7, -2, 10, 7, -8, 2, 8, 6, 12, -6, + -6, 2, 4, 1, -6, 0, 4, 3, 6, -1, 3, -5, -8, -3, -9, -5, -11, 0, 3, 7, -1, -15, -11, 1, 1, -3, -10, -12, -13, -17, + -7, 6, -3, -1, 6, 3, 4, -15, 0, -6, -10, -3, 6, -5, 0, -2, 2, -8, 1, 5, -12, -17, -10, -7, -3, 10, 9, 8, 8, -2, + 4, 8, -5, -5, -9, -2, -3, -2, 4, -1, 3, -1, 4, 7, 11, 2, 1, 0, -1, -8, 2, 4, 10, 4, 16, 15, 4, -3, -3, 2, + -3, -2, -1, 2, -2, 2, 1, 4, 5, 10, 8, 7, -1, 3, 3, 3, 0, 1, -6, -7, -6, -4, -2, -2, -9, -2, -2, 0, -4, 9, + -2, 4, -1, 3, 6, 6, 5, 6, 9, 4, 5, -4, 4, -3, -1, 4, 3, -2, 1, -1, 3, 6, 5, 5, -1, -6, 6, -6, -3, 2, + 2, 0, 0, 4, 1, -1, -4, -2, -3, -8, -7, -10, -5, -6, -5, 0, 10, 4, 4, 0, 1, 10, 1, -2, 3, 7, -1, -3, -5, -7, + 2, 2, -7, 5, -9, 10, -5, 11, -1, -18, -19, 8, -3, 6, 1, -16, 6, 0, 7, -2, 8, 8, 2, 7, 15, -11, 8, -6, 2, 6, + -4, -6, -6, -14, 7, 6, -4, -4, 9, 8, -7, 15, -3, 4, 5, 3, -6, 1, 10, -7, -8, -1, 9, 9, -1, 1, 14, -5, -2, 6, + 2, -13, 8, -11, -6, -3, -12, 1, -1, -20, 5, 4, -1, 4, 2, -9, -16, 1, -4, -8, -2, 0, -17, -3, -8, -13, 2, 8, -7, -2, + -8, 0, -3, -3, -6, -7, -5, 2, -12, -10, 0, -4, -8, -2, 1, -9, -4, 2, -4, -2, -6, 3, -4, 1, -8, 15, 7, 3, 3, 10, + -5, -16, -5, 2, -3, -1, 3, -5, -4, -5, -5, 6, 15, 2, 0, 4, 5, 16, 3, 6, -4, -9, 6, 2, 5, 1, -6, -4, 3, 3, + -8, -6, 1, -7, -13, -4, -9, -8, -9, 4, 3, 0, -7, 0, -3, 1, -5, 13, -4, 10, 0, -4, -6, -11, -4, 7, 1, 8, 6, 7, + 14, -1, 8, -8, 4, -2, 3, 3, 4, 5, 9, 8, 9, 3, 4, 5, 6, 2, -1, -2, 5, 7, 1, 9, 8, 5, -6, -2, -6, 3, + 0, 5, 2, 6, 0, 0, 2, 2, -1, -7, -6, 2, -6, -12, -3, 2, -3, -8, -6, -4, 2, 0, 13, 0, -6, -4, 3, 11, 6, 2, + -4, -2, -3, 7, 2, 0, 4, -1, 1, 0, 2, 1, -1, -4, -2, -5, 8, 3, -5, -6, 1, -6, 1, 8, 3, 9, -3, -4, 0, -3, + -1, -2, 4, 14, 1, 3, 1, 1, -5, 1, 2, -11, 9, 3, 0, 4, 6, 3, 3, 11, 9, 8, 0, -1, 1, -2, -3, -2, 5, -11, + -7, 1, 5, 2, 0, 11, 2, 0, -3, 4, -5, -13, 24, 7, -6, 1, 12, 5, 14, -1, -12, -5, -5, -14, 10, 19, 9, -3, 9, 7, + 0, -3, -3, -2, 7, 10, 15, -5, 1, -16, -7, 0, -2, -10, 13, 12, 14, 6, 11, -4, 6, -7, 14, 3, 2, 1, -2, -8, -13, 3, + 1, -5, 7, 11, 2, 1, -9, -6, -8, -1, -8, -6, -2, 5, -4, -15, -4, 6, 1, -10, -9, -7, -13, -5, 7, 4, 6, -6, -5, 7, + -7, 7, -2, -3, 2, -8, 0, 2, -5, -5, 1, 3, 7, -9, 1, 9, 2, 12, 7, 6, 12, 7, -2, -3, -5, -4, 0, 8, 12, -2, + 0, -1, 11, 19, 14, 12, 7, 16, 2, -1, 2, 13, 1, 2, 12, -1, 0, 6, 0, -5, -1, 5, 1, -1, 2, 7, 2, 4, 2, 12, + 8, 1, 8, 4, 3, -5, 10, 12, 11, 7, 5, 3, 3, 5, -13, -3, -4, -12, -7, -7, -6, -7, -20, -14, -10, -7, -4, 21, -1, 18, + 7, 5, 7, -2, 5, -2, -8, -14, -10, 0, -4, 3, -4, -9, -7, 2, 4, -3, 1, -5, -2, 3, 2, 0, 8, 6, 8, 6, 3, 1, + -5, 7, 0, -2, -2, -8, -9, 0, 2, 5, 1, -2, -2, -1, 0, -4, 1, -2, 0, 3, 3, -4, -1, 5, -1, -2, 2, 7, 6, 5, + -1, -5, -1, 0, 3, 0, -7, -4, -7, -1, -3, -2, 0, 3, 6, -3, 5, 10, 11, 0, 5, -5, -11, -6, -12, -3, 5, -2, -7, 5, + 2, 9, 4, 4, -3, -11, 0, 11, 5, 6, 4, 2, 4, 0, -2, 8, 4, 4, 9, 6, -6, -3, -19, -7, 7, 9, 16, 7, -5, 6, + -2, -6, 1, 9, 3, 1, 10, -2, 4, 9, 0, 2, -5, -7, -3, -21, -27, 51, -7, -13, 17, 4, -3, 6, -1, -16, 4, 4, -11, 12, + -3, -12, -9, 4, 8, 0, -5, -8, -6, 16, 1, -7, 4, 6, 10, 8, 8, -1, -3, 8, 11, 18, 8, -2, -3, -4, -2, 8, 0, 1, + -8, -5, -9, -13, -4, -8, -6, 13, 9, 4, -5, 8, 5, 4, -4, -10, -7, 0, -5, 17, 3, 7, 7, 12, 9, 13, 3, 1, -6, -9, + -4, 3, 2, 1, 7, 4, -2, 0, 1, -3, 2, 2, 14, -5, 0, 1, 5, 5, -2, -14, 0, 0, 13, 16, 14, 6, -2, 7, 17, 14, + 1, 5, -5, 13, 13, 1, -7, 3, 4, 3, -1, 7, -6, -1, -12, -25, -17, -22, -12, -8, 3, 10, 6, -4, 3, 4, -10, 2, -3, -3, + 7, 18, 14, 15, 13, 24, 35, 29, 17, 6, 19, 4, 15, 27, 20, 23, 16, 13, 2, 23, 7, -8, 0, -8, -14, -9, -2, -18, -13, -16, + -46, -38, -18, -9, 13, 10, 21, 21, 15, 15, 14, -5, -9, -13, -8, -17, -19, -6, -6, -1, 3, -4, 1, -3, -6, 6, 7, 5, 4, -3, + 4, 9, 5, 12, 13, 13, 7, 2, 6, 2, 3, 0, 10, -1, -8, -10, -1, -3, -12, -15, -10, -7, -9, -2, -6, -2, 1, 0, 0, 0, + -5, -3, 2, 6, 2, -1, -10, -4, -6, -10, -17, -12, -7, -3, -18, -15, -17, -12, -9, -8, -8, -12, -2, 2, 5, 2, -5, 2, -2, 5, + 2, -2, -5, -2, 2, 0, 0, -3, -1, -2, -4, -3, -3, -9, -12, -3, -3, -9, -2, 10, 9, 12, 16, 9, -3, -16, -13, -18, -14, -7, + -17, -11, -2, 5, 6, 22, 29, 20, 7, -1, -11, -14, -5, -10, -5, -6, -16, -12, -7, 8, -33, -48, 95, -21, 1, 47, -21, 4, 54, -23, + -34, 34, -6, -13, 7, -18, -3, 15, 16, 22, -7, -9, -16, -7, 3, 2, -16, -10, -7, 2, 10, 13, 4, 7, 7, 17, 1, -15, -7, 9, + -2, 3, 6, 0, 11, -16, -15, -16, -13, -1, -20, -17, -3, -18, -16, 0, -16, -11, -13, -12, -4, -9, -15, -2, 33, 0, 15, 7, -2, -4, + -4, -1, -2, -5, -11, -15, -9, -14, 0, 12, 16, 7, 8, -2, -13, -13, -23, -17, -14, 5, 7, 24, 19, -7, -11, -16, -22, -13, -8, 2, + 0, 13, 18, 24, 26, 15, 8, 17, 16, 10, 7, 19, 17, 3, 5, 12, 7, 11, -4, -19, -30, -23, -27, -17, 6, 22, 27, 27, 19, -3, + -19, -35, -48, -38, -21, -8, 10, 25, 27, 27, 22, 14, 16, 14, 20, 16, 24, 32, 35, 22, 14, 0, 1, -8, -8, -22, -20, -24, -22, -12, + 25, 41, 62, 42, 17, -26, -60, -62, -62, -48, -27, 2, 10, 41, 25, 6, 5, -32, -25, -2, -12, -15, -2, -4, 3, -10, -8, -13, -11, -13, + -5, -8, -1, 5, 12, 13, 10, 19, 7, 6, 0, 0, -1, -2, -3, -1, 11, 15, 13, 4, 3, 7, 4, 6, 9, 1, 6, -4, 0, -12, + -6, -6, 1, 4, 2, 6, 7, 19, 23, 29, 25, 29, 28, 17, 12, 4, -6, -12, -27, -36, -34, -33, -17, -13, -2, 4, 11, 1, -11, -26, + -30, -46, -44, -36, -29, -18, -14, 2, 9, 16, 14, 3, 5, 5, 8, 8, 21, 35, 34, 18, 21, 10, 6, 7, 15, 29, 48, 57, 78, 89, + 91, 90, 66, 24, -29, -97, -126, -127, -123, -90, -47, -6, 11, 13, 6, -8, -32, -59, -53, -36, -14, 8, 18, 39, 41, -20, -85, 92, -100, -15, + 66, -79, -20, 68, -58, -83, 78, -51, 46, -7, -43, 49, -24, 15, 49, -25, -8, -4, -6, 7, -7, -10, -11, -9, -14, 3, -3, -13, 1, -3, + 17, -1, 7, 2, 11, 2, 3, 6, 3, 10, 4, 4, -3, 7, 7, 0, -3, -4, 9, 9, 18, -4, -1, 7, -3, 9, 9, 4, 0, 19, + 2, 2, -2, 1, -3, -7, -5, -1, -2, 7, 8, 14, 6, 2, -5, 4, 1, 0, 0, 0, -4, 0, -3, 5, 1, 2, -1, -1, -2, -8, + -6, -6, -9, 5, 5, 3, 2, 4, -2, 2, 6, 3, 12, 7, 3, 4, 6, 1, 6, 8, 5, 6, -4, 4, -3, 3, 11, 11, -1, 5, + 9, 4, -4, -1, -5, 1, 3, -5, -10, 6, 6, 5, -1, 5, -4, -6, 1, -5, 4, 2, 4, -3, -1, 0, 8, 14, -3, 9, -7, 1, + -10, -1, -12, -8, -3, 5, -7, -16, -2, -15, -6, -5, -10, -1, -9, 6, 9, 1, -4, -2, -4, -6, -12, -2, 0, 3, 7, 7, 11, 13, + -1, 3, 1, 3, -3, -3, 0, -4, 3, 1, 1, 0, -7, -5, 2, 1, -4, -6, -5, 5, 1, 5, 1, 7, 6, 4, -1, 0, -4, -2, + -7, -8, -9, -5, 1, 4, 3, 1, -2, 1, -4, 3, 2, 0, -4, -7, -10, -2, -2, -2, 1, 4, 0, 4, 6, 6, 9, 9, 4, -2, + 6, 0, 4, 1, 0, 0, 4, 1, -3, -2, 2, 0, 5, 6, 0, 2, 0, 3, 3, -2, -3, -2, -7, -4, -7, 2, -6, -3, -5, 3, + 2, 3, -4, 3, -1, 0, -7, -11, -12, -8, -4, -12, -12, -1, 5, 11, -4, -1, -2, -7, -3, -6, -12, 3, -14, 1, 1, -2, 11, -2, + 22, 32, -10, 4, 21, 13, 5, 10, 8, -2, -13, 3, -3, -2, -4, 6, 3, 14, 4, 15, 10, 0, 7, -2, 1, 1, -7, -2, 6, 6, + -2, -5, 2, -5, -6, -10, -9, 0, -11, 0, 0, 4, 2, -3, 2, 1, 2, 0, 3, -5, 2, 0, 5, 9, 6, 5, -5, 0, -7, -9, + -6, -8, -6, -6, 10, 5, 8, 3, 5, 4, -2, -1, 4, 13, 12, 10, 14, 4, 5, 4, 4, -1, 9, 8, 10, 2, 2, 0, -9, -7, + -11, -2, 6, -1, -1, 3, 3, 7, 0, -9, -9, -2, 3, -1, 0, -1, -3, 4, 5, 10, -3, -8, -9, 0, 2, 1, -9, -10, 4, 7, + 4, 2, 7, 8, -1, 0, 5, 1, 3, 10, 8, 6, 6, 0, 2, 3, 3, 9, 10, 4, 6, 6, -2, 9, -2, -3, -11, -2, 9, 1, + 2, 0, 1, -7, 3, -6, 6, -12, -6, -10, -2, -13, -17, -12, -8, -10, -4, -7, -1, -6, -6, -7, -8, 5, -4, -2, 2, 8, 4, 4, + 3, 2, 6, 10, 4, 3, 6, 3, -3, -4, -8, -8, -4, 1, 10, 6, 7, 9, 2, 7, 5, 1, -3, -2, -6, -3, 2, 8, 2, 8, + 2, 3, 9, 1, 2, 0, 2, 3, -1, -2, -4, 8, 8, 13, 10, -1, 2, 1, 11, 8, -2, -6, -5, -8, -2, 1, -3, -10, -5, -11, + -10, 5, 2, -2, -7, -9, 1, 1, 4, 14, 6, 9, 2, 0, -1, -10, -2, 3, 4, -3, 3, 4, 2, -2, -13, -16, -10, -14, -10, -12, + -3, -10, -8, -8, -3, -6, -7, -2, -2, 3, 1, -2, 1, 4, -1, 5, -5, 1, 11, 9, 0, -1, -5, -2, -5, 10, 10, 5, -3, -1, + -3, 0, -6, -3, 8, 16, 16, -17, 12, 12, 7, 19, 8, 7, 9, 3, 2, -9, 13, 11, 7, -3, 5, 2, -2, 10, -2, 16, -1, -8, + -8, -4, -9, -5, 4, 10, 3, 5, -11, -7, -9, -10, -3, -1, -4, 7, 4, 5, 0, 4, 2, 4, 0, 7, 4, 4, 2, -2, 2, 11, + 9, -2, 10, 1, -1, 2, 5, 9, 3, 2, -3, 2, 0, 3, 1, -1, -8, -6, -11, -5, -3, 3, 1, 7, 1, 3, -6, -7, -7, -3, + 8, 9, 4, -3, -7, -8, 9, 15, 6, 1, -6, 8, 4, 1, 0, 6, 0, 3, -3, -9, -1, -3, 8, -3, -14, -16, -11, -7, -8, -7, + -3, 1, -2, -4, 2, 8, -8, 0, 5, 1, -6, -8, -4, -3, -1, 5, -2, 10, 6, 2, 7, 11, 10, 7, 5, 1, 5, 4, -3, -1, + -3, -4, -8, 12, 6, 11, 7, 17, 2, 0, -8, -1, 6, 5, 5, 3, -3, -12, -5, -9, -2, -13, -3, 7, 3, 4, -3, 0, 1, 2, + -1, -2, -6, -5, -4, 3, 5, 4, 9, 10, -13, -12, -7, -3, -4, -2, -6, 0, 4, 7, 2, -6, -8, -2, 5, -1, -7, -9, -11, -2, + -1, -5, -8, -6, -10, -4, 1, 2, -1, 2, -4, -1, 0, -3, -2, -3, -1, -1, 3, -3, -11, -9, 0, -2, -10, -11, -12, -6, -10, -9, + -2, -3, -4, -1, 2, 0, -3, -1, -3, -11, -10, 2, 8, 6, 0, -4, -3, -1, 4, 4, 2, 14, 9, 8, 11, 2, -1, -3, -6, -7, + -12, 3, 1, 3, 3, 4, -5, -10, -9, -5, -3, 4, 5, 10, 7, 4, -5, -8, 2, -5, 2, -5, 2, 7, 4, 3, 3, 0, -2, -2, + 5, 0, -5, -6, -9, -15, -8, 2, 1, -7, 29, -2, -16, 3, 8, 8, 19, 10, 18, 7, 6, -6, -1, 2, -1, 4, 3, -4, -9, 3, + 2, 8, 3, 2, -7, 0, 3, 1, 2, 8, 8, 6, -5, -12, -13, -6, -10, -4, -9, -1, 3, 4, 6, -2, 0, 10, 5, 0, 0, 0, + 0, -3, -2, 5, 5, 1, 11, -2, -6, -1, -8, -3, -7, 1, -29, 8, 2, 4, -2, 1, -2, -11, -2, -4, -3, 0, 2, -7, -3, -4, + -3, -1, -6, -15, -9, 0, -2, -8, -16, -10, -11, -4, -6, -3, 1, -19, 4, -5, 1, 2, -11, -9, -9, -1, -6, -6, -4, -1, 6, -1, + 8, -3, -4, -7, -2, -3, -2, 7, 1, -7, -4, -5, -9, -3, -13, -13, -8, -6, -10, 1, 9, -2, 2, -6, 0, 7, 1, 5, 3, 13, + -1, 10, 11, 2, 10, 1, 1, -4, 10, 4, 11, 9, 1, -3, -4, 1, -1, -4, -10, -6, -1, 2, 1, 2, -2, 11, 3, -5, 7, 1, + 5, 6, -8, 3, 0, -4, -3, -3, 6, 6, 0, 2, 0, 4, 22, -10, -4, -1, 9, 3, -3, -9, -6, -4, 2, 1, -9, -9, -7, -1, + 3, 2, 1, -3, -3, 3, 1, 5, 3, 4, 0, -1, 0, 3, -6, -2, -4, 0, -1, 8, 2, 0, -3, -9, -4, -12, -6, -6, -3, 2, + 2, -1, 1, -2, -3, -3, -2, 0, 6, 2, 0, 6, -2, -2, -3, -3, -2, 0, 10, 7, 1, 12, 13, 4, 6, 1, -5, -5, -2, -1, + -2, -7, -7, -12, -10, -16, -7, -3, -4, 3, 0, -2, 0, 0, -8, 6, 9, 2, 1, 0, 1, -5, 1, -5, -5, 1, -1, 4, 11, 1, + 3, 8, 3, 1, -1, 3, -10, -2, -1, -5, -3, -7, 5, 7, 2, 34, -1, -22, -3, -8, -9, 9, 10, 14, -1, -13, -1, 7, 12, 5, + 14, 9, 3, 4, -8, 3, -2, -1, -2, -5, -7, -3, 5, 1, 2, 1, 3, -4, -3, -14, -9, -4, -6, -6, -11, 2, 0, 9, 4, -6, + 2, -3, -9, 4, 0, 1, -2, -7, -2, -4, -3, 1, -4, 3, -1, -1, 11, 3, -4, -53, -16, -18, -16, -8, -12, -7, -13, -6, 0, 2, + 2, -11, -14, -30, -23, -9, -15, -12, -16, -20, -19, -15, -5, -10, -1, -13, -17, -20, -15, -4, -10, -19, -21, -12, 0, -1, -11, -9, -6, -3, + -9, -9, -14, -8, -24, -23, -14, -12, -20, -4, -2, -4, 0, 1, -4, -5, -12, -16, -24, -15, 2, 5, 7, 2, -3, -4, -8, -1, -7, 4, + 10, -4, -9, -6, -6, 8, -7, -5, 2, 9, 14, 16, 20, 18, 23, 14, 9, -14, -15, -24, -29, -9, 3, -9, 11, 5, 7, -2, 5, -2, + 12, 0, -6, -7, 6, 10, 20, 16, 5, -1, -1, -5, 1, -3, 2, 6, -4, -8, 6, 14, -26, -25, -20, -13, -13, -13, -17, -15, -12, -11, + -6, -7, -4, -13, -15, -16, -14, -11, -13, -16, -14, -10, -3, -9, -9, -13, -7, -10, -7, -8, -9, -14, -14, -19, -7, -7, -19, -16, -9, -10, + -18, -14, -6, -8, -7, -8, -8, -9, -12, -8, -9, -4, 0, 3, 4, 2, 9, -2, -10, -8, 4, -2, -3, 4, 7, 4, 2, -4, -11, -2, + -1, 1, -1, 4, 13, 8, 0, 15, 6, 11, 5, 13, 13, 21, 19, 6, -3, -9, -10, -11, -21, -12, -7, -13, -7, -8, -13, -13, -12, -5, + -3, -5, -14, -9, 4, 2, 3, 3, -3, -3, 5, -1, -10, -14, -8, -6, -2, -1, 2, 7, 20, 16, -23, -9, 7, -17, 12, 9, 17, 0, + -15, 7, 13, 15, 17, 19, 13, 0, -4, 7, 14, 7, 13, 8, -1, 11, 22, 29, 23, 25, 5, 5, 10, 4, 0, 0, 8, 3, 11, 7, + 15, 10, 9, 7, 5, 8, 11, 3, 7, 17, 2, 5, 3, 6, -4, 4, -2, -7, 9, 6, 1, 8, 8, 7, -80, 11, 16, 9, 5, -7, + -10, -11, -13, -2, 4, 5, 2, -1, 3, 5, -3, 1, 12, 16, 24, 19, 20, 8, 3, 12, 4, -2, 7, -4, 7, 0, -5, -5, -4, -5, + 5, 10, 5, 8, 2, 14, 4, -2, 1, 0, 1, 10, 9, 5, 3, 2, -6, -4, -3, -3, -13, -19, -18, -23, -16, -14, -19, -19, -19, -17, + -17, -18, -16, -23, -15, -10, -29, -20, -24, -25, -18, -25, -20, -23, -29, -26, -8, -6, -5, -5, 3, 4, -7, -1, 5, -1, 7, 12, 12, 3, + -6, -12, -14, -10, 0, -5, -2, -2, -7, -11, 6, -2, 4, -3, -7, -5, -9, 10, -4, -4, 9, 14, 8, -6, 20, 4, 0, 9, 10, 13, + 11, 14, 16, 17, 22, 18, 15, 17, 13, 11, 5, 7, 3, 5, 3, 3, 1, 1, 1, 5, 14, 12, 14, 10, 17, 13, 8, 17, 14, 22, + 16, 15, 10, 6, 4, 3, 3, 4, 5, 5, 7, 6, 9, 0, 1, 3, 6, 10, 10, 5, 11, 12, -2, 0, 5, 10, 6, 1, -1, -3, + -5, -7, -7, -9, -5, 1, 1, 6, 1, -1, -8, -12, -15, -16, -12, -11, 0, 0, 9, 5, 5, 13, 5, 12, 13, 11, 9, 10, 7, 6, + -2, -6, -3, -3, -7, -8, -6, -9, -2, 4, 4, 5, 4, 3, -6, -4, -8, -4, -5, 4, 5, 4, 0, 8, 1, -9, 127, -16, 5, -1, + -5, 27, 54, -21, -12, -8, -20, -16, 0, -6, 1, 3, -4, -23, -8, 8, -7, -4, 1, -7, -9, -12, 2, 8, 11, 8, -11, -1, -6, -7, + -13, -4, -1, -4, -3, 5, 2, 0, 4, 2, 0, -4, 1, -1, -7, 2, 4, 1, -1, 3, 6, 2, -7, -1, -15, -8, -8, -11, -8, -47, + 15, 16, 17, 5, 2, 2, 5, 8, 12, 8, 0, -11, 4, 0, -3, 20, 23, 14, -8, 6, 15, 9, 8, 11, -2, -5, -1, -1, 3, -9, + -13, -15, 3, 12, 13, 2, 5, -8, -2, 3, 0, -4, 1, -9, -11, -12, -16, -6, -9, -7, -7, -9, -5, 0, 15, 9, -1, 7, 3, -6, + -3, 7, -4, -15, -12, 4, -4, -7, 13, 13, -6, 2, -13, -12, -11, -11, -11, -15, -5, -8, 6, -5, -3, -7, 16, 12, -2, 17, 4, -10, + -13, -16, 4, 10, 10, 1, -5, 3, 4, 5, 1, 8, 5, 3, 0, 4, 13, 12, 13, -7, -1, 8, 5, -18, -6, -20, -8, 0, -17, 15, + -1, -4, -4, -8, -10, -4, 1, 0, -5, -7, -13, -7, -3, -5, -4, 2, -1, 7, -1, -1, -5, 9, 8, 12, 2, 12, 8, 12, 9, 8, + 0, -1, 3, 10, 2, 7, -6, -6, -15, -13, -9, -12, -6, -5, -7, 4, -3, -5, -15, -16, -9, -3, -3, 0, 11, 2, -4, 5, -4, -7, + -2, 0, -7, -3, -15, -1, 7, 6, 2, 6, 7, -6, 8, 0, -7, 1, -1, 7, 7, 1, 14, -1, -4, -10, 5, -6, -4, 6, 7, -5, + -3, 1, 13, 0, 3, 12, 10, -2, 8, 6, -4, -11, -3, -3, -1, 10, -1, 7, 15, 11, 13, 11, 13, -10, 10, 9, 6, 16, 34, -65, + -35, -12, -4, 11, -12, -18, -5, 8, -18, 18, -30, -11, 4, 2, 0, 2, -4, 2, 5, 1, -11, 10, -5, -9, 6, 20, 17, 17, 6, 4, + 8, 7, 16, 2, 12, -1, -3, -13, -14, 6, 3, 6, -4, 8, -10, -26, -10, -9, -6, 16, -8, 7, 17, 16, -5, 4, -5, 6, 18, 5, + 17, 0, 15, 9, 7, 20, 6, 14, 13, 11, 6, 9, 7, 4, 1, 1, -3, -1, 1, -4, 2, 3, 5, 7, 12, 4, 2, -1, 7, -8, + -1, 4, 4, 6, 17, 9, -2, 14, 14, 18, 14, -8, -5, 2, 10, -10, -3, -4, -7, -3, 1, -9, -4, 6, 3, -6, 3, 2, 0, 0, + 3, 10, -10, 5, 1, 0, 6, 10, 3, 0, 6, -11, -18, -4, -16, -4, -13, -5, -7, -12, -7, -17, -11, 3, -2, 4, -9, -24, -9, 2, + -9, -13, -10, -10, 1, -3, 9, 7, 22, 16, 0, -8, -4, -10, -10, -1, 9, 13, 8, -12, 1, 4, 12, 2, -2, -4, 8, 8, -8, 8, + 1, -3, 2, 8, 8, -5, -2, -9, -10, -5, 1, -5, 1, -10, -3, -6, -10, 2, -1, 5, -1, 2, 7, 6, 3, -8, 1, 0, -1, 3, + 4, 7, 0, 5, 0, -9, -9, 8, 9, 6, -9, -1, -7, -16, -7, -3, -2, -6, 1, 6, -1, 5, 4, 3, -2, 2, -3, -4, 7, 2, + -1, -3, -9, 1, 5, 0, 1, -4, -15, -8, -2, -10, -11, -6, -6, 1, 2, 4, -7, -11, -5, 3, 7, 2, 1, 4, -3, -5, 6, 10, + -4, 6, -2, -6, -3, 4, 3, 2, 11, -4, 2, 2, 3, 7, -2, 7, 10, 0, 3, -7, -4, 0, 9, -2, 3, -6, 0, 15, 8, -3, + -8, 0, -5, 11, -41, -19, -7, -17, 7, 7, -7, -12, 20, 7, 26, -16, 2, 8, -2, -1, 7, 14, 1, 22, 8, -13, -9, 0, 9, 11, + 14, 16, 13, 12, 11, 12, -4, 11, 22, -3, 12, 14, 1, -17, -6, -7, -7, -7, 2, -9, -11, -18, -17, 6, 2, 13, 3, 1, 4, -1, + -10, 9, 0, 11, 26, 12, -2, 20, 16, -18, 17, 11, -4, 14, 22, 6, 0, 6, 8, -5, -9, 3, 9, 16, -3, -12, 4, 6, -4, 14, + 17, 12, 6, 6, 7, -6, -3, 1, 3, 4, -3, -4, -3, 6, 6, 3, -13, -15, -13, -12, -16, 2, 14, 8, 10, 13, 1, -2, 1, -3, + -8, -11, -1, 8, -1, -13, -7, -14, -23, -16, -14, -4, -3, 0, 8, 11, 13, -2, -15, -13, -5, 7, -1, -18, -20, -7, 8, 5, -7, 5, + 18, -2, 1, -10, 7, -1, -15, 6, 7, 15, 1, 4, 0, 1, -5, 8, -7, -4, 5, 6, 1, -6, 6, -15, -23, -5, -21, -15, 3, -7, + -3, 2, -10, -11, -8, -5, 5, 17, 19, 20, -5, -1, 0, 6, -3, -2, -15, -18, -14, -14, -2, 2, 17, 17, 11, 6, 4, -8, -3, 2, + 7, 4, 1, -1, 0, 6, 0, -4, -3, -8, -9, -9, -8, -7, -3, 0, -4, 9, 2, 4, 13, 8, 14, 9, -2, -1, 0, -4, -2, -5, + 5, -3, -2, -7, -1, 9, 11, 8, 7, 2, -7, 1, -4, -3, -2, -10, 5, -1, 3, 0, 11, 1, 8, -9, -16, -9, -5, -3, -5, -3, + 16, -4, -3, -3, 5, -5, -2, 9, -7, -3, 4, 2, 2, -1, -4, -5, -6, 2, -2, 2, -3, -10, -11, -2, -2, -7, -2, 3, -1, 6, + 3, 9, 5, -1, -1, -7, 1, -8, -6, 6, -26, 4, -17, 6, 21, -11, 1, 22, 4, 20, -4, -2, -1, -4, -18, -7, -6, -18, -2, 0, + -10, -4, 5, -2, 2, 10, -2, -1, -19, -7, -5, 4, 1, 16, 1, 4, -1, -5, -19, -8, -2, -10, -1, -9, -10, 5, 2, -14, -8, -2, + 23, 14, 13, 10, -5, 7, 3, -12, 4, 1, 12, 15, 14, 11, -43, 13, 6, 1, -19, -3, -6, 1, 7, -6, -6, -5, 8, 22, 15, 11, + 2, -6, -18, -6, -7, 3, -9, 3, 5, 5, -5, 7, 2, 15, 8, -2, -7, -5, -2, -11, -1, -6, -3, -4, -14, -1, 6, 12, -2, -11, + -2, -1, 3, -7, 0, -14, -1, 15, 18, 20, 20, 24, 17, 8, 11, 17, 11, 0, -2, 4, 1, -5, -9, -2, -15, -11, 0, 0, 2, 0, + -1, 8, 17, 1, -5, 4, -5, -4, -4, -12, -25, -9, -10, 7, 16, 14, 15, 15, 5, 4, -7, 1, -14, 8, 2, -2, -1, 6, -1, -5, + -15, -17, -8, -5, -8, -14, -2, 3, 23, -11, -20, 6, 17, 18, 18, 4, -2, -2, 6, -1, -5, -2, -2, -4, -13, 3, 10, 17, 8, 5, + 2, -8, -9, -8, -8, -9, -2, -10, -1, 10, 7, 2, -8, 4, 3, -3, -6, 1, 3, 9, 13, 7, 6, 4, 5, 4, 9, 18, 1, -6, + -1, -5, -4, -5, -15, -3, -5, 1, -1, -1, 4, 18, -5, 3, 14, 14, 10, 1, 6, -7, -1, 2, -4, -2, -2, 1, -8, -4, -6, -14, + -7, -18, -5, -19, -14, -21, -37, -17, -10, 1, -12, 1, -8, -10, 8, 12, 6, 2, 0, 0, -11, -9, -3, 13, 3, 3, 10, 0, -2, 4, + -6, -7, -12, -13, -6, -8, 8, 3, 4, 0, 3, 0, -1, 3, -14, -22, -5, -13, 7, -3, 15, 8, -2, -8, 4, -15, 3, -22, -24, -21, + -8, -6, -2, -10, -8, -2, 8, -1, -4, 7, 1, 5, 1, -6, -17, -2, 10, -2, 13, 9, -4, 2, -18, -13, -1, 13, 13, 1, 3, -2, + -4, -5, 0, 5, 18, 7, 8, -2, 7, 1, 15, 10, 0, 5, 2, 9, 15, 15, 22, -58, 20, 3, 0, -2, 2, -1, -15, -10, -6, 3, + -12, -17, -9, -9, -16, -11, -15, -25, -15, -20, -28, -9, -7, 5, 9, -27, 2, 14, 15, 24, 13, 19, 15, 17, 8, -3, -5, -16, -7, 1, + 22, 23, 42, 22, 31, 18, -6, -11, 10, 20, 23, 14, 2, 6, 21, 18, 10, 12, 9, -1, 9, 0, -28, -17, -7, -4, 0, -3, 1, 12, + -11, -2, 34, 9, 14, 19, 21, 38, 19, 21, 18, 14, 1, 6, -4, -4, 2, -3, -9, 13, 8, 11, 10, 18, 15, 29, 26, 2, 37, 45, + 11, 17, 24, 14, -16, -14, -15, -33, -44, -64, -43, -30, -2, 8, 1, -10, 0, 13, 18, 17, 7, 1, -7, -3, -10, -13, -13, -13, -9, -9, + -13, -2, 2, 0, -4, -15, -12, -3, -6, -6, -6, -10, 0, 2, -1, -3, 3, 12, 11, 15, 15, 6, 9, 10, 16, 18, 15, 6, 17, 13, + 22, 29, 34, 20, 12, 7, 0, -8, 3, 3, 9, 3, -4, 1, 14, 19, 17, 13, 25, 27, 31, 22, 17, 16, 14, 15, 9, -3, -1, -4, + -5, 0, 15, -8, -15, -25, -16, -11, -7, 1, -4, 1, -3, 8, 3, -9, -8, -6, -12, -3, -3, -6, -9, -11, -16, -19, -29, -44, -24, -26, + -33, -33, -31, -23, -48, -57, -45, -61, -72, -70, -65, -53, -40, -36, -29, -31, -27, -19, -32, -17, 24, -21, -16, 64, 22, 76, 21, -6, 7, 37, + 2, 7, -14, -18, -12, 12, -7, -11, -13, -10, 3, -13, -8, -5, -12, -23, -4, -12, -17, -11, 3, -1, 2, -3, 8, -12, -6, -9, -8, -6, + -4, 12, -8, -3, -20, -9, -8, 5, -1, 2, -2, 10, 7, -3, -3, -18, -1, -8, -11, -2, -2, 9, 1, 8, -110, 3, -5, -16, -14, -14, + -23, -5, 14, 17, -1, -10, -3, -6, -11, -6, -7, -12, 6, 14, 7, 20, 19, 11, 25, 18, 12, 15, 13, 23, 36, 42, 41, 57, 41, 16, + 6, -8, -26, -22, -24, 0, 1, 8, 9, 22, 2, -8, -5, 21, 27, 19, 15, 15, 2, -7, -13, -15, -6, -5, -9, -9, -26, -48, -35, -33, + -19, -4, -13, -4, -18, -17, -1, -8, 1, 4, 25, 21, 18, 24, 14, 7, -7, -32, -29, -41, -60, -68, -64, -39, -7, 1, -8, -5, 6, -1, + 14, 7, 14, 31, 29, 31, 44, 41, 56, 49, 49, 17, -22, -42, -84, -59, -34, -2, 18, 23, -4, 17, 20, 33, 49, 4, -2, 1, -9, 2, + -4, 9, 6, 11, 5, 6, 12, 13, 7, 0, -4, 1, 3, 3, 4, -1, -7, -4, -6, -12, 3, 8, 13, 10, 11, 6, 13, 6, 4, 6, + 2, -10, -6, 3, 7, 10, 8, 8, 9, 6, -7, -11, -18, -7, -12, -16, -14, -27, -24, -28, -12, -13, -12, -11, 3, 9, 11, 2, 16, 21, + 17, 24, 17, 8, 1, 2, -9, -18, -20, -25, -19, -29, -28, -23, -26, -27, -43, -62, -57, -57, -67, -68, -62, -41, -19, -15, -2, 10, 21, 28, + 29, 26, 31, 40, 35, 25, 8, 7, 11, 4, -16, -41, -58, -78, -92, -73, -62, -25, -5, 20, 25, 32, 32, 45, 94, 30, -22, -42, 71, -57, + 127, 40, 54, 63, 72, 11, 7, 37, -4, 32, 40, 5, -3, 25, 26, 9, 9, 22, 13, 1, 14, -1, -5, -1, 1, -2, -4, 7, 3, -4, + 1, -8, 10, 0, -9, 12, -18, -28, -23, -20, -21, -24, -14, -10, 0, -23, -2, -10, -3, 9, -19, -1, -20, -7, -3, -16, -8, 3, -5, -100, + -4, -1, 0, 1, 1, 2, 3, 4, 9, 2, -7, -2, -5, -5, 0, 5, 2, 6, 3, -1, 5, -6, -5, -11, -13, -9, -3, -7, -13, -8, + -8, -3, 1, 0, 4, -3, -13, -7, -8, -1, -3, -2, 4, 4, 2, -6, 1, 4, -5, -6, 4, 7, 4, 3, 5, -7, -8, -5, 1, -2, + -9, -6, -3, -2, 6, 10, -2, 5, 5, 8, 5, 4, 3, 4, 5, 15, 12, 14, 16, 15, 7, -4, -2, 0, -9, -1, -1, 11, 9, 5, + 7, -2, 11, -14, -10, -5, -7, -2, -8, -5, -4, -4, 6, 6, 4, 2, -1, -13, -10, 3, 1, -4, -7, -5, 5, -3, 10, -1, 5, 7, + 4, 2, 4, 0, -1, -1, 1, -4, -7, -2, -9, -6, -3, -3, -3, -2, 4, 0, 2, 0, 0, -4, -1, -8, -7, 0, -1, 9, 5, 5, + 3, 7, 10, 6, 8, 0, 4, 2, 1, 2, 1, 1, 4, -5, -6, -9, 0, 2, -1, -1, -2, 2, 2, 5, 2, -3, -8, -3, -2, -8, + -9, -5, -4, -5, 1, 8, 4, 4, 2, 4, 0, -2, 0, 1, 2, 9, 3, -2, 0, 4, 3, -6, 0, -5, -4, 2, -6, 3, -4, 5, + -5, -11, -10, -1, -4, -1, 1, 2, 0, -1, 4, -7, 1, -3, 2, -4, -3, -2, 6, 4, -2, 2, 4, 5, 3, 14, 4, 8, 6, -4, + -14, 31, 4, 2, 2, 11, 5, 0, 2, 6, -2, 1, -15, -8, 4, 12, 12, 11, 11, 6, 2, -14, -10, 7, -9, -9, 0, -6, -1, -5, + -17, -4, -7, 6, -10, 19, 15, 4, 6, 12, 0, -5, 9, 0, -1, -4, -8, -10, -7, -8, -2, 10, 2, -4, 9, 6, 9, 12, 7, 4, + -1, 8, -2, -9, 4, 11, 16, 4, -1, -3, 4, -1, -2, -11, 6, 4, 5, 1, 8, 2, 1, -2, -1, 0, 3, 0, -3, -3, 0, 5, + -7, -13, -5, -12, -1, 4, 0, -1, 4, -1, -3, -4, 4, 4, 0, -1, -7, 0, -2, -6, -1, 11, 0, -12, -8, -1, -2, -6, -12, -9, + -11, -11, -6, -3, 1, 0, 4, 0, -9, 6, 0, -8, 0, -1, 10, 5, -6, 1, 3, 8, 10, 1, 2, 10, 22, 4, 21, 9, 16, -4, + 5, 1, -5, -4, 2, 1, 4, 6, 1, 5, 6, -1, 1, -3, -7, -6, -2, -2, -9, -8, -12, -11, -9, -10, -2, -9, -9, -3, -7, 9, + 2, 7, 9, 6, 9, -3, 0, -4, -6, -7, -1, 1, -4, -3, -4, -4, 2, 8, 3, 1, 1, 6, 5, 2, 2, 5, -2, -4, -7, -8, + -2, 5, 5, 2, 3, 0, -1, 2, 3, -1, -4, -2, -2, -1, 1, -3, -4, -1, -5, -8, -9, -4, -6, -2, 2, 10, 3, 8, 2, 6, + 1, 0, 9, 8, 6, 1, 1, 1, 0, -3, -4, -2, -2, 8, 6, -2, -2, 2, -3, 3, 1, 5, 2, 7, 5, -2, -1, 0, -5, -14, + -11, -10, -7, -5, 0, 1, -2, -1, 2, 2, 2, -3, 0, 6, 6, 1, 4, 4, 0, 1, 4, 3, -3, -3, 6, 6, 4, -5, -1, 2, + 11, 1, 1, 11, 2, -31, 18, 5, 4, -16, -2, 3, -3, 8, -1, -1, 9, -8, -11, 1, 17, 1, 9, -1, 7, 0, -3, -17, -9, -12, + -16, 4, 8, 4, -3, -5, -1, -1, 5, 3, 8, 5, 1, -4, 6, -5, -5, -3, 2, 2, 1, -10, -7, -3, 3, -2, 6, 7, 0, 11, + -3, -2, 2, 2, -5, 9, -2, 5, 1, 14, 2, -1, 3, 1, 0, 2, 0, -2, -2, -5, -5, -5, -7, 5, 14, 10, 0, -1, -8, -3, + 2, 3, 2, 5, -2, -1, 2, 5, 7, 2, 5, -1, -1, 5, 6, 1, -2, -5, 4, -7, -6, 2, 9, 9, 2, -3, 2, 1, 2, 12, + 8, 10, 5, 2, 3, 1, 0, -9, 0, 8, 2, -2, 0, -10, -7, -5, -16, -5, -2, -4, 2, -1, 2, 12, 12, 15, 16, 13, 15, 23, + 15, 9, 2, 8, 9, 0, 6, 9, 1, 4, 0, -7, -10, -11, -9, -2, 6, -7, -10, -16, -7, -10, -3, -2, 3, -1, -2, -1, 2, -7, + -6, -7, 2, -9, -5, 1, 1, -4, -6, -8, 9, 3, -2, -10, -2, -5, 4, 2, -1, -1, 1, 1, 5, 1, 3, -1, -5, -9, -9, -7, + -9, -7, -5, -3, -5, -3, 4, 0, 2, -2, -2, -5, 7, 12, 2, 1, 5, 4, -1, 1, -3, -1, -5, 1, -4, -3, -5, -3, 1, 1, + -1, 6, 2, 2, 2, -3, 1, -4, 1, 0, -9, -8, -9, -6, 3, -1, -11, 1, 8, 8, 11, 7, 3, 1, -5, 4, 0, 0, 3, 9, + 4, 3, 8, 6, 5, 7, 6, -3, -6, -3, -1, 5, 7, 3, -1, 1, 1, 1, 11, 3, -5, -8, -4, -4, 0, -6, 5, 2, 5, -4, + 10, 2, 1, 6, 3, -1, 0, 4, -1, -8, -33, 25, 15, 13, -2, 8, 16, 13, -4, -1, 5, 12, 8, -8, -6, -5, 0, 16, 3, -1, + 2, 10, -8, 7, -6, -4, -1, 1, -15, -18, -24, -12, -4, -3, 0, 3, 9, 7, 9, 12, 12, 11, 1, 5, -2, -4, -13, -9, 3, -6, + -4, -2, -1, 10, 2, -7, -2, -7, -1, -3, -5, 4, -6, -15, 35, -3, -2, -12, -4, 0, -4, 5, 0, -3, 2, -1, 4, 3, -3, 2, + 5, 10, 2, 8, 6, 6, 1, 6, 1, -2, -2, -8, -2, -4, -1, 1, 10, 11, 9, 0, 7, 5, 2, 4, 2, -8, -3, -2, 2, 2, + -6, 2, -3, 1, 3, -3, 4, 3, 5, -1, 10, 2, 0, 4, -3, 4, 3, -1, -2, 6, -9, -12, -9, -3, 4, 4, -12, -8, -8, -10, + -12, 2, 12, 11, 5, 7, 8, -4, 8, 4, -6, 0, 8, -1, 4, -10, -6, -2, -14, -5, -2, -6, -6, 8, 2, 10, 2, 5, 8, -4, + -1, -6, -9, -7, -8, -13, -10, -5, -5, -2, -1, 5, 6, 14, 3, -2, -3, -2, -3, 0, 4, -1, 1, 2, -6, -4, -6, -8, -10, -12, + -9, -10, -8, -8, 3, 5, 1, -4, -8, -8, -7, -5, -3, 2, 3, -4, -7, -8, -1, -7, 0, -11, -6, -12, -10, -4, -3, -5, 4, 8, + 1, 0, 0, 2, 4, -2, 1, 1, -2, 1, -1, 2, 2, 3, 4, -2, -3, 1, 3, 4, -1, 8, 5, 1, -2, -3, -11, -6, 0, -7, + -3, -1, 0, 3, -3, 0, -1, 4, 4, 5, 6, 15, 11, 8, 6, 1, -3, -9, -12, -8, -8, -5, -5, -4, -5, -2, 1, 6, 3, -2, + 1, 4, 4, -1, -1, 1, 0, -8, -5, -10, -3, -4, 5, -2, -9, -63, 47, 14, 25, 31, 0, 31, 9, 17, -8, 23, 13, -10, -10, -4, + 4, 1, 4, 3, 0, 1, -11, -2, 7, -4, -9, 9, 2, -18, -15, -9, -12, 1, -1, -1, 6, 6, 11, 8, 15, 13, 6, -3, 0, -2, + -14, -21, -8, -7, -8, -2, -2, -6, 4, -2, -12, -11, -5, -10, -6, 3, 0, -8, -15, 43, 12, 7, 2, 1, 3, 0, 12, 4, 12, 4, + 4, -5, -9, -2, 1, -6, 0, -2, 5, 6, 8, 6, -1, -5, 0, 8, 5, 13, 5, 2, -2, 1, 9, 1, 4, 1, 5, 5, -1, 2, + 4, 5, -8, -8, -2, 2, 0, -4, -5, 0, -2, 9, 2, 2, -6, 6, -4, -10, -1, 1, -9, -3, 1, 9, 12, 9, 8, 2, -2, -4, + 2, 2, 1, 1, 0, -8, -1, -9, -4, -5, -4, -10, -3, -9, -3, -3, 3, 1, -6, -10, -12, -17, -27, -29, -16, -20, -18, -10, -13, -3, + -4, -8, -8, -6, 10, 27, 22, 16, 20, 17, 19, 15, 15, 5, -8, 5, 8, 3, 8, 3, 0, 0, 0, 4, 6, 6, 1, -2, 1, 2, + 3, 2, 2, 4, -2, -2, -4, -3, 3, 2, 1, -4, -2, -5, -4, -1, -4, 3, 3, 1, 7, 8, 3, -6, -4, -2, -3, -6, -9, -9, + -7, -11, -11, -14, -5, -8, -3, -1, 6, 11, 14, 10, 11, 3, 5, 4, 6, 0, -2, 1, -2, 1, 3, 6, 9, 8, 6, 3, -4, 4, + -2, -2, -14, -11, -13, -15, -12, -7, -4, -3, -6, -12, -7, 1, -1, 4, 1, 0, -4, -8, -10, -7, -2, -7, -5, -8, 1, 3, 4, 12, + 6, 7, 3, 4, 7, 11, 6, 6, 6, 7, 9, 8, 8, 4, -2, -4, 2, 0, -2, -12, -78, 84, -18, 13, 33, -43, 35, 13, 20, -7, + 23, 25, -20, -7, -4, 5, -7, 6, 11, 0, -1, -2, 10, -5, -7, -4, 2, 23, 6, -16, -16, -7, -13, -3, -6, 7, 4, 2, 6, 6, + 10, 3, -1, -2, -1, -6, -14, -9, -1, -4, 5, -1, 9, 17, 0, -2, -20, -3, -3, -4, 0, -3, -7, -20, 49, -4, -5, -3, -14, -24, + -23, -21, -21, -15, -18, -14, -5, -8, -2, -5, -5, -6, -7, -11, -11, -4, -3, 0, -5, -6, 5, 5, 9, 11, -3, -9, -23, -24, -20, -18, + -7, -2, 4, 2, -3, -4, -8, -10, -13, -8, -8, -8, -6, -3, -8, 0, -6, -3, 2, -6, -3, -1, 2, 0, -2, 4, -2, 6, -1, 2, + 6, 2, 14, 8, 20, 27, 26, 33, 30, 8, -12, -41, -43, -42, -34, -22, 0, 24, 25, 28, 32, 28, 25, 10, 0, -11, -17, -19, 1, 2, + 1, -8, -3, -2, 0, -1, -8, 9, 2, 8, 2, 15, 13, 7, 6, 16, 13, -5, -11, -10, 12, 27, 34, 35, 21, -2, 5, 7, 8, 7, + 6, 10, 9, 6, 2, 5, -1, -10, -1, 2, 2, 5, 0, -1, 9, 6, 7, 7, 7, 4, 5, 5, 6, 6, 4, 5, 9, 11, 15, 10, + 9, 11, 14, 5, 4, -7, -5, -1, -5, -1, 9, 6, 3, 10, 12, 10, 7, 3, 7, 10, 10, 9, -2, -1, -3, -2, -6, -2, 0, 2, + 4, 10, 14, 21, 21, 20, 16, 10, 2, -16, -44, -55, -71, -66, -63, -45, -17, 12, 18, 15, 12, 8, -2, -17, -46, -53, -51, -48, -32, -29, + -24, -28, -21, -22, -25, -13, -12, 4, 15, 24, 27, 22, 23, 27, 18, 17, 7, 1, -6, 1, 3, 2, -8, -24, -54, -127, 101, -75, 17, 44, + -42, 12, -1, 11, 0, 35, 8, -34, 28, 8, -10, -14, -9, -21, -8, 8, -4, 10, 3, 1, -1, 29, 13, 0, -14, -24, -1, 0, -12, -10, + 13, 8, -1, 5, 6, -3, 11, -3, 3, 8, -8, -3, 3, 8, 5, 1, 4, 11, 11, 8, 2, 2, 2, 12, 13, 12, 5, 6, -13, 81, + -1, 1, 1, 1, 2, 5, 2, -1, 0, 10, 4, -1, -1, -5, -4, -7, -1, 9, 0, 1, 10, 1, -4, -2, -3, -4, -1, 0, 0, -3, + -4, -2, 2, 6, 3, 4, 6, -2, 4, -2, -5, -2, 5, 7, -1, 2, 2, 10, 4, -2, 1, 0, 8, 3, 2, 5, -1, -3, 3, 3, + -3, -3, 9, 4, 1, 7, 1, -11, -8, 6, 2, 0, 10, 1, 3, -1, 1, 0, 13, 6, 1, 4, -13, -4, -7, -6, -4, 1, 7, -2, + -3, -2, 5, 3, 5, -1, -7, 1, -3, 4, 8, -6, -8, -3, -4, -5, -7, -9, -7, 2, 4, 6, 1, 1, 3, 5, 2, 2, -9, 2, + -4, -4, -1, -2, -6, -3, -2, -4, -2, 2, 3, 2, 4, -2, 2, 0, 1, -3, 1, 4, 3, 0, -2, 2, 2, 3, -1, 1, 1, 8, + 2, -1, 2, 3, 0, -2, 2, -2, 1, -3, -2, -2, -3, -6, -2, -4, -3, 1, 1, -1, 0, -1, 0, 3, 7, 3, 3, 7, 3, 2, + 0, 1, -1, -7, -6, -2, -1, -4, 1, 2, -3, 2, 10, 2, 4, -6, -3, -2, -2, -5, -2, 4, -1, 0, -3, 0, -3, 2, 0, 10, + 3, -4, -1, -2, -3, 1, 3, 5, 1, -1, 4, 5, 4, -4, 2, 1, -4, -1, -1, -2, 3, 6, 4, 7, 6, 9, 3, 2, 5, -10, + -12, 0, 4, 10, -7, 1, 4, 0, -13, -4, 6, 1, 4, -5, -11, -5, 3, -2, -5, 0, 10, -4, -10, -13, -1, -3, 3, -10, -11, 5, + 9, -3, 3, 4, -1, 4, 6, 6, -2, -6, -5, 6, -2, 6, -7, 2, 2, -3, -7, -1, 0, 7, 1, 0, 8, -4, 1, 1, -4, 2, + -5, 3, -2, 3, -13, 2, 7, 7, 5, 1, 6, 2, 5, -5, -2, 6, 4, 1, 4, -3, -3, 4, 4, 4, 5, 5, -4, -1, -9, 1, + -6, -3, -2, 5, 1, -1, -6, 2, 5, 6, -1, 5, 1, 3, 0, 5, 2, 6, 0, -2, -6, 0, 3, -2, -7, -1, 8, 9, -1, 0, + 1, 0, -2, 2, 5, 0, 3, 4, 0, 0, 2, -1, 5, 0, -3, 0, -10, 1, 1, -2, 3, -7, 6, -1, 4, -7, 1, 1, 6, 2, + -2, 1, 5, -2, 2, 7, 5, -1, 0, 0, -7, 5, 1, 2, 4, 1, -8, -5, -5, 9, 3, 2, -1, 7, 2, -8, -8, -2, 6, -10, + -1, 6, 8, 2, -5, -3, -3, -4, 1, 1, 1, 0, 4, 1, -3, 1, 1, -3, 2, -2, -2, -4, 1, -5, -5, 0, 0, 0, 0, -4, + -3, 0, -1, -1, 2, 0, 0, 1, 3, 1, 6, -2, -3, 0, 4, 1, -3, 0, -1, 1, -2, 1, 2, 2, -3, -1, -3, 1, 0, -4, + -2, -2, 1, 1, 1, -7, 0, 5, -4, -5, 3, -1, -3, 1, 3, 2, -5, 0, 0, 4, 0, 0, -3, 2, -3, -4, -5, -6, -3, 1, + 2, 3, 10, 1, 2, -3, 0, -4, -7, -4, -3, 6, 4, 2, 0, -2, 0, -2, -6, 2, -3, 2, -1, -2, -2, 0, 3, 2, -2, -5, + 1, 7, 3, 7, 1, -3, 6, 12, 2, -12, 5, -8, -10, -8, -7, 0, 2, 6, 0, 0, -5, -4, 5, 8, 11, 4, -6, 2, -4, -1, + -6, -3, -5, 2, -1, 1, -2, 3, 4, 0, 3, 6, 3, -2, 3, 7, 3, 2, 1, -2, 5, -7, -10, -10, -3, -10, 2, 4, -3, 9, + -1, -6, -6, -2, -4, -1, -4, -4, -1, -5, 3, 11, 5, -1, 0, 4, -1, -3, -1, -2, -5, -5, -1, -6, -2, -4, -5, -10, -4, 1, + 6, 8, 8, 5, 1, 4, 5, -3, -11, -9, -13, 4, 9, 2, -2, -5, 3, -2, -2, -3, -1, -2, -2, -3, -6, -7, 1, -1, -8, -10, + -1, -2, 0, 4, 7, 7, 3, 8, -2, -4, 0, 0, -8, -4, 3, -4, -6, -6, 0, 1, -1, -4, -5, -8, -5, -6, -2, 7, 2, 7, + -5, 3, 3, -3, 1, -2, -6, -5, 0, 7, 2, 2, 3, -1, 2, 7, -1, 6, 3, -1, 0, 8, 6, 2, 9, -1, 2, 6, 1, 2, + -14, 4, 2, 1, 9, 13, 0, -8, -8, -4, 5, 3, 3, 3, 3, 7, 1, 2, 5, 0, 0, -4, -3, -1, 6, 6, -3, -3, -2, -2, + -1, -2, 2, 4, 0, 1, 5, 4, -3, -7, -5, -5, 2, 3, 4, 0, 4, -2, -1, -5, -3, -6, -5, -4, -3, -1, -1, 1, -3, -10, + -4, -6, -7, 0, -1, 0, 2, 4, 3, 8, 8, 5, 4, 4, 1, 2, -5, -4, 2, 0, 0, 0, -6, -7, 1, -2, 0, 1, -4, 6, + -1, 9, 7, 2, -3, -4, -1, 0, 5, 1, -2, 3, 6, 1, 0, -3, -6, 2, -2, -4, 3, -4, 0, 1, 2, -2, -1, 0, 5, 1, + 1, -1, 0, 2, 7, 4, -3, -6, 0, 5, 4, 3, 11, 7, -2, 11, -10, -8, -11, -3, 3, 1, 3, -4, 2, -14, -5, 0, 4, 6, + 1, -2, -9, -7, 2, -9, -7, 4, -6, 4, -7, -15, 3, 6, 4, 3, 0, 1, 3, 5, 7, 7, -1, 1, 2, -1, -13, 2, -3, 0, + -4, -10, -2, 6, 3, -4, 4, 2, 3, -4, 1, 10, 13, 7, 0, -3, 0, 0, -5, -4, 3, 0, 2, -1, 1, 2, -6, -6, -6, -3, + 2, 3, 9, -3, -4, -3, 2, 2, -6, 1, 0, 2, 4, -1, -5, -8, -9, -6, 0, 2, -3, -6, -4, -8, 0, 3, 6, -1, 7, 1, + 0, 2, 1, -3, -5, -6, -4, 1, -2, -1, -2, 0, -12, -2, 3, 3, -5, 0, -2, -1, -6, -5, -4, -6, 2, 13, 3, 3, 7, 2, + -2, -3, 3, 5, 4, -1, 5, 2, -3, 4, 3, -1, 2, 3, 4, -3, -3, -3, 3, 1, 3, 5, 6, 5, 1, 6, 5, -2, 2, -3, + -2, 4, -3, -11, -5, -12, -3, -3, -3, -1, 1, -8, -1, -1, 0, -3, -2, -4, 2, 1, 2, 3, 1, -2, -3, -4, -3, 1, 0, -1, + 1, -2, -2, -4, -3, -2, -2, -5, -2, -5, -1, 1, 2, 5, -1, 2, 3, -1, -3, 1, 0, -1, -1, 3, 1, -1, 2, 1, 3, 2, + 6, 5, 3, 3, -4, -7, -1, 1, -3, 0, -2, -3, -2, 4, 2, 2, -2, 4, 4, -1, -1, 0, 1, 3, 9, 4, -1, 4, 8, -2, + 1, 3, 4, 5, -5, -6, -6, -9, -5, -4, -7, -7, -3, 2, -1, -5, 0, 3, -1, 9, 3, -1, 2, 5, 1, 4, -6, 2, -1, 1, + 2, 2, 2, -3, 1, 3, 4, -1, -4, 2, 1, -3, 9, 9, 5, -11, 10, 0, 4, 5, -2, -24, -2, 2, 1, 2, 5, -4, 2, 6, + -4, 11, 9, 11, 2, 6, -3, -4, -4, -7, 0, -1, -5, -12, -8, -11, -8, -2, -3, -3, 2, -4, 0, 2, 9, 7, -7, 4, 7, 2, + 0, -4, 0, 2, -2, -1, -5, 2, -1, 5, 2, 2, 0, 7, 4, 6, 4, 8, 8, 26, 7, 10, -4, -3, -10, 3, 6, -6, -3, -4, + -7, -6, 8, 7, 6, 5, 3, 0, 4, 3, 2, -6, -8, -13, -7, -5, -2, 4, 2, 3, -3, -6, 5, 0, -4, -12, -7, -6, -6, -6, + -5, -4, 0, -2, 2, 10, 15, 9, 5, 1, 0, 4, -8, -2, 4, -8, -6, 0, 5, 2, 2, -3, -12, -14, -8, -8, -4, -2, 3, 5, + 4, 1, -2, 5, 5, 4, -5, 5, 0, -4, -2, -2, 2, 0, 13, 1, 3, 2, 6, 6, 5, 4, 0, 7, 1, -10, -5, 1, -5, 2, + -1, 0, 0, -7, -6, -5, 0, -12, -8, -15, -17, -10, -6, -2, -2, 1, 4, 2, 8, 11, 8, 6, 7, 3, 4, 11, 10, 10, 6, 5, + 1, 5, 6, 8, 3, 3, 4, -1, 4, 1, 4, 1, -5, -4, -4, -5, -2, 0, 0, 2, 5, 2, -2, 0, 2, 4, 0, 2, 2, 2, + 2, 4, 5, 5, -1, -1, 0, 4, 1, -2, -1, -3, -2, -3, -1, -4, 0, 3, 5, 2, 2, -3, 3, 0, -1, -2, 1, -3, 2, -1, + 3, 7, 6, 4, 8, 8, 14, 14, 7, -2, -2, 1, 0, 6, -1, -2, 1, 4, 4, 9, 8, 7, 1, 1, 1, -2, 1, 7, 8, 1, + 5, 8, 7, 4, 7, 9, 6, -1, 0, -1, 0, -2, -5, -4, -1, -3, 1, -4, 4, 9, -26, 4, -10, 16, 26, -16, 10, 14, -4, -15, + 2, 24, -13, -3, 7, -3, -6, 3, 13, 1, -13, 2, 2, -2, 0, 2, -4, -9, -5, -10, -5, -14, -6, -7, 0, 4, 5, 1, 1, 4, + 6, 4, 11, 2, 4, -2, -1, -5, 5, 8, -2, 0, 8, -1, 6, 8, -2, 2, 2, 1, 7, 2, 3, 1, 59, -1, 7, 5, -2, -1, + -2, -4, -5, -1, -2, -3, 0, 11, 9, 3, -5, -1, 0, 0, -1, 5, 1, 8, 6, -1, 0, -3, -4, 6, 6, -1, 3, 0, -5, -13, + -8, -7, -7, 0, 0, -5, -5, 1, 2, 5, 8, 15, 15, 6, 10, 6, 5, 0, -1, -2, 0, 7, 15, 18, 12, 5, -4, -1, -3, -14, + -12, -9, -4, 7, 8, 10, 11, 9, 7, -1, -13, -12, -4, -5, -6, 2, 3, -8, -7, 1, -4, -9, -15, -3, 0, 0, -4, -2, -1, -1, + -13, -30, -40, -46, -44, -23, -14, -4, 15, 6, 12, 2, 4, 7, 0, 5, 7, 7, -1, 3, -7, 8, -11, -26, -33, -11, -11, -9, -9, -8, + -5, 3, 0, 5, 4, 5, 1, 2, 8, 7, 10, 9, 11, 8, 2, 1, 2, 0, -3, 0, -1, 1, 4, 7, 8, -1, -5, -4, -9, -11, + -17, -10, -8, -7, -8, -3, -10, -9, -12, -4, 2, 4, 9, 11, 11, 17, 14, 9, 9, 5, 6, 3, -2, -2, 3, -4, -2, -2, -7, -13, + -11, -13, -10, -9, -7, -9, -10, -8, -11, -17, -16, -14, -1, 12, 25, 28, 34, 33, 29, 13, -2, -13, -16, -17, -20, -12, 0, 19, 37, 28, + 23, 16, 14, 3, -4, -10, -12, -12, -14, -9, -2, 10, 25, 33, 39, 35, 34, 24, 16, 0, -15, -39, -52, -58, -70, -75, -18, -61, 91, -19, + -109, 127, -2, 12, -20, 63, 2, 3, 26, 10, -13, 21, -14, 2, 7, 4, -5, 11, 20, -2, -6, 13, 2, -5, -13, -1, -9, -12, -10, 0, + 4, 3, -4, -3, -2, 9, -4, 3, 2, -10, -18, -9, -18, -12, -13, -4, -10, 3, -7, -8, -4, -7, -5, -10, -5, -3, -2, -10, -15, 102, + -3, -6, -1, 1, 0, 1, -4, -6, -10, 3, 0, 4, -7, 5, 4, 0, -5, 5, 4, 1, -9, -1, 4, -3, -6, -4, -7, 2, -1, 0, + -8, -6, -4, 0, 0, 7, 1, 4, -8, -4, -2, 2, -8, -8, -11, -3, 3, -4, 6, 1, -4, -6, 0, -1, 1, 7, 6, -10, 4, 7, + 1, -3, -3, -2, 7, -2, 1, 7, -7, 1, 5, 0, 4, 5, 10, -2, -6, -7, -3, -5, 7, -3, -4, 6, -3, 4, 5, 5, 1, 3, + 2, 4, -4, -5, 10, -1, -5, -5, -4, -10, -1, 3, 3, -3, -9, -7, -3, -1, -3, -11, 1, -1, 0, -2, 1, -11, -3, 14, 8, 3, + 12, 14, 10, 4, 5, -1, 0, -1, -3, 0, -3, -4, -4, -2, -2, 3, -2, 1, -2, 9, 2, 1, -8, -3, -3, 3, -1, -3, 0, 1, + 1, -6, 3, 0, 1, -4, -1, -5, 1, 1, -2, -6, 1, 0, 3, 8, 5, 6, 7, 7, 3, -2, -1, -8, 1, 4, -4, 6, -5, 0, + 5, 3, 4, 0, 2, -4, -1, 1, -1, 1, -2, 3, 2, 5, 11, 8, 0, 6, 2, 6, 1, 1, -3, -3, -12, -1, -6, -7, 4, -3, + 0, 3, 10, 10, 1, -4, -2, -7, 0, -2, 5, 6, -2, 6, 2, 3, 2, 1, 7, -9, -4, -3, -1, 6, -4, 2, -1, 0, -3, -15, + 10, -1, -6, 3, 1, -4, 0, 8, -5, -3, 12, 8, 4, -5, 4, -5, 5, 4, -6, -7, -3, -5, -5, -11, -10, -7, 4, 14, 0, 9, + 7, -5, 10, -4, 2, -2, 9, 1, -1, 5, 6, -3, -1, -10, 2, -2, -2, -3, 14, 0, 4, 1, -5, -2, 2, -2, -3, 5, -3, -1, + -7, 6, 0, 0, -11, -8, -2, -1, -6, -5, -6, -4, 7, 2, -5, -2, -9, -17, -11, 9, 2, -2, 9, 6, -2, -5, -1, -5, 0, 2, + -2, -3, 0, 1, 6, -1, -3, 5, 1, 3, 6, 7, 2, 5, 1, -1, 6, 1, -3, -1, 1, 3, 0, 1, 1, 2, 0, 12, 7, 2, + 7, 6, -12, -9, 10, 16, 1, -2, -2, -7, -7, -2, 11, 7, 4, -3, -14, -12, -1, 6, 1, -5, 10, 6, 9, 5, 2, 6, 2, 10, + -5, 12, -6, -8, 1, -3, -2, 1, 0, -7, -1, 1, 1, 1, -4, 1, -6, -8, -8, -4, 13, -2, 15, 11, -4, -4, 6, 2, -4, -5, + -1, -1, 0, -4, 0, 7, 7, 7, 4, 5, -2, 2, 0, -2, 0, 1, 3, 2, 2, 8, 6, 3, 5, 5, 2, 1, -4, -5, 0, 4, + 2, -3, -6, 4, 3, 3, 4, 0, 4, 4, 4, -1, 3, 2, 0, 2, 2, 0, 5, 5, 1, -8, -9, -4, -4, 0, -7, -3, -2, 2, + 3, 2, -5, -4, -7, -4, -10, -11, -14, -11, -9, -1, -5, 1, -2, 0, -3, -3, -1, 10, 8, 0, 0, 5, 5, 8, -3, 7, -3, -7, + -8, 0, -3, -6, -6, -1, -7, 12, 5, 6, 1, -3, -3, 1, 2, 3, -5, -7, -4, -3, 5, -3, 1, -5, -1, 4, 4, 5, -2, 8, + 4, 8, 5, -6, -11, 15, -6, 0, -9, -9, -3, 15, 15, 8, -12, 2, -2, -1, -8, -6, 1, -3, -2, 4, -10, -4, 10, -4, 0, 0, + -12, 6, 9, 4, 0, -6, 6, -1, -7, -1, 5, 0, 4, -3, -1, 4, 0, 3, -2, -1, 4, 4, -8, 4, -6, 6, 1, 4, 6, 8, + 1, -2, -3, -4, -11, -3, 2, 13, -2, -11, 6, 8, 6, 5, -5, -1, -2, -3, -6, -1, 3, 8, 7, 2, -5, -5, -3, -9, 0, -5, + -6, -2, -3, 7, 10, -2, -12, -2, -10, -1, 6, -2, -8, 7, 6, 10, 2, -4, 4, 3, 2, 0, 11, 0, -3, -5, -1, 2, -5, -7, + -2, -4, 4, 3, -2, 2, 1, 1, 11, 4, 9, 1, 1, -7, -4, -1, 2, 5, -2, 8, 2, -10, -3, -3, -2, 7, -6, -8, -6, -3, + -3, 11, -3, 17, 7, 2, -4, 2, 8, -5, 4, 2, 1, -1, -7, 5, 0, -6, -5, 0, -11, -4, 0, 2, 1, 2, 8, 6, 3, -2, + 0, 0, -4, 8, 16, 6, 7, -1, -1, -4, -5, 2, -1, 0, -4, 3, -3, 1, -4, -2, -3, 0, -2, -4, 2, -2, 7, 3, 9, 10, + 4, 3, -7, 2, 4, 2, -2, 1, 6, 7, 1, -3, -7, -6, -1, 2, -10, -14, -13, -4, 2, -3, 0, -3, -2, 0, -4, -3, 1, 1, + 1, -2, 2, 3, 9, 7, 9, 4, 0, -6, -3, -10, -7, -6, -2, 3, -4, -6, 0, 1, -2, 0, 2, -3, -1, 6, 0, -5, 0, -5, + -4, 5, -9, 5, -3, 4, -1, -3, 2, 7, 9, 2, -8, -9, -10, -10, -6, -4, 11, 8, -2, -3, 0, -1, -6, 3, -8, -1, 1, -1, + 0, -4, 1, 2, 0, 5, 4, 9, -5, 3, 34, 7, 3, -4, 20, -4, 0, 5, -1, -18, 0, -3, -3, -1, -11, -12, -3, -5, 2, 0, + -2, 0, 0, -2, -2, -10, 2, -2, -2, -6, -18, -6, -1, -6, -2, -2, -2, -4, 0, 0, 8, 8, -2, -3, 3, 1, 0, -8, -6, -4, + -3, 6, 1, 0, 2, -3, 0, 9, 1, 4, -1, 9, 11, -6, -17, 7, 1, 10, -5, -6, -5, -13, 0, 2, 6, -7, -4, -7, -1, 1, + -6, -5, -1, -1, -5, -3, 0, 2, 7, 6, -1, 7, -3, -6, 5, -5, 12, -5, 5, 1, -3, -11, -8, -8, -12, -5, 1, 2, -2, -13, + -1, -4, 3, 2, 6, 10, 2, 13, 7, -3, 3, -3, -9, 12, 11, -3, 2, 5, 8, 4, 7, -3, 3, -3, 3, 0, 11, 10, -2, 12, + 7, 11, 9, -1, 11, 8, 13, -8, 4, -1, 8, 12, -5, -15, -10, -6, -8, -5, -1, -7, -4, -14, -6, 4, -7, -1, -1, -4, -7, -2, + -5, -8, -3, 3, 8, 4, -10, -4, 6, 16, 15, 7, 11, 6, 6, 7, 3, 6, 5, 0, 0, 2, 8, 9, 11, 1, 3, -3, -2, -3, + -2, 3, 6, -3, -9, -9, -1, 12, 6, -1, 2, -1, -5, -6, -1, 3, 3, -3, -4, 6, 8, 1, -3, 0, 2, -2, 2, 9, -1, -1, + -4, 2, 1, 10, 3, 3, 1, 1, -5, -1, -7, -3, -1, -1, -1, 3, 2, 0, -3, -4, -1, -3, 0, -1, 5, 0, 0, 7, -2, 5, + -1, 0, 6, 2, 2, -3, 0, 11, 5, -5, 3, 2, -1, -4, 3, 0, -4, -2, 3, 2, 4, 0, 1, -1, -1, -1, -1, 3, -10, -10, + -6, -7, -9, -7, -3, 2, -4, 5, 9, -3, -1, -2, 3, -2, 3, 22, 10, -7, -15, -20, -19, -12, -12, -31, -31, -8, 7, 1, 8, -11, + -6, -4, -10, 6, 3, -4, -13, -8, 0, 3, 3, 9, 2, -2, 3, 9, -2, -7, 2, -8, 5, -5, -4, -9, -13, 0, 7, 5, 2, 7, + 5, 0, -23, 0, -10, -4, -1, -3, -4, 13, -5, 1, -3, 5, 4, -1, 5, 6, 6, -3, 0, 8, 7, -5, -12, -9, -20, -19, 0, 10, + 7, 3, -2, -2, 25, 29, 24, 17, -4, -11, 7, 0, -7, 5, -2, 2, -9, -7, -8, -7, -6, 7, 0, 1, -1, 9, 14, 7, 5, -5, + 0, -2, -1, 10, -9, -17, -6, -10, -12, -19, -5, -7, -11, -8, -8, -11, -10, -10, -8, -8, 4, -3, 5, -10, -17, -7, -20, -15, -7, -3, + -4, -7, -14, -10, -12, -13, -5, 4, 2, 2, 16, 27, 32, 26, 25, 43, 54, 38, 36, 19, 11, 14, 12, 3, -7, -3, -7, 2, 5, -3, + 2, -8, -9, 2, -18, -5, -14, -8, 0, 2, -9, -11, -6, -8, 1, 1, 3, -16, -19, -9, 7, 2, 7, 2, 0, 3, -2, -5, -2, -4, + 2, 2, 3, -1, -7, -10, -5, 1, -1, -1, -6, 0, 5, 5, 5, 3, 8, 8, 8, 6, 3, 8, 5, 2, 4, 3, 1, 5, 1, 1, + -7, -4, 5, -2, -1, -1, 4, -1, 2, 4, -3, 1, 1, 3, 13, 13, 4, 5, 5, 6, 12, 6, 3, -2, -3, -5, 5, -1, -1, 2, + 3, -4, -4, -6, -8, -4, -4, 3, 1, 6, 4, 13, 9, 4, 4, 14, 19, 7, 8, 4, 5, -2, -4, 1, -6, -2, -5, -3, -8, -7, + -5, -1, -6, -2, -2, -6, 2, 8, -3, -5, 9, 1, -3, 3, 1, 10, -2, -5, 0, -4, -14, 30, -11, -3, -21, -11, -9, -5, -1, -2, + 0, 21, 12, 18, 14, 4, 3, 5, 5, 14, 7, 3, 1, 7, 1, -16, 10, 9, 8, 1, -9, -3, -2, 4, 1, 9, 13, 5, 6, 3, + 12, 8, 12, 9, 3, 3, -2, -7, 6, 13, 9, 9, 6, 1, 7, -3, -1, -1, -2, 4, 10, 14, 13, -1, 33, -15, -6, -7, -9, 0, + -7, -11, -9, -12, -9, -9, -12, -2, -7, 1, 4, 0, -7, -1, 10, 5, 3, 8, 6, 7, 1, -6, -5, -3, -4, -7, 1, 6, 6, 17, + 7, 11, 4, 4, -2, 8, 7, 8, 10, 11, 10, 23, 13, 14, 23, 30, 20, 17, 17, 11, 22, 14, 8, 2, -4, 1, 2, -5, 7, 15, + -6, -10, -7, -3, 2, -5, -25, -16, -15, -12, -5, 4, 8, 1, 1, -4, -8, -17, -19, -30, -31, -29, -37, -35, -34, -41, -36, -35, -31, -22, + -21, -34, -26, -21, -15, -19, -26, -27, -23, -35, -28, -9, -16, -7, -12, 2, 11, 25, 0, 5, 13, 34, 34, -15, 18, 12, 17, 20, 23, 19, + 14, 3, 3, -4, -7, 1, 4, 4, 6, 1, -1, -7, -11, -6, -6, -10, -12, -13, -10, -10, -5, -6, -7, -5, -12, -11, -14, -13, -11, -9, + -9, -15, -11, -11, -9, -12, -12, -5, 1, -1, 8, 7, 2, 7, 6, 13, 8, 11, 5, 5, 6, 14, 8, 6, 0, 3, 2, -3, 7, 8, + 8, 8, 14, 16, 15, 8, 12, 20, 20, 22, 23, 20, 21, 11, 7, -11, -15, -22, -32, -38, -36, -30, -36, -31, -30, -22, -9, 12, 29, 44, + 55, 58, 50, 43, 39, 45, 45, 29, 33, 19, 1, -1, -3, -9, -7, -12, -11, -15, -23, -23, -36, -40, -38, -25, 0, -127, 84, -25, 125, -120, + 102, 3, 79, 10, 37, 53, -6, 29, 29, 9, 0, -10, 22, 15, -16, -15, -7, 14, 7, -4, -2, -7, -8, 4, -6, -13, -13, -10, 1, -4, + 7, -9, 2, 0, 15, 12, 13, 3, 10, 6, -2, -11, -14, -5, 0, -1, -5, -3, -11, -9, -10, -15, -10, -18, -19, -10, -26, -27, -24, 120, + -10, -9, -11, -7, 0, 1, -8, 1, 4, -1, 5, 9, 7, 2, -3, -3, -2, -7, -7, 0, -1, 2, 2, 8, 2, 5, -3, -9, -2, -2, + 5, 1, -2, 0, 4, 7, 3, 0, 0, 5, -8, 2, 8, 14, 6, 4, 2, 3, -5, 1, -5, -3, -16, -11, -6, -10, -8, 2, -1, -13, + -4, 3, -2, -3, -13, -9, 1, 9, 22, 11, 9, 12, 1, 1, -9, -7, -2, 0, -5, 6, 16, 5, 20, 3, 1, -10, 1, 12, 10, -2, + 0, 1, 9, 3, -2, 5, -5, -8, -8, 1, -4, 2, 6, 10, -4, -1, -4, -7, -8, -13, -8, -6, 0, 9, 6, 10, 8, -10, -22, -17, + -5, -2, -8, -2, 1, -2, 5, 4, 6, 2, 6, 2, 6, -4, -7, -4, -2, -5, -1, -5, -4, 2, 4, -5, -3, -2, 4, 2, -2, -8, + 1, -3, -1, -1, -2, -2, -3, 1, 4, 2, -9, -3, 6, 5, 5, 4, 14, 16, 8, -1, -5, -7, -3, 6, 6, -3, 4, 4, 3, 2, + -6, 2, 12, 8, -1, -9, 2, -4, -1, 7, 1, 1, -3, 2, -2, -2, -4, 2, 7, 2, 9, 3, 6, -6, 7, -1, -1, 4, 0, -3, + -8, 8, -5, -4, -7, 2, 0, 5, 6, 5, 3, 12, 5, 7, 9, -2, -6, -5, -8, -2, 3, -1, 10, 5, 8, 5, 3, -2, -10, 3, + 57, -12, -7, -18, -17, -1, -12, -19, 16, 12, -2, -3, 1, 21, 7, 14, -15, -17, 0, 4, 11, -1, 3, 0, 7, 7, 17, 13, 16, 13, + 5, 1, 0, 9, -4, -1, 4, 3, 1, -3, 8, -2, -12, 2, 10, 8, -1, -2, 11, 1, 0, -1, -13, -8, -10, -9, -4, -4, -1, -2, + -13, -20, 1, 7, 19, 1, 5, 3, 6, 1, -4, 3, 0, 6, 11, 9, 10, 11, 1, 2, 4, 9, 7, 3, -2, 1, 2, 4, 15, 8, + 14, -1, -1, -1, -3, -5, 3, 1, -2, 11, 10, 2, -2, -13, -9, -8, -8, 0, 1, -4, 1, 3, -1, 3, 0, -5, -8, -5, -13, -4, + -10, -4, 2, 3, 9, 8, 3, -7, 0, -5, -10, 3, -4, -1, -9, 2, 2, -2, -1, -3, 4, -6, 7, -5, -1, 8, -1, 2, 4, 6, + 8, 7, 2, 10, -5, 3, 12, -1, 3, 9, 7, 5, 7, -7, 9, 2, -12, -5, -7, 1, -5, 4, 0, -7, -20, -5, -3, -17, -5, 3, + 6, 1, 4, -14, -24, -12, -6, -9, -9, -3, 3, -2, -2, 1, -3, 5, 7, 2, 0, -7, -6, -10, -10, -6, -3, 0, 2, 2, 1, -2, + -3, -4, -6, -7, 3, -3, 2, -1, 5, 3, 2, 1, -3, 2, -6, -3, -1, 2, 4, 6, 3, 5, 3, 8, -2, -6, -5, -7, -7, 1, + 1, 4, 4, 3, -1, 5, 1, -3, -9, -8, 3, 5, 1, 1, 3, 0, 3, -3, 5, -3, -1, -9, -5, 5, 1, 16, 8, -5, -4, 5, + 2, -10, 1, 0, -12, -8, 5, -9, -6, -5, 7, 5, 11, 6, 8, 15, 4, -1, 4, 11, 2, 10, 1, 0, 5, 2, -2, 2, 3, 3, + 5, -5, -3, -2, 10, 45, -18, -12, -11, -16, -10, -12, -7, -4, 11, -9, -8, 3, 12, 12, -4, 3, -4, -15, -16, 6, -1, -11, -4, 5, + 6, -3, 9, 8, 19, -3, 2, -1, -15, -5, 13, 4, 2, 2, 3, 2, -1, 0, -17, 9, -9, -5, 8, -4, -4, -7, -14, 0, -16, -15, + -4, -6, 0, -2, 5, -9, -8, 4, 1, 25, -2, 2, 2, -3, 5, 10, 0, 3, 4, 6, -8, -13, -22, -8, -8, -15, -2, 7, 13, 12, + 8, 10, 19, 0, -7, -15, -13, 5, 6, -6, -8, -4, -1, 2, 23, 17, 14, 6, -5, -6, -7, -19, -10, 2, 2, 3, 3, 6, -2, 0, + 6, 4, 4, -2, 7, -5, -14, -22, -17, -3, 1, 1, -1, 14, 22, 15, 6, 10, 8, 9, -3, -5, 3, 7, -3, -17, -4, 9, -6, 2, + 17, -1, 0, 0, 2, 6, -1, -4, 12, 18, 22, 13, 5, 20, 29, 11, 2, -2, 0, 15, 9, -1, -4, -16, 2, -4, 2, -5, -1, 11, + -3, 0, -1, -6, -5, -1, -3, -2, -10, -19, -14, -11, -1, 0, -4, -8, -10, -11, -4, -10, -7, -4, -1, -9, -10, -8, -5, 2, -2, -4, + -4, 5, 7, -1, -8, -6, -11, -9, -5, 4, -1, -8, -9, -3, -8, -4, 6, 4, 0, -7, -3, -4, -1, 11, 10, 0, -3, 3, -2, -4, + 2, 4, -5, -4, -3, -5, -6, -10, -6, -3, 8, 0, 9, 3, 6, 7, 6, 5, 4, 3, -5, -5, -6, 4, -6, -16, -15, -1, 3, 1, + 7, -3, -5, 0, -1, 1, 1, -2, 0, 2, 8, 13, -6, 8, 4, 2, 4, 6, -1, 9, 0, -11, -1, 5, 6, -6, 6, 6, 2, 10, + -3, -8, 5, 0, -7, -2, -4, -4, -8, -9, 42, -31, -15, -4, -14, -10, -1, -16, 5, 3, 14, -2, 6, 11, 4, -8, 21, 2, -11, 10, + 5, -3, -8, 10, 2, 10, -1, 16, 8, -2, -6, -7, -1, -8, 5, 1, -7, 3, -2, 13, 1, 7, 0, 12, 11, 0, 9, 8, 6, -8, + -4, -8, -1, -7, 5, 1, 2, 2, 8, 5, 1, 5, 4, 12, 33, 0, 0, -5, -8, -6, 5, -6, -4, -5, -10, -2, 7, -9, 6, 0, + 0, -3, 11, 7, -8, -10, 0, 0, -6, -4, -6, -12, -2, 4, 3, 12, 9, 4, 7, 9, -2, -12, 4, 5, 1, 5, 4, 20, 21, 24, + 13, 6, 2, -4, -2, 0, 11, 0, -9, -5, 0, 15, 3, 0, -3, 4, 3, 16, 9, -4, -17, -7, -10, -9, 2, 10, -10, -10, 4, 2, + -2, 11, 2, 3, 14, 11, -3, 2, 16, 4, 25, 14, 21, 13, 20, 19, 1, -9, 7, 24, 4, 8, 5, -8, 0, 4, 2, -1, -13, -8, + -2, 5, 6, 1, 1, -1, -5, -8, -6, -1, 2, -3, -12, -22, -9, -1, 4, 4, 6, 10, 7, 1, -4, 2, -3, -4, 4, -3, -3, 2, + 1, 3, 4, 5, -2, 6, -1, 0, 1, -7, -2, -1, 1, 9, 10, 5, -1, 1, -1, -2, -8, 1, 1, -10, -6, -9, -5, -7, -1, -6, + 0, -2, -11, -11, -10, -2, 10, 8, 2, -5, -7, 0, -13, -12, -2, 2, 1, 2, 9, 2, 7, 6, 2, 3, 3, 8, 12, 10, 14, 5, + 18, 9, 2, 9, 11, 12, -7, -6, 5, -1, 7, 0, -9, -15, -16, -11, -15, -16, -5, 3, -2, -5, -8, -13, -12, -10, 4, -2, -1, 2, + 3, -2, 4, 1, 0, -2, -10, 0, 6, 8, 17, 7, 2, -13, -17, 63, -36, -22, -17, -17, -18, 19, 7, -25, 3, 1, 4, 12, 6, 5, + -3, 7, 13, -3, -7, -1, -8, -16, 3, -3, 4, -6, 9, -3, -4, -6, 9, 5, -12, -5, -10, -15, -9, 7, 4, 4, -3, 14, 12, 16, + 11, 9, 7, 15, 2, -9, -11, -4, -11, -5, 4, 1, 5, 7, 6, 6, -1, 5, 1, 39, -16, 2, 7, 5, 0, 11, 11, 14, 24, 25, + 20, 14, -7, 9, 19, 11, 0, 7, -9, -5, -7, -6, -3, -26, -10, -4, -18, -6, -20, -17, 1, -6, -15, -23, -15, -13, -22, -26, -28, -14, + -16, -14, -12, -15, -6, -12, -1, -10, -9, -19, -10, -14, -1, 10, 5, 4, 10, 0, 0, 12, -7, 0, 10, -10, -16, -8, -13, -8, -9, 10, + 23, 9, 13, 17, 29, 24, 35, 25, 22, 22, 19, 18, 35, 27, 14, 34, 26, 24, -1, 12, 8, 19, -1, 10, 20, 7, -5, 12, -16, 8, + -6, -3, 5, -12, -6, -5, -3, -10, -24, -28, -17, -22, -24, -12, -11, -35, -32, -38, -45, -61, -17, -11, -7, -2, -1, -6, -13, -12, -5, 6, + -4, -8, -7, 2, 1, 10, 7, 3, 7, 11, 7, 3, 1, 1, -11, -10, -3, -3, -3, -8, -9, -13, -9, -9, -4, -5, -11, -18, -23, -26, + -25, -24, -22, -26, -19, -8, -5, -4, 3, -2, 2, 0, 8, 8, -1, -5, 6, 4, 8, 4, -4, 2, 2, -5, -6, -3, -10, 0, 0, 6, + 12, 4, -1, 7, 5, 10, 11, 7, 3, 12, 4, 11, 3, 11, -4, 0, -3, -11, -15, -4, -12, 0, 5, 9, 17, 6, 6, 7, 17, 14, + 7, 11, 5, -5, 1, 7, 2, 3, 6, 10, 7, -13, -4, -5, -2, 7, -2, -5, -7, -18, 106, -65, -25, 2, -12, -28, 22, -16, -17, 3, + 4, -14, 8, 4, 6, -6, 6, -6, -9, 4, -9, -11, -11, -9, -5, -15, 7, 4, 1, -5, -9, -10, -10, -15, -14, -10, -5, 2, -2, -4, + 2, -2, 5, 9, 2, 1, -3, -3, -6, -5, -3, -14, -16, -9, -5, -6, -6, 1, -4, -5, -7, -10, -10, -3, 14, -13, -25, -16, -22, -21, + -12, -4, 0, -9, -3, -6, -16, -16, -5, -3, -11, -10, -11, -24, -15, -18, -17, -17, 2, 16, 14, 19, 22, 15, 16, 2, 8, -1, 29, 25, + 21, 14, 2, 10, 10, 16, 28, 44, 32, 31, 22, 7, 9, 6, 2, 4, 7, 8, 8, -9, -2, -5, -16, 1, 21, 17, 34, 33, 3, -1, + 7, 4, -6, 1, 26, 31, 28, 22, -5, 4, -27, -27, -16, 7, 30, 9, 31, 7, 8, 7, 17, 2, 17, -2, -2, 18, 10, 1, 12, 18, + 14, 14, 8, -9, -7, 4, 2, -7, 3, -14, -1, 1, 0, -21, -26, -28, -45, -47, -27, 0, 3, -8, -28, -50, -54, -7, -6, -2, 0, 1, + 4, 6, -1, 2, -3, 1, 4, 3, 8, 10, 8, -6, -12, -16, -10, -7, -2, -3, -5, -4, 0, 7, 6, -3, -8, -7, -6, -9, -6, -1, + -6, -7, -13, -15, -19, -6, 3, 8, 8, 7, 2, -4, -3, -2, 8, 10, 4, 3, 2, 0, 3, 7, 6, 8, 13, 7, 17, -1, -8, -11, + -10, 0, -12, -13, -10, -7, -3, 1, 9, 6, -4, -6, -3, 15, 7, 13, 8, 8, 15, 7, 2, -1, 1, -4, -10, -12, -16, -21, -13, 8, + 6, 10, 10, 1, 5, 10, 5, -6, -7, -13, -11, -13, -4, -1, -15, -11, -10, 1, 26, 30, 23, 14, 10, 1, -13, 127, -52, -39, -58, -39, + -7, 16, -61, -51, 2, 2, -1, 17, -18, 27, 17, 5, -44, 35, 16, -10, 7, 3, -5, 24, 14, 2, 15, 20, -1, 6, 6, 7, 14, 21, + 24, 7, 8, 5, 10, 19, 17, 13, 25, 15, 10, 17, 14, 15, 8, 10, 15, 18, 14, 11, 5, 2, 20, 1, 13, 14, 5, 13, 16, -7, + 5, 14, 19, 11, 2, -5, -12, -11, -15, -16, 5, 24, 10, -6, -1, 5, -13, -16, -15, -9, -5, -10, -6, -5, -4, -6, 13, 14, 12, -4, + -12, 4, -2, 4, 7, -8, 22, 21, 17, -9, -11, -8, -12, -16, -25, -17, -24, -11, 11, 13, 10, 3, 4, 14, 13, -9, 0, 2, 1, -16, + 15, 10, 14, 27, 21, 18, 21, 6, 9, -1, -6, 11, 3, 21, 9, -9, -17, -17, -7, 10, -1, 14, 12, 12, 5, 7, 19, 4, 6, 12, + 9, 14, 15, 23, 17, 2, -7, -32, -14, -27, -16, -5, -10, 4, -3, 7, 28, -10, 8, -7, -6, 4, -9, -2, -16, -32, -11, -4, -3, -12, + 1, 4, 13, 10, 11, 5, -1, -4, -3, 2, 2, 1, 6, 9, 3, -4, -7, -9, 1, 12, 19, 24, 26, 22, 8, 14, 8, 15, 6, -5, + -5, 0, -4, -8, -13, -15, -4, 6, 5, -9, -8, -3, -8, -5, -16, -12, -8, -1, 6, 9, -6, 7, 9, 17, 1, -13, -5, -13, -15, -10, + -10, -8, 8, 4, 9, 6, 2, 4, 6, 15, 9, 2, -2, 1, 3, 0, 1, -5, -18, 12, 4, 5, 11, 19, 3, 11, 8, -5, 6, 9, + 0, -5, -11, -2, -11, -10, -15, -3, 4, -5, 9, 18, -3, -2, 14, 13, 16, 4, -13, -11, -11, 10, -3, -16, -21, -18, -3, 5, 12, -7, + -21, 23, 43, 33, 35, 22, 18, 15, -4, -13, -15, -12, 5, 23, 16, 16, 12, 11, -2, -7, -21, 3, 11, -12, -10, -12, -15, 16, 9, 32, + 18, 14, 15, 11, 30, 25, -1, 7, -24, -7, -20, -6, -13, -18, -9, -2, -6, -20, -28, -10, 5, -8, 9, 19, -10, -16, -3, 12, 16, -3, + 14, 1, 11, 10, 3, -6, -3, -2, -19, -11, -9, 6, -11, -18, -3, -19, -6, 20, 8, -10, 7, 0, -8, 6, -22, -19, -20, -29, -24, -21, + -8, 13, -5, 16, 2, 3, -2, -7, 7, -7, 9, 3, -6, -16, -17, -22, -13, -17, -17, -3, -3, -5, -10, 2, -17, -3, 3, -11, -11, -3, + 8, 2, 13, 25, -1, 9, 20, 21, 18, 10, 7, 11, 1, -6, -1, -1, 4, -24, -2, 11, -17, -6, -7, -2, 9, -1, -14, -6, -11, 8, + -12, -10, -7, 4, -14, 0, 3, 10, 0, 1, -9, -31, -18, 16, -16, 16, 24, 11, -6, 2, -5, -8, -6, -37, -9, -18, 19, -10, 9, 9, + 0, 7, 6, 6, 22, 2, -2, -1, -8, -5, 10, 9, 16, 13, 2, -1, 4, 4, 1, 4, -1, 8, 8, 19, 17, 11, 2, -15, -1, -1, + 2, 7, 19, 23, 14, -1, -3, -7, -8, -9, -5, 3, 0, -3, -9, -6, -11, -2, 7, 7, 0, 6, 8, 10, 10, 9, 9, 11, 22, 13, + 5, -2, 2, 3, 7, -3, 3, 5, 3, 0, -1, -9, -12, -12, 2, 4, 8, 4, -2, 6, 2, -13, -8, -6, 9, 0, -17, 15, -2, -2, + -2, 0, 15, 8, 9, 0, 11, 13, 17, 22, 14, -6, -13, -6, -1, 5, 10, 4, -5, -2, -5, 10, 0, -3, 6, 0, 8, 2, 2, -7, + -22, -1, -2, 2, 3, -13, 22, 27, 11, -24, -4, 18, 28, 6, -12, 15, -8, 12, -7, -22, -14, -8, -20, -2, 2, 5, 14, -7, -25, -10, + 0, 20, 8, 2, 14, -17, 8, 11, 29, 7, 3, 7, 8, 18, 18, -8, 1, -35, 1, -24, -8, 3, -10, 8, 3, 11, -1, 11, -1, -12, + -11, -2, 3, 8, 12, 21, 8, 15, 22, 20, -5, 10, 10, -3, 2, -12, -23, -8, -13, -21, -13, -13, -22, -1, 4, -8, 5, 6, -15, -8, + 4, -22, 6, -3, -6, 1, 0, -2, 12, -16, -5, -20, -6, 11, 18, 7, -9, -7, -29, -6, -11, -9, -1, 6, 1, 1, -15, -8, 4, 12, + -5, 8, -13, 0, -15, -4, 5, -15, 12, -3, -13, 10, 19, -12, -2, 3, -18, -8, -1, 7, 10, -4, -38, 3, -5, 2, 2, -3, 7, 13, + 14, -2, 19, 13, 13, 8, 7, -6, 12, -8, -7, -4, 5, -24, 22, -1, 8, 5, 24, -5, 13, 5, 0, -3, -2, 11, 9, -5, -24, -6, + 3, 17, 3, 10, 3, -16, -11, 8, 3, 11, 19, 15, 5, 1, 7, 16, 20, 26, 7, 6, -1, -1, 1, 10, -1, -1, -1, 0, 3, -5, + 4, 5, 5, -1, -7, -5, -3, 0, 6, -9, -11, -21, -21, -14, -8, 1, 11, 23, 3, 7, 2, 10, 5, 3, 2, -5, -5, 4, 1, 5, + -8, -12, -11, -6, 1, 1, 4, 9, 5, -7, 0, 2, -5, -7, -11, -9, -9, -13, 3, 1, 20, 14, 7, 8, -5, -23, 3, -2, -1, 4, + -1, -7, 10, 21, 6, 8, -2, -15, 5, 14, 17, 19, 8, 16, -1, -5, 6, 13, 13, 13, -3, 8, 12, -14, 2, 4, 2, -4, -13, -20, + -13, 0, 9, -6, -9, 5, -9, 3, 0, 8, -37, 5, 6, 8, -22, -3, -17, 8, -28, -17, 2, -22, 0, -7, -23, -20, -3, -25, -16, -6, + -7, 7, 14, 0, -19, -5, -20, -6, -4, -16, -19, 14, -8, -1, 9, 34, 1, -7, -7, -1, -12, 4, -18, 9, -15, 3, 10, -1, -17, -3, + -14, -17, 3, 9, -16, -43, -25, -22, 17, -4, 18, 3, -6, 5, 24, -7, 9, -13, -4, 25, 2, 25, 28, 40, 4, 14, 14, 12, 6, 15, + -19, -4, -4, -8, 10, 20, -12, -22, 12, -18, 5, 3, 13, -8, -27, 4, 4, -9, -3, 9, -24, -28, -14, -14, -5, -3, -10, -10, 0, 8, + 1, 20, 3, 6, 15, 11, 19, -1, 22, 13, 17, 13, -5, 12, -4, -23, -26, -10, -35, -33, -14, -10, -29, 1, -4, -11, -21, 1, 4, -14, + -8, 13, -8, 1, 29, 19, -2, 14, -3, 10, -6, 25, 2, 33, 10, -8, 11, -8, -15, 7, 19, -5, -3, -16, -6, -16, -10, -14, -8, -32, + -29, -45, -25, -34, 12, -3, 6, 24, 9, 24, -5, 24, 14, -9, -22, 25, 12, 1, -3, -1, 3, -2, 5, 7, 7, 7, -6, -3, 3, -10, + -16, -3, -8, -1, 3, -5, -7, -1, -4, -9, 6, 2, 6, 3, 8, -1, -8, -12, 3, -4, 1, 11, 8, -2, -13, -12, -11, -7, -4, -9, + -16, -6, -4, 18, 17, 15, 18, 28, 15, 12, 14, 9, 10, 0, -1, -6, 2, 4, 14, -3, 16, 4, 17, 11, 21, 7, -9, 10, 9, 4, + -3, 18, 7, 0, 7, 28, -1, 19, 13, -9, -22, -23, -9, 5, 14, 5, 7, -11, -5, -1, 9, 8, -1, -4, 2, 5, 10, 16, 11, 4, + -13, -23, -13, -14, 3, 15, 11, 19, 14, 14, 13, 8, 0, 9, -12, -42, -10, 3, 8, -38, -8, 3, -10, -14, -12, 13, -2, 25, 29, 16, + 11, 11, 28, 16, 46, 11, 13, 3, 7, 15, 4, 7, -7, -14, -5, 7, 20, 5, 10, 10, 19, 7, 9, 11, 23, 30, -7, -47, 8, -7, + 6, 15, 16, 1, -3, 17, 11, 23, 29, 16, -9, -16, -3, 10, -4, 6, 3, 7, 5, 26, -39, -14, 0, -5, 13, 3, -4, -7, -4, -12, + -4, 1, -23, 2, 18, 12, 44, 33, 5, 10, 14, -4, 0, 19, 30, 40, 28, 29, -3, -6, 4, -10, -25, -13, -6, -13, -21, -19, -23, -33, + -27, -20, -1, 13, 10, -1, 18, 27, 24, 46, 46, 35, 21, 32, 3, 13, 40, 5, 8, 7, -16, -5, 6, -35, -25, 15, 13, 10, 27, 13, + -1, 3, 22, 22, 13, 7, 6, 3, -8, 16, -1, 11, 17, -14, -14, 0, 16, 6, -9, -32, -32, -29, -10, -27, -35, -24, -14, -32, -15, -14, + -41, -11, -14, 5, -11, -30, -59, -56, -65, -61, -87, -68, -48, -22, -3, -13, 3, -18, -16, -22, 1, 14, 1, 0, 9, 22, 15, 14, 6, 1, + 8, 8, 0, 16, 17, 19, 23, 24, 22, 27, 21, 13, -11, -4, 11, 11, 14, 20, 17, 8, -2, 8, 19, 18, 21, 14, 11, 21, 14, 15, + -12, -10, -23, -9, 9, -4, -8, 0, -7, -7, 5, 5, 18, 8, 17, 12, 12, 5, 7, 9, 1, 8, -4, -20, -20, 3, -25, -27, -21, -19, + -32, -40, -3, 6, -7, -12, -25, -26, -20, -30, -31, -52, -36, -60, -71, -70, -68, -48, -52, -47, -54, -24, 3, -16, -6, -12, -16, -32, -3, 3, + 4, 3, 4, 1, 2, -8, -16, 0, 2, -3, 12, 8, -5, 22, 15, 25, 35, 31, 33, 38, -45, -22, -57, 18, -16, 6, 12, -3, 29, -42, + -53, -33, -10, 3, 19, -7, -1, -10, -5, 12, 8, -6, -21, -11, 16, 2, 0, 11, -14, -20, -4, -8, 4, 20, -5, -6, -17, -5, -30, -6, + -8, 7, -21, 8, -16, -42, -27, -19, -35, -24, 4, -8, -11, 8, -7, -20, -29, -14, -17, -12, -7, -29, -13, -21, 8, -21, -4, 3, -7, -2, + 8, -12, -11, -6, -3, -12, 14, 10, 27, 31, 19, 16, 4, -18, -8, 5, 0, -3, 5, -4, -33, -4, -9, -19, 15, -10, -26, -44, -18, -11, + -12, -28, -26, 8, -2, -27, -37, -24, -1, -26, -29, 14, 18, -1, 18, 42, 24, 27, 27, 15, 37, 33, 41, 32, 19, -1, 13, 10, -5, 21, + 31, 35, 36, 14, 31, -10, 11, 21, 7, 38, 16, 32, 26, 19, 14, -3, -5, -14, 16, 11, 11, -5, -32, -39, -63, -124, -106, -71, -94, -57, + -16, -47, -21, -28, -32, -36, -9, -35, -29, -51, -87, -98, -99, -118, -93, -94, -95, -82, -89, -73, -89, -74, -68, -46, -28, -31, -36, -35, -24, -31, + -28, -27, -17, -23, -23, -21, -17, -4, -3, 7, 10, 11, 10, 9, 1, -4, -20, -28, -31, -31, -32, -33, -41, -39, -37, -33, -43, -37, -42, -19, + -3, -14, -9, 8, -2, -20, -17, 1, -1, 12, 7, 9, 2, -7, -32, -39, -37, -33, -39, -34, -37, -31, -33, -34, -52, -41, -36, -40, -32, -20, + -21, -12, -10, 8, 0, -34, -26, -15, -12, -2, 9, 16, 30, 26, 18, 14, 6, 29, 31, 18, 17, 14, -10, -27, -58, -95, -81, -35, -23, -1, + 49, 77, 74, 81, 71, 97, 96, 92, 78, 52, 47, 35, 29, 23, 6, 8, -13, -40, -45, -50, -56, -80, -73, -72, -74, -75, -25, -99, -10, 13, + -82, -28, -66, 127, -62, -62, 15, -42, -5, -26, -41, -10, 44, -76, -34, -10, -7, -41, -19, -9, -11, -18, -5, -16, -25, 9, -12, -22, 3, 15, + 26, -24, 3, -2, 10, -1, 1, -6, 7, 2, 1, 3, 9, -22, -20, -18, -6, -1, -17, -11, -2, -27, -5, -23, 19, 1, -11, -14, -36, 12, + 5, 11, 8, 5, 4, 0, -4, -2, -2, -8, -3, -5, -3, -10, -8, 0, -4, 0, 7, 5, 3, -1, -9, -8, -3, -3, -5, -7, -4, -4, + -1, 3, 5, -3, 4, -10, -1, 0, 4, 0, 10, 10, 8, 7, 15, 11, 8, 5, 5, 2, -1, 1, -9, -3, 0, -6, -4, 4, -2, -6, + 1, -6, -8, 4, 0, 1, 3, -4, -9, -4, -3, -3, -3, 2, 1, 3, -4, 7, -7, 0, 3, -4, 4, -3, -8, -9, -1, -5, -5, 2, + -3, -2, -4, -3, -2, 0, 8, 2, 4, 10, -3, 7, 5, 2, 6, -4, -8, -7, -1, -2, 4, 5, -2, 2, 5, 5, 6, -4, 2, -6, + 6, 8, 7, 9, 3, -1, 1, 1, 0, 1, 1, 2, 0, -1, 3, -1, 6, 3, 3, 5, 3, 1, 0, -1, 1, -3, -5, -3, -11, -9, + -8, -2, 1, 1, -4, -8, -2, -2, 3, 6, 3, 1, 2, 3, 5, 1, 3, 8, 7, 2, 2, -1, 2, 5, 1, -5, -2, -2, -3, -6, + -2, -3, 3, 3, 0, -2, 6, -4, -10, -5, -3, 2, 6, 1, -1, -1, 1, 2, 2, 1, 7, -1, 3, 2, 4, -1, -1, 0, 4, -1, + 2, -3, -2, -4, 2, 1, 3, -1, 4, -1, -2, -6, 1, -3, 4, 2, -5, -5, 0, 7, 0, -2, -3, 4, -2, -7, -4, 3, 2, 4, + 18, -13, -6, -6, 23, 1, -17, -3, 14, 8, -6, -8, 4, -3, 3, 14, 0, -4, 7, 2, -2, 2, 15, 0, -6, 2, 0, -4, 10, 2, + 1, 7, -3, 0, -9, 3, 1, -1, 5, 3, 8, 3, -12, -11, -9, 4, -4, -6, -3, -4, -8, -6, -2, -7, -4, -2, -3, -2, -3, 2, + 7, -5, 3, 1, -1, 3, 10, 4, 2, -1, -7, 1, 3, 3, 1, 1, -1, 0, 2, 6, 0, 2, -2, 0, 2, 3, -2, 2, 8, 10, + 6, -3, -7, -3, -3, -10, -8, -12, -3, -3, -6, -10, -5, -1, -2, 1, 0, 3, -4, -10, -4, 0, -5, -9, -12, -13, -11, -8, -4, -4, + 2, -4, -3, -7, -10, -14, -10, -3, -7, -15, -6, 1, -8, 2, -1, 0, 2, -5, 0, 4, 1, -2, -5, -6, -7, -2, 1, 0, 2, 7, + 0, 0, -2, 7, -4, -3, -11, -2, -8, -3, -3, -3, -3, -2, 3, 0, 2, 5, 7, -1, 1, -2, 6, 6, 8, 12, 6, 1, 8, 11, + 6, -1, -9, -4, -8, 2, 6, 4, 2, 1, 1, 4, -1, -2, -6, -4, 1, -1, 4, 1, 0, -2, -2, 5, 6, 5, 1, 0, -4, -8, + -4, -2, -6, 0, -1, -3, -2, 3, 5, 0, 2, 5, 2, -3, -2, 3, 1, 1, -1, 0, 2, 5, 2, 4, -3, -5, -1, -2, 2, 3, + 2, 1, -3, -1, 1, 1, 1, 2, -1, 1, 4, 3, -3, 0, -4, -3, -1, 1, 6, 1, -1, -3, -7, -1, -8, -1, 1, 3, -2, 3, + -3, -1, -1, 4, -6, 2, 4, 4, -3, -7, -1, 2, 1, 1, 4, 8, 7, -2, -10, 0, -2, 0, 3, 1, 4, -1, 4, 0, 3, 4, + 5, -1, 2, 1, 3, 14, -1, -2, -1, 25, 10, -5, -3, 10, 0, -9, 2, -1, -4, -3, 2, 0, 1, 0, 1, 1, 9, 3, -13, -3, + 0, 3, -1, 9, 10, 15, 5, 11, -1, -6, 2, 2, 0, 0, -1, -4, -3, -2, -10, 1, 2, -2, 2, 5, -1, 1, -4, 4, -2, 4, + 7, 2, -7, -5, 3, -4, -5, 2, 4, 7, -7, -5, -10, -8, -4, -12, -8, 2, -6, -3, -1, 7, 4, 0, 1, -6, -3, 1, 2, 14, + 14, 8, 12, 7, -2, 1, 4, -6, 4, 0, 5, 6, 2, 4, 1, -3, -9, -4, 2, 2, -4, 2, 2, 3, -5, -8, -11, -9, -5, -2, + 6, 4, 6, 0, 0, -3, 5, -4, -3, -5, -10, -11, -5, 2, 1, 4, -1, 6, 3, -7, -11, 0, -5, -4, 0, -12, -3, -8, -4, 6, + 4, -1, 6, 2, 5, 1, 0, -6, 6, -10, -1, -4, 3, 11, 9, 3, -2, 5, 6, 6, 6, 5, 6, 2, -1, -2, -4, 1, 2, -7, + -1, -2, -10, -11, -11, -1, 1, 1, -4, -1, 8, 7, 4, 7, 0, 2, -2, 2, -2, -2, -3, -5, 2, -1, -1, 1, -2, -1, 1, 5, + 4, 5, -2, -1, -1, 4, 1, 2, 1, -1, 2, 4, 4, 1, 2, -1, 1, 6, 5, 3, 0, 5, 8, 6, 1, 0, -5, -1, -3, -4, + -3, 1, -1, -4, -4, -2, 0, -3, -3, -8, -7, 0, 4, -1, -1, 8, 1, 4, -1, 1, -6, -6, -3, 7, 3, -1, -2, -3, -4, -6, + -3, -7, -2, -1, 4, 5, 6, 1, 1, -3, 4, 7, 1, -1, -2, 1, -1, 5, 1, 1, 1, -5, -4, 3, 2, 0, -1, 0, 0, 2, + -3, 3, -2, 0, 1, 8, 6, 6, 4, 6, 11, -1, -4, -6, 10, 1, -16, -14, 7, -10, -7, -1, 5, 1, 2, 5, -8, -9, -4, -7, + -6, 6, 6, 4, -11, 6, -8, 2, 3, 1, 5, 2, -5, -5, -2, 0, -2, 3, -5, 6, 7, 5, -1, 2, 1, 2, -3, 1, 3, 4, + 6, -2, 0, -9, 8, -3, -1, -1, 1, 5, 0, 0, 1, 2, 21, -10, -1, 6, 8, 5, -6, 4, -3, 5, 10, -1, -3, -1, -8, -1, + -3, 0, 3, 1, 2, -3, -4, -4, 3, -2, 4, 4, 5, 10, 0, 9, -1, 5, 8, 10, 3, -1, 4, 4, 7, 7, 2, 5, 1, 10, + -4, -4, -8, 2, 1, 7, 6, -4, -9, 5, -7, -3, -1, -5, -11, -3, -3, 1, 7, 7, -2, 4, -2, 1, 2, 2, -8, -16, 0, -2, + 3, 6, -5, 0, 8, 6, 5, 4, 2, 5, 1, 4, 1, 0, 1, -2, -4, -9, -3, -2, -11, -8, -2, -6, -4, -7, -3, -6, -3, -4, + 0, -4, 5, 7, -1, -1, -7, -6, -7, 0, 1, 10, -5, 2, -3, 0, 2, 0, 7, 1, 4, -3, -2, -1, 2, 3, -2, -5, -2, -2, + -3, -8, -13, -4, 0, 6, 1, -1, -2, 0, 2, 1, 4, 2, 0, 0, 5, 9, 6, 2, -2, -2, -3, 3, 4, 6, 12, 13, 4, 1, + 5, 4, 3, 6, 6, 9, 5, 4, -3, 1, 3, 1, 1, -1, -4, -3, 3, 0, -3, -2, 3, -2, -8, -9, -3, 4, 5, 1, 3, -3, + 7, 7, 4, 5, 6, 5, 1, -2, -1, -4, -7, -3, -5, 0, -1, 5, 3, 2, -6, -3, 2, 5, 8, 1, 2, 1, 7, 2, 6, 1, + 0, -6, -1, -3, 3, 1, -8, -1, 5, 1, 4, 2, 2, 6, 1, 10, -15, -11, 3, 24, -15, -20, -11, 16, 1, -5, -1, -1, 8, -1, + -6, -16, -10, -8, 0, -12, -1, 10, -2, -5, -3, -12, 2, 6, 1, 5, 10, 19, -5, -4, -3, -10, 2, 2, 2, 12, 6, 2, 2, 10, + 0, 5, 6, 2, -1, 4, 3, 2, 1, -3, -2, 2, 0, -1, -3, 0, -2, -3, -3, 27, 1, 4, -1, -5, -16, -8, 7, -5, 7, 16, + 6, -2, -4, -4, -4, 1, 3, 0, 0, 3, 6, 4, 1, -3, -9, 2, -3, -13, -7, -3, 0, 2, 7, 0, -6, -4, 1, -5, -2, -8, + -5, -3, 1, -4, 4, 1, 4, 0, 0, -3, 3, 17, 0, -8, 4, 0, -2, 0, 3, -9, -1, 9, 4, 7, 3, 7, 5, -3, -3, -10, + -16, -7, -9, -1, 10, 15, 7, 14, 3, 1, 3, 9, 5, 14, -1, -2, 3, 9, 8, 13, 7, 17, -4, 8, 3, -10, 0, 10, -1, -2, + 2, 1, -7, -4, -1, 0, 12, 1, 4, -7, -8, -11, -4, 8, 0, 0, 2, -1, 0, -2, 5, 2, 8, 3, 2, 0, 2, 4, 2, 8, + 6, 4, 0, 2, -2, -2, -1, -3, -2, 0, 2, 0, 5, 0, 1, -4, -2, -1, -1, -6, -3, 0, 6, 4, 0, -6, -1, -1, -9, -6, + -3, 2, 2, -2, -1, -2, 2, 8, 1, 8, 15, 12, 5, 8, 2, 1, -4, 4, 1, 0, -1, -3, -7, -8, -2, -7, -6, -7, -4, -5, + -3, -10, -4, -6, -2, 3, 5, -5, 7, 6, 11, 3, 0, 7, 3, 0, 1, 4, 4, -2, 5, 3, -2, -6, -4, -9, -8, -4, -4, -4, + 0, 0, -3, -6, -11, -12, -8, -9, -13, -14, -20, -13, -3, 3, 5, 5, 4, 1, 4, -1, 41, -29, -10, 22, 10, -34, -13, 12, 12, -4, + -10, -10, 9, 31, 11, -5, 7, 5, -6, -5, 8, 9, 5, 5, -3, 9, -13, -7, -2, 0, 4, 1, -1, -13, -5, -11, -6, -5, -6, 1, + 14, 1, 2, 0, -12, -6, -3, -3, -3, -1, 8, -1, 3, -4, 8, 1, 2, -5, -2, 5, -5, 4, 5, 1, 8, -24, -17, -4, -5, -3, + 10, 16, 11, 8, 9, 2, 8, 8, 9, 13, 18, 20, 17, 15, 15, 7, 5, 1, -1, -4, -15, -18, -22, -22, -16, -7, 1, 2, 1, -4, + -11, -22, -29, -19, -17, -16, -21, -21, -22, -28, -27, -17, -7, -10, -12, 0, 10, 4, 1, 1, -3, -5, 3, 7, 2, -2, 2, 6, 6, 15, + 6, -1, -1, -4, 0, -5, -7, -12, -14, -10, -3, -2, 4, 3, 2, 5, 1, 6, 12, 13, 9, 15, 14, 19, 27, 25, 23, 15, 20, 16, + 4, 2, 4, 4, -7, -4, -6, 4, -10, -5, -4, -4, 0, -9, -16, 5, 7, -8, -6, 1, -8, 2, -9, -15, -13, -13, -10, -13, -13, -9, + -4, -3, -1, -7, -3, -8, -4, -1, 0, 4, 8, 7, -1, 2, -3, -4, -6, -3, -7, -12, -15, -10, -13, -17, -16, -10, -2, 1, 1, -7, + -11, -16, -13, -16, -11, -10, -14, -17, -17, -16, -10, -4, 3, 2, 3, 9, 5, 4, -4, -7, -11, -7, -4, -2, -1, -7, 9, 8, 6, 10, + 10, 1, 6, 9, 7, 3, -6, -2, -2, 4, -1, 5, -2, 2, -7, 4, 1, 2, 2, 2, 3, 7, 9, 4, 5, 11, 13, 10, 10, 18, + 12, 8, 7, 6, 10, 7, 16, 14, 21, 21, 16, 15, 16, 17, 16, 13, 14, 13, 8, 5, -2, -10, -10, -8, 9, 70, -127, -39, 68, 8, + -78, -28, -5, -23, -6, -17, -50, 12, 55, -21, -29, 12, 4, -10, -4, 1, 26, 9, -15, 1, 21, -1, -7, 5, 7, 8, 5, -8, 3, 2, + -11, -8, -5, 4, -3, 6, 2, 0, -4, 0, 1, 10, 10, 9, 12, 12, 6, 8, 8, 13, 3, -2, 12, 13, 10, 9, 12, 10, 17, -25, + -1, -5, -8, -3, -4, 3, -3, 2, -1, -1, -3, -1, -2, -2, -6, -2, 2, 1, 0, 6, 1, 4, 1, -8, 1, 1, 0, 4, -1, 2, + 2, 0, -2, -4, -8, 0, -7, -2, -7, -7, -6, -9, -6, -6, -7, -7, -5, 2, -1, -2, -3, -1, -3, -3, 1, -3, -2, -1, -2, -5, + 3, 6, 2, 3, 7, 6, 9, 13, 5, 0, 6, 13, 7, 6, 1, 9, 0, 5, 1, 2, 5, 5, 9, 4, -4, 4, -2, -2, -1, -1, + -1, 1, 5, 2, 1, -6, 3, -10, -7, -2, -5, -7, 2, 7, 6, 7, 5, 7, 0, 3, 0, 3, 9, 1, 3, 3, -1, 4, -6, -3, + -2, 1, -3, 1, -3, -3, 1, 0, 1, 2, -7, -3, -8, -1, -3, 3, 3, -3, 1, -4, 2, 3, 5, -1, 0, -2, -1, -4, -3, 0, + 3, 0, 1, 1, -3, 0, -2, 3, 6, 2, -3, -1, -5, 4, 6, -3, 0, 7, 2, 5, 1, -4, -3, 2, 2, 6, 5, 1, -2, 0, + 0, 1, 0, -2, 3, -2, -5, -5, -6, -9, -1, -6, -2, -9, -2, 2, 2, 9, 2, 3, 5, 5, 2, -1, -2, 1, 2, -1, 1, 1, + 0, -2, -5, -10, -1, 5, 9, 7, -3, 0, -5, 1, 6, 2, -4, -9, -7, -1, 2, 2, -3, 7, 3, -4, 1, 2, 4, 4, -3, 6, + 9, -9, 10, -5, -8, 4, -9, -10, -9, -3, 1, -2, 4, 6, 0, 8, 1, -1, 0, -12, -7, -5, 4, 1, 4, -1, 7, 9, 6, 0, + 9, 0, -5, -1, 5, -3, -3, -3, -3, -3, 3, 0, 8, 7, -2, 4, 1, -1, 4, 8, -7, -6, 3, -8, -5, -1, 3, -7, -2, 4, + -5, -2, 2, -3, 13, -3, -7, -4, 0, 3, -5, 2, 5, 4, 1, 3, 4, -3, -1, -3, -3, 4, 8, 0, 1, -2, -2, 0, -8, -4, + 2, 4, 8, 7, 7, 1, 7, -1, 0, 3, 4, 7, -3, -1, -2, -3, 1, 7, 5, 7, 5, 1, 1, 4, 1, -7, -8, -12, -2, -4, + -3, -2, -3, -2, 1, 1, 1, 4, 1, 4, -1, -2, -1, -7, -6, -4, -2, 8, 5, 1, -4, 3, 3, 3, 7, 0, 8, 1, -1, -2, + 1, -6, -3, 5, 7, 12, 10, 6, 9, 5, -5, -1, -3, -4, -2, 4, -6, 0, -4, -11, -5, 2, 2, 0, 7, 7, 14, -4, -2, 5, + -1, -3, 2, 1, -14, -6, -6, -3, -8, -4, -5, 5, 3, 0, 3, -1, 2, -4, -2, 6, 3, 1, -2, 2, 0, -1, -3, 0, -4, -3, + 0, -3, -1, 3, 3, -1, 1, 3, 1, -4, 1, 3, 3, 2, -2, -6, -4, 0, -2, -3, -4, 1, 1, 2, 5, 3, 0, 1, -5, -2, + 3, 5, 3, 6, 10, 6, 3, 3, -5, 2, 0, 3, -6, -6, -2, -7, -4, 2, -1, 1, -3, -2, -2, 5, 1, 9, 12, 9, 4, 6, + 1, -5, -5, -5, -10, -5, -6, -9, -7, 1, -1, 5, 8, 1, 9, 4, 1, 2, 4, -9, -5, 7, 1, 10, 3, 1, 0, 0, 1, 6, + 1, 7, 4, 8, -2, 1, -19, 9, 1, -4, 0, -7, -16, -6, -6, 3, 6, 9, 4, 6, 8, 7, 1, -3, -1, -4, 8, 11, 0, 5, + 8, 0, 10, 11, -4, -6, 10, -2, -13, 1, -11, -1, -9, -11, 6, 3, 0, 16, 0, 6, 0, 4, 2, 9, 3, -2, 9, -2, -2, -1, + 0, -2, 0, 0, -1, -1, 4, 10, 3, 10, -13, 1, 0, -1, 0, 7, 0, 12, 9, 3, -3, -6, -11, -4, 6, 0, 5, 1, 0, 1, + 0, -1, 5, -7, -2, 9, 7, 8, 8, 12, 3, -2, -3, -7, 5, 6, 5, -2, -2, 1, 10, 0, 0, 0, 5, 3, 10, 8, 5, 0, + 0, -2, -5, -1, 3, -4, -8, -5, -9, 0, 1, 2, -1, -2, -2, 3, 0, 4, -6, -12, 10, 4, -2, 7, 1, -1, -5, -6, -15, -4, + -7, -3, -1, -4, -15, -1, -1, -4, -5, -2, 5, 3, 1, 0, 8, -2, 4, 0, 5, 4, 14, 15, 9, -2, -4, -5, -3, 0, 11, -2, + 11, 3, -1, -1, -4, -8, 2, 11, 0, -6, -5, -7, -3, -2, 1, -5, -2, 0, 0, 8, 7, 1, 2, 1, 4, 5, 6, 6, -1, -5, + -3, -4, -5, -3, 1, 4, 2, 3, 3, 2, -4, -7, -4, -3, 2, 5, 3, 2, 1, 5, 5, 5, 0, 3, 3, -2, -4, -3, 1, -2, + -6, 1, 0, -7, -6, -6, -8, -4, -5, 2, 13, 2, -3, -5, -10, 3, -1, 0, 2, 3, 2, 2, -9, 1, 0, 4, 2, 3, 1, 1, + 10, 8, 0, 0, -2, -6, -6, -7, 0, -6, -11, -11, -12, -5, 3, -1, -4, 1, -2, 3, 7, 2, -2, 4, 1, 0, -2, -2, -2, 0, + 0, 4, -1, 2, 3, 0, 1, 6, 4, -3, 11, -6, 4, 15, -8, -10, -3, -23, -1, -10, 3, 11, -1, -2, 1, -5, 15, 4, 8, 10, + -2, -3, 3, 10, 12, 5, 1, -1, -3, -9, -10, -3, 1, 1, -14, -25, -6, -9, 0, -1, 0, -4, -1, 4, 6, -2, -6, 4, 2, 11, + -3, -1, 1, 7, 3, -4, 0, -1, 2, -8, -6, -6, 3, 3, 4, -11, -3, 0, -8, -10, 0, 5, 13, 5, 1, -1, -10, -14, 5, 14, + 3, -5, -8, -5, -1, 5, 5, 6, -7, 2, 16, 3, 1, 1, 9, 14, 11, -5, 3, 14, 9, 6, -7, 0, -9, -7, -2, 2, 0, 5, + 6, 7, 16, 14, -4, -3, -8, -2, -6, -7, 2, -4, -7, 0, 13, 11, 14, 12, -3, 1, -4, -1, -2, -8, -5, 6, -1, -2, -3, 2, + -6, -11, -7, -7, 5, -8, -4, -7, -2, -5, 0, 8, -4, 0, 1, 17, 7, 6, 8, 4, -1, -3, 7, -19, 10, 4, -3, 7, 0, 1, + 13, 7, 7, 1, 2, 4, -3, -8, 4, 3, -2, 13, 18, 5, -7, -4, -6, -2, -2, -1, 0, 3, 0, -1, -4, -2, -2, 0, 3, 1, + 1, 0, 3, 0, 0, 1, -3, 0, 1, -1, 3, -1, -4, -1, -2, -3, -6, -1, 0, 0, 3, -1, 1, -1, -4, -3, 3, -2, -2, -2, + -1, 3, 6, 7, 4, 0, 1, -1, -9, -4, 1, 1, 4, 0, -1, 4, 1, 1, -7, -15, 2, -2, 3, 1, -5, -2, 1, 9, 12, 7, + 5, 2, 0, -8, -4, -3, 3, -3, 0, 0, 3, 8, 1, -5, -4, 3, 1, -2, -3, -2, -3, -3, -4, -5, 5, -4, 0, -4, 5, 3, + -2, -2, 3, -2, 8, 12, 17, 5, 7, 7, -2, 0, -4, -18, -21, 26, 7, 5, 4, 16, 4, -6, -21, -11, -10, -10, 8, 2, 8, 0, + -7, 9, 5, 0, 12, -11, -3, 4, 8, 3, 1, -6, -6, -5, 1, 4, -3, 2, -5, -4, -11, -5, -12, -6, -2, 2, -6, 1, 2, 0, + -7, 1, 7, 4, 0, 6, -3, -2, 2, -7, -8, 2, 7, -10, -4, 7, 2, 8, 7, -1, 5, 9, 0, -10, -10, 2, 4, 14, 17, 16, + 15, 13, 3, 8, 14, 10, 9, 1, -4, -1, 2, 13, 14, -1, 15, 21, 11, 12, -1, -1, 1, 4, -11, -5, -1, -4, -7, -7, -4, -7, + -11, -7, -4, -5, -11, -11, -7, -2, -7, -14, -16, -20, -16, -5, -12, -12, -3, -14, -8, 10, 8, 17, 6, -1, 9, 9, 11, 13, -2, -3, + 12, 2, 4, -9, -10, -22, -19, -21, -18, -1, -15, -5, -8, -10, -9, -9, -15, -12, -7, -4, -4, -6, 0, 0, 6, 13, 3, 1, -8, 0, + -2, -13, -9, -3, -4, 0, 10, 14, -1, 11, 13, -2, -4, 4, 3, 3, -12, -4, -32, -44, 8, 1, 1, -8, -2, -5, -3, -6, -4, -5, + -3, -8, -13, -4, -1, 2, 3, -4, -3, 0, 0, 1, -5, -10, -9, -11, -7, -5, -9, -7, -7, -1, -4, -9, -3, -8, -2, -3, -5, -5, + -4, -3, 1, -12, -11, -11, -7, -3, -1, -6, -7, -4, 0, 2, 0, 0, -1, -4, -1, 2, 7, 5, 1, -3, -6, -1, -7, -5, -4, -6, + -4, -6, 0, 4, 4, 11, 10, 4, 6, 4, 2, -1, 4, -2, 0, -4, 4, 2, 4, 5, 4, 9, 9, 7, 10, 12, 0, -5, -5, -1, + 4, 0, 4, 4, 7, 8, 6, 12, 16, 14, 5, 1, 0, -1, 4, 0, -4, -8, -32, -55, 74, 25, 16, 23, 20, 2, -20, -39, -6, -27, + 14, 8, 12, -5, 5, -3, 3, 8, 13, 1, -18, -3, 0, -4, 14, 10, -2, 3, -2, -2, -2, -1, 3, -12, -2, -11, -1, 1, -7, 5, + 0, -1, 8, 9, 8, -3, 0, 1, 7, -1, 5, -6, 0, 0, -1, -7, -7, 5, -11, -2, -2, -3, -3, 4, -26, 21, 6, 8, -1, 6, + 12, 9, 6, 3, 6, 7, 7, 5, 20, 6, -6, 3, 13, 3, -2, 5, 5, 2, 13, 20, 21, 21, 8, 7, 9, 8, 13, 5, 13, 15, + 9, 3, 1, 1, 2, 3, 2, 6, 8, 5, -2, -17, -13, -20, -23, -19, -24, -21, -29, -21, -13, -6, -4, 14, 20, 8, 18, 24, 11, 6, + 10, 7, 5, 6, 16, 9, 11, 16, 3, -2, -14, -17, -23, -23, -10, -13, -7, -9, -12, -19, -14, -11, -9, -10, 7, 9, 4, 10, 14, 15, + 16, 9, 5, -5, -4, -11, -11, -3, 3, 7, 0, 11, 12, 8, 16, 19, 1, -3, 5, 5, 17, -6, -10, -45, -67, 26, 22, 10, 3, 1, + 3, 6, 1, 0, 1, -5, -5, -10, -6, -6, 0, -1, -2, 2, -1, -1, -1, 2, 0, 1, 1, 4, 3, 0, 2, 5, 4, -1, -2, -2, + -1, 0, -9, -2, -5, 3, 3, 1, -4, -3, -3, -6, 0, 7, 2, 4, 3, -2, -3, -3, 2, -1, -1, 6, 4, 9, 3, -1, -7, -6, + 1, 2, -1, -4, -5, -2, -4, -11, -7, -6, -8, 0, 2, 8, 10, 13, 10, 10, 2, -1, -2, -4, 4, 3, 7, 16, 16, 20, 33, 32, + 27, 26, 26, 24, 21, 10, 7, 8, 7, 7, 7, 11, 11, 12, 15, 8, -5, -11, -20, -30, -40, -41, -55, -91, -127, 98, 48, 84, -4, -18, + -4, 10, -59, -8, -19, 19, 13, 1, 7, 4, -16, 10, 15, 2, 13, -11, 4, 22, 8, 10, 7, 13, 0, -6, -6, 8, 12, 0, -5, -1, + 2, 6, -11, -1, 1, 4, 5, 0, 12, 6, 0, 3, -2, 2, -1, -1, -4, -7, 1, -9, -12, -2, 1, -2, -4, 0, 2, 6, 5, -25, + 1, 4, 9, 4, 1, 3, 2, 3, 0, -1, -1, 3, 1, 3, 3, 1, 0, 2, -2, -3, 2, 4, 3, 8, 3, -4, 1, -2, 2, -4, + -7, -3, 0, 0, -6, -3, -3, 4, 5, 7, 2, 3, -7, 3, 0, -2, 5, 9, -1, -13, 0, 0, 8, 7, 9, 7, 0, 0, 1, 1, + 10, 7, 8, 1, -3, 6, 2, -8, -3, 0, -5, 3, -7, -6, -1, 4, 4, -2, 3, 4, 7, -1, 9, 1, -1, -4, 0, 1, -5, 1, + 2, 4, 7, 2, 1, 5, 7, 2, 5, 4, 5, -11, -1, -5, -1, -4, -2, 3, 6, -4, 0, -6, 0, -4, -7, -11, -7, -6, -10, 0, + 2, -3, -3, -2, -2, 2, -4, 2, -4, 0, -2, 0, 1, 1, 1, 0, 2, -1, -6, 1, 1, 4, 2, 2, 3, 5, -1, 5, -2, -5, + -2, -1, 0, -2, -6, -7, -5, -8, -3, 2, -6, -8, -3, -2, -2, 5, 4, 1, 0, -3, -5, -2, 3, 4, 3, 3, -1, 2, 1, -4, + 0, 0, -3, -3, 1, -9, -3, -4, 5, 6, 2, 4, -1, 0, 6, -2, -3, -7, -4, 2, 2, 3, -5, 3, -1, 1, 4, 5, 3, 8, + 1, -2, 3, 7, -3, 2, -1, -6, -5, -2, -1, -3, 2, 2, 5, 8, -8, 3, -1, -1, -2, 3, 1, 2, 6, 11, -1, 5, 1, -6, + -8, 10, -5, -4, -10, 0, -8, 0, 10, 5, -5, 5, -7, 3, 1, 1, 11, 5, 3, 3, -9, -3, 4, 10, 0, -8, 6, -1, -12, -7, + -16, -3, -8, -3, -8, -3, 1, 3, -6, 1, 8, 4, 0, 2, 6, 7, 5, 0, 10, -4, -5, -5, -4, -9, 2, 7, 13, 6, 1, 0, + 3, 8, 4, -2, -7, 3, 2, 2, -4, -4, -7, -3, -1, 3, 4, 0, 0, 1, 0, 1, -4, -1, -4, -1, 1, 4, -5, -2, 0, 8, + 7, -1, 0, -4, 2, -2, 0, -3, 8, 11, 3, -4, 0, 0, 5, 3, 6, 7, 4, 0, 1, -3, -2, 1, 0, 1, -5, 1, 0, 1, + 0, -1, -3, 6, 4, -1, 4, -3, -9, 1, -3, -7, -2, 0, 2, -3, 1, 3, 4, 8, -2, 6, 8, 3, 2, -2, 6, 1, 0, 13, + 1, 5, 5, -3, -9, -4, -9, 4, -2, -1, -2, -5, 7, 9, 15, -7, -6, 3, -6, -4, -1, -3, 1, -18, 2, -15, -6, 1, 9, 4, + 3, 2, 4, 6, 0, 3, -2, -2, -3, -1, -2, -4, 0, -1, -2, -3, 1, 0, -7, -3, -6, -7, -4, -2, -5, -4, -1, 0, 0, 0, + -1, -4, -5, 4, 1, 1, -5, -1, 5, 7, 3, 0, -1, 2, -2, -3, -3, 0, 0, -1, 4, 6, -2, -3, -2, -5, -7, -7, 3, -1, + 2, 0, 5, 3, 5, -5, 2, -3, -1, 0, -3, -5, 1, 2, 7, 5, 5, 6, -1, 4, 1, 6, -3, -1, 7, 0, -3, 3, 7, -6, + -3, -2, -1, 3, -4, -7, -3, -8, -6, -4, -4, 1, -3, 3, -3, -2, -2, -3, 8, -1, 1, 6, 6, 3, 10, 2, 1, 0, 4, 1, + 3, 1, -3, -3, -4, -8, 10, 5, 1, -10, -1, -1, 1, 5, 2, -1, 3, -9, -5, -13, 0, -2, -1, 12, 3, 0, 0, 2, 3, -1, + 0, 3, 6, 5, -8, -2, -5, -9, 3, 8, 1, 0, 0, -8, 0, 5, 3, -9, -4, -6, 4, 4, -3, -10, 1, -9, -3, 6, 4, 1, + 0, 6, -1, 3, 3, 6, -6, -3, -15, -4, 4, 10, 6, 4, 6, -4, -2, -8, -4, -4, 3, -3, 3, 1, -3, -1, 0, -7, -2, -3, + 3, -1, -1, 5, 1, 0, -3, 1, 5, -6, -5, -6, -2, -1, 0, -3, 5, 0, 2, 2, 3, 1, 3, -1, 0, -2, 0, 8, 7, -3, + -2, 1, -3, -1, 1, 7, -6, -3, 3, 12, 9, 9, 4, 2, 6, 10, 5, 0, -3, -5, -8, -7, -1, 2, -6, -1, 3, 7, 11, 3, + 4, 1, -1, -3, 1, -9, -11, -11, -11, -9, 3, -8, -5, 1, 1, 1, -4, 3, 2, 10, -2, 0, 7, -1, -2, 5, -9, -5, 3, 4, + -13, -7, -4, 1, 6, 4, -4, -1, 1, 0, -5, -3, -7, -6, -7, -6, -7, -2, -5, -1, 7, 9, 9, 6, 3, -2, 2, -2, -3, 1, + 0, -1, 2, 0, 1, -1, 3, 1, 2, 2, 4, 3, -7, -1, 2, -2, -4, -7, -4, 0, 0, 1, 3, 6, 3, -2, 3, 8, -2, 0, + 1, -6, -7, -4, 0, 3, -5, -5, -1, -1, -6, 4, -2, -4, 2, -2, 3, -4, -1, 6, 6, 3, 2, -2, -1, 2, 1, -6, -3, -5, + -2, 1, -2, 2, 4, 8, 10, -2, -1, -2, 4, 4, 2, 1, 6, 1, 3, -2, 3, 11, 2, -4, 9, 8, -4, 2, -2, 2, 2, 1, + -3, -6, -3, -1, -2, 0, -5, 4, -4, 2, -3, 9, -2, 4, -5, 5, -2, -6, 1, -4, -9, 10, -3, 2, -6, -1, -3, 5, 7, 14, + 10, -1, 2, 0, 2, -9, 2, 10, 7, 1, -6, -6, -8, 0, 5, -4, -4, -1, 0, -8, -3, 6, -9, -8, 6, 9, -4, 1, 4, -9, + -1, 5, 3, 5, 3, -1, -2, 9, 3, 0, -4, 2, -5, -11, 0, 3, -2, -1, 2, 13, 4, -4, -2, -3, 9, 9, 3, 2, 3, -1, + 5, 1, 7, 4, 3, 6, 5, 0, 4, 5, -2, 5, 4, -4, -1, -7, 6, 3, 5, -6, -5, -6, -2, 8, 7, -3, 4, 5, 8, 8, + 1, 3, 2, -6, 10, 1, 2, -2, -1, 3, 0, 1, -8, -7, -8, -6, -10, -4, -8, -11, -15, -7, -1, -8, 2, -2, -7, -1, -3, 0, + -1, 0, 6, 2, 5, -8, 0, -3, 3, 4, 4, 0, 5, 1, 13, 0, 2, 4, 4, 4, 6, 1, -4, 2, 8, 0, 0, -5, 1, -10, + -11, -2, -5, -4, 1, 0, 7, 1, -1, 7, 8, -5, 7, -4, -5, 0, 2, 4, 2, 3, -1, -1, -1, 2, -3, 2, -3, -3, -1, -5, + -4, 2, 2, 2, -5, -4, -1, 3, 1, -7, -4, 2, 4, 3, -1, 3, 3, -5, -3, -4, -3, -3, -6, 0, 1, 0, 1, 9, 8, 9, + 2, 6, 6, -2, -4, -9, -2, -1, 1, -2, 5, 2, 3, 3, -2, 0, -5, -4, 2, 2, 0, 4, -2, 1, 6, 8, -1, -3, 2, -8, + 8, 8, 8, 0, 5, 1, 0, 7, 6, 11, 9, 0, -9, -5, 2, 3, 1, 0, 1, -2, -1, 1, 4, -4, 2, 1, -1, 10, -4, -6, + -1, 8, 0, -1, -2, 0, -8, -8, 0, -8, 1, -1, 2, -2, -8, -9, 24, -11, 15, -18, -1, 0, -19, -4, 13, -5, 8, 3, 3, -9, + -2, 3, 0, 1, 11, 5, 9, 4, 2, -10, 1, -5, 0, -1, -5, 3, 2, 8, 5, -1, -5, -7, 5, -2, -6, 5, 5, 6, 4, 0, + 2, 3, -6, 0, -7, -2, 8, -8, -7, 3, 3, -4, -1, 16, 14, 9, 2, -7, -7, 19, 0, 4, -3, 0, 4, 0, -1, -11, 4, 0, + -5, -4, -6, -6, -5, -9, -8, -3, 0, -8, -11, -8, -5, 2, 0, -2, -5, -11, -7, -8, -3, 2, 4, 2, -2, -1, -4, 10, 5, 13, + 20, 18, 8, 15, 7, 6, 7, 9, 5, 11, 8, 5, 3, 3, 7, 8, 4, 2, 4, 4, -1, -16, -14, 6, 2, -8, -5, -8, -1, -4, + -7, -1, -5, -2, -4, -5, 1, 10, -1, -14, -11, -13, -7, -4, 0, 1, -2, -6, 5, 2, -8, -2, -12, -5, 5, 6, -5, -4, 11, 9, + -3, -5, 1, -5, -1, 11, -4, -5, -2, 6, -6, -9, -13, -5, 0, -1, 0, 6, -4, -4, -10, -1, -4, 0, 0, 5, 7, 4, 5, -2, + 4, -3, -1, 3, 1, -2, 3, 6, 3, -3, -5, 2, 4, 3, 2, 1, 0, 3, 2, 3, 2, -2, 2, 3, 1, -1, 2, -4, -2, 0, + -4, -3, -3, 7, 8, 2, 1, 4, 13, 7, 4, 3, 0, 1, 0, 5, 1, -6, -1, 0, 5, 0, 5, 4, 0, 4, -2, 0, -2, -6, + -4, 1, 6, 4, 3, 7, 7, 4, 2, 2, 4, 9, 6, 7, 1, 1, -6, -8, 0, 4, 1, -1, 4, 4, -1, 0, 1, -2, -5, -9, + -8, -2, -1, -6, 8, 13, 9, 6, 1, 8, 3, 1, -1, -4, 5, 2, -3, 2, 9, 4, -47, 40, -45, 25, -2, -2, 45, -37, 8, 23, + -3, 12, 0, 0, 3, 1, 0, 2, 2, 13, 6, -5, 4, 6, -1, 2, 2, -7, 3, 5, 4, -5, 2, 8, -2, -9, -8, 2, -4, -13, + 11, 7, 4, 3, 0, -3, 1, 1, -6, 4, 7, 10, -2, 0, -3, -3, -11, 7, 11, 4, 1, -6, 1, -4, 46, -5, -4, -7, -6, 3, + 11, 2, 2, -8, -11, -14, -16, -12, -13, -8, -8, -9, -15, -12, -17, -10, -8, 8, 12, 8, -4, 2, 0, -2, -1, -3, 8, 3, 0, 3, + 3, 0, 16, 21, 21, 20, 19, 14, 9, 4, -9, -1, 1, 1, 8, 15, 15, 10, 2, -1, 6, 11, 8, 2, -7, 1, -2, -3, -3, 1, + 0, -7, -7, -5, -2, -20, -13, -2, -5, -1, 1, 21, 30, 18, 15, 16, 16, 15, 7, 5, 8, 5, -10, -17, -13, -32, -34, -31, -31, -8, + 0, -1, 3, -1, -12, -3, 0, 3, 5, 0, 13, 12, 9, -5, 5, 4, 0, 9, -4, -6, -11, 33, 11, -15, -4, -13, -11, -5, -1, -1, + -4, 1, 0, -2, -11, -7, -12, -8, -2, 4, 3, 1, 3, 1, 5, 4, 7, 3, 9, 9, 10, 7, 13, 9, 12, 8, 14, 15, 13, 9, + 9, 7, 14, 10, 14, 12, 6, 5, -5, -10, -8, -5, -6, -8, -10, -10, -13, -16, -17, -15, -12, -16, -27, -24, -20, -9, -5, -2, 6, 8, + 9, 7, 0, 1, -7, -17, -12, -10, -1, 7, 11, 25, 38, 45, 52, 51, 61, 63, 56, 42, 29, 1, -29, -62, -89, -106, -105, -85, -51, -23, + 7, 34, 35, 35, 27, 31, 30, 14, 9, 8, 13, 15, 21, 19, 23, 27, 25, 10, -6, -27, -48, -96, -111, -98, -63, -98, 72, -108, 75, 9, + -93, 127, -102, 16, 26, 12, -25, 11, -8, -38, 16, 8, -32, -19, 8, -2, 3, 1, -1, 2, 19, -1, -17, -7, -3, 4, -3, 1, 4, 9, + -11, -5, 4, -18, 1, 13, -1, -16, -5, 1, -5, 0, -10, -4, -9, -13, -10, 2, -3, -11, -17, -4, -7, 2, 5, 3, -4, -8, -7, 69, + 3, -3, 4, 3, -1, 1, 4, 2, -2, 0, 6, 3, 4, -1, 0, 4, 1, 0, 0, 0, -5, 1, -3, 4, 5, 0, -10, -3, -2, -2, + -4, 0, 2, 6, 3, 0, 0, -1, 0, 0, -3, 5, 4, 8, 4, 3, -4, -1, -2, 2, -1, 3, 0, 3, 4, 0, 3, -1, 3, 3, + 4, 0, 4, 3, 5, 7, 6, 0, 0, 3, 3, -3, 2, 4, 1, 3, -6, 3, 5, 5, 0, 2, 5, 1, 0, -4, -2, 2, 3, -3, + 0, -2, -3, -6, -9, -2, -2, -2, -3, -6, 6, -1, 4, -1, 0, 2, -4, -10, -11, -6, -6, -7, -7, -9, -1, 7, 1, -3, 4, 10, + 0, 1, -2, -4, -2, 1, 0, -3, 1, -2, -4, 0, -1, 2, -3, -2, -2, -2, -5, -2, -1, 2, 6, 1, -3, -8, -8, -7, -5, -4, + -3, 3, 1, -2, -2, 2, 3, -1, -1, 0, 2, -2, 0, 3, 8, 9, 4, 4, 4, 3, -1, 0, 0, 9, 1, 0, 5, 1, -5, -3, + 1, 0, 2, 7, 1, 4, 3, -2, 1, 0, 7, 4, 7, 0, 0, 1, -2, -1, 1, -4, -5, -3, 6, -6, 0, -4, 1, -4, -7, -3, + -7, -1, -1, -6, 4, 7, 3, 5, -1, 2, -1, -1, 0, 1, 5, 0, 6, 3, 4, 7, 9, 4, 0, -1, 3, 0, 6, -2, 0, -3, + 5, 13, 0, 4, -3, -6, 0, -13, 1, -2, -6, -1, -1, 3, -7, -1, 4, 3, 0, 1, 12, 2, -2, 0, 1, -4, -1, -2, -4, -6, + -3, -2, -10, 2, -5, 1, 2, -3, -1, -4, -6, 5, 4, 1, 0, -5, -10, -3, -7, -2, -1, 3, -3, 4, 2, 6, 11, 3, 4, 6, + 0, 5, 8, -1, 4, 3, 0, 5, -3, -2, 2, 1, 3, -4, -8, -1, 6, -1, 6, -4, -1, -1, -3, -4, -1, -9, -9, -2, 5, 1, + -1, -5, -8, -2, 3, 4, 3, -1, 2, 6, 5, 2, 8, 2, 7, 0, -5, 6, 7, 6, 4, 4, 3, -4, -6, 0, 1, 5, 3, -7, + -7, -1, 7, -1, 2, 0, 5, 0, 1, 6, 8, -7, 0, 6, 5, 10, 8, -2, -5, 7, -3, -9, -4, 2, 1, -5, -3, 3, -4, -12, + -3, -7, 2, -4, -2, -6, 6, -3, -6, -4, -4, 1, 2, 8, 4, -1, 2, 3, -2, -2, -10, -4, 1, -2, 10, 9, 4, -1, -1, 5, + 1, 4, 5, -4, 2, -5, -4, 0, -1, -4, -3, -5, -2, -1, -1, 4, 2, 6, 6, 2, 1, -2, 4, -1, -2, 3, 4, 11, 3, 3, + -2, -2, -1, -5, -2, -2, 2, 4, 3, 3, 3, -1, -1, -2, -2, -2, -3, 3, 6, 4, 3, 2, 0, -6, -6, -5, -3, -2, 0, -11, + -12, -7, -5, -3, 1, 4, -3, 1, 3, 11, 12, 4, 0, -4, 6, 3, 1, 5, 8, 6, 1, -5, -2, -2, -4, -6, -3, 3, 2, 2, + 5, 6, 4, 4, -8, -4, -4, -1, 3, 2, -1, 0, 4, 8, 4, -5, -6, -2, 2, 0, 0, -3, -4, -6, -6, 1, -3, -6, -2, 3, + 2, -3, 4, 7, -1, 0, 11, 6, 9, 0, -4, 0, -12, 2, 1, 6, -1, -4, 1, 2, 1, -3, -1, 6, 4, 12, 5, 5, 1, 0, + -4, 1, 0, -7, 0, -11, -6, -2, -1, 0, 1, -1, 0, -5, 7, -4, 4, 2, 2, -3, -6, -6, 1, -7, 0, 4, -1, -3, -3, 6, + 8, 2, 4, 6, 7, -1, 1, 6, 6, 7, -9, -8, -9, -10, 2, 0, -2, -4, -6, -7, -8, 1, -5, 1, -3, 2, 0, 0, -4, -1, + -4, -4, 0, 3, -2, 2, 0, 0, 1, 0, 1, 2, 4, 3, 7, 3, -5, -4, 2, -5, -8, -3, 2, 1, -2, -3, 4, 3, 6, 11, + 13, 14, 4, -2, 1, -3, 1, 4, 0, -5, -10, 2, -3, 2, 1, -5, -9, 6, 5, 5, 1, 2, 1, 2, 3, -2, 2, 12, 6, 8, + -1, -1, -1, 1, -2, -7, -6, -3, -5, -5, 2, 2, -2, 1, 2, -1, 0, 11, -8, -6, -1, -9, 10, -5, 7, 2, 0, -3, 0, -6, + -5, -6, 0, 1, -2, 0, 0, -5, -1, 2, -2, 0, -1, -5, -3, 1, -3, 1, 0, -1, 3, 0, 2, -1, 0, 3, 1, -3, 1, -4, + -2, -1, -1, 1, -1, -4, -6, -8, -2, -1, -2, -5, -3, -2, 3, 3, 5, 5, 3, 0, 0, 0, -2, 4, 1, 3, -1, -8, -3, 0, + 3, 3, 2, 3, -6, -1, 5, 7, 7, 0, -2, -1, -1, 7, 3, 6, -2, 0, 2, 5, 5, 1, 1, -2, -1, -3, -2, -2, -1, 0, + 2, 0, 1, 6, 4, -1, -2, -4, -1, 2, 3, 4, -2, 6, -2, -3, 2, 4, 1, -7, -4, 1, -1, 2, 3, -1, -1, -4, -5, 1, + 1, 5, 3, -3, -2, -4, -3, -1, 11, 0, 3, 10, 4, 3, -15, -6, 1, -9, -6, -1, -5, -6, -1, 5, -5, 3, 3, -4, -3, -1, + 3, -1, 1, 9, -3, 0, 0, -1, -4, -6, -6, -2, -3, 5, 2, 2, 1, 10, -2, 2, -5, 5, 3, 7, -2, -5, -2, -5, 1, -8, + -4, -4, 3, 5, 4, 0, -3, -4, 3, 4, 5, 0, 4, 11, 1, -15, -10, 1, -2, 3, 7, -2, 0, 1, -1, -3, 7, 7, -4, -4, + -7, -2, -5, -5, -3, 0, -2, -1, 2, 0, -5, -7, -2, -7, 2, -2, -11, -12, -5, 0, 5, 8, -3, 7, 3, 5, 1, 4, 3, 2, + 2, 3, 3, 5, 2, 6, 0, -3, 8, 2, -5, 2, 7, 4, 3, 3, 4, 6, -5, 1, -5, -3, 0, 10, 3, 1, 4, -4, -4, 7, + 5, 0, 7, 8, 12, 0, 1, 2, 5, 5, 3, 3, -4, 5, -3, 2, 3, 5, -6, -2, 3, 6, -2, -1, 5, 8, -2, -2, -3, 4, + 0, -2, -1, 12, 5, 5, 2, 10, 12, 7, 2, 6, -2, -9, -7, -7, -2, -1, -4, -4, 4, 2, 3, 6, 8, 4, 4, 3, 4, -1, + -4, -6, -4, -7, -2, -4, 2, 1, 2, 3, 3, 5, 4, 1, 5, -2, 1, -2, 0, 0, 5, 7, 4, 2, 0, 3, 3, 3, 0, 1, + 3, 3, 0, -5, -8, 1, -6, -6, -2, -9, -7, 1, 0, -2, -2, -6, -6, -3, -7, 2, -1, -2, 0, -3, -3, 2, -2, 2, 0, 12, + 8, 5, 4, 7, 8, 3, 7, 1, 6, -1, 2, 1, -1, 7, 2, 3, 3, 1, -2, -3, 3, -1, -2, -3, -6, 1, -4, -6, -1, -5, + -7, -8, 0, 3, 2, 3, 5, 5, 6, 3, -4, 1, 0, -2, -8, 0, -9, 10, -8, -25, -19, 6, 4, 4, 12, 7, 1, 8, 9, 2, + 10, 13, -1, 5, 3, 3, 12, 8, 3, 9, -6, -3, 4, -4, 0, 2, 3, 1, -6, -3, -6, -1, -3, -1, 0, -5, -4, -1, 1, 1, + 3, -3, -10, -3, -5, -4, 4, -1, -10, -9, -1, -2, -3, -3, -8, -3, 3, 6, 1, -3, -14, -4, 0, 5, 6, 3, 9, -4, -3, -4, + 0, 5, 16, 13, -1, -1, 9, 8, 8, 6, -1, 4, 8, 6, 2, 2, -2, 8, 4, 5, 4, 5, 10, 2, -1, 0, 3, 5, 5, 0, + 2, 5, 5, 1, 3, 1, 1, 0, 2, -7, -6, -9, -7, -13, -19, -14, -9, 0, 6, 5, -7, 1, 2, -6, 1, -1, 1, 7, 4, -7, + 4, 8, 16, 18, 9, 6, 4, 16, 18, -1, 3, -6, -5, -12, -16, -10, -7, -1, -5, -2, 1, 0, -7, -5, -7, 3, -3, -4, -21, -6, + -12, -10, -8, 0, 9, -2, 6, 5, 9, 13, 11, 5, 3, 4, 6, 1, 10, 5, 3, -9, -5, -3, -2, 4, 3, 8, 7, 8, 5, 7, + 3, 2, -3, 0, 1, 3, -2, 0, -1, 4, 1, 3, -1, 0, 5, 1, 0, -3, -1, -1, -2, -2, 1, 0, 0, -1, 2, 5, 2, 1, + 0, 4, 5, 6, 7, 6, 4, 2, -1, -4, 0, -3, -3, -2, -5, 0, 3, 2, 0, 1, -5, 5, 0, 0, -2, -5, -2, -1, 5, 1, + -5, 1, -2, 4, -1, 5, -5, -3, -8, -8, -7, -3, -4, -1, -5, -5, -6, -7, -10, -12, -13, -10, -7, -1, 1, 3, 0, 10, 3, 1, + 1, -3, -8, -2, -1, 2, 0, 8, 9, 5, 5, 8, 14, 4, 0, -2, -3, -1, 2, 2, 15, -19, 37, -22, -29, -11, 12, 6, 16, 10, + 14, -1, -8, -6, -2, 4, -6, -12, 3, 3, -4, -7, 4, 1, 1, 0, -2, -3, -5, 4, 1, 1, 6, 8, 6, 3, 2, 4, 0, -6, + 5, 5, 1, 6, 13, 12, 5, 2, 2, 3, 1, 12, 3, 5, 6, 5, 9, 7, -3, -1, 3, 11, 11, 7, -12, -12, -4, -8, -14, -8, + -8, -6, -7, -5, 1, 0, -4, -7, -9, -12, -14, -13, -11, -3, -6, -1, 1, 2, 6, 14, 11, 2, -2, 8, 5, -9, 1, -2, 2, 0, + 1, -2, -7, -12, -14, -17, -18, -16, -18, -8, -7, 2, 6, 8, -2, -8, -6, -4, -7, 6, 18, 18, 10, 11, 15, 16, 13, 13, 4, 3, + 3, 11, 18, 8, 8, 11, 3, 4, 4, 7, -4, 9, 18, 6, 5, 7, 10, -4, -3, -8, -8, -12, -6, -8, 4, -1, 4, 3, -1, -15, + -11, -15, -17, -28, -23, -17, -8, -13, -4, 8, 3, 7, 3, 2, 13, 23, 4, 13, 4, -2, 2, -3, -1, 0, -10, 12, 12, 9, 15, 11, + 10, 11, 12, 11, 3, 9, 8, 3, 4, 3, 0, 2, -1, -3, -1, 1, 0, 6, 7, 10, 12, 7, 5, 3, 4, 6, 1, 5, -1, 0, + 0, 2, -4, -5, -4, -7, -8, -15, -16, -12, -5, -5, 5, 0, -8, -12, -11, -5, 2, 4, 10, 24, 17, 18, 17, 15, 17, 13, 7, 8, + 1, 8, 9, 11, 4, 7, 4, 2, 9, 5, 7, 9, 13, 9, 9, 11, 10, 10, 12, 19, 21, 29, 24, 25, 23, 4, -9, -24, -54, -77, + -89, -100, -100, -90, -68, -40, -16, -5, 4, 11, 7, 3, -2, -2, 0, 7, 7, 9, 0, -8, -7, -14, -31, -66, -127, -1, -79, 75, -38, 1, + 15, 50, 2, 37, 39, -24, 48, 25, -49, 26, 7, -27, 10, -9, -11, 14, -7, -22, 18, 15, -11, 1, 2, -6, 0, -2, -5, -2, -1, -11, + -14, -4, -9, -3, -11, -4, -10, 5, -2, -4, -5, -2, 1, -3, -9, -8, -4, 2, -3, -9, -5, -12, -14, -18, -16, -15, -7, -1, -6, 28, + 2, 7, 4, -5, 1, 2, -11, -7, 6, 0, 1, 1, -7, -13, -10, -16, -8, 2, -7, -10, -8, -2, -2, -14, -7, -6, -2, 4, 3, -6, + -5, 1, -1, -1, -4, -7, -2, -2, 16, 5, 0, -12, -7, 1, 2, 4, 8, 0, -5, -1, 1, -1, -11, 4, -1, -13, -3, 4, -1, 2, + 6, -6, 8, -4, -3, 9, 9, 6, -2, -5, 4, -4, -4, 0, 7, 4, -9, 6, -7, 10, -3, 9, -7, 5, 3, 8, 9, -8, -4, 8, + 9, 6, -10, 0, -2, -5, 8, 1, 9, 13, 1, 5, 8, 8, 0, 9, 4, 7, -7, -3, 7, 3, -8, -2, -2, 5, 2, 9, -1, -1, + 1, -6, -9, -10, -1, -5, -1, -1, 2, 4, 4, 4, 4, 1, 0, 4, 10, 7, 8, 4, -7, -7, -4, -7, -4, -4, -9, -8, -3, 3, + -7, -3, -4, -3, -7, -11, 3, 7, 4, -3, 2, 6, 0, -1, 0, 0, 0, 5, -7, -6, -8, -11, -4, 1, 3, 3, 5, 7, -3, 0, + 0, -2, -1, 4, -1, 15, 7, 4, 0, 12, 12, 2, 2, 5, 9, 6, -5, 2, 7, 3, -2, 5, -6, 0, -6, 0, -1, -9, -10, -4, + 6, 4, 7, -7, -6, -7, -1, 1, 1, 1, 12, 1, 5, 12, 3, 3, 7, 6, 12, -7, 0, -5, -6, 7, 9, -2, -2, -15, -13, 2, + 7, 13, 7, 7, 18, -12, -12, 8, 15, -8, -2, 1, -11, -10, -5, 3, 10, 3, -1, 6, 8, 3, -14, -7, -14, 6, -13, -6, 1, -3, + -6, 0, -5, 0, -2, -5, 7, 0, -2, 2, 2, 15, 3, -6, 0, 0, 2, -8, 14, -1, 3, -10, 2, 14, -1, 0, 2, 4, -1, -8, + -4, -7, -5, -4, 15, 13, 9, 0, 5, -14, -6, -12, -3, -1, -12, 5, -5, -7, -9, 4, 3, -8, -6, 3, 3, 0, 7, 1, 1, 7, + 12, 10, 11, -4, 12, 9, -3, 5, -9, -3, 0, -1, -4, 2, 5, 4, 4, -9, -7, -4, 5, 1, 2, -5, -4, 9, 11, 11, 10, 7, + 9, 9, -1, -7, 3, 7, 4, -4, 13, 0, 5, 5, -6, 4, 0, 2, -11, 8, 5, 5, 13, -11, -1, -7, -4, 7, -2, 8, 8, 6, + -2, 4, -3, -11, 9, 4, 7, 2, 11, 6, -2, -6, 0, 10, 1, -7, 6, -3, -17, -9, -5, -12, -12, 4, 6, 3, 0, 6, 9, 7, + 6, 12, 6, 9, -13, -1, 8, 2, 9, 2, 5, 3, 2, 1, 0, -1, 4, 6, -4, 2, 1, 2, -4, 2, -3, -5, -6, 0, -3, 5, + 8, 3, 3, -9, -16, -9, -3, -1, 0, -7, 1, 2, 5, 9, 3, 7, -4, -7, 0, -2, 5, 1, 10, 2, -5, 3, 2, 3, 2, -4, + 2, 8, -1, 1, 4, 6, 1, 2, 13, 7, 6, 10, -7, -11, -5, -7, 1, 5, 4, 4, 10, 1, 7, -11, -2, 4, 2, 1, -3, 1, + 7, 2, -1, -8, -4, 5, 7, 1, 2, 1, -2, -7, -4, -12, -5, -7, -9, -1, -5, 4, 11, 12, 4, 10, 7, 0, -6, 7, 13, -4, + -3, -2, 4, -4, 4, 4, 7, -1, 8, -14, -24, -8, -11, 7, 4, 2, 7, -6, -5, -1, -4, -2, 4, -5, 5, -2, -6, -4, 2, 1, + 2, 0, -9, -3, 8, 12, -2, 2, -8, -20, -4, 6, 0, -11, 3, -1, 2, -9, 6, 9, 10, -2, -5, -3, 4, 5, 4, -3, 7, -3, + 1, -3, 17, -11, -17, 0, -9, -1, 4, 28, 2, 6, 1, -1, -6, -2, -7, -5, 2, 0, -1, 3, -5, -7, 4, 6, 4, -2, -2, 3, + 6, 5, -1, -3, 10, 13, 1, 0, -7, -12, 10, 4, -4, -5, 4, 6, -11, 3, -1, 19, 10, -6, -12, 6, -3, -7, 0, 8, -6, 0, + 4, 5, -2, 4, 11, 7, 4, -1, -2, -11, 2, 3, 10, 6, -5, -2, 5, -5, -12, -4, 0, -1, -6, -3, -14, -18, 2, -10, -6, -4, + 3, -12, 7, 4, 9, 5, -1, 0, -9, 1, -5, 12, 5, 0, 0, 6, -1, -2, 3, 5, 4, -10, -3, -2, -9, -4, -2, 10, 10, 16, + 20, 7, 1, 3, 5, -1, 6, 0, -3, 0, -2, 3, 3, 7, 5, -1, -3, -4, -4, 5, 1, 4, 3, -2, 9, 1, 5, 0, -6, 0, + 0, -1, -6, -5, 4, 4, 3, 1, 7, 6, 9, 5, 8, 9, 5, 9, -3, 1, -3, 5, 4, -3, -5, 7, 5, 3, 6, 14, -3, -8, + 4, 1, 1, 6, 1, -7, -4, -4, -8, -4, -2, -6, -3, 0, 1, -8, 3, 2, -6, -5, 4, 6, 2, 9, 1, 10, 12, 5, -2, 7, + -5, -1, -2, 0, -2, 2, 3, 0, 4, -2, -1, 1, 8, -2, 3, 8, 14, 9, 6, -6, -8, -4, -13, -4, -3, 2, 4, 4, -3, -5, + -3, -10, -2, 0, -5, -5, -1, -1, -5, 6, 8, 6, 29, 23, 11, 14, 4, -5, 17, 4, 5, 0, 4, -2, 8, 7, 0, 10, -2, 0, + -3, 5, -2, -14, -15, -6, -4, -9, 2, -1, 9, 18, 5, 12, -9, 11, 11, 3, 2, -4, 4, -4, -7, -2, -4, 9, -5, -5, -12, 3, + 11, 6, 10, 0, -3, -4, -1, 2, -7, 5, 0, -5, -12, -1, 44, -12, -13, -2, 12, -8, -11, -9, -5, -16, -19, -1, 4, -3, -6, 6, + 0, 1, -2, -1, 10, 15, 6, 11, -2, -17, -2, 8, 8, -1, 6, 4, -7, 6, 3, 1, 2, -4, 11, 5, 0, -3, -2, 1, -4, -10, + -11, -7, -7, -4, -2, -11, -3, 11, 2, -14, -5, 2, -9, -14, 1, 6, 6, 9, 4, 7, 10, -2, -17, -16, -11, 0, -4, -12, -29, -2, + 4, -8, -7, 7, 0, 11, 2, 13, 8, 9, 9, 0, 1, 3, 4, 1, 2, 6, 6, 8, -3, 3, 10, 7, 9, 10, 13, 5, -4, 3, + -14, -11, -7, -12, 2, -6, -18, 0, 2, 9, 10, -6, -3, -9, -6, 8, 13, 6, 11, 6, 1, 2, 0, 1, -3, -4, -1, 1, 3, 1, + 7, 2, 2, -1, -1, 6, 8, 6, -1, -7, -4, 5, -1, -7, -7, -12, -1, -15, -14, -4, -1, 0, -10, -5, 0, -3, -7, -12, -8, -6, + -1, -5, 4, -5, -2, -3, 4, 4, 6, -5, -9, -5, 10, 5, 10, 13, 5, 9, 5, 10, 4, -2, 8, 2, -4, 1, -3, 2, -8, 8, + 2, 4, 4, 9, 10, 13, 4, 2, -1, 5, 0, 3, 0, -3, 7, 3, 6, 2, -1, -3, -3, 2, 0, -8, -17, -10, -6, -11, -9, -10, + -15, 0, -6, -3, 6, 15, 18, 8, 1, -8, -4, 9, 4, 3, -7, -19, -31, 45, 1, 29, 6, 20, 22, 19, -1, 23, 10, 10, 7, 6, + 8, 3, -4, 6, 0, -4, 10, -6, -17, -9, 1, 1, 1, 6, 6, 2, 3, -12, -10, -6, 11, -3, -2, 0, -10, -4, -7, -4, -6, 2, + 2, -5, 0, -1, -3, 7, -11, 1, -7, -7, -2, -12, -1, -8, -2, 2, -1, 11, 0, 28, -32, -11, -6, -8, -15, -10, -6, -9, -9, 2, + 11, 2, -4, -7, 3, -8, -12, -9, -1, -1, 4, 0, 12, 3, -13, -9, -1, 12, 20, 12, 10, 0, 7, 0, 8, 6, 11, 5, -3, 4, + 5, 10, 15, 13, 18, 8, 14, 18, 1, -2, -6, 1, 7, 4, -3, 3, -2, -24, -20, -16, -18, -25, -25, -22, -42, -28, -42, -47, -46, -42, + -46, -51, -38, -29, -23, -14, -30, -15, 4, 3, 9, 3, 37, 20, 25, 22, 39, 33, 20, 29, 38, 36, 37, 31, 44, 37, 24, 32, 37, 13, + 25, 20, 8, 6, -16, -23, -31, -27, -37, -37, -17, -20, -10, 0, 8, -3, 0, 5, -3, -6, 13, 17, 22, 20, 17, 17, 12, 0, 4, 1, + 5, 4, 7, 3, 5, 1, -2, -4, -1, 9, 13, 10, 5, 3, -1, -4, 11, 16, 5, 6, 5, 12, -2, -4, 3, 8, 3, 3, 8, 0, + 4, 3, 14, 22, 16, 12, 11, 12, 10, 13, 16, 12, 11, 9, 6, 1, 1, -20, -19, -25, -29, -26, -36, -35, -27, -21, -30, -30, -33, -28, + -26, -39, -37, -38, -37, -42, -45, -40, -31, -30, -17, -13, 3, -4, -10, 11, 7, 3, -4, 5, 16, 13, 17, 9, 19, 12, 4, 2, -4, -11, + -1, 3, -12, -18, -27, -39, -37, -47, -46, -38, -37, -39, -42, -27, -21, -23, -13, -12, -23, -8, -28, -39, 47, -56, 78, -11, 29, 59, -2, 25, + 20, 12, 2, -14, -8, 2, -7, 1, -3, -9, -4, -3, -16, -4, -14, -9, 4, 3, -3, 3, -7, -1, -12, -17, -9, 5, -1, -11, -5, -3, + 9, -11, -7, -1, 7, 0, -13, 0, -9, -1, -1, 10, 0, -4, -6, -16, -5, -7, -10, -13, -5, -1, -1, 6, 5, 3, 4, -2, 4, 12, + 8, -9, -19, -18, -35, -16, -3, -12, -16, -3, -11, -17, -4, -3, -10, -7, -6, 10, 7, 0, -9, -13, -12, -10, -13, -13, -13, 0, -3, -19, + -20, -21, -21, -6, 14, 15, -17, -7, -4, 3, 6, 13, 0, -24, -13, -3, -9, 3, 12, 12, -10, 23, 31, 9, 13, 8, -9, -9, 3, -10, + -20, -31, -26, -28, -34, -22, -35, -35, -19, -14, -6, -26, -8, 4, 1, 12, 8, 15, -1, 10, 31, 22, 20, 15, 22, 38, 42, 27, 20, 46, + 26, 17, 10, 1, 4, 6, 22, 33, 27, 37, 31, 18, 6, -2, -4, -22, -8, 0, -14, 5, 11, -1, 3, 5, 6, -10, -1, -1, 9, 5, + 3, 5, 8, 2, 3, -3, -6, -7, -3, -8, 2, 0, 0, -3, -2, -2, 1, 4, 1, 2, 9, 13, 13, -1, -5, 4, 4, 2, 10, 10, + 14, 4, 8, 11, 10, 9, -1, -2, -4, -6, -8, -5, 2, -5, -7, 1, -1, 6, 19, 13, 16, 18, 15, -7, -9, -16, -16, -18, -11, -24, + -14, -32, -24, -25, -17, -20, -24, -26, -23, -15, -20, -31, -33, -21, -29, -3, -19, -4, -5, 8, 7, 18, 17, 24, 30, 22, 21, 28, 17, 26, + 20, 17, 31, 30, 40, 47, 50, 45, 37, 27, 7, -15, -50, -56, -68, -78, -62, -70, -54, -41, -47, -49, -54, -52, -59, -58, -90, -20, -121, -11, + -127, -78, 20, -95, 23, -10, -7, -25, -68, 10, 37, 27, -15, -24, 30, 26, -4, -19, -4, -6, -1, -11, -4, -4, 11, 3, -7, 5, 3, 1, + 27, 2, 10, 9, 2, 15, -2, 10, 0, 7, -4, 4, 19, 12, 19, 12, 32, 20, 32, 17, 23, 12, 7, 14, 2, 15, 11, 10, 23, -25, + -5, -2, 0, -2, 1, -1, -7, 1, -6, 5, 6, 9, 6, 7, -5, -4, -3, 1, 3, 11, 12, -1, -2, -6, 1, -3, 10, 4, -3, 3, + -5, 3, 9, -1, -5, -9, 6, 6, 6, -9, 1, -7, 5, 4, 1, -12, -5, -8, -8, -6, 0, 2, 2, 1, 5, 1, -2, -1, 2, 5, + -4, -3, -6, -5, 5, 2, 2, -5, -13, 3, 0, 3, 1, -8, 2, -5, -5, -6, -12, -8, -17, 3, 10, 10, 5, 8, -7, 1, 1, 1, + -1, 7, 2, -6, 9, 10, 2, -3, 4, -3, 1, -5, -10, -5, -6, -19, -16, -14, -6, 2, 0, -4, -11, -17, 0, -4, 4, 0, -6, 1, + 8, 5, 5, 2, 1, -7, -3, -9, -3, -3, -2, -4, -4, -5, -5, -7, -7, -2, -3, -5, -7, -4, 2, 0, -5, -2, 1, 4, 4, 4, + 1, -3, 7, 2, -3, 1, -2, 3, -5, -10, -3, -2, -4, -3, 1, -9, -3, 0, -3, -1, 3, 11, 14, 9, 13, 14, 7, 8, 4, -3, + 2, 3, 0, -6, 3, 6, 5, 4, 1, 4, -1, 4, 2, -3, 0, 0, -2, -7, -6, -9, -13, -1, 1, 0, -2, 4, -2, -5, 1, 5, + -4, -5, 0, -6, 7, 1, 1, 1, -6, -5, -5, -5, -2, 1, 6, 4, 1, 2, -1, 11, 11, 4, 2, 13, 12, 8, 8, -2, -2, -5, + 16, 7, -3, -29, -1, -14, -2, 1, 6, 5, 13, -15, -10, 4, -2, 10, 5, -4, -1, -12, 3, -2, 10, -4, 3, 1, 4, 5, 0, -6, + -5, -12, -3, -3, -8, 11, 6, 0, 1, -18, 0, -7, -7, -11, 1, 4, 1, -3, 5, -5, -6, 7, 7, 3, 11, 4, 1, 12, 5, 12, + 8, 7, 6, 10, -25, 2, 7, 12, 4, -4, 1, -15, -8, -8, -5, 11, 5, -2, 0, -1, 4, 8, 7, 2, 7, 7, 6, 9, 5, 8, + -2, 6, 5, 8, 10, 3, 11, 9, 1, 3, 4, 0, 4, 4, 3, 4, 16, 8, 9, -3, 4, -1, 6, -2, 2, -3, 1, -1, 3, -2, + 4, 0, -2, 0, -3, -8, 7, 9, -1, 3, 8, 2, -2, 2, 5, 4, 6, 6, -5, -2, -8, -1, -1, -9, 6, -5, 8, 15, 12, 0, + 10, 15, 13, 6, 3, 11, 12, 12, -5, 11, -3, 9, -8, -5, -4, -8, -5, -3, -12, -11, -20, -11, 4, 4, -3, 5, 2, -9, -7, 7, + -4, 2, -1, -8, 0, -1, 0, -1, 0, -6, -4, -10, -10, -9, -18, -8, 0, 9, 2, -2, -5, 1, 0, 1, -4, -4, -2, 4, 1, -9, + -2, 6, 4, 4, 2, 0, 0, 3, -7, -2, -6, -8, -2, 1, 4, 2, -3, 0, 3, 1, -4, 3, 10, 4, 0, 0, 2, 1, -3, 2, + 3, -2, 2, 0, -6, -13, -9, -11, -11, -7, -10, -4, -8, 1, 2, -4, -3, 3, 0, 6, -3, -8, -7, -5, 0, 0, 8, 2, -9, -1, + 7, 7, -4, -14, -1, -4, -4, 2, 3, 4, 4, 3, 3, 0, 1, -4, -4, 1, -11, -12, -8, 2, 12, 6, 2, 5, 5, -1, 4, -2, + -5, -7, -6, 2, 2, 18, 3, 10, -20, -14, -19, -7, 3, 2, 15, 8, -10, -4, 11, 4, 9, -10, 1, -4, 0, -5, 5, 12, 2, -3, + -5, 9, 5, 10, 8, 0, -10, -9, -9, -11, 4, 8, 0, -10, 0, -1, -10, -12, 1, 11, 4, -2, -2, 7, -6, -10, -6, -4, -4, 4, + -2, -2, 8, 9, 3, 0, 4, -1, 4, -27, 3, 4, 0, -1, 3, -2, -21, -13, -4, 0, 10, 16, 12, 15, -2, -2, 1, -3, -7, 8, + 7, 5, 5, 2, 2, 5, 3, 8, -4, 3, 3, 4, 2, -6, -8, -8, -3, -5, -5, -13, -10, -11, 6, 9, 7, -4, -1, -1, 0, 5, + 8, -8, -12, -6, -5, 4, 1, 3, -1, -9, -11, 1, 7, -4, 3, 2, 3, 12, 3, -3, 3, -2, 5, 12, 6, 11, 6, 3, -3, 6, + 11, 13, 5, 16, 5, 7, 8, 7, 3, 4, 10, 2, 2, -2, -6, -5, -9, -4, -5, -5, -4, 4, -1, -11, -2, -27, -17, -14, -6, -6, + -7, 0, 3, -6, 0, -3, -3, -8, -1, 14, 1, -4, 0, 5, 1, 0, -3, -1, 5, 5, 8, 10, 5, 10, 9, 2, -7, -12, -5, -2, + 3, -4, -3, -1, 0, -2, 1, -4, 0, -5, -3, -3, 1, -3, -8, -8, -1, 1, 1, 2, -1, -2, -3, 2, 6, 1, 2, -4, 3, -2, + 0, -3, -3, 1, 2, 3, 9, 5, -5, -2, -6, -5, 2, 4, 4, 13, 4, 2, 4, 5, 0, -6, -3, -8, -14, -13, -10, -14, -13, 1, + -6, 3, 4, 6, 4, 3, -2, 0, 0, 2, 0, 5, 7, 1, -5, 4, 3, 1, 5, -3, -4, 1, -2, -4, 2, -8, -7, 1, 1, -5, + 8, -5, -3, 8, 2, -3, -7, 7, 8, -8, 24, -9, 12, -20, -20, -24, 11, 11, 13, 22, 27, -9, 6, 10, -3, 2, -3, 9, -15, -3, + -10, 6, 19, 13, 8, 4, 4, 6, 8, 1, 4, -2, -2, -13, -7, -4, 2, 1, -5, -5, 8, 16, -13, 3, 4, -2, 0, -7, 4, 5, + 3, -4, 1, 10, 13, 12, 9, 9, 2, 7, 2, 4, 10, 9, -25, -6, -13, -1, -3, 5, -4, -9, -3, -3, -2, -6, 3, 7, 11, 7, + 7, -1, 0, 0, 6, 6, 8, 0, -4, -7, -2, 3, 2, 5, 5, 1, 1, -7, 6, -3, 7, 0, 0, 4, -5, -17, -7, 0, 9, 8, + 5, -6, -7, -5, 7, 5, -1, -2, -1, -8, -4, -1, 1, -3, 4, 2, 4, 9, 16, 1, 4, 6, -6, -8, 7, 3, 0, -3, 3, 10, + -11, -2, -20, -13, -8, -6, 1, 3, 9, 7, 19, 1, 7, 6, 8, 3, 11, 1, 8, 7, 10, 9, 0, 8, -3, 10, 0, -10, -12, -6, + -15, -7, -5, 7, 9, 16, 2, -3, 4, 14, 6, 5, 0, -4, -1, -1, -7, -5, 0, -1, 4, 1, 6, 2, 3, 4, 6, 14, 8, 1, + -3, -10, -14, -13, -1, 1, -5, 1, -5, 0, -6, -4, -3, -1, 4, 8, 8, 9, 5, 3, 2, -4, -3, -4, -4, -2, -3, -1, 4, 5, + -1, -2, -2, -4, 1, 1, -5, -3, -4, -5, -9, -7, -5, -1, -5, -5, -8, -2, 2, -4, -8, 1, 4, 2, 6, 7, 2, -3, 3, 3, + 2, 2, -2, -3, -5, 4, 8, 5, 3, 7, 1, 0, 3, -2, 0, -3, 4, 1, -1, -1, 4, 6, -12, -3, -1, 0, -1, -1, -2, -6, + -9, -8, 0, 0, 3, 2, 0, -9, 1, -4, -6, 4, 3, 1, -8, 15, 15, 6, -11, -5, -45, 25, 21, 30, 12, 18, 5, -13, 14, 15, + 2, -8, 8, -2, -17, -10, 4, 5, 2, -4, 10, 9, 10, 5, -2, -3, 0, 1, 2, -9, 2, -2, 0, -8, -16, -6, 4, 1, 1, 4, + 15, -4, -1, -1, -4, 2, -6, 0, 3, -2, 4, 1, 1, 6, -5, 6, 6, 6, 8, -8, 0, -5, -8, 0, -9, -15, -12, -5, 12, 7, + 16, 8, 12, 3, -2, 0, 6, 1, -11, 6, 2, 1, -3, -4, -2, 11, 3, 1, -10, -7, 7, -4, -8, -2, 1, 13, 20, 16, 7, 0, + -3, -1, 1, -2, 3, -3, 3, -4, -8, -7, -7, -7, -22, -14, -7, -7, -11, 0, -3, 0, -13, -4, -2, -7, -7, 4, 4, -4, -2, -3, + 24, 15, 13, -5, -24, -8, -18, -38, -27, -19, -3, -3, -3, 4, -5, -8, -7, 0, 5, 14, 10, 21, -3, 0, -8, -18, -13, -14, -14, -3, + 0, 5, -1, -3, 4, 5, -6, -2, 11, -6, 12, 14, -7, 9, -6, 7, 7, 5, 8, 2, -13, -10, 1, 5, 10, 6, 13, 8, 6, 5, + 6, 6, 11, 10, 10, 2, 1, -6, -7, -11, -10, -9, -6, -7, -14, -7, -7, -8, -3, -3, -3, 3, -2, 0, 8, 5, 3, 3, 8, 4, + -6, -8, -5, -7, -7, -4, 2, 1, 0, -1, 0, -6, -8, -15, -13, -14, -5, 1, 2, 7, -3, -1, 7, 8, 2, 9, 2, 4, 3, 8, + 12, 11, 7, 1, -4, 3, 0, -6, -7, 5, 5, 5, 0, 0, -1, 6, 1, -3, -4, -2, 2, 5, -4, -11, -1, -6, -5, -10, -15, -14, + -8, -9, -4, -3, 1, 3, -12, -4, -4, -11, -8, -3, 1, 10, 8, 10, 10, 2, 0, -7, -2, 55, -12, 5, -7, -28, 23, 46, 35, 16, + 37, 7, -5, -3, 1, -4, 1, 0, -17, -8, 2, -3, 12, -6, -2, 7, 2, 10, 10, 5, 1, -4, -5, 1, -11, -1, -16, -23, -9, -11, + -15, -11, -10, -18, -11, -5, -15, -14, -9, -16, -13, -10, 3, -8, -7, -3, -15, -7, 4, -6, 3, -5, -6, -1, -13, 28, 26, 16, -5, -20, + -25, -15, -8, 7, 18, 22, 22, 14, 8, -8, -18, -20, -13, -8, -9, -14, -12, -9, -6, 2, 12, 15, 14, 13, 5, -15, -20, -15, -20, -12, + -1, 12, 9, -1, -3, 4, -7, -9, -10, -3, -3, -3, -10, -14, -27, -30, -20, -16, -11, -3, -9, -19, -16, -24, -24, -24, -20, -13, -8, -16, + -23, -14, -19, -14, -5, 10, 14, 22, 23, 5, -16, -42, -34, -42, -25, -11, 11, 25, 19, 10, 19, 4, -5, -19, -5, -7, 3, -19, -2, -11, + -24, -3, 7, 7, 17, 21, 13, 3, 2, 1, 18, 12, 13, 10, 5, 16, -3, 1, -2, -11, 19, 14, 23, 39, 16, -7, -7, 6, 10, 8, + 8, 4, 3, 8, 5, 3, 1, -2, 1, -5, -5, -11, -13, -13, -15, -8, -7, -5, -5, -6, -12, -7, -10, -6, -10, -5, 3, 0, 5, 4, + 7, 0, 0, -10, -8, 2, 4, 6, 2, 2, -3, 3, 7, -5, -9, 0, -9, -10, -8, -15, -15, -19, -21, -18, -17, -22, -20, -13, -7, -6, + -5, 5, 6, 15, 23, 32, 42, 40, 29, 2, -14, -40, -43, -50, -27, -9, 10, 19, 24, 21, 15, 16, 20, 18, 15, 13, 13, 10, 17, 15, + 6, 15, 15, 12, -4, -7, -19, -21, -12, -12, 1, -1, 6, -6, -20, -34, -63, -67, -71, -73, -68, -54, -60, -72, -127, -20, 99, -52, 11, -15, + 1, -1, 45, 32, 28, 25, 38, -30, 19, -18, 13, 5, 2, -6, -13, 12, 18, 10, 22, 15, 21, 15, 3, 23, 10, 4, 0, -3, -5, 5, + 6, 4, -14, -16, -22, -10, -1, 1, -10, -3, -14, -6, -7, 6, -4, -2, -10, -2, -3, -1, -3, -8, -11, -2, -2, 3, -5, 8, 5, 4, + -7, -3, 0, 3, 7, -3, 6, -3, 3, 3, 0, 9, 0, -4, -9, 0, 7, 6, 3, 4, 1, 3, 6, 7, 3, -3, -4, -1, 2, 10, + 11, 8, 2, 3, -8, -1, -6, -4, 2, 1, -8, -2, 4, 5, -2, -1, -5, -3, 2, -1, 3, 4, 1, -1, -4, -6, -7, -7, -4, -8, + -6, -10, -9, -5, -4, -6, 2, 0, 2, 4, -9, 6, -4, -5, 5, 4, 5, -2, 11, 0, 0, -3, -3, 3, -7, -3, -8, 5, 12, 0, + 4, 1, 0, 2, 3, 4, 1, 12, -1, 6, 2, -1, 4, 0, 0, -2, -4, -4, 3, -1, 4, 1, -5, 2, 1, -3, 0, 3, -10, -1, + -3, -2, -1, 5, 5, -4, -6, 2, 2, 8, 9, 4, 0, 4, 3, 2, 7, 7, 2, 0, 1, 0, -3, 0, -1, 2, -3, -4, -1, -2, + 2, 0, -4, -3, -3, 3, -3, 1, 3, 6, 0, 0, 8, -2, 0, 1, -5, -9, -7, 0, 4, 4, -2, -6, 0, -2, -3, -4, -2, -1, + -1, -4, -2, 1, 4, 0, 1, 6, 2, 3, 1, -1, -3, -4, 1, 2, -1, -4, 3, 1, -1, -3, -3, -5, -4, -5, -3, 0, 1, 1, + 4, 1, 0, 2, 0, -1, -1, 4, 1, 1, 0, -2, -5, -5, -4, -4, -9, 0, -2, -5, 1, -1, -2, 6, 0, 4, 2, -3, -3, 11, + -5, -3, 13, 12, 2, -12, -11, -3, 14, 4, -3, -9, -11, 2, -7, 3, -8, -3, -3, 17, 0, 5, 3, -10, 6, 10, 11, -1, 0, 0, + -6, -3, 5, -2, 3, -1, 8, 8, 8, 7, 10, 6, -3, -5, -9, 1, -2, 5, 2, 5, 1, 4, 11, -6, 2, 2, 3, 8, 2, 3, + 0, 2, 3, 0, 9, -2, 4, -2, 3, 3, 5, 5, 9, 6, 9, 8, 4, -6, -1, -1, 7, 0, -1, -6, -2, -6, -5, -6, -4, -3, + 0, 1, -5, 0, 2, 4, 11, 9, 3, -3, 4, -1, -3, -7, -1, -4, -3, 4, -1, -4, -3, -9, -4, -2, -3, -1, -9, 2, -4, 0, + 3, 2, -4, -4, 2, 7, 2, 0, 2, 8, -3, -4, 0, -6, -7, -3, -2, -1, 5, 0, -8, -7, 2, 4, -4, 1, -3, -3, -2, 2, + 5, -2, 9, 1, 1, -2, 0, 8, -1, 8, 6, 3, 3, 6, -4, -5, 6, 2, 1, -2, 6, 0, -1, 4, 2, 2, 3, -1, -6, 1, + 3, -2, -2, -6, -3, 0, -2, -3, -1, -4, -2, -7, -6, -1, 2, 0, 0, 0, 0, 6, 3, 2, 1, 1, 0, 1, 4, 2, 0, 5, + 3, 4, 0, 1, 2, 1, -5, -5, -2, -3, -3, -1, 2, -2, -2, -4, -2, -1, 5, -1, -5, -4, 2, -4, 1, 2, 1, 1, 3, 0, + -2, -2, 0, -4, -5, 3, 8, 2, 3, 3, 1, 0, 0, 6, 1, -4, -1, -3, 5, 4, -3, 0, -6, 4, -7, -3, -3, -4, 2, 4, + 8, 6, 4, 4, 2, -2, -6, -4, -1, -1, 1, 7, 0, -1, -8, -4, -6, -3, 3, 4, 5, 1, 1, 0, -1, 2, 3, 1, -1, -4, + 3, 2, -2, 3, 3, -12, -12, 12, 7, 1, 3, -5, -16, 3, 1, 1, -10, -9, 4, 9, 10, 3, 2, -3, 4, 7, -5, 2, 0, 4, + 4, -4, -8, 1, -4, 1, 4, 1, -2, -9, 4, -2, 1, 4, -5, 12, 0, 2, -9, -5, -12, -3, -6, -10, -2, -6, -4, 0, -4, -5, + 1, -1, 1, 3, 0, -7, -1, 4, 0, 8, -1, -4, -5, 3, 10, 4, 5, 5, -2, -3, -4, 1, 1, 4, -2, -6, -2, 1, 6, 7, + -2, 1, 5, 2, 2, 0, 4, 4, 5, 4, -1, 3, -3, -2, -6, -2, 5, 5, -2, -3, 2, 2, 1, -2, -2, -1, -1, -5, -4, -2, + -2, -7, -7, -1, -7, -7, 0, 0, 3, 6, 5, 0, -7, -5, 2, 0, -4, -1, -1, -3, 3, -4, -2, 4, 4, 0, 3, -6, -5, -3, + -11, -9, -4, -2, -2, 1, -11, -8, -4, -6, -7, -3, -6, -4, 9, 8, 0, 1, 7, 6, 0, 4, -1, 2, -4, 7, 0, 3, 0, -2, + 2, 1, 1, 10, 3, 5, 1, -8, -3, -4, -3, 0, 4, 7, 5, 2, -1, 3, 3, 3, -2, -5, -3, -2, -2, -4, -1, -1, 1, 5, + -1, -4, -9, -5, -2, 0, -3, -2, -1, -1, -1, 1, -2, -3, -4, -4, -5, -10, 0, 0, 2, -1, -4, -2, -2, 0, 3, 2, -4, -4, + 3, 0, 0, 4, 5, 1, 4, 6, 4, -2, 5, 2, 5, -2, -3, 1, -2, -2, -3, 3, -4, 2, 11, 2, 1, 1, 6, 6, 6, -3, + 3, 0, 6, 4, 4, 6, 5, 2, 0, 5, 5, -2, -7, 1, 3, 0, 5, -1, 2, -3, -5, -4, -7, 1, -2, -1, -1, -2, -4, 0, + 1, 1, 4, 3, 1, 0, 3, 4, 6, 0, 4, -1, 13, 7, -2, 4, -5, -4, 18, 5, 0, 4, 3, -2, -1, 6, 8, 5, 0, 4, + 8, -14, -2, 2, -4, 1, -1, -7, -8, -6, -1, -8, 3, -2, -1, -8, -3, 0, 2, 2, 6, 8, 12, -2, -3, -2, -1, 1, 5, -6, + -2, -4, -5, 2, 0, -3, 8, 0, 4, 3, -2, -1, 5, -2, -8, -1, 1, 1, 4, -7, -3, -1, 3, 2, 15, 4, 0, -1, -7, 0, + 0, 1, -4, -1, -4, -4, -3, -3, -8, -2, 2, 1, -2, -4, -2, 1, -1, -5, -5, -4, 6, 2, -7, 0, 2, 2, 3, 1, 2, 1, + -3, -4, -4, -10, -7, -2, -3, 0, 0, 0, -6, -12, -13, -12, -12, -9, -10, -9, -5, -6, -6, 1, 3, 1, 0, 2, 1, -1, -3, -4, + 0, -4, -2, 2, 3, 4, 10, 4, 3, 1, -5, -2, 5, -1, 0, 9, 4, 2, 3, 3, -4, 7, -2, -1, -12, 3, 7, -3, 2, -2, + -2, 2, 12, 4, -1, 2, 6, -2, 2, -1, -1, 0, -4, -3, -4, -3, 2, -1, 8, 1, -1, 0, 0, 4, 0, 1, -1, -4, -1, 3, + 9, 6, 2, 1, 5, 1, 0, 1, 5, 1, -1, -3, -2, 1, 3, 4, 2, 1, -4, 2, 1, -1, -3, 2, 3, 7, 5, 7, 0, -2, + -8, -3, 2, 0, -5, -1, -5, -1, 5, 2, 7, 9, -3, -3, 0, 3, 2, 0, 0, 3, 3, 0, -3, -5, -3, -2, 1, 5, 4, 2, + 6, -5, 0, -2, 1, 0, 4, 4, -3, 0, -2, 1, 2, -4, 5, 3, 1, -1, 2, 4, -1, 3, 0, -5, -7, -1, -4, -1, 3, -1, + -1, 1, 0, 8, 0, 2, -5, -5, 3, 0, 7, 3, 8, 5, 4, -4, -1, -11, 2, -9, 8, -16, -6, 8, 3, 3, -4, -6, -4, 1, + 4, 0, -3, 9, 10, -6, -9, -6, -1, -4, 0, -8, -10, -4, 0, -3, 0, 0, 0, -2, 1, 3, 0, -3, -4, 1, 4, 3, 1, -3, + 0, 0, -1, 7, 6, 6, 3, -1, 11, 11, 5, -2, -5, 4, 6, 3, 5, 9, 10, -11, -8, -7, -3, -3, -1, 8, 0, -5, -3, 3, + 4, 6, 12, 12, 14, 12, 7, 12, 10, 5, 9, 8, 8, 4, 6, -6, 2, -3, 3, 6, 2, 5, 4, 0, -2, 2, 4, 5, 6, 8, + 8, 3, 1, 6, 5, 3, -1, -9, -4, -12, -7, -10, -7, -11, -11, -15, -17, -13, -9, -15, -15, -24, -27, -17, -16, -20, -17, -18, -15, -10, + -12, -2, -9, -5, 0, -7, -4, -1, -4, -4, 3, 4, 11, 11, 10, 10, 8, -4, 3, 1, 4, 5, 4, 2, -4, 0, 2, -4, 5, -4, + -3, -5, -9, -5, -12, -9, -3, -6, 1, -3, 9, 4, 4, -5, 3, 6, -3, -6, -12, -1, -1, -2, 0, 5, 5, -1, 2, 0, -3, -3, + 2, 4, 14, 11, 5, -1, 4, 6, 1, 0, 2, 0, 0, 1, -5, -5, 2, -2, -1, -1, 1, -1, -4, -5, -1, 4, 0, 1, 2, 5, + 7, 2, 7, 5, 4, 5, 5, 1, 1, 0, -3, -2, -1, -4, -2, -3, 4, 0, -2, -6, -6, -5, -3, -2, 4, -1, 6, 2, -2, -3, + -3, 1, 1, -1, 8, 1, 7, 2, 7, 2, 4, 8, 6, 4, 6, 8, 4, 2, 5, -2, -2, -11, -7, -2, -1, 7, 4, 4, 5, 9, + 10, 9, 5, 7, 6, 2, 8, 13, 15, 17, 15, 14, 10, 2, 2, 7, 5, 8, 7, 5, -19, 2, -39, 20, -36, -2, -1, -12, 15, 27, + 10, 3, 4, -3, -2, 9, 1, -3, -1, 8, 0, -4, 2, 3, -3, 1, -4, 6, -1, 6, -3, -2, 3, 5, -1, -3, 7, 6, 4, -1, + -10, 1, 3, -4, -2, -1, 6, 0, 8, -2, -1, 3, 11, 8, 10, 4, 6, 1, 4, 0, 4, 4, 8, 11, -13, -3, -6, -7, -6, 4, + 1, -4, 2, 2, -2, -3, 2, -9, -10, -8, -2, -6, -8, -7, -5, -10, -11, -5, 1, 5, 3, 0, -4, -5, 1, 3, 2, -9, -9, -9, + -9, -20, -14, -19, -23, -21, -20, -21, -23, -25, -17, -19, -18, -21, -11, -7, -5, 3, 11, 6, 9, 10, 9, 6, 12, 8, 6, 13, 16, 10, + 16, 10, 11, 15, 13, 12, 0, -9, -3, -7, -11, 5, -15, -11, -21, -27, -29, -27, -28, -35, -36, -39, -40, -45, -50, -32, -26, -11, -20, -5, + 1, 5, 5, 18, 23, 24, 17, 9, 14, 13, 15, 18, 7, 2, 8, 4, 5, 25, 0, 5, 4, 1, 3, -6, 23, -17, -12, -9, -3, -4, + -2, 2, -1, -5, -2, -4, -5, -4, -4, -5, -11, -10, -7, -9, -12, -9, -8, -5, -7, -7, -4, -2, 0, 1, -1, 5, 4, -2, -3, 4, + 4, -9, -9, 1, 7, -2, 7, 11, 1, -6, 2, 4, -6, -1, -6, -12, -8, -3, -10, -11, -9, -6, 1, 4, 2, 5, 12, 10, 8, 5, + 3, 5, -5, -10, -6, 1, 2, 7, 6, 9, 10, 5, 3, -1, -11, -31, -42, -56, -59, -61, -60, -57, -44, -20, -14, 0, 11, 21, 16, 22, + 28, 30, 20, 15, 6, -2, -6, -10, -7, -5, -16, -31, -30, -38, -41, -44, -43, -20, -16, -11, 3, -4, 0, 13, 33, -75, -6, -113, 64, -127, + -15, -25, -6, -28, -7, 32, -14, -41, -7, 16, -5, 3, 7, 2, -10, -8, 1, 4, -14, -11, 3, 1, -1, -6, -7, 1, -3, 1, -7, -7, + -4, 1, 2, -3, -2, -12, -7, -10, -12, -1, 2, 0, 0, 2, -9, -3, 1, -3, 0, 11, 8, 3, 8, -2, -7, -12, -5, 0, 6, 4, + 0, -2, 2, -1, -1, 0, 0, -4, -5, -1, 1, -3, 3, 0, -1, -1, -2, -1, -5, -2, -4, -3, -2, -5, 2, -2, 1, 0, -2, 0, + -9, 0, -2, 0, 3, -2, 0, 1, -1, 3, -4, -1, 1, 0, -1, -1, 5, 2, -5, -3, -4, -4, -4, -4, 3, 3, -2, 8, 4, -8, + 0, 4, -2, -4, 3, -1, 3, -1, -4, 5, 2, 0, 1, -5, 4, 2, 3, 5, 4, 4, 0, 3, 0, -5, 5, 1, -3, -7, -6, 2, + -2, -1, 6, 0, 3, -2, -5, 5, -6, -4, -5, 8, 7, 7, 0, 1, -1, 1, -4, 4, 4, -2, -5, -2, -2, 0, 3, 1, -4, 3, + 1, 0, -3, 1, 2, 2, 4, 6, 2, 0, 1, 1, 1, 1, -1, -1, 2, 6, 3, 2, -2, 0, 2, 2, 1, -1, 2, 5, 1, -3, + -2, 0, 1, -1, 1, 1, -3, -4, -7, -7, -4, 0, 5, 3, -1, -2, -1, 3, -4, -1, -6, -2, 4, 7, -1, -1, -2, 4, 3, 0, + -2, 1, 1, 1, 2, 6, 1, 0, 1, -1, -2, -2, -1, -4, -2, -2, 0, 0, -1, 0, 0, -4, 1, 0, 6, 2, 4, 3, 4, 8, + 2, 2, 3, 1, 0, 0, -3, -2, -1, 1, -5, -5, -3, -4, -5, -3, -2, 0, -2, 1, -1, -3, -1, 0, -4, 3, 4, 8, 4, 0, + 0, 5, -4, -3, -5, -3, -5, -10, 7, 6, 0, -4, 3, -1, -6, 0, 1, -6, -1, 4, 0, -16, -1, 12, 2, 0, 9, 3, -1, -4, + 3, 1, 2, 7, 2, 2, 5, -9, 4, 2, 0, 3, 4, -7, 2, 0, 1, -4, -2, -7, 1, 8, 2, -1, 3, -4, -4, 3, -9, 3, + 2, 7, -3, -2, -2, 0, 2, -2, 0, 5, 1, -2, -8, -4, -2, -1, -4, -3, -2, -4, -1, -1, -1, -1, 0, 2, -4, -3, -3, 2, + 9, 3, -2, 1, 4, 4, 4, 1, 7, 5, 1, -1, -5, -6, -4, -7, -4, 3, 3, -9, -1, 2, -1, -4, 2, 2, 6, 0, -2, 3, + 0, -5, -3, -2, -6, -1, -1, -4, -6, -1, 7, 3, 9, 0, -2, 3, 5, -5, -7, -3, -3, 8, -8, 0, 6, 1, 7, 3, -3, 2, + 2, 2, -3, 3, 0, -1, -1, -1, -8, -2, -1, -5, -1, -9, 1, -2, 0, 6, 2, 2, 0, 5, 5, 0, -1, -1, -11, 2, -3, 2, + 2, 1, -1, -3, 5, -3, 2, -1, 0, 1, 2, -1, 2, 1, 4, 1, 4, 5, 2, -1, -1, 2, -3, 1, 2, 2, 0, 1, -3, -2, + -3, -3, -3, -1, 0, 4, 3, 3, 0, 0, 0, -1, -4, 0, -3, -2, -1, 6, 0, -2, 3, 2, -2, 2, 2, 4, -1, 0, 7, 3, + 2, 2, 4, 4, 2, 1, 1, 0, 2, 3, -4, -3, 0, -6, -3, -1, 3, 1, -1, 0, 3, 1, 0, 3, 1, 4, 1, -2, -5, 3, + 1, 1, 3, 4, 4, 1, -2, -3, 0, -3, 1, -1, -1, -2, 4, -3, -1, -2, -6, -3, -1, 1, 5, 1, -1, -2, -4, -4, -2, -1, + 1, 7, -2, -2, -2, 0, 9, 3, 0, -2, 4, 6, 1, -8, 0, 7, 2, -2, 1, -4, 3, 3, 1, 2, -3, -2, -9, 4, 3, -1, + -2, 7, -1, 2, 2, 2, 4, -1, 7, 3, -4, 2, -5, -1, 4, 3, -4, 1, 0, 5, 6, 2, -4, 0, 5, -7, 5, 2, -5, 1, + -2, -2, -3, -6, 0, -1, 4, 0, -1, -2, 3, 1, -2, -2, -3, -2, 1, 2, 6, 1, -1, -1, 0, 1, 5, 1, -1, -1, -2, 6, + 0, -4, -2, -3, 4, 8, 1, -4, -11, -2, -4, -6, -3, -5, 0, 0, 0, 1, 3, -4, -2, 6, 2, -3, -8, -4, 1, 2, -2, 4, + 1, -1, 0, 5, 4, 3, 3, -2, -5, 6, 0, 1, 0, -4, -6, -1, 2, 5, 2, -1, -3, 3, 5, -2, -4, 2, 0, 6, -1, 4, + -1, 0, -2, 3, 1, 0, 0, -2, -1, 1, -5, -2, 1, -7, -1, -4, 3, 1, -5, -1, 3, -3, 2, -4, 0, -2, -2, 3, -1, -1, + 2, -8, 1, 2, -4, -2, -4, -7, 1, -2, -2, -3, -2, -6, -3, 1, 5, 3, 1, -1, 0, 1, 4, 2, -1, 2, 1, -2, -3, 1, + -2, 2, 2, -3, -1, -3, -3, 0, 0, 1, 3, 4, 1, 3, 0, -1, -2, 5, 1, 1, 0, 2, -1, 0, -1, 0, 0, 0, 2, -1, + -3, 5, 4, 0, -3, -1, 2, -2, 2, 1, -2, 0, 3, -1, -1, -4, -1, -3, -2, -2, 4, 5, 0, 1, 4, 4, 0, 2, 0, 1, + 4, -2, -4, -1, 0, 0, -1, 3, 5, 4, -1, 1, 6, -4, -3, 1, 4, 1, 1, -2, -3, 0, 1, -2, -3, 1, 4, 4, -3, 0, + 1, -1, 5, 0, 4, 1, -1, 3, 2, -3, 6, 11, 6, 2, -5, -7, 7, -7, -4, -2, 0, 8, 2, -13, -5, 5, 2, 2, 0, -3, + -4, 0, -2, 0, -1, -3, -8, -1, -4, 0, -1, 5, -1, 0, -4, -3, 2, 0, -3, -6, -4, 0, -1, -6, -5, -5, -2, -2, -8, -6, + -4, -1, 1, -1, -2, 3, -2, 1, 0, 5, 7, 2, -3, -1, 6, 3, 5, 3, -4, 0, -3, 1, 0, 0, -3, -5, -1, -2, 0, -1, + -4, -10, 0, 1, 4, 7, 5, 0, 2, -1, -6, -5, 2, 4, 1, 1, -1, 6, -1, -7, -5, 0, 4, 3, 1, 6, 3, -3, -4, 2, + 0, 5, 4, 3, -1, -5, 1, -1, 5, 1, -7, -3, 5, 6, 2, 2, -6, 2, 0, 1, -1, -1, -1, 6, 12, 7, 3, 4, 5, 3, + -3, -6, -2, 4, -1, 1, 6, 2, -7, -8, 4, 3, 0, 0, 0, -3, 1, 4, 1, -8, 0, 0, -2, -2, 0, 1, -8, -3, -1, 0, + -5, 1, 3, -4, -4, -5, -3, 9, 8, 3, 5, 0, 2, 4, 3, 2, -2, -1, -7, -4, -3, 3, -1, 3, 0, -3, 1, 0, 0, 0, + -2, 0, 0, 1, 1, -1, -1, -2, -1, -2, 1, -2, -2, 3, 3, 0, 0, 1, -1, -5, -10, -6, -1, -4, -4, 2, 2, -2, -3, 2, + 1, 1, 2, 2, -2, 0, 0, 0, 0, -1, 3, 2, 2, -1, 1, 2, -1, 3, 8, 7, 1, 2, -3, -3, -2, 0, -2, 1, -4, 4, + 5, 4, -4, -4, 0, 4, -1, -1, 3, -3, -2, -7, 1, 6, 2, 3, -2, -1, -1, -1, 2, -4, -5, -4, 0, 0, 3, 0, 4, -1, + -4, 0, 0, -2, 1, 0, 1, 0, -1, 2, 6, -1, 2, 6, 4, -4, 4, 1, -2, 2, -10, 5, -6, -7, -8, -5, 1, 2, -1, 3, + 0, 0, -2, -4, -6, -6, -1, -5, -10, -3, -1, -4, 3, -6, 0, 2, 3, 3, 5, -2, -4, 0, 0, -2, 0, -1, 2, 3, -1, 3, + 0, -5, 4, -4, -6, 3, -3, 3, -3, 0, 8, 6, 3, 1, 2, 2, 3, 1, -5, 11, 4, 0, 0, 1, -3, -5, -2, -4, 4, 2, + -1, -3, -2, 0, -3, 2, 1, 0, 3, 4, 11, 12, 12, 8, 3, 4, 1, -2, -4, -6, -12, -6, -1, 0, -1, -1, -7, -3, -4, -3, + -1, 4, 3, 0, 3, 1, 3, 4, -2, 2, 2, -2, 0, 2, 0, -5, -3, -2, -3, -10, -8, -1, 7, 2, 4, 4, 9, 8, 7, 5, + 0, 2, 4, 0, 2, 5, -3, 1, -4, -1, -3, -10, -7, -14, -11, -9, -6, 1, 2, 2, 3, 11, 6, -1, 5, 1, 0, -1, 0, 2, + -1, -5, -12, -4, -9, -11, -11, -4, -2, 4, 4, 2, 8, 13, -3, -6, -3, -7, -1, 3, 8, 2, 1, 0, -1, 0, 2, 3, 1, -2, + -2, 2, -2, 3, -1, 3, 3, 2, 1, 2, 3, 2, 2, 2, 1, 3, 4, -1, 0, -1, 3, 5, 6, 7, 2, -4, -3, -1, -1, -1, + 1, -2, -1, 2, 1, -3, -4, -2, 1, 1, 2, -1, 0, -2, -2, -1, 4, 0, -1, 3, -1, 1, 5, 3, 3, 4, 8, 5, 8, 5, + 1, 4, 5, 7, 3, 4, -4, -5, -5, 0, 5, 2, 4, 5, 6, -1, -4, -1, 4, 3, 2, 4, 4, 4, 8, 3, 8, 3, 3, 0, + 2, 0, 4, 2, -6, 3, -1, -1, 0, 1, 4, 7, 3, 0, 1, 2, 1, -6, -3, -3, -11, 13, 7, -25, 28, -19, 2, -15, -4, 6, + 14, -3, 4, 4, -2, -3, -1, 0, 3, -1, 7, -1, -4, -1, 2, -2, -4, -1, 3, 2, 4, 0, -5, -4, -3, -3, -3, 1, 1, -4, + 3, 4, 1, -4, 8, 4, 0, 2, -4, 2, 2, 4, 2, 4, 5, 4, 3, -2, 7, 5, 1, 3, 6, -11, 33, -7, -4, 0, -1, -4, + 1, 5, 7, 4, 1, 2, 0, -3, -6, -7, -7, 1, 2, 2, 4, 3, -1, 0, 0, 0, -3, 0, 4, 6, 6, 6, 7, 5, 3, -1, + -3, -1, -1, 3, -3, -2, -2, -2, 2, 2, 4, 4, 4, 7, -5, -5, 2, 6, 2, 0, 0, -7, -8, -12, -10, -5, -3, 0, 1, 4, + 1, -1, 3, -4, -3, -2, -3, 0, -3, -2, -3, -4, -3, -7, -3, -6, -4, -2, 1, 2, -5, -10, 0, 3, 6, 1, 0, -4, -13, -17, + -17, -20, -15, -5, -13, -5, -6, -16, -16, -6, -17, -14, -5, -5, 8, 4, -3, -6, -13, -4, -30, -26, -34, -10, -17, -10, -10, -4, -7, -6, + -4, -2, 0, 0, 1, 1, 1, -1, -1, -1, -1, 1, 0, -3, -4, -4, -2, 0, -2, -3, -5, -3, -1, 2, 5, 8, 8, 8, 6, 8, + 8, 6, 5, 3, 3, 3, 4, 10, 7, 5, 9, 5, 9, 4, 3, 0, -2, -3, -2, -1, -2, -3, -3, 2, 5, 3, 6, 0, -4, -5, + -11, -17, -20, -19, -16, -11, -6, 6, 8, 18, 25, 22, 18, 10, 16, 16, 15, 20, 26, 27, 22, 29, 32, 26, 20, 9, -11, -28, -42, -50, + -61, -63, -44, -29, -10, 15, 20, 27, 30, 30, 39, 41, 40, 39, 21, 1, -20, -55, -74, -76, -61, -33, -12, 5, 21, -21, 18, -12, -88, 127, + -74, 30, -28, -4, 58, -18, 12, -26, 49, 16, -16, -25, 6, 28, -14, -17, -9, 9, 10, -8, 2, 9, 5, -13, -3, -6, 2, 2, -8, -11, + -2, 1, -4, 8, 4, -2, -3, -2, -6, -5, -7, -10, -11, -4, 2, 0, -5, -3, -8, -6, -4, -13, -7, -5, -2, -5, -12, -9, -17, 54, + -3, -6, 2, -5, -3, 3, 2, -3, 2, 3, 2, -1, -10, -1, 5, 3, -1, 9, -3, -1, 4, -3, -8, -4, 1, 0, 4, -3, -3, -2, + -5, -2, 3, -2, -2, 0, -7, -3, 7, 2, 0, -1, -4, 2, 0, -4, -5, 4, -4, -2, 5, 2, -1, -3, -1, -2, -5, -13, -13, -7, + -4, -8, -1, 13, 11, 15, 4, -7, -9, -1, 2, 0, 7, -2, 1, -4, -10, -5, -5, -1, -3, 0, 1, 12, 4, -7, 5, -5, -5, -2, + -11, -4, -5, -2, -4, 6, 6, 9, 0, -9, -5, 2, 2, 3, 5, -6, -4, 0, 3, 8, 2, 10, -7, -4, -9, -1, -4, 9, 3, -1, + -5, -5, 0, -3, 0, -3, 1, -1, 5, 2, 0, 0, -2, -5, -3, -2, 5, 6, 5, 0, 0, 3, -6, -7, -3, -2, -3, 0, 4, 1, + 5, -3, 3, 9, -2, 0, -2, -2, -5, -5, -1, 0, -4, 3, 2, -10, -2, -1, 0, 1, 1, 4, -1, -3, -5, -1, -8, -6, -7, -5, + 1, 6, 4, 5, 8, 6, 0, -4, -6, -5, -3, -1, 6, 4, 8, 7, 8, 3, 6, 4, 7, 6, 6, 7, -5, -7, -2, 3, -1, 1, + 0, 0, 1, 7, 6, -1, -5, 0, 0, 7, 1, 13, 6, 7, 3, 5, -1, 0, -3, -3, -2, -7, -5, 0, -7, 2, 1, 2, 3, 7, + 10, -1, 4, 4, 4, 4, 10, -3, 0, 1, -6, -18, -10, 5, -1, 0, 8, -3, 14, -1, -3, -5, -10, 10, 9, 0, -1, -2, -7, -1, + -7, -12, 1, 4, -5, 4, -5, -4, 0, -8, 3, -2, -2, -7, -1, 1, 5, 1, 7, 6, -3, 11, 3, -1, 4, 5, 2, 8, 2, -3, + -3, -1, -2, -8, -27, 0, 1, 3, -3, 3, 4, 2, -4, 5, 5, -4, 5, 6, 4, 0, -1, 4, 8, 1, 2, 3, 2, -1, 0, 2, + 1, -1, -4, -6, -3, -2, -1, -3, -7, -3, -4, -3, -3, 2, 10, 5, -2, -2, -2, -2, 3, -1, 3, -2, -12, -4, 0, -3, 0, 8, + 2, 1, 3, 0, -7, -9, 3, -1, 2, -5, -3, 2, 0, 2, 0, 0, 0, -2, -8, -5, 0, 4, -2, -2, -3, 1, -1, -2, 1, -4, + 2, 1, -6, 2, 2, 5, 6, 7, -1, -1, 1, 4, 1, -10, -7, 4, -4, -6, -8, 5, 3, 6, 11, 7, 1, 1, -3, -10, -1, 3, + -4, 0, -1, -9, -1, -3, 1, -1, -3, 3, 1, 2, -2, -1, -6, 0, -1, 4, 0, -3, -6, -2, 4, 0, 1, -4, -3, -5, -4, -5, + -3, 2, 1, 1, -2, 2, 4, -3, -3, 0, -3, -5, -2, -1, 4, -1, -2, -2, 0, -1, 0, -2, 0, -5, -1, -8, -2, 2, -1, 4, + 6, 5, 5, 1, -3, -8, -1, 4, -3, -4, -8, 5, 4, 3, 0, 2, -1, -9, -5, -6, -5, 0, 1, 1, -5, -5, 1, -2, 3, 4, + -1, -2, -7, -2, -3, -3, 3, 9, 1, -1, 8, 0, 1, -6, -1, -1, 2, -3, -6, -1, 3, 0, 2, -1, 7, 6, 2, 11, 4, 0, + 1, 3, -1, 2, -3, 11, -6, 15, 6, -2, 1, 6, -6, 0, 1, -3, -2, -11, -6, -7, 5, -1, 7, 12, 7, 3, 5, -14, 0, 12, + 6, 3, -4, -7, 7, 2, -9, -8, 8, 7, 0, 5, -12, 7, 6, -1, 1, -2, -4, 5, -1, 2, -3, 4, 3, -3, 9, -2, -5, 8, + -2, -9, 5, 2, 11, 10, 9, 4, 9, -15, 1, 5, 5, 0, -7, 3, 2, 2, 2, -2, -5, 0, -7, 1, -3, -10, -10, -1, 9, 3, + 6, 3, -4, -5, 3, -3, 1, 0, 7, -3, 3, 1, 1, -2, -2, 7, -2, 1, -10, 2, 4, -4, -7, -7, 0, -5, -6, -5, 0, -6, + -1, -2, 6, 7, 1, -3, -1, -6, 4, 3, -6, 0, 2, 8, 5, 3, -1, 6, 4, -1, -6, -8, 5, 4, 6, 3, 5, -4, 3, 3, + -5, -2, -4, 0, -4, -1, -4, -5, -10, -3, 4, -2, -2, -3, 3, -2, 6, 5, -1, 6, 1, -8, -1, -4, 13, 2, -2, 12, 1, 13, + 0, 2, -3, -4, 6, 7, 6, -1, -4, -6, 8, 1, -2, -1, -1, 1, 7, 3, 0, -2, 3, 2, -2, 2, 2, -1, 3, -1, 0, 0, + 2, 1, -1, -1, -5, -3, -4, -7, -3, -7, -3, -2, -7, -4, -1, 3, 4, 6, 1, 5, 7, 5, 7, 0, -2, 4, 0, 2, 5, -4, + -5, 3, 5, 6, 4, 9, 11, 3, 3, 6, 3, -6, 0, 0, -3, -10, -2, -2, -6, -3, -4, -6, 0, 1, 2, 1, -4, 2, 3, 2, + -4, -7, -2, 3, -2, -4, 2, 0, -4, 4, -2, -6, 2, -3, -4, 3, 4, -7, -3, -2, -6, 1, 3, 9, 5, -6, -10, -3, 0, 8, + 1, -2, -1, 0, -2, 3, 7, -3, 9, -8, 0, -16, 12, 0, 0, -9, 5, -16, -8, 2, -3, 18, -8, -4, -7, -7, -2, -4, -6, 0, + 1, 2, -18, -6, 7, -2, -1, 1, 0, -1, 2, 0, 9, 10, 3, 19, 2, -7, -4, 9, 7, -5, 4, 10, 3, 2, -4, -6, 6, 0, + 4, -5, -1, 2, -1, 1, -4, 9, -2, -4, 6, -4, -8, -2, 13, -1, -2, -7, 0, 0, 6, 4, 3, 3, 0, 0, 1, -4, -7, -2, + -7, 0, 6, 3, 1, 2, 0, 0, -9, -8, -4, 6, 7, -7, -9, -6, -5, 1, -3, 2, 3, 8, -5, -7, -4, 0, -1, -6, 3, 2, + 1, -5, -4, -5, -3, 0, -1, -2, -1, 2, -3, 4, -3, 1, -3, 2, 5, 8, 5, 5, 0, 3, 8, 0, -1, 6, 9, 11, 5, -7, + -4, -5, 4, 9, -2, -13, -1, 5, -1, 5, -6, 0, -8, -3, -10, -2, -6, -4, -4, -12, -8, -6, -11, 2, -5, 0, -1, -7, -7, 8, + 3, 15, 8, 6, 3, -4, 1, 5, -4, 4, -3, -6, 12, 2, -6, 2, -1, -1, -3, -4, 1, 3, -2, 2, -2, -4, -7, 0, -5, -7, + 1, -1, 0, 0, 5, 3, 0, -3, -6, -6, -2, 1, -1, 3, -1, 6, 6, 0, 1, 3, 1, 0, -4, -5, -3, -1, -5, 3, 2, 0, + 3, 3, 8, 7, 10, 6, 6, 6, 6, 5, 6, 3, -3, 4, 5, -7, -10, -6, -1, 4, 1, -4, -1, -4, 2, -2, -3, -4, -6, 0, + 3, 3, 3, 1, 1, -1, 3, 5, 5, 0, 2, 0, 1, -3, -2, -3, -10, -5, -3, 5, 1, 4, -3, 0, -2, 0, 4, 4, 1, 6, + 3, -2, -5, 1, -1, 3, 3, -4, -6, -2, 3, 4, 5, 2, 3, -12, -16, 45, -4, 10, 28, 35, -22, 3, 16, 5, 21, 7, -10, -4, + 0, -3, 15, 5, -6, -3, -6, -2, -4, 8, -3, -12, -13, -4, -6, 0, 7, 6, 1, -5, -3, -6, -4, 0, 15, 3, -1, 5, -1, 0, + 5, -7, -5, -12, -6, -3, -6, -6, -3, -5, -11, -8, -6, -9, -7, -7, -12, -2, -2, 44, -6, -2, -1, -5, -4, 1, -1, -3, -8, -4, + -6, 5, -3, -6, -9, -6, -1, -3, -8, -4, 0, 2, 6, 7, 6, 4, -2, -5, -3, -1, 1, -2, -2, 5, 3, 12, 6, 5, 9, 15, + 4, -2, 3, 12, 9, 8, 3, 6, 6, -2, 0, 4, 6, 2, -1, -7, 6, 7, 3, 4, -5, -1, -1, -16, -13, -1, -10, -11, 4, -1, + 2, -1, 1, -3, 5, -2, -6, 7, 10, 10, 10, 11, 12, 16, 11, 13, 6, 13, 14, 7, 3, -5, -4, 4, -12, -13, -5, -11, -19, -14, + -23, -15, 1, -14, -2, -12, -19, -6, -10, -8, 6, 0, 4, 6, 3, -10, -12, -5, -5, -22, -5, -1, -3, -3, 1, 0, 0, 4, -2, -1, + 0, -5, -3, -4, -4, -5, 0, 0, 1, -2, 2, 1, 2, 2, 1, 2, 5, 4, 4, 3, 4, 8, -1, 4, -1, 3, -3, -6, -1, -5, + -1, 0, 0, -3, 4, 0, 3, 9, 7, 3, 3, 7, 7, 1, 6, 8, 5, 4, 3, -1, -5, -10, -7, -7, 0, 6, -2, 3, 7, 8, + -3, -8, -2, -1, 0, 5, -1, 2, -7, 9, 7, 10, 15, 16, 17, 10, 11, 4, 1, 0, -5, -14, -18, -14, -19, -14, -4, 0, 2, 6, + 4, 5, 4, -2, -12, -1, 0, -2, 5, 4, 13, 10, 7, 8, 14, 16, 4, 0, 2, -5, -34, -46, 67, -25, 26, 49, 52, -55, 31, 7, + 1, 38, 20, -8, -3, -6, -5, -2, 8, -1, -7, 0, 2, 1, 11, -11, -18, -7, -5, -4, -6, 1, 3, -3, 4, 4, -11, -1, 7, 13, + 11, 1, 0, -1, -16, -14, -16, -9, -5, -8, -9, 0, -2, -9, -11, -8, -3, -1, -4, -8, -11, -14, -10, -19, 78, 4, 7, 7, 9, 3, + 3, -10, -12, -3, -3, 12, 22, 19, 18, 15, 3, -3, -10, -9, 6, 19, 25, 12, -5, -9, -8, -9, -2, 3, 0, 7, 5, 2, -5, -4, + -4, -8, -9, 5, 12, 9, 6, 10, 4, 7, 21, 26, 23, 8, -3, -16, -25, -32, -23, -18, 1, 16, 22, 22, 23, 17, 12, 1, -9, -13, + 4, 8, 9, 3, -8, -10, -11, -9, -2, -6, -12, -2, 4, 2, 0, -4, -3, -2, 10, 15, 11, -1, 5, 6, -4, 6, 21, 36, 34, 12, + -8, -24, -37, -38, -28, -3, 11, 33, 25, 16, 1, -8, -21, -35, -30, -2, 8, 12, 10, 5, -11, -27, -12, 10, 1, -10, -9, -5, -2, -4, + 3, 3, -1, -2, -2, -5, 2, 0, 2, -1, -4, 1, 7, 7, 5, 8, 6, 6, 5, 2, 0, 4, 4, -2, 2, 3, -1, -6, -3, -2, + 0, 6, 7, 5, 4, 7, 10, 13, 12, 11, 11, 0, -6, -20, -25, -37, -45, -51, -45, -29, -20, -5, 9, 9, 7, 14, 12, 8, 4, 0, + -1, -4, -6, -8, -18, -21, -25, -25, -16, -5, 7, 9, 7, 4, -2, 3, 3, -4, 0, 6, 9, 10, 12, 19, 36, 49, 47, 43, 24, -22, + -73, -104, -127, -127, -91, -48, -11, 26, 31, 19, 9, -4, -24, -37, -31, -11, 4, -11, -14, -26, -38, -34, -18, -14, -9, -28, -44, 71, -69, 22, + 12, 16, -91, 46, -19, -27, 54, -11, -17, 37, -31, -32, 58, -15, 0, 15, -19, 7, 23, 2, 1, 8, -17, -3, 0, -11, 2, 0, 2, -2, + 10, -15, 0, 18, 12, 0, 2, 6, -2, -6, 4, -1, -10, 1, 4, 11, 15, 4, 7, 15, 15, -3, 6, 5, 7, 7, 4, 2, -6, 59, + 2, -2, -7, 3, 9, 3, -4, 2, 7, 3, 5, -5, -2, -6, -6, -4, -9, -7, -2, 4, 2, 11, 6, 2, 1, -1, 0, -5, -3, -5, + -8, 5, 2, 3, 0, -11, -6, -6, 1, 4, -5, -1, -1, -3, -1, 5, 0, -4, 5, 15, 11, 6, 7, 9, 13, -1, 8, 1, 1, 6, + 12, 2, -13, -14, 0, 2, 1, -1, -12, 2, 2, -4, -1, -4, -6, -8, 0, -5, -10, 7, -2, 1, -9, -13, -6, -3, -13, -9, -7, -19, + -6, -5, -3, -5, 6, 14, 8, 0, 0, -8, -6, 2, -7, -6, 1, -5, -13, -2, 1, 6, 8, 5, 5, 0, 9, -13, -8, -3, 2, 16, + 4, -5, -1, -4, -7, -7, -1, -4, -8, -6, -5, -1, 0, -1, -7, -11, -5, -2, 4, 2, 4, 2, 1, 5, 0, 7, 9, 6, -1, 1, + 1, -2, 3, 6, 2, -3, 4, -2, -4, -1, 8, 3, -2, 5, 4, 2, -7, -4, -7, 0, 0, -1, -1, 10, 8, 7, 13, 9, 8, -2, + 3, 0, -1, 3, -3, 2, 2, -4, -6, -7, 0, 8, 6, 5, -3, 4, -6, -7, 2, 3, -12, -4, 5, -6, 7, 7, 3, 0, -3, -4, + 8, 2, 10, -1, -4, 3, -5, -4, -4, -4, -4, -5, 1, 13, 6, 1, 5, 3, 10, 4, 3, 3, 1, 5, 7, 3, 6, -5, -6, 10, + -28, 12, 27, -2, -1, 11, 18, 19, 14, -1, -4, -25, -16, 2, -11, 3, -10, -4, 3, -4, 5, 13, 8, 27, 6, -11, 8, 0, 9, 2, + -8, 1, -6, 3, 6, 9, -5, -5, -9, -2, -11, -7, -11, -7, -1, -20, -6, -1, -2, -18, -4, -9, 1, 10, 2, 5, -5, 15, 1, -10, + -6, 2, -8, -1, 0, -3, 4, 5, 0, 0, -1, -13, -4, -5, 0, -4, -1, -7, -2, -4, 1, 4, -6, -13, -4, -3, -6, -3, -6, -2, + -13, -9, -5, -5, 11, 9, 1, -2, 7, 3, 1, -7, -6, 6, 1, -6, 2, 8, -4, -9, -3, 6, 4, 0, 11, 3, 0, 4, 13, 3, + 9, 12, 6, 0, 0, 6, 10, 6, -4, 12, 7, 3, 3, -7, -1, 10, 1, 0, 1, 8, 2, -6, -6, -7, -5, -2, 0, -3, -3, -11, + -4, -14, 9, -1, -8, 0, -9, -5, -6, 6, 7, -1, 2, 5, -12, 12, 1, 5, 7, 0, -10, -8, -7, -2, -7, 5, -9, 5, 1, 17, + 2, 5, -5, -6, 5, -11, -7, -3, -1, 1, 2, 2, 0, -1, -5, -2, -6, -2, -3, 1, 0, 1, -3, -7, 0, -3, 0, 1, 6, 8, + -1, 3, -1, -8, -11, -8, -7, -2, -8, 2, -5, 0, -2, 6, 4, -4, -7, 1, 2, 1, 3, -2, -1, -1, 2, 2, 4, 2, 1, 3, + 7, 5, 4, 6, 2, -1, 1, 5, -3, 10, -4, -1, -6, -2, -3, -3, 8, 7, -3, -5, -1, 4, 9, 7, 3, 2, 4, 2, -3, 0, + 6, 1, -9, -3, -10, -4, -11, 5, 1, -2, 1, 0, 5, 5, 3, 1, -6, 7, 10, 1, -5, -4, -7, -4, -1, 3, 7, -3, 5, 3, + -4, 6, 4, 1, 8, -38, 2, 27, 3, -14, 12, 20, 2, -1, 15, -11, -22, -8, 0, -6, 2, -14, -7, 4, -6, -8, 0, -1, 10, -4, + 3, 11, 5, 5, 11, -7, -4, 5, 8, 2, 3, 9, -11, 0, 7, 0, -8, -10, 1, 8, -2, 3, 7, 6, 1, -7, -4, -8, -4, 4, + 3, 0, 2, 6, -9, -11, -1, -8, 8, 0, 6, -6, -7, -3, -5, -9, 6, 5, 3, -2, -7, 2, -4, 5, -3, -2, -4, -6, -3, 2, + -1, 2, -4, -5, -3, -8, -4, -6, -6, 0, 6, 13, 5, 8, -9, -1, -4, 12, 9, -5, -4, 4, 15, 3, 7, 5, 3, 0, -3, 9, + 10, 6, 13, 5, -11, 7, -2, 8, -7, -18, -15, 4, 2, 11, 1, -4, 5, -1, -14, -2, -11, -4, -2, -12, 4, 8, 13, 3, 15, -2, + 6, -1, -4, 16, -11, 8, -4, 13, -14, 6, 0, 0, 1, -1, -2, 7, -10, -4, -9, 5, 9, -6, -1, -8, -12, -6, -14, 1, 3, 4, + 15, 3, 20, 11, 14, -6, -12, -1, -2, 15, 1, -2, -4, -4, -1, -10, -7, 0, -3, 5, 8, 0, -3, -1, 8, 10, 3, 7, 3, 3, + 10, -3, -2, 0, 1, 6, 2, -1, -1, -3, 2, 1, 12, 12, 3, 4, 2, 0, -1, -8, -1, -9, -8, -1, -4, -5, -8, -5, -4, -1, + 5, 1, 4, 0, -2, -4, 0, 1, 2, 1, 4, -2, 1, 9, 5, 0, 3, 3, -6, -3, -6, -2, -6, -8, -4, -5, -1, -1, 5, 5, + 5, 0, 4, 3, -2, -2, 1, -2, -4, -2, -10, 3, 7, 6, 10, 4, -2, 7, -8, -2, 1, -7, -9, 1, 8, 11, 5, -1, 2, -10, + -1, -4, -5, -5, -7, -10, -4, 11, 6, 1, -27, -14, 10, 5, -8, 4, 9, 13, 2, 1, -6, -9, 3, 10, -3, 3, 1, -5, 3, -10, + 0, 15, 0, 12, -2, 2, 6, 1, 2, 10, -2, -5, 8, 6, -7, 0, 5, -4, 7, -4, 11, 9, 2, -1, -1, 4, -6, 6, 2, -7, + -5, -4, -11, -3, 1, 7, -5, -6, 0, -2, -5, -14, -13, -2, -7, 9, 7, 2, 19, 17, 5, 1, 4, 2, 1, -8, 7, 0, 4, 0, + 5, -1, 1, 4, -1, 1, 4, -3, 1, 2, -1, 2, 9, -3, -8, -13, -11, 1, 5, 3, 2, -8, -6, 4, 2, 2, 2, 13, 16, 5, + 12, 6, 2, -3, -5, 5, -7, 1, 2, -8, -5, -8, -4, -10, -4, -4, 6, 1, 10, 8, -3, -2, 8, -10, 5, 6, 2, 8, -6, -13, + 1, 1, -8, 2, -4, -8, -7, -24, -8, -9, 8, 3, 9, 7, 3, 3, 3, 0, 1, 3, 27, 15, 13, 5, 0, 9, -1, -6, 0, 5, + -6, -3, -4, -4, -8, -12, -9, 2, 1, 10, 4, 1, 7, -4, -2, -8, 0, -1, 7, 5, 8, 3, -2, 1, 6, 7, -1, 1, 0, 7, + 6, 2, -5, -4, -4, 0, -4, -6, -4, 6, 1, 6, 3, 4, -1, -6, -3, 3, 5, 1, 5, 5, -3, 0, -2, -1, -3, -4, 4, 3, + -2, -7, -1, -7, -8, 0, -2, 6, 2, -2, -5, -10, -12, -11, -4, -9, -3, 1, -4, 0, -3, 11, -1, -7, -7, -8, -8, 5, -2, 8, + 9, 4, -3, -6, 1, -3, -8, -11, -14, 3, 4, 8, 5, 1, 7, 8, -2, 6, 4, -1, -9, -11, -8, 1, -6, -4, -8, 0, 5, -5, + 4, 2, 7, 17, -8, -7, -12, -5, 1, -1, 7, 9, 8, -2, -5, -19, 4, 45, 1, -9, 19, -12, 11, -5, 5, -9, -10, 10, 20, -9, + 9, -7, 4, 14, 1, 15, 10, -14, -6, -10, -8, -3, 5, 11, 2, -4, 4, -1, 6, -10, -1, -2, 0, -3, 2, 0, 7, -1, 0, 10, + 11, 2, 2, 3, 5, 1, 1, 7, 5, 4, 5, 1, 4, 4, 1, 6, -5, -3, -8, -5, 7, -1, -2, -3, -3, -5, -8, -5, -9, -1, + 10, 13, 6, 6, 4, 2, 9, -4, -7, 7, 5, 12, 8, -5, 0, -5, -4, -7, -8, -10, -1, -4, 2, -10, -24, -25, -11, -4, 11, -1, + -14, -9, 0, 12, -6, -5, -26, -31, -18, -14, -4, -2, -9, -18, -16, -1, -11, -5, -2, 0, -10, -2, -4, -19, -11, -9, -4, 2, -9, -4, + 1, -12, -8, -14, -11, -5, -20, -22, -19, -29, -38, -23, -21, -7, 0, 6, 12, 24, 36, 18, 29, 21, 9, 1, 19, 15, 14, 3, 2, 12, + 5, -6, -17, -12, -2, 2, -3, 6, 5, -7, 12, 10, 13, 18, 6, 5, 7, 7, 9, 5, 2, -1, 7, 11, 8, 1, -3, -2, -4, 2, + -4, -3, 1, -5, -2, -1, -8, -10, -3, -2, 2, 7, 1, -2, -2, 5, 4, 4, -3, -5, -1, 5, -3, -6, -8, 1, -3, -2, -3, -5, + 5, -1, -1, 6, 8, 4, 1, 5, 5, 9, 16, 5, 6, -3, -7, -5, 4, 7, -1, -4, 2, 10, 1, -2, -6, 5, 5, 10, -1, -3, + 7, -3, -1, -3, 5, -4, 0, -2, -2, -9, -6, -5, -5, -1, 8, 7, 10, 13, 15, 8, 11, 8, -2, 1, 9, 15, 8, 7, 9, 0, + -2, -10, -11, -13, -8, -15, -9, 0, -2, -11, -8, -4, -4, -13, -21, -18, -13, 2, -1, 5, -44, 12, 42, 18, 37, 41, -10, 24, -34, 18, + -10, -14, 12, 19, -3, -8, -1, 8, -5, -18, -5, 8, -7, -12, -6, -4, -5, 6, -4, 0, -7, 4, -3, 2, -8, 7, 2, 0, 3, -8, + 6, 6, -1, 8, 4, 8, -18, 2, 0, -2, -17, 6, 4, 9, 1, 6, 0, -1, 4, -8, -7, -7, -18, -21, -4, -3, 2, -4, 4, 3, + -2, -12, -10, -25, -20, -15, 4, 7, -6, 2, -5, -18, -24, -14, -17, -20, -14, -17, -15, -7, -7, -11, -30, -19, -9, -5, -17, -21, -21, -33, + -31, -21, -8, 11, 12, 5, 7, 9, -10, -6, 6, 7, 1, -5, 0, 6, 13, 12, 15, 19, 0, 1, 9, -4, -6, -6, -30, -39, -26, -35, + -37, -20, -25, -33, -22, -12, -11, -21, -26, -16, -3, -13, -39, -39, -53, -54, -36, -18, -1, 21, 32, 34, 30, 20, 10, 19, 23, 24, 22, 32, + 9, 14, 3, 3, -1, 4, 0, -3, 12, 13, 14, 16, 25, 23, 50, 44, 32, 32, 22, 15, 14, -6, 7, -3, 7, -14, -17, -6, -9, -3, + 4, 13, 10, 11, 20, 6, 7, -5, 1, 6, 7, 7, 3, 5, 4, 9, 11, 9, 12, 11, 10, 6, 3, -4, -5, 4, 7, 12, 16, 17, + 10, 7, 10, 16, 12, 3, 9, 11, 1, 6, 9, 10, 6, 6, 7, 14, 12, 22, 27, 25, 23, 20, 11, 0, -18, -24, -39, -46, -49, -58, + -66, -39, -37, -29, -18, -14, -11, -18, -29, -34, -44, -61, -75, -87, -83, -75, -48, -36, -8, 19, 24, 35, 31, 31, 22, 25, 15, 21, 15, 15, + 13, 22, 20, 20, 16, 28, 24, 35, 32, 47, 36, 21, 11, -4, -24, -26, -30, -37, -40, -39, -37, -21, -18, -7, -6, -107, 50, 80, -88, 15, + 2, -72, 35, -127, 71, -48, 7, 0, 31, 9, 1, -9, 10, -8, 3, 11, 20, -8, -17, 9, -9, 2, 5, -8, -10, -13, -7, 3, -3, -12, + -5, 11, 9, 2, -22, 3, 8, 10, -10, -2, -8, 7, 5, 4, -2, -8, 9, 0, 18, 15, 15, 10, 7, 8, -5, -6, -11, -10, -10, -11, + 1, 2, -5, -1, 1, 0, 8, 0, 4, -4, 1, -2, 2, 5, 0, 2, 1, 4, 1, 1, 8, 1, 4, -2, -4, 4, 4, 8, 6, 10, + 3, -1, -13, -4, 3, 6, 0, -5, -6, 6, -3, -6, 0, 6, 0, 1, 3, -1, -5, -1, 2, 4, 6, -2, -4, -1, 2, 2, -3, -3, + 0, -3, -7, 1, -4, -4, 0, -5, -7, -6, -1, 1, -5, 3, -8, 0, 7, -2, 9, 5, 2, 0, -3, -6, 1, -1, -6, 0, 1, 0, + -4, -1, 4, -7, 6, 3, -6, 9, 1, -8, -5, -3, -8, -13, -6, -10, -2, -9, -4, 5, -2, 6, 4, 5, 1, -1, -1, 3, -2, 15, + 5, 6, -2, -5, -7, -4, -4, 2, 0, -3, -6, 1, -1, 2, 5, -1, 3, -1, 0, -3, -4, 1, -1, -1, 4, 3, 2, 0, 6, 7, + 2, -2, -5, -2, -4, -9, -5, 1, -2, 0, 3, 2, -3, 3, 7, 0, 1, -5, -5, -6, -3, 5, 6, 6, -3, -1, -3, 0, 3, -4, + 4, 1, 5, 3, -1, -5, -5, 5, -2, -1, 0, -1, 5, -1, -3, 2, 6, 0, 3, 3, 0, -2, 3, 0, 7, 0, 5, 2, 6, 4, + -3, -4, -4, -2, -1, -3, -6, -1, 5, 0, -5, -6, 1, 3, 1, 4, 0, 5, 5, 1, 0, 2, 1, 6, 8, 5, 5, 1, 4, -5, + 20, 39, -27, 4, -4, 7, 7, -2, 0, 0, 3, 7, 13, 6, 2, 9, 3, -5, 2, -2, -1, -7, 2, 4, -8, 2, -4, 6, 7, 8, + 6, -9, -11, -4, -7, 0, -4, 2, 1, -7, -2, -4, -6, 1, -9, -17, -8, -8, -16, -1, -5, 0, 1, 5, 17, 9, 1, -5, -10, -7, + -1, 4, 1, 4, 7, 8, 2, 2, -3, 6, 0, 0, 2, -2, -7, -3, 3, 0, 4, 2, 2, 9, 6, 4, 4, -5, -5, 6, 4, 4, + 6, 1, 5, 7, -1, -4, -10, -11, -6, -4, -2, 3, -3, -2, -2, 0, 2, 8, -2, 0, 5, 0, -7, -2, 8, 5, -3, -5, 1, -6, + -9, 4, 2, 4, 5, 0, -3, 7, 2, 1, -4, -13, 4, 1, 5, 7, 7, 5, 3, -2, -7, -5, -2, 2, 9, -10, 0, 3, 8, 6, + 0, -6, -2, -3, -7, -6, -1, -3, -5, 6, 5, -4, -8, -3, 0, -4, -17, -2, -2, 6, 3, 3, 5, 10, 4, 5, 4, 7, 5, 1, + 1, 4, 0, -4, 3, 5, -2, -2, -1, 3, -2, 3, 2, 5, 11, 1, 1, -6, -4, -4, -6, 0, -4, 3, 5, 3, 0, 1, 6, 5, + 7, 7, 3, 4, 3, -2, 0, -2, -3, -5, -2, -1, 0, -4, 0, 4, 1, -6, 1, 3, -1, -1, -13, -10, -9, 0, -2, 2, 2, -5, + -2, 0, 3, 2, 2, 5, -1, 4, 5, 8, 1, -1, -6, -4, -5, -5, -3, -5, 0, 4, 1, 1, 1, 0, 2, -3, 3, 0, -2, -5, + -2, -5, 2, -1, -4, -5, 6, -3, -1, 3, 1, 2, -2, -7, 1, -4, -4, -5, -7, -4, -1, 8, 0, -2, -7, 1, 4, 1, 6, 2, + -1, -1, 2, 5, -1, -6, 22, -27, -2, -2, -6, 5, 1, 7, 0, -4, 2, 5, 3, 3, 11, -2, 0, 1, -2, -5, -7, -7, 2, -1, + -4, 6, -5, 5, 7, 9, 6, -6, -6, 0, -5, 1, 3, -5, 6, -2, -2, -4, 1, -3, -3, 4, -1, -4, 2, 0, -1, 8, 12, 20, + 14, -10, -4, -6, -8, -6, -4, 7, 3, 9, 15, 6, 6, 3, 5, 6, -2, 0, 1, 10, 0, 1, 2, -3, 4, 12, 1, -2, -5, -8, + -2, 6, -1, -2, -7, -9, -1, -6, 0, -5, -10, -9, -16, -8, -5, -2, 3, -3, -1, 5, -5, 1, 8, 4, -1, -5, -3, -3, -5, 13, + 6, 2, -4, 7, 12, 3, 3, 0, -18, -8, -3, -13, -8, -2, -11, -13, -10, -4, -2, 2, -8, 2, 7, 3, -1, -10, -11, -3, -9, -2, + -7, 1, 0, -4, 1, -2, 6, 11, 7, -9, -8, 5, 2, 9, 15, 7, 8, 4, 10, -1, 4, -9, -1, 4, 1, 6, 1, -4, 0, 4, + -5, 10, 4, 15, 4, -2, 5, -6, 2, 6, -5, -7, -2, 2, 3, 4, -3, 1, -1, 2, 6, 0, -4, -1, 3, -3, -8, -6, -7, 0, + -4, -7, -11, -2, 0, -2, -1, 6, 4, 7, 7, 1, -3, -4, -1, -1, 1, -1, -3, -4, -6, -6, -3, -3, 1, -1, -10, -8, 0, 3, + 8, 9, 7, 5, 3, 6, 3, 0, -3, -8, -6, -4, -1, -1, 1, 1, -4, -2, -4, -1, 5, -2, -1, -3, 8, 1, -2, 5, 1, 2, + 6, -1, 0, 3, 5, 0, -1, 2, -3, -5, 1, 4, 3, 0, 1, 6, 0, -4, 1, -1, -2, 1, 2, 0, -2, -2, 3, 0, -4, -2, + -2, 1, -2, 4, 2, 1, 5, -1, 11, -1, -3, 27, -27, -13, -11, 3, 12, 1, -1, -7, 0, -8, 8, -6, 1, 3, -3, -10, 14, 5, + 2, -4, -7, -2, -11, -9, 11, -1, 4, 0, 11, 8, -10, 5, 11, 2, -1, 2, 5, 6, 5, -4, 3, 3, -9, -4, -4, -6, -4, 1, + 2, 11, 8, 9, 9, 6, 3, -8, -7, -17, -9, -10, -1, 0, 2, -9, 0, 5, 10, 7, -1, 5, 1, 2, 7, 3, -3, -2, -6, 3, + 3, 1, -3, 5, 6, 3, -9, 4, -1, -8, -8, -14, -16, -9, -6, -8, -10, -7, -7, -4, -11, 0, -15, -10, -8, -6, -7, -5, -2, -8, + -6, -8, -2, 4, 2, -4, 1, -3, -1, 6, 2, -7, -7, -3, -1, 4, 1, -1, 9, 3, 9, -6, -2, 3, 0, 0, 1, -7, 2, -4, + -3, -9, -2, 0, 4, -1, 0, 0, 3, 6, -5, 8, 0, 4, -11, 2, 5, -3, -8, 0, -7, 4, 3, -8, 4, 8, 3, 1, 12, 10, + -3, 7, -7, -3, 0, -1, 0, 8, 12, 5, 9, 12, 3, 0, -6, -5, -1, 7, 5, 4, 4, 3, 3, -4, 3, 2, 4, 7, 7, 2, + 3, -2, 3, 0, -3, -1, -1, -1, -4, -3, -4, -5, -6, -1, 0, 3, 1, 2, 0, 0, 0, 1, 2, 3, 2, 3, 2, -8, -2, 7, + -2, 0, 3, 0, 2, -5, -10, -5, -6, -7, -3, 3, 3, 2, -3, 3, 2, 3, 8, 5, -1, -5, -1, 2, 0, -1, -1, 6, -1, 11, + 3, 1, 4, 8, 6, 6, 3, -2, 1, 2, -3, 4, 8, 4, 1, 1, 4, -1, -3, -2, 4, -2, -3, -1, -3, 0, 7, 4, 8, 0, + -1, -2, -7, 2, -3, 0, 8, 4, 7, 5, 5, -1, -2, -2, -18, -9, 27, -33, -17, -6, -4, 7, -1, -15, -14, -2, 4, -5, 5, -2, + 7, 7, -2, -3, -3, -9, -5, 1, -8, 0, -11, -4, 0, -9, 11, 7, 3, 3, 5, 2, 2, 3, 1, 9, 2, 7, -2, 3, 4, -2, + 2, 6, 0, -6, -7, 12, 10, 10, 4, 8, 1, 8, -9, -10, -10, -6, 3, 0, 0, -4, 0, 7, -3, -5, -4, -10, -4, 1, 3, 0, + 2, -4, -2, -7, -4, -5, 1, 3, 9, -3, -9, -6, -1, -3, -1, 3, -3, 2, 4, -5, -9, -5, -1, 2, -4, -13, -1, 2, -5, -11, + -9, -4, -2, -15, -11, -10, -2, -1, -6, -4, -8, -1, -3, 12, 8, -2, -8, 5, -3, -1, 3, 0, -1, -1, -2, -2, -1, 0, -1, -8, + 2, 6, 9, 6, 0, 0, 7, 14, 10, 20, 8, 9, 13, 12, 3, 8, 12, 7, -2, 17, 4, 9, -3, -15, -4, -13, -16, -5, -20, -5, + -14, -14, -4, -9, -4, -4, -6, 0, 0, 4, 2, 9, 0, 11, -2, 1, -4, -7, -1, -7, -2, -3, 1, -1, 1, -3, 1, 7, 5, 6, + 4, -1, 1, -4, -3, 3, 0, 3, 2, -5, -2, -2, 2, 3, -3, 2, 3, 2, 0, -4, 4, 6, 2, 4, 7, -1, 5, 13, 12, 10, + 1, 3, 4, 5, 5, 2, -2, 1, -5, -9, -3, -9, -14, -5, -6, -3, -8, -12, -11, -11, -10, -1, -1, -3, -8, -3, -3, 3, 3, 2, + -1, 9, 2, 14, 2, 4, 4, 3, 2, 9, -6, -2, -1, -1, -1, 3, 3, 1, 0, -2, 0, 4, 1, 3, 9, 1, -4, -6, -3, -6, + -5, -2, -2, 0, 2, 8, 1, 1, 2, -5, 1, 6, 11, 6, 1, 1, 0, -5, 4, -2, 37, 73, -6, -13, 29, 13, 14, -4, -25, -32, + -9, -18, -2, -3, -6, 11, 1, -3, 2, -4, 3, -10, 4, 11, -4, 1, 14, 4, 3, -1, -2, -6, -8, -11, -6, -1, 4, 6, 6, -2, + -1, -2, 4, 1, 8, -4, -5, -3, -3, -3, 4, 5, 12, 4, 7, -3, -1, -12, -6, -8, -2, -3, 2, 3, -26, 26, 13, 0, 0, 2, + -7, 8, 3, 5, 2, -4, 1, 6, 6, 2, -5, 5, 14, 27, 20, 9, 2, -6, 2, 6, 9, 10, 1, 8, 8, 17, 17, 15, 13, 2, + 10, 2, 3, 5, 0, 5, 1, 4, 20, 20, 16, 11, -1, 12, 6, 6, 4, 10, 14, 18, 20, 26, 26, 25, 17, 9, 1, -2, 5, 0, + -1, 9, 5, 7, 7, 9, 12, 0, 4, 7, 4, 12, 0, 9, 1, 6, -3, -7, 0, -8, -5, 3, 9, 29, 32, 32, 23, -8, -28, -49, + -37, -44, -33, -34, -9, -1, -2, 1, -4, 4, -1, -9, -15, -13, -11, -21, -13, -5, -15, -10, -6, -1, 1, 3, -1, 11, 8, 6, 4, 7, + 10, 13, 6, 5, 6, 1, -3, -2, 2, 6, 4, 2, 8, 6, 11, 13, 7, 11, 10, 11, 12, 12, 12, 3, 2, 8, 11, 5, 4, 11, + 6, 7, 4, 6, 2, 5, 9, 0, 7, 7, 2, 9, 16, 12, 9, 16, 6, 7, 10, 11, 13, 8, 6, 6, 2, 4, 3, 4, 4, 5, + 9, 7, 9, 12, 9, 8, 9, 3, 16, 10, 10, 18, 14, 17, 21, 25, 24, 20, 31, 22, 25, 23, 23, 25, 17, 9, -5, -27, -54, -79, + -93, -113, -108, -104, -88, -83, -70, -47, -43, -40, -34, -36, -33, -35, -31, -18, -15, 3, 2, 13, 18, 13, 11, 4, -15, 63, 127, 13, 44, 114, + 38, 51, 45, -51, -21, 6, -19, 3, 6, -8, 13, -3, 3, 1, -14, 4, 7, -7, 18, 3, 5, 11, -9, -12, -3, -5, -5, 0, 5, -5, + 2, 5, 2, 1, -10, -4, -3, 8, -9, -7, -12, -10, 2, -16, 1, -5, 8, -3, 5, 3, -4, -3, -8, -1, -9, -5, 1, 11, 2, 15, + -4, 0, 0, 6, -3, -3, -3, -2, 3, 0, -1, 9, 11, 6, 4, -1, 1, 4, 3, -4, 5, 0, -5, 3, 6, 4, -3, 2, 5, 6, + 1, -9, -3, 0, 4, 4, -5, 1, 3, 0, 4, 3, -6, -5, 0, 0, -7, 3, -2, 1, 2, 1, -6, 3, 1, -2, -5, -7, -6, -6, + -7, -5, 2, -1, -11, 5, 2, -2, 0, 3, 2, -7, -10, 0, 7, 6, -5, -4, 4, 10, 6, 2, 10, 13, 9, 2, 17, 7, 4, -2, + 10, -2, -1, 1, -3, -3, -4, 4, 4, -2, 1, -3, -4, -4, -7, -10, -15, -6, -10, -5, -3, -9, -4, -1, -1, 8, 8, 2, 1, 10, + -5, 1, 0, -3, -2, 1, 1, 1, 1, -2, -1, 2, 7, 4, 0, -5, -3, -4, -6, -3, 0, 2, 1, 3, 0, -1, -2, -7, -5, -3, + -5, 0, 4, 2, 4, 0, 5, -1, -2, -3, 0, 4, -4, -4, -4, 3, 5, -1, 2, 2, -5, 0, 6, -1, 4, 0, -1, -5, -3, -4, + 2, 4, 6, 7, 0, 2, 6, 1, -7, -4, -3, -8, -4, -2, -2, 1, 2, -4, 1, 0, -2, -1, 9, 2, 1, 1, 1, -3, -7, -4, + 3, -2, 6, -3, -5, -4, 0, 1, 8, -4, -1, 0, 3, 2, -4, -5, -1, 2, 2, -8, -11, -1, -1, 1, 2, -4, 1, 1, 4, 11, + -20, -7, 17, -2, -16, -5, -10, 4, -2, 1, 6, -10, -7, 0, 0, 0, 3, -4, -3, 0, -3, 4, -7, -2, 1, 0, 5, 10, -3, 5, + 5, 2, -6, -9, -8, 6, 7, 1, 4, 2, -2, 2, -4, 8, 8, 1, 3, 2, 7, -1, 3, 11, 11, 5, -3, 6, 5, 12, 14, 1, + 3, 4, -2, -1, -6, 3, 5, -4, -5, -6, -2, -1, -2, -5, -4, -1, 5, 5, -1, -1, -13, -10, 0, 0, -3, 0, -2, -3, 7, 4, + 2, 0, -8, -4, -1, -6, 2, 2, -2, -7, 1, 1, 8, 7, 4, -1, -1, -2, -6, -4, -4, -2, -5, -2, 4, 0, -1, 4, 2, 2, + -1, 0, -2, -3, 0, -2, -6, 3, 11, -1, 7, 4, -5, 11, 3, -4, 3, 2, 9, 6, 3, -1, 8, 6, -4, 6, 4, 2, -2, -2, + -1, -7, 2, 5, 11, 1, -2, -1, 3, 5, -3, 1, 5, 10, 0, -1, 1, -2, -1, -10, -10, -10, 0, 0, -5, 2, -6, -3, 7, 8, + 10, -4, 2, 0, 1, 2, 3, 2, -1, -4, -7, -8, -5, -5, -3, -2, 0, -1, -3, 1, -2, -6, -3, -5, 4, 4, 6, 7, 7, 8, + 2, -2, 2, -4, -4, -6, -1, 6, 9, -3, 0, 3, 0, 1, 3, 5, 6, 1, -6, -5, -9, -4, -3, 1, 2, -3, -6, 0, -5, -4, + 1, -2, 1, 2, 0, 1, -6, 3, 1, 2, 8, 1, 0, 3, -1, 0, -1, 4, -2, -2, -3, 1, 10, 6, -1, 5, 1, -2, -2, -6, + -2, -5, 2, -4, 0, -3, -4, -4, -1, -1, -2, -1, 3, 2, 5, 5, 0, 0, -2, -6, -2, 2, -1, 5, 1, -4, -11, -9, 1, 2, + 0, 0, 4, 7, 4, -8, 0, 14, 6, -10, 3, 0, -1, 5, -1, 0, -6, 0, -1, -2, 2, -8, 1, 3, 2, -1, 9, -1, -8, -5, + -1, 2, -9, 2, 5, -5, -8, 1, 3, -7, 0, 9, 1, -2, 3, -6, -5, -9, -4, -5, -5, 3, 7, 4, -2, -4, 7, 2, -2, -4, + 5, 1, 3, 0, -5, 2, -5, -1, 0, -4, 5, 2, -4, 0, 1, 3, -1, -2, 4, 3, 4, 7, 4, -6, -7, -7, -5, 0, -6, 2, + 5, 7, 6, 2, 2, 2, -4, 0, -5, -8, -6, -7, -3, 3, -3, -7, -5, 1, -1, 1, -6, -7, -8, -3, -5, -9, -2, -6, -4, -3, + 0, 2, -4, -4, -7, -7, -5, -1, -5, -7, -6, -8, -4, -1, -2, 0, -1, -3, 2, 10, 12, 2, 5, 3, 4, 5, 4, 2, 11, 4, + 3, -1, 8, 6, 5, 8, -1, 0, -2, 8, 0, 4, -2, -1, 7, 1, 6, 8, 4, -8, 6, 1, 9, 3, 6, 3, 2, -8, -8, -6, + -4, 2, -7, 4, 2, 3, -1, -6, -9, -8, 4, 3, 4, 6, 4, -1, -2, 2, 0, 4, 6, 7, 12, 7, -2, -6, -5, -7, -4, 2, + 6, 6, 9, 2, -2, -1, 2, -3, -3, -8, -6, -2, -1, 5, -2, -1, 0, 0, -1, 1, -3, -3, -3, -1, -6, -1, 2, 5, 4, 1, + 5, 3, 0, -6, -2, -1, -1, -5, 3, 4, -2, -2, 1, 1, 2, -3, 0, -4, -6, 1, -2, 0, -4, 8, 3, 0, 5, 5, -3, 3, + -1, 1, 1, 1, -4, -4, 0, 6, 2, 1, -4, -3, -7, -5, -3, -4, 8, 8, 4, 0, -3, -6, -2, -7, 0, -4, 4, 4, -1, -6, + -7, 0, -2, 1, -2, -4, 4, 2, -3, 1, -3, -8, 9, 7, -6, 11, -4, -6, -1, 0, 6, 3, 9, 4, -2, 0, -3, 7, -4, 0, + 7, 16, -3, -3, -4, 4, -5, 0, 5, -4, 5, -7, -4, 1, 0, -2, -1, -2, -7, -5, -11, 1, 0, 12, 4, 0, 4, 5, -4, 4, + 5, 3, -2, 3, 3, 2, -5, 2, 12, 8, 5, 5, 2, 5, -10, -4, -4, 0, 1, 0, -5, -8, -4, 1, -1, 7, 0, -2, 0, 2, + -10, -5, 5, 2, -1, -1, 5, 6, -1, -7, 0, -7, -3, -8, 1, -6, 2, -3, 2, 8, -2, -2, -11, 2, 6, 9, -5, -1, -4, -7, + -5, -2, -5, 2, -8, -17, -9, -7, -5, -4, 3, 0, -9, -9, 5, -4, -1, 8, 4, 9, 9, 10, 13, 2, 3, 4, 1, 8, -4, 9, + 9, -1, 7, -6, 10, 3, 13, -1, -4, 2, 13, 2, 3, 4, 2, -2, 3, -11, -1, 3, 2, -4, 4, -7, 5, -3, -4, 0, 9, 4, + -6, -1, -3, -10, -1, 5, 1, -5, 1, 4, -10, 2, -3, 6, 3, 12, 6, 8, 2, 3, 5, 1, -2, 2, 4, 4, 4, 4, 3, -4, + -6, -9, -8, -7, -9, -5, 0, 0, -1, -1, -3, -3, -1, -4, -5, -1, -2, 4, 3, 1, -2, 1, 4, 2, 7, 4, 1, 6, 1, 2, + 2, -2, 0, 1, 2, -1, 3, 2, -5, -2, -2, 8, 5, 4, 0, 0, -5, 3, 3, 5, 4, 1, 0, 2, 3, -1, -1, 0, -9, -3, + 0, -5, 0, 5, 5, 5, 10, 1, -1, 2, -3, 3, 4, 0, -2, -3, -2, -9, 0, 0, -2, -8, -5, 0, -4, -5, 3, -4, 3, 8, + -2, 0, 4, 6, 4, 9, 7, -3, 2, -5, -1, 10, -1, 4, -3, -6, -22, 19, -17, -13, -3, -12, 17, 4, -11, 11, 2, 1, 0, -4, + -3, 6, 3, 2, 3, 2, 7, 1, 4, -2, 8, -1, 4, 4, 4, 4, -3, 2, 1, 9, 7, -2, 2, -1, 7, -4, 3, -5, -1, 10, + 7, 10, 4, 3, -7, 2, -6, 5, -1, -2, 8, 9, 1, -1, 0, -3, -9, 2, -7, -13, -10, -7, -10, -2, 1, 5, -2, -6, 3, 5, + 1, -3, -3, -3, -2, -7, -7, -12, -8, -4, -9, -3, 3, -6, 0, -3, -10, -4, 0, -4, -5, 1, 3, -7, -4, -5, -7, -1, 3, -3, + 2, 4, 7, -11, -9, -8, 1, -5, -2, -3, 2, -5, -6, 6, 14, 8, -3, -4, 5, 11, 8, -1, 2, 2, 4, 11, 5, 4, -6, -3, + 6, 7, 9, 11, 18, 16, 19, 29, 11, 13, 20, 16, 14, 17, 13, 23, 15, 19, 19, 11, 14, 14, 6, 22, 10, 8, 19, 13, 4, 2, + 1, -8, -11, -15, -17, -31, -22, -28, -21, -22, -8, -8, -10, -9, -4, -1, -3, 3, 9, 5, 2, 2, -1, -8, -5, 0, -4, -1, -2, 1, + 1, 1, 3, 1, 2, -1, -4, 3, 2, 0, -4, 1, 5, 1, 2, 7, 5, 1, 1, 1, 0, 1, -4, -3, -7, -9, -6, 1, 6, 5, + 4, 1, 3, -1, -1, 0, 2, 1, -2, 0, -2, -4, -4, -8, 4, 2, 2, 2, 2, -5, -5, -2, -3, -6, 4, 2, 2, -4, 1, -2, + -4, -5, -3, -3, -3, 2, 11, 10, 0, -2, -4, -10, -4, 0, -1, 5, 8, 7, 1, 5, 6, -2, -7, 1, -5, -11, -5, -11, -12, -8, + -17, -26, -37, -51, -35, -40, -33, -30, -19, -11, -15, -12, -4, -4, 1, 1, 7, -2, 0, -12, 8, -32, 47, -19, 4, 6, -7, 17, -13, -11, + 17, 8, 8, -4, -1, 6, 5, 8, 1, -3, 1, 13, -5, 2, -3, 2, 8, -4, -1, 0, 4, -3, 4, 2, 8, 2, 3, 8, -6, 4, + -8, -2, -3, 5, 4, 8, 7, 5, -1, -5, 3, -4, 1, 3, -5, -3, 2, -1, -8, 0, -2, -8, -9, 0, -12, -3, -9, -9, -11, -10, + -8, -11, 4, 7, 1, -7, -12, -11, 0, -12, -17, -17, -11, -11, -8, -11, -6, -5, -14, -10, -13, -17, -9, -9, -6, -4, 2, -7, -6, -13, + -14, -8, -7, -1, 3, -2, 3, 9, 1, -1, -3, -7, -5, -1, -13, -12, -14, -4, -3, -4, -2, 0, -10, -3, 0, -15, -19, -13, 2, 11, + 19, 20, 26, 19, 24, 24, 11, 19, 15, 16, 19, 29, 25, 12, 16, 17, 25, 29, 28, 29, 29, 27, 37, 36, 32, 36, 26, 8, 12, -3, + -2, -4, -2, 9, 20, 7, 8, -2, -17, -21, -34, -34, -49, -39, -33, -33, -1, 0, 7, 4, 4, -11, -11, -6, -28, 8, 4, 0, -5, -5, + 0, -1, 4, 8, 2, 3, 1, -4, -5, -4, -6, -4, 1, 0, -8, -9, -10, -10, -3, -1, 1, 0, 2, -4, 0, -2, 4, -2, -2, 5, + 8, 4, 4, 0, -4, 0, -5, -13, -13, -13, -12, -10, -1, -2, -8, -2, -8, -10, 0, -2, -7, -2, -3, -7, -10, -15, -7, -1, 8, 12, + 16, 20, 20, 22, 18, 19, 14, 13, 13, 17, 16, 22, 22, 21, 13, 13, 13, 19, 16, 15, 14, 19, 18, 11, 14, 12, 13, 10, 12, 9, + 9, 13, 16, 12, 9, -10, -28, -51, -88, -110, -127, -126, -125, -94, -60, -39, -1, 14, 23, 17, -2, -2, -15, -15, -40, 2, -51, 80, -30, 31, + 36, -22, 37, 16, -17, 41, -19, 31, 6, -11, 12, -11, 2, -6, -7, 13, 9, 16, 6, -14, -5, 1, -9, -12, 20, 10, -2, 0, -6, -4, + -2, -11, 1, -9, -10, -10, -9, -1, -8, -2, 7, 5, 7, -4, -11, -9, -11, -4, 6, -3, -5, -1, 2, -7, 5, -7, -1, -3, -5, -1, + 23, 9, 9, 9, 4, 0, 2, 4, 6, 14, 4, -1, 0, 5, -9, -3, -1, 1, 10, 11, 7, 4, 6, 13, 15, 4, 0, 5, 0, 1, + 10, 12, 2, -2, -2, 2, -9, 2, 2, 9, 7, 9, 0, 7, 6, -3, -8, 5, 9, 11, 6, 14, 4, -2, 6, 1, -10, 0, 8, -4, + 4, 8, -5, 4, 10, 5, 7, 8, 4, 12, 14, 9, 19, 9, -8, -8, -14, -5, -11, -5, 4, -1, -12, -3, -10, -7, -10, -7, -14, -10, + -10, -4, -11, -4, 2, -14, 0, -14, 7, 4, -7, 3, 6, 13, 0, 5, 4, 12, 2, -13, -5, 4, 3, -4, -4, -4, 10, 0, -4, 21, + 2, 4, -4, 0, 1, 1, -2, 0, -1, 1, -4, 0, -6, -2, -1, -4, 0, 7, -1, 0, -4, -1, 5, 1, 3, 1, 4, -1, -4, -6, + -5, 3, 4, -5, -8, 1, 3, 3, -1, 2, -8, -4, -1, 4, 1, -3, -4, -3, -3, 7, 2, 3, 4, 7, 0, -3, -1, 7, 3, 0, + -2, -2, 0, 3, -5, -15, -4, -6, -16, -8, -2, -3, 4, 3, -5, -4, -2, -4, -9, -14, -6, -5, 5, -10, -3, -1, -6, 1, 6, 9, + 6, 8, 6, -9, -16, -6, 2, -2, 5, -3, 5, 7, 4, 10, -3, 2, -4, -3, -4, -7, 2, 3, -3, -8, 0, -5, 15, 8, 12, -22, + 34, -2, -1, -19, 25, 17, 8, -10, -17, 5, -2, 10, 15, 17, 16, 7, 6, 3, 3, -3, -7, -3, 7, -3, -1, 10, 8, 1, 5, 18, + 5, -5, 12, 15, 11, 2, -4, 0, 1, -3, 2, -1, 4, 5, 6, -3, -4, 4, 1, 9, 8, 2, 7, 14, 12, 2, 1, -3, 4, -6, + -7, -21, -5, -20, -12, 13, 12, 5, -3, 9, 5, 5, -2, -4, -1, 0, 4, 2, 4, -1, -5, -1, 13, 16, 13, 0, -8, -4, 13, 3, + 6, -9, -5, 4, 0, -1, 2, 0, -12, 1, 1, 0, -2, -3, -8, 9, 2, 4, 4, 8, 4, 2, 0, 14, 19, 14, 9, 1, -2, -1, + 8, 5, 3, 6, 3, 7, 4, 0, 8, 7, -3, -5, -8, 3, -7, -9, -13, -8, 4, -4, -20, -9, 6, -5, 4, 7, -5, -11, 0, -3, + 4, 3, 7, 5, 14, -2, 11, -4, 2, -7, 1, 0, -10, 0, -9, -14, -13, -6, 14, -2, 1, 6, 1, -4, -1, -1, -4, 3, -4, 2, + 0, 9, 2, 2, 3, 1, -2, -5, 0, -5, -7, -9, -4, -10, -5, 0, 4, 2, 2, 0, -5, -4, -4, -5, -6, -5, -3, 0, 0, 5, + 1, 2, 6, 9, 6, -1, -4, 1, 1, -12, -5, -3, 5, -1, 3, 1, 2, 4, 6, 6, -1, -4, -6, 1, 6, 1, 1, -12, -6, -9, + 4, 9, -4, -3, -5, 1, 1, -3, 2, -6, 1, 3, -1, 1, -4, 3, 2, 4, 12, -4, -17, -13, -12, -1, -14, -3, 5, -7, -1, 8, + 8, 3, -2, -4, 0, 1, -2, -6, -6, -6, -5, -2, -1, -6, -9, -5, -2, 1, 1, 2, -6, -2, 1, -13, -2, -2, -3, 4, 0, -7, + -7, -17, -8, -4, -13, 33, 4, -7, -8, 13, -8, 12, -3, -13, -10, 3, 7, 8, 2, 4, -5, -3, -7, -13, -4, -6, 1, 10, -2, 5, + -6, 0, 7, 4, 4, 2, 0, 19, -4, -3, -10, 2, 0, 2, -9, -7, -6, -1, -11, 0, -7, -16, -3, 0, 2, -1, 11, 7, 15, 18, + 16, 3, 3, 0, -4, -6, -6, -1, -6, -18, 2, 6, -4, -9, 3, -8, -15, -3, -2, 1, 0, -7, 1, -5, -2, -12, -10, -3, -8, 1, + -7, -2, -3, 1, -10, -24, -21, -7, 9, -5, -11, 1, 0, 4, 19, 3, 0, 0, 1, -8, 1, -7, 2, 4, 3, 0, 5, -1, 10, 8, + 7, 1, 7, 11, 17, 8, 7, 7, 15, 3, 6, 2, -4, 4, 7, -4, -5, 6, 4, -2, -2, -12, -10, 3, 2, -18, -11, 10, -15, 7, + 3, -5, 2, 2, 5, 3, 15, 0, 8, 20, 8, 11, -9, 12, 6, 7, 4, 7, 8, 1, 5, 4, -4, -5, -6, 7, 11, -3, 1, -1, + -3, 2, 12, -13, -2, 8, 15, 11, 1, 13, -2, 2, 7, 3, 2, 2, -2, -2, 2, 0, 5, 2, 5, -4, 3, -1, 0, 9, -3, -2, + -3, -4, -1, -9, -11, -11, -5, -4, -6, -5, -8, -12, -7, -12, -10, -10, -3, -4, -7, -10, -8, -2, -1, 13, 12, 6, -6, -9, -2, -3, + -1, 2, 5, 10, -1, -12, -11, -10, -1, -4, -1, 8, -4, -11, -10, -18, -15, 3, 8, -7, -12, 2, 2, 3, 3, -5, -5, 3, 0, 7, + -5, -1, -3, 7, -9, -9, -10, -12, -15, -8, -7, -6, -2, 2, 2, 1, 0, -3, -10, -17, -9, -3, -5, 1, 8, 1, 3, -2, -2, 3, + -3, -10, 1, 7, -3, -3, -1, 0, -1, -23, 40, 4, -5, 6, 29, 10, 24, 9, -7, -5, 13, 22, 16, 6, 10, -1, 9, -5, -16, 6, + -2, 3, 3, 9, 6, 16, 4, 5, -6, -5, -3, 3, 8, -1, 6, -10, -3, 4, 9, 2, -1, -4, -7, 11, -4, -8, -10, -4, -3, -6, + 0, 11, 9, 9, 14, 4, 7, -4, 0, -8, -15, 0, -2, -6, -23, 12, 16, 12, 12, 11, 8, 5, 13, 21, 41, 27, 17, 12, 6, 9, + 3, 10, 5, 3, 9, 4, -6, 12, 14, -7, -4, -3, 0, 3, 2, 12, 19, 11, 10, 7, 4, 11, 13, 4, 3, 13, 16, 17, 8, 5, + -12, 2, 2, 17, 14, 10, 19, 10, 5, 24, 22, 7, 8, 15, 13, 6, 10, 12, -10, 2, 8, 0, 2, 10, 10, 11, 13, 15, 13, -5, + -14, 9, -7, -6, -3, -6, -6, -1, 8, -1, 6, 9, -12, -2, -9, 4, 1, -14, -14, 4, -6, -9, -2, 1, -8, -3, 3, -6, -6, -7, + 10, 4, 2, 2, -7, -9, -10, -5, 2, 5, 7, 14, 14, 8, 12, -9, 0, -2, 0, -5, -2, 2, 4, 11, 13, 8, -1, -8, -5, -6, + 5, 3, 6, 10, 7, 10, -1, -4, -9, -11, -17, -10, -3, -2, 6, 3, 0, -7, 0, -8, 0, -1, 5, -2, -1, 0, 4, 2, 2, -6, + -5, -4, 0, -3, -5, 0, 3, 4, 2, -8, -7, -5, 1, 11, 9, 7, 3, 4, -6, -1, -4, -8, -12, -8, -9, -16, -11, 2, -2, -1, + 7, -4, -3, -12, 0, 6, 1, -4, 1, 2, 5, -1, -8, -3, -4, -4, 8, -3, 9, -2, -9, -2, -1, -3, 5, -5, 7, -12, -10, -13, + -11, -16, -15, -9, -7, 4, -3, 2, 0, -12, -2, 0, -4, -7, -9, 51, 1, 3, 4, 41, 23, 17, 15, -5, -7, -3, 1, -3, 8, 6, + 14, 9, 19, 2, 8, -6, 3, 0, -7, -1, 3, -2, -1, 3, -6, -11, 15, 22, 3, -4, 5, -10, 0, 7, 3, 0, -4, -1, 0, -4, + -14, -9, -10, -2, -8, -3, 1, 5, 10, 9, 19, 2, 10, 1, 6, -1, -2, -17, -14, -72, -16, -3, 2, 1, -1, -7, -14, -9, -20, -1, + 6, 12, 11, 8, 8, 4, 6, 4, 5, 10, 8, 20, 22, 14, 9, -4, 8, 6, 10, 0, -2, 12, 7, 10, 12, 11, 13, 11, 12, 22, + 20, 8, 14, 20, 13, -1, -3, 5, 5, -7, -12, -5, 2, -9, -5, -4, -4, 7, 11, -2, 2, 11, -5, 2, -5, -8, 7, 12, -3, 2, + -6, 1, 7, 15, 15, 3, 24, 9, 2, 3, 3, -15, -15, -7, -22, 7, -12, -14, -15, -14, -13, -5, -9, -25, -11, -23, -8, -32, -10, -18, + -5, -4, -6, -3, -15, -8, -2, -16, -3, -22, -15, -3, 10, 3, 17, 13, 16, 15, -12, -5, -8, -5, 2, 1, 8, 3, 3, -6, 0, 0, + -3, -4, -10, -3, -7, -2, -3, -3, 8, 12, 9, 11, 9, 6, 5, -2, 4, 5, -3, -9, -12, -15, -3, -4, 1, 13, 14, 17, 15, 11, + 16, 8, 19, 13, 6, 2, -3, -4, -11, -10, -11, -11, -8, -6, -11, -7, -2, -4, -4, -2, -21, -12, -21, -23, -9, -10, -2, -6, -16, -18, + -30, -17, -7, -2, -8, -17, -15, -18, -1, -5, -16, -21, -22, -2, -17, -16, -9, -17, -19, -10, -18, -12, -9, -12, 1, 1, -8, -18, -5, -10, + 6, 5, 3, 9, -1, 9, -5, 3, 4, 4, -5, -6, -1, -24, -21, -2, -1, -7, -9, -7, 96, -39, 7, 21, 37, 32, 16, 18, -28, -26, + -32, -1, 17, 13, 9, 1, 8, 12, -12, -2, -11, 5, 2, -7, -13, -15, -6, -9, -6, -10, 2, 2, 5, 3, -13, -13, -8, -7, -3, -2, + -12, -6, -13, -5, -12, -22, -29, -19, -15, -10, -7, 8, -1, 17, -1, 0, -10, -2, -17, -12, -14, -4, -11, 8, -127, 24, 14, 14, -7, 5, + 6, -8, 3, -17, -6, 5, 13, 3, 9, -7, -5, 6, 16, -2, 6, 3, 4, 3, -10, -6, -11, -1, -18, -13, -5, -14, 1, -17, -6, -16, + -9, -17, -15, -2, -3, -6, -23, -11, -15, -21, -9, -8, -16, -17, -17, -15, -17, -18, -23, -30, -19, -18, -8, -5, -6, -20, 5, 2, -29, -26, + -8, -2, 8, -1, -3, -8, 8, 1, -8, 2, -27, -4, -12, 3, -4, -15, 7, -19, 6, -14, 10, -14, -5, -19, -17, -2, 0, -11, -6, 12, + -21, -9, -11, -17, -17, -2, -8, -2, -3, -8, -23, -10, -19, -17, -22, -17, -26, -2, -31, -10, -5, -11, -20, -13, 5, 10, 11, 8, 6, 1, + 0, -3, 5, -3, -2, -6, -12, -5, -8, -7, -4, -2, 4, 4, 7, 4, -3, 0, -6, -7, -2, -7, -2, -12, -20, -14, -5, 9, 7, 9, + 8, 4, 2, 3, 1, -3, 4, -1, -8, -11, -6, -3, -9, -7, -14, -3, 3, 9, 4, 1, 13, 27, 16, 22, 22, 4, 17, 13, 2, -4, + -4, 4, 4, 3, 0, -13, -8, -16, -18, -3, -17, -11, -13, 9, -2, 11, -9, -2, -4, -6, -12, -4, -10, -7, 4, -1, 0, -1, -1, -5, + 1, -10, -1, 4, 6, 13, 12, 3, 3, 11, 15, 15, 13, 19, 18, 23, 20, 24, 13, 23, 18, 7, 6, 9, -3, 93, -87, 3, -39, 12, + 24, 7, 25, -18, -4, 0, 11, 29, 22, 36, 10, 35, 30, 18, 22, 12, 20, 13, 5, 6, -2, -3, 7, 11, -3, 24, 19, 19, 7, 10, + 15, 11, 15, 15, 8, 15, 2, 21, 14, 9, 7, 3, 11, 26, 30, 23, 33, 29, 37, 31, 32, 24, 29, 25, 29, 24, 28, 33, 33, -112, + 1, -4, -5, -5, -6, -3, 7, 12, 6, -2, 0, -1, -1, -8, 1, -9, -3, 4, 4, 4, 3, 1, -2, 0, -1, -7, -6, -3, -5, -6, + -1, -5, 0, 2, 2, -4, 0, 1, -2, -4, -3, 0, 3, -2, -8, -2, -3, -3, -8, -3, -5, -4, -1, 4, 2, 0, 2, 4, 0, 1, + -2, -2, 8, 3, -3, 1, -3, 0, 2, 1, 5, -1, 2, -5, -7, -2, 1, 3, 2, 5, 9, -2, 2, -4, -8, -6, -1, -5, -2, -6, + 0, -4, -4, 0, -1, 0, -1, -4, 2, 2, 2, 0, -7, -1, 1, 5, 1, 10, 13, 2, 10, -1, 2, 4, 3, 2, 2, 0, -5, 3, + 0, -4, 1, -1, -2, -3, 0, -2, 3, 2, 6, 1, 4, -1, -2, -1, -1, -2, 1, 0, -2, 5, 3, 1, -4, -1, -2, 1, -1, 1, + -5, -5, -5, -1, 2, 5, 5, 5, 3, 4, 1, 4, -3, -2, 4, 5, 5, 2, -3, -6, -3, -1, 0, -5, -2, -5, -1, 3, 2, 1, + -4, -1, -1, 1, -4, -3, 1, 2, 1, 4, -3, 6, 2, 1, 0, 2, -1, 2, 8, 7, 0, 0, -1, -3, 5, 4, 8, 4, -2, -3, + -3, 2, 1, 0, 2, 2, -3, -2, -4, -2, -1, -8, -4, -8, 0, -3, -3, 2, 4, 0, 2, 1, -1, 6, 0, -1, 4, 2, 2, 7, + 16, 4, -1, 0, -6, -6, 2, -2, -3, 5, 14, 9, 3, 4, -7, 2, -4, -10, 0, -2, -8, -10, 3, -2, -2, 0, 1, 3, 0, -7, + -2, -1, 2, 4, 7, -2, 5, 9, -4, -6, -10, -4, -3, 3, -9, -3, 8, 1, 11, 5, 3, -1, 1, 7, 6, 6, 5, 9, -2, 1, + -5, 4, 4, 5, -18, -8, -8, -1, 6, 6, 10, 4, 10, 5, 2, 5, 0, -8, 0, -5, 0, 6, 6, 9, 10, -1, 3, 1, -4, 1, + -6, -5, 0, -3, -4, -5, -1, -9, 0, 3, -2, 3, 7, 5, 5, -3, 0, 0, -7, 0, 4, -5, -4, -3, 0, -4, -11, 1, 4, -2, + 1, 1, -4, 1, 4, -5, 0, 3, -4, 3, 11, 0, 8, -2, 8, 6, -9, -1, -3, 1, -2, -7, -13, -10, 0, -10, -11, -5, -1, -4, + -6, -4, 0, -11, -8, 5, -5, -10, -9, -5, -4, -4, -6, -5, 0, 7, -5, -4, 8, 8, 1, 4, 1, -5, 2, 10, 4, 5, 9, 6, + -6, 1, 1, -9, -4, -2, -5, -4, 0, 2, 4, 5, 0, 4, 2, -4, -2, 1, -3, -4, -5, 1, 2, 3, 2, 2, 1, 6, 3, 3, + 1, 5, 1, 0, 0, -2, -3, -7, -3, 0, 1, 3, 1, 7, 5, 5, -4, -6, -3, 1, 6, 6, 0, 2, 6, 11, 9, 5, 1, 0, + -3, 3, -2, 1, -2, -7, 0, 1, 3, -1, 4, 1, 1, 0, 8, 1, -1, -10, 0, 4, 3, -7, -3, -3, -2, -3, 3, -4, -8, -2, + 1, 5, 3, 0, -2, 4, 1, 6, 2, 2, 3, 2, -2, -4, -3, -4, -7, -8, -3, 1, -1, -1, -3, 6, 8, 3, -3, 4, 3, 1, + -3, 3, 2, 1, 7, 15, 20, 0, -11, -4, 3, -11, -2, 7, 5, 11, -3, 7, 6, 7, 5, 3, -5, 2, 6, 2, 3, -5, 4, -2, + 4, -2, 10, -8, -10, -7, 2, 11, 1, 6, 1, -3, 3, -14, 4, -7, -7, -9, -9, -2, 0, -8, -2, 8, 1, 5, 3, -1, 3, 4, + 5, 3, -4, 0, -3, 3, -7, -1, 4, -10, 0, 0, -3, -3, 3, 7, -1, -4, 2, -2, 2, 1, -5, -2, 5, 5, -6, 9, 5, 5, + -2, 3, 3, -2, 6, 10, 4, -1, -2, -1, 9, 6, -6, -5, -2, 2, -3, 2, 2, 0, -10, -3, 0, -1, -2, -2, 1, -3, -7, -10, + 0, -5, 1, 6, 1, 2, -4, -4, 1, 9, 9, 5, -1, 9, 5, -2, 0, -5, -8, 3, 7, 9, 2, 0, -5, -1, 6, -3, 1, -2, + -3, -4, -3, -2, -9, -7, -2, 2, -11, 1, 2, -9, -8, 1, -2, 1, -3, 3, 3, -5, 0, -4, 4, 3, 10, 8, 6, 3, 10, 8, + 0, -7, -8, -5, 2, 1, 0, -3, -8, 2, 1, -3, 2, 1, -4, -2, 4, 5, 0, -3, -1, 0, 1, 0, 0, -3, -1, 0, -1, -1, + -2, 2, -2, 2, 6, 3, 1, 2, 2, -1, 0, 3, 1, 2, 2, 1, 1, 0, -1, 2, -4, -6, -1, 2, 0, 1, 1, -1, -5, 0, + 2, -1, 0, 6, 3, 3, -3, -7, 0, 1, 1, -4, -4, 0, -2, -2, -1, 9, 4, 4, 2, 0, -2, -5, -4, 1, 5, 6, 6, 6, + 3, 5, 2, 3, 2, 1, 6, 0, 2, 4, -2, 0, -5, -3, -4, -6, -8, -9, -10, -11, -10, -13, 0, 5, 5, 6, 4, -1, 6, 5, + -3, -8, -4, -2, 7, -3, -5, -4, -2, 2, 17, 9, -2, -16, -1, 1, -12, 5, 0, 1, 8, 5, 11, 1, -2, -7, -1, -11, -3, -5, + 2, 5, -5, 7, 6, -3, -4, 4, 1, 8, -7, 0, 12, -3, 4, -2, -1, 7, 2, -7, -5, -8, -1, -8, -5, 1, -4, -3, 7, 2, + 8, 4, 3, 7, 7, 3, -3, -2, -1, -1, -2, 0, 5, 2, 4, 8, -1, 6, 7, 2, 9, -7, -6, -4, -5, 2, 2, 4, 0, -7, + -3, -2, 7, -2, -1, 1, -8, -10, -8, -5, -6, 1, 7, -3, -4, -2, -5, -9, -7, -1, -4, -3, -6, 0, 10, -2, -1, -3, 4, -3, + 2, 3, 5, -3, -3, 8, 7, 8, 2, -5, 2, 6, -1, -2, -5, -2, -6, 3, 5, 2, 9, 1, 1, 3, 6, 1, -4, -1, -5, 5, + 1, 7, 0, -1, 0, 1, 0, -6, -3, 2, 0, -2, 3, 2, 1, -5, -2, 7, 2, -8, 0, -5, -1, 1, 2, -2, -3, 11, 3, 6, + 3, 1, -3, 3, -3, 6, 16, -1, -1, -1, 4, -12, 3, -2, 11, 3, 2, 8, 9, 12, 5, 7, 2, 4, 2, 2, 9, 7, 5, 6, + 5, -2, -3, -1, 0, -2, -7, -4, -3, 0, 2, 1, -3, -3, -7, -1, -1, -1, -3, -3, -2, -5, -6, 2, 3, -3, 4, 0, 3, 5, + 2, -1, -3, -1, 0, 2, 5, 2, 2, -3, -1, -5, -8, -3, -1, -2, 0, -2, -5, -11, 2, -2, -2, -6, -2, -6, 0, 2, 3, -1, + 3, 3, 1, 2, -1, 0, 2, 1, 2, 5, 1, 0, 0, 5, 5, 7, 3, 17, 8, -2, 0, -6, -6, -9, -9, -11, -11, -2, 1, -1, + 1, -7, 0, 11, -4, 1, 8, 1, 2, 5, 3, -3, 3, -5, -2, 19, 19, 0, -10, -8, -18, -5, -12, -6, 6, 16, 12, -1, 6, 13, + 1, 4, 2, 0, 5, 5, 3, -2, 16, -5, 10, 1, 5, -4, -2, -2, -1, 2, -4, 3, -5, 12, 6, -5, -5, -5, -2, -6, -1, 2, + 7, 1, -2, 8, 2, -2, 4, 5, 3, 1, -2, 2, -2, -2, 2, -5, -4, -8, 3, 19, 1, 1, 5, 1, 3, 7, 9, -6, -2, -6, + -5, -4, 0, 5, -11, 0, -3, -5, -7, -4, 2, -7, -8, -4, -5, -9, 3, 4, -4, -1, 0, -9, -7, -6, -1, 2, -5, -1, -1, 1, + -6, -5, -5, 2, -1, 8, 6, 6, -3, -5, 10, 11, 8, 9, 14, 5, -5, 0, 8, -2, -18, -9, -15, -20, -13, -10, -5, -3, 6, 3, + 1, 0, -2, -1, -2, 5, 3, -13, -5, -12, -4, -8, -4, -10, -5, -8, -12, 5, 0, 0, 13, 13, 6, 0, -1, -7, -8, -12, -11, 1, + -6, -6, -5, -7, -9, -12, -5, -8, -11, -8, -8, -1, 1, -9, -1, -1, 1, 7, 9, 5, 2, 4, 3, 1, 3, 1, -6, -5, 5, 4, + 8, 8, 4, 3, 1, 6, 3, 1, 2, 1, 2, 0, -4, -2, 2, 0, 4, 3, 5, 2, -1, -7, -8, -6, -3, -2, -2, 1, -2, 0, + 5, 10, 4, 6, 4, 6, 6, 2, 6, 3, 4, 4, 2, 4, 10, 2, -1, 0, -1, -2, -6, -4, -2, -3, -3, 2, 5, 7, 1, 1, + 5, -3, 2, -3, 1, 0, 7, 7, 7, 2, 2, 2, -2, 2, 3, -3, -3, 2, -1, 4, 5, 9, 5, 3, 2, 0, 3, 0, 2, 0, + 0, 2, 9, 9, 11, 2, 3, 3, 4, 0, -3, -6, -6, 1, 5, 7, 6, 15, 14, 9, -3, 23, 5, 27, -3, -10, 22, -20, -6, 16, + 23, 16, 6, 7, 22, 2, 3, 14, 6, 8, -5, 4, 8, -1, -3, 5, 5, -3, 4, 4, -6, 1, 14, 4, 4, 5, 7, -3, -3, -1, + 2, 3, -3, 1, 3, 6, -1, -3, 0, 3, 2, 9, 6, -2, 0, 5, -1, 4, -8, -1, -5, -11, -13, -4, 56, -2, 8, 3, -6, -2, + -4, -2, -6, -1, 2, -1, 0, 5, 3, 2, -1, -3, -6, 1, 6, 16, 6, 5, -6, -13, -12, -10, -2, -10, -6, -10, -13, -13, -12, -12, + -9, -11, -10, -4, 2, -5, -7, -9, -14, -13, -2, 2, 3, -9, -12, -6, -1, -6, 5, 7, 6, 8, 0, -7, -10, -8, 0, 7, 7, 3, + 5, 0, -2, -3, -5, -13, -21, -17, -15, -16, -19, -26, -19, -23, -23, -22, -26, -24, -24, -16, -15, -11, -4, -9, -9, 4, -2, 5, 6, -3, + -12, -17, -31, -25, -9, -12, -3, -8, -9, -7, 2, 11, 14, 9, -1, 10, 1, 13, 12, 15, -3, 16, -6, -10, -8, 5, 0, 3, 2, 4, + -2, -3, -3, -2, -6, -5, -2, 1, 7, 5, 8, 3, -2, -1, 0, 6, 4, 0, 1, 2, 6, 6, 6, 11, 8, 7, 6, -1, -5, -7, + -5, -1, -2, -1, 6, 7, 3, 0, -4, -4, -2, 2, 7, 1, -1, 5, 0, 5, 13, 18, 15, 15, 20, 16, 19, 12, 18, 19, 19, 22, + 25, 18, 10, 5, -1, -10, -22, -21, -25, -29, -30, -26, -25, -16, -16, -10, -4, -3, 9, 4, 2, 2, -4, -7, -7, -4, -6, -9, -16, -13, + -19, -12, -7, 6, 19, 24, 21, 14, 14, 11, 1, -6, -5, -3, 3, 12, 16, 18, 18, 6, -18, -38, -51, -58, -66, -74, -16, 39, 50, -96, + 16, 127, -92, -3, 70, 35, -30, 40, 0, -20, 20, 0, 1, 8, 9, -9, -5, 7, -2, -11, -12, 15, -2, -3, -7, -11, -18, -6, -7, 0, + -19, -2, -11, -9, -10, 2, -2, -2, 9, 0, -4, -4, -5, -4, -9, -4, -3, 4, -7, -10, -8, -4, -16, -16, -8, -10, -20, -30, -21, 89, + -4, -7, -5, -4, -2, 3, -1, 7, 3, -4, -9, -1, -4, -2, -6, -6, -8, 3, 8, 1, -4, -4, -2, 0, 2, 1, 2, 4, 3, 4, + 3, -1, 2, 1, 3, 0, 4, 9, 5, 0, -3, 2, 3, 0, 1, -4, -4, 0, -6, -5, -2, 2, 5, 8, -1, -3, -7, -3, 1, -2, + 3, 0, -2, 5, 3, -4, -2, -2, -3, 4, 2, 1, -1, -1, 9, 8, 7, 7, -1, 5, 0, -8, 0, 4, -1, -5, -4, 0, -2, 5, + 5, 3, -2, 6, -1, 4, -3, 6, 5, 2, -10, 1, -2, -7, -4, 6, 4, 1, 7, 4, 0, -3, -5, -2, -6, 2, 3, -1, 3, 5, + 1, -1, -1, 3, 2, 4, 6, 0, -1, 1, 1, -3, -3, 2, 0, 2, 0, -2, -1, -5, -5, -3, 2, -1, -3, -2, -2, 2, 2, 4, + 2, 2, 1, -2, -2, 0, -1, 0, 1, 2, 1, 2, 3, 5, 2, 3, 2, 3, -1, 0, -1, -2, -2, 3, 5, 2, 4, 4, 5, 0, + -3, 1, 2, 4, 5, 0, 5, 0, 4, 5, -4, -3, 0, -4, -4, -4, -7, -1, -2, -6, -3, -3, -2, 0, 0, 2, 4, 1, -3, 3, + 7, 3, -6, -1, -4, -1, 6, 5, 6, -1, 1, -4, -1, 3, 1, 0, 2, -1, -2, 2, -2, -6, -5, 1, -5, 0, -2, -4, -10, -6, + 1, 20, -4, -2, 9, 10, 14, -9, -8, 0, -8, -5, 3, -4, 2, -1, 0, -7, 2, -5, 1, -2, -4, 10, 5, -7, 2, 5, 3, 1, + -1, -3, 1, -1, 3, -3, 2, -7, -2, -8, 2, 1, -4, -3, 8, -1, -3, -7, 0, -7, -2, -2, 0, -6, 0, 2, 5, 1, 4, 9, + 2, 5, 6, 3, -3, -3, -4, -4, -1, -2, 5, 1, 1, 3, 0, 0, 1, -5, -6, -10, -5, -3, 1, 1, 0, -3, 1, 1, 0, -2, + -9, 1, -1, -2, 4, 5, 5, 0, 1, 0, 0, 0, -6, 2, 5, 2, 1, 4, 1, -6, 0, 8, 13, 7, 4, 10, 8, 10, 9, 3, + -2, 1, 3, 4, 3, 5, 2, 2, -1, -2, -2, 3, 7, 3, 6, -3, 0, 4, 1, -1, -4, 8, 12, 5, 1, 0, -4, 2, -2, 3, + 3, 2, 0, 2, -2, -1, -11, -1, -6, 1, -1, -2, -4, -2, 3, -4, 2, 5, 2, -3, 5, -1, -5, -1, -6, -1, -6, 2, 1, 7, + -2, -8, -5, -7, 1, -4, -4, 1, -2, -1, -2, 0, 2, -4, -3, -1, -2, 2, 6, 7, 5, 7, 8, 1, -2, 3, 6, 5, 4, 1, + 2, -1, 1, 1, 1, 1, 0, -3, -7, 1, 1, -5, -2, 2, 3, -4, 1, 1, -2, 0, 3, 0, -1, -2, -2, 0, -2, -4, -1, 1, + -2, 0, 3, 1, 4, 3, 3, 4, 0, -8, -5, 2, -3, 4, 1, -5, -4, 8, 1, 2, -5, 2, 2, 2, 3, 5, -2, -4, -3, 4, + 10, 3, 0, -2, 4, 3, 3, 1, 2, 3, -5, -1, 3, 1, -1, -2, 5, 3, 8, 3, -1, -1, -4, -9, -6, -5, -11, -6, 1, 1, + -2, -7, -8, -6, -1, 1, 6, -12, 0, -7, -6, 6, 3, -4, -4, 0, -6, 1, -3, -4, -3, 1, -9, 7, 0, 1, 4, -6, -2, -7, + 1, -1, 1, 0, 1, 0, 4, -1, 7, -3, 9, 3, -13, -6, -5, -4, 4, -11, -5, -2, -2, 1, -2, -2, 0, -4, 0, 1, 1, 1, + 2, 2, 4, 6, -2, 1, 1, 4, 0, -1, -3, -3, 3, 2, -1, 5, 3, -5, 1, 2, 6, 10, 13, 7, -2, 2, -3, -1, 1, 3, + 2, -3, -1, -4, -8, -3, -3, -3, -1, -5, -2, -8, -4, -8, -3, -3, 0, -3, -9, -6, -3, -7, 2, -2, 0, -12, -4, -5, 2, -9, + -3, 1, -5, 0, 5, 4, -5, 1, 0, -5, 6, 1, 1, 5, 3, 2, 1, 2, 1, -7, 0, 2, -8, 2, -6, -1, -4, -1, -6, 2, + 4, -7, 2, -2, 4, -2, 0, -4, -2, 1, 1, 4, -6, 3, -2, 5, 2, -3, 10, 2, 1, 3, 2, -6, 4, 3, -2, 0, 13, 0, + 0, 8, 3, -7, -5, 2, 1, 1, 6, 1, -1, -1, 0, -5, -2, -2, -2, 0, -2, 1, 4, 3, -1, -2, -3, -6, 1, 1, 5, 1, + 5, 6, 4, -2, -1, -3, -3, 1, 5, 1, -2, -4, -8, -4, 2, 1, -3, -6, -1, -2, 2, -1, 2, 3, -3, 0, -3, 0, -1, -2, + 3, 1, 2, 6, 6, 2, 2, -1, 2, -1, -4, 1, 5, 3, 1, -2, -3, 1, -3, -1, -4, 5, -3, -3, -4, -3, -2, -2, -5, 5, + 2, 4, 2, 5, 5, 6, 4, 2, 3, 4, -1, 2, 4, -2, -4, -7, -8, 0, -1, -3, -4, -4, 3, 2, -1, -5, 0, -2, 0, 2, + 0, -7, 10, 3, -2, 2, 1, 6, -3, -5, 6, 10, -14, 12, 2, 5, -2, -18, -12, -7, 7, 2, 2, 5, 1, 10, 6, 4, 2, 0, + -5, 1, 0, 6, 10, -4, 4, -2, -5, 3, 3, 11, 9, -4, -4, 6, 1, 0, -4, -1, -7, -4, -8, -3, -6, -1, -1, -9, -5, -2, + 1, 3, -2, 3, 3, -3, 2, 1, -4, -1, -3, -3, 7, 2, 4, 1, -5, -5, -3, 3, -2, -6, -3, -9, -5, -2, 4, 1, -6, -1, + -6, -4, 6, 5, -4, 0, 6, 1, -4, -3, -14, -3, 6, 1, -7, -3, -2, -2, 1, -3, -6, -2, 3, -5, -12, -5, 0, -5, 3, -4, + -2, -7, -4, -4, -4, 1, 5, -5, -12, -11, -4, -6, 4, 5, 6, 7, 2, 4, 4, -6, -8, 2, -1, -2, 5, 0, -1, 10, 9, 1, + -2, 11, 4, 6, 5, -1, -6, -8, 1, -1, -2, 3, -8, -3, 2, 5, 7, 5, 5, 3, 3, 7, -5, 10, 2, 5, -7, 5, 2, -1, + -2, -5, -14, -3, 0, -1, -3, 0, -3, -5, 1, -3, -1, 1, 4, 0, 2, 2, 3, -2, 0, -3, -2, 2, 6, 3, 5, 10, 1, 4, + -1, 0, -1, 5, 6, 6, 2, 3, 2, -3, 2, 6, 11, 7, 7, 1, 2, -1, 4, 4, 5, 6, 4, 3, 1, 0, 2, -5, -5, -4, + -5, -3, -2, -1, 2, 0, 6, 3, -3, -5, -6, -2, -3, 0, 2, 2, -2, 7, 6, 8, 2, 7, 2, 0, 1, 2, 0, -1, 1, 2, + 0, -3, -1, 0, 1, 2, 1, -1, 4, 0, 4, 4, 0, -1, -6, 0, -5, 3, 4, 0, 0, -1, 1, 4, -3, -2, -5, 4, 4, 0, + -7, -6, 1, 2, 0, -1, -7, -1, -6, -8, -3, -5, -1, 2, 1, -5, 9, -22, -12, -5, 3, 6, -16, 1, -7, -5, 1, -7, 5, 6, + 0, -2, 6, 9, -2, -7, -12, -7, 4, -1, 1, 4, -2, -5, 1, 5, -1, 1, 3, -2, 9, 1, 6, 0, -3, 3, 6, -6, -3, -6, + 3, 0, -3, 2, 7, -6, -5, -2, -4, 6, 0, 0, 6, 5, 4, 4, -4, -2, -1, 10, -4, 0, -6, -8, -2, 1, 6, 2, -3, -5, + 0, -8, -1, -8, -5, -6, -5, -1, 0, -1, -1, -5, -4, 4, 0, 1, -1, 11, 11, 3, 6, -2, 4, -3, -4, -4, 3, 2, -2, 2, + -3, -5, -8, -13, -9, -11, -9, -7, -6, -9, -9, -6, -12, -10, -8, -7, -11, -5, -8, 1, 2, 2, -1, 3, 4, -3, -1, 3, 9, 12, + 9, 6, 22, 25, 14, 12, 12, 18, 16, 4, 2, -1, 5, 4, 9, 8, 2, -9, -9, -4, -5, -1, 6, -1, 5, 5, 6, 3, 2, 6, + -2, -5, 0, -3, -4, 2, -7, -10, -2, 0, -1, -9, -4, 0, -14, -17, -9, 5, 4, -1, -5, -4, -6, -5, -1, -5, -3, -3, 0, 1, + 2, 3, 3, -1, -7, -2, -2, 8, 6, 1, -3, -5, -1, -6, -2, -4, 2, 1, 2, 3, 4, 3, 4, 1, 3, 5, 3, 1, 1, 0, + 1, 3, 7, 9, 9, 3, -1, -5, -2, 0, 3, 0, 2, -5, -2, 1, 5, -1, 1, 7, 4, 7, 0, 1, 6, 12, 8, 6, 3, 5, + 3, -1, 3, 6, 2, 5, 0, 4, 3, 0, -1, 0, 5, 6, 4, 5, 1, -4, -2, 4, 6, 7, 1, 3, 3, 1, 2, -1, -1, 4, + -1, 7, 5, 3, 1, 5, 3, 1, 0, 2, 3, -1, -5, -9, -7, -5, 1, 0, 4, 5, -13, 31, -7, -12, 20, 9, 5, -30, 8, -8, + 11, 17, -2, 21, 9, -5, -6, -4, 8, 5, -10, -1, 5, -5, 3, 2, 5, 4, 3, 4, -2, 0, -3, -3, -1, 2, 4, 2, 2, 5, + 4, 10, 7, 5, 3, 10, 2, 7, -3, 1, 4, 1, 6, 6, -1, 6, -8, -6, -7, -4, -7, -7, -6, -8, 20, 9, 4, -2, -13, -14, + -10, -5, -2, -3, 0, 4, 11, 5, -2, -10, -11, -9, -4, 2, 10, 8, 9, 13, 11, 3, -11, -3, -5, -4, -12, -14, -19, -10, -9, -16, + -19, -22, -14, -14, -15, -12, -12, -8, -4, -1, 1, 4, -3, -3, -7, -12, -7, -11, -11, -12, -12, -6, -3, -4, -2, 4, 3, 2, 0, 2, + 1, 4, 10, 15, 7, -5, -15, -20, -29, -31, -37, -36, -21, -17, -9, 5, 1, 3, -5, -9, -11, -16, -12, -19, -13, -9, 1, 6, 8, 20, + 9, 12, 16, 19, 21, 28, 14, 25, 21, 22, 26, 19, 17, 7, 8, -12, -18, -13, -4, -8, 12, 8, 7, 8, -14, -8, -5, -8, -4, -3, + -8, -8, -5, 0, 4, -1, 2, -4, 0, 0, 1, -3, 0, 0, -3, -4, -10, -12, -13, -12, -9, -4, 3, 2, 5, 0, 2, -1, -8, -12, + -10, -14, -14, -12, -12, -5, -2, 5, 2, 5, 5, 6, 10, 7, 8, 10, 8, 0, 0, -1, 0, -5, -6, -3, -2, 8, 7, 6, 7, 16, + 15, 26, 27, 21, 12, 1, -13, -29, -31, -36, -31, -30, -16, -12, 6, 11, 14, 21, 20, 18, 5, -3, -15, -24, -26, -13, -7, 10, 16, 18, + 16, 12, 5, 0, -2, -3, 0, 8, 14, 19, 25, 15, 7, 2, -2, 2, 1, 3, -5, -9, -21, -40, -56, -93, -127, -59, 71, -1, -48, 75, + 12, 13, -90, 35, -44, 49, -9, 9, 23, 22, -20, 3, -5, 15, 4, -7, 10, 2, -10, -8, 3, 1, -13, 0, 13, -1, -11, -13, 1, -5, + 4, 1, 4, -1, 7, 8, 0, -2, 6, 3, 0, 2, -2, -1, 4, 2, 5, 9, 7, -1, -6, 0, -11, 0, -1, -2, -7, -7, -3, 32, + -2, -1, 2, 0, 0, 3, -1, 8, 2, 2, 6, 3, 5, 2, -8, -2, -1, 6, 4, 4, 10, 12, 3, -4, -1, -7, -3, -7, -7, -2, + -6, -4, -7, -4, -3, -5, 8, 3, 8, 4, 1, 4, 6, 0, 1, -1, 3, 6, 2, 4, 3, 2, 9, 0, 4, 3, 7, 11, 5, -6, + -3, 1, 2, -4, 3, 7, 10, 3, -6, 2, 4, 6, 4, 0, 3, 2, 3, -3, -7, 7, 2, 1, 1, 5, 4, 3, -8, -2, -1, 7, + 4, 3, 9, 1, 11, 3, 0, 2, -3, -4, -1, -2, -2, 0, -1, 2, -5, -6, 3, -3, 3, 9, 9, 4, -4, -9, -4, -8, 0, -2, + -2, -3, -4, -7, -4, -6, -4, -3, -4, 2, 6, 8, 8, 7, 7, 2, 0, 3, 8, 5, 6, 2, -5, -1, 1, 4, -3, -3, -4, -4, + -6, -6, -5, -7, -2, 2, -1, 2, -3, -5, -2, -4, 0, -6, -11, -4, -1, -7, -10, -8, -2, -6, -4, -2, -6, -8, 0, 4, 2, 2, + 1, 1, -3, -3, 0, 1, 7, 2, 3, 2, 0, -2, 2, 1, 2, -2, 0, -3, 1, 2, -2, 3, -3, 5, 6, 1, -2, -3, -7, -2, + -5, -2, -9, -10, -9, -2, -3, 0, -1, -3, -4, 0, 1, -2, 2, 3, -4, -2, 1, 4, 6, 4, 9, 0, 4, 3, -2, 0, 1, -19, + 29, -12, 3, 4, -12, -8, 8, 16, 10, 11, -1, 7, 2, -11, -15, -4, 9, 8, -6, 4, 8, -3, -1, 1, -6, 1, -1, -27, -15, 6, + 7, 5, 5, 7, 1, 7, 6, -8, -3, 0, 4, -2, -5, -1, 1, 5, 0, 8, 2, 10, 7, 4, 3, -1, -7, -3, -4, -12, -14, 1, + 1, 3, 7, 5, -25, -2, -1, 3, -2, 0, 0, -4, -1, -5, -1, 2, 2, 3, 2, -7, -1, 5, 8, 7, 2, -4, -4, -4, 3, 1, + 7, 7, -4, -7, -12, -8, -9, -7, -4, -6, 3, 3, 4, -4, -8, -5, -5, -6, -2, -8, -1, 3, 2, 1, -4, -5, 0, 0, 5, 2, + 2, 5, 8, 5, -5, -3, 0, -2, 3, 1, -1, -6, -5, -1, 0, 7, 4, 7, 0, 2, -3, -3, 1, 5, 3, 0, 9, 2, 3, 1, + 2, -1, 0, 2, 5, 6, 3, 3, 7, 1, -2, -11, 0, 5, -8, -5, -5, 1, -4, -1, 1, -2, -1, -1, 10, -2, 1, -1, -7, -8, + 3, 2, 11, -8, -8, -4, 2, -1, 4, -2, 1, -1, -4, -6, -6, -5, -4, -4, -2, -2, -3, 1, -3, -1, 4, 0, 2, -1, -2, 2, + 2, -3, -2, 1, -3, 0, 4, 3, -3, -1, -1, 3, -1, -3, -4, -2, 0, -3, -3, 1, 4, 5, 2, 1, 0, -2, -2, -2, 9, 2, + -3, -2, 1, 5, 2, -5, 0, 4, 3, -1, 0, 0, 2, 0, 0, 4, 2, -3, -2, 2, -1, -2, -3, 2, -1, 2, 8, 6, 1, 4, + 2, 3, 1, -1, -3, -4, 1, -5, -4, -8, 6, 2, 2, 6, 5, 2, -1, -1, -2, -1, 0, 0, 6, 1, 0, 7, -1, 2, -4, -8, + -1, 1, 4, 1, -9, 16, 13, 5, -17, -12, -7, 12, 24, 14, -1, 2, 11, 6, -11, -14, -12, 2, -2, -2, 3, 4, -8, -2, -3, -3, + 1, -14, -17, 1, 9, 9, 1, 9, 8, -5, -3, -2, 0, 0, -5, 7, 6, -2, 3, 9, 4, 5, 7, -7, -3, -3, -5, 6, 1, 2, + 0, -4, -2, -6, 3, -4, 2, 7, 5, -5, -2, -1, 7, 9, 6, 3, -4, -2, -6, 9, 10, 11, 4, -14, -8, -9, -7, 12, 15, 11, + 2, 1, 3, 2, -1, 4, 9, 3, 4, 5, 6, 9, 12, 10, 1, 2, -3, -2, -7, -4, -5, 4, -3, -7, -6, -4, 0, 1, 0, -1, + -2, -3, -3, -5, 0, -9, -3, -3, -8, -7, 0, -10, -9, 5, 2, 4, 5, -6, -6, -6, -8, -2, -8, -12, -7, 2, 2, -3, 2, -7, + -8, -3, -2, 2, -3, -7, 1, 2, 2, 2, 9, 3, 6, 4, 9, 1, 5, 0, 7, 9, 1, 13, 4, 6, 5, 5, -4, 4, 0, 2, + 5, 6, 12, -3, 0, -8, 3, -4, -4, -3, 0, 0, -2, 2, 1, 1, 5, 4, 4, 6, 7, 3, 6, 2, -1, 0, 5, 7, 6, 0, + -4, 0, -3, -1, 2, 6, 3, -1, -1, -1, 0, 4, 2, -5, -1, -1, -3, -2, -5, -5, -7, -3, 1, 2, -3, -3, -1, -2, 0, 3, + 2, -2, 0, -4, -1, 1, -2, 1, 1, -2, -6, -2, 5, 3, -1, -1, -3, -6, -2, 1, 1, 1, 0, -4, 5, 8, 5, 0, 4, 1, + 1, 9, 4, 5, 4, 2, 2, 1, 0, -5, 5, 6, 2, -3, 0, -1, 6, 6, 5, 1, -5, 0, 1, -2, 2, -6, 0, -4, 4, -5, + -7, 3, 1, -4, -5, 2, -1, -2, -3, -8, 20, 27, 21, -16, -10, -3, 4, 15, 5, -1, 8, 11, -4, -11, -7, 1, 6, 7, 4, 1, + 7, 0, -2, 6, 7, 6, -8, -8, 4, 2, 3, -2, 3, -7, -4, -5, 0, -1, -2, 2, 4, -6, -6, -9, -9, -6, -10, -6, 5, 1, + 2, 7, 3, -8, -3, 4, -3, 1, -4, -4, 8, 10, 7, -4, 14, -2, -5, -3, 3, 1, -6, -13, -7, -5, 2, 0, -1, -6, -4, -6, + 5, 7, 12, 12, 8, 4, 7, -10, -16, -12, -6, 0, 4, 4, -1, 4, 2, -4, 3, 9, 11, 8, 9, -1, -4, -2, -2, -7, 0, 1, + 1, -6, -7, -7, -3, -5, -11, -8, -2, -1, 0, -3, -1, 4, -3, -6, -1, -2, 1, -3, 3, 8, -9, -15, -5, -1, 2, 8, 0, -2, + -6, 5, -4, -11, -7, -7, 4, -1, 0, 1, 8, 8, 17, 8, 7, 4, 1, -2, 5, 5, -3, -5, -1, 0, -9, -5, -2, 6, 4, -5, + 1, 1, 2, 2, 0, -4, 5, 7, -2, -3, 2, 4, 3, 3, 2, 6, 5, 5, 3, 4, 0, 2, -2, -3, 2, -4, -3, -6, -3, -2, + -2, -4, 0, 2, -1, 1, 0, -2, -2, -6, -7, -5, 2, -1, 0, 6, 4, 0, 6, 6, 6, 0, -2, 0, 4, 2, -1, 3, -2, -4, + 2, 4, -2, 2, 1, -5, -3, -4, -2, 0, 1, 4, 0, -4, -2, -2, -2, 1, -3, 1, -2, 2, -7, -8, 0, 4, 1, 2, 1, -7, + -5, -4, -3, -3, 2, -5, 2, 1, -3, 0, 2, -5, -1, 6, 4, 2, 1, 1, 3, -1, 0, -4, 7, 0, -1, -5, -4, 3, -7, -2, + -3, -2, -11, -6, -4, -2, 5, 2, -7, -9, 0, -3, 1, -1, -6, 18, 26, 10, -25, -13, -4, -4, 2, 5, -2, -7, 3, -15, -11, -2, + -5, 11, 11, 3, -5, 8, 2, 4, 1, 5, 7, -6, -13, -12, -6, 0, -4, 0, 0, 1, 7, -6, 1, 5, 1, 0, 1, 3, -4, 3, + -3, -5, 1, -4, 0, 7, 2, 1, 7, 4, 9, 7, 1, 0, 2, 5, 3, -3, 5, 26, 2, -4, 0, -1, -8, -14, -12, -16, -17, -6, + -3, -6, -5, -1, -5, 4, 0, 3, 2, 5, 8, 3, 1, 1, 10, 9, 12, 3, 2, 16, 18, 14, 5, 7, 5, 16, 19, 23, 15, 9, + 12, 10, 17, 19, 8, 1, 0, -3, -3, -3, 0, -2, -3, -12, -1, 2, 3, -3, -7, -19, -9, -12, -11, -10, -6, -7, -5, -4, -2, -3, + -1, 1, -6, -4, 5, 13, 18, 0, -5, -8, -5, -2, -2, 3, 5, 3, 1, 4, 9, 13, -1, -2, -9, -12, -1, -7, -3, -8, -10, -19, + -15, 4, -1, -7, -4, -2, 1, 1, -2, 0, -7, 3, -3, -6, -4, -3, -6, -10, -5, -8, -4, -2, -3, -2, -1, 0, 0, -4, -3, -5, + -4, -3, 3, 1, -6, -5, 2, 0, 0, 0, 3, 1, 4, 2, -7, -6, -7, -2, 0, -2, 0, 3, 6, 5, 6, 5, 10, 15, 11, 4, + 7, 3, 8, 4, 2, 3, 6, 3, -2, -5, 2, -7, -7, 6, 2, 0, 2, 0, 2, 1, 2, 4, 3, 6, 4, -4, 6, 1, 6, 7, + 0, -2, -1, -2, 1, 1, -4, -5, -14, -5, -5, 3, -3, 1, 12, 7, 2, 5, 7, 3, 8, 6, 4, -4, -7, -2, -5, -5, -9, -4, + -1, -4, -3, -5, -11, -4, -6, -7, -9, -6, -2, 6, 1, 1, 6, 5, 4, 1, 3, 2, 24, 19, 3, -42, -14, -12, -14, -4, -2, 0, + 2, -6, -12, -3, -5, -1, 6, 9, 2, 1, 10, 17, 9, 16, 11, 8, 3, -1, 4, 9, 5, 8, 5, 1, 4, 9, 12, 3, 12, 2, + 9, 2, 10, 4, 4, 9, 10, 10, 10, 10, 11, 6, 12, 12, 18, 12, 8, 1, 13, 10, 15, 17, 8, 11, 55, -1, -9, -3, 1, 6, + 4, 9, -3, -5, -9, -20, -20, -19, -16, -6, -1, 3, -10, -6, 7, -2, 0, -4, -1, -5, -9, -11, -9, -15, -7, -1, -4, -1, -2, -3, + -3, -5, -16, -25, -28, -16, -13, -18, -23, -24, -11, -9, -8, 0, 14, 12, 18, 4, 10, 12, 12, 7, 8, 5, 4, 10, 13, 9, 10, 15, + 10, 14, 13, 11, 11, 10, 9, 2, -1, 3, 14, 18, 10, 5, 2, 1, -2, -8, -5, -6, -7, -2, -4, -1, -3, -6, 0, -10, 5, 8, + 10, 5, 0, -5, -4, 5, 5, -2, -4, -7, 13, 8, 9, 6, -14, 3, 10, 2, -4, -5, -20, 4, -7, -11, -10, 3, 5, 6, 1, 2, + 4, 9, 8, 7, 3, 6, 3, 6, 7, 5, 2, -4, -5, -4, -4, 2, -2, 0, 3, 1, 0, -5, -5, 0, -3, 5, 5, 12, 12, 3, + 3, 3, 7, -6, -7, -6, -6, -11, -7, -9, -3, 1, -1, 4, 2, 6, -3, -6, -6, -6, -12, -8, -9, -11, -18, -19, -11, -14, -10, -6, + -4, -7, -4, -4, 0, -1, 0, 8, 10, 10, 18, 20, 22, 16, 15, 14, 8, 2, 4, -5, -5, -6, -11, -7, -8, -11, -12, -5, -4, 6, + 5, 7, 0, 0, -2, 1, 2, 5, 10, 15, 12, 13, 8, 11, 5, 2, 5, 5, 5, -4, -8, -10, -12, -3, 16, 36, -103, -90, 127, 101, + -57, 23, 16, -18, 30, 27, -46, -29, 42, -11, -27, 15, 9, -24, -20, -7, 2, -3, -9, -1, 6, -1, -8, 5, 3, -9, -13, -11, -12, -11, + -9, -12, -14, -7, -5, -16, -17, 7, 1, 0, 4, 14, 13, 0, -3, -5, -8, -9, -16, -15, -15, -19, -12, -7, -12, -11, -7, -11, 0, 83, + 0, 5, 8, 17, 15, 8, 4, -12, -5, -3, -14, 1, 11, -4, 0, 1, 10, -5, -4, -14, 3, 2, -1, -4, 0, -7, 3, 6, 7, 0, + -3, -1, -1, 4, 1, 7, 2, 0, 1, -1, 5, -3, 4, 5, 3, 0, -5, 1, 3, 5, 11, 14, 0, 14, 17, 11, 9, 19, 6, -6, + 6, 8, -5, -2, -6, 12, 7, 3, 4, 3, 2, 8, -7, 2, 5, 7, 12, -4, 8, 2, -1, 2, -5, -11, 1, 0, 6, 0, 12, 1, + 1, -6, -2, -5, -12, -21, -16, -26, -15, -11, -3, -2, 2, 0, 10, -3, 3, 1, -6, -4, 3, -6, 4, -3, -2, -8, -14, -21, -12, 8, + -1, 1, 11, 6, 6, 2, -2, 0, -8, -1, 1, -2, 2, 7, 0, 4, 1, -5, -8, -9, -4, -4, 9, 2, 1, 3, -3, 2, -2, 0, + -9, -16, -9, 0, -7, -1, 2, 3, -1, 1, 5, 6, 1, 0, -3, -4, -6, -1, 1, 4, 4, 0, 3, 3, 9, 6, -3, -1, -12, -10, + -7, -5, -7, -6, -5, 7, 7, 3, -6, -1, 6, -1, -5, -3, -13, -3, -3, -1, 2, -5, 4, 0, 14, 5, 11, 5, 3, 10, 2, -9, + -4, -2, 1, -1, 4, -3, -2, -11, 5, -2, -3, -3, 2, 14, 21, 15, 1, -3, -5, -3, 8, -6, 0, 2, -1, 2, -3, -6, 5, -3, + -4, 20, -19, -9, 11, 7, 11, 8, 0, 5, -9, 2, -3, 18, -7, 1, -14, 3, 15, 4, -5, -9, -11, -4, -1, -5, -3, -3, -6, -3, + -19, -7, -9, 9, 3, -8, 1, 13, 8, 13, 1, 6, 4, 8, 5, -12, -10, -5, -15, 5, 5, 20, 17, 13, -3, -11, -9, -8, -3, -3, + 5, 0, 7, 7, 6, 11, 2, -1, 0, 0, -8, -16, -14, -11, -16, -11, -8, -4, -15, -5, -12, -5, 6, -1, 6, 19, -8, -7, -5, -11, + -6, 2, -7, -3, 3, 4, -1, -7, -11, -5, -4, -8, -16, -9, 2, -5, -4, 8, -4, -7, -7, -9, -7, -4, 10, 5, 5, -6, 3, -9, + -13, 2, -4, -7, 1, -8, -5, 5, 6, 5, 20, 6, -1, 9, -1, 1, 10, -3, -5, -2, 11, 0, 5, 1, 1, 14, -3, 8, 3, 13, + 6, 2, 8, 5, -1, -8, -3, -4, -8, -10, -17, 1, -7, 12, 4, 4, 11, -5, 10, -1, 8, 8, -10, 4, -10, -18, -2, -3, -10, 1, + 1, -4, 7, 11, 15, -5, -5, -3, -7, 2, 2, -1, -5, 4, 0, 0, -5, -1, -3, 8, 10, 8, 8, 4, 3, 6, 1, 5, 6, 0, + 1, 5, -2, 3, -6, -5, -12, 0, 7, -4, -1, -1, -1, -3, -3, 14, 7, 7, 10, 2, -1, -6, 5, 1, 0, 3, -1, -2, -4, -5, + 4, 5, -5, -6, 2, -7, -1, -1, -2, -6, 5, 2, 7, 8, 7, 8, 2, -5, -14, -7, -3, -14, -5, -14, 5, 5, 6, 3, 10, 9, + 3, -3, 8, 8, 1, -7, -9, -15, -10, -9, -7, -6, 5, -5, 3, 8, 18, 20, 7, 5, 5, 16, 11, -5, -6, -2, 0, -6, 2, 0, + -8, -11, 1, 16, 4, 0, 6, -25, -13, 10, 3, -1, 10, -9, -6, -20, -16, 2, 1, -7, -7, -22, -4, 11, 16, -10, -15, -1, -11, -2, + -11, 0, -13, -11, -12, -14, -12, -6, 5, 12, 5, 7, 12, 6, 10, -1, -1, 7, 14, 3, -16, -11, -3, 1, 11, 15, 14, -1, 4, -1, + -1, -14, 8, 1, -2, 2, -7, -6, -1, 12, 10, 2, -5, -1, -5, 2, -6, -6, 0, -2, 8, -1, -11, 7, 14, 8, 3, 7, -3, -7, + 2, -4, 1, -18, -16, -5, -11, -7, -7, -7, -1, -3, -9, -5, 0, 0, -3, 2, 0, -2, -7, -8, -2, 3, 4, 3, 0, 1, 16, 17, + 5, -7, -9, -5, 5, 16, 9, 3, -2, 8, 8, -2, 8, 7, 0, -9, 2, 1, -12, -5, -2, -1, 1, -16, -3, -6, 7, 16, -11, 0, + 2, 2, 16, 1, 0, -4, 9, 3, -1, 0, -3, 1, 1, -7, 4, -6, -5, 0, -9, -9, 5, 0, 16, -1, 0, 5, -11, -6, -1, 1, + 3, 6, 1, 4, 1, 4, 0, 4, 0, 16, 7, 1, 1, -3, 3, -2, -4, 5, 1, 1, 0, 2, 10, 2, 1, 1, -5, -7, -2, -2, + 5, 0, 1, 2, -5, 4, 3, 6, -2, 5, 3, 1, 0, 7, 1, 0, 8, 4, 12, 3, 1, 0, 4, 6, 3, -7, -3, 0, -6, -7, + -1, -3, -3, -6, -2, 7, 3, -6, -8, -2, 7, 3, -3, -2, -4, 6, 10, 4, -2, 6, 2, -10, -1, -12, -3, -2, -1, -2, -8, 2, + -1, -7, 0, -1, 3, 17, 9, 10, 7, -2, 2, 4, -2, 2, -2, -3, 3, 5, -2, -8, 9, 4, 5, 2, -2, -3, -1, -7, -5, -10, + 0, -3, -6, 8, 11, -3, 1, 1, 9, 9, 9, 17, -22, 0, 6, 1, 13, -9, -10, -23, -28, 0, 8, 3, 4, -4, 0, 0, 11, 12, + 3, 4, 3, 16, 12, -11, -6, -3, 0, -12, -17, -16, -12, 0, 5, 8, -2, 5, 0, -1, 5, -4, 2, -8, 2, -9, -7, 1, -1, -1, + -2, 6, -6, -3, 2, -3, -10, -19, -3, 2, 0, -3, 6, 16, 5, 3, -13, -20, 0, -1, -7, -15, -4, -8, -5, 14, 3, 3, 4, 14, + 1, 8, 0, -2, 1, 4, 11, 15, 3, 4, 6, -4, -3, -9, 1, -5, -5, -7, 14, 20, 10, -4, -8, 1, 2, -2, -13, 2, -1, 2, + 7, 9, -8, -7, 11, -6, -17, -4, 1, 5, 6, 6, -1, -10, 3, 4, -11, -1, -9, -22, -15, -12, 8, -7, -6, 9, -5, 1, -3, -7, + 2, -10, -4, -8, 11, -5, -1, -9, -8, -5, -1, -4, 1, 5, -20, -10, 2, -7, -15, -3, 3, -1, 5, -14, -2, -8, 2, 10, 11, 2, + 19, -4, -3, -12, -4, 1, 3, 1, 8, 15, 8, 15, 11, 12, 3, -14, -6, -2, 3, -6, -3, -5, -4, 1, 0, 0, 5, 8, 9, 10, + 4, 6, -5, -4, 3, 0, 5, 2, 3, 7, 4, 0, -2, 5, 3, -7, -10, -5, -7, -3, 3, -2, -7, 1, -6, -5, -8, 0, 1, -1, + 1, 4, 0, 6, 2, 5, -1, -2, -4, -1, 9, 10, 0, 3, 2, 12, 14, 11, -1, 3, 2, 1, 1, 5, -4, -4, -3, -5, -4, -10, + -2, -7, 3, -4, 4, -2, 0, 3, 11, 12, 19, 7, 0, -4, -13, -10, 2, -7, 5, 3, -4, 6, 3, 16, 7, 7, 2, -1, -4, -4, + 2, -1, 1, -1, -5, -13, 9, 3, 12, 7, 3, 3, 4, 0, -2, 3, 10, -19, -18, 5, -1, 10, -4, -24, -26, -22, 19, 2, 3, 10, + -7, 19, -2, 2, -3, -2, 13, 7, 11, 10, -3, 3, -3, -4, 1, -11, -3, -5, -7, 11, 5, 8, 13, 8, 14, 10, -18, 2, 7, 7, + -4, 1, 13, -8, -9, -5, 8, -1, 0, 7, 3, -5, -2, -13, -8, -1, -6, 14, 23, -15, 7, 4, 2, -1, 15, 15, 10, 10, 5, 12, + 11, 5, 11, 18, 15, 14, 12, 15, 23, 24, 36, 38, 22, 17, 16, 8, 22, 18, 14, 16, 24, 28, 13, 15, 11, 16, 27, 21, 13, 13, + 12, 10, 20, 13, 12, 15, 9, 18, 12, 14, 8, 17, 13, 14, 12, 9, 12, 15, 8, 8, -1, 5, 3, 16, 13, 14, 31, 21, 11, 19, + 10, 23, 28, 14, 16, 11, 30, 27, 27, 33, 29, 41, 37, 31, 33, 32, 24, 29, 24, 6, 8, 9, 19, 2, 3, 6, 14, 9, 2, 1, + 14, 22, 32, 26, 29, 28, 10, -2, -2, -2, 3, 9, 9, -6, -1, -1, -13, 1, 7, 1, -9, -6, 0, 2, 1, -1, -2, -1, -7, -14, + -8, -4, -4, 1, 2, 2, 2, 3, 13, 12, 10, 4, -6, 3, 1, 1, -2, -2, 3, 1, -3, 2, -6, -5, 2, 1, 2, -3, -3, -8, + -7, -16, -14, -6, -8, -1, -2, 9, -2, -1, 3, -6, -10, -8, 0, 5, 4, 4, -1, 2, 5, 13, 11, 5, 9, 7, 11, 8, 10, 6, + 5, 12, 13, 7, 0, 3, 9, 4, -4, 1, -8, -8, -3, -1, 6, 0, -1, -1, -11, -15, -15, -8, -3, -10, 0, -8, -14, -10, -9, -9, + -8, -11, -8, 0, 10, 9, -2, -1, 8, 0, -6, 13, 6, 5, 7, 9, 16, 16, 8, 13, 39, 13, -8, -10, 10, 11, 22, -3, -36, -27, + -19, -8, -21, -6, 17, 10, -3, -3, -1, 0, -2, -2, 1, 13, -2, 14, 23, -1, 0, -11, 2, -4, 5, 18, 19, 13, 7, 7, 20, 29, + 13, 4, -6, 5, 12, 2, 3, -2, -9, -11, 6, -1, 12, 0, 2, -9, 4, -12, -22, -14, -6, 1, 0, 17, -12, 13, 16, 19, 18, 16, + 6, 3, 13, 9, 4, 4, 6, 7, 0, -2, -5, -6, 9, -3, -2, -5, -2, 0, -1, -4, -10, -4, -7, 15, 15, 7, 1, -8, 4, 8, + 2, 2, 4, 0, -5, -14, -7, 4, 6, -7, -5, 5, 3, 4, 2, -18, -18, -3, -3, -4, -1, -7, -18, -23, -18, -15, -27, -10, -2, -18, + -20, -7, -7, -6, -3, 3, 13, 0, 4, 5, -3, 10, -7, 4, 11, -3, -13, -11, -4, -15, -15, -7, 2, 4, 6, -3, 12, -5, -14, -15, + -20, -22, -16, -17, -19, -5, -20, -38, -53, -47, -47, -43, -24, -12, -25, -26, -26, -45, -61, -34, -46, -50, -45, -21, -17, -4, -6, -6, -4, -3, + -6, -1, 5, 5, 3, 3, 1, 2, 4, 0, -1, -6, -11, -12, -6, -6, -14, -6, -9, -13, -10, -11, -14, -7, -5, -12, -14, -5, -10, 3, + 9, 3, 1, 4, 2, 2, -1, -4, 0, 0, -7, -6, -3, -15, -11, -9, -13, -16, -11, -8, -13, -8, -4, 0, 0, -6, 11, 6, 2, 9, + -1, 7, 1, -4, -15, -19, -24, -28, -22, -24, -14, -9, -8, -7, 6, -1, -13, 5, -2, -1, -1, 3, 15, 18, 19, 14, 40, 39, 25, 19, + 8, -11, -13, -31, -44, -62, -86, -107, -114, -108, -114, -90, -75, -45, -36, -20, -9, -33, -43, -41, -62, -65, -66, -41, -11, 127, 17, 31, 25, 50, + -6, 80, -24, -16, -36, 6, -18, -13, 20, 25, 12, -14, 18, 7, -4, -13, -3, -18, 13, 2, -8, 3, -1, -7, -12, -13, -12, -4, 11, 19, + 2, 7, 3, 5, 10, -12, -21, -1, -19, -12, -22, -9, 0, -20, -10, -12, -12, -12, 2, -1, -10, -13, -12, -14, -14, -2, 1, 15, 22, 29, + -2, 0, 2, 2, 2, -1, -1, -1, 1, 0, -3, -3, -1, 0, 3, -2, 2, -3, -2, 0, 3, 2, -1, -2, -3, 0, -4, -3, -4, -2, + 3, 3, 3, -4, 1, -6, -4, 1, -3, -4, -6, -4, 1, -2, -1, -3, 7, 9, 9, 3, -2, -1, 2, 4, 8, 6, -4, -2, 2, 3, + 1, 2, 6, 0, 1, 6, 3, -1, -2, 5, -1, 2, -3, -4, -1, -3, -1, -1, -4, 1, 3, -4, -3, -2, -7, -7, -3, -8, -3, -8, + -1, -3, 3, -2, 2, 0, -6, 5, -6, 0, -2, -5, 0, 3, 4, -4, 3, 7, 6, -1, 5, 2, 3, -1, 4, -2, 0, -5, -3, 3, + 2, 0, 0, 1, -4, 1, 1, -1, -1, 2, -2, 4, 3, 1, -3, -2, 0, -2, -5, -8, -6, 0, -1, 0, -1, 2, 4, 4, 1, 1, + 2, 4, 2, -3, -3, 1, 2, 3, 1, 3, 3, 0, 0, -1, -2, 1, 4, 1, -1, -4, -3, 1, 1, -1, 4, 5, 1, 0, 2, 1, + 3, 2, 2, 3, -1, 3, 1, -1, -7, -7, -5, -6, -1, -5, -5, -9, -2, -4, -3, -4, -1, -2, 7, 2, 4, 0, 0, -4, 3, 2, + 2, 5, 6, -3, 3, -1, 3, 4, -1, 1, -1, -7, -2, 1, 1, 2, 2, -1, 3, 0, 4, 4, 3, 3, 2, 0, -4, -9, -7, 6, + -7, -3, 10, 2, 8, 11, 7, -4, -4, -10, -7, -9, -13, 1, 2, 7, 3, 3, 3, -7, 2, -5, 1, 8, -1, 2, 4, -4, -4, -3, + -3, 0, -5, -1, 2, -5, -1, -1, 6, 0, 7, 4, 8, 1, -3, -2, -3, 4, 0, -3, -3, -4, -4, -2, 1, 1, -8, 6, -2, 2, + -3, 0, 3, 1, -15, 2, 5, -3, -1, 5, 0, -2, -1, 2, 3, -5, 0, -2, -1, -5, 4, 3, 0, -9, -5, -8, -2, -5, -4, -2, + -6, -9, -11, -10, -9, -3, -5, -2, -4, -7, 0, -1, 0, -4, 0, 5, 3, 2, 3, -6, 0, 1, 0, -6, 3, 8, 3, 5, 9, 4, + -2, -1, 1, 0, -3, -1, 6, 2, -3, -2, -3, 3, 0, -3, 0, -1, -3, -1, 5, 0, 3, 1, -2, 5, 0, 4, 1, 1, 2, -5, + 3, 0, -1, 3, 4, -10, -8, -3, -2, -1, 1, 1, 0, 2, 1, -2, -1, -1, -4, -3, 2, 3, 0, -1, -7, -5, 0, -5, 1, 10, + 5, -4, 3, -2, -3, 1, 0, 1, 1, 1, 1, 3, 1, 2, 1, -1, 3, 5, 3, 1, 2, -1, -5, 1, 1, 5, 8, 11, 7, 4, + 3, 2, 5, 0, -2, 6, 6, 2, -5, -5, -3, -1, 0, 1, 3, 8, 5, 0, -1, -4, -1, -3, -2, 0, 2, 0, -1, -2, -3, 2, + -1, -3, 5, 4, -1, 6, 6, 6, 2, -1, -2, 2, 3, 0, -3, -3, 0, 0, 4, 0, 0, -5, -3, 0, -3, -7, -1, -3, 0, -5, + -1, -2, -1, 6, -2, -2, 3, 1, -4, -1, -2, 3, 0, -1, -1, 2, 0, 5, 9, 5, -1, 4, 0, 4, 0, 6, 5, -2, -2, 3, + 0, 3, -1, -1, -1, -10, 7, 2, 3, 0, 3, -4, 4, -10, -11, 1, -1, -2, 0, 1, 0, 3, 6, 1, -1, 2, 1, -6, -6, 1, + 3, -10, -2, 6, 2, 3, 5, 4, -2, -2, -5, -1, -2, -1, 3, 6, 6, 2, 2, 1, 2, -4, -4, -4, -4, 0, -4, -7, -3, -9, + 1, -2, 2, 2, 3, -4, 2, 2, 0, -11, 8, 3, -4, -6, -14, 1, 6, 3, 5, 7, 4, -8, -1, -7, -10, -9, -1, -3, 0, 7, + 4, 1, 3, -3, 0, -5, -2, -3, -7, -5, 3, 3, 2, 1, 3, 6, 7, 0, -3, -3, 1, -1, -6, 4, -1, 4, 4, 2, 3, -2, + -2, 6, 10, 0, 6, 3, -6, 2, 5, 2, 2, 7, 0, 0, 3, -3, 2, 6, 4, 3, 8, 6, 5, -4, -4, -4, -2, -4, -1, -2, + 0, -2, -2, -4, -3, -11, 0, -3, 10, -7, 3, -4, 4, -1, 0, 2, 0, -2, 5, 3, 6, -2, 2, 1, 0, 6, 3, -2, -4, -15, + -8, 1, -2, -3, 7, 10, 7, -2, -3, 8, -8, -4, -3, -3, -2, -3, 0, 0, 1, 2, 0, -2, 2, 2, 3, 0, 5, 4, 4, 2, + 1, 3, 6, 6, 1, 3, 0, -2, -4, -4, -2, 3, 5, 3, 2, 3, 1, 1, -1, -4, -2, -1, 0, -1, 0, 0, 0, 0, -2, -1, + -1, 1, 0, -5, 0, -4, -5, -3, 1, 2, 4, 2, 5, 1, -3, 1, -4, -5, -3, -4, 2, -1, 4, 1, 0, -1, -2, 4, 2, -2, + 1, 7, -1, 3, 0, 0, -1, -2, 2, -3, 2, 1, 2, 1, 3, 3, -3, 4, -3, 0, -2, -2, -4, 1, 2, 3, 7, 5, 5, 2, + 2, 1, 4, -2, -2, -8, -3, 0, -2, 3, -3, 2, -3, -2, -5, -2, 8, 9, -8, -5, 12, 4, 1, 2, 1, -6, -2, 2, 0, 0, + 1, -2, -4, 2, -4, -5, 4, 4, -5, -2, 0, 1, -3, -9, -5, -4, -7, -3, 1, -2, 2, 5, -3, -8, -6, 0, -1, 2, 2, -4, + -5, -2, -8, -3, -4, -1, 3, 4, -1, 3, 0, -1, -2, 0, -9, 7, 8, 5, 0, -2, 2, 6, 6, 4, 7, 8, 1, -4, 1, 0, + -1, -8, -7, 0, 6, -2, 1, -4, -13, -3, -3, -1, -4, 0, -1, -2, -8, -8, -1, 4, 1, -6, 1, 3, -1, -7, -11, -4, -2, 1, + 6, 5, 6, 4, 6, 8, 7, 8, 10, 10, 12, 4, 4, -5, -7, -7, -5, 1, 9, 4, -1, -4, 0, -4, 1, 4, -8, -2, 3, -1, + -8, -10, -2, 4, 1, 1, -4, 0, -2, -10, 3, 0, 6, -5, 2, -1, 8, -3, 1, 2, -10, 3, 0, 6, 0, 3, 6, 0, 2, -7, + -3, 4, 6, -3, -3, -2, -7, 1, -11, 0, 2, 5, 0, -3, 10, -1, 3, 0, -1, 2, -1, 2, -1, 0, 0, 4, 3, 4, 3, -2, + 0, -1, -1, -5, -1, -1, 0, 5, 2, -1, -1, 1, 1, 4, 3, 1, -2, -3, -5, 1, 1, 5, 1, 1, 0, -1, -4, -2, 1, 1, + -3, -2, 4, -4, -4, 3, 0, 0, -1, -3, -1, -1, 2, 0, -2, -2, -5, -3, -1, -1, 0, 3, 0, -2, -1, -2, 3, 4, 0, -1, + 1, -3, -3, 0, 4, 0, 6, 2, -1, 2, 5, 2, 0, 0, -2, 0, -3, 2, 0, 0, -3, 4, 0, 0, -3, -2, 0, -4, -4, 4, + 4, -6, -1, 0, -2, -1, 1, -4, -2, -4, 1, 0, 2, 3, 1, -3, 1, -7, 2, 3, -20, 1, 12, -13, -1, 18, -1, -5, 1, 4, + 1, 1, 4, 6, 0, -2, 8, 2, -4, -10, -5, 7, -7, -5, 3, 4, 1, 3, 0, 3, -3, 4, 4, -3, 6, 8, 3, 4, 2, 1, + 7, 7, 8, 3, -2, -2, -6, -2, -3, -1, -1, -2, 3, 0, 2, 8, 3, 0, 3, -3, -4, -13, -11, -8, -12, -6, 1, 7, 6, 4, + -6, -3, 2, -2, 0, 2, -2, -3, -3, 1, -1, -1, -5, -3, -7, -6, -1, -2, 1, 1, 6, -3, 1, 2, 2, 7, 6, -8, -14, -13, + -8, -4, -9, -7, -6, -2, -1, -2, -1, -3, -1, -1, 8, 15, 19, 9, 4, 7, 3, -5, 0, 2, -2, 1, 3, -1, 2, 1, -7, 5, + -2, -9, -4, -3, -3, 1, 1, -5, -1, -11, -7, -8, -4, 4, 5, 2, 7, 5, 11, 2, 11, 9, 3, 0, -10, -4, -8, 1, -5, -15, + -5, -13, -2, -8, -7, -4, -1, -6, 13, -9, -5, 1, 3, -7, 1, -1, 0, 0, -2, 2, 2, 5, 1, -3, -2, 4, 4, 0, -5, -7, + -5, 0, 3, 0, 1, -1, 0, 0, -3, 3, 4, -2, 2, -1, -1, 4, 6, 6, 4, 8, 6, 7, 3, 4, 6, 3, 0, -2, -6, -7, + -4, -7, -6, -7, -4, 2, 1, 3, 0, 2, 1, 6, 6, 8, 6, 8, 6, 10, 3, -1, -3, 0, 0, 1, 8, -1, 1, 0, -8, -4, + 0, -3, -4, -2, 5, 10, 8, 6, 4, 3, 3, -4, -2, 1, -1, -3, 6, 3, 2, 2, 0, -3, -1, -1, -7, -1, -5, -3, -3, -1, + -2, -3, -9, 2, 0, 2, -6, -3, 3, 1, -5, 4, 10, 1, -1, 2, 0, -1, -4, -6, -2, -22, -7, -7, -27, -25, 1, 15, -17, -2, + 29, -2, -5, 19, 7, 6, 4, 7, -1, 2, 7, 3, -1, 0, -3, 1, -1, 4, 4, 7, 10, 10, 8, 0, 4, 6, 3, 7, 4, 4, + -1, 0, 9, 3, 5, 3, 7, 6, 3, 6, 2, 2, -2, 3, 3, 1, -1, 3, -2, 3, 0, 6, 4, 4, 7, -2, -4, 2, 2, 0, + 5, 9, 8, 3, -3, 0, -11, -2, -4, 6, 6, 11, 6, 4, -1, -4, -1, 2, 1, -5, -4, -12, -15, -7, 2, 3, 2, 2, 2, 4, + -6, -5, -20, -25, -19, -17, -21, -19, -16, -12, -7, -4, 0, 1, -7, -8, -7, -7, -11, -19, -21, -33, -35, -37, -29, -17, -8, -8, -1, 1, + -6, -3, 4, 5, 5, 8, 5, -3, -2, 1, 5, 6, 8, 5, 11, 11, 11, 14, 2, 12, 8, 17, 9, 18, 8, 8, 4, 8, 15, 11, + 11, 16, 18, 21, 21, 16, 14, 19, 12, 14, 12, 6, 6, 3, -6, -5, -2, 8, -2, -9, 2, 9, 12, 1, 13, -6, -6, -5, -10, -6, + 1, 0, 4, 1, 1, 3, 4, 4, 4, 7, 0, -4, -10, -8, -4, -6, -6, -8, -6, -6, -4, -4, -6, -1, -2, 8, 12, 13, 12, 7, + 5, 0, -5, -6, -11, -16, -14, -11, -9, -7, 0, 5, 5, 5, 3, 7, 1, 0, -7, -8, -12, -23, -18, -19, -16, -10, -6, 1, 7, 10, + 5, 8, 9, 7, 7, 7, 3, -2, 0, -2, -1, 1, 7, 4, 9, 11, 6, 6, 3, 4, 1, 4, 5, 8, 1, 7, 1, -5, -7, -7, + -7, -5, -1, -1, 0, 2, -4, -2, -4, -2, -3, 1, -2, -3, -1, 2, -2, 4, 3, 5, 5, 1, 5, 6, 8, -11, -97, 127, 73, -75, + -47, -11, 39, -13, -57, 50, -18, -48, 28, 6, -26, -8, 12, 3, -21, -12, -3, -13, 1, 5, -4, -2, -1, 2, -2, -2, 1, 2, -3, 1, + -3, 4, -1, -7, -2, -3, 1, 4, -1, 2, 0, 0, 11, 4, 6, -3, -7, -6, -4, 1, -5, 2, 1, 0, -4, -6, -4, -13, -3, 19, + 16, 15, -6, -3, -3, -10, -6, -5, 0, -8, -9, -9, 2, 11, 0, -1, -8, -9, 2, 6, 4, 5, 1, 11, -10, -13, -8, -7, 1, 5, + 10, -2, 5, -11, -18, -11, 2, -3, -3, -1, 14, 16, 6, 9, 8, 2, -7, -11, 2, -2, -9, 1, -17, -22, -15, -12, -15, -5, -2, -19, + -6, -3, -17, -15, -7, -18, -13, -4, -3, -7, -14, -7, 0, 7, -2, 7, -5, 0, -8, -16, 3, 7, 16, -3, 3, 0, 3, -5, -9, 6, + 1, 1, -11, 5, 8, 11, 10, 4, 14, 4, -4, 9, 7, 17, 12, 25, 7, 5, 2, -20, -17, -12, -6, 5, 23, 13, 17, 11, 12, 6, + 17, 11, 10, 1, -1, -12, -5, -4, -5, -7, -6, -9, -15, -6, -4, 0, 7, 4, 9, 9, 4, 3, 5, 5, -3, -4, 1, 0, 8, 2, + 2, -1, -5, -7, -7, -16, 3, 7, 2, 2, 1, -7, -9, -10, -8, -6, -2, 10, 10, 7, -2, -3, -16, -14, 0, 8, -2, 2, 0, 8, + -2, -5, 3, -10, -10, 0, -1, -4, 0, 1, 11, 5, 8, 23, 3, 0, 4, -4, -6, -28, -13, 9, 17, -2, 8, 4, -6, -1, 5, -3, + -10, -16, -11, -5, 0, 10, 3, 8, -2, -2, -13, -9, -5, -6, -3, 7, 13, 11, 2, 8, -8, -20, -27, -5, 4, -4, 5, -9, -10, 6, + 58, 27, 9, 20, 54, 1, 2, 22, 18, 10, 24, 12, 26, 10, 5, 3, 21, 19, 2, 9, 28, 16, 13, 15, -7, -12, -1, 9, 0, -9, + -1, 7, 4, -15, -6, 1, 13, 14, 7, -8, -1, -2, 26, 21, 0, 0, 3, 5, 4, 5, -10, -7, -6, 4, -1, 0, 6, 20, 16, 5, + 7, -5, -2, -2, -21, 12, -1, -1, -5, 1, 3, 7, 11, -2, 6, -2, -9, -7, 10, 14, 5, 5, -5, -4, 4, -10, 5, 5, 6, 16, + 15, -2, -6, 18, 14, -6, 4, 9, 4, -5, -2, 10, -4, -6, -6, 3, -4, -7, 1, 11, -6, -17, -17, 3, 10, 10, 7, -2, -1, 6, + 4, -16, -10, -7, -4, 16, 10, -11, -13, -1, -17, -3, -7, -8, -1, 10, 5, -8, -3, 2, -7, -4, 5, -4, -6, -9, -5, -1, 14, -4, + 3, -1, -2, -11, 6, -13, -14, -23, -1, -15, 0, 18, -1, -11, -8, -5, -18, -20, 1, -5, 1, -8, 2, 5, -12, -8, 10, 2, -6, 12, + 2, -9, -12, -12, -29, 11, 6, 2, -2, -7, -8, 1, -11, -8, -9, -1, -1, 0, -2, 2, 6, 13, 27, 24, 17, 11, 8, 7, 3, -5, + -7, 7, 2, 3, 5, -5, -7, -10, -6, -1, -4, 6, 0, -5, -9, -9, -8, 4, 10, 7, -4, -4, -6, 3, 0, 2, -4, -1, -10, 5, + 8, 22, 1, 10, 4, 0, -1, -5, -15, 0, -2, 0, -2, -1, 15, 3, 13, 9, 6, 4, -8, -15, 2, 1, -22, -11, 2, 4, 8, 19, + 19, 5, 4, 13, 5, -3, 2, -2, 10, 12, 12, 12, 12, 3, 6, 3, -4, 4, 10, 4, 18, 10, -5, -12, -13, -13, -7, -7, -13, -3, + -10, -5, 1, -12, -6, 25, 14, 14, 36, 18, 9, 13, 12, 16, -7, 3, -18, 19, 9, 11, 11, 7, 11, 2, -8, 3, 6, 9, 12, 6, + -12, -9, -3, 3, -5, -8, -7, 14, -18, -10, 2, 8, -1, -2, -3, 0, 3, 19, -10, 2, -2, -6, -10, -2, -6, -18, -9, -13, -4, -6, + -4, -16, -9, 6, 0, -4, -7, 7, -24, -26, 29, 12, 16, 7, 9, 6, 0, 25, 21, 16, 21, 28, 24, 12, 9, 7, 5, -6, 10, 11, + 7, 1, -5, 5, -4, -9, -11, -7, 6, 2, -13, -9, 6, 13, 9, 7, 10, 9, -2, -18, -7, 12, 14, 2, 16, 16, 3, -3, 5, 2, + 5, -3, 0, 2, -2, 4, 6, 19, 15, 1, 6, 8, 8, 4, 1, -14, -20, -8, -11, 4, -9, -4, 5, -6, 0, 4, -1, 7, -4, 5, + 14, -1, 11, 12, 8, 5, 16, -10, -17, 4, 9, 10, 5, 12, -8, 18, 21, 5, 2, 2, 9, 6, -8, 6, -14, -3, -8, -20, -19, -15, + -22, -16, -10, -22, -14, -11, 9, 4, -6, -14, -5, -8, -6, -5, -8, -13, -18, -9, -10, -2, 0, -3, -6, -9, 2, 7, -4, -6, 2, -4, + -6, 2, -2, -8, 2, -2, -4, -4, 2, -4, -5, -8, -6, 5, 0, -1, -3, 5, -2, -2, 0, -2, 0, 9, 12, 20, 9, -12, -3, 4, + 3, 2, -3, 8, -1, 2, 10, 16, 10, 9, 2, -4, -6, -17, -7, -3, -5, -6, 10, 9, -6, -5, -3, 2, 6, -9, -4, 7, 10, -9, + -6, 7, 14, 12, 15, 10, 0, 1, -1, 1, 15, 4, 6, 6, -12, -13, 3, -2, -3, -2, 8, 0, -4, 5, -3, -7, 3, -6, 1, 1, + 8, 3, -5, 3, 11, 4, -1, 8, 12, -10, 13, -2, 20, 36, 5, 14, 0, -7, 10, -13, -12, -19, 1, -20, 3, -12, 5, 2, -6, -6, + 13, 1, 1, 10, -14, -7, -7, -16, -19, -11, -4, 11, 20, -15, -8, -4, 1, 8, 11, -6, 16, 16, 4, 28, 18, 8, 0, 0, -4, 0, + -7, -19, -7, -4, -5, -16, -4, -11, 1, -2, -6, -10, -3, 0, -48, -8, 3, -2, -4, -3, -11, 6, 20, 16, 5, -4, -10, -3, 6, 6, + -6, -18, -11, 1, 24, 29, 20, 14, 12, 24, 17, 8, -2, 14, 2, 1, -9, -12, 24, 14, 6, 11, 12, 8, -5, -2, 6, 10, -3, -12, + -2, -8, -4, -5, -15, -8, -10, -8, 8, 8, 0, 2, 0, 14, 14, 16, 19, 13, 15, 28, 19, 13, -3, -2, 13, 11, 3, -19, -1, 2, + -9, 2, -22, -9, 12, -3, -3, -4, 18, 10, -3, -1, -9, -2, -7, 5, 9, 8, 0, 14, 15, 22, -3, -4, 20, 8, -5, -25, -13, -7, + 20, 13, -12, 14, 11, 1, -2, 6, 7, -8, -3, -7, -4, -6, -11, -2, -7, -4, 8, -5, -5, -2, -7, -10, -13, -11, -16, -17, -12, -14, + -10, -7, -3, 3, 7, 4, -2, 0, 3, 2, 3, 2, 0, 1, -5, 0, -7, -4, -2, -7, -4, 7, -2, -13, -6, -11, -8, -7, -8, -6, + -8, -3, -4, -14, -12, -2, -2, 0, 14, -1, 0, 7, 7, 19, 15, 9, 1, -14, -21, -8, -4, -14, -17, -13, -10, -5, 0, -3, 4, 4, + 8, 3, -1, 8, -5, 12, 9, 4, 5, 5, 10, 5, 4, -1, 1, 3, 11, -1, 11, 2, 11, 13, -5, 5, 8, 11, 5, -5, -8, -5, + 0, 4, -2, 4, 18, 10, -10, -6, -4, 9, 2, -5, -17, -23, -87, 27, 1, -8, 46, 3, 21, 14, 10, 26, 9, 17, -4, -5, -7, -13, + 5, -2, 3, -3, -16, -3, -10, -20, 1, 7, -6, -9, -6, -13, -2, -11, 18, 8, 3, 3, 0, 3, -4, 0, -13, -14, 8, -2, 34, 13, + 5, 9, 6, -6, -2, -11, 0, -14, -6, -9, -20, -11, 0, -11, -6, -12, -10, -23, -15, -57, 9, 29, 35, 26, 26, 8, 37, 28, 28, 30, + 6, 2, 29, 28, 19, 0, -33, -34, -11, -17, -9, -1, 0, -2, 7, 15, 18, 16, 18, 25, 21, 24, 21, 14, 0, 8, 17, 14, 23, 21, + 42, 17, 9, 18, 31, 4, 20, 11, 11, -2, -6, -2, -8, -1, 10, 10, -2, 20, 12, 7, 18, -6, -29, 3, 10, 7, 19, 3, -1, 15, + 28, 32, 19, 31, 17, 21, 5, -5, 16, 3, 5, -7, -4, 10, 16, 30, 21, 18, 22, 36, 25, 33, 15, 4, 7, 22, 25, 8, 12, 25, + 28, 29, 17, 21, 24, 28, 25, 31, 26, 17, 38, 39, 16, 23, 22, 17, 17, 22, 8, -4, 4, 7, 8, 0, 6, 3, 5, -3, 4, -4, + -1, -3, -15, -8, -8, 5, 3, 2, 4, 11, 14, 12, 12, 8, 0, -7, 4, 0, 3, -3, 0, -2, -1, -11, -12, -6, -1, -1, 9, 12, + 11, -1, -2, 7, 4, 8, 11, 7, -2, -6, 1, 3, -3, 2, 5, 5, 3, 0, 2, 12, -2, 1, -7, -3, 6, 2, 4, 0, 4, 4, + 17, 15, 12, 16, 23, 14, 12, 3, 4, -1, 2, -6, 6, 13, -1, -5, -8, -1, -7, 5, -3, -9, -19, -27, -23, -19, -23, -17, -21, -10, + 2, 9, 0, 5, 3, 15, 9, 13, 4, 0, -2, -6, 3, -2, -3, -12, -13, -12, -27, -64, 39, 6, -32, 25, -16, -2, -10, 29, 28, 31, + 46, 31, 20, 2, 6, 5, 3, 24, 14, 28, 13, -12, 12, 4, 17, 14, -4, 18, -4, 10, 2, 7, 9, 10, 10, 16, 0, 11, 6, -1, + -7, 5, 5, 11, 5, -16, -15, -15, -23, -9, -17, -5, -20, -5, -25, -25, -25, -12, -37, -27, -21, -25, -22, -20, -119, -27, -6, -2, 4, 12, + 8, 32, 31, 12, 10, 14, -8, -8, -2, -1, -20, -7, 22, 21, 9, -10, -9, -3, 12, 4, -4, -19, -30, -12, 1, -4, 11, 12, 13, 3, + -13, -16, -26, -43, -24, 3, 0, 7, 21, 13, 3, -15, -11, 7, -10, -17, -17, -15, -31, -29, -21, -19, -18, -21, -16, -6, -8, 11, 8, -5, + 2, 8, 9, 5, -15, -12, -9, -21, 8, 3, 15, 17, 32, 16, 1, -3, -21, -8, -27, -9, 7, 14, 4, 26, 29, 5, 1, -18, 13, 3, + 31, 24, 12, 0, 28, 16, 21, 11, 16, 7, 24, 17, -1, 15, 13, 13, 5, 18, 32, 26, 56, 34, 38, 11, -19, 4, 8, 6, 13, 4, + 5, -2, -2, -1, 9, -2, 0, 0, -7, 4, 5, 0, -10, -16, -6, -7, -2, -12, -8, -10, 3, 1, -6, -14, -10, 0, 6, -1, 8, 3, + 12, 0, -6, -18, -14, -10, -14, -9, -9, -7, 3, 10, 2, 0, 1, -7, -8, 5, 18, 2, 3, 13, 3, 0, 5, -10, -3, 7, -2, 11, + -4, 2, 8, -1, 0, 0, 0, -12, 2, 12, 1, 5, 9, 4, -9, -18, -21, -15, -13, -11, 4, 13, 5, -2, -9, -19, -17, -11, -7, -15, + 7, -8, -8, -13, -12, -13, -26, -22, -8, -4, -9, 4, 13, 23, 14, 24, 12, 21, 6, 9, 5, -11, -41, -66, -127, 18, 29, -10, -34, -24, + 75, -12, 65, 51, 34, 33, 35, 15, 9, 25, 18, 30, 16, 18, -13, 15, -2, 10, 26, 23, 26, 9, 2, 10, -4, -18, -13, -7, -28, -13, + 6, 10, 1, -5, -1, 22, 7, 3, -10, -4, -16, -22, -6, -3, 4, -9, -3, -13, -1, 2, 2, -7, -3, 8, -5, -19, -24, 3, -8, -95, + 5, 2, 2, -5, -3, 0, -1, -4, 6, 1, 3, 4, 2, 5, 3, 2, 2, 0, -1, -1, 1, 0, 0, -6, -5, 0, 6, 3, 4, -2, + -1, -2, 0, -7, -1, 3, 3, 1, 2, -1, -5, -5, -2, 2, -4, -5, 1, 3, -4, -12, -10, -9, -9, -3, -1, -1, -3, 2, 5, 6, + -2, 3, 4, 0, 6, 2, 5, 6, -1, -3, -6, 1, 0, -1, -9, -6, -2, 3, -2, 0, 10, 12, 6, 10, 10, 6, 3, -1, 4, 4, + 3, -3, 0, 3, -1, -1, -6, -1, 1, 3, 11, 12, 7, 5, -3, -3, -4, -3, -1, 2, -2, 6, 8, 3, -6, 0, -5, 7, 0, -4, + -3, -1, -1, -4, 3, -1, 3, 0, 1, 3, 0, -3, -5, -2, -5, -4, 0, 2, 6, -2, -2, 1, -2, 0, 0, 1, 4, 4, -1, -3, + -2, 0, -4, 1, -1, -1, -6, -5, -5, -3, -7, -5, -3, 0, 6, 5, -1, 2, -1, 0, 0, -2, -4, -5, 0, -3, -3, 2, -1, 0, + -6, 0, -5, -6, -1, -1, 2, -3, 0, -2, 3, 5, 7, 0, 2, 3, 5, 4, 3, 0, -3, -2, 4, 0, 5, 1, -2, -1, -2, 1, + -5, -1, 2, 0, -4, 0, 1, 2, -4, -1, -1, -1, -4, 4, -5, -3, -7, -10, 1, -6, 1, 9, -1, 5, 0, 3, 7, 12, 0, -13, + -32, -24, 34, 7, 0, 13, -9, -7, 16, -10, -8, 5, 8, -1, 2, 2, -4, 2, 7, 3, 4, 5, -3, -10, 1, 3, 11, 11, 14, 4, + -9, -4, 0, 0, 0, -5, -3, -2, -5, -3, -6, -8, -1, 4, 1, 6, 1, 4, 8, -1, -1, -4, -2, 2, -3, -12, -3, 5, -4, -6, + 0, 3, 2, -1, -2, 7, 4, 5, 2, 1, 6, 4, 0, 2, -2, -2, -2, -4, -6, -1, 1, 4, -1, -5, -3, 1, 3, 3, -2, 2, + 3, 3, -2, 4, 4, 2, 8, 7, -1, 0, 5, 2, 3, 1, 6, 3, -1, -6, -2, 2, -3, -2, -2, -3, -3, 1, -3, 0, -1, 9, + 0, -2, 2, 0, -5, 1, 5, 0, -5, -5, -6, 1, 2, -3, -11, 3, -3, -2, 0, -4, -11, -16, -2, -8, -11, 3, -4, -1, 4, 2, + 2, -5, -2, 3, 12, -5, 3, 0, 7, 5, -2, 1, -4, 6, 3, 7, 7, -6, -1, -4, 3, -1, 5, 7, -3, -4, 3, -9, -8, -6, + -6, -1, 0, -1, -2, 2, 2, 6, 6, 3, 5, 3, 0, 2, -4, -1, 2, 4, 3, 3, 5, 2, 1, 4, 1, 1, 4, 4, -1, -4, + -2, 3, 0, -6, -3, 1, 6, -1, -4, 1, 2, 2, -1, 2, 3, 2, -1, -4, 0, -1, -3, -3, 3, 2, -2, 3, -4, -3, -2, 1, + 1, 0, 3, -2, -1, -4, 1, 3, 3, -5, -5, 1, 1, -3, -4, 1, 5, 3, 6, 1, -2, 2, 6, 2, -1, -2, 6, 3, 5, 5, + 3, -3, -6, 2, -3, 2, 1, 7, 0, 8, 0, 2, 2, -3, -3, 2, 4, -2, 6, -7, -6, -12, -11, 0, -1, -3, 0, -2, -6, 5, + 2, 4, 2, 2, -7, -17, -14, 32, 8, 3, 18, -5, 1, 5, -4, -1, -8, -5, 1, 7, -1, -8, -4, 4, 1, -1, 3, -2, -6, 0, + 3, 6, 14, 8, 0, -6, -2, 0, -3, -4, -7, 1, -1, -1, -11, -6, -6, -6, -5, 0, -3, -2, 6, 3, 3, 0, -3, -9, 1, -3, + 5, 2, -2, -1, 7, 3, 3, 7, 10, -17, 2, 0, 0, 0, -2, -4, -9, -5, -2, 0, -6, -8, -6, -5, -4, 1, -2, -7, -11, -11, + -6, -2, 3, 5, 1, -3, 1, -6, -8, -2, 6, 6, 1, -5, -3, -6, 1, 0, 3, 5, 4, 2, 1, -1, -2, -4, -5, -7, -5, -4, + -2, -2, 1, -2, 1, 2, 3, 2, -1, -4, 6, 9, 2, -3, 1, 2, -1, 1, -2, -4, 3, 5, 6, 1, -2, 1, 3, -4, -2, -2, + -1, -2, -4, 0, 3, -5, 1, 1, -2, 2, 6, -1, 3, 2, 0, 7, 8, -1, 2, 3, 5, 6, 5, 5, -3, 0, 4, -5, 0, 1, + 1, 7, 6, -6, -1, -5, -4, -7, 0, -2, -10, -6, -1, 8, 2, 3, 3, 3, -1, 3, -1, 3, 2, -1, 1, 0, -1, 3, 1, -2, + -2, -2, 2, 2, 3, -3, -3, -2, -9, -7, -6, -3, -3, -4, -5, -7, -8, -6, -5, 2, 7, 5, 6, 2, 5, -5, 0, -1, -3, 1, + 1, 0, -3, -1, 1, 2, 1, 2, 3, 3, 4, -1, 0, 2, -4, -2, -3, 2, -5, -3, 0, 4, 4, 10, 3, 5, 2, 8, 6, 0, + -3, 0, -2, 1, 0, -2, -2, -4, -1, 0, 2, -4, 4, 3, 4, 2, -2, 1, -5, 0, -2, 1, -3, -5, -4, -6, -7, -8, -8, 0, + 5, 6, 6, 7, 4, 1, 0, -3, -3, -5, -14, -12, 16, 6, -2, 12, 3, -1, 17, 1, -8, -8, -6, 10, 8, -1, -1, -3, 0, 5, + 0, -1, -3, -4, -2, 6, 9, 4, 5, 5, 1, -3, 3, -2, 2, 3, 0, -1, -2, -10, -3, 7, 1, 1, -2, 5, 7, 7, 2, -1, + -1, -3, -6, -2, -2, -7, -5, 4, -6, -2, 2, 7, -1, 1, -21, 2, 1, 0, 2, 4, 5, -3, 5, -1, -4, -4, -1, -2, -6, 1, + 1, -4, -3, -3, -1, -4, 6, 6, 1, 6, 8, 7, -1, 4, 6, 8, 6, -1, -2, 1, 0, 1, -4, -1, -7, -6, -2, 0, 7, 10, + 8, -3, 2, 3, -2, 3, 0, 4, -1, 1, -2, 0, -4, -5, -2, -3, 2, -3, 0, -5, -4, -6, -4, -5, -6, -3, 3, 4, 1, 2, + 2, 9, 11, 2, 12, 2, -2, 3, 8, -3, -4, 3, -2, 0, 2, 12, 3, 3, 8, 7, 6, 10, 11, 10, 10, 6, 10, 0, 0, 3, + 2, 5, -2, -4, -9, -4, -4, 1, 0, -3, -6, -1, 2, -2, 3, -5, -1, 0, -1, 0, -5, 0, -3, 2, -1, 1, 2, 1, 2, 2, + 2, 5, 4, 0, 1, 0, -2, -3, 4, 2, 3, 2, 4, -1, 3, 4, 1, -1, -5, -3, -3, -4, 0, 0, -2, 0, -2, 1, 7, 9, + 1, 0, -4, -4, -2, 2, 0, 1, 4, 4, 1, -3, -4, -2, 3, 5, 1, 1, 1, -1, -1, -2, -2, -6, -1, 0, 2, 13, -1, 4, + -3, 0, 1, 1, 1, 1, 0, 1, 1, 2, -4, -2, -4, 0, -1, 0, -5, 0, -1, -4, -2, 1, 2, -2, -3, -4, 2, -3, -2, 2, + 1, 0, -1, 2, -7, -9, -5, -1, 1, -1, -3, 5, 1, 5, -4, -12, -26, 19, 7, -15, 17, -3, 6, 14, -3, -1, -6, -12, 14, 2, + 2, -8, -4, 10, 7, -2, 5, 4, -6, -9, -7, 5, 0, -1, -4, -5, -3, -2, -5, -3, 3, -4, 6, -4, 1, -3, -5, -8, -7, -1, + 5, 1, 3, 4, -1, -6, -3, 5, -3, 2, 7, -1, 5, -1, 3, -1, 9, -2, 7, -18, -6, 0, 1, -7, -4, 0, -4, 0, -7, -7, + -8, -4, -6, -10, -4, -6, -12, -4, 0, 5, 3, 0, 1, -5, -3, -5, -3, -7, -2, -1, -5, -1, -10, -7, -2, -5, -10, -22, -10, -4, + -5, -12, -13, -4, -2, -3, 3, 6, -1, -11, -5, -8, -8, -9, -9, -15, -9, -11, -19, -19, -9, -16, -13, -1, 3, 2, -3, -2, -2, 1, + -11, -11, -16, -14, -6, -6, 1, 1, 3, 8, -1, 1, -8, -1, 12, 5, 10, 3, 2, 2, 7, 4, 1, -1, -6, 2, 2, 13, 15, 10, + 13, 13, 14, 11, 14, 7, 5, 7, 4, 1, 2, -7, 1, -3, 0, -1, -2, 1, 6, 3, -8, -3, -3, -4, 0, 0, -1, -2, 0, -1, + -1, -1, -2, 0, -3, 0, 0, -1, -1, -7, -4, -4, -3, -3, -5, -5, 1, 0, -1, -1, 0, 3, 0, 1, -3, 0, -7, -8, -3, -4, + 0, 4, -1, 7, 4, 7, 8, 7, 3, -2, 1, -3, -2, -6, -7, -6, -1, -2, -5, -4, 4, 3, -2, 1, 6, 10, 5, 0, 3, 1, + -6, -5, -5, 0, -2, -6, 2, 0, -1, -1, -4, -2, -1, 4, 9, 2, 3, 8, 0, 1, 2, 3, 4, 4, 5, 1, -3, 6, 3, -4, + -5, -9, -3, -7, 1, -2, -4, -1, -1, 2, 3, -1, 8, 3, -3, 2, -2, 3, -1, -7, -23, -36, 39, -8, -39, 20, -35, -1, 30, -20, + -13, -19, -16, 14, 14, 0, -7, -1, 10, 12, 9, -10, 2, 6, -5, -3, -11, -2, 7, -4, -12, -5, 3, 0, -5, -10, -3, 8, -8, -1, + 7, 1, 0, 0, 3, 1, -5, 0, 1, -1, 4, 0, -3, -4, -10, -1, -1, -2, -7, 3, -2, 7, -1, 7, -10, -1, 1, 2, -5, -4, + -3, -10, -10, -11, -9, -8, -9, -10, -15, -13, -8, -6, 1, 5, -1, 6, 8, 9, 5, -3, -7, -4, 2, -3, -3, -3, -7, 0, -5, 2, + -5, 4, 2, 0, 2, -6, -11, -5, 5, 0, -3, -5, -1, -11, -14, -18, -16, -21, -17, -17, -23, -20, -27, -30, -29, -28, -12, 4, 14, 19, + 18, 24, 17, 14, 3, -7, -15, -9, -14, -11, -7, -15, -2, -1, 5, 3, 0, 5, -8, 5, 6, 3, -3, -8, -8, 0, -3, -4, -2, 2, + 4, 8, 9, 13, 14, 13, 16, 22, 16, 22, 11, 12, 9, 8, 12, -6, 2, 1, -2, 4, 9, -4, 3, 2, 7, 0, -2, 2, 0, 5, + 3, 3, 0, 4, 3, 1, 4, 6, 5, 7, 3, 3, -3, -8, -10, -10, -10, -14, -11, -6, -4, -8, -6, -6, -7, -3, 2, 0, -2, 0, + 4, 7, 8, 6, 7, 8, 13, 15, 17, 15, 9, 9, 5, 4, -3, -6, -9, -12, -11, -20, -23, -27, -29, -24, -19, -14, 0, 17, 24, 28, + 29, 22, 15, 8, 1, -3, -9, -8, -14, -17, -15, -8, -8, -6, 0, -2, 2, 1, 5, 12, 12, 14, 12, 10, 5, 10, 2, 0, -4, -3, + 0, 4, 3, 5, 2, 5, 1, -7, -16, -17, -14, -9, -6, -3, 2, -1, 4, 2, 0, 0, 2, -6, 2, 2, 3, -41, -60, 127, -22, -88, + 33, -44, 22, 49, -38, 16, -43, -20, 34, -4, 6, -28, -11, 32, 9, 2, -6, 9, 17, 3, -1, -1, -3, -3, -12, -8, -8, 1, -3, -3, + -6, -4, 0, -3, -3, -2, 0, 1, 4, 4, -2, -4, 9, 9, 2, 2, 0, -5, -3, -4, 1, -5, 5, 9, 8, 5, 9, -3, 4, -17, + 7, 3, 0, -2, 0, -3, 10, -5, 0, 6, 1, -2, 17, 8, 3, -7, -6, 9, 16, 7, 1, 4, 3, 15, 2, 15, 10, 11, 19, 7, + 10, -5, -8, -3, 2, 4, 1, 10, 17, 19, 5, 7, 1, 14, 10, 8, 5, 5, 12, -2, 2, 11, -3, -3, 12, 0, 0, 19, 22, 7, + 6, -6, -1, 16, 4, -3, 7, -5, 4, -9, -8, -6, -11, 0, -1, 4, 4, -4, 2, 1, 4, 5, 0, -9, 4, -13, 4, -7, -7, -11, + -17, 2, -19, -2, -9, -3, 1, 1, 21, 7, -1, 1, -8, 1, -20, -13, -16, -10, -11, 2, -1, 6, -13, -4, -2, -9, -8, -14, -3, 11, + -9, -2, -9, -13, -6, -4, 0, 2, 1, 5, 2, -4, -5, -3, 4, -2, 6, -4, 0, 0, -6, -7, -6, -4, -4, -2, 9, 14, 15, 16, + 16, 3, -3, -4, -1, -6, -5, 1, 11, 9, -8, -3, 8, 1, 7, 2, -1, -4, -4, -9, -11, -15, -11, 3, -4, 6, 1, 6, 10, 13, + -5, 3, 2, 0, -6, -8, 3, -7, -14, -3, 6, 2, 3, 5, 6, 0, 9, 0, -2, -4, 0, -3, 6, -6, -1, -7, -1, 12, 12, 9, + 1, 2, -2, -4, -12, -2, -5, 6, 2, -10, -9, -14, -18, -17, -25, -16, 0, 3, -2, 3, 16, 17, 8, 6, 4, 1, 7, 13, 5, -5, + 26, 13, 13, 2, 26, -14, -5, -2, -3, -6, -1, 16, 20, 5, 6, 8, 0, -2, -3, 1, 17, -9, -6, 9, 12, 5, 13, 24, 8, 8, + 4, 2, -1, -5, -12, -3, -2, 3, -11, -28, 9, -6, -3, 5, 10, 13, 8, 14, 1, -7, -1, 5, 8, 2, 6, -1, 3, 15, 7, 5, + 3, 6, 6, -10, 42, -5, -5, -5, -2, 2, -11, 0, 5, -1, 0, -3, -4, -3, -6, -7, -10, -9, -5, 4, 14, 4, 7, 4, 1, 2, + 19, 2, -3, 7, 3, -2, 0, -16, -21, -8, 11, 10, 15, 5, -2, 17, 1, -3, -10, -1, 4, 4, -1, 18, 16, 9, 11, 6, -1, 9, + -1, -3, -8, -5, 3, 0, 11, 8, -1, 5, 4, 7, 11, 0, -10, 5, 11, 8, 14, 4, -8, -3, -4, -12, 0, 4, 16, 2, 15, 1, + 3, 1, 2, 4, -2, -10, 11, -5, 8, 12, -9, -2, 0, -2, 7, -1, 2, 1, 4, -5, 10, -2, -1, -8, 7, 5, -13, -6, -6, -20, + -23, -4, -5, 17, -6, -8, -4, -6, -12, -3, -6, 3, 7, 5, 9, 10, 12, 8, 9, -1, -6, -7, 2, -2, -4, 4, -2, -6, 3, -5, + 2, -1, 5, 2, 3, 1, -5, -3, -2, -1, 7, 3, 12, 4, -2, -1, 5, 8, 2, -4, -2, -4, -4, 9, 11, 0, 3, 4, -7, -10, + 2, -2, -7, 0, 2, 5, 3, 0, 2, -10, 15, 11, 4, -8, -14, -9, -1, -5, -1, 5, -2, -1, 2, 5, -5, 0, 8, -10, -9, -3, + 2, 2, -2, 10, 2, 5, 15, 1, 2, 3, -5, -2, 13, 2, -2, -3, 0, 1, -3, -2, -2, 4, -2, 9, 17, 13, 0, -7, 1, -13, + -7, -9, -2, 2, -12, 27, 0, 0, -10, 11, -7, -17, -5, -5, -4, -15, -4, -1, 10, 5, -10, -5, 0, -7, 2, -1, -13, -16, 1, 9, + 3, 22, -3, -6, 13, 4, 7, 0, -9, -7, 3, 1, 18, 13, 1, -9, 1, -4, -3, 0, 6, 0, -1, -9, 4, -4, 6, -5, -8, -11, + -8, -12, -6, 8, 7, 2, -2, -6, -7, 34, 11, 1, 7, -3, -4, -4, -3, -1, -4, 8, 11, 6, 3, -5, -6, -5, -1, 7, 0, 3, + 3, 20, 1, -2, -5, -6, 5, -3, -3, -11, -16, -1, 2, 1, -4, -21, 3, 7, 4, -3, 11, 4, 7, 11, 19, 13, 14, 9, 10, 6, + -1, 10, 8, -7, 7, 0, 5, -1, -1, 2, 3, 14, 9, 7, 0, -16, 12, 8, -4, 3, -4, -3, 14, 12, 13, 10, 2, 10, -12, 5, + 12, 2, 4, 3, -1, 13, 5, 4, 8, 9, -12, 9, -12, 2, -2, -1, 0, 6, 5, -8, -5, -7, -11, -15, -25, -8, -9, -23, 2, 5, + -5, -11, 8, -8, -6, -5, 2, 20, -6, -5, -8, -8, -5, 0, -3, -3, -7, 2, 3, 13, 8, 6, -2, -3, -2, -8, -9, -2, -4, 10, + 10, 13, 6, 0, -7, 1, 6, 4, 0, -4, 3, 0, -4, 0, -14, -9, -11, -7, -10, -7, 1, 0, 0, -1, 0, -1, 1, -1, -7, -7, + -11, -1, -3, 6, -1, 3, 6, 0, 3, -3, 7, 8, 11, -1, -1, -12, 1, -2, -4, -11, -10, -7, -1, -2, -4, -6, 7, 10, 23, 3, + 10, 4, 1, 6, 4, -2, 0, 0, 2, -2, 2, 6, 5, 7, -6, -2, -4, 8, 5, 0, -1, 7, -3, -3, 8, -2, -5, -10, 8, 3, + 0, -3, 7, -3, 6, -3, 8, 13, 5, -9, 14, -5, -15, -5, 6, -17, -28, -27, -9, -13, -12, 1, -5, 6, -6, -9, 1, -2, -14, -13, + -1, 2, -13, -2, -12, -3, 14, -2, 8, -2, 9, 7, 4, 12, -7, 2, -1, 19, 8, 1, -9, -3, 4, 13, 12, 7, 1, 3, -15, 1, + -2, -4, -5, -14, -11, -3, -2, -9, 5, 4, 6, 8, -3, 8, 18, -13, -9, -3, -10, -13, -16, -12, -7, -5, -13, -25, -30, -20, -14, -19, + -17, -4, 5, -7, 2, -11, -3, -2, 5, 13, 9, 17, 21, 5, 9, 4, 14, 16, 12, 13, 3, 15, 2, 12, -3, 8, -3, 13, -2, -10, + -5, 22, 11, 25, 8, -2, 4, -7, 6, 11, -9, -12, 7, 14, 10, 5, 9, -1, -1, -7, -18, -1, 6, 9, 25, 12, 18, 31, 21, 21, + 23, 9, 21, -7, 10, 0, 12, 7, -3, -3, 4, -6, 1, 11, 10, -11, 23, 1, 11, 12, 0, 22, 6, 12, 10, -17, 0, -11, -6, 5, + -7, 2, 1, 1, -13, -11, -15, -9, -11, -10, -9, 4, 20, 14, 15, -9, -8, -9, -1, -1, 2, -5, -3, 1, 11, 2, -3, -5, -5, -10, + -6, -5, 8, 4, 0, 5, 1, -9, -7, -11, -8, -3, 8, 0, 4, 4, 8, 4, 1, -13, -18, -2, 8, -1, 4, 4, 14, 6, 4, 1, + 12, 12, 9, 1, -5, 4, -3, -3, -3, -4, -4, 0, 9, 15, 17, 14, 9, 2, 0, 0, -12, -14, -9, -6, 4, -8, -9, -5, 5, -1, + -1, 1, -4, 1, -3, 0, 8, 3, 8, 0, -3, -9, -2, -4, -14, -9, -8, -12, 1, -8, -15, -18, -21, -4, -14, -19, -4, -7, -4, 8, + -14, -10, -3, -1, 5, -5, -30, -4, -23, -16, -6, -4, 2, -14, -38, 21, -19, -14, -11, 13, -1, -17, -1, 4, -9, 17, -19, -18, -13, -8, + -15, -27, -18, -10, -8, 1, 7, -6, -17, -6, -21, 8, -12, -4, 0, -4, 1, 5, -4, -13, 5, 0, 14, 8, -5, -13, -11, 5, 3, -3, + 3, -11, -9, -4, -5, -7, -5, -6, -16, -5, -19, -13, -8, 0, 1, 6, 4, -1, -15, -19, -8, -14, -18, -16, -12, -13, 0, -1, 5, 12, + 5, 0, 5, 7, 8, 14, 10, -1, 1, 10, -2, 6, 16, 16, 4, -5, -4, 1, 5, 7, 2, 2, 14, 0, 3, 5, 8, 6, 6, -3, + 10, -4, 1, -20, -4, 10, 12, 10, 10, 21, 13, 24, 15, 13, 22, 8, 10, 6, 8, 13, 8, -3, -17, -12, -9, -7, -1, 5, -4, 6, + 5, 0, 3, -9, 0, 5, 2, 16, 10, 3, 10, 5, 0, 10, 10, 4, 11, 28, 21, 21, 15, 34, 4, 0, 4, -8, -5, -4, 1, -8, + -20, -28, -25, -17, 4, -8, 10, -12, -14, -14, -7, -3, 14, -1, -5, -19, -18, 6, -1, 12, -25, -15, -14, -13, -10, -7, -2, 4, 6, 11, + 4, -1, -3, 0, -3, 2, 7, 10, 5, 4, 11, 4, 7, 0, -5, -2, -2, 0, -3, 3, 5, 2, 5, -2, -4, 1, 0, 6, 1, -1, + -1, -2, -1, 3, -6, 3, 5, 1, -3, -8, 1, -3, -2, 1, 4, 2, -10, -7, -7, -15, -9, -11, -16, -13, 2, 8, -6, 4, 6, 2, + -5, -1, -1, 5, 8, 5, 3, -11, 5, -3, -1, -3, 5, 7, 4, 5, 3, 6, 14, 10, 7, 10, 4, 0, 1, -5, -6, 2, -1, 3, + 5, -1, 4, -3, 4, 5, 3, -6, -13, -8, -19, -6, 11, -9, -11, 5, 5, 7, -3, 11, 56, -26, -24, 3, 40, 5, -16, 12, -4, 34, + 31, 1, -14, -9, 6, 3, -6, 3, 2, 6, -12, -8, -9, -10, 1, -2, 3, 5, -22, -6, -11, -6, -3, -11, 4, -10, 4, 9, -5, -8, + -9, -4, -3, 0, 3, -8, -12, 7, -1, 8, -3, 0, -3, -1, -11, -8, -2, 2, -1, 4, -5, 4, -7, -2, -92, 20, 16, 17, 7, 14, + 14, 11, 6, 2, 5, 6, -2, 4, 1, -15, -21, -14, -18, -15, -16, -15, -8, -2, -3, -9, -16, -10, 6, 19, 18, 10, 25, 24, 8, 1, + -10, 13, 3, 1, 5, 26, 16, 3, -2, 3, 5, 6, 0, 14, 2, -3, 5, 12, 8, 30, 21, 16, 21, 16, -1, -16, -17, -21, -23, -20, + -7, 6, 13, 5, 6, -2, -16, -13, -1, -11, -9, 4, 10, 4, 11, 3, 14, 9, 4, 11, 14, 22, 19, 18, 29, 20, 26, 4, 14, -1, + -3, 1, -12, -17, -21, -25, -9, -12, -6, 6, -14, -16, -25, -17, -21, -23, -21, -9, -2, -3, 1, -29, -19, -5, 2, -7, -1, 5, 10, 8, + 8, 4, 0, 0, 0, 3, -11, -14, -11, -17, -14, -16, -20, -25, -28, -22, -22, -21, -21, -19, -10, -3, -3, -9, -5, -5, -2, -7, -11, -1, + 2, -1, 0, -4, 2, 8, 5, -5, -1, -5, -1, 1, 2, 0, 6, 10, 14, 16, 26, 19, 17, 25, 9, 16, 13, 2, 1, 1, -5, 4, + 2, 2, -7, -7, -7, -15, -20, -14, -7, -9, -4, 5, 6, 7, 8, 11, 4, 6, -10, -5, -15, -16, -19, -17, -13, -4, 2, 3, -3, 7, + 10, 12, 11, 11, 20, 31, 26, 38, 29, 35, 18, 23, 17, 14, 25, 34, 39, 44, 26, 20, 22, 11, 10, 11, 9, 95, -49, -57, -126, 44, + 65, -68, -36, -10, 38, 46, -39, 11, -26, 13, 32, -7, 12, 24, 1, 22, -15, -6, -8, -9, 11, 9, -4, -25, -6, 3, 10, 9, -9, 2, + -2, -8, -3, -5, -9, -12, -11, 6, 5, 0, 7, -1, 17, 1, -2, 11, 1, -4, 2, 4, -7, 8, 5, 15, 3, -1, 10, 7, -4, -127, + 13, 7, 11, 4, 2, -6, 5, -4, 0, 2, -4, 5, -6, 17, 11, 7, -3, -12, -12, -8, -15, -12, -11, -11, -3, 1, -1, 0, -6, 0, + 3, 5, 0, -12, -9, 2, 1, 7, -4, 5, 17, 13, 10, 3, 3, -5, -2, 1, -2, -1, -1, 1, 4, -2, 0, 13, 13, 6, 10, 18, + 11, -7, -8, -2, 3, 1, -5, -10, -10, 0, 0, 11, 1, 10, 11, 6, 6, 6, 4, -4, 7, -6, 3, 11, 9, 17, 5, -3, 7, -5, + 0, -10, -7, -4, -1, 14, 12, 9, -2, 7, 5, -5, 9, 0, 3, 2, -8, -19, -13, -16, -11, 4, -5, 2, 4, -5, -2, -11, -1, -2, + 9, 7, 4, 0, 1, -1, -3, 0, -4, -6, -2, 2, 2, 1, 6, 4, 1, -3, -4, 3, 0, 3, -5, -1, 5, 5, 3, -6, -6, -8, + -11, -9, -13, -4, -5, 5, 3, 6, 8, 2, -5, -1, 2, -1, -2, 7, 5, 0, 1, -2, -2, -2, -7, -8, -3, -4, -4, 0, 0, 0, + 7, -1, 6, 7, 3, -4, 0, 1, 0, -2, -4, 1, -2, 3, -4, 0, 4, 0, 0, -8, 3, -4, -6, 2, 7, 8, 7, 11, 10, 3, + 5, -3, -2, -3, 0, -2, 6, -3, -8, -6, -2, 3, -4, 3, 3, -1, -6, -13, -12, -7, 0, 1, 1, 1, 9, 2, 5, 4, -1, -27, + -6, -15, 5, 17, 2, 25, -3, -16, 21, -3, -20, 1, -1, -5, -9, -2, 0, 1, 7, 6, -11, 9, 15, 8, 13, 7, -2, 1, 1, 4, + -3, -4, -1, -9, 3, -2, -3, -1, 5, 11, -1, -1, -3, 2, 8, -6, -5, 11, -9, 7, -8, -2, 9, 7, -5, 3, 7, 5, 4, 8, + -1, -6, 7, 5, -35, 0, -1, 2, 0, 0, 4, -2, -4, -4, -4, -1, -1, 1, -1, 0, -7, -4, -2, -8, 3, -2, 5, 1, -2, 5, + 0, 2, 11, -4, 2, -1, 4, -7, -16, -12, -15, -12, -6, -3, -1, -1, -5, 2, -3, -3, 9, 5, 0, -2, -1, 4, -1, -1, -7, -4, + -7, 7, 1, -7, 3, -5, -2, 0, -9, -3, -4, -4, -2, 2, 8, 4, 0, 11, 2, -3, 7, 6, 9, -7, -1, 8, 2, 2, 4, 15, + 6, -3, 1, 4, 9, 0, 6, 0, 3, -1, 7, 16, -6, -1, 5, -4, 3, -4, -4, -5, 4, -1, -5, -3, -9, -16, -9, 4, 5, 10, + 11, 2, 1, -1, -3, 9, 8, 5, 6, 0, -3, -5, -3, -8, -8, 0, 4, 5, 5, 9, -1, -3, -1, -2, -4, -3, 2, 0, 1, -2, + -2, -2, -3, -4, -1, 2, -4, -1, -7, -6, -3, -2, 2, 3, 4, 5, 2, 7, 7, 5, 11, 8, 4, 2, 3, 0, 0, 0, -6, -1, + 1, -1, -3, -7, -6, 4, 1, 7, 3, 7, 7, 0, 4, 0, -5, 1, -4, -12, -10, -7, -7, 4, 8, 11, 8, 1, 13, 0, -6, 5, + -4, -1, 3, 2, -4, 2, 1, -3, 2, -2, -3, 2, -2, 2, -1, 1, 4, -1, 0, -2, 1, 5, 3, 3, 0, 5, 3, 6, 2, -4, + 3, -1, 3, 0, -8, -15, -13, -4, 14, 11, 12, 1, -2, 15, -11, -11, -4, 1, -12, -4, -4, -14, -1, 5, -8, 3, 4, 15, -3, 4, + -3, -6, 5, -7, 0, 1, -3, -5, 1, 8, 0, -3, 0, -6, -3, 0, 4, -1, 17, 11, 7, 6, -3, 3, -1, -4, -7, 4, -3, -2, + -8, 2, 3, 1, 1, -5, 2, -4, 4, -29, 15, 12, 9, -1, 1, 3, 6, 3, 1, 2, 0, 5, 0, 4, -2, -1, 6, -4, -6, -1, + -8, -9, 1, 1, -11, -4, -3, -6, 5, -6, -12, -12, -7, -11, -4, 1, -6, -2, 6, -5, 0, 8, 1, -9, 0, 4, 7, 5, 3, -9, + -2, 8, 7, -10, 0, -1, -5, 1, 11, -2, -1, -1, 0, -13, 6, 1, -5, 2, 1, -16, 10, 6, -1, 9, 4, 2, -2, -2, -10, 3, + 16, -7, -9, 11, -3, 8, 3, 1, -9, -11, -2, -4, -6, 5, 2, -7, -8, -4, -9, -4, 0, 9, -1, -7, -5, -2, -18, -8, -12, -10, + -4, 2, -3, -7, 4, -4, 8, -5, 8, 5, 6, -3, 0, -10, -6, 4, 7, -1, -5, -4, -8, -4, -5, -4, -6, -8, -4, 1, 4, 5, + 1, 2, 6, 5, 8, 5, 5, 1, -2, 4, -3, -4, -7, -1, -9, -9, -1, 0, -10, -8, -10, -2, -4, 0, 2, 4, 8, 3, 1, 1, + 2, 2, 1, -4, 5, 5, 3, 4, -3, -1, -7, -2, -6, -5, -13, 6, -3, -4, -3, -9, -3, -5, -4, -7, -1, -4, -9, -11, -1, 2, + 15, 7, -1, -1, 14, 9, 7, 6, 1, -6, 4, 10, 3, -2, 4, 4, -3, -3, -2, 5, 2, 3, 0, 8, 10, 3, 2, -6, 2, 9, + 5, 6, 2, 5, 6, 1, 6, 3, 17, 3, -17, -14, 4, 7, -8, -6, -22, -20, 7, -4, -16, 3, 1, -14, -11, -1, 3, -4, 1, -1, + 11, -5, 3, -1, -1, -15, -12, 7, -1, -6, -14, -6, -3, -1, 0, 0, -6, -5, 3, -2, -4, 3, 9, 5, 3, 9, 16, -3, 7, -3, + 0, -4, -10, -13, -3, -6, -5, 4, 7, -4, -4, 1, 1, 4, -21, -8, -3, -9, -3, -5, 5, 0, 3, 0, -11, -14, -7, -1, 4, 9, + 3, -5, -14, -18, 1, 7, 5, -5, -10, -10, -2, 4, -5, -9, -10, -5, 6, -7, -12, -3, -10, -5, -2, -7, 2, 8, 12, -5, 1, -6, + -7, -11, -10, -10, -3, -1, 6, 7, 4, 9, 3, 3, 9, 14, 3, -4, 1, -7, -7, -5, 6, 2, 2, 12, 3, 3, 3, -2, 19, 17, + 18, 16, 6, -9, 5, -2, -13, 11, 3, -5, -12, 6, -1, 1, -9, -14, -10, -10, -9, -3, -12, -3, -1, 7, -8, -5, 8, 1, 3, -6, + 5, -6, -15, -3, -13, -1, 8, 10, 1, -5, -2, 5, -2, -4, 12, 5, 3, -2, 1, 1, 4, 3, 6, -2, -1, -1, 2, 6, 2, 3, + -1, 5, 5, 5, 5, -4, -3, -6, -4, -4, -4, -2, -1, -4, -1, 3, -2, 4, -1, 3, 1, 3, -4, 2, -2, 4, 0, 4, -3, -4, + 1, 4, -3, -4, 2, 10, 1, 2, 2, 10, 9, 5, -2, 4, 5, -8, 4, -3, -7, -8, 2, -6, -2, -3, -7, -9, 0, -4, 5, 3, + 5, 7, -1, -1, 3, -7, -5, 5, 7, 4, 5, -1, -1, 1, -3, -9, -8, -4, 0, 4, -1, 1, 1, -4, -2, 1, 4, -4, -2, 6, + 13, 7, 1, 4, 4, 0, 8, -1, -2, -3, -4, 3, 3, 9, 4, -18, -14, 4, 19, -27, -10, -16, -24, 20, 9, -20, 2, 10, 9, -19, + 6, -6, 3, 2, -3, 2, 4, 10, -3, -2, 4, -1, 14, 1, 10, -3, -3, 5, 7, -1, -9, 7, 3, -12, -4, 5, 4, 2, 2, 8, + -2, -1, -8, 3, -1, 0, -4, -12, -5, -7, -14, 6, -1, 9, -4, 12, 9, 0, 18, -14, -2, -5, -1, -10, -6, -4, -14, -7, -10, -6, + -2, 9, 1, 8, -4, 8, -5, 1, -4, -3, 3, 2, -6, -3, 3, -4, 0, -1, -3, 5, -4, -12, -16, 0, 2, -5, 0, 9, 11, 15, + 0, -4, 9, 4, 6, -5, 1, -10, -9, -8, -1, 4, -4, 0, 5, 17, 21, 16, 5, 2, -5, 2, -1, -6, 1, 0, 1, -4, 0, 19, + 8, -10, 1, -11, 2, -4, -6, -20, -12, -5, -17, -10, -13, 9, -2, 12, -8, 13, -14, 13, -7, 17, -4, 2, 8, 15, 5, -4, -11, -4, + -10, 3, -16, -21, -11, -9, -3, -1, 3, 25, -1, 0, -1, 13, 6, 8, 20, 15, 8, 6, 6, 4, 5, 11, 4, 6, 2, 1, 1, 5, + 2, -2, 3, 4, 9, 10, 4, 8, 7, 5, 7, 7, 9, 7, 3, 4, 6, 7, 7, 3, 3, 5, 1, 5, 13, 12, 7, -3, -9, -7, + -9, -6, -9, -12, -19, -6, -12, -14, -17, -13, -8, -2, 0, 2, 3, 0, 0, 8, 4, 3, 4, 6, 6, -1, -2, -4, 3, 2, -5, -8, + 3, 2, 5, -1, 0, -2, -1, -3, -6, -7, -5, 2, -8, 2, 0, -2, 0, 2, -3, -1, -6, -8, -6, -1, 0, 5, 4, -7, -4, -5, + 0, 5, 0, -5, 1, -5, 0, -4, 12, 14, 8, -1, 5, 5, 0, 3, -3, 9, 11, 2, 9, -19, 0, 16, -47, -1, -18, -20, 49, 19, + -21, 20, 36, -1, -7, 19, 13, 12, 3, 0, 5, 18, 11, 14, 8, 11, 0, 10, 5, 5, 2, -2, 10, 1, 0, 6, 4, 1, 0, 2, + 4, -4, 3, 6, 10, 0, 4, -2, 8, 10, 5, -1, 0, -2, 2, 3, 3, -8, 14, 11, 5, 9, 11, 12, -2, 50, 51, 32, 14, -8, + -11, -8, -8, -2, 3, -4, 0, -5, -9, -12, -13, -11, -2, 2, 11, 10, 19, 18, 11, 8, 7, 11, -6, -8, -19, -18, -12, -7, 2, 5, + 18, 21, 31, 25, 18, 20, 32, 38, 38, 34, 33, 42, 21, 15, -4, -10, -11, -17, -17, -12, -8, -11, -13, -17, -21, -35, -35, -33, -27, -22, + -18, 2, 5, 0, -6, -4, 7, 18, 20, 13, 13, 11, 2, 8, -2, 0, -12, -15, -3, -4, -14, -15, -8, -17, 3, -17, -6, -17, 2, 0, + -1, 10, 18, 1, -11, 3, 11, 2, -9, -11, -10, -20, -14, -4, 6, 6, 10, 12, 16, 18, 6, 25, 30, 37, 33, 1, -1, -2, -4, -4, + -3, -10, -5, -3, 0, 1, -7, -11, 1, 5, 10, 3, 5, 2, 8, 5, 8, 8, 5, -11, -7, -5, -13, -21, -38, -24, -16, 1, 6, 12, + 22, 24, 22, 25, 26, 26, 29, 34, 20, 7, 14, 8, -5, -8, -13, -24, -26, -28, -35, -16, -11, -11, -12, -6, -12, -32, -18, -23, -23, -22, + -20, -16, -22, -29, -30, -27, -33, -21, -32, -37, -34, -39, -26, -22, -6, -1, -7, -8, 0, -8, -5, -3, 2, 2, 11, 2, 1, -3, -9, -13, + -30, -33, -34, -36, -38, -28, -20, -15, -6, -1, -3, 6, 14, 14, 14, 10, 2, 6, 13, 15, 14, 13, 16, 22, 30, 29, -49, -15, 80, -24, + 5, -38, -49, 74, -23, -127, 12, 51, -41, -28, -5, -16, 6, -31, -10, 35, 5, -30, -2, 7, -4, -15, 5, -2, -7, -8, 2, 17, 8, -3, + 6, -3, -3, -8, 3, -1, 0, -4, 1, -5, -3, -7, 5, -1, -9, -17, -7, -9, -7, -2, -11, -5, -3, 0, -2, 5, -3, 1, -2, -29, + 0, -3, -10, -2, -6, -3, -3, -5, 6, 3, 7, 0, -3, 5, 5, -4, 2, 2, 0, 1, 5, 2, 1, -2, -1, 7, 1, -4, 2, 2, + 2, -5, -16, -3, 6, 1, -1, -3, 4, 5, -6, -4, 4, 5, 0, 7, 8, 7, -8, 3, -1, -3, -2, -3, -1, 2, 5, 5, 6, 9, + -1, 0, 9, -3, -7, 3, -9, -13, -8, -12, 2, 4, 4, -1, -11, -7, -1, -1, -7, 0, 9, 14, 5, -2, 0, -6, -4, -10, -6, -9, + -4, 0, 5, 2, 5, -10, -2, 7, -4, -15, -1, -12, -1, -5, -5, 4, 3, 0, 0, 2, 11, -1, 3, 11, -9, 14, 16, 17, 1, 7, + 7, 6, 1, 1, 7, -1, 8, 0, -2, 5, 2, -5, 1, 3, -1, 0, 3, -4, 4, -2, 4, 7, 8, 0, -5, -6, -4, -5, 1, 0, + 5, 4, 2, 4, -2, 2, 2, 5, 6, 7, 3, 1, 1, 0, 1, 2, 0, 1, 5, 7, 3, -8, -5, 4, 2, 4, 5, 0, 3, 4, + 5, 1, 1, 0, 0, 7, -2, 4, -2, -2, 5, 3, 8, 1, 0, 0, 1, -9, -17, -16, -2, 0, -4, -4, -3, 3, 3, 5, 7, 0, + -2, -4, -5, -8, -3, -4, 1, 2, 3, -3, 0, -7, -3, 1, 5, -3, 5, 0, 3, 1, 5, -5, 0, 0, -2, -2, 2, -1, -5, 7, + 29, 20, 0, 9, 15, 10, 11, 0, -5, -12, -10, 0, 6, 4, -9, -4, 0, -1, -9, 13, 12, -9, 13, 7, -9, 14, -4, 9, 1, -4, + 1, 2, -1, -5, 6, 2, -5, -5, 3, -9, -1, -12, -1, 8, -2, 0, 14, 0, 11, 2, 1, -1, 1, 1, -4, 1, 6, -12, -2, -5, + 4, -6, -2, 1, 19, 0, -4, -4, -2, -9, -4, 5, 11, 2, 3, 6, 13, 12, 10, -1, -6, -6, -2, 7, 0, 7, -3, 6, 1, -2, + -4, -4, -6, 1, 7, 1, -2, 0, 3, -5, -5, 1, 8, 0, -1, -2, 3, 0, -5, -2, 4, -7, -6, 4, 0, -14, -7, 0, -9, -4, + 6, 10, 9, 3, -2, 3, 4, 1, -3, -2, -3, -6, -1, -4, -8, -1, 2, -4, -1, -3, -7, -7, -6, -1, -6, 9, 1, 5, 5, 12, + 5, 5, 7, -5, 1, 17, 4, 6, 6, 5, -19, -14, -13, -7, -4, -5, -12, 8, -3, -6, 4, 0, 5, 6, 2, -5, 7, -3, -6, 1, + -1, 2, 4, 3, 0, 3, 7, -1, 5, 4, 1, 6, 4, 1, 6, -3, -2, -5, -9, -11, -4, 1, 1, -2, 1, 1, 6, -1, 4, -1, + 5, -5, -6, 1, -1, 4, 6, 3, 10, 1, -1, 2, 1, -6, -1, -6, -4, -8, -9, -5, -7, -9, -5, 8, 5, 0, 3, 10, 10, 4, + -3, -3, -9, -3, -1, 0, -2, 0, 6, 3, 5, -1, -2, -1, 6, 8, 3, 9, -4, -3, -8, -5, -4, 0, 0, 3, 4, -7, -8, -4, + -3, 1, -4, -2, -1, 3, 2, 1, 7, 5, -3, -5, -2, -11, -1, 3, 3, 0, -3, 6, 2, 2, -2, -2, 2, -4, -11, -8, -7, 2, + -2, 2, 4, 2, 13, 6, -2, -14, 2, 4, 2, 9, 4, 10, 6, -7, 2, 4, -12, -6, -13, 2, -1, 4, 2, 4, 6, 6, 3, -4, + 5, 3, -7, -2, -2, -6, -1, -1, -1, 7, -3, -3, -8, -5, -12, -12, 3, 3, -7, 2, 4, 1, -3, -3, 1, -12, 11, 5, -1, -5, + 21, 6, -7, -7, -10, -2, -10, 2, 2, 30, -1, 6, 1, -7, -1, -10, 3, -3, 3, 5, -4, -11, -3, -12, -1, -10, -6, -2, 5, 0, + 5, 5, 2, 6, -4, 0, 9, -7, 4, 6, 8, 18, 10, 5, 7, 5, 4, 0, -3, 7, -5, -5, 0, 8, 7, 2, 4, 6, -4, 3, + 0, 3, -8, -3, 5, 5, -5, -6, -10, -13, 6, 1, 6, 17, 10, -2, 8, -4, 2, -8, 2, 14, -2, 1, 5, -2, 9, 9, -7, -7, + 6, -2, 0, -15, -8, -16, -14, -13, -8, -5, 4, 8, 1, -6, -8, -3, -3, 2, 10, 3, 12, 0, 1, 3, -10, -6, -10, 4, 7, 12, + -3, -1, -5, -1, -13, -3, 4, 17, 12, 3, 8, 6, 5, -4, -3, 1, 2, 1, 5, -2, 6, 2, 5, 2, 2, -3, -3, -8, -9, -5, + 4, 3, 4, 5, 5, 6, -3, -4, -7, -6, -3, 6, 2, 1, -3, -3, -4, -5, -3, 1, 0, -6, -6, -5, 0, -13, -5, 4, 4, 3, + 1, 0, 2, 1, 1, 3, 2, -10, -5, 4, -2, -5, -6, -10, 1, -3, 2, 2, -4, 1, 4, -1, -8, 1, 1, -3, -2, 7, -4, 7, + 5, 2, 2, 2, 1, 1, 3, 2, 11, -8, 4, 3, 4, -7, -12, -8, -1, -3, 4, 2, 5, 2, -2, 3, -7, 0, -9, -2, -4, 1, + -1, 8, -1, -4, -12, -3, 5, -1, -2, -1, 21, 4, -9, 8, 8, 2, 7, 4, 8, 1, 2, -5, 2, 5, 7, 0, 9, 4, 0, 0, + 2, -5, -13, -2, 0, -3, 0, 2, 4, 5, -6, 2, 1, 1, -1, -14, 2, 8, 9, -9, 2, 2, 2, -17, -7, -6, -5, 7, -1, 2, + -6, 7, 7, -2, 7, 1, -2, -4, -8, -13, 9, 7, 7, 4, 22, -8, -4, -2, -4, -11, -11, 8, 13, 12, -8, -8, -9, -3, -8, 0, + -8, -10, -20, -9, -9, -6, -7, -13, 1, -6, 10, -5, 0, -6, 4, 12, 2, 6, -4, 5, 1, 0, 1, 3, 3, -8, -15, -13, -7, 1, + -13, -4, -4, 11, -1, -12, -7, -6, -6, -1, -10, 2, -4, -13, -10, 2, -1, -14, -2, 3, 0, 4, -4, -12, -9, 1, 1, -3, -4, 4, + 13, -3, 0, -1, 1, 0, -7, 11, -2, 7, 0, -13, -9, 2, -6, -11, -13, -3, -7, -5, 16, 4, 14, 1, 8, -4, -1, 0, 1, -2, + 11, 5, 8, -2, -11, 0, 1, -3, 5, 1, 1, 8, 13, 10, 2, -2, -2, 2, -2, 2, 0, 6, -1, 7, 6, 2, 10, 6, 3, 8, + 0, -2, 1, -6, 5, 0, -7, -1, -5, 6, 5, -6, -6, -1, -4, -1, 0, 2, -2, 2, -1, 1, 5, 4, 4, 4, -2, -6, 2, 2, + 1, 0, 0, 1, -5, -4, -1, 1, 3, 3, 2, 1, 5, 3, 6, 5, -5, -5, -2, -2, 6, -10, -15, -10, -10, 1, 1, -12, 2, 1, + 5, 0, -2, -5, 6, 10, -7, 5, 7, 6, 11, 8, 2, 3, -1, -5, 5, -3, 9, 0, 13, 5, -1, 1, -1, -9, 5, 4, 0, 1, + 2, 9, 3, -6, 1, -6, -2, -2, -6, 13, 5, 1, -2, 3, -1, 28, -8, -12, 3, -6, -3, 2, -12, 10, -5, -9, 1, -5, 11, 4, + -8, 1, -2, -9, -5, 1, -13, -5, -5, -10, 7, -8, 3, -2, 7, 5, 4, 2, -3, 9, -6, -3, -6, 16, -3, -5, -6, 4, 0, -3, + -6, -3, -9, 6, -1, 3, 5, 5, 0, 0, 2, 13, 10, -9, 4, -2, 8, 11, 10, 5, -11, 4, -1, -1, -8, -10, 3, -4, -1, 13, + -1, 13, 10, 3, 5, 12, 6, 1, 0, -2, 6, 1, -1, 4, 12, 17, 12, 11, -2, -9, 12, 17, 5, 0, -7, -3, 1, -13, -22, -16, + -5, -6, 3, -5, 9, 1, 14, 18, 19, 6, -4, -3, 0, -1, -7, -12, -3, 1, -1, 5, -3, 2, -6, 0, -3, 4, 2, -13, -2, 5, + 8, 4, 12, 10, 1, 5, 6, 10, 9, 15, 15, 8, 0, 4, 10, -4, -5, 7, 9, 15, 1, 7, -3, -3, -10, -8, -8, 14, 3, 22, + 16, 4, 13, -3, -16, 0, -12, 2, -23, -16, -13, -4, -20, -10, -7, -5, -9, -3, -13, -26, -3, 0, -4, -10, -8, -3, -1, -2, 2, 4, + 4, 1, 2, 5, 5, 1, -2, -9, -4, 2, 1, 4, 1, -5, 4, 5, 2, -4, -3, 0, 0, 10, 3, -2, -2, -1, -2, -1, -1, -5, + 0, 1, 3, 1, 1, -5, -3, 7, 5, 8, 4, -1, 0, 6, 1, -7, -3, -3, -2, 0, 2, 6, 1, -2, 0, 4, -5, 0, -6, -5, + -11, 1, -2, 0, 0, 0, 4, 4, -2, 2, 2, 1, 0, 9, 2, 4, 0, -1, 5, 5, 2, -3, 0, 0, 0, -3, -5, -8, -3, 0, + 6, -4, 8, 1, -1, 0, -1, -1, -1, 5, 5, 6, 5, 3, 10, 0, 12, 5, -2, -17, 98, 7, -24, -5, -2, -17, 1, -7, -12, -33, + -23, -7, -27, -1, 2, -13, 11, 14, -2, 5, -11, -13, 3, 4, 2, 5, -3, -8, 10, 3, 13, 16, 1, -12, 4, -8, -2, 9, 9, 7, + -1, 6, 1, 4, 3, -1, -6, 5, 1, -6, -9, -3, 7, 10, 10, -3, -1, 10, -12, -3, 7, -1, 8, 16, -27, 5, 12, 13, 2, 5, + -1, -3, 15, 8, 8, 12, 20, 5, 1, 12, 7, -2, 1, -18, -14, -8, 2, -1, 4, 2, 3, 7, -1, -4, 7, 12, 19, 17, 30, 23, + 16, 23, 30, 27, 25, 14, 8, 17, 24, 21, 29, 41, 35, 20, 9, 17, 7, 14, 15, 10, 1, 16, 8, -2, 16, 19, 11, 15, 27, 13, + 18, 15, 11, 13, 11, 8, 31, 15, 7, 24, 9, 9, 7, 9, 13, 15, 22, 26, 18, 10, 5, -11, 4, -4, -4, -17, 13, 10, 4, -1, + 15, 16, 21, 11, 8, -3, 0, -6, -22, -22, -6, -13, -16, -11, -9, -16, -37, -27, -30, -14, -5, -12, 12, 12, -14, 12, 6, 2, 2, -3, + 2, -1, 6, 4, -1, -2, 1, -1, 6, 8, 12, 7, 10, 12, 9, 8, 17, 12, 11, 14, 7, 10, 14, 9, 14, 19, 31, 22, 20, 27, + 23, 12, 8, 12, 10, 22, 15, 10, 15, 15, 13, 18, 22, 26, 28, 27, 17, 11, 20, 18, 17, 19, 13, 14, 20, 24, 34, 28, 31, 37, + 50, 38, 45, 43, 37, 35, 46, 35, 32, 41, 47, 43, 37, 40, 31, 40, 26, 41, 26, 32, 31, 35, 36, 28, 26, 9, 8, 5, -11, -22, + -20, -26, -27, -30, -33, -51, -45, -50, -67, -72, -77, -78, -93, -84, -101, -112, -122, -123, -127, -112, -109, -96, -82, -84, -109, 107, 22, -42, -6, 9, + 2, -9, -24, -20, -18, -19, -13, -33, 8, 9, -28, 4, 22, 6, 4, -8, -10, -10, 20, 7, 1, -18, -3, -6, 1, -8, 1, -14, 4, 10, + -8, 5, 10, 2, 3, -1, -5, -1, 3, -4, -4, -10, -8, -2, -3, 1, 9, 10, 6, 0, -3, -7, -13, -15, -10, 4, -9, 7, 7, 17, + 4, 2, 6, 4, 1, -2, 1, 5, 1, -2, 6, 3, -5, -3, 3, -4, 0, 1, 0, 4, 2, -1, 0, -2, -1, -1, -3, 7, 7, 1, + -6, -3, -5, 0, -2, -5, -5, 1, -6, 1, 7, 4, 3, 6, 7, 7, -3, 3, 3, 0, -4, -9, 1, -1, 2, 7, 11, 3, -3, 6, + 6, 2, 4, -3, 2, 7, -2, -3, 4, 2, 6, -3, 4, 4, 3, -3, -5, -6, 6, 6, -4, -2, 5, -1, -7, -3, -3, -5, -3, 2, + 2, 0, -3, 1, 2, -1, 1, -2, -3, -2, 9, 1, -5, 0, 0, -1, 1, 1, -4, 3, 1, -2, -2, -9, 7, -2, -1, 0, -5, 3, + -5, -5, -5, -3, -4, 0, 2, 6, 1, 4, 6, 3, 3, 4, 1, -2, -5, -2, -4, -5, -2, -4, 0, 0, -3, 1, 5, 4, 0, -6, + -5, -7, -1, -1, -6, -9, -1, 0, -1, 1, 3, 2, 1, 7, 4, 9, 2, 2, 0, 2, 2, -2, 1, 9, 0, 6, 4, 5, 1, -3, + -2, 1, 0, -5, -1, 3, 2, 6, 3, -1, 5, -1, 0, -1, -3, -3, -3, 2, 2, 0, -4, 3, 9, 0, 0, 0, 3, 0, -8, -6, + -6, -4, -8, 0, -1, -1, 0, 6, -5, -2, -3, 2, -4, -2, 3, -1, -4, -4, 3, 3, 2, 2, -1, -2, -4, -6, 6, 8, -6, -3, + 16, 3, 14, 4, 3, 2, 6, 13, 5, -1, 0, 10, -6, 4, -12, -2, -2, 0, 0, 0, -4, -5, -6, 3, -6, 4, 0, -5, -1, -3, + 2, 6, 12, 1, -13, -1, 7, 7, 7, 3, 2, 6, 9, 2, 3, 0, -4, -3, 1, 3, -1, -6, -5, 4, -2, -2, -5, 2, -6, 1, + 0, 10, 8, 7, 14, 0, -7, 2, 2, 7, 0, -2, 5, 1, -1, 0, -4, -10, -3, -3, 4, 5, 4, -2, -2, -8, 4, -6, -4, 4, + 1, 1, 3, -6, -3, 2, 5, 0, 0, 5, 6, 1, -4, -6, 2, 7, -1, -4, -6, 4, 6, 0, 1, 8, 10, 4, 6, 3, 8, -3, + 3, 0, -1, -2, 5, -1, 8, 11, 4, 6, 1, -1, -1, -7, 6, 4, -2, 6, -5, -6, 0, 2, 2, -4, 8, -4, 0, 5, 2, 1, + -1, -4, 10, 1, 7, -1, 5, -10, -4, -4, 2, -6, -11, -5, -2, 0, -3, 0, -7, 2, -14, 4, -2, -4, 5, 4, -5, 7, 1, 2, + -3, -3, 5, 0, 6, -9, -4, -5, 1, -3, -3, -8, -3, 0, 1, 1, 4, -4, 0, 3, -1, 1, -3, -2, -1, -3, -4, -2, 6, 4, + 4, 2, 0, 3, 5, 4, 7, 3, -2, 2, -3, 5, 0, -2, -3, -1, 1, -5, -1, -1, 0, -9, -6, -4, 1, 1, -5, -2, 2, -5, + -1, 6, 2, 0, 6, 3, 6, 3, 4, 6, -1, 2, 1, -5, -3, 0, 1, -7, -2, -5, 0, 3, -6, -5, -10, -7, -4, 4, -5, 2, + -2, -2, 3, 7, -5, 2, 1, -2, -1, -3, 4, 2, -2, -4, -2, -4, -8, -13, 0, 10, 0, -4, 3, -2, -2, 3, 1, 2, -6, -7, + -2, 0, 7, 10, 6, 7, 1, 3, -6, -5, 3, -6, 5, 4, -8, 1, -9, -10, -2, -3, -14, -4, -3, -5, 5, -2, 4, 10, 11, 5, + -4, 1, -7, -3, -1, 4, 4, 5, -2, -4, -3, 0, 2, -1, 11, 6, 10, 9, 3, 6, 7, -1, -5, 0, 6, 4, -3, -1, 3, 3, + -6, -6, -2, 3, -3, -9, -6, -10, -3, 3, 1, 1, -4, 7, 8, 4, -9, -5, -5, -4, 0, 12, -1, -2, -3, -5, -6, 4, 4, -5, + 0, -9, -10, -2, 4, 0, -1, -7, -3, -9, 0, 0, -2, -3, -2, -2, -2, -2, -6, 1, 2, 0, 6, -4, -5, -4, 6, -6, -5, -2, + 6, -3, 0, 7, 7, 5, 4, 2, -2, 2, 6, -3, 0, 3, -3, 0, 7, -5, -7, -2, 4, -2, -8, -2, -8, 1, 6, -4, -4, 0, + 0, 4, 4, 9, 5, 13, -6, 4, 2, 1, 6, -1, -13, -4, -6, -7, -3, -3, 0, -6, 1, -3, 8, 0, 1, -2, 3, 3, 8, 2, + 7, 10, 7, 5, 8, 0, -2, -1, -7, -6, -4, -5, 2, 3, -3, -1, -4, -1, -3, -4, 0, 3, 1, 3, 1, 0, 2, 4, 6, 2, + -6, -2, -6, 0, -1, -2, -3, -5, -1, -4, 0, 5, 4, 2, 1, 2, 3, -4, -4, -4, 3, 5, 3, -1, 1, 4, 1, -3, 3, 0, + 4, 0, -7, -6, -3, -8, -8, -4, -2, -1, 4, 4, 6, 3, 1, 4, -1, -3, -5, -5, 5, 3, 0, 1, -1, 0, 1, -1, 2, 3, + -4, 5, 3, 3, 1, 0, -2, -4, -1, 0, -7, -9, -2, -7, -2, -2, -4, 4, 6, 0, 2, 1, -2, -5, -8, -6, -3, 2, -4, 1, + -5, -5, 7, 5, -1, 0, -1, 4, 1, -4, 1, 17, 7, -2, 6, 21, -8, 4, -10, -3, -4, -4, -4, -2, -9, 1, 0, -5, 1, 4, + 0, 3, 2, -7, -12, -7, -2, -7, -6, 0, 5, 0, 0, -10, -7, -2, -6, 4, 3, 0, 7, 9, 6, -4, -5, 9, -2, -6, -4, -3, + 6, 1, 2, 4, 0, 0, -4, -1, 1, 0, -3, 0, -5, -2, 0, 9, 0, 11, 3, 5, 2, -9, -13, -10, -9, -7, 1, -1, -6, -2, + 9, 11, 2, -1, -3, -10, -2, 5, 15, 10, 3, -2, -4, -8, -4, -8, -3, -9, -10, 0, -5, -7, -6, 2, -1, -2, 0, -1, 2, 2, + 8, 1, 0, 8, 7, 5, 3, -3, 0, -9, -6, -2, -12, -11, -10, -2, -2, -6, -8, 0, -7, -6, -5, 0, 9, -2, -1, 1, -8, 4, + -5, 2, -5, -2, 3, 7, 7, -1, 9, 5, 1, 6, 4, 15, -2, 10, 7, 0, 4, -2, 9, -3, 8, -2, -6, -14, -12, -14, -6, -7, + -11, -5, 0, -5, 9, 4, -5, -3, 1, -7, -3, -4, 1, -8, 12, 6, 5, 4, 2, 1, -1, -3, -2, -4, -10, -1, 0, 2, -1, 0, + -8, -3, -3, -1, -5, -5, -3, -4, 2, 9, 6, 2, 0, 1, -2, 0, 3, 5, 6, 4, -2, -3, -3, 1, -1, 1, 2, 3, 2, 3, + -1, 0, -8, -3, -2, -1, -5, -6, -11, -8, -8, -5, 5, 2, 5, 10, 8, 1, -4, -6, -2, 5, -5, -3, 2, 0, 9, 6, 2, -1, + 1, 5, 1, -3, 3, 3, 8, -4, -7, 3, -4, -5, -4, -3, -4, 1, -2, -4, 3, -2, 5, -1, 0, -4, -8, -1, 2, -1, 2, 5, + -3, 3, 7, 4, 5, -9, 3, 3, 1, -3, 2, -5, -2, 6, 3, 14, 9, 3, -3, -6, 1, -2, 3, -1, -3, -8, -6, 2, 5, 1, + 3, 9, -1, 2, 4, -3, 4, -1, -4, -1, -9, -11, -6, -1, 2, -11, -4, 2, -8, -3, -10, -6, -5, 0, -4, 4, -2, -8, -3, 1, + 0, 0, -3, -7, 9, 3, 0, -9, -6, -8, -8, 5, 0, 9, 9, 1, 6, 8, 1, -13, 1, 8, 12, 8, 2, 0, 12, 2, 4, -2, + 8, 9, 11, 11, 0, -13, -3, -2, -2, 3, 11, 15, 16, 3, -7, -2, 1, -1, -4, 0, 7, 6, 3, -4, -1, 8, 1, 9, -3, 9, + 8, 6, -3, 5, 10, 16, 15, 28, 21, 6, -6, 2, 3, 2, 8, 6, 1, 4, 6, 6, -13, 5, 6, -10, -7, -3, -1, -3, -7, -6, + -6, 8, 1, -3, -5, -5, -5, -2, 5, 0, 2, -8, 2, -11, 2, -1, -7, -17, -10, -11, 4, 8, 23, 20, 27, 13, 1, 4, -3, -9, + -14, -9, -6, -12, -3, -12, -9, -8, -21, -5, -11, -4, -5, -9, -5, 0, 4, 4, 8, 8, -7, -5, -5, -7, -5, -6, 0, -4, 0, -3, + 0, 0, 4, 2, -1, -3, -1, -1, 0, 1, 6, 8, 7, 0, 3, -5, -4, -7, -4, -5, 2, 4, 3, -1, -8, -3, 3, 8, 2, 4, + 10, 10, 3, 3, 6, 3, -3, -4, -4, -11, -6, -9, -7, -1, -5, -6, 1, 1, 0, 3, -6, 4, -1, -2, 0, -6, -4, -4, -5, -7, + -4, 1, 3, 3, 1, 7, 6, -3, -5, 2, -2, -1, 4, 2, 2, -2, -8, -15, -4, -1, 4, 4, 7, 11, 15, 13, 0, 2, 1, -6, + -4, -5, -6, 1, 6, 3, 2, 9, 4, -1, 2, 3, 7, 3, 1, 3, 4, 1, 7, 15, 17, 7, 0, -1, -16, -13, -1, -7, -17, -3, + -2, 0, -8, 3, 7, -16, 3, 10, -1, 4, 19, -2, 1, 4, 0, 8, 2, -3, -3, 8, -7, 1, 2, 0, 0, 1, 8, 7, 7, 8, + 3, -7, 5, 1, 5, 0, 2, -1, -1, 5, 4, 5, -3, 10, 2, 5, -3, 4, 1, 2, -5, -5, -2, -1, -13, 10, 0, -6, -16, -13, + -11, -3, 8, 5, 14, 7, -1, -9, -14, -10, -6, -4, 1, -3, 2, -7, -7, -8, -3, 1, 5, 8, 2, -2, -5, -8, -8, -4, -2, -10, + -8, -18, -24, -27, -18, -17, -4, 0, 1, 3, 3, -2, -14, -21, -25, -24, -18, -5, 5, 8, 12, 2, -18, -12, -9, -1, 7, 9, 9, 13, + 6, 10, 11, 10, 16, 12, 17, 21, 12, 13, 14, 17, 15, 16, 10, 7, -5, -4, -5, -6, -2, -5, 8, 4, 11, 2, -8, -14, -19, -22, + -25, -20, -2, -1, 5, -19, -9, -29, -17, -10, -8, -2, -7, -4, -8, -1, -3, 3, -6, 0, -8, 33, 10, -2, -5, 4, 3, 9, 9, 2, + 7, 2, 1, 5, 3, 3, 2, 0, 5, 9, 5, 4, 0, 2, -5, -5, -1, 1, 0, 2, -3, -4, 1, 1, -5, -4, 2, -5, -3, -5, + -7, -1, -1, -4, -2, 4, 2, 2, 3, -2, 0, 0, -7, -9, -11, -10, -6, -3, 4, 11, 16, 11, 16, 12, 12, 13, 9, 8, 6, 8, + 4, 1, -1, 3, 0, -2, 6, 7, 3, 5, 7, 7, 15, 17, 17, 16, 16, 13, 20, 14, 8, 8, 2, 1, -9, -16, -33, -44, -46, -42, + -31, -10, 9, 17, 25, 24, 21, 2, 6, 10, 15, 23, 28, 23, 30, 34, 34, 27, 16, -1, -19, -30, -51, -79, -105, -4, -116, 109, 28, -76, + -6, 127, -56, -22, 102, -52, -27, 63, -38, -33, 42, -25, -7, 24, -35, -10, 31, -18, -3, 13, -8, -16, 8, -2, 0, 9, 4, 2, 6, 6, + -7, 2, 5, 8, -1, 10, -9, 0, 4, 6, 4, 13, 2, 1, -5, -3, -5, -3, -4, -5, -8, -10, -13, -7, -4, -8, -7, 3, -14, 41, + 0, 3, 6, 0, 2, 3, -4, -2, -7, -5, -2, 2, 0, 1, 3, -2, -9, -10, -10, 0, 5, 8, 7, 5, 0, 0, 4, 0, -8, -9, + -7, 0, -3, 6, 4, -1, 6, 3, -6, 2, 3, 6, 0, -3, -6, 5, 4, -3, 3, -1, 8, 4, 6, -3, -4, -11, -8, -2, -5, -7, + 0, -2, -4, -3, 3, -2, -2, 0, -1, 1, -2, 2, -4, -1, 1, -9, -7, -2, 10, 4, -5, 3, 6, -2, -1, 1, 4, -5, -2, -9, + -5, 6, 9, 6, 8, 4, 1, 6, 5, 2, -2, 3, 3, 1, -5, 13, 3, 6, 9, -7, -5, -1, 0, 3, -1, -4, 2, -8, -9, -7, + -5, -6, -2, 4, 4, 3, -1, 0, -2, 3, 3, -5, -6, -1, -1, 0, 0, -4, -5, 10, 6, 4, 0, 3, -1, -1, -2, -4, -5, -2, + -1, -2, 1, 4, -1, 3, -5, -6, -4, -5, -6, -1, -6, -2, -6, -3, -6, -10, 0, -2, -7, -6, 4, 7, 9, 3, -1, 4, 8, 6, + 2, -1, -2, -2, 4, 2, -11, -3, 7, 3, -2, 2, -4, 5, 6, 7, 5, 2, -3, 7, 6, -2, -6, 6, 3, 4, 4, 1, -3, 0, + 0, 3, 0, 2, 1, -1, -5, -2, -4, -2, -4, -3, -3, 0, -1, 6, 0, 3, 5, 7, 2, 5, 1, 4, -6, -10, -5, -5, -11, 15, + 11, 25, -5, 9, -3, -2, 9, 2, 11, 9, 16, 1, -3, 2, -3, -1, -13, -9, -3, -6, -6, 9, 18, 1, 1, 6, 3, 12, 6, -1, + -3, 1, 12, 0, 4, -5, -1, -3, -3, 1, 3, -2, 1, 6, 7, 7, 8, 6, 1, -8, -3, 0, -4, -8, 6, -4, 0, -11, 3, 5, + 4, 4, 1, 5, -15, -7, -2, 5, 0, 4, -1, 1, -2, 0, -4, -1, -2, 1, -7, 4, 6, 0, 8, 9, -2, 10, 2, -1, 12, -2, + 2, 5, -3, -4, -4, -4, -2, -5, -6, 2, 3, 6, -2, -8, 1, -2, 5, 5, 14, 4, -6, 0, 0, 5, -4, -3, -5, -3, 1, -1, + -5, -7, -5, -11, -11, 12, 6, 7, 16, 7, 8, 19, 5, 16, 2, 0, 12, -4, 2, 0, -10, 8, -2, -4, -9, -7, -7, -4, -7, 1, + -3, 10, -5, -2, -6, -3, 0, 1, 1, -9, -3, -13, -1, 7, 6, 4, 7, 8, 6, -1, -5, -1, 2, 1, 9, 2, 5, -7, 0, -6, + 3, -4, -10, -5, -10, -2, 3, -1, 0, -1, -2, -3, -1, 3, 8, 6, -1, -1, -2, -1, -4, 1, 0, 3, 6, 5, 5, 2, 2, 4, + 6, 2, 1, 5, 1, 5, 3, 1, -4, 0, -3, -11, -9, -8, -8, -9, -3, -3, -5, -1, -5, -5, 0, 1, 3, 3, 2, 3, 12, 7, + 2, 2, 4, 9, 6, 10, 2, 5, -4, -4, -1, -2, -8, -3, -3, -7, -1, -3, 6, 0, -7, -4, -1, -1, 8, 3, -4, -5, 6, 4, + 1, -3, -2, 2, -2, -9, 1, 0, 7, 8, 2, 4, -3, -1, 1, 2, -1, 0, -3, -7, -7, -2, 3, 0, 1, -4, -7, -15, -2, -3, + 1, -2, -7, -8, 1, 1, 32, -7, 15, -7, -15, -3, 1, 16, 0, 19, 12, -14, -4, -10, 3, -2, -13, -12, -6, 5, 12, 9, 3, 0, + 1, 3, 3, 5, 1, -3, 8, -1, -7, -10, -9, -9, -6, 7, -6, 7, 0, -2, 2, 5, -1, 3, 6, 6, -8, 0, 5, 1, -3, 3, + -2, 0, 2, 6, 3, 1, -11, -5, -5, -3, 3, 5, 14, -1, 1, 2, 2, 2, -6, -2, -3, -7, -4, -6, 0, 10, -6, 3, 1, 5, + -5, -6, -8, 2, 3, 20, 9, -1, 9, 4, -2, 7, -2, -1, 4, 11, 1, -5, -5, 3, 3, 2, 0, 2, 4, 6, 2, 5, 2, 6, + -1, 8, 1, 14, 15, 7, 4, -1, 4, 4, 7, -8, -2, 0, -5, 7, 1, -4, 5, -2, 1, 10, -11, -1, -3, -12, -5, -3, 2, -4, + -12, -6, 2, -8, -4, -2, 1, 15, -6, 7, -2, 12, -2, 3, -4, -4, -6, 9, 13, -6, 3, 6, -12, -4, -8, -13, 1, 2, -3, 1, + 8, -3, -13, -3, -10, 5, -3, 4, 6, -7, -4, 3, 0, -3, -2, 0, 4, -1, 1, -1, 1, -8, -10, -5, -7, -5, -4, -3, -1, 1, + 4, 4, 2, 5, -1, 0, -4, -2, -2, 1, 2, 1, -3, -6, -1, 6, -6, -2, 6, 9, 1, 3, -2, 1, 6, 8, 4, 0, 1, -5, + -1, -11, -7, 5, 5, -2, 4, 8, 4, 8, 2, -1, -3, -5, -9, -14, -8, -5, -7, -6, 4, 5, 3, 1, 0, -7, 2, 3, 2, -4, + 0, -2, 7, 9, 7, 7, 6, 1, 0, 2, -3, -1, -2, -2, 3, -2, 1, 4, 9, -2, -1, -3, -4, -3, -2, -3, -5, -6, -5, -1, + 9, 0, 0, -5, -4, 0, 2, 2, -4, -2, -13, 32, -14, 13, -8, -12, -18, -15, 8, 8, 6, 7, 2, 5, 15, 1, -10, -4, -2, -10, + -7, -8, 11, -1, 7, -4, 0, 2, 8, 4, -3, 7, 4, 0, -10, -9, -6, -2, 0, -10, -15, 0, -4, 3, 4, -12, 7, -1, -7, 3, + -3, 2, -1, -2, -9, 5, 3, 0, 2, 5, 8, -4, -7, -1, 5, -10, 0, 10, 6, -8, -6, 5, -1, 2, 7, 1, 5, 6, 2, 0, + 0, 1, 0, -1, 0, 5, 0, -2, 13, 12, 2, 3, -2, 1, 8, 3, -1, -5, 0, -7, 0, 5, -2, -3, -7, -15, -8, -5, 3, -6, + -9, -5, 8, 10, 5, -5, 10, 5, 10, 6, 9, 4, -2, 13, -2, 1, 2, 1, -6, -10, -1, 1, 3, 11, 7, 4, 3, 2, 6, 10, + 1, 3, -7, 6, -1, -13, -3, -12, -12, -10, -19, -11, -8, -12, -4, -14, -4, 2, 11, 0, 3, 8, -1, 5, 8, 19, 2, 3, 5, -1, + -3, 0, 9, 5, -2, -14, -10, -10, -6, -9, 3, 0, 6, 8, -8, -3, -5, -3, -2, -1, 2, 10, 10, 12, 9, 8, 5, 5, 4, 7, + 5, 3, -3, -5, -3, 2, 1, -1, -5, -2, -6, -6, -3, 4, -1, 5, 2, -3, -2, 5, 7, 7, 12, 9, 10, 8, 0, 6, 6, 5, + -5, -3, -7, -11, -8, -10, -4, -3, -9, -8, -3, 5, 6, 1, 2, 7, 1, 7, 6, 0, -3, -6, -4, 3, 3, 7, -1, -1, 1, 4, + 2, -1, 2, 6, -3, -1, 1, -7, -4, -2, -2, -4, -2, -5, 2, 0, -1, 3, 6, 5, 14, 2, 1, 5, 1, -5, -4, 1, 9, 0, + 1, 11, 8, 8, 4, 6, 7, 3, 2, -4, -4, -4, -8, -12, -20, -14, 48, -31, 2, -6, 6, -18, -10, 30, 15, -1, 10, -15, -5, 18, + 11, -5, -5, -3, 9, 2, -13, 4, 4, 5, -7, 4, 3, -4, -5, -2, 4, 10, 6, -12, -5, 1, -2, 8, -1, -12, 3, -5, -2, -13, + -2, -2, -4, 3, -1, -1, -5, -15, -9, 6, -2, 2, 0, 1, -4, 0, -4, -3, -8, 13, -29, 0, 2, 4, 3, -2, -3, -6, 1, 10, + 9, 3, 0, -4, -4, -15, -10, -14, -8, 3, 5, 3, 3, -1, -2, 5, -4, -2, 9, 6, 9, 5, -10, -8, 0, 13, 6, 13, 6, -5, + -10, -5, -10, -12, -18, -8, -1, 5, 4, 3, -5, 0, 5, 12, 13, 21, 14, 2, 15, 7, 4, 11, 5, 9, 17, 14, 6, 11, 16, 7, + 9, 11, 2, 16, 11, 6, 22, 15, 22, 12, 17, 19, 5, 2, -2, -16, -27, -42, -47, -62, -49, -52, -22, -28, -21, -26, -22, 8, 14, 14, + 15, 18, 11, 13, 9, 5, 26, 22, 7, 22, 18, 6, -1, -9, -1, -5, 1, -2, 5, 12, -3, -1, -1, -2, -2, -2, -5, -8, -5, -3, + 0, 3, 7, 0, -3, -5, -4, -10, -2, -1, 3, -2, -5, -5, 2, -6, -14, -17, -8, -7, -9, -9, -4, -6, -8, -5, -1, -6, 2, -4, + -6, -6, 4, 5, 11, 12, 4, 0, 1, -2, -5, -6, -6, -1, -3, 1, 0, -10, -4, 2, -2, -2, 0, 2, -2, -1, -2, -7, 7, 9, + -1, 4, -1, 9, 1, 5, 9, 14, 15, 11, 11, 14, 1, -7, -4, -13, -28, -39, -40, -43, -34, -20, -1, -6, -8, -4, 8, 12, 5, 12, + 4, 5, 7, -3, -2, 2, 5, 4, 8, 1, 6, 7, -3, 5, -5, -3, -3, -5, -8, -18, -27, 78, -72, -5, 8, -7, -41, -42, 43, 17, + 3, -7, -37, -6, 24, 14, -12, 1, 2, 3, 10, -4, -2, -1, 5, -1, -2, 4, 6, 6, 8, 13, -4, 13, 9, -1, -5, -3, 4, -5, + -7, 1, -4, -3, -4, 1, -5, 1, 2, -4, -3, 1, -2, 7, -4, 5, 1, 1, -6, -11, 0, 0, -1, -10, 27, 3, 9, 2, -2, -4, + 8, 6, -9, 0, -2, 0, 5, 10, 14, 7, 5, 2, -10, -18, -5, -11, -10, -5, -2, 5, 7, 10, 23, 18, 5, 7, 9, 14, 5, -1, + -4, -13, -10, -3, -5, -8, -7, -7, -4, -8, 4, 4, -2, -5, -16, -4, 1, -1, -4, 0, -5, -12, -10, 2, 1, 2, 5, 6, -15, -12, + -7, -7, -4, -3, -3, 0, -2, 17, 16, 3, 9, 8, 16, 18, 5, 12, 19, 22, 22, 18, 14, 3, -4, 5, -3, -1, 17, 19, 16, 5, + -2, 8, 13, 12, 22, 20, -1, -2, -5, -15, -23, 4, 10, 5, 19, 14, -2, -12, 7, 0, -2, -7, 5, 11, 9, -22, -17, -12, -1, 1, + 2, 6, 3, 2, -7, -1, 9, 18, 11, 3, -1, 0, -1, -3, -9, -16, -14, -10, -6, 0, -3, -16, -17, -5, -1, -9, -10, -8, -9, -9, + -14, -9, -3, -6, -6, -6, 4, 6, 9, 7, 14, 10, 2, 8, -2, -2, 6, 4, 2, -2, 2, 3, 1, 5, 12, 16, 5, 3, 6, 3, + 5, 1, -4, -2, -4, -5, 5, 1, 4, -2, 8, 11, 18, 16, 15, 18, 25, 18, 21, 22, 9, 3, -10, -9, -15, -25, -19, -17, -28, -30, + -20, -14, 4, 12, 19, 16, 8, 6, 2, -4, -3, -7, -6, -15, -26, -31, -34, -34, -29, -28, -13, -7, 0, -3, -2, -13, 89, -127, -49, 70, + 31, -75, -106, 23, 48, 0, -35, -74, 16, 56, -10, -39, -4, 30, -2, -6, -4, 3, 8, 0, -19, 8, 8, 19, 4, -3, 8, 11, 10, -5, + -9, -2, -1, -7, 0, 2, 1, -7, 2, 9, 11, 5, 9, 10, -6, 1, 15, 15, 6, -1, 4, 8, 5, 6, 9, 7, 9, 18, 15, -3, + 0, 4, -1, -12, -12, -6, 0, 2, 5, 12, 5, -3, -4, 0, -4, 6, -1, 1, -2, -3, -9, -3, -4, -5, -1, -1, -2, -3, -6, -10, + -6, -12, -5, -6, -6, -7, -8, -3, -5, -6, 2, 2, -3, 8, 3, 0, -3, 0, -1, -3, 0, 2, -7, -11, 1, 16, 17, 8, 11, 5, + 11, 6, 2, 4, -1, -11, -9, -1, -4, -4, 2, 6, 3, 14, 6, 2, 2, 4, 1, 6, 4, 0, -1, -2, 0, 2, 15, 4, 3, 14, + 1, 0, 4, 14, 3, -3, 8, -2, -1, -1, 4, 8, -2, -10, -2, 1, -4, 4, 3, -9, 3, 3, 4, 5, 6, -8, 4, -9, 6, 6, + -3, -7, -5, -8, -6, 0, 0, 4, 2, 2, 6, 3, -5, -2, 4, -2, 2, 4, 2, 2, 1, -3, 3, 2, 7, 7, 7, 1, -2, -5, + -6, -2, -2, 0, 3, 2, -3, -2, -3, -1, -6, 5, 5, 8, 2, 5, -4, -1, -8, -3, 6, -5, -3, -4, -1, -2, 3, 2, 0, 1, + -7, -4, -9, -3, -2, -17, -13, -18, -4, -1, -1, 0, -1, 8, -3, 7, 6, 6, 7, 6, 6, 1, -7, -3, -2, -1, -4, 3, 8, -1, + 4, 4, -2, 0, -4, 0, 1, -2, -4, -3, 5, 0, 5, 2, 6, 1, -4, -3, -4, 5, -1, 3, 4, -4, 2, 7, -1, 4, 5, 8, + 6, 7, 5, -1, 17, -1, -3, -7, 8, 2, -9, 0, -11, -13, 6, -3, -4, -3, 5, 1, 2, 4, -10, -5, 5, -7, -13, -5, 1, -18, + -8, -1, -6, -7, 0, -2, 10, 1, -2, 4, 7, 6, -1, 2, 6, -1, -12, 3, 7, -3, -7, -5, 1, 7, 8, -9, -1, 4, 3, 3, + -10, -5, -7, -4, 3, -2, 4, -1, -1, -12, -4, -1, -3, 7, -2, -6, -16, -4, -2, -6, -1, -10, -11, -6, -4, -6, -3, -4, -6, 1, + -3, 5, -3, -5, 3, -3, -1, 2, -7, -10, -9, -3, -4, -5, 4, -2, -1, -4, -8, -8, 2, 9, 5, -1, -7, 3, -3, 6, 7, 12, + 4, 3, -1, -6, -4, -4, -1, -7, -1, -3, -8, -6, -3, -7, -7, -10, -3, 1, 5, 5, 7, 8, 12, 0, -4, 7, -2, 0, 0, 10, + 9, 1, -5, 7, -7, -7, -4, 6, 9, 1, 2, 8, 11, 18, 10, -1, 9, -2, -8, -6, -7, -9, -7, 2, -11, -2, 5, 3, -5, -5, + -5, -4, -6, 1, 1, -3, -5, 1, 2, 4, -2, 3, 3, 1, 3, -2, 1, -4, -2, 1, -2, 1, 2, 0, -1, 0, -1, -1, -1, 2, + 2, 2, -1, 0, 0, 1, 6, -1, -5, 0, 5, 4, 2, 1, 4, 2, 4, 4, 1, -1, 9, 2, 5, -1, -3, 0, -5, -1, 0, -2, + -2, -4, 1, 1, 3, -1, 2, 3, 3, 6, 3, 5, 5, 0, -2, -3, 0, 5, 6, 7, 5, 1, 7, 4, 0, 0, 0, -1, -7, 1, + 10, 8, 2, -8, -6, 4, 4, -2, 3, -2, 1, 0, 5, 2, 3, -8, -4, -2, -9, 14, 9, 6, 4, 10, 5, 7, 4, 3, 3, 0, + -3, 4, 5, -5, 7, 8, 9, 15, -5, 4, -13, -14, -5, -9, -3, -13, 9, -7, -3, -10, 2, 5, 2, -6, -2, 2, -7, 0, -4, 2, + 2, -4, -10, -2, -4, 14, -4, -7, -7, -4, 2, -1, 0, 9, 2, 6, 5, 1, -3, -9, -7, -2, 0, 3, -8, 7, -7, 5, 8, 7, + -2, 1, 2, 8, 4, -8, 5, -2, -15, 4, -6, -9, 0, 9, -2, -9, 4, 0, 2, -1, 2, -2, -2, 3, 7, 7, 8, 6, 3, 11, + -1, 10, 5, 5, 8, 16, 9, 9, 7, 8, 0, -1, 7, 6, 1, -3, 5, 2, -1, -2, 2, 1, -3, -6, -4, -4, -4, 1, 2, 4, + -5, 1, -3, -10, -3, -10, 3, 3, -12, -9, -3, -4, -9, -12, -17, -8, -5, -7, 0, -1, 2, 3, 2, 1, -3, 9, -2, 1, 1, 1, + 2, -1, 3, -4, -13, -8, -2, -6, 1, 3, 0, 0, -3, 15, 6, 0, -9, -1, -1, 9, 6, 14, 3, -2, 3, 3, -4, 1, 3, -5, + 6, -6, -2, -1, -6, -11, 5, 1, -2, 4, -1, 2, 1, 6, 9, 6, 1, -6, -3, -5, 1, 1, 2, -3, 5, 5, 4, 12, 9, 1, + 6, 7, 9, 0, -2, -5, 3, -1, -1, 1, 0, 0, 0, -4, -6, -2, -5, -3, 2, -2, 0, 0, 4, 5, 3, 5, 6, -2, -2, 1, + 0, 1, 1, 4, -3, -7, -1, 2, 2, -7, -5, -1, -4, -2, -4, -4, 5, 5, 3, -1, 9, 8, 2, 2, 0, -4, -1, -3, 0, -4, + 6, -7, -2, -5, -6, -11, -7, 2, -2, -6, 3, 6, 5, 3, 1, -4, 4, -1, -3, -7, 0, 2, 9, 6, 18, 13, 4, 3, 8, 6, + -4, 3, 1, 3, 0, -3, -1, 10, 1, 8, -8, -14, 11, -12, 4, -16, -25, -4, 1, -12, -9, 5, 5, 9, 0, 13, -1, 2, -4, 0, + 3, 4, 1, 4, -7, 3, 2, -6, 8, -1, 4, 5, -3, 4, 4, 3, 3, 5, 5, 4, 8, -13, -6, -5, 2, -6, -6, 6, -1, 2, + 0, 7, 11, 8, 8, 0, 0, -1, 5, 5, 7, -1, -7, -4, 8, -11, -4, -7, -5, 0, -7, -7, 0, 1, -6, -7, 2, -1, 7, -4, + -8, -8, -8, -12, -3, 1, 1, 5, 11, 10, -1, -5, 4, 0, 8, 6, 1, -6, -6, -11, -13, -12, -7, -12, -14, -5, 7, 7, -8, -14, + -1, 8, 6, 4, 3, 1, -10, 2, 6, -5, -1, 8, 13, 10, 9, -7, 4, 4, -7, 3, 1, -2, 8, -1, 4, -2, -17, -1, -4, -12, + 0, 2, 0, -4, -9, -10, -4, -3, -6, -14, 2, -2, 7, 0, 11, -1, 6, 11, 14, 13, 13, 4, -2, 15, 11, 6, 4, 8, -5, -4, + -14, -16, -16, -4, -5, -2, 2, 11, -2, -1, -1, -6, -13, -1, 1, 10, 7, 6, 10, 7, 8, 5, 0, 1, 10, 5, -4, -5, 1, -5, + -3, 2, 3, 3, 1, -4, 1, 5, -3, -4, -8, -2, 5, -1, -1, -5, 2, -4, -2, 0, -4, 0, -2, -3, 1, 2, 8, 0, 1, -7, + 9, 9, 11, 10, 6, 6, 2, 2, 5, -2, -11, -8, -5, 0, 0, -7, 2, -8, -4, -1, -5, 0, 4, -3, 4, 7, -2, 2, -3, -7, + -6, -10, -3, -2, -5, 2, 11, 3, 1, 3, 3, -3, 5, 7, 9, 11, 11, 10, 4, 7, 6, 2, -6, -8, 0, -3, -12, -6, -6, -1, + -9, -8, -1, -6, 12, 12, 5, 3, -5, -10, -2, 5, 3, 4, 7, -6, -30, 4, -21, 26, -16, -54, 6, 5, 1, -5, -10, 2, -6, -5, + 11, -15, -3, 1, 10, 12, 0, 9, -2, 7, 6, 0, 7, 14, 1, -5, -2, 3, 6, -1, -1, -3, -6, -5, 11, -1, 3, 6, -9, 8, + -2, -10, -4, -1, -1, 3, -4, 3, -6, -6, 5, 2, 3, 4, 1, 15, 7, 0, 1, 25, 6, 15, 9, 4, -10, -1, -4, -1, -9, -1, + 0, -11, -9, 5, -5, -14, -12, -5, -11, -5, -13, -10, -1, -9, -2, 2, 4, 3, 7, 4, 7, -4, -4, -4, 1, -3, -5, 3, 9, 11, + 5, -2, 11, 13, 9, 11, 11, 20, 5, -4, 6, -1, 0, -5, 3, 5, -9, -10, -6, -11, -17, -24, -17, -28, -30, -22, -30, -7, -16, -11, + 12, 5, -15, -3, -3, 0, 3, 6, 13, 0, 10, 2, 8, 3, 3, 4, 6, -5, 6, 6, 18, 17, 24, 17, 23, 12, 3, 4, 11, 6, + 12, 11, 12, 6, 8, 11, 7, 7, 2, 2, 7, -15, 3, 3, 10, 11, 11, 13, 6, 9, 3, 6, 8, 12, 9, 1, 1, -4, -8, -3, + -7, -3, -9, 1, 2, 1, 2, -8, -2, -4, 3, -3, -2, -1, -2, 3, 6, 7, 6, 8, 1, 4, 1, 5, 5, 9, 7, 13, 10, 10, + -4, 3, 9, 6, 7, 10, 4, -2, 2, 11, 5, 19, 16, 10, 10, 11, 0, -3, 2, -6, -7, -7, -12, -15, -19, -11, -14, -3, -5, -7, + 4, 1, 2, 5, 12, 6, 3, 10, 6, 0, 5, 5, 10, 3, 4, 7, 1, -4, 1, 0, 0, -1, 7, -3, -4, 2, -5, -5, 7, 4, + 5, 3, -1, 3, -1, -3, -4, -3, -9, 5, 0, 0, 7, 1, 0, 7, 12, 20, 13, 10, -6, -42, 7, -25, 63, -40, -65, 22, 6, 29, + -16, -33, -5, -3, 2, 20, -9, 2, 8, 0, -7, 4, 13, 12, 4, -3, 4, 11, 17, 2, 2, 2, -2, 0, -6, -3, -3, -5, -2, -1, + 9, 4, 8, 6, 12, 7, 0, 4, 8, 4, 1, 11, -1, -1, 2, 0, 2, 4, 13, 11, 5, 9, 9, 12, 30, -5, -3, 4, -4, 1, + 3, 2, 4, -9, 0, 11, 28, 30, 33, 37, 36, 23, 22, 6, 5, -11, -13, -9, -10, -14, -10, -8, -9, -1, -6, -4, 1, -1, -6, -19, + -13, -12, 0, 7, -3, -6, -14, -11, -16, -4, 4, 5, -9, -18, -13, -14, -11, -6, -1, -5, -3, 8, 31, 41, 48, 33, 22, 19, 4, -2, + -13, -23, -19, -23, -29, -30, -32, -39, -27, -30, -30, -20, -7, -6, -14, -16, -5, -6, -6, -14, -13, -27, -25, -38, -24, -3, 15, 14, 22, 30, + 17, 23, 1, 22, 12, 14, 16, -6, 14, 13, 13, 7, 22, 17, 36, 27, 15, 22, 14, 24, 22, 11, 7, 11, -9, -9, -7, -6, 1, -1, + -9, -11, -15, -7, -6, -5, -7, -3, -4, -2, 1, -5, -9, -12, -16, -18, -26, -23, -25, -16, -11, -18, -13, -19, -18, -25, -35, -24, -16, -23, + -20, -16, -7, -6, -7, -10, -9, -10, -12, -5, 5, -3, -15, -13, -12, -18, 1, 5, 9, 4, 12, 13, 29, 26, 22, 2, -6, -32, -51, -65, + -69, -70, -68, -69, -59, -40, -37, -21, -19, -10, -19, -21, -7, -11, -27, -11, -8, -5, 6, 7, 3, -4, -5, -4, 1, 7, 7, 12, 5, 1, + -1, -5, -8, -2, -4, -1, 3, -2, 8, 12, 8, 3, 1, 7, 9, 5, 6, -2, -3, 0, 22, 29, 25, 30, 31, 23, -7, -11, -21, 127, + -57, -66, 32, 17, 56, -75, -32, -12, -11, 27, 7, -4, -9, 25, 13, -25, -16, 19, 14, -15, -21, -5, -1, 5, -4, 8, -13, 2, 15, 2, + -8, -1, 12, 1, -9, -8, 2, 2, 5, 1, 5, -7, -4, 0, 5, -8, 0, -1, 5, -6, -4, 0, 10, 12, 2, 2, -2, -15, -3, -17, + 12, -2, -3, 5, 4, 13, 8, 8, 2, 8, 5, 10, 7, 4, 7, -1, 11, -1, 1, 1, -2, -5, 12, 4, 5, 10, 1, -3, -5, -5, + -3, 1, -2, -6, -2, 11, 12, -1, 4, 7, 7, 1, -3, -1, 5, 0, 0, -11, 1, 5, -3, 1, -4, -9, 4, 11, 4, -1, -2, 1, + -3, 2, 4, 7, 11, 9, 7, 18, -3, -3, 0, -9, 2, -1, 5, -3, 9, 8, 8, -11, -10, 4, -10, -5, -1, -1, -10, 1, 11, 8, + -2, 13, 2, -9, 9, 13, 1, 2, 7, 10, 8, 2, 0, -2, -11, -15, -2, -8, -11, 15, -3, -2, -7, 9, 1, 8, -4, 8, -1, -4, + -2, -6, -4, -10, -10, -1, 2, 2, -3, -9, -1, 1, 4, 0, 6, -1, -3, -2, 0, 2, -2, 4, 2, 4, 6, 3, 0, 2, 1, 6, + 8, 2, 11, 6, 1, -4, 4, 3, -3, 4, 6, 6, -3, -1, -3, -3, -1, -2, 7, 4, -6, -1, 0, 0, -4, 2, 0, 0, -7, 1, + 1, 0, -11, -5, 3, 2, -12, -3, 0, -4, -5, 0, 1, 6, 12, 8, 6, 6, 3, -2, -3, 1, -6, -4, -3, -12, -3, -6, 7, -3, + 11, 2, 3, 1, 1, -7, -15, -11, -13, -2, 4, -2, 3, 0, -3, 1, 2, -5, 1, 8, 5, 2, -14, -7, -7, -6, 5, 9, 12, -2, + -24, -13, 12, -6, -24, -13, -10, 0, 2, 12, -3, 0, 3, -1, 10, -2, 7, -3, -7, -3, 5, -19, -14, 1, 0, 0, 7, 10, 1, 11, + 14, 3, 1, -7, -1, -8, -14, -7, -2, -13, -11, -5, 10, 2, 12, -4, 4, 9, 8, -5, 4, -1, -4, -3, -7, -7, 4, 0, -10, 0, + 5, 5, 5, 4, -24, 7, -3, -1, -1, 3, -6, -18, 4, -3, 4, -1, -6, -16, -3, 1, -3, 5, 11, -9, -7, -1, -8, -3, 12, 16, + 10, 3, 6, 1, 0, 1, -5, -9, 3, 7, 4, 3, -1, 3, 4, 5, 8, 5, 8, 8, 1, -1, 2, -1, 12, 0, -11, 2, 7, 8, + -3, 4, -5, -8, 7, 9, 9, 11, -3, 4, 13, 0, -9, -6, 2, 2, 8, 3, -6, 2, -4, -2, -15, -4, 7, -2, 5, 4, -2, -8, + 5, 4, 1, 7, 5, 4, -9, 1, -10, 6, 9, 4, -8, -12, 5, 4, -7, 0, -3, -6, 2, 6, 6, -12, -7, -6, -22, -15, -5, -6, + 3, -2, -2, -6, -9, 8, 1, 0, -2, 1, -3, 4, 5, -2, 3, -4, 1, -1, -1, -5, -1, 1, -1, 4, 1, -6, -6, -7, 4, 7, + -2, 0, -6, -1, 0, -9, -2, 2, 6, -2, 4, 3, 4, 3, 4, 6, 0, -14, -4, -3, -9, -1, -2, 4, 1, -10, 4, 9, 6, 7, + 5, 10, 6, 9, 2, 3, -7, -6, -6, -4, 2, -2, 3, 3, 7, 6, 10, 11, 12, 14, 4, 1, 3, -5, 5, 0, -1, 2, -3, -2, + -5, -1, -5, -2, -4, -9, 0, 7, 3, 3, 1, 2, 1, 1, 11, 4, 5, 13, 8, 4, 9, 1, -4, 3, -10, -4, -4, -13, 3, 8, + 0, 0, 0, 7, 1, -34, 3, 5, -3, -20, -10, 2, 3, 4, 12, -2, 6, 12, 9, -1, 12, 4, 2, 2, 0, -5, -11, -25, -8, -12, + -1, 6, 8, -2, 4, 3, 5, 12, 7, 2, -11, 5, 1, -10, -5, -10, -14, 0, 6, 1, -1, 10, 8, 5, -1, 6, 1, -3, -2, -11, + -4, -3, -11, -10, 3, 2, 3, 4, 7, -21, 20, 8, 3, 10, 9, 9, 1, 2, 5, 7, 6, 6, 2, 7, 5, 10, 13, 8, 4, 2, + 0, 0, -1, 2, 0, -7, 2, 12, -4, 0, 4, 7, 16, 12, -1, -4, -1, 6, 1, 4, -1, 9, 1, 4, -5, 5, 2, -5, -2, 1, + 5, 4, 11, 3, 7, 5, 0, 4, -4, 0, -4, 7, 6, 8, 9, 1, 2, 8, 6, 8, -3, -7, 0, -13, -3, -2, 4, -6, 1, 9, + 10, 18, 5, 8, -10, 4, -1, -7, 3, -10, -9, 1, 4, -4, -2, 10, -3, -1, -2, 9, 7, -3, 12, -3, -3, -13, -7, -8, 0, 5, + 0, -6, -12, -13, -12, 5, -2, -6, -13, -18, 3, 0, -6, -5, -11, -10, -9, -11, -9, -5, -2, -3, 4, 6, 8, 4, 0, -1, 0, 2, + 4, -3, -5, -1, 4, 9, 6, 5, 6, 0, 4, 8, 4, 10, 2, -6, -4, 5, -4, -5, 4, -1, -12, -10, -4, -5, 0, 0, 8, 4, + -2, 7, 9, 8, 3, 0, -3, -8, -8, -12, -3, -6, -6, -4, 8, 15, 15, 14, 2, 2, 5, -4, 5, 0, 3, 1, 4, -1, -2, 1, + 5, 2, 8, -1, -3, -5, 1, -5, 3, 2, -14, -11, -5, -6, -2, 2, -5, -3, 11, 4, 6, 1, 4, 3, 0, 8, 1, -6, -4, 2, + 8, 5, -7, 3, -6, -1, -5, -2, -12, -19, -19, 30, 10, 8, -12, 7, 4, 5, 15, 7, 11, -5, 10, 1, 0, -20, 10, 4, 3, -15, + -10, 3, -1, -1, 2, -10, 4, 3, -5, -11, 1, 1, 2, 3, 4, -4, -1, 6, -12, -8, 6, -7, 1, 6, 6, 2, -7, -9, 6, 8, + -4, 0, -10, -1, -6, -4, -5, 4, 0, 2, 0, 0, -7, 5, -9, 3, -4, -5, 8, 15, 8, 1, 3, -1, 5, -1, -3, -2, 14, 4, + -8, 6, 4, 1, 5, 1, 2, -8, 1, -3, -1, 3, 1, 1, 0, 9, 12, 3, 6, 2, 7, -7, -5, 1, 7, 7, 2, -2, -4, 2, + 5, 5, -5, -3, 10, 10, -6, -4, 8, 11, 3, -6, -5, 8, 9, -3, -3, 8, 3, 6, 9, 7, 9, -3, 2, 4, 1, 9, 1, 2, + 6, 9, -9, 4, 7, -6, -3, 5, 1, 7, 6, 2, 5, -2, -16, -7, -3, -16, -18, -3, -5, -20, -23, -1, -5, -1, -19, -4, -4, -9, + -17, -9, -5, -12, -4, -3, -8, -1, -2, 3, -3, 4, 10, 12, -2, -8, -6, 3, 11, 2, 7, -3, 2, -1, 4, -1, 3, -1, -1, 5, + 3, -2, -19, -8, -3, 3, -9, -9, -2, -3, -4, -16, -10, -8, 0, 0, 5, 14, 15, 5, 1, 2, -4, -3, 0, 3, -3, -6, -2, 1, + 2, -6, -7, -1, 4, -2, -3, -2, -1, 8, 4, 7, 7, 3, -5, -7, -8, 10, 10, 13, 4, 2, 4, -3, -8, -8, 6, -8, 4, -7, + -2, 1, 5, 0, -3, -6, -4, 2, -3, -8, -3, 2, 11, 8, 0, 3, 0, -15, -22, -10, 10, 3, -12, 4, 11, 12, 7, 6, 1, -12, + -6, -3, -1, 10, -1, 0, 13, -2, -3, -5, -10, -4, -5, -8, -28, -37, 33, 2, 2, -14, 9, -12, 19, 31, 10, 7, -15, 4, -6, -8, + -10, -8, -10, 0, -21, -7, 13, 6, -11, 9, -10, -4, 1, -5, 0, 0, -3, 6, -6, 1, 3, -12, 2, -14, -2, -12, -9, -11, -8, -5, + 3, 5, 2, 10, 2, -3, 15, 4, -1, 4, -6, -7, -5, 5, 0, 5, 5, 0, -3, -6, 15, -4, -14, 3, 5, -18, -3, 3, 7, 11, + 6, 5, 5, 15, 7, 2, 6, 3, 0, 14, 11, -3, -14, -8, -5, 2, -9, -3, -12, 4, 13, 4, 0, 4, -2, -1, -6, -4, -1, -1, + 3, 2, 12, -3, 13, 17, 12, -14, 0, 4, -15, -24, -21, -6, -17, 5, 2, 5, 15, 14, -3, 6, 4, -8, -6, -2, 11, 3, 9, 8, + 12, 10, 19, 6, -1, 10, 5, 0, 2, -2, 2, 11, 7, 20, 26, 19, 6, 21, 15, 19, 28, 31, 7, -12, -24, -32, -46, -60, -66, -62, + -37, -40, -11, 11, 11, 6, -2, -3, -18, -14, -4, -8, -15, 7, 13, 5, 13, -3, 5, 3, -9, -12, -12, -10, -3, -4, 6, -1, 0, -3, + -8, -11, -19, -13, -5, -8, -4, -4, -4, -5, 0, 2, 1, -2, 3, 0, -9, -8, -13, -13, -6, -6, -2, 7, -7, -7, -5, -1, -4, -1, + 14, 7, 0, -4, -2, -2, -9, -13, -13, -14, -6, -10, -12, 4, -8, -9, -5, -5, -2, -2, -6, -2, 11, 9, 3, -8, -3, -10, -7, -17, + -24, -15, -29, -27, -15, 2, 2, -5, -7, -6, -14, 8, 10, 4, 17, 10, 9, 16, 4, 18, 7, -8, -24, -25, -40, -51, -63, -74, -73, -49, + -37, -34, 5, 15, -2, -1, 0, 7, 6, -1, 2, -16, -16, -2, -1, -8, -10, -25, -27, -17, -29, 44, -17, -10, -44, 0, -77, 29, 39, -10, + 17, 16, 26, 11, -2, -1, -5, -6, 6, -13, 18, 13, -3, 2, 17, 11, -5, 0, 10, 16, 0, 9, 13, -6, 5, 15, -12, 4, -4, -8, + -3, 5, -4, 2, -3, 7, 9, -2, 12, 7, 6, 9, 16, 1, 1, 1, -7, -6, -9, -1, -1, 4, -3, -19, -8, -8, -6, -12, 10, 29, + 11, 9, 2, -18, -8, -9, -14, 8, 13, 0, -16, -25, -24, -19, -19, -10, 8, 14, 2, 4, 0, -9, -19, -7, -8, 8, 26, 28, 8, -2, + -12, 3, -9, -8, -2, 1, -15, -22, -26, -21, -29, -22, -12, 11, 34, 24, 10, -11, -39, -25, -12, -6, 12, 13, 1, -5, -19, -18, -3, -11, + -7, 4, 8, -1, -17, 5, -7, -1, 5, -14, -9, 2, 5, -2, 0, -13, -1, -4, 2, 29, 27, 20, -8, -18, -17, -16, 12, 26, 53, 58, + 59, 30, -22, -47, -46, -5, 21, 63, 71, 70, 28, 1, -29, -30, -25, -8, 7, -5, 3, -9, 14, -9, -2, 11, 1, -11, -15, -11, -5, -3, + 0, 6, 2, -3, -8, -8, -11, -15, -15, -19, -15, -6, 5, -3, -10, -15, -18, -15, -13, -14, -15, -20, -19, -17, -22, -16, -13, -10, -16, -21, + -20, -11, -13, -23, -22, -4, -7, -16, -2, 7, -12, -5, 3, -2, 3, 0, 0, 5, 8, -9, -11, -9, -8, -6, -14, -20, -24, -21, -6, -1, + -15, -6, 6, 7, 8, 7, 16, 6, 5, -1, 2, 17, 20, -9, 10, -3, 3, -7, -7, 0, 4, 2, 3, -6, 8, 17, 40, 45, 56, 52, + 11, -44, -100, -127, -122, -105, -69, 3, 28, 19, 18, 4, -19, -31, 0, 4, 5, 29, 17, 9, -12, -21, -40, -56, -57, -26, 35, -31, -17, -41, + -13, -120, 21, 19, -27, 3, 36, 9, 26, 4, -12, 2, 3, -14, -2, -3, -8, -10, -17, -6, 8, 1, -2, 6, 0, -5, 5, 6, 0, 3, + 2, -3, 1, -3, -12, -6, -4, 0, -2, -2, 2, 6, 8, 19, 12, 19, 10, 6, -2, 6, -1, 3, -2, 7, 8, 1, 11, 2, 8, -22, + 6, 0, 0, 2, 4, 9, 5, -4, -1, -2, -1, 2, 0, -2, 0, 1, 3, -1, -2, -3, -2, -5, -3, 0, -4, -1, -1, -2, -3, 4, + 1, -1, -4, -1, -1, 1, 2, 4, 5, 2, -6, -1, 2, 1, -2, 1, 4, -1, -3, 1, 3, -3, 1, 2, 1, -1, 2, 0, -2, 5, + 6, 6, 6, 0, 4, 5, 6, -3, 3, 5, 4, 4, 2, -3, 4, -1, 3, 5, 6, 3, 2, 2, 4, 5, -3, -4, -4, 2, 4, -4, + 7, 4, 0, -2, 4, 1, -3, -2, -5, 3, -2, -3, -8, -7, -6, -7, -2, 0, 2, 0, 1, 2, -4, 4, 0, -5, -9, -5, -5, -5, + -6, -7, -4, -8, -6, 0, 3, 3, 1, -4, -1, 1, -1, -2, -3, -3, -1, 5, 4, 3, 1, 2, 8, 5, 2, 0, -1, -2, 0, -4, + -2, 0, 1, -2, 3, -1, 1, -1, -1, -1, -4, -2, -2, -1, 2, 5, -1, -8, -3, -6, -4, 1, 2, -1, -1, 0, 1, 0, 1, -2, + 1, 2, -1, -3, 3, 2, -5, -2, 4, 4, 0, 3, 0, -2, -1, 9, 3, 4, 3, 0, 0, 1, 3, 3, -6, 1, 3, 2, -3, -3, + -5, -4, 2, -3, 4, -4, -1, 0, 1, 7, 4, -2, -3, -5, -5, 0, 2, 3, 2, 2, -2, 3, 4, 5, 2, 4, 2, 5, 0, -11, + 6, 11, -9, 4, -12, 9, 7, -3, 2, -3, -9, -11, -1, 7, -17, 0, 1, 3, 6, 4, -1, 2, 1, 4, -7, 3, 4, -3, 8, -6, + -3, -8, -3, 4, 6, 6, 7, -2, 6, 7, 2, 2, -1, -11, -4, -12, -5, -8, -5, -7, -4, -1, 1, 1, 8, 3, 10, 4, -3, -2, + 5, 9, 1, -1, -10, 2, 3, -1, -4, -1, 2, 0, 3, 2, -1, 3, 1, -7, 0, 0, 1, 4, 1, 1, 2, -2, -2, -3, -7, -3, + -8, -5, 0, 1, 5, 1, 3, 5, 2, 1, -2, -6, 0, 2, 1, 2, -1, 3, -2, -5, -8, -4, 1, -4, -4, 0, -2, 2, -4, -3, + -4, 4, -1, 0, -1, -3, 0, 3, -2, -2, -3, -5, 7, 4, 6, 9, -1, 3, 5, 3, 4, -1, 4, -2, 0, -5, 0, 0, 5, -2, + 1, -1, 3, 2, -1, -1, 0, 2, 0, -2, 6, 1, 0, 1, 3, 4, 4, -4, -3, 2, -6, -4, 1, -3, 1, -1, 1, 0, -3, 4, + 0, -6, 0, 1, 8, 0, 0, 0, 1, 2, 0, -2, 0, 1, -3, 3, 1, 2, 0, -4, -2, -1, 3, 1, 4, 1, 0, 2, 0, 3, + 4, 2, -4, -1, 1, 2, -5, -9, -4, 1, -1, -1, -2, 0, 0, 0, 5, 5, 6, 5, 4, 6, 1, 1, 0, -1, -3, -1, 0, 2, + -2, -1, 4, 1, 2, 5, 4, 3, 8, 6, 2, -4, -1, -3, -5, -3, -2, -3, -1, -2, -3, -3, 2, 1, 4, 1, -4, 5, 2, -5, + -2, 2, -2, -4, 0, 5, -2, 1, 0, 3, 0, -1, 2, -2, 2, 0, 0, 0, 4, 0, -1, -3, 5, 4, 4, -3, -1, 3, -2, 0, + -2, 2, -1, 0, -2, 17, 6, -14, 4, -14, 5, 0, 9, -4, 8, -8, -5, -6, -4, -3, 5, -2, -7, -5, 9, -1, -1, -2, -4, -1, + -5, -1, 5, 3, -1, -4, 4, -5, 3, 5, 12, -2, 3, -1, 4, 0, -1, -2, 0, 1, -5, 3, -2, 2, -10, -6, -2, 4, -2, 0, + 2, 2, 2, -3, 2, 0, 0, -1, 2, -18, 3, -2, -4, 1, 2, 3, 4, -1, 2, 2, 1, 4, -6, 2, 2, 1, 4, 4, 6, 8, + 6, 1, 2, 1, -2, 7, 2, 2, -3, -1, 5, 5, 2, -4, 0, 4, 3, -5, -8, -3, 6, 3, 0, 3, 6, 3, -1, 2, 2, 1, + 1, 4, 3, 2, -1, 4, -2, -1, -1, 1, -2, 0, 4, 3, 4, 1, -5, 6, 1, -3, -1, -2, 1, 5, -6, 3, 5, 6, 5, 2, + 6, 8, -5, 7, -3, 2, 1, 4, -2, 1, -1, -3, -3, 5, -6, 0, 2, -4, -1, 1, -6, -7, -4, -7, -2, -5, -4, -4, 3, 3, + -7, -2, -8, -4, 2, -5, -1, 3, 4, 1, -4, -4, -1, -3, 0, 0, -1, -2, -1, 2, 0, -5, -5, -3, 0, 0, -4, 0, -3, -1, + -2, 1, -1, 1, 1, 0, -6, -8, -1, 4, -1, -5, -3, 1, 1, 0, -2, -2, 0, -1, 7, 3, 2, 1, 1, 1, -1, 2, -1, 0, + 0, -2, 1, 1, 3, 3, 2, 5, 5, 1, 2, 2, 0, 4, 1, 1, -1, -1, 0, -2, 0, 0, -1, 1, 2, -5, -1, 1, 0, 2, + -9, -3, -2, -2, -2, -4, -1, -1, -3, 6, -3, 0, 3, 0, 6, 5, -1, 3, 4, 6, 2, -1, -6, -1, -1, 1, 0, 1, 2, 7, + 1, -6, 1, -2, -4, -1, 3, 4, 6, -1, 25, 0, -18, 1, -11, -3, -3, 12, 1, 10, 0, -7, 0, 0, -6, 6, -3, -1, 0, 1, + 2, -1, -3, 1, 5, -3, -6, 0, -5, 3, 3, 2, 4, -2, 1, 1, 0, -1, 4, 0, 1, -4, 4, -1, -3, 3, 2, 2, -2, -5, + -1, 2, -3, -2, 2, -6, -1, 4, -4, -2, 2, -5, 3, 7, -8, 1, 7, -5, -2, 0, -1, 0, 2, 1, -4, -4, -1, -3, 1, 2, + 2, -1, 0, 1, -2, 2, -5, 1, 2, 5, 4, -2, -6, -7, -8, 2, 5, -4, 1, -2, 1, 1, 1, -1, 0, -3, -1, 1, -2, -10, + -7, -1, 1, -3, -5, 0, -4, 7, 0, -1, 0, 1, -2, -6, 3, 0, -3, -1, -1, 1, 1, 1, 1, 6, 6, 1, 1, -2, 0, -4, + 0, 13, 4, 6, 6, 7, 13, 7, -1, -1, 2, 1, 2, 2, -1, 5, -5, 8, 2, 3, 4, 1, 9, 4, 5, -2, -5, 0, -4, 0, + 2, -3, -4, -2, -3, -2, -5, 5, 2, 1, 1, -8, -11, -6, 5, 1, 0, -2, -2, 0, 3, 1, -1, 0, -1, -1, -3, -1, -5, -4, + -5, 0, 2, 0, 0, -2, 2, -1, 1, -3, -1, 2, -2, 2, -2, 4, 4, 3, 2, -1, -1, 0, 0, 0, 3, 8, 3, -1, 4, 3, + -3, 1, -1, 1, 4, 2, 2, 0, 5, 6, 2, -3, -1, 0, 0, -2, 1, -2, -2, 1, -1, 2, -3, 0, 1, 2, 2, 2, 2, 3, + 7, 9, 2, 1, 3, -7, 2, 3, -3, 0, 1, 5, 0, -3, -2, 1, -3, -1, -3, 4, 0, -2, -1, -4, -3, -2, -9, -1, 0, -1, + -1, -2, 2, 6, -2, 0, -6, 3, 5, 4, 4, 1, 3, 3, 1, 20, -10, -26, 2, -13, -15, -12, 0, -7, 6, -3, 3, 10, 5, -7, + 4, -1, -8, -10, -4, 2, 0, -7, 2, -4, 2, 1, 3, 1, 3, -2, 2, -4, -1, -9, 2, 6, 1, 0, 0, -2, 5, 5, -1, 9, + 7, 3, 2, 12, 2, -1, 1, -4, -4, 1, -5, -5, 2, 3, -3, 1, 10, -2, -8, 19, 3, 5, 12, 9, 2, 0, -1, -9, -2, 0, + 1, -4, 3, -1, 0, 8, 5, 5, -7, -2, 1, -2, -2, -3, -4, -2, 4, 6, 1, 0, 2, -3, 1, -2, -2, 5, -2, -1, -5, -2, + -4, 5, 3, 1, -6, -6, 3, 7, 6, 1, 10, 7, 8, 4, 7, 1, -5, 1, 9, 4, -7, 0, -3, -12, -8, -6, -2, -10, -1, 10, + 3, 1, 11, 7, 9, 14, 9, 5, 10, -1, 7, 5, 1, 6, -2, 3, 4, 7, 3, 0, 3, 6, 13, 8, 11, 13, 7, 12, 4, 3, + -7, -6, -9, -14, -4, -7, -6, -5, -7, 1, -10, -11, -8, -1, -4, -9, -1, -3, 1, 3, 1, 1, 4, 0, -1, 0, -3, 2, -2, -3, + 1, -3, -1, 1, -3, 1, 1, 2, 1, 2, 2, -2, 1, 1, 0, 5, 4, 6, 2, 4, 2, 3, -3, -2, 2, 0, 0, -2, -2, 0, + 0, 2, 7, 0, -2, 0, -5, 0, -2, 2, -1, 1, 1, 4, 3, -1, -1, -5, -2, 1, -7, -7, -3, -4, -2, 4, 3, 6, 7, 9, + 10, 8, 8, 8, 9, 9, 0, 0, -5, -5, 1, -3, 1, 3, -1, 0, 6, 5, 5, 1, 4, 1, 0, 1, 2, 3, 4, 0, -2, -3, + 1, 3, 1, 0, -2, -3, 5, 2, 2, -1, 5, 1, 5, 6, 6, 3, -2, 2, 5, 10, -4, 1, -29, -5, -12, -21, -16, 4, -24, 17, + 4, 8, 5, 8, -9, 7, 7, 5, 1, 2, 5, 1, -11, -8, 1, -3, 6, 6, 3, 1, -3, 2, 5, -1, 3, 6, 2, 2, 5, -2, + 1, 9, 4, 5, 1, 4, -5, 3, 4, -2, -7, -7, -1, 1, -4, 4, -3, -1, 1, -3, 5, 1, -1, -13, 71, 5, -1, -4, -5, -4, + -7, 0, 0, -2, 1, 1, 1, 9, -2, 2, 3, -2, -7, 3, 3, 2, -2, -5, -6, -4, -3, -2, -6, -8, -7, -5, -7, -2, -1, 1, + -4, -6, -4, -1, -4, -4, 2, -2, 0, -1, 1, -1, -3, -5, -9, -11, -7, -7, -11, -11, -10, -9, -7, -1, -1, 6, -4, -13, -14, -10, + -11, -7, -4, -2, -7, -10, -9, -11, -14, -11, -7, -7, -4, -1, -1, 8, 5, 10, 5, 9, 0, 7, 2, 0, -3, 6, 8, 6, 0, -6, + -11, -5, -5, 2, 8, 1, -5, 0, 1, 6, 6, 8, 10, 9, 18, 16, 4, 20, 9, 8, 7, 3, 3, -5, 12, -3, 1, 3, 6, 4, + 3, -2, 2, -2, -3, -3, -3, -2, -4, -7, -3, 0, -1, 1, -2, -1, -2, 0, 2, -2, 0, -4, -2, -1, 2, 3, 0, 0, 0, -4, + -11, -8, -8, -2, 0, -1, 1, 6, 3, 3, 4, -1, -1, 0, 3, 3, 5, 10, 12, 11, 14, 15, 18, 21, 24, 21, 10, 7, 3, 4, + 2, 8, 7, 10, 10, 15, 20, 19, 18, 17, 12, 6, 8, 4, 7, 5, 8, 13, 15, 22, 24, 28, 27, 31, 28, 29, 22, 12, 0, -7, + -9, -10, -8, 3, 11, 18, 19, 18, 18, 13, 9, 4, -1, -3, 0, -2, 0, 2, 7, 11, 13, 20, 20, 21, 18, -94, 82, 79, 37, -23, + 70, 60, -29, 4, 47, -7, 23, 27, 3, 24, 10, -10, 21, 18, -9, -7, 11, -8, -3, 3, -3, 4, 5, -4, -6, -12, -5, -8, -8, -15, + -3, 1, 7, 8, 9, 7, 6, 9, 9, 1, 1, -12, -18, -7, -1, -3, -8, -1, -5, 2, -3, -8, -2, -10, -7, -5, -9, -12, -20, 127, + 2, 4, -5, -1, -1, -8, -7, 6, 0, 0, 0, -8, -2, 4, -1, 2, -8, -13, -8, -2, 10, 0, -3, 0, 4, -2, 7, 0, 4, -3, + -3, -3, 4, -4, 2, -4, 1, -4, -8, -4, 5, 3, 3, 1, 4, -1, 7, -4, -7, -10, -4, -6, 2, 2, 1, 8, 1, 4, 7, 11, + 14, 11, -7, 5, 8, 5, 10, 1, -10, 5, 3, 11, 8, -2, -1, 0, -1, 1, -2, 3, 7, 4, -6, -8, -3, 1, 1, -1, 5, 0, + 1, 12, 11, -7, -3, 0, -4, -10, 1, 0, 14, 6, 9, 8, 6, -1, -8, 1, 2, -3, -1, 6, 1, -4, 0, -3, 2, 3, 0, -15, + -4, 0, 0, 6, 6, 3, 1, 2, 4, 3, 1, 5, -1, -1, 1, 5, -6, -10, -5, -3, 3, 4, -1, 2, -2, 4, 3, 0, 2, -7, + -9, -12, -5, -9, 4, 8, 1, -3, -3, 3, 1, 6, 5, 1, 5, 2, 5, 3, 1, 0, -1, -3, -1, -4, 1, 1, -1, 1, -2, 4, + 16, 5, 5, 7, 10, 6, 5, -4, -3, -1, 2, 1, -6, -1, -3, -6, -10, -3, -4, 3, -1, -3, -10, -6, -11, -12, -13, -10, -14, -5, + -8, -4, 6, 3, -7, 2, -1, -5, 3, 3, 9, 1, 9, 11, 2, 9, 3, 1, 3, -1, 0, 8, 6, 4, 7, 8, 7, 9, 3, -9, + 14, -20, 0, 36, 1, 8, -5, 4, 0, 0, 0, -5, -10, -6, -10, -1, 8, -4, -1, -5, 2, 8, 10, 11, 2, 3, 9, 6, -2, -1, + 3, 4, -4, -9, 3, 0, -2, 1, -3, 3, -3, 6, 6, 7, 7, -1, 3, 6, 3, -2, -6, -6, -4, 4, -4, -10, -10, -9, 6, -8, + -7, 4, -3, -1, -2, 2, 4, 4, 5, 3, 5, -7, -11, 0, 3, -3, -10, 1, 1, 8, 8, -4, -9, 2, 9, 7, 3, 3, 4, 10, + 3, -3, 0, -10, 1, 8, 1, 7, 3, 11, 5, 1, -14, -7, -2, -5, -3, 0, 3, -3, -7, 0, 3, -2, -6, 9, 12, -5, -1, 7, + 3, -1, -2, 10, 19, 8, -4, -13, -6, -4, -3, -7, -7, -2, 4, 4, 4, 6, -1, 2, 16, 12, 4, 9, 8, 4, 5, 4, 8, 5, + -7, -7, -5, -9, -5, -2, 4, 2, 4, -2, 15, 4, -2, -3, -3, -6, -3, -8, -7, -1, 4, 6, 4, 8, 0, -9, -9, -1, 2, -3, + 7, 2, -8, -3, -5, 1, 6, 4, 0, 6, 2, 2, 2, -2, -4, -7, -12, -12, -4, 0, 4, 2, 5, 5, 6, 5, 3, -2, -3, 2, + 1, -7, -7, 2, 1, -2, -4, -9, -7, -3, 0, -3, 1, -3, -1, 6, 4, 2, 7, 1, 1, -3, 3, -5, 3, 9, 1, 1, -5, 2, + 0, -5, 0, 3, 5, 4, 2, -7, -8, -4, -1, -2, 0, 1, 3, 5, -1, 0, 7, 1, 7, 4, 1, 0, 4, -2, 3, -1, 2, -5, + -3, 0, 8, 5, -2, 1, -3, -4, -7, -5, -2, 2, 2, 4, 7, 4, 3, -5, -3, -3, 2, -2, 5, 8, 1, 0, 2, 0, 2, 0, + 4, 2, -4, -8, -3, -7, -7, 4, 30, -6, 0, 4, -1, 7, 10, 7, -2, -2, 0, 6, -3, 0, -3, 10, 2, -11, 3, 20, -8, -15, + 0, -7, -2, 20, -1, 10, 0, -5, -6, 5, -2, 3, -5, -3, 16, 9, 2, 8, 2, -5, 1, -8, -3, -6, -13, -1, 4, 9, 1, 3, + -4, -7, -3, 8, 7, 5, 3, -3, 2, 6, -14, -7, -5, 3, 5, -7, 1, -8, -4, -2, 0, 0, 12, -11, -12, -9, 3, -10, 8, 13, + 11, 8, 1, 7, -3, 3, -9, 2, 1, -7, 2, 2, 3, 4, 8, 6, 8, 6, 3, 5, 4, -5, 5, 6, 6, 5, 1, 6, 7, 5, + -2, 0, -5, 4, 0, -3, -1, 4, 3, -4, 9, 6, -3, 5, 9, 10, 5, 7, -3, -10, 10, 6, 2, 10, -5, 3, -5, -3, 4, 6, + 8, 7, -2, -4, 8, 0, -3, -4, 7, -14, 6, 7, 8, 5, -5, 7, -7, -6, -3, -6, 4, -3, -2, 2, -7, -1, 12, 3, 4, -2, + 3, 5, 3, 6, -4, -1, 3, 0, -4, 2, 0, -1, -6, -5, -5, -6, -8, -11, -11, -8, -5, 5, 10, 3, 3, -1, -1, -7, -5, 0, + -2, -9, -3, -6, -4, -6, 0, -3, -4, -6, 4, 1, 10, 6, 5, 7, 3, -5, 6, 2, -1, 1, 8, 2, 0, 6, 3, -2, -5, -7, + -6, -11, -7, -5, -4, -3, -6, 0, 4, 7, 6, 8, 7, 2, 4, -9, -2, 1, -6, -1, -4, -5, 8, 1, 4, 7, -1, 2, -1, 3, + 2, 9, 4, -3, -4, 0, -2, -4, -6, -6, -6, 0, -2, -2, -1, -3, 4, 2, 4, -2, 5, -6, -7, 2, 5, 6, 4, 5, -3, 0, + 0, -4, 10, 5, 0, -2, -5, -15, -12, -7, -11, -16, -11, 32, -16, 2, -12, -2, 11, -6, -4, -3, 2, 0, -2, -11, -7, -5, 1, -1, + -1, 3, -2, -2, -8, -6, -5, -5, -3, 6, 9, 15, 2, -9, 5, 2, 16, 15, 7, -3, 6, 8, 1, -8, 1, 8, 10, 5, -3, -9, + -1, -8, -5, -3, -2, -8, 1, -7, 1, 4, 0, -6, 0, 9, -1, -2, -9, -7, 0, -1, -3, 9, 3, -4, -2, -1, -9, 3, 8, -5, + -5, 3, 8, 5, 6, -5, -12, 8, 13, 7, 1, -13, -2, 12, 1, -5, 2, 14, 7, 11, 6, 14, 6, 7, 5, 0, 0, 10, 8, 9, + 11, 8, 10, 7, 15, 4, 12, 16, 14, 8, 5, 5, 7, 18, 13, 1, 2, 8, -5, -7, 6, -16, -1, 17, -1, -1, -14, -18, 6, -9, + -2, -12, 10, 2, 3, 10, 8, 10, 2, 10, 3, -1, -11, -15, -14, -7, -10, -2, 13, 5, 7, 9, -7, 4, -1, 4, -3, -5, 6, 6, + 6, 2, 1, 8, 0, -15, -8, -6, -19, -16, -10, -7, -6, 4, 7, -2, 4, 5, 10, 11, 4, 8, 6, 0, 0, 3, -2, -1, 0, 3, + 0, 8, 15, 8, 0, 1, 0, 2, -1, 1, 2, 1, 1, -4, -1, -3, 5, 4, 4, 1, 4, -3, 0, 3, 1, 2, 5, 2, 1, 0, + -1, -2, -4, 0, 0, -1, -1, -7, -2, -5, -7, -1, -2, -2, 5, 5, 1, 2, -5, 3, -6, -11, -5, -7, -2, 1, -3, 2, 6, -1, + 6, -5, -1, -3, 9, 1, 5, 7, 5, 11, 3, -1, 0, -4, -4, -5, -2, 1, 10, 11, 10, 0, -4, -5, 0, -3, -12, -4, -4, -2, + 3, -5, -2, -4, -3, 3, 3, -2, 4, 0, 10, -1, 9, 1, 2, -39, -3, -32, 52, -25, -13, 10, -4, 20, 6, 10, -2, 0, -12, -5, + -3, -3, -2, 0, -5, -3, 8, 1, -4, -13, -6, 6, -16, -7, 2, 5, 6, -20, 4, -13, -2, 9, 13, 0, -2, 5, 1, 3, 3, 12, + -6, -4, 1, 11, 0, 5, 1, -11, -5, -10, -4, 0, -3, 0, -6, 0, -4, -5, 3, -4, 8, 0, -1, 2, -7, 0, 2, 7, -4, -4, + 8, -6, -7, -2, -9, -13, -18, -15, 2, 13, 10, -3, -10, -4, 7, 6, 4, -12, -11, 6, -9, -14, -13, -15, -11, -26, -15, -13, -16, -26, + -16, -15, -17, -11, -7, -6, -4, -3, 4, 9, 13, 15, 14, 14, 17, 21, 10, 4, 9, 11, 11, 17, 12, 6, 1, 0, 1, -6, -5, 1, + 6, 20, 6, -5, 5, 21, 13, 20, -4, -4, -22, -15, -7, -19, -31, -37, -34, -51, -58, -45, -38, -37, -28, -22, -9, -5, 4, 5, 15, 19, + 19, 19, 0, -7, 8, 6, 12, 16, 11, 22, 1, -3, 21, 9, 7, 22, 10, -3, 3, 6, 5, 5, -5, -6, -3, 0, 7, 3, -5, -11, + -8, -2, 3, 2, -2, -9, -9, -9, -2, -1, 5, -4, -11, -11, -7, -3, -6, -5, -10, -5, -2, -5, 0, -2, 1, 3, 3, 3, 6, 2, + 4, 8, 16, 18, 15, 20, 15, 15, 8, -3, -3, -7, -6, -5, -2, 2, 1, 0, 6, 11, 13, -3, -2, 2, -3, 3, 2, 3, 7, 13, + 11, 20, 16, 20, 8, 9, 1, 2, -6, -13, -31, -12, -7, -21, -19, -17, -24, -32, -25, -18, -6, -5, -11, -13, -18, -11, -10, -19, -18, -11, + -13, -17, -17, -21, -23, -19, -4, 5, 3, 2, 12, 14, 19, 13, 5, 12, -7, -12, -9, 0, -51, 13, -52, 75, -19, -14, 26, 10, 4, 16, + 30, 17, -4, -7, -13, 6, 6, 5, 4, -4, -1, 4, -2, 1, -11, -8, 1, -1, -5, 3, 3, -3, -6, 5, -6, 12, 2, 16, 3, -3, + 8, -1, -8, -11, 4, 5, 2, -2, 6, -6, 7, -2, 4, 3, 3, 5, -1, -2, 0, -1, -6, -11, -8, 0, -22, 4, 2, 5, 2, -4, + -3, -1, -3, 1, 13, 19, 12, 9, 4, -8, -21, -18, -16, 0, 23, 20, 29, 27, 22, 19, 5, 6, -3, -6, 1, -8, -7, -15, 1, 23, + 23, 24, 28, 30, 10, -7, -17, -23, -25, -19, -19, -2, 1, 1, -14, -1, 7, 10, -16, -20, -14, -17, -13, -10, -7, -10, -6, -9, -7, -2, + -10, -14, 3, 20, 22, 17, 13, 17, -7, 6, 13, 18, 15, 14, 39, 52, 76, 79, 91, 69, 37, 3, -35, -63, -43, -31, -5, 6, 26, 12, + 10, -6, 8, -1, 6, 16, 10, 0, -8, -11, -3, -4, 7, -2, -1, -6, -8, -2, 1, 1, -4, 4, -13, -27, -9, -3, 5, 2, 10, 13, + 10, 9, 12, 7, 0, 0, 9, 4, 9, 9, 5, 4, 5, 1, 3, 8, 7, 3, 4, 0, 0, 3, 9, 9, 10, 7, 3, 7, 9, 10, + 1, -12, -14, -10, -12, -13, -16, -8, -10, -6, -9, -12, -7, -20, -28, -32, -28, -25, -40, -41, -32, -21, -19, -9, 3, 14, 5, 6, 0, 0, + -5, -10, -18, -14, -8, -5, -11, -5, -13, -9, -12, -12, 4, 9, 22, 21, 42, 32, 20, -15, -53, -99, -124, -127, -104, -63, -36, -7, 5, 2, + 0, 2, 2, -1, -2, 5, 10, 4, -8, 6, 26, 28, 27, 24, 15, 11, -6, -6, -5, -3, 2, 1, -5, -6, 11, -16, 45, -54, 48, -19, + -19, 43, -34, -27, -21, 34, -18, -39, 24, -15, -7, 28, 28, -7, -5, 16, 4, -13, 0, -2, -3, -6, -3, 0, -12, 8, 13, 3, 1, 0, + 11, -8, -4, -3, -5, -15, -18, -7, -8, 10, 2, -4, 10, 13, -9, -7, 11, -4, -6, 4, 2, 6, 9, 13, 3, -4, -8, -6, 8, -70, + 18, 16, 7, 7, 2, 6, 13, 16, 4, 6, 0, 10, 11, 2, 9, 9, 14, 18, 15, 12, 3, 7, -4, 9, 0, 10, 9, -2, 28, 10, + 10, 5, 7, 1, 6, 11, 29, 19, 20, 0, 12, 6, 11, 5, 9, -4, -14, -16, 2, 4, -5, 11, -3, 0, 3, -8, 3, 2, -14, -16, + 8, 7, 8, 15, 10, 5, 8, 10, 14, 4, 12, 23, 8, 12, 4, 1, -2, 0, -1, -18, -18, -16, -16, -10, -18, -23, -7, -2, 17, 0, + -8, -2, 3, 13, 1, 2, -5, -23, 0, -7, -10, 14, -7, 0, -3, 3, 7, 19, -6, -9, 0, -3, -22, -2, -15, -20, -1, -13, -14, -17, + -4, -8, -4, -6, -12, -4, -10, -2, -15, -6, -4, -4, -7, -12, -1, 6, 6, 11, 4, -8, -10, -4, 3, -3, -4, -6, -9, -9, -7, -18, + -12, -2, -1, -8, -3, 1, 7, 11, 11, -2, 4, -3, -3, 9, 11, 6, -3, -13, -2, -7, -1, -1, 0, 12, 2, 2, -7, -10, -7, -12, + -2, -11, 0, 3, -3, 4, -5, 5, 2, 4, 11, 2, -9, 0, 15, 9, 4, 12, 3, -4, -5, 13, 9, -2, 0, -2, -3, 3, 12, 11, + -11, 9, 5, -16, -5, 1, -4, 3, -4, -3, -1, 6, -1, 11, 4, 0, 16, 14, -7, 1, 14, -2, -20, -18, -9, -16, 6, 15, 14, -41, + 6, -21, 0, -15, 9, 21, 30, 18, -7, 10, -24, -16, 11, 4, -6, -20, 3, 15, 2, -6, -22, -7, -4, 15, 13, -3, 16, 7, 8, 16, + 9, 0, 0, 15, 17, 12, 1, 1, -4, -20, -7, 13, 5, -3, 1, 0, 5, 12, -8, 6, 19, 12, -5, 22, -1, 5, -13, -8, 2, -4, + -2, -10, 2, -12, 7, 5, 13, 15, 9, 18, 3, 30, 3, 6, 9, -11, -13, -12, -1, 2, -4, 5, 13, 6, -6, -15, -17, -7, 5, -6, + 0, 2, -4, 0, -4, -18, 0, 8, 5, 6, 15, 1, -4, -17, -17, 12, 10, -1, 1, -5, -5, -16, -2, 21, 10, 4, 23, 11, 9, 8, + 3, -6, 8, -8, -3, 6, 13, -7, 4, 0, -15, 10, 7, 5, 0, -17, -3, -13, -7, -10, -16, -6, -4, -3, -19, -17, -24, -11, -5, -7, + -5, -4, -6, -1, 9, 0, -4, -3, 10, 3, 6, 7, 12, 20, 22, 7, -10, -2, -4, 9, 22, 38, 32, 9, -14, -17, -11, -18, -21, -1, + -13, -2, -5, -5, 0, 7, -4, 1, -5, -9, -12, -10, -5, -9, -6, -9, 2, 5, 10, 6, 17, 7, 5, 8, -3, -14, -11, -2, 0, 1, + -7, 2, 4, -2, -12, -10, -10, -4, -9, -1, -4, 7, 3, -6, -8, 1, -2, 8, 9, 5, -11, -2, 4, 8, 4, -1, -7, -1, 6, 6, + 4, 10, -7, 1, 13, 3, 6, -5, -4, -3, -8, 8, -1, -4, 5, -6, -8, -13, -2, 2, -14, -3, 6, 18, -10, 1, 6, 15, 11, 2, + 12, 2, -14, 0, -2, -7, 2, -5, -8, -3, -13, -4, 5, -1, -13, -10, 4, 10, -12, -7, -12, 19, 13, -16, -24, -7, 4, 6, 8, 15, + 9, 6, 4, 6, -42, 7, -19, -6, 4, 11, 9, 4, 1, -6, 3, -18, -13, 1, -9, -1, 6, 14, 12, -10, 3, -22, 0, -4, 2, 12, + 8, 13, 17, 14, 15, -10, -7, -3, 5, -4, -9, 10, 7, 3, -11, -2, 13, -5, -9, -14, -12, 2, -1, 5, 11, 19, 22, 17, 6, -18, + -7, -18, -18, -1, 1, 1, -16, 10, -2, 10, 8, 5, 10, 3, 0, -2, 8, 2, -1, 4, 1, -16, -9, -11, -3, 5, 5, 10, 13, 4, + -6, -4, 2, 6, 2, -7, -1, 7, 12, 2, -7, -5, 6, 7, 5, 18, 17, 15, -8, -25, -11, -7, -6, -5, 1, -6, -14, -17, -6, -19, + -18, -14, -25, -14, -3, 2, -9, -3, -2, -3, -11, -15, -20, -4, -11, -14, -8, -10, -2, 4, 0, -6, -4, -4, -4, -20, -14, -11, -15, -17, + -5, 0, 9, 1, 0, 2, 16, 8, 4, 7, 7, 13, -6, -1, -5, -8, -13, -4, 5, -11, 0, -1, 1, -6, 23, 23, 21, 17, 16, 7, + 3, 12, 20, 7, 11, -6, 2, 14, -11, -7, 9, 3, 4, -5, -9, -9, 3, -9, -8, -12, -9, -7, -14, -14, -11, -9, 8, 11, 12, -2, + 1, -3, -8, -6, -9, -17, -11, -8, -7, -12, -5, -8, -7, -4, -5, -4, 4, 3, 8, 8, -2, -3, 9, 0, 2, -3, -11, -8, -5, -4, + -4, 10, 4, 12, 12, 5, 7, 2, -3, -7, -12, -8, -3, -6, -3, 10, 4, 5, 14, 9, 2, 7, 2, 14, -1, -4, -1, 3, 14, 1, + 4, 7, 12, 6, -2, -3, 0, -6, -11, -10, 0, -11, 0, 7, 6, -14, -2, -4, -14, -18, -5, 9, 2, -3, 3, -5, -13, -13, -12, -18, + 3, 9, 22, 7, 21, 20, 13, 29, 12, -17, 12, -22, 7, 29, 2, -12, -11, -28, -31, 8, -9, 13, 9, -9, -9, -2, 26, 28, 7, -6, + -20, -3, -6, -6, -9, 13, 4, 2, -28, -27, -4, 4, 10, 22, -1, -6, -3, -9, 8, -8, -2, 20, 3, 11, -13, -1, 6, 5, 7, 2, + 14, 3, 6, 2, -11, -13, 10, -9, -14, -28, -4, -11, -15, 4, -4, -15, 6, -1, -12, -15, -15, 1, -5, -14, -2, -25, -28, -18, -5, 11, + 5, 10, -1, 1, -5, 7, 1, 12, 9, -3, -2, -17, -23, 1, -13, 13, 4, -2, 4, 1, 14, 11, -5, -11, -14, -4, 12, 9, -7, -15, + -16, -11, -8, -2, -3, -15, -13, -29, -24, -6, -15, -25, -7, -5, -13, -13, -5, 16, -2, -5, -10, -2, -9, 0, -11, -18, -8, -28, 0, -28, + -41, -16, -32, -6, -24, -25, -23, -21, -25, -26, -26, -2, -11, 0, -18, 0, -8, -15, -20, 1, -21, -16, -21, -5, -6, 11, -9, -9, -2, -4, + 9, 12, 5, 1, 2, -14, 8, -5, 10, 15, 6, 12, 2, -14, -23, -2, 3, 3, -13, -3, -7, -4, -10, -15, -15, -18, -11, 1, -7, 5, + -2, 8, 7, -2, 6, 1, 3, -3, -7, -9, -9, 2, -7, 5, 6, 3, -2, -10, -14, -9, 8, 12, 12, 2, 3, 5, 7, -3, 6, 1, + 1, 1, -1, -6, 8, 22, 17, 6, 2, 13, 10, 0, 6, -1, 1, -6, 7, -1, -7, -9, -7, -9, -9, 1, -8, -12, -13, -12, -7, -19, + -18, -11, -7, -1, -19, -13, -11, -10, -6, -22, -24, -18, -10, -42, -42, -13, 4, -7, 13, 1, 7, 5, -7, 12, 24, 22, 11, 11, -2, -6, + -11, -13, -15, -9, -9, 5, 0, -7, -17, -7, 7, 9, 1, -6, -20, 22, -42, 9, 42, 30, 24, -14, 5, -19, -11, 11, 11, 22, 19, 8, + 8, 16, 23, -1, 26, -10, 6, -12, -22, 1, 8, 14, 16, -10, -6, 5, 12, 19, 12, 9, 4, -5, -15, -3, -2, 5, -14, 8, 15, 1, + -6, 18, 13, -2, -12, 3, 2, -3, 10, 4, 12, -18, -5, 2, -4, 8, 3, -1, -3, -37, -19, 18, 24, 14, 16, -2, 16, 19, 22, 16, + 11, 10, 9, -1, -1, 8, 14, 1, -3, -5, -8, -16, -3, -7, -14, -3, 6, -7, 1, -12, -6, -10, -33, -19, -15, -17, -3, -32, -39, -30, + -23, -36, -6, 2, -7, -38, -28, -19, -9, -25, -22, -17, -24, -7, 12, -6, -9, -12, -18, -18, -11, -13, -23, -15, -30, -44, -38, -23, -15, -39, + -19, -20, -22, -16, -40, -39, -31, -42, -36, -23, -39, -41, -25, -34, -36, -51, -61, -29, -3, -35, -46, -21, -36, -45, -44, -20, -19, -38, -18, -18, + -21, -19, -11, -5, -9, 20, 12, 7, 13, -42, -17, -2, -34, -13, -20, -32, -30, -37, -50, -75, 19, 14, 13, 6, -2, 5, 1, -2, -6, -14, + -14, -14, -13, -4, 12, 10, 12, -1, 6, 5, -2, -12, -23, -19, -12, -13, -4, 4, -7, -4, -9, -15, -9, -4, 2, 7, -1, -5, -4, 0, + -4, 1, 15, 12, 3, -2, -4, -7, -10, -14, -17, -23, -22, -35, -19, -19, -28, -30, -31, -15, -10, -17, -10, -17, -24, -20, -28, -21, -27, -33, + -36, -27, -24, -14, -20, -15, -29, -30, -29, -19, -40, -43, -40, -39, -31, -30, -38, -24, -36, -34, -40, -31, -32, -27, -29, -23, -26, -28, -12, -6, + 10, 4, 12, 1, -5, 6, 3, 9, 13, 18, 15, 39, 30, 17, 19, 11, 15, 9, 4, -18, 70, -35, 64, 78, 64, 28, 6, 25, -12, -9, + 16, -1, 34, -9, -14, -1, 8, 0, 6, -7, 6, 10, 15, -14, 1, 23, 0, 6, 3, -7, -17, 3, 23, 10, 12, 3, -4, 7, 0, -5, + 17, 12, 4, 24, 29, -2, -10, 8, -2, 5, 2, 20, -2, 8, 14, -15, -8, 8, 3, 14, 7, 4, 11, 10, -109, 9, 10, 11, 17, 25, + 16, 8, 22, 18, 17, 9, 0, 13, 10, 8, 4, 16, -1, 3, -15, -6, -11, -6, -9, -4, 11, 19, 7, 14, 7, 13, 26, 14, 15, 2, + -8, -14, -29, -25, -31, -2, -31, -30, -43, -20, -37, -40, -52, -36, -40, -25, -37, -32, -38, -21, -28, -19, -8, -7, -6, -4, 8, 2, -6, -5, + 0, 19, 16, -1, -26, -22, 3, -16, -25, -25, -34, -24, -24, -29, -20, -21, -3, -26, -29, -26, -23, -40, -34, -20, -28, -22, -20, -16, -33, -46, + -19, -24, -35, -12, 13, -2, 19, -11, 10, 4, 22, 25, 2, 25, 31, 29, 12, 22, 26, 7, 17, -38, -30, -23, -66, 24, 16, 12, -3, -8, + -2, -14, -11, -20, -10, -15, -22, -18, -15, -2, 7, 11, 12, 3, 8, 7, -7, -6, -2, 2, 11, 21, 24, 6, 4, 5, 14, 15, 12, 3, + -5, -10, -17, -13, -16, 2, -7, -7, -16, -16, -12, -21, -14, 6, -1, 0, -8, -12, -12, -17, -12, -12, -35, -26, -18, -9, -17, -16, -13, -11, + -8, 10, 6, 12, 1, 9, 8, -12, -3, 1, 1, 1, -5, -7, 6, 2, 15, 8, 28, 24, 13, 20, 19, 25, 27, 30, 20, 28, 6, 6, + 13, -5, -14, 10, 6, -5, -3, -7, -16, -8, -6, -2, -1, 6, 3, -3, 4, -9, -21, -28, -14, -23, -1, -25, -59, 45, -39, 46, -4, 86, + 93, 37, 37, 11, -9, 27, 18, 19, 11, 7, -28, 19, 25, -3, 4, 7, 19, 25, 2, -4, 3, 8, 16, 17, 1, -6, 2, 12, -3, -3, + 5, -11, -6, -2, -22, -5, -4, -13, 2, -3, 3, 1, -4, -8, -3, -20, -6, -14, -13, -10, -21, -12, -7, -10, -14, -14, -18, 0, -15, -127, + -1, -1, -6, -4, -12, -4, -2, -1, 3, -3, 2, -1, -2, -1, 1, 2, -6, 10, 9, -7, -8, 5, 5, -1, 2, 1, 2, -4, -11, -7, + 0, -1, 0, -12, -8, -3, -6, -12, 0, -3, -3, 10, 10, 12, -3, -9, -9, -8, -3, -11, -9, 6, 6, 0, 1, 3, 13, 3, 11, 9, + 3, -7, 7, 13, 5, -9, 0, 7, 1, 5, 15, 1, 2, 5, 1, 9, 10, 6, 5, 14, 7, -1, -13, 0, 1, -9, -7, -3, -5, -1, + 5, 3, 0, 6, 3, -3, 0, 6, 9, -2, -8, -5, -15, -5, -12, -9, -9, -1, 1, 0, -7, 2, -1, -2, 14, 2, 8, -1, 3, -3, + -4, 0, 1, 7, 5, -2, 0, -3, -4, 4, 1, -4, -5, 1, 9, 8, 7, -4, -6, -6, 1, 1, -6, -1, 1, 6, -6, -7, -8, -2, + 6, 7, 6, -5, -1, -1, -4, -5, -3, -6, -3, 1, 8, 9, 3, -5, -8, -8, 0, -2, -4, 3, 5, -7, -2, 10, 4, 2, 5, 3, + 4, -7, -1, -2, -2, -6, 1, 15, 5, 7, 7, 0, 0, -3, -13, -5, 2, 6, -8, -12, -8, 7, 6, 7, 12, 10, -6, 1, -2, -5, + 8, 15, 3, 2, -5, -2, 10, -3, 3, -1, -3, 0, 2, 1, 0, 3, -3, -4, -1, -1, -5, -6, -7, -17, -4, -8, 0, 7, 1, -13, + -11, 10, 8, -5, 1, -3, 10, 0, -10, -5, -5, 1, -11, 0, 2, -14, 9, 19, 3, 3, 1, -4, -3, 7, 3, 5, -4, 10, 9, 5, + -7, -6, 4, -22, -5, 8, 14, 0, -1, -2, -4, 5, -3, -8, -18, -10, -10, -3, 7, -7, 1, 3, 9, 13, 6, 12, 5, 11, 15, 2, + 0, -5, 0, -5, -13, 5, 9, 10, 9, -3, -4, -7, -1, 1, 0, -2, -6, -5, -2, -2, 2, 5, 11, 3, 1, 0, 7, 5, 0, -6, + -2, 3, 2, -8, -8, -6, 3, 4, 5, 0, 0, -3, -7, 4, 11, 7, -1, -19, -6, -6, 6, 1, 1, 11, 3, 3, -12, 7, 11, 0, + 0, -10, -11, -5, -3, -12, 5, 2, -12, 5, -1, -11, -4, 4, 6, 3, 2, 2, -1, -2, -20, -12, -12, 6, -5, -4, 7, -6, 8, 8, + 15, -2, 0, 7, 7, -4, -21, -4, 4, -1, -14, -15, -10, -12, -12, -11, 1, 5, 4, -2, 1, -9, -5, -1, 5, 8, 15, -5, -9, 9, + 6, 6, -3, 3, 1, -13, 2, 0, 15, 12, -1, 2, 0, -4, -1, -4, -4, -1, -5, 0, 1, -2, 3, -4, 0, -1, 0, -2, -4, -7, + -3, -3, -5, -2, -7, -7, 1, 1, 2, -3, 2, -6, 3, 4, 4, 6, 0, 0, -3, 4, 1, 1, -12, -5, -8, -7, 3, 6, 1, 8, + 8, 3, 3, 3, 8, 10, 11, 8, 13, 2, 8, 12, 7, 2, -1, -7, -1, -3, 14, 12, 3, 2, 0, 0, 0, -9, 8, 3, -3, 7, + 4, -3, -7, -9, -4, -7, 1, -5, -8, -2, 0, -8, -2, 1, 6, 2, 3, 0, -4, -7, -1, 2, -1, 15, 5, 6, 3, -4, -12, -6, + -7, 1, 1, 3, 1, -14, 12, -4, -4, -2, -3, 13, 12, 8, -4, -5, -7, -13, -4, -3, -8, -5, 10, -2, -3, -4, 3, -6, -7, -2, + -6, 2, 2, 4, 7, 2, -16, 0, 5, -1, -5, 9, 11, -7, -1, 9, -1, -5, -2, -4, -6, 1, -7, -4, 2, 10, -1, 1, -3, 0, + 0, -5, 7, 2, -1, -3, 0, -7, -5, -12, 1, -7, 4, -2, 4, 10, 1, -4, 1, 0, -8, 2, 2, 1, 9, 4, 1, 7, -7, 6, + 2, 8, 7, 3, 4, 6, 10, 1, 5, 6, 5, 13, 10, 11, 2, 4, 3, -1, 4, 5, 2, -4, -4, 6, 12, 8, 4, 6, 4, 2, + 10, 7, 3, 2, 5, -1, 9, 1, 6, 6, 20, 6, -7, -11, -4, 3, -4, -8, -5, -1, -12, -2, -14, -9, 1, 2, -4, 5, 9, 4, + 2, -4, -10, 0, 9, 14, 9, 4, 3, 6, -15, -3, -16, 1, -1, -8, 0, -2, -5, -5, -5, -2, 5, 2, 3, 7, 7, -3, 8, 3, + 3, 1, 8, 0, 9, 0, -2, -13, -17, -10, -7, -10, -3, 0, -4, 0, -2, -3, 1, 3, 4, 1, 3, 0, -2, -4, -2, -3, -5, -3, + -7, -5, 2, -4, -9, -11, -3, -3, -4, -7, 1, 3, -1, 5, 5, 1, -1, -6, -3, 0, 0, 7, 5, 6, 8, 9, 10, 2, -8, -4, + -2, -8, -4, 2, 2, 7, 2, 3, 4, 10, 9, 14, 4, -1, -3, 4, -5, -3, -7, -6, -3, 2, 5, 11, 15, 6, 0, -1, 2, -2, + 4, -6, -8, -9, -1, -10, -5, 2, -1, -4, -3, -9, -1, -4, -10, -3, 2, -5, -8, 2, -4, 1, 2, 0, -3, -8, 3, 4, 8, 0, + 3, 3, 9, 8, 11, -1, 0, -3, -13, -9, -11, -1, 3, -15, -5, -8, 14, 14, 6, -5, -9, 11, 0, -3, -1, 8, -5, -6, 1, -11, + -8, -2, -6, -3, 1, -2, -6, 11, 10, 7, 17, 13, 11, 6, 3, 7, -1, 12, 5, 8, 13, 9, 4, 2, -8, 5, 4, 10, 8, 10, + 18, 9, 0, -2, 4, -5, -1, 4, -2, 2, -1, -5, -1, 1, -8, -1, -5, -2, -1, 6, 10, -9, -6, 1, 2, 10, 13, 0, 5, 7, + 4, -9, -7, -12, 7, 8, 4, -4, 4, 0, -11, 1, 1, -11, 3, 0, 4, -6, -1, -2, 0, -14, -5, 6, 3, -7, -12, -1, 4, -10, + -8, -5, -4, 3, 2, 15, 7, 0, 0, 3, 0, 2, -5, -18, 14, 4, -2, -1, 8, 0, 5, 16, 1, 19, 16, 5, 5, 3, 2, 6, + 1, 5, 5, 8, 8, 5, 13, 4, 14, 2, 25, 15, 24, 10, -3, -4, 16, -13, 6, 5, 0, -3, -2, -4, 4, -13, 0, 2, -19, -13, + -2, -1, 7, 0, 2, 2, 4, -5, -2, -1, -3, -13, -21, -11, -3, -4, -2, -3, 1, 0, -3, -3, -5, 3, 5, -1, 1, 3, 2, -9, + -11, -8, -11, -2, 3, -4, 3, 0, -5, -8, -1, 10, 18, 10, -3, 8, 8, 3, -11, -11, -5, -2, -1, 0, -1, -10, -8, -4, -3, -5, + -1, -2, -1, -5, 4, 6, -4, -1, -9, -8, -4, 6, 3, 14, 5, 2, 3, 1, -3, -4, 1, -3, 4, 3, -3, -5, 0, -2, -4, -2, + 0, 8, 0, 10, -8, -2, -5, -2, 7, 0, 1, 4, 2, -6, -7, -9, 5, -2, 3, 6, 0, 5, -3, -4, -7, -2, 8, 2, -6, -1, + -7, -9, -3, 8, 17, 11, 3, -1, -5, -4, -12, -12, -4, -2, 0, -28, -50, 8, -3, 9, -7, -6, 30, 27, -3, 11, 15, -7, 8, 2, + 3, 4, 5, -9, 5, 1, -9, 6, -3, 5, -12, 7, 1, -3, 6, -10, 4, 2, -6, 4, 7, -12, 2, -1, 6, 3, -3, 1, 3, 3, + 3, 9, 12, 7, 0, 8, -5, -1, -11, -4, -11, -3, 0, 2, 3, 0, -4, -8, -3, 24, 5, -2, 2, 4, 6, 9, 9, 8, 0, 3, + -14, -12, -18, -1, -9, -6, -1, -4, -1, 9, 5, 5, 0, -10, -8, -12, -17, -15, -21, -22, -27, -15, 2, 7, -6, -2, -1, 7, 14, 14, + 22, 23, 23, 8, 10, 12, 8, 9, 9, 19, 9, -2, -12, -11, -10, -25, -35, -34, -23, -21, -11, -11, -9, -8, -9, -4, -13, 2, -7, -5, + -3, -11, -6, -7, -1, 7, 11, 14, 21, 14, 30, 33, 26, 27, 14, 27, 7, 12, 8, 24, -1, 16, 28, 34, 11, 22, 20, 14, 2, 5, + -8, -22, -27, -34, -37, -32, -41, -33, -24, -15, -16, -6, 13, -2, -2, -8, -17, -1, -15, -7, 1, 1, 4, -1, 3, 6, 4, 8, 8, 0, + 4, 4, 6, 3, -3, 3, 0, -5, -4, -6, -7, -12, -16, -16, -9, -8, 7, 14, 2, 4, 8, 14, 17, 26, 19, 12, 26, 30, 25, 24, + 19, 20, 28, 24, 15, 13, 11, 3, -4, -4, -4, -6, -12, -15, -16, -12, -15, -8, 1, 6, 5, 15, 9, 1, 9, 7, 4, 2, -12, -22, + -22, -29, -5, -11, 11, 9, 10, 13, 14, 11, 10, 8, 6, 14, -19, 3, 1, 5, -8, 6, 4, 9, 13, 18, -6, -11, -10, -32, -25, -20, + -30, -33, -27, -36, -27, -32, -35, -42, -44, -27, -28, -28, -19, -25, -30, 2, -6, 2, 9, 32, -18, -52, 38, -25, 17, -9, -46, 24, 13, -31, + 23, 20, 5, -1, 7, 10, 23, 7, -8, 15, -7, 5, -6, -24, -1, 23, 5, -1, -2, 4, 3, 2, 10, -5, -5, -8, -4, -2, -17, 7, + -1, 6, 7, -9, 8, 0, -4, 4, -8, 1, 1, -4, 4, -10, -15, -6, -8, -16, -9, 0, -6, 0, -9, 3, 25, -7, -2, 2, -3, -12, + -3, -13, 0, 11, 17, 19, -6, -25, -24, -21, -13, 6, 14, 12, 12, 11, 6, 3, 3, 14, 27, 32, 35, 37, 29, 23, 14, -12, -20, -18, + -24, -19, -24, -19, -16, -5, -11, -1, 2, -10, -4, -10, -1, 8, -1, 0, 11, 27, 42, 60, 71, 48, 3, -18, -22, -23, -13, -10, -12, -3, + 7, 10, 7, 0, 6, 14, -1, 3, 8, 0, -5, 2, 0, -13, 12, 0, 1, -3, -11, 5, 1, 7, -6, 21, 10, 21, 6, 10, 3, 11, + -6, 5, 16, 26, 44, 67, 66, 53, 21, -1, -5, -16, -18, 8, 14, 4, 26, 32, 22, 23, 29, -6, 6, 17, 9, -2, -7, -5, -1, -2, + 3, 2, 2, 0, 6, 1, -4, -4, 5, 3, 14, 16, 28, 23, 22, 14, 22, 19, 22, 19, 24, 24, 17, 6, 1, -5, -2, -13, -13, -22, + -21, -16, -20, -24, -21, -1, -8, -16, -17, -12, -9, -13, -9, -10, -12, -10, -6, 1, 21, 8, -1, -18, -36, -48, -56, -52, -32, -20, -20, -17, + 0, -9, -7, -2, -7, -1, -13, -4, -10, -9, -26, -31, -31, -36, -23, -17, -33, -11, -29, -19, -9, 1, -15, -10, 3, 6, 11, 4, 3, 13, + 10, 28, 36, 40, 49, 36, 4, -36, -96, -114, -127, -96, -72, -35, 13, 31, 15, 29, 8, 2, -5, 0, -1, 6, 6, 36, -47, 25, -19, 31, + -64, -66, 63, 8, -88, 51, -47, 30, -9, -41, 69, -6, -8, 26, -21, 10, -1, -11, -5, -22, -4, -7, 1, -2, 3, -14, -1, 10, 3, -8, + -13, 11, 7, -14, 7, 4, -2, 9, -21, -16, 6, 4, 16, 7, 0, -2, 9, 0, 8, 16, 18, 11, 10, 17, 10, 2, 12, 7, 18, -40, + -8, 5, 3, 2, 0, 3, -7, -11, -5, 5, -5, 5, -4, 2, 10, 4, 10, 5, -4, -8, -9, -5, 11, 3, -5, 1, -13, 2, 5, 0, + -3, -10, -9, 4, 8, 8, -7, 4, 9, 2, -18, -5, 0, 11, -4, -9, -5, 13, 0, 8, 8, 0, -3, 2, -2, -5, -3, -10, 14, 13, + -5, 3, 12, -3, 4, 9, -7, 4, -7, -5, 5, -15, -1, 5, 12, 6, -8, -2, 12, 11, 8, 14, 3, 13, 5, 0, 10, 8, 3, 0, + 17, 0, -2, -5, -1, 0, -6, 5, -3, -9, 4, -13, 1, 4, 2, -2, 7, 0, -9, 9, 7, -2, -2, 3, 2, -2, -12, -6, -9, 7, + 10, 2, -1, -3, 1, 2, -4, 1, -6, -2, -4, 1, -1, 3, -4, -6, -6, 1, -1, 7, 4, 9, 8, 9, 3, -1, -1, -6, 2, 3, + 2, -1, -2, -1, -1, -1, -1, -1, -1, -4, 1, 4, 8, 8, 8, -1, 0, 0, 4, 5, -2, -6, -3, -2, -4, -6, -9, 4, -1, 5, + 8, 4, -2, -2, -6, 3, 1, 10, 4, 1, 2, 0, 0, 1, 0, -5, -6, -4, 2, -8, -1, -6, 12, -2, -1, -2, 4, 4, -6, -1, + 3, -7, 5, 1, 2, 6, 2, -5, -6, -6, -3, 6, 3, 4, 5, 3, 9, -3, -2, -2, -1, 1, 2, 3, -5, -2, -5, -1, -4, -2, + -22, -22, -6, -14, 10, 15, 20, 23, 12, -18, 5, 1, -11, 1, 4, 21, 0, 4, 1, 13, 15, -9, -3, 4, 5, -1, -6, -16, -12, -7, + -11, -8, 8, -3, -5, 15, -6, 8, 7, 2, 4, 9, 10, 13, 3, -3, -11, -10, -11, -7, -2, 8, 4, 13, 13, -4, -4, 3, -3, -5, + -10, -3, -7, -15, 1, -3, 7, 6, -5, 7, 1, -5, -4, 2, 9, 1, 0, -7, 4, 6, 9, 4, 3, -6, 5, -3, -2, 3, 1, 9, + 11, 10, 10, 1, 1, 9, 10, 8, 18, 10, 9, -1, 3, -2, 5, 3, 6, 11, 1, -9, -5, 1, 12, 4, 4, 8, 3, 7, 9, 7, + 3, -2, 1, 9, 6, -9, 1, -4, -11, 14, 11, -3, 11, -5, -7, 9, 7, 1, -1, 1, -3, 10, -6, 6, 5, 0, 9, 4, 14, 4, + 10, -1, 5, -7, -4, -4, -3, -1, -13, 3, 0, -1, 6, -2, 4, 10, -3, 11, -4, 4, 4, 0, 3, -11, 5, -3, -2, 0, -2, 10, + -5, -5, -2, -4, 6, 9, 5, 0, -5, -8, -3, -9, -8, -4, 1, 2, 2, -6, -5, -5, -8, 0, 0, -3, -8, -4, -4, 1, 0, 9, + 3, 4, 6, 6, 8, 3, 10, 9, 3, 11, 4, 4, -5, -1, 1, -1, 0, 3, 3, 2, -7, -2, -5, 0, -3, -4, -1, 4, 4, 5, + 2, -5, 2, 1, 2, -5, -2, -4, -3, 5, 1, -3, 0, 2, -3, -2, 2, 3, -3, -2, -1, 0, 0, -2, -4, -9, -4, 1, 4, 4, + 5, 1, 1, 1, -4, -9, -8, 7, 3, 4, -3, -6, -5, 0, -3, -1, 2, 0, 7, 4, 7, -1, -4, 2, -3, 6, 0, 4, 3, 3, + -4, -6, -7, 2, -8, -7, -25, 3, 1, 13, 1, 1, 24, 6, -14, 1, -8, 10, 5, -4, 2, -4, 3, 10, 10, 14, -1, -1, 5, 11, + 0, 4, -3, -2, -9, -10, -5, -4, 3, -11, -9, 6, 4, -3, -4, 5, 4, 8, -4, 1, -8, -11, -13, -11, 2, 1, 0, 6, 13, 7, + 2, 0, -7, -4, 7, 5, -3, 0, -11, -16, 6, 7, 12, 2, 0, -4, -6, 3, 2, -1, 0, 8, 2, 3, 7, -4, 3, 6, 4, 2, + 9, 9, 11, 5, 5, 5, 0, 0, -2, -11, -11, -8, -7, -2, 2, -4, -7, -1, 0, 1, 1, 9, 13, 6, 1, -2, -5, 4, -1, 1, + 1, 6, 7, 13, 2, 3, 12, 4, 8, 4, -4, 8, 5, -12, -5, -3, -6, 8, 5, -5, 5, 11, 7, -1, 3, -4, 2, -6, 0, 6, + 3, 6, -2, 5, 3, -1, 3, -1, -4, 4, 8, -4, 10, -1, -2, -8, 1, 3, -3, 5, 2, -7, 8, 3, 0, -6, 0, 7, 3, 11, + -1, -14, -10, -10, 4, 4, -3, 2, -12, -12, 4, 5, 0, -5, -5, -4, 4, 0, -2, 0, -5, 0, -2, 2, -3, -4, -2, 0, -5, -3, + -8, -8, 0, 3, 5, 11, 10, 8, 3, -1, 3, -3, 6, 9, 5, 6, 3, 3, 0, 2, 1, 3, -1, 0, -4, -2, -7, 2, 8, 3, + 2, -3, -5, -7, -7, -7, -6, -2, 9, 6, 5, -5, -4, -4, 6, 8, 4, 3, -3, -11, -7, -4, -9, -11, -3, -6, -1, -1, -5, 2, + 2, 3, -2, -1, 5, 3, 3, -3, -1, 8, 8, 1, 5, 4, 10, -2, -3, 3, -2, 0, 10, 1, 1, 0, -10, -3, -7, -7, -11, -3, + 6, 6, 3, -5, 1, 7, -3, 2, 4, 2, -9, -22, 0, 11, 30, 4, 13, 21, 1, -11, -9, -2, 7, 2, -7, -8, 7, 14, 8, 3, + 0, 6, -2, -6, 4, 0, 8, -1, 1, -3, -1, -3, -3, -1, -2, 14, 3, 7, 1, -1, 19, 3, -2, 8, -1, -14, -8, -6, -6, -3, + -6, 7, 6, 3, -9, -2, -9, 0, -1, 2, 1, 7, -3, -4, -19, -7, -8, 8, -1, -2, 5, 2, -1, -3, 4, -2, 6, 11, 9, -1, + 0, -1, -2, 5, 4, 7, 4, 3, -3, -1, 7, 9, 2, -7, -8, -3, 11, 1, -3, -13, -6, -7, -8, -6, -5, 0, 0, 2, 1, 1, + -2, -6, 5, 0, -7, 3, 13, 13, 15, 11, 13, 14, 17, 17, -4, -4, 1, 1, 0, -1, 0, -9, 5, -2, -1, 2, 13, 5, 8, 12, + 3, 3, 0, -4, -4, -13, -1, -17, -3, -3, -1, 1, -2, -4, -1, 4, 3, 6, 5, -3, -3, 3, 0, -12, 9, 2, 7, 4, 6, -7, + -12, -14, -13, -7, 2, 3, -20, -5, -7, 7, -5, -16, -17, -9, 2, 5, -2, 1, 1, -2, 3, 8, 7, -3, 0, -4, 0, 8, -2, -1, + -8, -1, -3, -1, -4, -5, 3, 2, 5, 11, 12, 13, 5, 3, 3, 5, 5, 2, -2, 5, 1, 12, 6, 6, -1, -2, 1, 5, 2, 5, + 3, 1, 1, -3, -5, -4, 3, 1, 3, 3, -2, -3, 6, 6, -3, -10, -8, -9, 2, -1, 1, -3, 4, -2, -2, -4, -2, 1, 3, 3, + -10, -9, -12, -4, 2, -6, 1, 2, -1, 7, 6, 1, 0, -2, -2, -2, -1, 0, -2, 4, -5, -6, -4, -7, 1, 8, 3, -2, 2, -2, + 2, 6, -3, -3, 4, 1, 13, 5, 0, 6, -1, -2, -3, -5, -6, -17, -20, 6, 16, 20, 13, 23, 27, -4, -10, 1, 2, 2, 11, -9, + -11, 3, 1, 3, 2, 7, 0, -6, -10, 4, 3, 9, 3, -4, -4, -1, -4, 0, 10, -6, -5, -10, 0, -2, 1, 11, 3, 2, 1, 9, + -5, -6, -9, -2, 5, -1, 9, 7, 18, 9, -8, -6, -6, -3, -5, -11, 5, 9, -6, -16, -1, -3, 1, 6, 3, 7, 2, -9, -12, -5, + -3, -4, 0, -7, 1, 0, 1, -1, -1, 3, -3, 3, 9, -2, -5, -13, -13, -13, -5, -12, -3, 1, 13, -1, -6, -6, 4, 9, -3, -5, + 0, -3, -11, 0, -3, 1, 3, 12, 5, 6, -3, 5, 1, -2, -7, -10, -3, 1, 5, 1, 8, 0, -5, 6, 13, 6, 2, 15, 10, 4, + 11, 6, 3, 9, 5, 11, 20, 14, 10, -8, 1, -5, -1, -2, -3, -6, 1, -13, -8, -4, -6, 3, 5, 13, 19, 13, 13, -1, -1, -7, + 0, 2, 6, 7, 7, 2, 7, 1, -7, 4, 0, -3, -10, -12, -13, -12, -1, -1, 6, 4, 10, 12, 4, 9, 6, 8, 2, 2, 2, 6, + 6, 2, 1, -5, 1, -6, -4, -6, -9, -13, -7, -7, -5, -4, 4, 0, 2, 6, -1, 2, 1, 1, 4, 5, 6, 0, 2, -1, 1, 4, + 4, 2, 3, -1, 5, -3, -1, -8, -10, -5, -7, -2, -3, -8, -1, 0, 0, 7, 7, -1, -2, -5, -4, 3, 2, 5, -1, 5, 1, -1, + -5, -2, 0, 4, 4, 1, -2, 1, 2, -7, -6, -6, -3, 1, -3, 0, -2, 1, 0, 3, 0, 0, 3, 2, 4, 4, -7, -2, 0, 9, + 2, 5, -1, -8, -1, 10, 4, 1, 1, -4, 8, -4, -5, -10, -5, -5, -3, -4, 7, 10, -69, -32, 34, 13, 21, 27, 26, 41, 21, -2, + -8, -15, 0, 14, -9, -22, -10, 13, 3, 5, 6, -10, 7, 15, 7, -5, 3, 1, -5, -8, -12, -11, 1, -2, -1, 1, 14, 18, -6, 6, + 7, 6, 4, 6, 16, -3, -14, -8, -2, 8, 3, -1, -5, 10, -2, -3, -6, -2, -5, -9, -8, 1, 0, -12, 21, -32, -14, -6, 0, 1, + 1, -2, -2, -8, -15, -13, -13, -5, -8, -2, 3, 2, -6, -5, 0, -1, 4, 2, 2, 0, 2, -2, -3, 2, 7, 7, 12, 16, 4, 7, + 8, 8, 14, 4, 8, 8, 11, 0, -4, 0, -4, -3, 10, 20, 9, 3, 5, 10, 11, 2, 3, -1, -6, -4, -16, -9, -1, -6, 5, 20, + 13, 6, 10, 7, 6, 4, 5, 7, 12, 19, 23, 23, 41, 38, 27, 22, 20, 16, 13, 7, 23, 31, 33, 16, 8, -13, -28, -27, -13, -15, + -25, -18, -11, -22, -19, -24, -21, -9, -1, -8, -25, -11, -16, -16, 6, 1, -1, 1, 11, 4, 0, -2, -11, -10, -7, 6, 3, 9, 11, 5, + 3, 4, -3, -5, -5, -1, -8, -6, -6, 2, 2, -3, -6, 1, -2, 1, -4, -2, -4, -2, 0, 1, -1, -2, -2, 4, 3, -2, 1, -2, + -1, 0, -3, -15, -15, -21, -18, -24, -26, -27, -22, -14, -11, -13, -8, -6, -8, -3, -3, -4, -9, -11, -15, -15, -15, -6, 0, 5, 11, 22, + 21, 25, 24, 21, 17, 12, 20, 23, 24, 25, 22, 27, 33, 28, 27, 25, 28, 37, 36, 34, 36, 32, 20, 0, -16, -36, -56, -58, -62, -58, + -60, -57, -44, -38, -25, -16, -8, 2, 6, 2, 4, 11, 13, 26, 39, 48, 48, 49, 41, 32, 12, -2, -23, -37, -67, -113, -33, 127, -4, 10, + 46, 61, 114, 55, 4, -7, -32, -30, 12, -27, -30, -2, 2, -3, -7, -11, -17, 1, 14, 2, -8, 8, 4, 8, 6, -13, -5, -4, 5, 3, + 21, 8, 4, 4, 11, 7, 12, 19, -2, 1, 1, -11, -16, -15, -1, -10, -13, -4, 0, 1, 4, -17, -9, -10, -13, -23, -17, -25, -51, 87, + 6, 4, 5, -3, -4, -8, -9, -5, -4, -6, -12, -8, -2, 5, 7, 9, 16, 4, -4, 5, 3, 4, -1, -5, -12, -9, -7, -2, -2, 6, + 10, 14, 14, 10, -3, -3, -4, 3, -11, -9, 1, -5, -2, 5, 1, 1, 6, 8, 3, 4, -2, 1, -1, 11, -2, -12, -10, 1, 0, 9, + 8, 13, 4, 4, 5, -2, -5, 4, -1, -4, 2, 3, -6, -11, -10, 4, 8, 6, 8, 2, -4, -7, -4, 3, 2, -3, -17, -13, 2, -4, + -8, -2, 0, 2, 0, 14, 8, 5, 0, 9, -7, 1, 17, -8, 6, 2, -1, 13, 0, -3, 2, -6, 6, -1, 13, 7, 11, 12, -9, 3, + 12, 7, 1, -2, -1, -4, -6, -5, -1, -5, 3, 2, -3, -4, -6, -4, -1, 4, 0, 1, 4, 3, -8, -4, -11, -8, 6, 1, 7, 6, + 5, 2, -1, 9, 4, -1, -2, -3, -1, -5, -7, -1, 1, 0, -4, 5, 10, 4, -1, 2, 4, 5, 1, -2, 5, -3, 9, 7, 2, 1, + 0, -6, -4, -5, -4, -5, 4, 2, -4, 2, 7, 6, -4, 5, -1, 5, -1, -3, 4, -1, 3, 4, 3, -4, -1, 3, -10, -3, -3, 5, + -9, 9, 13, 0, -17, 3, 6, 7, -1, 0, -4, -4, -7, 1, 4, 2, -10, 4, 4, -6, 4, 5, 10, -2, -6, -1, -1, 1, -7, 15, + 5, 24, -3, 14, 21, -6, -17, -27, -13, -9, -4, 6, 11, 4, -11, -4, -2, -12, -11, 2, -15, -6, 11, -3, 13, 8, -3, 5, 7, -2, + 9, -5, 7, 0, 5, 11, -2, 4, 7, -4, -13, -14, -17, -12, -17, -11, -5, 3, 4, 10, 7, 2, 4, 2, 9, -7, 8, 12, 6, 2, + -9, -10, -8, -1, 1, 5, 7, 10, 5, -2, -5, 2, 0, 3, -2, -4, -5, 12, 9, 8, 10, 6, -7, -10, -7, -3, -5, -8, 3, -9, + -9, -17, -6, 1, 15, 4, -16, -6, -1, -1, -6, -18, -16, 11, 11, 8, -5, 1, 16, 8, 6, -3, 6, 4, 7, 3, 1, 3, 1, 1, + 11, -3, 7, -1, -15, 10, 1, -8, -4, 1, -2, 4, 9, 2, -14, -2, -7, -7, 3, 2, 11, -13, -5, -6, -7, 1, -12, -3, 10, 20, + 17, 10, 11, 11, 1, -1, -6, -8, -5, -5, 5, 3, -8, 15, 0, 2, 5, -4, -9, -2, 19, -6, 4, -4, -17, -8, -5, 5, 12, 7, + 27, 1, -1, -4, -16, 12, 12, 12, 5, 2, -3, -2, -6, -16, -10, -4, -2, -2, 5, -6, -2, 6, 8, 5, 4, 3, -1, 4, 0, -2, + 3, -1, 7, 5, 4, 3, 8, -1, -9, 2, 1, 1, -1, 1, -2, 3, -4, -17, -2, 3, -4, -3, 9, 0, -1, 10, 11, 3, 5, -3, + -9, 8, 2, 4, 6, 1, 4, 7, 0, 1, 13, 3, -1, -7, -4, 1, 1, 1, 6, 5, 4, -6, 3, 3, -2, 5, 8, -4, 4, -3, + -2, -18, -15, -15, -15, 2, 0, -1, 0, -7, 3, -7, 1, 1, -5, 8, -7, -4, 0, 7, 6, 1, 2, -2, 4, 3, -2, 1, -6, -11, + -1, -2, 0, 0, -2, 5, 29, 6, 6, 6, 11, 9, -9, -9, -4, 5, -6, 19, 10, 9, 7, 11, -10, -5, 12, -4, -13, 3, 3, 11, + 27, 7, -7, -6, 7, -3, -8, -2, -4, 2, 11, -8, 8, 17, 26, 8, -12, -8, -19, -5, -1, -9, -1, -5, 2, 1, 13, 5, 0, 4, + 7, 5, 5, 0, -12, -14, -9, -3, -5, 11, 1, -6, -12, -9, -4, -3, 4, -3, -16, -2, 7, 1, 6, 6, -8, -12, -5, 2, 5, 14, + -5, -9, -9, -13, -6, -4, -3, -6, -1, -4, 10, -6, -11, -6, 8, 11, 6, 3, -5, 13, 7, -5, -7, -1, 0, -3, -6, -5, -7, -14, + -4, -5, -1, -14, -6, 1, -3, 2, 15, 1, -5, 3, 0, 3, 13, 2, -3, 14, 9, -6, -2, -8, -7, -2, -11, -9, 0, -2, 5, -7, + -6, -5, 0, 3, -5, 7, -10, -9, 0, -1, 1, -4, -8, -8, -3, 8, -10, -3, 3, 6, 13, 13, 8, -15, -11, 3, -11, -3, -12, -10, + -8, 20, 0, 6, -3, 9, 0, -3, 3, 3, -8, -5, 6, 16, 6, 3, 1, -1, -2, -7, -10, 2, 2, 5, -7, -1, -1, 7, -2, -2, + 3, -7, -5, -5, 2, 2, 3, 6, 6, -2, 3, 2, -5, -6, 1, 4, 3, 6, 8, 10, 4, 3, -3, 6, 1, 6, 2, 3, -1, 3, + -5, 5, -1, -19, -6, -8, -13, -9, 0, -3, 2, 1, -1, 5, 9, 1, 5, 0, -1, -2, -10, 3, 1, 6, 2, 5, 7, 4, 1, 2, + 0, 1, -3, -11, -1, 1, 0, -6, 0, -15, 0, 3, -2, 5, 0, 3, 1, 17, 9, 7, 11, 10, -7, 12, 19, 4, -3, -4, -7, -5, + -6, 2, -1, 16, -4, 1, 1, 2, 10, 10, -1, 19, 2, -6, -19, 1, 3, -7, -19, 1, -6, -6, -1, -1, 9, -1, -2, 3, -9, 19, + 9, -20, -17, 2, -5, 5, 1, -10, 1, -10, -3, -18, -2, -4, -1, 7, 8, 8, -10, 8, -8, -4, -2, -11, -5, -7, -4, -5, 6, 4, + 12, 0, 4, -2, 10, 3, 11, -12, -3, 4, 0, 6, 9, -3, -4, 0, 8, -2, 6, 11, 3, 2, -1, -11, -12, -5, -12, -8, -7, -7, + -3, 10, 1, -14, -8, 2, 4, 4, -8, 9, 22, 25, 11, 2, -6, -5, 8, 1, -1, -1, 8, 4, 2, -2, 6, 3, 8, 7, 6, 5, + -8, -20, -7, -20, 0, -3, 1, 13, -10, -19, 2, 13, 3, -5, -11, -9, 7, 14, 0, -4, 7, 15, 14, -7, -3, 14, 5, -7, 1, -5, + -8, 3, -6, -22, -15, -5, 0, 1, -7, 1, -8, -15, -14, -7, -3, 7, -6, 1, -5, 9, 8, 1, 19, 5, -7, 11, 18, -2, -3, 6, + 1, 6, 14, 2, 5, 14, 3, -3, 0, 5, -3, -1, -4, -16, 1, -15, -3, 3, 6, 7, -1, -5, -4, -4, -7, -7, -9, -11, 0, 4, + 12, 11, 1, -2, 3, 1, -2, -11, 1, -2, -1, 5, 3, 2, 1, 7, 5, -4, 4, 5, 12, -1, 4, 3, 5, 3, 10, 12, 5, -3, + -7, -1, -2, -2, -4, -1, 8, 11, 4, -2, 3, 11, -1, -7, -2, -9, 2, -5, -20, -9, -8, -5, -14, -10, -11, 1, 7, 0, 2, -2, + -4, 5, 1, -5, -9, -4, -8, -2, -7, -1, -5, -10, -7, -3, -11, 0, 7, -1, 6, 6, 7, 9, 25, 11, -1, 1, -9, -8, -4, -8, + -9, -13, 5, -1, 9, 0, 1, -4, 3, -2, 9, 3, 3, -8, -20, -6, 0, 2, 15, -51, -28, 36, -19, -36, 7, 7, -15, 16, -8, -1, + 19, 6, -4, -8, -12, -15, 8, -1, 3, -11, -3, -11, -15, -9, -9, -13, -8, -23, -10, 1, 3, 17, 12, -8, -8, 3, 7, 4, 0, -4, + 1, -3, -15, -1, 3, 5, -4, 1, -6, 8, 6, 0, -5, 0, -6, -10, -4, 4, 13, -12, -6, -3, 5, -9, 8, 4, 12, 14, 1, 17, + 18, 5, 1, -5, 14, 13, 9, 3, 13, 14, -9, 2, -14, -6, -2, 7, 1, 2, 6, -2, 0, 15, -5, 1, 8, -1, -4, -5, -6, -8, + -3, -12, -19, 2, -4, 0, -5, -11, -15, -21, -17, -13, 0, -2, 7, 4, 0, -2, 19, 13, 4, 12, 3, 5, 28, 24, 29, 20, -3, 29, + 39, 25, 18, 19, 22, 6, 23, 2, 13, 20, -4, 14, 10, 7, 0, -3, 1, -18, -2, -14, 21, 29, -8, 2, 5, 10, -19, 11, -11, -1, + 13, 10, 11, 6, -2, 5, 23, 8, -9, 9, 11, 8, 22, 0, 18, 4, 11, -2, 3, -4, 4, 9, 7, 9, 12, 9, 0, -2, -3, 0, + -4, -2, 5, 4, 3, 5, 2, 4, -4, 6, -1, -4, -4, -6, -11, -3, -1, 3, -1, 0, -4, -1, 2, -4, 2, 11, 2, 3, -7, -4, + -8, -3, -8, -1, -5, 4, 0, -8, -6, -6, -5, 4, 3, 4, -3, 1, 3, 1, 0, 8, 0, 7, 8, 7, 15, 4, 9, 6, -4, -6, + -7, -7, -15, -5, 1, 0, 1, 0, -10, -1, -4, 14, 2, 3, -2, -7, 2, 0, 2, -8, 3, 0, 3, -1, 11, 7, 4, 0, 1, 0, + -3, -6, -13, -1, 9, 1, -2, -1, -4, -7, 0, -1, 12, -8, -2, 3, -4, 3, 2, -7, -22, -54, -22, 26, -54, -13, 30, -52, -64, 13, + -2, -44, 1, -10, -6, 8, 3, -11, -15, -16, -17, 10, 4, -3, 1, 4, 6, 12, 12, 6, -6, 9, 0, -8, 8, 20, 13, 15, -3, -5, + 2, 1, 8, 3, 6, -5, 3, 0, -6, 21, 12, 4, 13, 3, 0, 1, 6, 0, -3, -5, -14, -1, 0, 23, -54, -17, -23, -25, -21, -19, + -9, -4, 0, -6, -2, 1, -1, 8, -15, -18, -19, -26, -6, -4, 10, 3, -1, 9, 4, -4, -10, -6, -5, -4, -1, -7, -2, -5, 0, -8, + 1, -2, -17, -25, -33, -30, -21, -20, -12, -11, 7, -6, -27, -30, -20, -7, 9, 30, 38, 31, 22, 19, 21, 20, 7, 7, 9, 9, 3, 28, + 32, 21, 20, 18, 25, 20, 16, 21, 24, 43, 26, 22, 12, 15, 2, -6, 6, 5, -1, -2, -14, -16, -11, -7, 21, 22, 29, 2, 3, 18, + 7, -1, 13, 9, 8, 18, 18, 10, 20, 8, 11, 20, 10, 2, 4, 15, 17, 43, 8, 22, -21, 19, 12, -24, 5, 2, 5, 10, 20, 18, + 6, 9, 0, 3, -5, -7, -9, -9, -10, -7, -9, -26, -36, -35, -33, -21, -16, -16, -20, -19, -9, 7, 6, -14, -23, -22, -16, -26, -25, -14, + -16, -29, -34, -33, -27, -31, -10, 5, 7, 8, 7, 7, 14, -6, -8, 4, 12, 13, 18, 10, 10, 5, -3, 1, 9, 5, 20, 8, 16, 39, + 24, 26, 23, 19, 25, 19, 18, 8, 4, -5, -6, -4, -5, 11, 1, -7, -27, -29, -35, -48, -66, -66, -51, -38, -10, -1, 11, 15, 17, 19, + 34, 39, 58, 43, 49, 53, 49, 24, 22, 21, 9, 7, 3, -15, -41, -62, -76, -71, -87, -90, -85, -87, -69, -54, -39, -59, -125, -39, 51, -127, + -43, 116, -6, -117, 22, 55, -82, 17, -16, -30, 51, 12, -3, 3, -20, 2, 45, -35, -3, 38, -12, -13, 25, 14, -13, 3, -3, -17, -3, 16, + 31, -2, -11, -11, -8, -5, 2, 3, 0, -4, -12, 7, -12, -10, -2, 7, 0, 6, 2, 5, -7, -4, -1, -3, 2, 1, 2, 5, 17, -34, + -2, -5, -7, -2, -6, -6, -2, 5, 7, 4, 3, -1, -6, 0, -1, -5, 1, -3, 1, 0, -1, -4, 1, 3, 5, 2, -2, -1, 1, 0, + 0, 4, -4, -1, -1, 6, 0, 7, -1, -4, -5, 7, 3, 1, 0, -2, -2, 0, 3, 10, 1, 4, 7, 5, 1, -5, -3, -6, 3, -4, + -6, -1, -1, -7, -1, -9, -9, 2, 5, 6, 5, 4, 4, -4, -3, 1, -4, 1, -4, -1, 7, 2, 4, 4, -1, -3, 5, 3, -1, -3, + -3, -3, 7, 7, 6, 0, 3, 5, 4, 3, 1, 2, 3, -5, -12, -6, 0, 5, 6, -1, -4, -6, -6, 2, -3, -3, 5, -3, 0, -3, + 5, -1, -3, -3, -5, -6, -2, -3, -1, 1, -1, -6, -7, -5, -6, -2, -2, 6, 1, 1, 1, 2, 4, 2, 0, 0, 3, -2, -6, -3, + -1, 0, -1, -2, 2, 0, 1, 2, 2, 0, -4, -7, -2, -2, -6, -2, -4, -2, 1, 1, -2, -4, 0, 6, 4, 3, 3, -1, -1, 1, + -6, -5, 1, 4, 2, -1, -3, -8, -4, 0, 10, 6, -2, 2, -4, 2, 8, 7, 4, 7, 7, 7, -1, 7, 4, 9, 0, 3, 4, 1, + 0, -1, -2, -7, -6, -1, -7, -1, 0, 1, 1, 5, 3, 0, 4, -3, 7, 11, 7, 1, -2, 0, -2, -2, -1, -2, 4, 2, -4, 1, + 56, -18, 12, 4, 12, 12, -3, -10, -2, -7, -2, 2, -6, 3, -8, -7, 2, 7, 10, 13, 2, -6, 0, -6, -6, -4, 4, 5, -1, -1, + 4, 5, 5, 3, 5, -2, -6, -7, -4, -4, -9, -4, 3, 3, 6, 1, 1, 0, 1, 5, 0, 0, 0, 5, -8, 1, 1, 2, 5, 5, + 10, 0, 13, 5, 34, -10, -8, 3, 2, -2, -5, -6, 1, 4, 2, 1, -2, -8, 2, -1, -3, 6, 3, -2, -3, -1, -2, 2, 0, 4, + 4, -3, -5, 3, 3, 6, 4, 4, 0, 3, 7, 8, 5, 3, 0, 5, 0, 1, -7, 0, -1, -1, 6, 7, 2, -4, -3, 1, 2, 3, + 1, 3, -1, 2, 4, -2, 3, -4, 0, 4, -6, -3, -8, -1, -2, 1, -8, -6, -3, 3, -4, -6, 1, -2, 4, -1, -3, -6, -1, -6, + 7, -1, -1, 4, 1, 5, 5, 6, 12, 2, -5, -1, -3, -1, 1, -7, 1, -2, 1, -3, -4, -2, 5, 1, 3, -9, 2, -4, 2, 9, + 12, 2, 5, 6, -7, 3, 3, 0, 1, 3, -1, -1, -1, -4, 1, 1, -3, 0, -2, -2, 2, 4, 4, 5, 5, 2, 5, 4, 1, 2, + 0, 0, -4, -5, -1, -3, -2, -2, 1, -2, 2, 6, 0, 1, 1, -1, 1, -3, -7, -7, 2, -4, -6, 1, 3, -3, -1, -5, -4, 2, + 4, -3, -7, 2, 4, -2, -4, 0, 0, -2, 2, 3, -5, -8, -4, 2, 5, -2, 1, 3, -3, 1, 6, 3, -3, -6, 1, 1, 1, -1, + 7, 5, 2, 4, -2, 3, -3, 0, -1, -2, -5, 1, 5, 5, 0, -4, -1, -4, 2, 1, -6, -1, 3, -1, 3, 0, 2, -2, -4, -2, + 5, -2, -2, 4, -3, 49, -25, 1, 12, 5, 3, -15, -1, 5, -1, 6, 1, 0, 0, 4, 3, -1, 0, 3, 2, 1, 1, 7, 0, -10, + -3, 3, 9, 4, 10, -5, -4, 4, -5, -5, -4, -3, -3, -2, -8, -3, 4, 5, -13, -4, -1, -2, 0, -1, -1, 1, 5, -7, -2, -2, + 2, 2, -1, 3, 4, 3, 2, 5, 2, 34, -4, -2, 12, 3, 2, -1, -1, -5, 2, 15, 9, -3, -7, -5, -4, -5, 0, -1, 1, -1, + 2, 3, 4, 3, 0, -1, 3, -7, 1, -3, -5, 9, -3, -4, -13, -4, 1, -2, -10, -9, 0, 3, -7, -16, -8, 1, 4, 7, 12, 6, + 3, 3, 3, -1, 7, 3, 0, -3, 0, -8, -7, -2, -3, 1, 2, 3, 2, -1, -1, 2, 3, 0, -1, -4, 1, -6, 1, 3, 1, -6, + -10, 3, 9, 6, 6, 9, 11, 8, -2, 1, 11, 6, 7, 2, 4, -3, 3, -6, -7, -2, 0, 2, 9, 11, 3, 4, -3, -9, 7, 1, + -5, -2, -6, -5, -7, -7, -7, -2, -14, -12, 4, 2, 3, 2, 2, -5, -5, -5, -5, 3, -3, -6, -5, -4, -3, -3, -5, 1, 0, -4, + -9, -5, 3, 6, 4, 8, 5, 1, 4, -3, -2, 3, 1, 1, 3, 6, 4, 3, -8, -2, 0, 0, -8, -8, -8, -5, -1, -3, -3, 1, + 1, -1, 1, 1, 5, 1, -1, -4, 1, -2, -1, -2, -2, -6, -2, 3, 0, 1, 0, 1, 6, 7, 1, 1, 5, 0, 1, 1, -3, -7, + -4, 0, 6, 4, 2, -2, 4, 0, -7, -1, 1, -3, -6, 0, 7, 9, 5, 2, -1, -2, 5, 7, 6, 3, 4, -3, -5, -1, 3, 0, + -6, 0, 6, -2, -5, -6, -13, -16, -21, -17, 54, -21, 6, 15, 1, 9, -12, -9, -4, 0, -7, 3, -1, -6, -1, -4, 1, -2, 4, -1, + -2, -5, -3, 14, -8, 1, 6, 6, 6, 7, -5, -4, 2, 9, 2, -1, -5, -2, 2, -10, -3, 1, -2, 7, -2, -4, 5, -3, -4, -4, + 0, -3, -1, 4, 7, 1, 2, 5, 6, -6, -3, 0, -8, 0, 31, -1, 8, 7, 2, -1, -5, 11, 8, 6, 6, 3, -7, -8, 0, 10, + 14, 10, 4, 0, -1, -7, -8, -2, -1, -5, -1, -11, -7, -8, -7, -3, 0, -11, -1, -11, -9, -3, -5, -8, -6, -1, -1, 2, 0, 4, + 1, 5, 6, 14, 1, 1, -4, 0, -1, -3, 0, -3, -5, -5, 0, 0, 3, 0, 7, 7, 5, 10, 0, 7, 9, 6, 4, -10, 0, 3, + -4, -2, -4, 10, 11, -6, 5, 1, 6, 3, 5, 5, 14, 3, 5, 4, 3, -5, -5, 0, 1, -5, 0, -5, 2, -2, 0, -7, 4, -1, + -1, 3, -12, 0, -3, -3, 0, -4, -10, -10, -9, -11, -7, -13, -4, -1, 1, -1, 2, 0, 1, 2, 1, 5, 6, 1, 2, 4, -3, -2, + -3, 4, 2, 1, -4, -5, 2, 5, 1, 0, 0, -1, 1, 0, -3, 4, 0, 2, -3, 1, -5, -1, 6, -3, -2, 3, -1, 0, -6, -3, + 3, 1, -2, 0, 4, 4, -3, -2, 6, 4, -1, -6, -7, 0, -3, 1, 4, -1, -2, 4, 3, 1, 0, -4, -1, -1, -1, -2, 3, -1, + 4, -1, -3, 4, 4, -1, 4, 2, 6, 5, 6, 3, 4, -4, -4, -7, -4, -8, -6, -5, -3, -3, -1, -8, -4, -8, -2, -5, 0, 8, + -3, -7, -4, 0, 4, 4, 1, 6, 7, 6, -1, -8, -11, -14, -31, 82, -14, 12, 5, 13, 19, -7, 2, 10, -11, -1, -20, -7, -2, -14, + -8, -3, -6, 7, 2, -2, -3, -4, 1, 1, -4, 12, 7, 3, 10, -6, -4, 5, 7, 7, -9, -5, 1, 6, -5, -5, -5, -8, 4, 2, + -4, 5, 13, 0, 2, 1, -5, 3, 1, -4, -1, 2, 6, -1, 1, 0, -4, -5, -4, 14, -2, 2, 7, 3, -1, 6, 10, 1, -7, 0, + 2, -9, -11, -12, -13, -9, -10, -8, -20, -22, -21, -18, -7, -12, -9, -12, -13, -8, 0, -6, -4, 2, 6, 0, -7, -4, 8, 3, -6, -3, + 3, 5, 1, 7, 11, 1, 1, 10, 8, 0, 0, 8, 2, 3, 9, 4, 0, 0, 4, -2, -8, -1, 2, 1, 2, 0, 3, 5, 6, 0, + -2, 5, 3, 8, 4, 2, 9, 15, 17, 7, 3, 10, 24, 16, 19, 17, 17, 20, 15, 26, 14, 16, 7, 7, 4, 4, 9, 4, 10, 10, + 7, 2, -9, 1, 0, -1, 6, -2, 8, 0, -8, -9, -19, -25, -19, -11, -16, -2, -21, -19, 7, 10, 6, 5, 1, 2, 4, 3, 4, 2, + -2, -2, -5, 3, 4, 6, 6, 5, 6, 3, 3, 4, 6, 6, 7, 4, -2, 1, 5, 0, -1, 5, 0, -4, -4, -2, 5, 3, -2, 2, + 4, 6, 3, 4, 0, 0, -1, -2, -1, 3, 2, -1, -4, -3, 0, -1, 1, 2, 3, 3, 9, 7, -1, -2, 5, 6, 12, 13, 4, -2, + -2, 2, 4, 3, -3, -4, -6, 1, 10, 1, -2, 2, 4, 2, -3, -4, -8, -5, -11, 0, -3, -9, -6, -3, -9, -15, -13, -8, -5, -6, + -7, 2, 0, -8, 3, 5, 8, -1, 5, -1, -3, -5, -8, -21, -24, -27, -28, -26, -46, -61, 127, -26, 23, 21, 23, 39, -1, 4, 17, -8, + 11, -18, -5, -10, -11, -21, -12, 1, -1, 3, -6, -9, 2, -7, -11, -1, 7, 2, 14, -3, -11, -14, -1, 11, 3, 3, -9, -3, -2, -7, + -8, -9, -7, 1, 2, 1, 2, 5, 3, -4, -5, -3, -3, 5, 3, -1, -1, 8, -10, -3, -8, -7, -8, -7, -13, -16, -11, 4, -2, -3, + -5, 1, -1, -12, 3, 5, 1, -9, -4, -11, -17, -10, -7, -4, -8, -13, -15, -18, -13, -15, -9, -4, -3, 0, 0, -2, -8, -13, -8, -12, + -9, -6, -9, -7, -5, -7, -11, -11, -12, -3, -5, -5, 2, 1, -5, 1, 2, 4, -11, -1, 1, -7, -13, -9, -18, -16, -13, -14, -13, -11, + -16, -15, -20, -18, -14, -9, 8, 1, 4, 12, 9, 6, -1, 1, -2, -7, 8, 8, 11, 5, 10, 12, 8, 0, 1, 11, 10, 13, 15, 18, + 13, 10, 14, 11, 17, 8, 11, 9, 19, 16, 12, 16, 17, 19, 16, 14, 1, -2, -1, -8, -1, -10, -2, -20, -30, 3, 5, 1, 5, -2, + -2, -5, -6, -7, -7, -4, 0, 1, -2, -2, 4, 2, 3, 3, 2, 5, 1, 3, 7, 6, 6, 4, 4, 6, 7, 4, 6, 0, -2, -3, + -1, -4, -4, -2, -2, -6, -6, -5, -3, 4, 4, 10, 10, 3, 4, 9, 5, 5, -1, 1, 6, 4, -2, -2, 2, -5, -10, -5, -5, 3, + -1, 10, 9, 6, 15, 9, 13, 7, 9, 12, 10, 9, 11, 8, 11, 12, 12, 15, 19, 12, 8, 11, 9, 9, 11, 7, 8, 14, 16, 17, + 14, 8, 6, 8, 0, -1, -2, -15, -17, -16, -23, -18, -20, -18, -16, -17, -25, -22, -33, -39, -42, -42, -48, -52, -60, 103, -52, 64, -13, 14, + 59, -10, 10, 13, -18, 10, -13, 20, 13, -12, -22, -6, 7, 13, 1, -8, -20, 0, 12, -6, 2, 1, 10, 3, -4, -10, -6, -6, -9, -2, + -3, -2, 5, 1, -12, -4, -5, -4, 6, 10, 7, -1, 6, 1, -11, -3, 10, -1, 12, 13, 0, -3, 1, 1, -8, -9, -6, -7, -10, -8, + -14, 1, 24, 1, 13, 5, 6, 0, 10, -3, -12, 0, 2, -8, 2, 13, 0, -4, -10, -15, -19, -20, -20, 4, -3, 5, -1, -9, 11, -9, + 4, 5, -12, 10, 21, 21, -4, 0, -6, 0, -16, 0, 8, 25, -13, -16, -15, 4, -16, -19, 11, 18, 3, 13, 14, -7, -9, 6, -2, -6, + 9, 8, 1, 9, -3, -1, 6, -5, 14, -3, -5, 2, -16, -4, -4, -27, -1, -17, 14, 10, 20, -4, 12, 5, 20, 10, 17, 14, 30, 12, + 3, 0, 21, 9, 4, 9, -3, -20, 2, 5, 2, -1, -5, -6, -20, -7, 3, 2, 4, 20, 17, -9, -2, 12, 0, -12, 10, -1, -11, 1, + 14, 9, 15, 19, 24, 9, -13, -11, 0, 7, 7, 7, 3, -4, 6, 5, 1, 1, -4, -19, -18, -9, -3, -2, -3, -7, 9, 5, 2, -5, + -2, 11, -8, -2, 1, 10, 7, -1, 4, -1, -6, -3, 11, 7, -4, -2, -11, -14, -18, -19, 6, 7, -1, -4, -14, -13, 5, 5, -2, -1, + -4, -10, 3, 1, -5, 3, 12, 2, 4, 7, 13, 11, 5, 16, 3, 2, -6, 2, -2, 6, 4, 5, 1, 2, 17, 11, 1, 1, 1, -3, + -14, 3, -14, -30, -27, 10, 9, 13, 4, 5, -2, 11, -2, -5, -9, -3, 8, 8, 6, 5, 3, -3, -3, 19, 21, 18, 19, 28, 19, -8, + 31, -2, -1, 13, 11, -12, -26, 6, 35, -6, 14, -19, -30, 27, 3, -19, -34, -15, -4, 3, 7, 9, 9, -31, 11, -21, -19, -11, 19, -4, + -15, -14, -20, -19, -16, 18, 6, 4, -23, -22, -11, 6, -11, -5, -9, -14, -15, -23, 5, -1, 10, -8, 0, 13, 10, -3, 18, 2, 10, 0, + 5, -18, 7, -9, 105, 17, 12, -9, -8, -4, 10, 0, 2, 4, -1, -8, -12, 13, 3, -8, -11, 3, -3, -18, 5, 3, -8, -2, 3, 8, + 17, 13, 25, 32, 24, 22, -3, 7, 12, 24, 11, 12, -2, -4, 4, -4, -14, 19, 11, 16, 6, 18, 4, -16, -11, -4, 10, 9, -3, 8, + 0, 1, 5, 1, 11, -12, -2, 15, 13, 2, 12, 4, 6, -5, -8, 9, 12, 4, 13, -2, 13, -11, -4, -11, -7, -1, -2, 5, -6, -2, + -4, -20, -1, -1, -13, -27, 14, 3, -5, -2, 14, 22, 19, 21, 8, 9, -2, -9, -5, -19, -2, -4, -12, 13, -7, 16, 7, -10, -5, 1, + -1, 8, 26, 40, 14, -2, -5, 0, -4, -7, -2, -6, -15, -11, -18, -7, -6, -8, 2, -9, -3, -5, 10, 1, 0, -1, 12, 8, 1, 8, + 4, 23, 25, 9, 2, 20, 15, 7, -11, -4, 3, -2, -4, -16, -18, -21, -8, 9, 16, 11, 3, -1, -13, -17, -19, 0, 9, 12, -3, 0, + -1, 5, 4, 0, 0, -5, 5, 1, -6, -10, -8, -12, 0, 7, 12, 2, -6, -17, -15, -12, -8, -10, 2, 19, 2, 11, 0, 5, 8, 13, + -2, -2, 0, -5, -14, -6, 20, 0, -10, -10, -1, 6, 4, 14, 2, 8, 9, 4, -2, -18, -19, -15, 3, 3, -19, -1, -1, 7, 21, 23, + 9, 6, 15, 3, 1, 27, -7, 5, 4, -7, 14, -10, 0, -1, -25, -5, -7, -25, -9, 31, 4, -14, -15, -33, 0, -3, 30, 3, -29, 3, + -13, -24, -23, 4, 14, -9, -7, -5, 2, 6, 9, -2, -11, -8, 4, -5, 28, 3, 7, 13, -15, -6, -1, 1, -4, 9, -3, 3, 5, -3, + 14, 27, 16, 4, -7, -13, -35, -16, 12, 80, 20, 23, 14, 3, 12, 23, -1, -5, 6, 20, 15, 16, 6, 18, -5, 4, 14, 17, -8, -11, + -6, 4, 6, -1, -14, -20, 2, -3, -10, -10, 2, 17, 3, -11, 4, 21, 19, -17, -17, -10, -5, -22, 6, 16, 34, 5, -7, -11, -19, -11, + 1, 22, -5, -2, -11, 1, 4, 11, 8, -11, -16, 2, 17, 25, 10, -14, -2, 4, 14, 11, -26, -21, -17, -10, -11, -24, -8, 8, -19, -1, + 3, 5, -4, -9, -3, 29, 2, 7, -7, 1, 8, 16, -16, 7, 1, 11, 12, 28, 36, 12, 14, 10, 6, -13, 11, 25, 20, 13, 13, -5, + -7, 20, 20, -18, -6, -7, -16, 11, -3, -18, 10, 9, 2, 1, 6, -1, -10, -10, -8, 6, 6, 11, 17, 10, 7, 5, 4, 6, 6, -1, + -12, 1, 5, -5, -17, -9, -6, -13, -11, -12, -6, 16, 11, 1, -9, -8, 2, -2, -10, -18, -20, -13, 16, 20, 30, 18, 3, -2, -9, -16, + -11, -6, 0, 2, 15, 19, 20, 18, -3, -7, 0, 17, 13, 17, -2, -6, -6, -15, -7, -10, -11, 1, 10, -6, -10, -10, -4, 6, 7, -5, + 2, -12, 2, 6, 3, 5, 3, -3, 9, 2, 29, 15, -6, -5, -19, -12, -6, -5, -10, -20, -1, -2, 2, -2, -4, -2, 8, -6, 7, -4, + -4, 6, 13, 7, -14, -26, -12, 5, 19, 7, 56, -12, 8, 28, 30, -2, -18, -16, -7, -23, -13, 15, -9, 13, 36, 22, -4, 8, -13, 11, + 13, 23, -16, -8, 7, 23, -10, -6, 9, -18, 13, 19, 2, -4, 16, -9, -18, -18, 1, 2, -3, 12, 1, -10, -17, -12, 3, 15, -9, -9, + -2, -20, -5, -15, 11, -18, 13, -9, 1, -18, 5, -2, 15, 26, 72, -9, 9, -14, -9, -4, 11, -15, -24, -22, -8, -1, -4, -4, 1, -2, + -11, 10, 5, -16, -16, -2, -22, -10, 7, 13, 12, 2, 9, 3, 3, 27, 9, 24, 1, 21, 17, -8, -19, -8, -7, -1, 1, 19, 16, 0, + -10, 2, 0, -20, -21, -14, -6, -24, -38, -27, -14, 6, -1, -15, -14, -15, 9, 30, 2, -22, -9, -15, -22, 8, 9, 8, -10, 2, 4, -15, + 9, 19, 18, 4, 20, 44, 18, 6, -5, 5, -13, 21, 9, 18, -8, 11, -4, 3, -9, 5, 9, 22, -2, 6, -4, 15, 7, 1, -8, 8, + 9, -10, -2, -20, 2, 2, 16, 23, 24, 21, 17, 19, 3, 5, 11, 6, 15, 22, 28, 12, -1, -11, -4, 3, -4, -5, -7, 3, 6, 17, + 20, 11, 5, 2, 3, 4, -6, -3, -8, 0, 5, 3, 10, 4, 4, 1, 0, 0, -5, 2, 8, 4, 10, -2, -6, 1, 9, 10, 7, 11, + 13, 8, 17, -8, -8, 3, 9, 5, -9, -8, 5, 23, 7, -10, -8, -3, 1, -6, 0, 0, 16, 21, 15, 10, -2, -13, -10, 9, 15, 14, + 9, 12, 4, 5, 1, 11, -1, -7, 10, 6, -2, 0, -13, -10, -1, -4, 4, -8, -9, -5, -1, 25, 11, -3, -24, -7, 1, -6, 11, 1, + -2, 5, -1, -1, -7, 8, -4, -3, 6, -7, 4, 3, -1, 22, 12, 55, -58, -9, -14, -38, -21, 1, -30, -47, -42, 6, -17, -29, 29, 25, + 10, -10, -1, -2, -12, 3, 15, -40, -10, 2, 1, -5, -7, -8, 5, 16, 0, -12, -24, -18, -16, -6, -23, -22, -10, 5, -18, -13, -4, -5, + -6, 11, -2, -8, -5, -10, -11, 3, 8, -5, -2, 6, 6, 10, 8, 13, -6, 20, 24, 24, 17, 5, 7, 0, 12, 27, 6, 9, -11, -3, + 17, 7, -13, -1, 18, -10, 0, 1, -19, -27, -16, -24, -6, -12, 0, 1, 4, -24, -31, -14, -14, -4, -12, -16, 14, 13, 20, 5, 3, -3, + -16, -30, -13, -3, -16, -10, 0, -22, -39, -34, -11, -16, -16, -9, -36, -14, 14, -21, -34, -17, -38, -22, -5, -7, -36, -43, -40, -29, -32, -32, + -32, -13, -34, -34, -17, -14, -15, -24, -39, -5, -26, -6, -10, -33, -14, -4, -14, -3, 5, -18, 2, 19, 22, -20, -16, -4, -5, -18, -30, -45, + -34, -18, -44, -50, -17, -34, 2, -18, -4, -23, -18, -6, 1, 7, 6, -7, -9, -29, 0, 4, 21, 11, 14, 3, 5, -7, -13, -15, -19, -22, + -15, -15, 0, 0, 5, 5, 5, 4, -9, -6, -7, -13, -13, 4, 5, 12, 9, 19, 16, 20, 1, -21, -17, -10, -6, 7, -5, -13, -16, -31, + -39, -30, -20, -10, -13, -17, -20, -21, -22, -16, -8, -7, -24, -38, -28, -25, -10, -13, -24, -28, -28, -14, -3, -6, -21, -36, -32, -37, -27, -22, + -36, -31, -19, -52, -44, -49, -41, -40, -33, -29, -11, -33, -30, -41, -33, -35, -47, -32, -21, -46, -49, -32, -25, -22, -5, -10, -13, -27, 0, 4, + -1, -1, 5, 10, 17, 24, 7, 13, 22, 38, 16, 32, 47, 34, 28, 38, 67, 67, 62, 64, 82, -72, -30, -10, -45, 11, 21, -40, -32, -4, + -20, -46, -13, -15, 20, 7, -10, -11, -21, -20, 14, 14, -13, -27, 8, 24, -3, 14, 28, 7, -6, 9, 0, -14, -17, -10, -12, -12, -26, 9, + -4, -11, 4, 2, 8, -2, 13, -1, -12, 17, 24, -20, -5, 1, -8, 16, 1, 10, 13, 15, 29, 8, 8, 3, -37, -14, -23, -15, -39, -13, + 2, 1, -9, -20, -1, -10, -8, 2, -7, -8, -1, 5, 10, 12, 25, 3, -13, -35, -12, -7, -25, -13, -19, -18, -12, -19, -22, -37, -20, -43, + -22, -25, -26, -37, -42, -35, -52, -39, -48, -49, -43, -20, -31, -42, -34, -20, -6, -13, -5, -13, -21, -43, -34, -45, -36, -32, -26, 0, -20, -19, + -21, -27, -59, -56, -41, -40, -32, -38, -39, -30, -44, -35, -32, -7, -21, -28, 21, 8, -7, -16, -5, -15, 8, -15, -2, 2, 33, 26, -4, -7, + 13, -1, -32, -22, -51, -38, 1, -37, -35, -14, -31, -33, -30, -59, -45, -17, -37, -41, -63, -50, -68, -72, -92, -71, -76, 19, 7, -2, 6, -2, + -11, 0, -11, -16, -5, -16, -14, 1, -10, 3, -10, -10, -30, -26, -15, -21, -30, -25, -22, -16, -17, -16, -25, -30, -36, -37, -32, -24, -15, -8, + -12, -12, -30, -36, -32, -36, -31, -35, -47, -56, -57, -52, -67, -59, -39, -24, -13, -5, -16, -10, -26, -50, -64, -59, -48, -36, -18, -28, -30, -35, + -36, -59, -71, -58, -58, -54, -66, -60, -46, -29, -33, -48, -36, -23, -27, -25, -9, -4, -3, 3, -12, -15, -8, 0, -6, -36, -8, 3, -21, -13, + 2, -24, -54, -47, -43, -39, -18, -18, -34, -6, -13, -5, 30, 52, 43, 37, 31, 19, 19, 3, 3, -1, -5, 25, 55, 80, -127, -64, -100, -124, + -5, 0, -62, -45, 25, 2, -46, 0, 41, -50, 9, 28, -43, -8, -4, 0, 6, -10, -16, 6, 14, 4, 24, 3, -5, 6, -14, -9, -7, 18, + 10, 5, -6, 8, 4, 12, 13, 10, 27, 14, 12, 5, -14, -12, -11, -8, -28, -25, -13, -3, 2, 22, 15, 11, 32, 22, 8, 25, 14, -79, + -3, 2, 3, 5, -2, 2, 7, 7, 10, 6, 5, 2, 4, 6, 3, 4, 6, 0, 6, -1, -4, 0, -5, -5, 1, 3, 0, -2, -7, -4, + -1, -3, -4, -11, -8, -5, 1, -2, -9, -10, 0, 2, -1, -1, -1, 1, -2, -1, 1, 3, -3, -1, -2, 0, 3, 4, 4, -1, -4, -4, + -3, -3, -7, 4, 4, -1, -4, -3, -2, -2, 7, 1, 0, 2, -7, -5, -8, 4, -2, -3, -1, -2, -2, 2, 8, 6, 9, 1, 4, 3, + 8, 9, 3, 3, 8, -7, 5, -3, -8, -3, -8, 7, 2, 0, 0, -5, -6, -4, 4, 4, 1, 3, 4, 3, -1, -5, -4, -9, -3, -6, + -6, -4, -6, -1, 0, 1, 3, 0, 3, 0, -1, -2, -4, -1, -3, 0, -4, 1, 0, -1, -3, -3, 1, 3, 3, 3, -2, -7, -1, -6, + -2, -1, 3, -1, 0, -1, 1, -1, -1, -7, -3, -1, 6, 2, 6, 6, 3, -2, 7, 5, -2, -4, -4, -1, -1, 8, 5, -1, 2, 0, + -1, 0, 2, 4, 0, 0, -1, -1, 0, -4, 2, 1, 5, 4, 2, -5, 5, 9, 2, 0, 3, 6, 0, 4, 5, 1, -2, -7, -4, -6, + -7, -6, -8, 5, 3, 7, 3, 4, 0, 4, 3, 6, -1, -1, -2, 0, -1, -5, 3, 1, -1, -6, -2, -5, -4, -2, 3, -1, -2, 1, + 17, -6, -9, 13, 26, 4, -9, -2, 24, 10, 3, 3, 3, 11, 18, 5, 2, -2, 6, 7, 1, 3, 8, 0, 3, -3, 3, 6, 11, -4, + -5, 3, 8, -3, 3, 0, -3, 2, 2, -2, -3, 1, 6, -1, -3, 3, -4, -4, -7, 3, 2, 9, 4, 0, -7, 1, 8, 2, 8, 3, + 4, -3, -1, 4, 3, -1, -7, -3, -2, -1, 0, 2, 5, 2, 3, 0, -3, -2, 5, 1, -8, -5, -4, -8, 1, 3, 0, -5, -5, -5, + 4, 1, -4, -2, 4, 4, 9, 0, -1, -1, -6, -1, -4, -6, -5, -2, -2, -2, -4, -8, 1, 4, -3, 0, 4, -7, -9, -7, -8, -9, + 2, 7, -1, 1, 4, 2, -1, 5, 0, -8, 6, 13, 0, 5, -3, 0, 11, 3, -6, 1, -5, 9, 10, 9, 6, 5, 13, 2, -4, -1, + 5, -6, -4, -2, -7, 0, 9, 7, 3, 0, -2, 4, 0, -4, -5, 0, 9, 13, 12, 6, 7, -6, -8, -10, -13, -10, 5, 4, 8, 5, + 5, -2, -5, 2, 1, 0, 1, 1, 3, 5, -1, -1, -2, 4, 6, 1, 5, -2, 1, -2, -6, -6, -9, -6, -6, -1, -6, -8, -4, -3, + -1, -4, -2, 2, 3, 7, 0, 5, 1, 2, 2, 2, 4, -2, -5, -4, 1, 4, 1, 0, 2, 1, -1, 1, -1, -7, -7, -4, -2, -2, + -3, 2, -4, -1, 5, 2, 5, 0, 3, 2, 3, 5, 0, -5, -4, 1, 0, -3, 0, 3, -5, 3, 8, 13, 4, 2, 4, 2, -7, 1, + -5, -5, -7, -11, -15, -9, 8, 5, 9, 5, 0, 0, -3, -4, -9, 2, -3, -4, 1, 8, 6, 1, 0, 0, -9, -6, 1, 2, -2, -3, + 4, 2, 8, 2, -3, 9, -2, -19, -1, 16, 4, -9, -12, 14, 0, 4, -7, -9, 4, 3, 1, -8, -11, -13, -10, 0, 2, 4, 0, 4, + 1, 7, 4, -1, -6, -5, -1, -12, -5, 2, 5, -3, 6, 3, 3, -1, -2, -3, -2, 2, -7, 1, 6, 2, 2, -3, 1, 6, -1, 0, + -3, 0, 6, 7, 8, 3, -2, -3, 5, 5, 0, -7, -3, -7, 0, -2, -3, 4, 0, 1, 1, 6, 4, 8, 0, 5, 7, 7, -5, 4, + 0, 0, -2, -2, 1, 5, 0, 0, 4, -2, -2, -3, -1, -3, -1, -7, -4, 6, -1, 8, 7, 0, 5, -1, -4, -2, 1, -4, -6, -3, + -3, -3, 0, 0, 1, 2, 7, 0, 4, 3, 2, 6, 1, -6, -1, 6, 0, 4, 0, 1, 7, 3, -2, 3, 1, 6, 5, -6, -1, -3, + 3, -1, 2, -5, -4, 2, -15, -5, 0, 2, -7, -5, -9, -5, -6, -2, -2, 1, 6, 4, 2, 8, -5, -1, -3, 5, 6, 0, -2, 3, + -3, 8, 7, -1, 5, 2, 6, -3, 4, 4, -2, 0, 1, 0, 2, 3, 2, -2, -1, -5, -2, -5, -2, -1, -4, -5, -5, -2, 0, -1, + 3, 1, 3, 0, -1, 3, -2, -6, -4, 4, 0, 2, 3, -3, 1, 1, 3, 9, 6, 4, 1, 2, 7, -1, -2, 1, -2, -4, 2, 1, + -4, -5, -2, -2, -1, 1, 3, -4, -3, -6, -6, -4, -2, 3, 3, 5, 3, 3, 2, 0, -2, 1, -1, 2, 1, -1, 0, -1, 5, 2, + 3, 1, 0, 4, 5, -5, -1, 4, 3, -3, 3, -1, 0, 0, -6, 6, 7, -1, 0, -3, -1, -4, -4, -7, -5, -6, 5, 5, 3, 2, + 2, 3, 3, 2, -2, -1, -5, -2, -5, -8, 10, 5, -9, -2, 16, 12, -11, -16, 8, 4, -2, -5, -4, 0, -3, 3, -3, -4, -5, 2, + -1, -4, 5, 8, 3, 2, -9, 1, -1, -11, -4, -8, -15, -4, -9, -4, -10, -3, 4, 8, -10, -6, 7, 6, 3, -1, 4, 1, -5, 3, + 2, -3, 2, 3, -3, -6, 6, 2, 7, 5, 5, 1, -1, 0, 8, -2, -7, -7, 5, 4, 1, 3, -2, -1, -10, -15, -6, -5, 2, -3, + -5, -2, -2, -5, -2, -4, -9, -7, 2, -2, -7, -6, -8, -8, -5, 4, 7, 0, 0, -2, 1, 3, 1, -2, 1, 7, 2, 3, -3, 1, + 6, 3, 2, 13, 4, 1, 6, 5, 2, 1, -4, 0, 3, 5, -1, -1, 9, 8, 3, 0, 5, 3, -8, 15, 13, -8, -3, -1, 2, 3, + 6, 7, -5, 1, 3, 2, 5, 3, -4, -9, 0, -4, 3, 8, 0, -5, 5, 2, 3, 10, -2, -2, -12, -1, -2, -6, -4, 4, 1, -3, + -5, -2, 1, 4, 5, 2, 4, -4, 0, 0, 5, 3, -1, -2, 0, -11, -11, -5, -1, -2, -5, -1, -2, -1, 3, 3, 3, 0, 2, 2, + -1, 1, 1, 1, 2, 4, 1, -4, -3, -6, -4, -6, -9, -3, 2, -2, 0, 3, 5, -1, -2, 3, 4, 2, 3, 4, 3, 4, -6, -5, + -2, 2, 1, 1, 0, 4, 2, -1, 4, -1, 0, 4, 0, -1, 0, -4, 3, 3, -4, 0, 4, 1, -6, -5, 0, -2, -4, -5, 2, -2, + -1, -1, -2, -1, 1, 4, 6, -2, 1, 3, -2, -3, 0, 0, -4, -5, -6, -6, -1, 4, 4, 5, 0, -2, 1, -3, 2, 0, -4, -1, + 2, -3, -1, 2, 3, -2, -1, 1, 4, 4, 1, -3, -3, 4, 3, 17, -5, -8, -18, 6, 33, -35, -33, 11, 8, -11, 2, -3, 6, 3, + -4, -6, -2, -10, -4, -2, -3, 3, 5, 4, 0, -3, 5, -2, 3, 3, 1, 5, -7, -8, -2, -5, 1, 1, 1, -6, 1, -4, -3, -6, + -2, 4, 5, 1, 5, 10, 5, 3, 1, 3, -4, 2, -1, 5, 1, 6, 4, 0, 7, 4, 9, 8, 1, -1, -1, 1, 1, 0, -1, -5, + -12, -18, -21, -5, 0, -3, 6, -6, -8, -9, -3, -6, -2, -4, -2, -6, -9, -4, -10, -9, -13, -18, -21, -13, -6, -11, -11, -6, 2, -3, + -7, -4, 6, -2, -6, -2, 1, -2, 0, -1, -4, -8, -12, -9, -8, -18, -5, -8, -6, 4, -1, 4, 15, 7, 4, 16, 13, 8, 11, 11, + 7, 11, 15, 7, 9, 2, 10, 13, 9, 9, 9, 15, 8, 9, 5, 19, 14, 14, 7, 4, 0, -4, -3, -2, 0, -1, 8, 3, 6, 5, + -5, 1, -3, -4, -4, -2, 4, 4, -5, -3, 2, -4, -1, 5, 0, -7, -8, -1, 1, -1, -4, -1, -3, -3, 0, 2, 3, 3, 5, 4, + -1, -3, -4, -4, -3, -1, 1, -5, -4, 0, 0, -4, 0, -4, -10, -8, -8, -6, -3, 1, 0, 2, 3, 4, -3, -3, 6, 9, 9, 6, + -3, -2, 2, -3, 1, 5, 9, 7, 1, -1, 2, -4, -4, 1, 1, -1, -6, 2, 5, 5, 1, 11, 13, 7, 8, 11, 1, 4, 3, 4, + 7, 3, 5, -4, 2, -1, -3, -2, 4, 5, 3, 2, 0, 2, 7, 6, 6, 9, 3, 0, 4, 3, 2, 2, 0, -2, 2, -4, -2, -2, + 3, 1, 5, 2, -3, -7, 1, -3, -6, -1, -5, -5, -5, -1, 0, -2, -1, 8, 12, 10, 37, -26, -6, -5, 7, 64, -34, -40, 33, 14, + -13, 1, -19, 0, 10, 0, 6, 1, -9, 5, -6, -1, -5, 5, 11, 4, -7, 2, 6, 3, 7, 3, -4, -2, -7, -7, -8, -2, -1, 2, + 9, 3, 0, 10, -2, -8, 1, 6, 3, 1, 3, 0, 4, -6, -2, -3, -1, -10, -1, -2, 0, 2, 0, 1, -3, -2, 2, 7, 0, 5, + 3, -2, -3, -9, -2, -5, -1, 0, 9, 4, -2, 2, 4, -1, 0, -3, -3, -2, 1, 8, 1, 9, 9, 3, -6, -10, -3, -4, 8, 6, + 0, 0, 9, 12, 10, -5, -3, 4, 0, 4, 7, 6, 4, -3, -10, -15, -16, -15, -23, -20, -12, -12, -12, -5, 0, -11, -5, -9, -9, -5, + 2, 8, 10, 8, 12, 6, 0, 5, 9, 7, -1, 11, 5, 5, 11, 2, 17, 6, 10, 11, 21, 13, 18, 7, 10, -3, 5, -6, 0, 0, + 3, 10, 10, 12, 7, -6, -11, -12, -20, -18, -21, -22, -10, -11, 0, 12, 10, -6, 3, 9, -1, -7, 5, 9, 8, -6, -9, -5, -2, -2, + -1, -1, 2, 3, 4, 2, -1, -2, -3, -7, -6, -4, -9, -8, -11, -4, -7, -3, -1, -5, -7, -4, -7, -10, -14, -10, -8, -7, -1, 0, + -2, 7, 11, 7, 4, -5, 0, 7, 6, 7, 5, 4, -8, -12, -11, -13, -17, -21, -25, -28, -24, -11, -4, 5, 6, -1, 12, 4, 4, 9, + 7, 8, 7, 8, 0, -5, -11, -11, -5, 0, -8, -3, -6, -7, 0, -2, -3, -12, -10, -13, -10, -8, -10, -14, -8, -22, -9, -7, -2, 5, + 2, -3, -17, -19, -30, -42, -30, -15, 3, 17, 18, 24, 15, 8, 6, 4, -3, -1, 0, 5, 1, 8, 12, 17, 15, 67, -61, -7, -37, 0, + 127, -33, -80, 70, 8, -30, 27, -46, 8, 29, -20, 14, 1, -21, 23, 13, -15, -4, 0, 3, 4, -13, 0, 15, 4, 2, -4, 3, -4, -7, + -8, -10, -3, -2, -4, -4, 1, 2, -2, 2, -1, -3, -8, -7, 1, -5, -3, -3, -9, -13, -17, -2, -3, 2, 0, -2, -3, 1, 6, -29, + 14, 6, 7, 1, 3, 5, -1, -1, 7, 4, -4, -3, 1, -1, 4, -4, -8, -6, -9, 1, -2, 5, 0, 5, 2, 6, -1, 0, 0, 3, + 6, -6, -4, 0, 11, 9, 6, -6, -5, -2, -1, -8, -3, -4, -8, 4, 5, 4, 0, 2, 9, -4, -2, 11, 11, 4, 10, 13, 0, 0, + 2, -10, -8, 3, -3, 2, 1, -3, 4, 7, 9, 3, -2, 5, 4, 10, 5, -2, -6, -2, -4, -8, -3, -1, 2, 4, 0, -9, 6, -5, + 3, 11, -6, -3, -5, 7, 0, 3, 3, 8, 9, 5, 1, 4, 4, -4, -7, -10, -9, -9, -6, 3, -5, 0, -8, 4, 1, -7, 9, 1, + 5, 4, -3, -7, -4, -3, 1, 6, 4, 7, 5, 11, 4, 5, -1, 1, 1, 1, -4, 1, -1, 7, 2, 0, -1, -3, 1, -5, -8, -2, + -5, 0, 6, 8, 11, 6, 4, 5, -4, -1, -4, 4, 2, 1, 7, 1, 2, -10, 1, -3, 3, 1, 3, 6, 3, 4, -6, -1, 1, 0, + 3, -3, -4, -3, -4, 11, 2, 8, 4, -4, 0, -12, -13, -15, -6, 4, 4, -5, -10, -9, -8, -5, 1, -3, 0, 3, 5, 10, 11, 2, + 4, 9, 2, 2, 4, 1, 0, 1, -7, -2, -1, 2, -9, -8, -2, 0, 5, -2, 9, 11, 10, -3, 11, 9, -2, -1, 11, 9, -3, -17, + 7, 2, 18, 6, -11, 10, 4, 1, -2, 2, -2, -5, -5, -7, 4, 4, 6, 0, -4, 1, 5, -3, -1, 6, -4, -9, -4, -14, 4, -3, + 4, 2, -3, 1, 3, -2, -6, 1, 5, 3, -5, -10, 0, -5, -3, -8, -3, -6, -3, -3, -10, 1, 5, 0, 3, -2, -2, 1, -17, 2, + -11, -1, 7, -7, -9, -1, -4, 1, -11, -4, 3, 7, 2, 1, 0, 2, 4, -5, -8, -4, 1, -1, -9, -9, 4, 3, 2, -7, 2, 7, + 1, 2, 4, 3, 5, -1, 2, -5, -5, -4, -7, -2, -1, 5, 3, 0, -5, -9, -3, 2, 5, 4, 7, -4, -7, -5, 5, 7, 5, 11, + 8, 13, 3, 1, 3, 1, 13, 0, -10, -3, 7, -3, -15, -8, 2, 6, -1, 1, -1, -1, 1, -1, 2, -3, 8, -5, -5, -12, -5, -8, + -6, -5, 2, 9, 9, -4, 7, 0, 0, -13, 6, -11, -3, -15, 8, 8, 11, 2, -1, 1, -1, 17, 3, 1, 1, 10, -7, -2, 5, -8, + -2, 4, 6, 6, 6, -10, -5, -7, -4, -3, -9, -4, -7, -6, 4, 1, 4, 5, -3, -11, -6, -11, -5, 1, -4, 5, 5, 9, 3, 5, + 0, -5, 1, -3, 2, 2, 3, -1, 4, -2, -2, 2, 1, 14, 10, 11, 6, 3, -2, -3, 1, -1, -5, -2, -10, -9, 2, 4, -4, -3, + -2, -15, -13, -11, -11, -3, -10, -6, 3, 5, 5, 5, 1, -8, -7, 1, 3, -6, 5, -4, 3, 7, 7, 7, 0, -3, 7, 0, 3, 2, + -4, -2, -4, 5, -4, -3, -5, 1, 3, -1, 1, -2, 3, -2, -1, 5, 13, 2, -3, -10, 5, 10, -3, 0, 6, 5, -2, 0, -2, -6, + -7, -8, -5, -12, -16, 13, 14, 16, -5, 6, 10, -4, 1, -21, -13, -5, -17, -11, 10, 2, -7, 1, -8, -8, 4, 4, 15, 3, -7, -6, + -8, -3, 3, -5, -2, 2, 9, 6, -7, 4, 6, 3, 3, -7, 2, -10, -10, 2, -2, 6, 1, -8, 0, 2, 1, 3, 6, -1, 1, -1, + -6, 0, -2, -8, 1, -3, -3, -2, 4, -26, -4, -6, -6, -7, -4, 5, -5, -4, 1, -4, 1, 11, -2, 1, -8, -10, -9, 0, 0, -4, + -6, 2, 3, 6, 6, -7, -10, 4, 1, -7, -3, -4, -8, -7, 8, -6, -12, -1, 3, 10, -5, 2, -6, -3, -4, 0, 4, 2, 0, 3, + 6, 2, 8, 5, -5, 2, 6, -5, 2, 1, -4, -3, 4, -5, 10, 3, -1, 10, -5, 3, -6, -9, 4, -5, -7, -5, -11, -4, -11, 6, + 7, 12, 2, 8, 3, 5, 6, 0, -1, -4, -6, -9, 5, -1, 10, 4, -1, -5, -9, 4, 13, -1, 7, 1, 7, -7, 16, 2, -14, 11, + -5, -2, 2, 3, 7, -1, -1, -3, -6, 0, -3, -9, -5, -3, -2, -5, 4, 5, 4, 10, 8, 1, -2, -5, -2, 4, 2, 11, 9, -1, + -3, -3, 1, 0, 5, 4, -3, -12, 0, -3, -10, -6, -4, -1, 1, -6, -4, 1, -2, -1, -3, -7, -8, -5, 0, 3, -2, -12, -1, -3, + -8, 0, 1, -10, -12, -8, -4, 2, 2, 2, -4, 5, 2, 5, 5, -1, -4, 1, -10, 0, 5, 4, 2, 3, 0, -2, -4, -2, 8, 2, + 4, 6, 2, 10, 5, -3, -1, -1, 7, 5, 6, -1, 5, -3, -10, -3, -9, -8, -8, 0, 8, 0, -11, 2, -4, -2, 5, -4, -7, 1, + -7, 2, -4, -4, 5, 11, 4, 3, 8, -8, -2, 16, 7, -6, -3, -9, -22, -8, -9, -14, -22, -21, -1, -1, -3, 8, 14, 13, 9, 5, + 5, 12, 17, 5, -6, -5, -6, -11, -9, -6, -2, -4, 6, -3, 2, 8, 4, 1, -12, -4, -6, -7, -11, -4, -13, -13, -4, 7, 7, 0, + 0, 0, 7, 4, 3, 14, -3, 8, 1, 13, 4, 9, 0, 8, -28, 2, -3, -5, 10, -2, 4, 4, -5, -12, -11, -5, -11, -23, 7, 6, + 5, 14, 15, -6, 3, 4, 9, 11, 1, 16, 1, 3, 13, -3, -3, -11, -12, -3, 10, 5, 8, 4, 5, -5, 7, 13, 1, -3, -9, -9, + 11, 0, -4, 4, 11, 5, -11, 3, 1, 2, 2, 2, -8, 0, 2, -7, -2, 6, -16, -4, -2, -6, -10, -14, 7, -14, -20, -4, -12, -7, + -10, -14, -11, 4, 5, -3, 1, 6, -2, -15, 6, -8, 8, 6, 9, 14, 11, 17, 10, 28, 6, 19, 12, 8, 18, 4, 0, -2, -4, -7, + -7, -3, -3, -3, 4, -3, -8, 4, -14, -6, -5, 3, -3, -10, 15, 2, 5, 0, 5, 8, 8, 8, 6, 3, 7, 5, 2, 5, 4, 8, + 3, 6, 0, 3, 5, 6, 7, -4, 1, -2, -7, -2, -7, -1, 3, -4, 2, 7, 7, 0, -5, 2, -1, -2, 0, 1, 1, -5, -2, -1, + 4, -3, -2, -3, -9, -2, -7, 2, 6, 2, 2, -2, -8, 0, 2, -9, -1, 1, -1, 7, 3, 16, 3, -1, -1, -3, 0, 8, 0, -1, + -6, -3, -4, 3, 4, 3, 11, -4, 4, -4, 3, -5, 1, -3, -9, 0, -5, 6, 2, 6, 6, 5, 3, -4, -3, 4, -1, 1, 7, 1, + -2, -2, -5, -1, -8, -15, -2, -3, -2, 5, 9, -1, -4, 0, 7, 13, 31, 5, 6, -3, -15, -5, -11, -12, -3, -12, 8, 5, -5, -4, + 12, 12, -4, 6, -1, 15, 19, 13, -5, 0, -9, -5, 0, 5, 4, -6, 3, 3, 2, 10, 2, 5, 13, 10, 3, -6, -9, -8, -2, 5, + 0, -1, -2, 10, 1, -3, 4, 6, 10, 3, 1, 9, 10, 9, 1, 8, 8, -6, -1, -6, 3, 4, -7, 0, -7, -10, 1, -2, 10, 2, + 9, -3, -12, 4, -4, -2, -2, -19, -20, -4, -1, -3, 1, -16, -15, 3, 12, 30, 16, 9, 1, -13, 7, 1, 4, 19, 3, 3, -6, -3, + -7, -6, -8, -6, -8, 5, 6, -1, 6, 2, 7, 8, 11, 9, 14, 17, 15, 6, 3, -2, -7, 2, 2, -15, -4, -6, -19, -13, -20, -21, + -10, -16, 1, -1, -6, 8, -2, -1, 5, 0, 18, 9, 5, -3, -6, -3, -8, 0, -14, -11, -10, -3, -11, -8, 3, 13, 16, 28, 21, 29, + 10, 6, -6, -15, 9, -1, -1, 16, 7, 7, -8, -10, -25, -20, -16, -20, -6, -10, -3, -9, 7, 9, 11, 6, 10, 7, 3, 10, 11, 14, + 7, -8, -11, -1, 10, 6, 1, -3, -3, -2, 3, -1, 3, -4, 2, 0, 1, 1, -2, -3, 3, 4, 2, 3, 3, 6, 7, 11, -3, -3, + 7, 4, -8, -6, 0, 2, 8, 2, -2, -5, -2, -1, 0, 8, 4, 3, 3, 9, 8, 7, -4, 4, 4, 5, 12, 12, 2, -4, 1, 4, + 8, -8, 0, 0, -10, 0, -7, 1, -8, -1, 9, 6, 10, 5, 4, 4, 6, -3, -1, -9, -1, -8, -5, 3, 3, -5, 9, 14, 11, 16, + 6, -2, -9, -3, -8, 2, 6, 11, 3, 2, 4, 3, 13, 12, 10, 8, 0, -3, 0, 8, -2, 22, 3, -24, -37, -43, -20, -8, 9, 16, + -15, -20, -10, -7, 1, 20, 10, 3, 6, 0, 8, 20, 6, -8, -11, -15, -9, -11, -8, -1, -14, 6, 7, 3, 11, 5, 1, 7, 12, 11, + 5, -8, 2, 7, 13, 7, 1, 2, 4, 4, -2, -2, 6, -11, 4, 5, 13, 9, 11, 2, 2, 12, 9, 1, 34, -15, 4, -3, 2, -18, + -25, -20, -17, -18, -5, 4, 3, -4, -8, -16, -25, -23, -9, 5, 7, 3, -3, 1, -16, -16, -12, -21, -5, 2, -4, 5, -11, -11, -2, 2, + -8, -10, -6, -19, -19, -29, -12, -7, -10, -3, -5, 1, 3, 8, -1, -10, -15, -20, -26, -10, -1, 0, -3, 3, -9, -23, -10, -6, -1, 11, + 0, 13, 13, 8, 11, 14, -1, 11, 27, 19, 19, 25, 18, 27, 26, 15, 13, 25, 20, 16, 3, 10, -1, -13, 1, 3, -6, -3, -10, -13, + -38, -44, -46, -50, -25, -21, -13, 4, -9, -6, -21, -13, -12, -17, 0, 1, -13, -2, 6, 19, 14, 6, 16, 15, 9, -6, -8, -7, -7, -2, + -1, -2, -3, -5, -4, -5, -7, -14, -3, 0, 6, -1, -8, -11, -4, -4, -1, -3, 2, 1, -7, -8, -12, -16, -10, -13, -6, -8, -6, -9, + -10, -5, 2, -11, -15, -12, -4, 5, 8, 3, -4, -3, -4, -20, -26, -36, -42, -39, -23, -7, 2, -8, 1, 7, 15, 3, 3, 7, 10, 6, + -2, -3, -5, -9, -18, -11, -13, -13, 6, -1, 4, 1, 5, 6, 15, 16, 13, 16, 11, 10, 11, 17, 21, 25, 33, 38, 14, -13, -46, -74, + -113, -122, -113, -99, -58, -30, -2, 10, 19, 15, 22, 25, 19, 2, 7, 13, 9, 13, 22, 41, 38, 34, 37, 29, 4, -5, -82, 127, -19, -48, + 7, 40, -51, 82, 67, -64, 31, -11, -27, 46, -7, -40, 25, 4, -38, 24, 20, -2, -8, 3, -2, 28, 15, -13, -2, 14, 15, 8, 4, -5, + 16, 8, -6, 15, 22, 11, 10, 19, 6, 3, 7, -5, -5, 5, -2, -2, -14, -14, -23, -14, -11, -15, -17, -6, -11, -8, -13, -16, -25, 92, + 17, 13, 3, -3, -9, -2, 6, 4, 2, 4, -7, 9, 7, 8, 5, 11, 11, 7, 8, 11, 5, 5, 8, 11, 12, 13, 8, 5, -4, 1, + 9, 4, 3, 1, -1, 6, 5, 5, 3, 8, 5, -5, -7, 4, 1, 5, 8, -4, -1, 5, -7, 3, 7, 5, 1, -11, -5, 0, 13, 6, + 5, 4, 0, 6, 4, 8, 6, 16, 6, 13, 25, 11, 14, 13, -1, 5, -1, 0, 6, -7, 0, 4, -6, 5, 1, 2, -9, -2, -14, -10, + -21, -13, -32, -18, -5, -1, -3, -6, -12, -9, -34, -25, -11, -6, -11, -8, 3, 5, -2, -2, 5, 12, 9, -1, 3, -2, 4, -3, -21, -7, + -12, -10, -7, -3, -5, -1, 0, -4, 7, 3, 0, 1, -3, -6, -6, -4, -5, -6, 1, -4, -6, -2, 3, -2, -19, -20, -16, -11, -3, -3, + 7, 11, 1, -4, -4, -3, -2, 7, 2, 0, -4, 3, -8, 7, 12, 3, 2, 10, 3, 0, -3, -5, 2, 6, 4, 1, -5, 12, 10, 16, + 3, -2, -1, 4, 1, 4, -4, 3, 4, 13, 20, 0, 2, -1, 0, -3, -3, -20, 2, -8, 1, 13, 2, 1, 5, 8, 0, -1, 3, 0, + 6, 13, 8, 5, 5, -2, 2, 2, -3, 7, -5, -10, -8, -1, -9, -2, 2, 13, 8, 0, 5, 6, -4, -13, -13, -12, -3, -10, -11, -24, + -34, 24, -21, -3, 39, 38, 28, 26, 32, 5, -4, 1, 13, 23, 18, 13, 4, 12, 4, -16, -6, 0, 12, 3, -1, 0, -5, -10, -4, -4, + -4, -15, -4, -1, -10, 4, 0, -15, -2, -8, -9, -8, 16, 5, 15, 12, 12, -3, 6, -5, -6, -8, -2, 0, 6, 3, -3, -6, 1, -17, + -12, 0, -15, -7, 57, 10, 4, 3, 0, -3, -3, 5, 8, 9, 6, 3, 10, -3, 2, -13, -2, -1, -1, 11, 5, 13, 12, 2, 1, -5, + 12, 10, 9, 10, 19, 14, 17, 8, 19, 13, 14, 13, 16, 10, 17, 23, 3, 8, 4, 5, -6, -16, -8, 3, 0, -1, 19, 10, 17, 23, + 21, 13, 10, 2, -9, -3, 7, -7, 0, 15, 12, 7, 8, -4, -8, 14, 27, 11, 8, 6, -6, -3, -19, -9, -8, -14, -16, -16, -13, -22, + -9, -24, -7, -27, -13, -23, -28, -24, -14, -13, -17, -20, -10, -3, -5, -17, -13, -6, 7, -8, -5, -8, -8, -7, -1, 7, 11, -1, 6, -3, + 4, 13, -3, -5, -18, -5, -2, -14, -16, -18, -4, -8, -6, -6, 1, -1, -1, -7, -6, -10, -1, 2, -2, -1, -5, -5, 2, -1, -4, -5, + -11, -9, -5, -10, -7, -6, -7, -7, 2, -3, 7, 9, 10, 16, 15, 10, 9, 11, 6, 3, 5, 4, 13, -1, 4, 6, 8, -2, 5, 3, + 3, 0, 6, 8, 3, 1, 5, 7, 5, 16, 3, 2, -5, -6, -3, -7, 0, 7, 3, 1, 6, 9, 9, 2, -4, 7, -2, -7, -15, -12, + 3, 3, 5, 1, 7, 6, -1, 2, 0, 16, 6, -1, -6, 3, -7, -8, -2, 6, 9, 3, -3, 2, 3, -16, 1, 7, -5, 2, -7, -13, + -2, 1, 1, -17, -34, -20, 24, -26, 22, 13, 27, 11, 12, 13, 33, 10, -9, 15, 21, 7, 6, -3, -9, -7, -7, 3, -2, -2, -4, 7, + -6, -2, -8, -5, 1, -7, -1, -3, -8, -8, -6, -7, -16, -8, -8, -5, -4, 15, 19, 15, 9, 1, 6, 5, 2, -2, 10, -8, -7, 2, + 0, -2, 9, 3, -9, -2, -1, -3, -6, 46, 8, -1, -12, -17, -4, 3, 9, 7, -1, 1, 0, 7, 3, 12, 6, 9, 5, 5, 14, 13, + 22, 16, 3, 20, 16, 12, 13, -2, 18, 24, 18, 16, 5, 20, 8, 8, -2, 10, 3, 4, 11, 8, 4, 9, 7, 10, -1, -9, 0, 4, + -9, -2, -8, -5, -2, 8, 2, -1, -7, -9, -3, 6, 1, -2, 0, 2, 5, -10, -5, 8, -8, 7, -6, -10, 5, -5, 6, -1, -2, -10, + -13, -8, -3, 4, -20, 8, 3, 0, -1, 7, 4, 13, 15, -9, -1, 0, -2, -1, -3, -3, 5, -1, 13, 5, -11, -1, 5, -2, -13, -8, + 2, -6, 1, -2, -5, 9, 0, -8, -12, -6, -17, -7, -8, -11, -4, 1, 2, -3, 4, 9, -1, 5, -2, 4, 3, 8, 3, -10, 1, 7, + 9, 1, -6, -7, -4, -8, 0, -8, -2, -7, -8, -1, 0, 3, 2, 4, 1, 0, 5, 11, 14, 3, 9, 11, 16, 11, 13, 9, 1, 0, + 2, -2, -4, 2, -6, -7, -3, -17, -10, -5, -1, 0, 3, 1, 5, -4, 7, 8, 9, 3, 5, 15, 5, 2, 1, -11, -17, -27, -19, -16, + -20, 1, -6, -2, -7, -2, -8, -16, -21, -32, -31, -26, -20, -19, -10, -3, -6, -13, -5, -21, -28, -24, -5, -15, -8, -2, -7, -9, -18, -9, + 6, 3, 8, 4, 5, 8, 6, 2, -12, -18, -29, -7, -35, 12, 7, 3, 7, 39, 28, 31, 13, 0, 3, -4, -6, -12, -14, -6, -8, -13, + -6, 7, 2, 7, 9, -3, 6, -17, -17, -10, -10, 3, -6, -2, -5, -20, 4, 0, -2, -5, 3, -6, 8, 18, 14, 13, 9, 7, -2, -4, + 3, 2, 2, -2, 5, -1, -1, -4, -6, -4, 13, 3, 0, 4, 15, -5, -7, -1, -6, -1, -9, -18, -7, 7, 5, -5, -8, -4, -9, 6, + 2, 5, 17, 6, 12, 25, 12, 0, -3, -7, 2, 18, -1, -7, -2, 3, 26, 9, -5, -3, 0, -3, 1, 1, 5, -3, 3, 21, 10, -5, + -9, 1, -2, -1, 8, 9, 10, -7, 8, 8, -10, 3, -5, 10, 11, -6, -15, 14, 11, 0, 22, 22, 9, 18, 12, -2, 11, 11, -7, -7, + -15, 3, 7, -2, 9, -1, 5, 10, -1, -2, 4, -8, 12, 12, -2, -9, -8, -21, -13, -4, -1, -2, 3, 15, 4, 16, 8, -7, 10, -13, + -13, -12, -8, -8, 3, 8, 6, 3, 18, 3, 4, -3, 4, -1, 11, 5, -2, -1, -2, -8, -1, 2, 3, 0, 7, 6, -3, 3, -2, -2, + -5, -5, 8, 6, 8, 7, 10, 0, 4, -7, -8, -6, -2, -3, -7, 3, 7, -2, -2, -3, -4, -9, -2, 3, -1, -2, 1, 6, 8, 8, + 8, -1, -8, -10, -4, -10, -4, -4, -5, -18, -24, -20, -18, -12, -5, -12, -1, 0, 5, 10, 10, 16, 20, 21, 20, 14, 17, 14, 4, 8, + -6, 10, 14, 10, 9, 9, -2, -6, -13, -16, -5, -14, -17, -7, -30, -19, -18, -27, -30, -28, -13, -10, -19, -6, -8, 2, 8, 6, 8, 8, + 4, 10, 3, 3, 18, 13, -4, -14, -13, -23, -10, -16, -1, -22, -52, -8, -20, -44, 25, 37, 4, 8, 26, 16, 15, 2, -9, -3, -12, -7, + -8, -12, 3, 13, -3, 2, 16, 1, -3, -1, -5, 9, 3, 9, 6, -1, 0, -6, -7, -8, -2, -3, -3, -18, -8, -1, 2, 6, 10, 8, + 15, 17, -5, -4, 7, 8, -10, -6, -13, -1, 1, -13, -10, 7, 7, 2, 11, 20, 4, -26, -11, -16, -14, 0, -2, -7, -16, 3, 6, 15, + 16, 16, 2, 0, 10, 13, 6, 11, 13, 0, 4, 21, 10, -5, -12, -6, 13, 14, 10, 6, 15, 19, -3, 2, 19, 20, 7, -4, -1, -3, + 13, 4, 13, 22, 23, 19, 8, 4, 8, 17, 18, 6, 14, 12, 21, 12, 14, 10, -1, 3, 3, 4, 4, -1, 0, -9, -2, 6, -16, -20, + -7, 2, 14, 8, -7, 11, 23, 19, 23, 25, 16, 14, 18, 27, 26, 30, 24, 16, 7, -4, -1, -2, -14, -20, -10, -5, -12, -11, 14, 4, + 9, 8, 6, 8, 7, -4, 20, -4, -12, -12, -21, -22, 2, -12, 0, -7, 0, 13, 13, 15, -8, -1, -1, 1, 0, -7, -16, -10, -3, 13, + 11, -2, -8, -4, -4, -4, -4, 1, -3, -3, -3, -6, 1, -4, 0, 10, 13, 19, 13, 8, 10, 16, -3, -3, 1, 8, -3, -6, -2, -7, + -4, 1, 9, 12, 12, 3, -6, -1, -12, -3, 7, 1, -7, -15, -9, -3, -7, -1, -1, -7, -1, -11, -6, -3, -6, 2, -1, -6, -19, -16, + -11, -11, -10, -12, -8, -10, -5, -6, -10, -13, -12, -24, -17, -19, -10, -3, -4, -9, -11, -9, -9, -6, -2, -13, 1, -6, -15, -9, -9, -9, + 5, 8, 12, 8, 3, 7, 7, 4, 0, -5, -4, -9, -14, -14, -9, -8, 2, 5, -11, -16, 5, -29, -61, -14, 44, -37, 18, 24, 24, 20, + 2, 1, -8, -2, 9, -2, 6, 5, -2, 2, 4, -4, 18, 1, 1, -14, 9, 7, 6, 4, 5, 7, -9, -13, -12, -13, -5, -4, -4, -15, + -9, 4, 4, -6, 9, 11, 4, 14, 8, 8, -8, -3, -8, -3, -6, -6, -5, -3, 7, 3, 8, 7, 9, 1, -81, -7, -5, -4, -2, -13, + -11, -22, -31, -30, -21, -6, 3, -5, -18, -7, -3, 12, 36, 6, -13, 6, 21, 27, 17, 1, 10, 9, 13, -7, -25, -29, -12, -8, -10, -8, + -4, 10, -3, 0, 5, 3, -11, -4, -4, -2, -17, -13, -1, 13, -1, 12, 7, 17, -3, 5, -7, 4, 21, 13, 21, 26, 17, 37, 16, -17, + -16, -1, 1, 3, -2, 6, 16, 11, 12, 1, 0, 7, 13, 19, 12, 19, 23, 21, 16, 15, 14, 1, 0, -10, 16, 7, 12, 16, 30, 27, + 17, 7, 20, -5, 19, 0, -5, -5, 3, 21, 13, 18, 17, 12, 3, -10, 3, 16, 27, 21, 31, 2, 3, 28, 33, -13, -8, -1, -2, -3, + -5, -9, -4, 7, 9, 0, -3, -9, -4, 6, 5, 11, 4, 8, 4, 7, 11, 10, 6, 3, 7, 4, 2, 5, 1, -9, -5, -4, -10, -3, + -4, -1, -1, 4, 6, 2, 8, 3, 5, 5, -8, 0, -7, -5, -13, -12, -13, -9, -8, -18, -17, -6, -17, -8, -4, -4, -1, 5, -3, -1, + -5, 14, 12, 7, 2, -6, 10, 6, 4, -5, -5, 3, -2, 2, 13, 9, 0, 11, -1, -7, -11, -11, -17, -20, -18, -15, -16, -18, -9, -15, + -14, -11, -7, -7, -11, -19, -22, -14, -9, -9, 0, 2, 2, 9, 3, 7, -2, 11, 15, 23, 30, 30, 37, 43, 41, -64, 11, -127, -110, 36, + -27, 13, 16, -5, 9, -4, 3, -8, 3, 22, 11, 18, -1, -12, -7, -9, -9, -11, -9, -17, -9, -8, 4, 15, 7, 3, 4, -8, -25, -14, + -10, -2, -4, -12, -13, -2, 3, -1, 1, 15, 5, 7, 0, 0, -5, -10, -5, 2, 7, 8, 5, 7, 1, 9, -1, -4, -3, 7, -7, -83, + 14, 6, -5, -9, -3, -1, -8, 5, -7, 2, -6, -9, -4, -3, -18, -12, -20, -6, -17, 1, -8, 9, 4, 12, 1, -22, -26, 0, 5, 21, + 33, 26, 18, 22, 15, 12, 12, 19, 8, -1, -13, 0, 22, 10, 0, 6, 2, -8, -4, 10, 2, -8, -3, -7, 5, 6, -2, 15, 14, 12, + -9, -14, 1, 12, 24, 8, 17, 19, 4, 23, 1, -11, 6, -5, -5, 9, 1, 0, -13, 3, 1, 9, 6, 2, -28, 4, -28, 8, -7, 0, + -10, -16, -17, -7, 17, 5, -1, -11, -13, -1, -4, 2, 13, 27, 4, 7, -11, -6, 14, -8, -11, 3, -13, 1, 2, -14, -14, -31, -11, 20, + -17, -12, -10, 1, 2, -13, -26, -19, -12, -7, -9, -12, 3, 4, 9, 17, -3, -6, -9, -9, -13, 1, 6, 2, 2, 12, 13, 6, 6, 5, + -1, 17, 14, 22, 8, 12, 5, 1, 5, 2, -5, 4, 15, 4, 4, -4, -8, -8, -17, -14, 8, -7, -13, 2, 0, 4, 0, 7, -7, -3, + 5, -10, 3, 23, 8, 11, 26, 1, 10, 8, -1, 2, 6, 11, -2, -6, -8, 2, 6, 1, 8, 23, 22, -11, 2, 0, -9, 6, 14, 34, + -8, 5, -9, -10, -2, 6, 23, 14, 5, 11, 23, 5, 5, 1, -7, -16, -21, -1, -14, -11, -6, 0, -10, -7, 19, 13, 6, -9, -18, 10, + 37, -15, -18, 21, 4, 3, -11, -14, 0, 1, 14, -17, -2, 30, 11, -20, -15, 2, -6, 12, 11, 0, 7, 15, -12, -9, -11, -3, 19, 10, + 10, -6, -8, -5, -3, 21, -18, 17, 4, -19, -9, -12, -11, 8, -24, -4, 7, 5, 1, -6, 17, -13, -6, 12, 6, 1, 10, 25, 34, 29, + 1, 9, 20, 14, 21, 30, 25, 19, 10, -10, -14, -8, -3, 20, 28, 16, -4, 9, 13, 6, 19, 10, -11, -16, -14, -13, -10, -11, -5, -7, + -10, -7, 8, 13, -4, -3, -5, 7, 11, 0, 4, 7, 5, 7, 9, 20, 22, 16, 21, 12, 0, 4, 7, 3, -3, 1, 6, -1, 4, 22, + 18, 1, 23, 36, 11, 10, 4, -11, 3, 16, 7, 35, 22, 24, 33, 25, 4, 12, 18, 7, 21, 6, -3, 5, -25, -11, 10, -15, -13, -12, + 5, 20, 33, 1, 16, 13, 3, -7, -4, -29, -8, 0, -13, 17, 1, 17, -12, -11, -12, -28, -13, -11, 11, 1, -3, 2, 17, 20, 6, -31, + -17, -10, -33, -5, 6, -8, 0, -7, -12, -15, -2, -4, -4, 0, 12, 3, 14, 18, 17, 8, 7, -5, -9, -18, -27, -26, -11, 11, 7, -9, + -4, -1, -3, -11, -19, 2, 4, 0, -15, -12, -3, 2, -3, -13, -6, -9, -16, -6, 2, -4, 3, -10, -18, -31, -18, -8, -17, -9, -15, 5, + 18, 24, 16, 9, 10, -1, -2, 1, -1, -5, 4, 8, 12, 4, 3, 12, 12, 1, -17, -7, -11, -12, -11, -2, 0, -6, 23, -6, 3, -1, + 2, 1, 22, 9, -5, 1, 9, 1, -5, 5, -3, -8, -6, -10, -18, -6, 2, -15, 6, 10, 6, 3, 8, -5, 3, 6, 9, 28, 23, 5, + 1, -25, -16, -3, 3, 16, -18, -12, 6, -33, -30, -21, -10, 7, 22, -5, -34, -17, 30, 21, 3, -4, 19, 10, 15, 5, 2, 16, 10, 15, + 3, -1, -8, 36, 12, 1, -16, -7, -26, 5, -4, -3, 11, -9, -25, -24, -5, 12, -16, 0, -17, -3, -14, -9, -12, 10, -11, 14, 20, 2, + 21, 10, 1, 10, 10, 8, 14, 21, 23, 14, 9, 17, -12, 14, 22, 5, 13, -6, 4, 5, -5, -1, -16, -11, -20, -10, -15, -12, -11, -3, + 10, 2, -9, -7, -8, 6, 14, 5, -12, -46, -9, -18, -7, -26, 0, 5, 1, -15, -17, -2, -17, -25, -17, 0, 5, -21, -23, -16, 0, -6, + 0, 3, 10, 0, 2, 2, 5, 16, 12, 19, 28, 16, 10, 29, 22, 37, 25, 30, 40, 18, 18, 32, 36, 27, -7, 16, 35, 39, 11, -10, + 16, 1, 9, -11, 14, 0, 9, -11, -19, -31, -11, -12, -20, -21, -31, -14, -18, -8, 5, 21, -2, -37, -28, -38, -24, -10, 0, 14, 17, 8, + -26, -14, 0, 1, 17, 15, -1, -17, -44, -48, -22, -24, -9, -8, 1, -10, -5, -10, 3, 6, 17, 11, 1, 7, 5, 5, 0, 6, 5, 5, + -2, 2, 2, 2, -10, -6, -9, -8, -9, -7, 5, 22, 21, 8, 5, 2, -9, -2, 10, 9, -1, -3, 12, 18, 9, 5, 2, -21, -13, -14, + 8, 4, 3, -6, -7, 2, 21, 30, 18, 18, 3, -7, -11, -9, 0, -4, -6, -9, 10, 11, 1, 13, 12, -4, -6, 8, 4, 13, -20, -7, + -2, 7, 10, 5, 12, 8, 19, 26, 3, -1, 3, 8, -10, 9, -5, -2, 9, 4, -5, 13, 0, -15, 1, -9, 22, 5, 21, 9, 19, 14, + 14, 13, -10, 0, 17, -9, 3, -1, -6, 3, -19, -33, -20, 18, -34, -46, 7, -8, -5, -34, -3, -16, -21, -14, -23, -14, -23, -35, -5, 10, + 21, 10, 5, 25, 16, 2, -10, -12, -9, -2, 19, -6, -4, -7, -12, -5, -9, 2, -10, -6, -41, -13, -24, -10, -13, -31, -30, -17, 8, 3, + 4, -6, -7, -5, 10, 6, 32, 1, 17, 8, 11, 17, 12, 25, 9, -10, -7, -15, 4, 18, 29, 13, 14, 2, -10, 22, 23, 32, 41, 31, + 10, 0, 23, 2, 12, 31, 30, 7, -14, 6, -7, -23, -16, 2, -20, -20, -8, -21, -18, -3, 3, -19, -11, -19, -22, -41, -8, -22, -13, -21, + -23, -28, -28, -26, -8, -1, -16, 7, -11, -15, 8, 20, 31, 29, 23, 30, 26, 35, 33, 5, 14, 33, 9, -15, -8, 8, -15, -8, 6, -2, + -4, 31, 38, -2, 0, 27, -4, 9, -5, -1, -6, -10, -29, -21, -22, -30, -2, 0, -19, -28, -12, 6, -1, 20, 6, 13, 11, 8, 1, -12, + 15, 29, 24, 28, -1, 0, 10, -10, -8, -36, -7, -11, -25, -33, -12, -43, -29, -22, -12, -13, -27, -22, -27, -24, -19, -25, -13, -14, -18, -20, + -15, -11, 6, 2, 6, 8, 7, -4, -6, -12, -9, -9, -26, -33, -27, -34, -34, -43, -57, -40, -18, -26, -11, -13, -14, -14, -10, 4, 3, -4, + -12, -15, -22, 5, 10, 15, 2, -12, -14, -22, -1, 24, -7, -12, -12, -27, -29, -22, -7, -4, -14, 13, -7, 8, 5, 22, 13, 7, -2, 9, + 12, 16, 11, -6, -14, -3, -15, -1, 2, 9, 8, -6, -24, -26, -22, -21, -16, -20, -22, -15, -20, -7, 21, 18, 22, 15, 0, 5, 11, -6, + 6, 7, -5, -1, 4, 4, 3, 24, 20, 17, 35, 12, 35, 28, 15, 23, -20, -5, 29, -90, -89, 41, 19, -57, -17, 0, 4, -1, -12, -26, + -9, -9, -11, -9, -25, 5, 13, -5, -9, -4, 15, 16, 24, 20, 12, 8, 10, -4, 7, 4, -8, -9, -3, -6, -12, 4, -20, 11, 7, 31, + 29, 13, 5, 4, -6, 3, -10, -13, -3, -5, 24, 23, 28, 36, 31, 21, 17, -15, 16, -20, -23, -12, -22, -26, -32, -23, -27, -4, -13, -20, + -26, -49, -19, 1, 12, -27, -15, -31, -19, -3, 1, -17, -7, -22, 16, 30, 3, 3, 12, 23, 18, 7, 15, 9, 2, -26, -15, -29, -37, -38, + -44, -30, -40, -29, -64, -43, -46, -53, -42, -31, -23, -28, -16, -25, -10, -26, -18, 2, -4, -10, -13, -18, -4, -6, 3, 20, -2, 16, -14, -20, + 28, 7, 1, 3, -1, 16, -20, 0, -25, -21, -13, -17, -6, -30, -12, -3, 14, -28, -1, -39, -12, -3, -5, 4, 19, 11, 54, 18, 8, 13, + 2, 5, 19, 16, -16, 17, 18, 25, 30, 8, 24, 28, 25, 9, -24, -2, -14, -23, -21, -12, -14, -20, -12, 2, 7, -2, -4, 7, -1, 7, + -5, 1, 5, 6, 2, -3, -13, -18, -13, -15, -10, -9, -12, 2, -5, -10, 6, -4, -3, -8, -34, -38, -26, -16, -13, -19, -33, -52, -63, -68, + -74, -52, -20, -38, -40, -32, -47, -60, -40, -36, -19, -31, -17, -4, -24, -23, -6, -20, -9, -13, -42, -45, -30, -13, 8, 19, 14, 9, -22, -11, + 29, 27, 11, -4, 2, -17, -13, -43, -19, -21, -30, -27, -21, -30, -37, -38, -58, -66, -68, -78, -57, -50, -59, -63, -76, -89, -80, -79, -64, -30, + -25, -14, -15, -25, -46, -38, -43, -3, -38, -8, -7, -21, 11, 5, -16, 4, -37, -19, -6, -29, 24, -38, 66, 47, -98, -30, 108, 12, -50, 17, + 50, -36, -10, 17, -24, -16, -20, -17, -25, -37, -34, 27, 7, -17, -6, 13, 2, -17, -16, -27, -19, -36, -25, -14, -13, 4, -1, -10, -2, -8, + 9, -14, 5, -17, -8, -5, 0, -36, -34, 3, 6, -26, -17, -29, -20, -1, 9, -1, -4, 6, -15, -15, -20, -4, -82, 6, -5, 4, 8, 8, + -2, -8, -25, -42, -34, -26, -22, -7, 6, 6, -15, -23, -14, -16, -52, -45, -18, -14, 11, -9, -16, -26, -34, -44, -29, -41, -7, 24, 50, -6, + -12, 0, 9, 10, -14, 2, -1, -1, -4, -11, -17, -14, -18, 11, 11, 17, 5, 12, 15, -1, 3, -1, 24, 32, 51, 52, 32, 32, 53, 23, + 3, 5, 9, 10, 12, 2, 9, -16, -18, -13, -26, -11, -23, -10, -31, -34, -16, -12, -25, -13, -15, -26, -52, -36, -30, -39, -49, -31, -19, -28, + -30, -8, -20, -28, -6, 1, -9, -8, 9, -5, 52, 11, 20, 27, 0, 35, 18, 36, 10, -17, -27, 16, 1, -28, -26, -13, -7, 1, 0, -6, + -5, 2, 4, 8, 1, 11, 15, 8, 14, 15, 2, -10, -25, -15, 1, -10, 0, 4, 12, 21, 18, 10, -3, -3, -3, 12, 26, 38, 38, 26, + 19, 17, -2, -2, -9, -2, 7, 13, 15, 18, 17, 15, 23, 19, 25, 31, 27, 23, 17, 19, 20, 21, 10, 0, -7, -4, 5, 8, 16, 3, + 3, 0, -2, 2, -3, -7, -9, -1, 5, 8, 20, 19, 30, 36, 49, 55, 41, 30, 32, 34, 42, 15, -1, 1, -15, -9, -10, 17, 15, 5, + 16, 14, 9, -1, -7, -14, -13, -15, -18, 10, 15, 8, 18, 25, 17, 12, 7, 28, 9, 11, 4, -4, -1, -4, 0, 111, -43, -57, 106, -33, + 23, 103, 57, -34, 47, 86, 28, -8, 41, -24, -29, 33, -16, -21, -22, 11, 0, 15, 28, -6, 34, 16, 4, 10, 9, -3, -33, -22, -7, 8, + 23, 26, 20, 26, 14, 32, -4, 4, -13, -13, -36, -28, -27, -16, -18, -10, -20, 2, -25, -9, 12, 12, 8, -12, 4, -7, -16, -15, -3, -127, + 5, 3, 1, 0, 2, 3, -1, -3, 1, 5, 3, 1, 1, 5, 4, 3, 0, 0, -1, -1, -3, 0, 2, 0, 5, 6, 2, 4, 1, -1, + 2, 5, 1, 0, -1, 2, -1, -2, -2, 6, 4, 2, 1, 3, -1, 2, 5, 3, 2, -1, 7, 3, -3, 0, -1, 0, 1, 0, 1, 0, + -2, -3, 1, 2, 0, 0, 0, 1, 0, -2, 1, -1, 1, -3, -3, -4, 1, -4, 1, -5, -2, 4, 2, 2, 1, 9, 4, 5, 2, -3, + -3, 4, -1, 1, -2, -3, 0, 0, 0, 1, 2, -3, -2, -1, -4, -3, -3, 1, 2, 1, -1, -2, -2, -6, -2, 3, 0, 1, 0, 5, + -1, -5, -3, -5, -3, -2, -3, -2, -2, -1, 0, -3, -3, -2, 0, 3, 2, -1, -3, -3, -2, -4, -3, -3, 0, -3, 0, 1, 0, 0, + -1, -1, -3, -1, -1, -2, 0, -1, -3, 0, 2, 0, -2, -2, 1, -2, -4, -2, -1, -1, 2, 1, 0, -2, 3, 3, 6, 5, 3, 2, + 2, 3, 2, 2, -1, 0, -5, -7, -7, -5, -7, -6, -5, -3, -3, -2, 1, -2, -2, -4, -2, -3, 0, -4, -6, -1, -2, 0, 0, -1, + 1, 3, -1, -2, -6, -2, 0, 1, 1, 2, 2, 2, 0, -1, -5, -2, 0, 3, 3, 1, -4, 1, 0, 0, -1, -1, 2, -6, -5, 1, + -10, 38, 25, -10, -2, 7, -3, 2, 1, -4, -2, 3, 5, 6, 2, 7, 0, -3, -6, -8, 2, 0, 4, 4, 2, 1, -4, 3, -3, -4, + -6, -9, -8, -3, -4, 0, 1, 4, -1, 3, 2, 4, 3, 4, -3, -2, -1, -8, 0, 0, -1, -1, 2, 5, 7, 4, 4, 2, 3, 2, + 1, 4, -1, -1, 22, 2, -4, -2, -1, 4, 1, -6, -1, 0, 2, 0, 3, 2, 1, -1, -1, 3, 5, 0, 1, 0, 4, 4, 1, 0, + -3, -1, 2, -3, -1, 4, 5, 0, 1, 2, -1, 2, -3, 0, -2, 4, -1, 0, -1, 4, 3, 0, -3, 1, 2, 1, -2, -2, 4, 5, + -2, 1, 0, 2, 1, 2, 3, 1, 4, 1, -4, 0, 4, 0, 1, 4, 2, 4, 0, -4, 3, 5, 6, -1, 4, 0, -3, -5, -4, -4, + -1, -3, 0, -1, 5, 1, 6, -2, 4, -3, 5, 8, -1, 1, 2, 0, -5, -8, -5, -7, -2, -4, -1, 6, -5, -7, -5, 3, -2, -3, + -3, 4, 7, 4, -2, -3, -3, -2, -2, -4, -1, -2, 0, 0, 2, -2, 1, 0, -1, -3, -3, -3, 0, -1, 0, -3, 0, 4, 4, 2, + 2, 3, 0, 0, 1, -1, -3, -1, 0, -2, 2, -2, 2, 3, 3, -2, 1, 3, 3, 4, 2, 1, -2, -3, 0, -1, -2, -7, -6, -4, + 2, 4, 1, -1, -2, -4, 2, 1, -2, -2, -5, -1, -5, -7, -2, -4, 0, 2, 2, 1, 4, 4, 4, -1, 0, -3, 0, 1, 4, 2, + 5, 4, 3, 2, -3, -3, 0, -3, 0, -2, -1, -2, -3, -4, -5, -3, -5, -10, -5, -3, -1, -4, 0, 1, -3, -5, 0, -1, -4, -1, + -4, 3, 0, 5, -3, -4, 20, 11, -8, 0, -1, -2, -1, -4, 1, -3, 6, 4, 4, 8, 4, -4, -5, -6, -6, 2, 2, 1, 6, 3, + 0, -1, 0, -1, -1, -5, -3, -2, -3, 3, 2, 0, 1, 2, 4, 3, 1, -2, 1, -2, 0, -4, -5, -1, -6, -4, -3, -4, 4, 1, + -1, 0, 3, 0, -2, 0, -1, -1, 1, 13, 5, 6, 3, 4, 2, -1, 1, 0, -1, 1, -1, 2, -4, -3, -1, 1, 2, 1, 4, -1, + 0, 3, -1, 1, 1, 0, -2, -2, 2, -2, -3, -1, 3, 1, 0, -2, 0, 1, -4, -2, 2, -4, 1, -2, 1, 0, -1, -3, 1, -3, + -3, -3, -3, 0, -2, 3, 0, 0, -2, 1, 5, -1, 1, 3, -2, -3, 2, 2, -1, 1, 3, 2, 4, 4, 4, 9, 3, 6, 1, -2, + 4, -2, -2, 3, -4, -2, -2, 1, 3, 2, 2, 3, 6, -1, 1, 4, 5, 4, 3, 1, 4, -1, 3, -2, 1, -2, -2, -3, -1, -2, + -4, 0, 1, 1, 0, -1, -4, -1, 3, -1, -1, 2, 4, 1, 2, 0, -4, 0, 0, 3, 2, 0, -3, 0, 0, 1, 2, -1, 1, 0, + 2, 1, 3, 2, -3, -3, -1, 0, -1, -1, -1, -3, 0, 0, -1, -1, -1, -2, -1, 0, 0, -2, -2, 0, 2, 4, 1, 1, 4, 4, + -3, -1, -3, -1, -1, -3, 0, -1, -5, -2, -3, -2, 0, -2, -3, -2, -3, -4, 0, 0, -1, 4, -2, 3, 1, 1, 0, 4, -1, 3, + 2, 4, -1, -1, 0, -1, -2, -1, 1, 7, 0, -2, -1, 0, -2, -2, -4, -3, -2, -5, 2, 1, -4, 0, 1, 3, 0, 2, -2, -4, + 3, -2, -4, -1, 0, -2, 1, 3, -2, -6, 2, 14, -3, -5, -3, -12, -2, -5, -7, 3, 4, -2, 3, 3, -3, 1, -3, -6, -7, -3, + 3, 3, 2, 0, 1, -10, 3, 0, -1, 2, -2, 1, -2, -5, 1, 0, 1, -1, 4, 2, 4, -2, -2, 0, 1, 2, 2, -1, -2, -7, + -7, -3, 1, 6, 2, 2, 5, 1, -1, 3, -1, -1, -4, -1, -5, 4, 2, 5, 0, 0, 1, -3, 0, 0, -2, 2, 1, 3, -1, -3, + -2, -5, 3, 4, 0, -2, -2, 1, -2, 0, -5, -3, -5, -3, 2, -1, 0, 1, 3, 6, 3, 0, -1, 2, 0, -1, 0, 1, 1, 0, + -1, -1, -3, 2, -3, 0, -2, -6, -3, -1, -1, -5, -1, -5, 0, -3, -6, -3, -1, -5, -7, 0, -3, -5, 3, -3, 0, -1, -5, -1, + 2, -1, 2, -2, 4, 3, -4, 0, 3, 0, -3, -2, -2, -3, 0, 2, -2, -2, -4, 0, 2, 6, 4, 3, 7, 2, 4, 4, 7, 13, + 4, 5, 6, 2, -7, 0, -5, 0, 2, -1, -3, -6, -4, -7, 2, 0, 1, 1, 0, 0, 1, -2, 2, 4, 2, 3, 1, 0, -1, -3, + -2, 0, 2, 3, 0, 1, -1, 0, 0, -2, -3, -2, -2, 1, 0, 0, -3, 0, -1, -2, 3, 5, 3, 5, 5, 2, 1, 0, 1, 3, + 1, 1, 1, 3, 3, 4, 0, 3, 1, -1, -2, 0, 8, 6, 2, -3, -1, 1, -1, -4, -4, -2, -3, -4, -4, -5, -3, -2, -1, 3, + 0, -3, 0, -1, -3, -1, 0, 0, -3, -1, -4, -3, 1, 0, 2, 1, 2, 5, 9, 3, 2, 5, 4, 6, 0, 2, 2, -2, 0, -3, + -2, 1, 3, 1, -5, -4, -4, -3, 0, 0, -5, -2, 2, 1, 5, 10, 16, -1, -1, -8, -12, -7, -12, -13, -1, 3, 7, 2, 5, 3, + 9, 1, -4, -3, -1, 4, 3, 1, -1, -2, -1, 3, -4, 0, 1, -1, -3, -6, 0, -3, 3, 2, 6, 2, 1, 0, 0, -7, 1, -1, + 2, -2, -4, 3, 0, -1, -4, -1, -3, 6, -1, -1, 7, 3, 4, -1, -1, 0, -1, -12, -2, -1, 5, 1, -6, -6, -11, -8, -6, -8, + -4, -3, -6, -10, -7, -5, -5, -1, -7, 0, -3, 0, -2, -3, -2, -3, -6, -8, -6, 0, -1, -7, -8, -4, -1, -1, -6, -8, -11, -8, + -6, -3, -6, -2, -9, -7, -8, -4, -3, -4, -2, 0, -2, 1, -1, -4, 1, 7, 2, 2, 4, 8, 7, 3, 6, 7, 12, 13, 6, 7, + 9, 0, -3, 2, 7, 4, -5, -2, -1, 0, 1, 0, 0, -1, -5, -4, -3, -7, -5, -9, 0, 0, -2, 1, 2, -1, 4, 4, 3, 0, + 1, 0, 7, 3, 6, -2, 1, 0, -2, 2, -3, 0, 1, 0, 2, 2, 0, 1, 1, 8, 4, 4, 5, 6, 4, 2, -1, 2, 2, 1, + 2, 1, 5, 4, 3, 3, 2, -3, -3, -4, -3, -1, -1, 0, -3, -2, 0, 1, -3, -2, -3, -1, -1, -2, -2, 0, -1, -2, -1, 2, + 3, 1, 4, 2, 2, 2, -2, 1, 0, 1, -1, 2, 2, 0, 0, 3, 3, 5, 2, 4, 5, 0, -1, 1, 2, 3, 2, 0, 1, -1, + 0, -5, -4, -2, 2, 0, -4, -1, -4, -4, 5, -4, 1, -3, -3, -4, -2, 0, 1, 3, 1, -4, -5, -2, 1, 0, 2, 4, 1, -3, + -3, -4, -1, 2, 3, -1, -2, 3, 1, 1, 2, 1, 4, -1, -1, 2, 3, 2, 8, 11, -5, 25, -17, -3, -23, -18, -22, -19, -21, -4, + -5, -1, 4, 7, 7, 5, 7, -1, 1, 5, 4, -5, -2, -6, -4, 3, 8, 5, 2, 4, -7, 1, 3, -4, 0, 0, 5, 1, 0, 6, + 1, 2, 3, 3, 7, 2, 4, -3, -4, -1, -3, 0, 0, 4, 4, 5, 9, 8, 9, 4, 1, 2, -2, 2, -15, 2, 5, 0, 5, 3, + 1, -3, 0, -1, -3, 0, 5, 8, 6, 6, 4, -1, 0, -2, 1, 1, 4, 3, -7, -5, -6, -8, -3, -2, -4, 3, -3, -8, -11, -9, + -8, -10, -8, -4, -1, -7, -6, -10, -5, -7, -9, -7, -6, -12, -12, -9, -10, -5, -7, -10, -8, -5, -4, -1, -2, -3, -9, -5, -5, -5, + -5, -3, 0, -3, -1, 5, -4, 1, 7, 2, 11, 10, 0, 2, 2, 1, -2, -6, -6, 6, 5, 4, 8, 4, 1, 2, 1, 5, 1, 6, + 3, 1, 3, 4, 5, 3, 3, 6, 6, 6, 2, 5, 4, 4, 11, -3, -5, 7, 5, 4, 11, 2, 7, 2, 15, -1, -2, -1, 2, 0, + -2, -3, -3, -3, 0, -3, -1, -5, -1, 1, -2, -2, -3, -4, -6, -5, -8, -8, -7, -5, -3, -2, -3, -3, -3, 1, -1, 2, 0, 0, + 2, 0, 2, 0, 0, 0, 0, 1, 3, 1, 5, 6, 5, 5, 2, 3, 7, 11, 10, 8, 5, 3, 4, 2, 2, 8, 2, 3, 4, 5, + 3, 7, 7, 8, 4, 5, 8, 2, 2, 1, 5, 2, 4, 0, 2, 0, 1, -1, 0, 1, -1, 0, 0, 1, -3, 1, -2, -3, -4, -5, + -2, 0, 0, -2, 0, 4, -1, 0, 0, 1, 4, 0, 2, 4, 1, 4, 4, 2, 1, 3, 0, 5, 2, -1, -9, -18, 127, 110, -25, -74, + -32, 1, 7, -18, -12, -13, -8, -3, -15, -11, -6, 1, -4, 0, 2, 3, -4, -2, 0, -2, 6, 1, 1, -4, 4, 3, -2, -2, -1, -4, + -3, 2, 0, -4, -3, 1, 1, -3, -4, -3, 1, -7, -11, -6, -9, -2, -4, -5, -2, 5, 14, 11, 7, 9, 4, 2, 2, 0, -4, 5, + 4, 8, -2, 6, 19, 12, -5, -2, -3, 2, 3, 0, 9, -3, -15, 0, -2, 9, 6, 16, 14, 17, 14, 1, -2, -3, 3, 3, -1, 5, + 6, 11, 3, -8, 1, 2, -9, -2, 16, 11, -5, -3, -6, -1, 2, 7, 5, 3, 0, 1, 5, 6, -3, 3, 6, 4, 3, 9, 0, -3, + 0, 5, 6, -7, -6, 2, -10, -1, 9, 4, 13, 2, 10, 6, -1, 12, 12, 6, 6, 15, 18, 15, 1, 10, 12, 6, -5, -9, -10, 1, + -7, -10, 0, 0, 3, 0, 12, 9, 10, 2, 14, 5, 8, 0, 4, -18, -22, -29, -17, 0, 3, -7, 5, -9, 7, 0, 7, 1, -8, 9, + -8, 0, 3, 6, 12, 9, 6, 1, 5, 2, 6, 6, 1, -3, 6, -2, 3, -4, -3, 3, 8, 5, -7, -3, -7, -9, -6, -3, -2, 5, + -5, -3, 2, 8, 2, 0, -7, -7, -2, 1, 7, 6, 0, 3, -9, 0, -8, -5, -7, -10, 1, 11, 1, 2, 4, 6, 9, 10, 14, 5, + 7, -6, -11, -16, -14, -6, -3, -1, -7, 1, -3, -4, 0, -6, -5, -8, 2, 4, -8, -3, -6, -2, 1, -1, 14, 6, 14, 6, 1, -3, + 2, 0, -3, 0, 5, 1, 4, 0, 5, 3, 4, -3, 7, 2, -6, -6, -4, -1, 9, 7, 11, 7, 4, 5, 1, -6, 4, 8, 31, -13, + -38, -3, -11, -8, 22, 45, 15, 8, 15, 17, 11, 2, -8, -3, 6, 13, 14, 9, 11, 11, -3, 24, -2, -4, -5, -4, 5, -7, -23, -12, + -3, 3, -4, 6, 6, 13, 10, 0, 1, 12, 17, 15, -10, 6, -16, 2, 9, 1, 2, 2, 1, -5, 4, -7, -20, -12, -24, -12, -17, -19, + -4, -4, -19, -12, -8, 9, -2, -1, 0, 1, 6, -2, -4, -11, -4, -4, 1, 11, 1, -3, 0, -6, -9, 1, 10, 21, 10, 0, -12, -8, + 8, 19, 11, 2, -2, 0, 5, -3, -4, -1, 7, -8, -9, 7, 9, -12, -16, -4, -3, -9, -9, 3, -3, 1, 2, 15, 8, -2, -3, 3, + 9, 1, 3, 6, -5, 0, -1, -2, -12, -14, -8, -4, -9, -16, -3, 8, 12, 6, -2, -2, 1, 5, 2, 0, 18, 11, 13, -7, 10, 19, + 5, 3, 21, 14, 4, 2, 4, 8, 19, 17, 8, 14, 16, 1, -10, -9, -23, 0, -9, -14, -2, -5, -9, -13, -25, -20, -5, -3, 3, 11, + 7, 7, -6, -2, 24, -16, -7, -5, -4, -6, -5, -7, 3, 3, 3, -1, -3, -8, -4, -10, -5, -8, -4, 0, 8, 4, -1, -11, -8, -10, + -2, 1, 1, 2, 11, -4, -5, -3, 8, 2, 4, 8, 11, 7, 1, 1, -14, -12, -13, -11, -3, -6, -5, -12, -10, 5, 2, -4, 9, 9, + 16, 15, 12, 10, 9, 2, 2, 7, -1, 2, 5, -6, 7, 2, 6, -1, -1, -2, -15, -14, -1, 13, 6, -11, 6, 2, 4, 2, 3, 9, + 5, -4, 6, -10, -13, -11, -9, -6, -1, -7, -4, -8, -10, -7, 0, -9, -9, 11, -6, -9, -14, 1, 3, 0, -6, 2, 9, 9, 15, -1, + -8, 8, 2, 7, -11, -2, 6, -1, 18, 37, 25, 18, 3, 12, 16, 1, -1, -8, 7, 8, 11, 10, 9, 6, 4, -1, 9, 5, 5, -9, + -5, 7, 3, -15, -12, 1, -2, -2, 1, 13, 9, -2, -3, -8, 2, 3, -5, -5, 9, -3, 8, 12, 5, 9, 12, -2, 7, 1, -12, 2, + 5, -7, -9, -13, -11, -18, 6, 5, -2, -15, 14, 6, 1, -4, 1, -2, -1, -16, -1, 0, -6, 11, 6, -3, -6, -18, 4, 7, -4, -7, + -3, 7, 3, 3, -10, -5, 4, 5, 14, 13, 11, 1, -5, 0, 2, 3, -6, -10, 1, -2, -10, -13, -3, -4, 6, 9, 15, 2, 3, 2, + -2, 1, -12, -7, -3, 0, -4, -2, -11, -16, -10, -8, 9, 11, -15, -16, -9, -12, -9, 1, 2, -1, -2, -3, -5, 3, -1, 14, 3, 0, + 22, 18, -2, 3, 2, -3, 6, 10, 14, 13, 6, 11, -1, 16, 6, 8, -1, -2, -15, -13, 1, -13, 9, 12, -2, -4, -11, 7, -11, -19, + 5, -15, -6, 0, 15, 1, 8, -2, -1, 25, -10, -6, 0, 1, 3, 4, 8, 6, -1, 0, 3, 4, 7, 8, -3, -9, -11, -14, -19, -7, + -7, -8, -20, -15, -3, 2, -3, 6, -4, -6, -3, -7, -13, -4, -5, -10, 3, 6, 6, 0, -1, -8, -22, -6, 3, 1, 3, 8, -9, -12, + 7, -3, 3, 3, 6, 4, 9, 7, 2, 4, 4, 5, 9, 10, 7, 6, 6, 5, 5, 2, -5, -5, -4, -5, -3, -3, 0, -17, -8, 1, + 10, 10, -7, -6, -5, 5, 4, 11, 11, 6, -3, 5, 6, 4, 6, 0, 6, 4, -7, 2, 2, -3, 6, -1, 0, 5, 4, 3, -4, -16, + -1, -7, -7, 2, 1, -4, -3, -8, -1, 0, -24, -1, -12, 26, 33, 2, 19, -14, 4, 16, -3, 2, 10, 1, 0, 25, 6, 13, -2, 2, + 6, 11, 9, -7, 4, -4, -2, 5, -4, -12, -11, -3, 6, -5, 19, 13, 0, 7, 1, 9, 4, -11, -4, -5, -8, 1, -10, -13, -13, -2, + -15, -2, 3, -1, -2, 5, -21, -15, -23, -10, -10, 0, -8, 3, -19, 4, 3, -4, -10, -10, -2, -16, -17, -22, -17, -15, -9, -7, -17, -7, + -19, -5, 7, -1, -1, 3, 1, -9, -10, -5, -1, -1, 14, 3, -10, -11, 4, -5, 0, -2, -2, -2, 5, 1, -11, -13, -14, -3, 4, 0, + -3, -3, -10, -4, -24, -7, -4, 2, 7, 11, 9, -2, 2, -15, 2, 12, 18, 9, 15, 3, 2, 9, 7, -3, 10, 20, 12, 20, 5, 11, + 3, -4, 9, -3, -3, 8, 7, -5, -6, 5, -2, -2, 15, 18, 21, 7, -1, -1, 10, -3, 4, -2, 3, -3, 5, -2, -22, -8, -6, -10, + 1, 1, 12, 1, 5, -12, -11, -6, -21, -19, -3, -4, 12, 14, 18, 9, 8, 9, 7, 5, 1, 4, 3, -2, -1, -3, 3, 11, 2, -7, + -8, -6, -12, -7, -4, 0, -1, -1, -4, 4, -7, -5, -12, -13, -13, -17, -9, -14, -4, -2, 2, 1, 3, 1, 1, -9, -7, 0, 6, 14, + 4, -5, 1, -7, 0, -7, 1, 8, 0, 2, -4, 1, -4, -10, -3, -2, -3, 9, 2, 6, 3, -2, 0, -4, 0, -2, 3, 2, -5, 6, + 8, 14, 8, 3, -4, 3, 8, 5, 6, 10, 16, 6, 7, 5, 14, 9, -5, -12, 1, 4, 3, 0, -3, 1, -3, -14, -23, -14, -16, -10, + -9, 2, -6, -14, -17, -24, -7, -2, -9, -1, -3, -7, 10, 10, 4, -23, -14, -6, 49, 31, 17, 26, -10, -9, 22, -17, 8, 3, -5, 5, + 8, 1, -4, -2, -10, 2, 0, 11, 16, 6, 3, -4, -2, -4, -9, -21, -16, -6, -8, -3, 13, -3, -2, -12, -4, 0, 14, -5, -6, 11, + 8, -5, -14, -18, -18, -14, -7, -9, 10, -12, 2, -18, -11, -11, -11, -27, -9, -4, -4, -6, -8, -18, -11, -9, -5, -2, -3, -3, -6, -7, + -15, -6, 4, 3, -2, 20, 20, 18, 10, -4, 1, 14, 1, 5, 11, 2, 1, 15, -1, 2, -1, -7, -6, 2, -5, 14, 15, 18, 10, 5, + 8, 16, 6, -3, -6, 1, -1, -16, -5, -2, 9, 16, 22, 16, 10, 5, 12, 11, 11, 9, 23, 39, 29, 22, 18, 10, 10, -2, -9, 0, + 9, 5, 21, 3, 13, 25, 15, 30, 17, 14, 16, 17, 1, -4, 1, 15, 10, 12, -4, 1, -17, -17, -18, 2, 6, 24, 37, 33, 30, 23, + -12, -37, -40, -78, -80, -60, -70, -46, -62, -35, -55, -53, -40, -39, -26, -19, -5, 13, 16, 8, -19, -13, -14, -5, -6, 3, 3, 1, 5, -2, + -3, 5, 6, 0, -7, -3, -10, -3, 5, -5, -4, -1, 2, -5, -18, -18, -15, -8, -11, -13, -8, -5, -5, -9, 6, 10, 10, 16, 5, -7, + -9, -12, -5, -1, -5, 8, 3, 9, -2, -9, -9, -6, -4, -10, -17, -15, -5, 0, 4, 5, 3, 4, 12, 2, 1, -14, -20, -31, -38, -33, + -15, -16, -4, -11, -4, -3, 1, 1, 7, 6, 5, 16, 0, 9, 2, 5, 11, 2, 0, 3, -3, -7, 12, 20, 24, 28, 33, 38, 28, 15, + 17, -12, -24, -36, -49, -41, -34, -37, -38, -37, -36, -17, -8, 2, 13, 16, 13, 16, 21, 30, 2, 13, -11, 75, 48, 20, 41, -35, -5, 37, + -18, 0, -1, 12, 10, 8, -2, -10, -15, -1, -7, 9, -1, 17, 13, 6, 0, -7, -6, 7, -3, -19, -11, 2, -2, 11, 12, -10, 3, 16, + 7, 20, -1, -1, -9, 8, 13, 0, -4, 5, 4, -3, 14, 19, -5, -8, 7, -6, 4, 7, -7, -13, -11, 6, -23, -5, -9, -1, 0, 8, + -6, -18, -18, -11, -16, -17, -6, -9, -19, -6, 5, -8, 7, 6, -6, -5, -12, -7, -5, -7, -17, -5, 1, 2, 8, 1, -5, -13, -12, -22, + -4, 8, 21, 29, 3, -8, -4, 3, 7, 16, 11, -2, -12, 13, 8, 10, -8, -13, -1, 2, -15, -20, -7, -7, 2, 9, 9, 10, 14, 19, + 21, 12, -11, -7, -5, -15, -2, 0, 7, 17, 14, 27, 8, 8, 12, -4, 1, 5, 32, 15, -1, 9, 7, -18, -8, -16, -37, -59, -46, -26, + -8, -2, 6, 26, 28, 38, 30, 4, -19, -19, -24, -19, -9, -1, 16, 17, 33, 17, 10, 4, -7, 8, 12, 28, 27, -10, -10, -13, -12, -12, + -8, -6, -4, 0, 3, 1, 4, 0, -4, 7, 6, 4, 6, 14, 10, 15, 8, 3, 5, -2, 6, 5, 1, 5, 1, -2, -7, -13, -5, 0, + 5, 3, 0, -3, -6, 1, 1, 4, 13, 15, 12, 9, 3, 4, 11, 4, -13, -10, -10, -5, -1, 4, 2, 3, 6, 3, 14, 17, 16, 10, + 8, 0, -17, -18, -22, -15, -22, -27, -22, -13, -17, -13, -19, -20, -20, -17, 0, 18, 40, 31, 23, 34, 14, -12, -14, -20, -29, -42, -22, 0, + 6, 22, 51, 57, 56, 31, 2, -40, -75, -99, -126, -127, -101, -81, -46, -23, -13, -24, -36, -24, -22, -23, -12, 28, 41, -5, -34, -96, 57, 44, + -22, 16, -29, -9, 38, -38, 10, -40, 25, 18, 23, -27, 16, 22, 6, 22, 12, 7, 29, 13, 9, 11, 21, 10, 9, -3, -16, -3, 5, 15, + 11, 28, 36, 26, 19, 40, 17, 3, -4, -2, 1, 8, 13, 13, 20, 9, 7, 27, 37, 32, 21, 11, 5, -3, -1, 0, -5, -3, 1, 7, + 3, 4, 0, 5, 0, 4, 3, 6, 1, 9, 0, 0, -6, -2, -6, -3, 4, -2, 7, 1, 1, 4, 3, 0, 1, 1, -2, 1, 4, -2, + -1, 6, 0, -9, -9, -3, -2, 1, -6, -8, 0, -1, -6, 2, 12, 7, -2, 3, 12, 10, -2, -4, -5, -10, -2, -4, -7, -5, -1, -10, + 2, 12, 0, 7, 6, -1, -4, 0, -4, -2, -4, 4, 4, -1, -2, -2, -2, -3, -8, -7, -3, 0, 2, 0, -1, 4, 0, 0, 0, -5, + -4, -11, 1, 9, 14, 3, 4, 0, -4, -2, -6, -3, -3, 2, -1, -3, 0, 4, 5, 5, 3, -4, -3, -6, -15, -8, -4, -6, -5, 0, + 5, 7, 1, 1, -2, 4, 5, 5, 0, 6, 0, -2, -7, -2, -4, -2, -5, -5, 1, 1, -1, 2, 1, 0, -3, -4, -1, -4, 1, 3, + 5, 3, 2, 4, -1, -5, 1, 3, 3, 3, -3, -1, -5, -2, 5, -1, 5, 3, 3, 1, -4, 0, 1, -1, 2, -2, -2, 0, -3, 1, + 2, -5, -5, 1, 2, -3, -8, -3, -4, 0, 5, -1, -2, -1, -2, -4, 1, 2, -2, -1, -1, -2, 0, -6, 5, 4, 1, 0, 5, -1, + -10, -8, -4, -1, 5, 7, 8, 5, 2, 0, -3, 2, -9, -6, -6, -8, -2, 0, -6, 4, 1, 1, -1, -7, -8, -6, -2, 7, 2, 4, + 39, 2, -18, -5, 25, -11, -2, -1, -7, 1, -5, 8, -7, -5, -5, -4, 0, -2, -1, -2, -13, -17, -4, -5, -3, -5, 4, -3, -4, -2, + 2, 2, -1, -4, -2, -2, 7, 2, 4, -7, -5, 6, 7, 11, 3, 5, 8, 6, 3, 8, 0, 3, -6, 3, -3, 0, 3, -1, 2, 1, + 3, -4, 5, -3, 17, 9, 1, 2, 7, -3, 2, 2, -2, 3, 5, 8, 2, 1, 10, 2, 1, 3, -5, -6, -5, -2, -6, 6, -1, 1, + 2, -1, 2, 6, 2, 3, 8, 1, 1, -6, -2, 1, 5, -6, -6, -7, -3, 4, 4, 10, 7, 1, -4, 10, 3, -6, -3, -3, -11, -9, + 1, -4, 1, 1, 2, -1, 3, -5, -4, 2, -4, -5, -4, 1, -6, -4, -4, -5, -2, -3, -9, -5, -3, -10, -8, -7, -2, 1, 1, 1, + 3, -7, -6, -6, -4, 3, 1, -2, 6, 8, -3, 0, 1, -10, 3, 0, -5, 8, 3, 0, 2, 2, 0, 0, 0, -8, 7, -7, -8, -3, + -8, -1, 1, 2, -4, 3, 1, 3, 1, 1, -1, 1, 2, 4, 3, -4, -4, -6, -1, -5, -6, -1, -2, 1, -3, 0, -1, 5, 1, 0, + -2, 1, -4, 2, -5, -2, 4, -2, 4, 0, 4, 2, 2, -3, -3, -2, 1, -1, 2, -3, -1, -5, 1, 0, 3, -4, -1, 1, -8, 0, + 3, 6, -2, 0, 7, 2, -4, -2, -1, 0, 2, -6, -7, 3, 4, 1, -2, 10, -2, 6, 1, 1, 2, 5, -3, 3, 0, 3, -5, -2, + 4, 8, 0, 1, -5, 1, 1, -4, -4, 3, 3, 6, 3, 0, 0, 0, 3, 11, -1, -8, -7, 2, 1, 0, 5, 0, 4, 3, -2, -4, + 1, 0, 0, -2, -3, 32, 3, -8, 10, 19, -2, -7, 11, 1, -6, -2, 5, 0, -3, 9, -5, 4, 13, 3, 6, -15, -9, -4, -8, -11, + -8, 4, -4, 8, 1, -1, 5, 3, -4, 5, -4, 5, -2, 3, 0, 5, 5, 17, 0, 13, 4, 8, 3, 7, 11, 5, 1, 2, -1, 1, + 4, 4, -5, 1, 3, -5, -4, 4, -5, 23, 1, 3, -3, -3, 2, -7, -2, -2, 4, 1, 4, 0, 1, 6, 5, 4, -3, -1, -3, -2, + -1, -4, -3, -3, -7, 3, -1, 5, 11, 8, 2, -4, -10, -10, -5, 0, 0, -6, -2, -8, -3, 6, 5, 1, 4, 8, 10, 2, -1, 3, + -2, -7, -7, -9, -3, 1, -4, 0, 0, 5, 8, 8, 6, 8, 6, 3, 2, 1, -1, -6, 0, 7, 3, 9, 2, -10, -5, -7, -2, 1, + 3, 9, 6, 4, -1, -1, 0, 2, 2, -2, 0, -1, -4, -1, -2, 4, -12, -3, -12, -4, -3, 0, 7, 0, 4, 6, 0, -4, -3, 0, + -3, -3, -9, 2, 1, -2, 8, 12, 0, -2, -3, -3, 2, -2, -2, -4, -6, -4, -3, 3, 3, -1, -3, -1, 2, -1, 1, 0, 5, 2, + 5, 1, -2, 3, -4, 1, 3, -1, -5, -1, 0, -5, -8, -10, -6, -2, -1, 0, 2, 5, 6, 6, 8, 7, 9, 3, 1, -7, -5, -3, + -5, -6, -4, -6, -1, 0, -1, -2, 0, -1, 0, -1, -1, -1, -2, 10, -3, 0, 2, 3, 0, -1, -1, -2, 1, 0, 1, -3, 3, -2, + 8, -3, 0, 3, -2, 2, -3, 1, 0, -5, 1, 0, 1, 1, 1, 1, 8, 4, 0, 4, 3, 3, 3, 1, 4, 4, -2, -13, -7, 1, + 2, 7, 3, -5, 11, 2, -3, 5, 3, -7, 27, -3, -3, 9, 8, 4, 11, -7, -3, -11, 8, 15, -2, -14, -6, -8, 2, -4, 2, -1, + -4, -6, -5, -2, -9, -2, 0, -6, 1, -5, -1, 3, 1, -4, 4, -16, -6, -5, 6, 0, 6, -3, -2, 8, -4, 2, -4, -10, -7, 6, + -5, 0, 8, 0, -3, 0, 4, -4, -4, -3, -4, -6, -8, 0, 25, 2, 0, 1, 0, -6, 3, 14, 19, 4, -5, -6, -11, -1, -7, -3, + 2, -6, -12, 3, -8, -8, -7, -2, 5, 3, 4, 7, 8, 17, 11, 1, 9, 2, -3, 1, -3, 4, 1, -9, -12, -2, -4, 0, -3, 14, + 9, -6, -6, -3, -6, -5, 1, 3, -4, 0, -9, -10, -4, -10, -9, -6, -1, -6, 2, 1, -11, -3, -2, 1, 1, -5, -3, -5, -3, 8, + -9, -9, -2, -2, 2, -7, 0, -2, -2, 4, 5, 2, 8, 1, -8, 7, -12, -14, -14, -6, -3, -9, -4, -6, 0, -10, -10, -7, -2, -5, + 2, 6, -2, -2, 7, 3, -4, -4, 7, -2, 4, 6, 4, -17, -11, 0, -5, -4, -6, -2, -5, 0, -2, -3, -9, -2, -2, -1, -6, 0, + -4, 1, -2, 3, 0, 5, 5, 2, 2, 2, 6, 4, 1, 4, 5, 3, -5, -4, -5, -2, 2, 10, 9, 2, -2, 5, 0, 1, 6, 8, + 6, 0, -4, -4, -3, -1, 2, 0, -3, -2, -1, -3, -10, -6, -3, 2, -2, -2, -2, -4, -3, -6, -7, -2, 4, 5, 0, 4, 11, 2, + 4, -4, -1, 10, 13, 10, 3, -1, -2, 10, 3, -2, -3, -11, 0, -2, -4, -5, -4, -9, 3, 1, 0, 2, -1, -1, 2, 0, 6, 11, + -2, 0, -3, -3, 8, 2, 6, 1, 1, 8, 2, 1, -3, -16, -25, 52, 7, -5, 8, 19, 8, -6, -18, -10, -10, -1, 15, -2, -7, -1, + -1, -4, -8, 4, 1, -11, -6, -4, -5, 7, 9, -8, 8, -5, -2, 6, 4, 13, 1, 5, -10, 1, -7, 3, -5, 0, -17, -10, 6, -3, + -3, 2, 1, 0, -7, 0, -1, -2, 0, 3, 0, 8, -4, -7, -4, 2, -4, -8, 2, 16, -13, -7, -13, -6, 1, 3, 8, 14, 15, 3, + 3, 8, 8, 5, -1, -1, -7, -10, -2, -13, -7, -8, 9, 11, 0, 7, 3, 11, 11, 12, 14, 14, 7, 0, -1, -5, 4, 6, 0, 2, + 4, 6, 14, 2, 11, 3, 8, 3, -1, -5, -6, -10, -4, 0, -9, -10, -3, 1, -4, -3, -1, 1, 5, -2, 2, -2, -6, -4, -1, -13, + -3, -3, -5, 0, -8, -13, -11, -1, 0, -3, -2, -1, -1, -3, 1, -3, -11, -7, -18, -14, -9, -17, -18, -11, -13, 0, -8, -8, -5, 0, + -5, -1, 4, 6, 10, 13, 14, 13, 13, 7, 24, 17, 5, 20, 11, 19, 14, 3, -9, -24, 8, 3, 1, -1, 1, 2, 3, 4, 3, -4, + -4, 0, -2, -1, 2, 6, 0, 4, 9, 5, 5, 4, 7, 9, 6, 3, -2, -1, 6, 6, -2, 1, -5, -5, -9, -6, -2, 1, 0, -3, + 0, -4, -2, -6, -3, -4, -1, 6, 5, 7, 5, 3, 2, 10, 8, 6, 3, -3, 1, 3, 1, 6, 3, 3, -4, -7, -7, -5, -7, -12, + -10, -9, -9, -10, -11, -6, -6, 6, 6, 2, -9, -7, -6, -1, 6, 7, 4, 7, 2, 1, -6, -13, -9, -4, 0, 3, 5, -3, -1, 2, + -1, 0, 8, 10, 8, 1, -1, -8, 1, 7, 10, 12, 3, 6, 3, 4, 1, -1, -17, -40, 111, 36, 10, 41, 42, 27, 8, -8, -10, -18, + -1, 23, 3, -7, 9, 0, -10, 9, 11, -6, -8, -3, 12, -2, 12, 14, 12, -6, -1, 2, 6, -5, -3, 4, -7, -9, -7, -10, 14, 1, + -3, 0, -9, 2, 2, -8, -2, 5, 1, -3, 2, -6, -2, 2, -3, -2, -2, 3, -6, -3, 2, -4, 6, 5, -24, 2, 3, 10, -3, 2, + 2, 12, 13, 10, 9, 11, 17, 19, 27, 16, 6, 4, 10, 5, 4, 8, 15, 18, 27, 28, 31, 26, 16, 17, 16, 18, 27, 16, 20, 10, + 13, 9, 2, -3, 2, 4, 2, 5, 19, 22, 16, -1, -2, -5, -22, -12, -17, -19, -37, -38, -33, -31, -23, -15, -15, -20, -14, -18, -22, -24, + -29, -26, -11, -7, -9, -17, 2, -4, -12, -10, -28, -26, -35, -21, -18, -19, -9, -17, -11, -16, -9, -12, -11, -9, -12, -13, -14, -8, 4, -4, + 7, -2, -1, -17, -14, -17, -13, -12, -2, 0, 6, 5, 3, 3, -4, 12, 4, -6, 10, 8, 29, 22, 15, -28, -64, 14, 10, 6, 1, 3, + -3, -4, 0, -1, -7, -5, -3, -3, -1, 0, 2, 3, -1, 6, 8, 10, 12, 5, 8, 12, 10, 7, 2, 5, 8, 5, 7, 8, 1, 1, + 1, -4, -4, -10, -5, -5, -2, -6, -6, -3, 0, -1, -4, -6, -5, -6, -11, -9, -14, -18, -17, -20, -19, -11, -11, -10, -8, -5, -12, -12, + -9, -1, 3, 2, 5, -1, 5, -1, 7, 5, -3, 0, -10, 6, 1, -1, -12, -6, -3, -6, -8, -9, -12, -27, -24, -28, -29, -26, -3, -4, + 4, 10, 19, 16, 15, 10, 7, 5, 4, 5, 9, 10, 6, 9, 1, 3, 0, 9, 4, 12, 14, 0, -22, -71, -113, 127, 44, 12, 75, 63, + 51, 23, 15, 10, -23, 1, 15, -21, -8, 15, -18, -5, -1, 9, -15, -12, -4, 15, 2, 8, -5, -10, -10, -6, -9, -9, -4, -3, -7, -8, + -19, -11, -12, -11, -6, 15, 6, -1, 11, 9, -4, -3, 0, -4, 2, -1, -2, -4, -1, -2, -6, 2, 10, -11, 7, -5, -6, 6, 0, -14, + -5, 1, 4, 5, 0, 1, -3, 1, 2, 0, -2, 2, -2, -1, -2, 0, -6, -4, -5, 0, 6, 7, 3, 3, 3, 3, 3, 0, 2, -1, + 3, -1, 2, -3, -1, -5, -1, 1, 7, -1, 3, 2, -3, -2, -10, -16, -9, -9, -4, -1, -3, -3, -8, -3, 0, 5, 4, 10, 6, -6, + 2, -3, 3, 6, 0, 1, 3, 1, 2, 6, 4, 0, -6, -2, -5, 2, 7, 4, 2, 9, 5, 1, 4, 7, 2, 2, 6, -3, -8, -7, + -6, -7, -2, 1, 7, -3, 2, -9, 2, 1, 6, 5, 3, -1, -5, -10, -12, 5, 8, 1, 4, -4, -9, -4, -1, 1, -2, -3, -5, -1, + 7, 5, 2, 2, -2, -4, -2, -4, -7, -4, -4, 1, 5, 1, -2, -1, 3, 5, 6, 3, 6, 5, 3, -2, 1, 0, 6, 2, -2, -9, + -8, -10, -8, -7, -6, -5, -2, 2, -1, 3, 1, 0, 5, -6, -11, -7, -2, 3, 6, 7, 4, 2, 2, 6, -2, -2, -1, 3, 1, 0, + 3, -1, 2, -1, -4, -5, 1, 4, 3, 0, 1, 3, 3, -2, 0, 1, 4, 0, 1, -1, 2, 2, 2, -2, 5, -1, 2, -7, -6, -2, + -4, 1, 2, 3, -2, 0, 4, -4, -4, -1, 0, 3, 6, 2, 8, 0, -1, 3, 4, 8, 4, -1, -3, 2, 2, 1, -4, -6, -10, -10, + 9, -28, 17, 18, -8, -16, -1, 3, -3, 17, 10, -1, -3, -7, -6, 15, 11, -3, -2, 2, -7, -5, 0, 1, -10, -2, 0, -11, 6, 17, + 15, 15, 7, 0, 1, 5, -1, -4, -4, -7, -9, 4, -1, -7, -7, 2, -3, -2, -4, 4, 4, -2, 4, 3, 3, 4, -1, 1, 0, 3, + 2, 3, 7, 2, -23, 2, -2, -2, 0, -8, -10, 0, 3, 1, -2, -3, -6, 0, 2, 1, -2, 0, 0, 1, 5, 0, -2, -2, 3, 11, + 0, 4, 3, 3, 5, -3, -11, -3, 1, 0, 0, 2, 2, -1, -2, 2, 1, -3, -2, -1, 1, -3, -4, -2, 1, 1, 5, 3, 10, 7, + 11, 5, 16, 11, -2, -6, -3, -6, -4, -3, -9, -4, -3, -3, 1, -3, -7, -1, -6, 1, 8, -1, 5, 0, 4, 3, 0, 4, -3, -5, + 0, 8, 10, 7, 15, 3, 4, 8, 3, 1, -5, 1, -2, 5, 7, 0, -1, 2, 2, 3, -3, -4, 6, 1, 1, -2, -3, -5, 3, -2, + 9, 4, 8, 2, -9, 6, 5, 3, -1, -4, -2, -4, -3, -4, -7, -4, 0, 2, 0, -3, -5, 0, 5, 2, 5, 0, 1, -1, -1, 1, + 4, 7, 4, 3, 1, 0, 1, -3, 1, -3, -2, 7, 7, 6, 7, 5, 1, -3, -6, -2, -2, -7, 1, -3, 2, -2, -4, -6, -2, 1, + -1, 3, 12, 2, -1, -2, -6, 1, 0, -5, -4, -2, -5, -4, -1, 3, 2, -1, 3, 3, 0, 0, 2, 1, 2, -1, 6, 1, 1, -1, + -3, 0, -3, 0, -7, -3, 1, -6, 1, -2, -1, 5, 2, 0, -1, 2, 5, 6, -4, 2, -3, -3, 1, 1, -1, 0, -5, -8, -4, -1, + 0, -2, 3, -2, 0, 3, -14, 12, 9, -5, -14, -8, 11, -4, 6, 16, -1, 7, -6, -4, -1, 4, 6, -4, -3, -8, -1, 0, -1, -8, + -8, -6, -5, 6, 5, 15, 6, 10, 3, -3, 3, -2, 4, -5, -2, 2, 1, -2, -10, -3, -3, -2, 5, -2, 6, 10, -9, 3, -2, 7, + 7, 5, 4, -2, 2, 4, 3, 9, 4, -11, 5, 3, 7, 12, 7, -6, -7, 1, 0, 8, -1, 4, -2, -8, -4, 1, 3, 5, 4, 0, + -8, -5, -4, 5, 3, -10, -9, -9, 1, 5, -1, -2, 1, 1, -3, -5, 3, 7, 13, 13, 13, 9, 1, 2, -2, -1, 0, 1, 9, 14, + 6, 0, 6, -1, 4, -9, 3, 14, 9, 4, 14, 4, 6, 12, 13, 4, 1, -11, -1, 1, -8, -18, -7, -4, 3, 8, 10, 5, 4, -2, + -8, 7, 3, 5, 5, 0, 3, -2, -3, 2, -3, -7, -14, 4, 2, -3, 3, -7, -8, -5, -5, -8, -1, -1, 0, 0, -6, 1, 2, 2, + 1, 1, 7, 0, 5, 4, 0, 2, -3, -1, -1, -2, 0, -2, 1, -5, -6, 0, -3, -1, -1, -1, 0, -2, 1, -5, 2, 2, 0, -1, + -4, -4, 3, 5, 1, 5, 1, -2, 2, -1, -5, -8, -5, 1, -3, -1, 3, 12, 5, 2, 6, 3, -2, 0, -1, -4, -3, 4, -1, 3, + 3, 1, -1, -3, 1, 3, 2, 0, 1, -1, -1, 3, 7, 0, -1, -2, -1, -3, -4, 1, -1, -3, 0, -1, -6, -2, -5, -5, -4, -2, + 2, -1, 2, 0, 1, 3, -1, -3, 0, -7, 2, -1, -3, -1, 2, 6, 2, 5, 0, 4, 1, -2, -4, -3, -7, -10, -10, -4, -3, 0, + 0, -1, -2, -4, -7, -6, -1, 0, 1, 5, 3, -9, 7, 12, 6, -19, -7, 18, -8, 3, 20, 0, -5, -1, -7, 3, 2, 1, 0, 0, + -4, -8, -1, 5, -8, 2, -3, 4, 8, 12, 12, 10, 5, 2, 0, 7, -2, 5, -5, -2, 1, 2, -6, -8, 1, 3, -6, 2, 6, 1, + 6, 5, 3, -1, -1, 1, 0, -1, -4, 0, -4, -1, -1, -7, -11, 0, 0, 13, 9, 4, 4, -5, -5, 2, 0, 0, 0, -2, -6, 1, + 4, 1, -6, 2, 4, -4, 4, 8, -2, -8, -8, 3, 2, 10, 5, -4, -3, 1, -1, 3, 2, 6, 10, -2, -10, -7, 0, -7, -3, 6, + 5, -5, 3, 13, 14, 2, 5, 3, 0, 7, 4, -1, 6, 6, -5, 5, 9, -3, 0, 8, 5, 1, -3, 3, -2, -3, 4, -5, 2, 11, + 7, -7, 6, 5, 9, 4, 0, 11, 5, -2, -9, 1, -9, -19, -12, -3, -5, -4, 5, 2, -11, -8, -7, 5, 4, 6, 6, 10, -1, 3, + 1, -3, -7, -2, -6, -1, 6, -3, -8, -7, 1, 0, -6, -2, -3, 1, 2, 2, 0, -2, -5, -6, -5, -2, -4, -1, -5, -3, -2, -4, + 2, 2, 4, 3, 3, 4, 3, 5, 2, 3, 1, 1, 5, 0, 1, -6, -6, -8, -8, -2, -3, 1, 4, 2, 2, 0, 0, 5, 2, -1, + 6, 7, 7, 1, 1, 2, 5, 3, -1, 3, 6, 2, 3, 1, 1, 3, 5, 3, -1, -3, 1, 3, -3, -2, 2, 4, 3, 0, -2, -4, + 5, -2, -4, 3, 4, 8, 4, -2, 3, -3, -2, 0, 0, -2, 6, 3, -2, -4, 0, 4, -5, -1, 7, -1, 1, -4, -1, 0, -9, -10, + -10, -15, -17, -14, -4, -7, 5, -5, -9, -5, 0, -6, -6, -7, -6, 1, -9, -1, 2, 12, -24, 0, 24, -4, -3, 6, 2, -11, -3, -7, + -2, 12, 5, -5, -7, -3, 0, 0, -1, -9, 0, -15, -1, 7, 7, 5, 13, 4, -1, 3, -3, -6, -3, 0, -7, 5, 0, -6, -7, 4, + -4, 3, 1, -5, -5, 3, 5, 2, 2, 3, 4, 2, 0, 2, -1, 3, 1, -10, -6, -7, 2, 1, 9, 19, 15, 6, 5, 5, -5, -2, + 8, -4, -4, -9, -10, -8, 2, -5, 8, 8, 1, -3, -2, 4, -4, -13, -18, -13, -9, -14, -17, -17, -12, -21, -13, -19, -9, -10, -15, -15, + -5, -11, -20, -27, -17, -6, -7, -1, 17, 12, 1, 1, 0, -8, 1, 9, 2, -8, -10, -15, -2, 0, 2, 0, 4, 7, 0, -1, 9, 10, + 6, 6, -1, 6, 2, 11, 10, 14, -1, 10, 7, 3, 12, 7, 13, 9, 16, 4, 0, -1, -1, 16, -2, 8, 5, 8, 4, 7, 7, 12, + 6, 15, 2, 2, 1, 5, 1, 5, 2, -6, 3, 3, 5, 7, 2, 8, 3, 4, 14, 13, 3, 2, 2, 9, 5, 4, 6, 5, 3, -1, + -3, -6, -4, -4, -9, -8, 0, 0, 3, 6, 5, 5, 7, 2, 0, -3, -3, -6, -7, -5, -12, -9, -6, -9, -7, -2, 4, 5, -5, -7, + -5, -8, -9, -11, -12, -1, 3, 5, 7, 2, 1, -1, 3, 4, 0, -3, -4, 1, -1, -4, 5, 0, 2, -2, 5, -3, 2, 3, 0, 4, + 2, 3, 7, 2, -1, 1, 3, 0, 3, 7, 0, 2, -3, -1, -2, 0, 3, -1, -3, -5, 0, -2, -1, -1, 4, 3, 3, -4, 5, 0, + 0, -4, -1, 0, 4, 1, -2, -3, -2, -4, -4, -2, -2, 1, 0, -1, -2, -2, -1, 0, 18, -40, 3, 18, 20, -33, -12, 34, -13, -30, + 3, -11, -13, 0, -2, -4, 13, 4, -11, -8, 2, 1, -2, 5, -7, -2, -1, -3, -2, -8, 5, -5, -4, -10, 2, -8, 0, 1, -2, -1, + 1, -10, -7, -11, -4, -7, 3, -12, -8, 5, 2, 4, 4, -2, -2, 0, 3, -2, -2, 4, 5, 4, -2, 5, -10, -15, -13, 3, 9, 15, + 6, -2, -3, -8, -11, -15, -21, -19, -19, -13, -14, -8, -4, 3, 10, -6, 3, 7, -1, -11, -17, -17, -8, -9, -5, -16, -18, -26, -20, -19, + -14, 2, -1, 3, -2, -9, -23, -30, -34, -30, -17, -9, 2, 5, 11, 6, 10, 8, 7, 2, 4, -2, -1, -2, 1, 2, -12, -9, 10, 22, + 7, -1, 0, -1, -4, 4, 11, 10, 12, 19, 14, 14, 10, 6, 10, 3, 11, 4, 9, 7, 4, 6, -3, 0, 5, 7, 15, 6, 14, 10, + 3, -2, -3, -1, 2, -4, 3, -4, -4, -10, 0, -8, -1, 4, -3, 20, 18, 14, 0, -8, -18, 6, 16, 9, 20, 8, 7, 3, 2, 4, + 2, 3, 1, -4, -5, 0, -4, -5, 1, -3, 4, 7, 5, 11, 7, 6, 12, 8, 8, 3, 2, -3, -5, 0, -4, -7, -3, -7, -8, -7, + -4, 6, 5, 1, 1, 2, -11, -17, -19, -17, -9, -2, 4, 12, 15, 19, 16, 8, 6, 6, 5, 4, 0, 1, -1, -6, 1, -2, 1, 8, + -3, -5, -4, 0, 3, 3, 2, 4, 10, 8, 0, -5, -9, -10, -9, -3, 1, 6, 9, 10, 11, 10, 3, -2, -7, -1, 1, 5, 6, 11, + 9, 8, 9, 7, 0, -2, -4, -7, -13, -9, -11, -3, 1, 9, 7, 5, 6, 3, 0, 0, -8, -12, -3, 0, 8, 36, -127, 10, 116, 0, + -78, 0, 61, -34, -15, 25, -4, 12, 14, -32, 26, 44, -10, -18, 27, 18, -20, 9, 25, 3, -4, 10, 7, 2, 7, 11, 5, -2, -1, 0, + 10, 3, 1, 1, -8, -5, -18, -12, -7, -6, -9, 3, 9, 3, -7, 6, 4, 6, 3, 0, 9, 8, 15, 11, 9, 10, 15, 7, 17, 0, + 2, 7, 8, 4, 3, 1, 0, -3, -5, -1, 1, 3, 8, 3, 4, 3, 1, 1, 4, 0, -1, 0, -2, -3, -4, -5, -3, -4, -2, -5, + -2, -3, -3, -2, -4, 1, 5, 0, 4, 1, 5, -1, 1, 0, 7, 1, 3, 2, 2, -5, -1, 1, 3, -3, -3, -6, 0, 1, -3, 0, + 6, -2, 4, 6, 2, -2, 0, 1, 1, -2, -5, -4, -4, -1, -1, 0, -6, -6, -8, -5, -9, 0, -3, -7, 0, -4, 5, 1, -7, -2, + -6, -1, -2, -1, -3, -7, -2, -3, 2, 3, -7, 0, -2, -2, -3, 1, 0, 4, -2, -5, 4, 2, 7, -1, 0, -1, 7, -3, -4, -7, + -2, -2, 1, 0, -4, -5, -6, -7, -7, -4, -7, -5, -7, -3, -6, -3, -6, -4, -5, -3, -6, -2, -4, -1, -5, 1, 0, 3, -1, -1, + 2, 6, 5, 1, 7, 2, 3, -1, -3, -1, -5, -2, -4, 1, 0, -3, -1, -7, -2, -5, -2, -4, -3, -5, -3, -2, 3, -3, 0, 2, + 3, -1, 1, 0, 1, 3, -2, -4, 1, 5, 5, 0, -1, -2, -5, 0, 2, 2, 0, -1, 0, 4, 4, 3, 5, 2, 2, 0, 3, 2, + -1, -4, -2, 3, -2, -2, 3, -1, 4, 4, 1, -4, 0, 3, -3, -1, 2, 1, -4, 0, 4, 8, 8, 5, 6, 4, 4, 4, -2, -12, + -8, 6, 4, -10, 9, -5, -6, -10, 5, 12, -4, -14, -5, -10, -11, -18, -7, 1, 1, -4, -7, -3, 1, 2, 1, -10, -2, 1, 6, -3, + -3, -1, 0, 4, -3, -1, 4, 1, 2, -3, 3, 1, 6, -3, 4, 0, -4, 0, -2, 1, 14, 1, 3, 5, 8, 2, -4, 3, 2, 2, + 2, 1, 2, -2, 11, 4, 2, -5, -6, -2, 2, -4, 1, 2, -1, 2, 5, 5, 3, 1, 0, -1, 0, 3, 3, 0, -4, -5, -1, -6, + 2, 7, 5, 8, 5, -2, 3, -2, 2, 2, 0, 3, -1, 0, -5, 1, 1, 5, 3, -7, -6, 2, -5, -4, -4, 4, -2, 0, 1, 3, + -6, -2, 0, -2, 1, 3, -6, -7, 1, -6, -8, -7, -9, -5, 0, 2, 14, 7, 2, 8, 1, 4, 2, -12, -7, -7, -1, -3, -2, -2, + 2, 3, 0, 2, -3, -7, -3, 2, 3, -1, 3, -2, 7, 1, 3, -5, -4, -6, 1, 2, 4, 3, 2, -1, -6, -3, -6, -6, -1, 4, + 1, -1, -2, 3, 0, -5, -6, -4, -2, 0, 0, 1, -3, 2, 0, 5, 0, 5, 3, 1, 3, 5, 0, 0, 4, 1, 1, 2, -1, -2, + 0, 3, 5, 1, 6, 3, 1, 2, 6, 3, 3, -1, -1, -4, -7, -3, -2, 0, 0, -1, 1, 0, 1, 3, 3, 9, 5, 4, 1, 2, + 1, -3, -2, -3, -1, 1, -5, -3, -2, -1, -4, 2, 2, 3, 2, 6, 6, 4, 6, 0, 0, -2, -3, -3, -7, -1, 2, 3, -4, -2, + 4, 2, 2, 1, 6, 4, 4, 1, 0, -3, 3, 2, 0, -2, -3, -4, -7, -3, 2, 2, -3, -4, -2, 4, 6, 4, 5, 0, 3, -2, + 0, 1, -3, -1, -5, -3, 7, 6, 6, 0, -10, 0, 4, -2, 12, -1, -3, 0, -2, 5, -6, 8, 0, -1, 5, -6, -2, 3, 5, 1, + 6, -6, 0, 3, 2, 5, 1, 0, -4, -1, 8, 2, -7, -2, -2, 8, -2, -4, -7, -5, -2, -3, -2, 0, -1, 3, -4, 0, -1, -7, + -5, -2, -4, 3, -5, 6, 7, 6, 0, 10, 9, -4, 0, -1, 0, -2, 2, -1, -1, 8, 2, -4, 3, -2, 0, -2, -8, -5, 0, 1, + -2, -4, -10, -5, 1, 1, 0, -5, -8, -2, -5, -1, -2, 1, -9, -7, 2, 1, 1, -3, 1, 2, -2, 3, -1, 1, -4, -6, -5, 4, + 2, -3, -4, -4, 2, -4, 2, 2, -1, -2, -3, 4, 2, 0, 5, 0, 5, 2, 0, 9, -1, 1, 2, -9, 1, -2, -6, -2, -5, -13, + -8, -1, 3, -3, -10, -2, 1, -4, -6, 1, -4, -1, -5, -3, 4, 4, 5, 3, 1, -2, 0, 1, -10, 4, -5, 6, 5, 4, 6, 0, + 4, 1, 5, 4, 10, 1, 5, -2, 1, 6, 6, 2, 2, -1, 1, 3, 2, 2, 2, 1, 1, 4, 4, 4, -1, 0, 2, 1, 2, 0, + 3, 1, -1, -2, -7, -6, 1, 0, 3, 3, 4, 6, 3, 5, 3, 1, 1, 0, -5, -4, 1, -3, 0, -2, -3, 2, -3, -1, 1, 3, + 2, 6, 3, 2, 2, 0, 1, 3, 0, -1, 1, 0, 5, 4, 0, 0, 3, -2, 1, -2, -2, -1, -1, 1, -1, -5, -1, -5, 4, -6, + 3, -2, 4, 2, 0, 0, 3, 5, 0, 5, -1, -3, -1, -1, -3, -2, 4, 4, 0, -1, -3, -1, 1, 2, 4, 5, -2, -3, 1, 4, + 2, 3, 2, -1, -3, -7, -1, -4, 0, -7, 0, 1, 8, 5, 3, -10, 6, 1, -6, 0, -1, 0, 2, -4, 2, 0, -1, 4, 6, -2, + -5, -2, -4, 7, -4, 2, -7, -7, -1, -5, -5, -6, -2, -1, -9, -5, 2, -4, -4, -3, 1, -3, -2, 1, -9, -7, -3, 2, 3, 0, + 3, -4, 1, -1, -1, -4, -5, 1, 1, 3, 3, -1, -1, -4, 6, -1, -1, 1, -3, -6, -4, -6, -3, 2, 0, -4, -2, 0, -5, 0, + 7, 8, 5, 3, 2, -3, -5, -3, 3, 5, 4, 2, -1, -2, 3, 3, 1, 1, 6, 11, 12, 6, 4, 4, -4, -5, -2, 3, -6, -7, + -2, 3, 1, 0, -4, -1, 2, -1, 0, -1, -1, -3, 6, 6, 2, 2, 6, 2, -1, 3, 0, 0, -5, -2, -3, -2, 1, -6, -11, -5, + 0, 6, 4, 1, 0, 2, 3, -5, 1, 0, -6, -6, 4, 3, 2, -4, -4, -6, -1, -1, 2, 6, -2, 2, -1, -3, -3, 5, -3, -4, + -5, -5, 3, 2, -2, -2, -3, 1, 2, 8, 0, -1, 0, 4, 2, 3, 6, 3, 0, 0, -2, -5, 0, 1, 3, 2, 2, -3, -1, 3, + 3, 5, 3, 5, 0, -2, 0, -1, -2, -8, -6, 2, 4, 1, -2, -3, -4, 0, 1, -1, -6, -2, -2, -2, -4, 1, -3, -3, 0, 0, + 3, 1, 3, 1, 1, 2, 1, 0, 5, 5, 3, 1, 4, 4, -2, -1, 4, -1, -1, 2, -3, 1, 0, -2, 2, 1, 1, 3, -3, 3, + 1, 0, 1, 2, 0, 0, 2, -4, 4, 6, -1, 0, 6, 2, 5, 1, -1, -2, 0, -2, 0, 6, 0, -1, 3, 1, -6, -1, 0, 3, + -4, -4, 5, -2, 4, 1, 1, 6, 5, 4, 1, 6, 1, 7, 6, 14, 1, 6, 0, 5, -15, 10, 6, -7, 1, 2, -4, -12, -7, 5, + 7, 4, 1, -3, 1, 4, 6, 2, 2, 6, -7, -3, -3, 9, 7, -4, 1, 4, 2, -7, -5, -3, 2, 2, 9, 1, 2, 2, -5, -7, + -2, -2, 1, -1, 2, 2, -1, -1, -7, 2, 3, 0, 2, 2, 4, 3, 4, 1, -2, -5, 4, 7, 1, 1, -2, -4, -7, 3, -2, -3, + -2, -1, 7, 9, 7, 11, 5, 6, 6, 6, 7, 1, 3, -3, -1, -1, 5, 5, 1, 2, -4, -5, -7, -10, -8, -2, -7, -6, -2, -5, + -12, -4, -8, -7, -10, -7, -4, -14, -17, -12, -5, -13, -2, 1, -7, 0, -2, 3, 9, 11, 17, 13, 12, 7, 9, 8, 2, 6, -2, 3, + 6, 4, 7, 6, 3, 3, -2, -4, 3, -1, 1, -2, -10, -12, -8, -4, -8, 3, -10, 0, -5, -5, -1, -2, 0, -1, -6, -4, 2, -5, + -8, -13, -10, -9, -5, -1, 5, 4, 8, 9, 8, 4, 12, 5, 5, 2, 3, 1, 2, 3, -1, 2, 2, 5, 2, 2, 2, 0, 0, 0, + -3, 0, -2, -1, 2, 5, 6, 7, 7, 7, 3, 4, 1, 4, 1, 2, 1, 2, 2, 5, 2, 3, 1, 0, -1, -5, -3, -3, -4, -7, + -9, -6, -3, 1, 4, 5, 2, 0, 2, -1, 0, 0, 3, 0, 1, 0, 2, 4, 11, 10, 11, 10, 8, 2, 3, 2, 0, 1, -1, -4, + -3, -2, -3, 5, 0, 3, 1, 0, -1, -3, -2, -1, -5, -2, 2, -2, -1, 3, 3, 3, 3, 2, 0, 2, -4, 2, 1, 2, 0, -1, + -6, -4, 0, 3, -2, 4, 10, 8, 7, 11, 6, 3, 9, 1, -1, 3, -1, 0, 1, -1, 10, -22, 6, -16, -12, -15, 5, -7, -22, 19, + 8, 1, -8, -5, -1, 2, 16, 6, 3, 5, 5, 11, 5, -2, 0, 1, 1, 10, 11, 0, -3, 9, 9, 11, 4, 2, 4, 6, 5, 2, + 6, 7, 6, 1, 0, 1, -2, 7, 7, 6, 6, 4, 7, 9, 8, 2, 7, 5, 7, 4, 5, 9, 7, 2, 14, 11, 15, 13, 5, 8, + 9, 6, 7, 2, -2, -6, -5, -2, -2, -2, -2, 2, 3, 2, 1, -5, -4, -7, -7, -5, -1, 7, 17, 18, 10, 6, 1, 0, 10, 9, + 7, 10, 7, 11, 5, 3, 4, 10, 11, 8, 8, 7, 5, 2, 4, 3, 0, -4, -3, -8, -15, -14, -16, -10, -13, -13, -12, -10, -12, -12, + -20, -27, -21, -23, -23, -15, -6, 2, 4, 1, 2, -3, 5, 5, 11, 8, 13, 9, 5, 13, 13, 16, 17, 14, 7, 7, 14, 11, 19, 13, + 15, 16, 5, 6, 6, 11, 1, 6, 9, 9, 3, 7, 4, 5, 8, -7, -11, -13, -4, -8, -9, -28, -26, 1, -8, -4, -5, -1, -4, -4, + 0, 0, 3, 0, 0, -1, 0, 1, 0, -3, -1, -3, -6, -2, -1, -3, 1, -3, 1, 0, -1, -4, -2, -5, -3, -5, -7, 0, 0, 2, + -1, 1, 0, 0, -1, 0, 2, 6, 7, 6, 9, 7, 7, 4, 8, 7, 14, 15, 17, 10, 7, 7, 5, 7, 5, 6, 5, 8, 6, 8, + 3, 5, 0, 3, 7, 10, 14, 16, 15, 19, 19, 14, 9, 9, 3, 5, 2, -2, 0, 0, -6, -7, -10, -10, -7, -3, -5, 0, 4, 2, + 8, 7, 9, 11, 6, 9, 6, -1, -3, -3, -5, -5, -8, -5, -3, -2, 1, 3, 0, -3, -1, 5, 5, 6, 3, -17, -1, 22, -127, 88, + 90, -27, -23, -46, 49, 28, -13, -7, -7, -10, 12, 6, -19, -3, -12, 1, -10, -11, -5, -16, 6, 14, 14, 0, -9, -5, 4, -2, -3, -4, + -5, -9, -4, -2, -4, -10, -15, -1, -3, 0, 6, -6, -3, -7, 7, 3, 5, -3, -5, -5, -11, -6, -6, -1, -3, -9, -3, -14, -3, 22, + 4, 6, 6, 5, -1, 1, 0, 0, 2, 5, -5, -2, 4, 1, 5, 0, -2, 5, 8, 10, 6, 2, 2, 7, 2, 3, 2, 4, 3, 4, + 9, -1, -3, 5, 11, 6, 1, -3, 9, 5, 6, 2, 2, 2, 4, -1, 3, 9, 9, 1, 2, 8, 1, 6, 10, 3, -4, 4, 6, 3, + 1, -5, 2, 8, 2, 1, -2, -4, -4, -7, -1, -4, -6, -3, -1, 4, -2, -6, -5, -1, -4, 0, -5, 0, 0, -3, 8, 1, 0, 1, + 2, 5, 1, -1, 0, -4, 6, 2, 8, 5, 2, 4, 9, 3, 2, -1, -2, 6, -5, -2, -4, -1, 3, -4, 0, -1, 1, 6, -1, -5, + 4, -2, -3, -5, -4, -4, 0, -2, 0, 1, 2, -5, -2, -6, -7, -6, -6, -2, 1, -3, -2, 2, 3, 2, -3, -3, 2, 1, 3, -2, + 5, 2, 2, 2, 0, 2, -1, -3, -7, -2, -4, -5, -3, -2, -1, -5, -1, 2, 3, 9, 6, 2, 3, 1, 2, 0, -3, 0, 0, 0, + -1, -3, -5, 1, 4, 2, 4, -3, -2, 2, 4, 2, 2, -3, -5, 0, 1, -5, -1, -5, -4, 3, 9, -3, -1, 4, 6, 2, 2, 1, + -1, 2, -6, -5, -2, 0, -1, -3, -3, -3, 1, -2, 3, 0, -1, -4, 6, 4, 0, -6, -2, -1, 4, 6, 4, 1, 0, 4, 5, -17, + 1, 11, 20, -13, 7, -1, 0, -2, -1, -6, 2, -2, 6, 1, -8, -7, 4, 5, 6, 2, 3, 0, -3, 0, -6, -3, -2, 1, -1, 6, + 3, 8, 4, -4, -4, 3, 2, 6, -11, -15, -5, -4, 4, 6, 5, 6, 5, 2, 6, -6, 6, 5, 9, 0, 1, 1, -5, 4, 0, -15, + -3, 3, -1, -3, 37, 3, 3, 2, 0, -1, 2, 5, 3, 0, 8, 0, 3, 3, 4, 7, 2, 0, 0, -2, 0, 6, 4, 2, -5, -2, + -1, -2, -4, 2, -5, -10, -10, 0, 0, 0, 6, 3, 2, -3, 0, 13, 4, -3, -6, 1, 0, 4, -1, 1, -3, 0, -3, 1, -2, -5, + -13, -8, -8, -9, -8, -5, 1, 1, 2, -1, 0, -6, -3, -8, 5, 12, 1, -3, 6, 2, 2, -3, 2, -1, -2, 3, 7, 5, 2, -2, + 3, 3, -4, -3, -1, -14, -1, 5, 7, 1, -2, 0, 1, 4, -6, -4, -6, -11, -4, 4, 4, 8, 6, 2, -1, -1, -6, 5, -4, 0, + 2, -2, 5, 2, 9, -2, 2, -1, -5, -2, -4, 3, -1, 1, 4, 5, 5, 0, 2, 0, -3, -7, -5, -2, -3, 2, 1, 0, 3, -3, + -1, 1, 1, -2, -2, 2, -3, -3, 1, -1, -3, -3, -2, -6, -5, -3, -2, -1, -4, -2, 2, 0, 1, -1, 0, 1, 1, 4, 0, 6, + 2, -1, -1, -1, -5, 0, 3, 2, 2, -2, 4, -3, -5, 0, -1, 4, -4, -3, 3, 3, -3, 2, 4, 4, -7, -7, 2, 6, -3, 3, + 0, 6, 2, 2, 3, -1, 1, -1, -2, -3, -3, -2, 7, 1, -5, -4, -7, -7, 3, 5, 7, 5, 6, 9, -4, 0, -2, -3, 3, 3, + 4, 5, 2, 9, 2, 2, 11, 6, -8, -5, -5, -14, 9, 0, -5, 0, -5, 10, 5, 4, -8, 2, 5, 8, 8, 1, 9, 2, 7, -4, + -1, -2, -9, -7, -2, -4, 3, 6, 1, -2, 6, 2, -3, 0, 0, 5, 8, 1, 0, -6, 1, 4, 3, -1, 5, -4, 2, -2, -4, -3, + 1, -1, 2, 9, 2, 1, 2, -2, -6, 20, -2, 2, 0, -3, -6, -6, -5, 7, 6, 3, 3, 3, 9, -1, 4, 6, 1, 3, 1, 4, + 4, 2, 4, 0, 3, 2, -3, -9, 5, -2, 1, -3, 4, 1, -1, 1, -1, -4, -6, 0, 7, 0, -3, 0, -4, 1, -4, 1, 2, -1, + -12, -9, -3, 1, 6, 0, 12, 13, -3, 0, 8, -2, -5, -1, -5, 3, -1, -4, 3, 0, 0, -3, -3, 6, 3, 5, 6, 9, 8, -1, + 6, 2, 10, -5, 0, -5, 0, -1, 4, 0, -5, 3, -5, -5, 0, -7, 8, -1, 6, -3, -6, -2, -8, 0, -8, 3, 2, -4, 6, -8, + -3, -8, 6, 0, -4, 0, 0, 6, -1, -1, -4, 0, -1, -4, -3, 1, 4, 2, 3, 1, 1, 2, 4, 5, 0, -3, -3, 3, -1, -2, + 0, 0, 4, 2, -3, -1, 2, 7, 6, 2, 1, 0, -2, 2, -2, -3, -3, 1, -1, 0, 4, 6, -4, 0, 2, -2, 1, 5, 1, -3, + -8, -8, -2, 0, 0, 0, 3, -7, -9, -1, 5, 6, 5, 3, -1, -2, -4, -2, -3, 2, 5, 3, -5, 11, 0, 3, -3, 2, 5, -2, + 4, 3, 1, -1, -1, 3, 0, 2, 4, 6, 2, 1, -2, 2, -2, -1, 1, -3, -2, -11, -8, -5, 0, -1, -9, -1, -4, 1, 0, -3, + 1, 8, 4, 4, 0, 1, 1, 7, 3, -2, 2, 13, -4, -7, 0, -8, -5, 10, 2, 7, -12, -7, 12, 6, 1, -8, -8, -4, 2, -2, + -1, -3, -6, 3, -9, -4, -1, -3, -8, 2, -2, -3, -2, -4, -12, 4, 7, 6, -2, -3, -4, -6, -2, 4, 2, -4, -1, 1, -6, -6, + -1, 0, -4, -5, -7, -1, -1, 2, 2, 5, 9, 11, 4, 3, 12, 4, 4, -7, -4, -3, 2, 8, 11, 4, 1, 3, 4, 1, 5, -7, + -10, -15, -5, -1, -4, -13, -6, 4, 4, -4, -3, -9, -13, 0, 3, -6, -10, -3, 4, 2, -1, -3, 3, 4, -5, -7, -3, 6, -4, -5, + -5, 4, -5, 2, 0, 1, 8, 3, 7, 5, 5, 8, 2, -9, -7, -7, -14, -3, 5, -9, -5, -4, 6, 6, -4, -7, 0, -4, 0, 2, + -1, -1, 3, 2, 0, 2, 2, 3, 1, -2, 5, -11, 3, -4, -2, -5, -2, -11, -1, -14, -7, 1, 5, 1, -2, -2, -4, 1, -6, -1, + -3, 1, 4, 3, -4, 1, -3, 7, 11, 3, 1, 0, 4, 6, 8, 0, -3, -6, -8, -4, -3, 1, 5, 2, 1, 7, 4, 11, 3, -5, + -7, -4, -2, -5, -6, -3, -4, 3, 3, -2, -3, -2, 2, 3, 3, 7, 2, 4, 0, -5, -2, 2, 3, 2, 0, 3, 3, 1, 4, 2, + 1, 2, 5, 1, -4, -1, -3, -6, 0, -4, -6, 5, 2, 5, 5, 0, 0, -3, -4, 0, -4, -3, 7, 8, 3, -2, 7, 4, -1, 4, + 2, 3, 3, 5, -1, -1, 1, -9, -3, 5, 2, -2, 3, 1, 0, 3, 1, 6, 2, -2, -4, 0, -3, 3, 3, 2, 3, 2, 3, 4, + -2, 2, 3, -1, 0, -4, -4, -7, -5, -3, -5, 3, -3, 4, 1, 10, 3, 0, 2, 3, -3, -8, 6, -7, -9, 0, -15, -2, -8, 2, + 9, -6, -5, -3, 3, 5, 2, 4, -2, 9, -4, 2, -10, -4, 5, 5, 4, 0, -4, -2, 7, 4, 5, 5, -1, -1, -3, -7, -1, 5, + 4, 0, 5, 2, 0, 4, -1, 5, -8, -1, 2, 4, 3, 8, 6, 1, 8, 4, -6, -11, 1, -12, -6, -3, -2, -2, 3, 17, 10, 15, + 14, 22, 21, 6, 1, -1, -1, -6, -3, 4, 0, -7, 2, 0, -7, -12, -6, -9, 3, 2, -2, -3, -10, -9, 0, 1, 5, -4, -4, -5, + 1, 1, -3, -12, -6, -4, -5, -8, 4, 1, -4, 5, 9, 14, 7, 13, 22, 19, 8, 9, -2, -2, -6, -17, -12, -2, -4, 4, 1, 2, + 7, 21, 17, 8, 4, -1, 0, 4, -6, 2, 7, 5, -1, 3, 10, 5, 6, 8, -3, -5, -2, 3, -7, -8, -14, -15, -7, -15, -11, -13, + -7, -5, 9, 11, 12, 8, -4, -8, -12, -17, -12, -6, 5, 4, 16, 3, -5, 6, 11, 0, -2, -5, -5, -4, -2, 0, 8, 4, 6, 4, + 2, 7, 4, 7, 2, 4, 6, 6, 1, -1, -2, -3, -3, -5, -6, -2, 3, 4, 5, 11, 2, -1, 3, -2, -4, -3, 4, 5, -2, -4, + -8, -7, -6, 1, 0, -1, 1, -2, -4, 0, -1, 1, 3, 0, -2, -3, 1, 6, 4, 2, -6, 1, -2, 1, 6, 6, 1, 4, -2, -5, + -2, -5, -4, 0, -4, 1, 1, 2, 5, 4, 5, 0, 3, 6, 3, 2, 3, 2, 0, 4, 6, 1, 4, 2, 3, 5, 5, 3, -1, 5, + 4, -1, 2, 5, 7, 4, -6, -2, -3, -3, -2, -2, 11, 2, 1, 4, 11, 5, 4, 2, 21, -13, -9, -15, -14, 7, 0, 17, -15, 0, + 3, -17, 8, 9, -2, 6, -10, -5, -3, 11, 12, -4, -1, -6, 3, 4, -1, -6, -1, -1, 3, 4, -6, -2, 10, 5, 4, 2, -6, -2, + -9, -7, 0, 0, -9, -6, 0, 7, 6, -1, 2, 2, -4, 0, -1, -1, 8, 7, 4, 1, -4, 1, 2, -1, -14, -13, -12, -9, -12, -5, + -5, -4, -2, 0, 0, -5, -6, -8, -10, -6, -1, 4, 7, 14, 27, 26, 36, 30, 28, 18, 10, 4, 13, 11, 15, 7, 0, 2, 4, -3, + 4, 6, 6, 15, 7, 3, 1, 0, -2, -8, -14, -13, -10, -11, -8, -16, -21, -13, -15, -17, -13, -14, -24, -30, -23, -9, -6, -11, 1, 19, + 18, 20, 27, 21, 22, 18, 9, 15, 12, 15, 20, 16, 19, 22, 19, 23, 22, 21, 15, 17, 10, 1, 3, -1, -3, -2, 8, 6, 3, -1, + 7, 1, 2, -3, -1, -11, -9, -6, -6, -3, -11, -16, -15, -21, -15, -9, -4, 18, 19, 3, 14, -6, 8, 2, 6, -17, -16, -13, -7, -3, + -1, 1, 3, 4, -1, 2, 4, 0, 2, -1, 3, 9, 10, 10, 5, 7, 3, 5, 1, -2, -1, -5, -3, -5, -1, -3, -2, -4, -2, 2, + 5, 8, 10, 8, 9, 11, 10, 10, 12, 11, 4, 2, 5, 2, 2, 4, 5, 5, 11, 0, -5, 0, -4, -4, -4, 1, 5, 9, 18, 20, + 20, 18, 16, 8, 4, 4, 0, -7, -5, -6, -6, -3, -5, -3, -3, 7, 2, 1, 2, 2, 1, 0, -1, 4, 5, 9, 6, 12, 13, 15, + 13, 11, 9, 10, 7, 3, 5, -5, -17, -21, -20, -13, -10, -8, 3, 13, 16, 22, 13, 13, 6, 2, 0, 1, -5, 21, -34, 92, -127, -78, + 87, 3, 4, -58, -41, 45, 16, 22, -11, -22, 26, -1, -3, 0, 8, 6, -2, -7, -6, 2, 20, 13, 3, -10, 2, 6, 16, 5, -3, 7, + 3, 4, -6, -5, -8, -1, -4, 1, -1, -2, 5, -1, -3, -6, -7, 2, 3, -3, -2, 4, 2, 0, -3, -6, 2, -2, 3, -6, -2, -17, + 4, 6, 3, 6, 2, -3, 0, 3, -1, 2, 3, 0, 4, 0, -4, 2, -3, -4, -2, -2, 1, 0, -1, -1, 0, 2, 5, -1, 1, -4, + -4, -1, 3, 3, -2, -2, 3, 3, 5, 7, 7, 6, 1, 1, 5, 6, -1, -8, -3, -1, -1, -6, -1, -4, -4, -5, 1, 4, -3, -5, + 4, 2, 5, 8, 2, 1, 4, 1, -5, 0, 2, 4, 0, 9, 2, 1, 1, 2, -2, -1, -4, 4, 2, -1, 12, 2, -5, -9, -6, 4, + -1, 2, -3, 8, 0, -6, 1, -5, 4, 4, -2, 2, -2, 3, -1, 2, -1, -1, 3, -1, -2, 5, 1, -2, 0, -5, 2, -7, -9, -3, + -1, 1, 3, 1, 1, -1, -1, 0, -3, 0, 2, 2, 5, 6, 2, 1, -5, -8, -6, -3, 0, -3, -3, -2, -4, 1, 2, -3, 0, -3, + -3, 2, 0, 4, 1, -3, 0, -1, -1, 0, -3, 4, 5, 1, -1, 0, -4, -5, -3, -1, -4, -2, 0, 1, -1, -3, 1, 4, 2, 1, + 1, 4, 2, 0, -4, -5, -5, -1, 0, 1, -1, 2, 3, 3, 6, 1, -3, -2, 0, -1, 4, 3, 0, 8, 6, 3, -4, -1, -6, 0, + -2, 6, 0, 6, 1, -2, -2, -2, -2, -6, -5, 1, 3, 1, 5, 1, -3, -3, -1, 4, 2, -3, -6, -4, -3, 5, 6, 3, 2, -2, + -2, 4, -8, 10, 11, -5, -15, -12, 8, 9, 6, -5, -11, 0, 1, 0, -4, -8, -2, 4, -9, -7, -4, -7, -3, -7, -7, -5, -3, -5, + 6, 1, 9, -4, -1, -2, 3, -7, -1, -3, 0, -4, -6, -2, -2, 4, -1, 2, 0, -2, 2, 4, -2, -1, -4, 2, 1, -1, 5, 10, + 2, 1, 3, 4, -4, -5, 1, -2, 2, 3, 1, 2, -1, 2, -2, -1, -4, 3, 4, 0, 0, -4, -3, -1, -1, 4, -1, -2, -4, -2, + 8, 7, -2, -4, -3, -8, -5, -9, 2, 4, 2, 3, 2, 1, 7, 1, 0, 9, 4, 8, 4, 3, 4, 5, 3, 5, 4, 1, 3, 4, + 5, 0, 1, 0, 0, 0, 2, 0, -1, -3, -1, 5, 1, 1, -10, -2, 7, 0, -7, 1, 0, 1, 1, 1, 9, 2, 7, 3, -1, 8, + 6, -2, 1, -4, -7, 4, -1, 7, 5, 3, -3, -7, 3, -2, -2, -4, -3, -4, -8, -6, -7, -1, -1, -6, -2, -5, -3, -4, 3, 1, + 4, 1, 3, -1, -6, -10, -7, -3, -4, -1, -2, -4, -7, -5, -5, -4, -4, -5, -2, 0, 1, -1, -2, 2, 5, 5, -1, -3, -5, -2, + 3, 2, 0, 3, 4, 1, 1, 3, 2, 3, 1, 4, 2, 0, 0, 1, 2, 5, 2, 1, 1, -1, -3, -3, -6, -8, -8, -3, 3, -2, + -5, -1, -3, 0, -1, -1, 2, -1, 2, -3, 6, 0, 2, -1, -2, 3, 2, 1, -3, 6, 1, 5, -2, 0, -2, 5, -1, -5, -8, 1, + 2, 0, -2, -8, 1, 3, 6, 1, -2, -4, -2, 0, -3, 4, 0, 4, 1, -1, -9, 2, 2, 5, 4, -2, 1, 4, 6, 4, 6, 0, + 5, 0, 4, 4, 5, -10, 11, 3, 1, 9, 0, -6, -9, 7, 0, 4, 2, -9, 0, 2, 1, -10, -7, 5, -2, -3, 0, 1, -7, -8, + -7, -5, -1, 0, -2, 1, 4, 5, 1, 1, 2, -2, 4, 1, 3, -7, -6, -5, -9, 2, 5, 6, 0, 1, -3, 1, -5, 0, -6, 2, + 1, -1, -1, 3, 7, 6, 3, -1, 0, 0, -5, -4, -4, 0, 0, -7, -2, -4, -4, 5, 0, -2, 4, 2, 5, 6, 4, 7, 9, 5, + 0, 0, -4, -5, 0, 3, 8, 2, -1, -1, 0, 3, -2, 5, -1, -5, -6, -6, -5, 1, 1, 0, -4, -5, -4, -3, -3, -2, -3, 0, + 0, 1, -3, -3, 0, -2, 0, 0, 4, -1, -3, 6, -3, -4, -5, -7, 3, 5, -4, 2, 5, 4, 5, 0, -1, 1, 5, 1, 2, 4, + -1, 2, 1, -2, 2, 6, 2, -6, -10, 1, 1, 11, 3, 2, 3, -7, -8, 0, 5, 2, 5, 0, 2, 6, -1, 3, 3, 1, -1, 6, + -2, 1, 3, 1, 4, 1, -2, -1, -3, -2, -4, -3, -3, 1, 0, 4, 0, -1, -3, -6, -5, -2, 0, 2, 3, 6, 4, 6, 4, 4, + 2, -3, -4, -4, -6, -1, -5, -3, -2, -1, -1, 3, 1, -1, 2, 1, -2, 2, 3, 2, 3, 5, 8, 4, 0, -1, -1, -2, -1, 1, + 1, 2, 0, 0, -1, 3, 0, 2, 1, 2, -5, -1, 0, -2, -2, 1, 3, -4, -3, 0, 4, 4, 2, -2, -1, -3, 2, -1, 4, -2, + 8, 1, -4, -3, -1, 4, -1, -4, -4, -3, 2, 6, 0, 2, 0, 1, 3, 5, 2, 2, -5, -6, -2, -2, -3, 0, 4, -2, 0, 0, + 3, 9, -1, 0, -2, -1, -2, -2, 1, 3, -14, 14, 14, 2, 8, 0, -14, -14, 4, -4, -10, 1, -3, -5, -1, 6, 3, 3, 7, 4, + -4, -1, 7, 11, 8, 8, -5, -5, 0, 0, -3, 0, 11, 3, 1, 1, 2, -4, 1, 4, -2, -3, -1, 5, 1, 2, -3, 3, -4, 3, + -3, -1, 2, -10, -3, -4, -1, 0, 1, 2, 5, 6, 2, -1, 12, 6, 4, -2, 1, -1, -8, -4, -2, 2, 11, -6, -6, -4, 3, -1, + 0, 2, -2, -3, 0, -2, -4, -9, -9, -7, -1, -2, 1, -3, 1, 7, 0, 0, 2, 2, 3, 6, -1, -1, 2, 7, 4, -5, -8, 0, + 5, 5, 0, -3, -3, -1, -1, -3, -3, 1, -9, -2, -5, 7, -4, -6, -1, -4, -5, -3, -6, 5, -2, 0, 3, -4, -6, -4, -10, -7, + -2, 5, -5, -4, 0, -6, 12, -7, -6, -11, 2, 2, 2, 5, 3, 8, 9, 10, 14, 7, 4, 0, 0, 3, 3, 5, 9, 9, 1, 0, + -3, 1, 2, 3, -5, -2, 7, -4, -3, 1, -1, 2, -1, -3, 1, -4, -1, -3, -5, -2, 0, 0, -1, 2, 2, 4, 4, 3, 5, 6, + 3, 4, 1, 2, 1, 1, -3, -5, -7, -8, -6, -4, -3, -4, -3, -3, -2, -2, 2, 3, 0, -5, -4, -2, 2, 3, 1, -2, -2, -6, + -4, -7, -5, -1, 0, 1, 2, 3, 7, 6, 2, -1, -1, -3, -2, 0, 2, 2, 2, 2, 4, 1, 2, 3, 3, 6, 1, 3, 3, -2, + 2, 1, -7, -2, -2, 0, 4, 4, 3, 3, 3, 0, -3, -1, 3, 3, 3, -2, -5, 2, 8, 2, 2, 1, 4, 2, 1, 0, -2, 0, + -4, 4, 0, -6, -2, -4, -5, -1, 0, 2, -4, -3, 4, 0, 0, -7, 11, 4, 1, 3, -2, -10, -13, 16, 10, -4, -14, 3, 1, 9, + 1, 2, 1, 7, 5, 6, 1, 7, 9, 2, 2, -8, 7, -7, -1, 10, 6, 8, -1, 2, 0, 6, 2, -1, -5, -4, 8, 3, 0, -3, + 0, -5, -4, -10, -4, 4, 0, -8, -1, -4, 1, 3, -2, 3, 8, 7, 2, -2, 3, 8, -3, 4, 4, 3, 3, 1, 2, -1, 3, 2, + 6, 2, 3, 2, -1, -3, 2, 5, 2, -2, -4, -5, -11, -9, -5, -2, -10, -8, -6, -8, -6, -6, 1, -2, -2, -5, -1, 4, 1, 3, + 7, -7, -6, -4, 4, 3, 2, 2, -1, -3, -3, 2, -1, -6, -1, -5, -1, 4, 5, 3, 4, 1, 6, 6, 2, 8, 7, 6, 6, 1, + 8, 2, 1, 6, -3, 4, 0, 4, -1, 1, 0, -1, 5, -9, -1, -2, -9, -6, 0, 2, -3, -6, -7, -3, -7, -7, -3, 0, -2, 0, + -2, -1, -5, -1, -5, 3, 10, 12, 2, 2, 6, 4, -2, -5, -2, 0, 8, -2, 0, 2, -3, -2, 1, 3, 2, -3, -3, 0, 1, 5, + 6, 5, 6, 4, 5, 2, 1, 2, 4, 0, -3, -5, -2, -6, -4, -5, -6, -2, -4, 1, -3, -5, 0, 1, -3, -1, 0, 0, -1, -1, + -4, -3, -9, -7, -8, -4, 1, 0, -1, -3, 2, -4, -4, 2, 1, 2, 0, 0, -1, -3, -1, -1, -2, -5, -4, -1, -1, 2, 4, 1, + 4, 3, -3, 0, -4, 1, 5, 1, 3, 5, 0, 7, -2, 1, 6, 1, -1, -8, 0, -3, -2, 1, 0, -1, -3, -3, 4, 3, 4, 2, + 1, 2, 1, 1, -1, 7, 7, 5, 4, 5, 2, 1, -4, 3, 0, -3, 1, 0, 5, 0, -7, 10, 11, 13, 5, 12, -14, -18, 32, 27, + -13, -32, 0, 0, 3, 0, -1, -1, 4, 0, -1, -2, 0, 6, 4, 3, -5, -10, -12, 0, 8, 4, 3, 1, 1, -6, -3, -8, -4, -6, + 6, -1, -4, 8, -3, 0, -4, -4, -4, -7, -2, -3, 1, -2, -1, 1, 4, -1, 3, 4, 4, 3, 1, 2, 2, -6, -11, -12, -8, 2, + 6, 5, 6, 3, -3, -7, 0, -7, 0, 0, -3, -4, -5, -11, -14, -18, -17, -12, -9, -7, -8, -6, -5, -5, -6, -3, 3, -2, 0, -2, + -1, 3, 2, 5, 0, 5, 8, 4, -6, -5, -7, -6, -13, -9, -3, -1, 2, 2, 4, 1, 0, 3, 5, 4, 8, 4, 8, 15, 17, 15, + 29, 28, 30, 24, 21, 10, 14, 9, 11, 13, 6, 12, 9, 6, 1, -1, 3, -7, 1, -7, -2, 3, 4, -4, -10, -14, -20, -32, -28, -24, + -13, -9, -7, -4, -5, -6, 0, -10, -18, -20, -14, -5, 5, 7, 7, 18, 14, 9, 15, 15, 1, 9, -3, 13, 1, -6, -5, -1, -5, -2, + 5, 4, 7, 4, 5, 7, 11, 8, 10, 6, 3, 3, -1, -2, -7, -8, -8, -8, -4, -5, -2, 0, 2, 3, -1, 1, 6, 4, 7, 8, + 13, 8, 7, 2, 1, 6, 4, 2, -5, -2, -4, -4, -4, -9, -8, -8, -11, -12, -7, -7, -5, -6, -4, -6, -6, -10, -3, -6, -7, -3, + 0, -2, -1, 3, -2, 0, -3, 2, -1, 3, 7, 10, 9, 14, 8, 12, 6, 9, 13, 11, 18, 15, 12, 4, 5, -6, -13, -15, -15, -12, + -9, 1, 13, 14, 20, 15, 15, 13, 13, 11, 9, 6, 7, 9, 3, 3, 3, 1, 4, 4, 1, 0, -1, -6, -1, 9, -49, -127, 10, 70, + 5, -40, -49, 15, 81, -34, -76, 11, 21, 4, 6, -14, -12, 18, -7, -12, -8, -2, 3, -2, -8, -10, -11, -6, -4, -3, -5, -3, 8, 5, + -2, -5, -5, 2, 1, -4, -1, -3, 3, -4, 1, 5, 13, 7, 2, -1, 2, 3, -1, -10, -3, 6, 4, 1, 4, 11, 8, 16, 16, -8, + 4, 0, -1, 1, -7, -5, 3, 4, 2, -2, 4, 0, 3, 2, 2, -2, 0, -1, -6, 7, 9, 5, 7, 6, 1, 13, 11, 10, 6, 1, + 3, 7, 9, -2, 2, 1, 2, 2, 0, -2, 10, 1, 3, 7, 8, 4, 5, -3, -3, -5, -2, 1, 4, 5, 12, 3, 5, 6, 1, 1, + 5, -1, 5, 4, 2, 10, -1, -2, 0, -8, -1, -2, -4, 3, -3, 2, -2, -2, -5, -2, -6, -7, 5, 7, 2, 3, 2, -9, -1, 0, + -2, 2, -3, 6, 2, 0, 1, -5, -1, 1, 2, 0, 1, 0, 5, -5, -5, 1, 6, -9, -6, 4, -7, -6, 1, 5, 4, -1, -3, -3, + -1, -2, -2, -1, -3, 1, 0, 0, 0, -2, -2, 0, -2, -3, 0, 1, -3, -1, -4, -3, 1, 1, -1, -1, -2, 1, 6, 6, -4, -11, + -8, -5, 1, 2, -3, -5, -2, -4, -5, 3, 7, 6, 6, 8, 8, 8, 2, -1, -3, -3, 3, 3, 7, 7, -1, -1, -8, -8, -7, -4, + 0, 2, -2, -3, -2, 0, 1, -2, -1, 1, 1, 2, 4, 3, 1, 0, -3, -2, 0, -1, -4, -3, 0, -1, 3, 0, -2, -5, -8, -8, + 0, 2, 0, -1, 7, 4, 0, 1, 1, 3, -3, -7, -1, -1, 5, 3, -3, -1, -3, 1, -1, 1, 2, 0, -2, -1, -2, 2, 0, 5, + 7, -6, 2, 7, 1, -19, -23, 8, 3, 1, 1, 9, -3, -15, -5, -2, -3, 3, -1, -3, -5, -6, -8, 0, 1, -4, -6, -1, -2, 0, + 6, 8, 5, 1, -3, -9, -5, -4, -4, -7, -3, 0, -5, 2, 2, 10, 7, 5, 2, 8, 6, -8, -7, -2, -6, 2, -8, 7, 1, 2, + -1, 8, 10, 14, -9, 7, -1, -4, -6, -4, -9, -4, 2, 9, -1, -4, -1, -4, -1, 1, -1, 3, 3, -6, -7, -5, -4, -6, 9, 3, + -1, 0, -2, 4, 3, 9, 2, 7, 9, 5, 5, -3, 2, -6, 3, 3, 0, -4, 1, 4, 9, 2, -3, -3, -5, -3, -7, 7, 9, 4, + 2, -3, 0, -3, -1, 6, 12, 8, 8, 5, 7, 5, -9, 4, 6, 0, 12, 3, 0, 2, 4, 8, -1, 10, 3, 13, -4, 6, 7, -1, + 5, 6, 0, 9, 0, 2, -4, 2, 6, -1, 1, -4, -9, -6, -8, -5, -11, 1, -9, -4, 5, 1, 5, 3, -5, 2, 4, -4, -1, -9, + -1, 0, 2, -1, 1, -1, 1, -3, -4, -6, -2, -5, -5, -3, 1, 5, 5, 3, 5, 0, 2, 3, -1, -4, -4, -4, 1, 6, 0, 2, + 1, 1, 3, -5, -7, -3, -2, 2, -2, -1, -1, -4, -2, -5, 0, 4, -4, -9, 0, 3, 4, 3, -3, -2, -6, -2, 1, 8, 4, 5, + 1, 0, -2, -1, -2, 0, -3, 0, 1, 3, 4, 0, -5, -5, 1, 1, 2, -3, 3, 3, 2, 3, 2, 7, 0, 1, 1, 3, 1, -2, + -3, -4, -6, -3, -7, 1, -1, -9, -4, -2, -2, -6, -2, -2, -4, -2, -2, 0, 0, 2, 2, 0, 1, 2, -1, -1, 4, -2, 0, -5, + 1, 1, 5, 1, 4, 0, -1, 7, 9, -2, -11, -10, 11, 4, -4, 1, -1, -5, -2, -1, 5, 4, -1, -2, -7, -3, 3, -3, -3, 9, + 0, -3, -1, 4, 8, 11, -1, 7, 1, -1, -4, -3, 7, 0, -2, -6, 0, 0, 4, 2, 7, 4, 0, 0, -7, 1, -12, -2, 0, -4, + -1, 5, 3, 1, 10, 1, -5, 3, 9, 1, 6, 0, 1, 0, 4, -1, 2, -2, -1, -1, 4, 1, -1, 1, -4, -6, 0, -1, 4, 1, + -2, 1, 0, -2, -4, -1, 0, 5, 3, -2, 8, 7, 1, -6, -4, -4, -4, -4, -7, 6, 10, 1, -5, 1, 5, 8, 4, -3, -1, 0, + 2, -1, 3, 2, 3, 4, -1, 3, 3, -1, -4, -2, -1, 4, 3, -2, 1, -2, -1, 2, 2, 2, -4, -1, 1, -1, 4, -2, 0, -2, + -1, 1, 6, -2, 5, 12, 3, -3, 10, -4, 2, 0, -4, 4, -2, 7, -4, 6, 5, -3, 4, 4, 5, 0, -2, -7, 1, -2, -5, -3, + 8, 8, 1, -3, 4, 0, 6, 0, 6, 11, 5, 8, 7, 4, 2, 0, -1, -1, -1, -3, -4, -5, -7, -6, -4, -1, 0, 1, 0, 1, + 2, -3, -6, -5, -4, -4, -6, -1, -3, 1, 3, 2, 3, 0, 0, -1, 3, 1, -1, -2, 3, 2, -1, 0, 3, 5, 1, 1, -2, -1, + 2, -1, 3, 1, 4, 3, -1, -1, 2, 0, -2, -1, 0, 1, -1, 1, -2, -3, 0, 1, -3, 0, -4, -3, -2, 2, 1, -1, -6, -1, + -9, -3, 6, 2, -1, -4, -9, -6, -3, -3, 3, 3, 4, 4, -2, 3, -4, 0, -3, -3, 2, -1, -4, -1, 1, 6, 6, 4, 0, -1, + -2, 4, -4, 0, -3, 0, 2, -2, 0, 1, -6, 5, 6, 9, 6, -6, -15, 13, 6, 11, 10, 7, 2, -11, -5, 12, 2, -6, -4, -6, + -7, -6, 3, 13, 2, -1, 1, -5, -6, 1, 4, -3, -1, -7, -2, 2, -11, 2, -4, 3, 7, 2, 0, 0, 10, 4, 4, 2, 0, -3, + -9, -6, -7, -4, -4, -4, -1, 2, -4, 2, 1, -3, -2, -2, 8, -11, -8, -2, -7, -4, -10, -3, -10, -6, -2, 1, -1, -6, 0, -3, + 3, 8, 1, -1, 0, -9, -3, 3, 8, 1, 10, 12, 3, 10, 5, 1, -5, -3, 0, 6, 0, -10, -12, -11, -2, 3, 3, 2, 10, 6, + 4, 0, 3, -2, 0, -3, 0, -2, -1, 0, 4, 4, 2, -3, -4, 2, 0, 1, 3, 4, -1, 2, 5, 7, 0, 2, 7, -2, 0, 1, + -4, -2, -9, 3, 7, 5, 5, 3, 4, 0, 0, -3, -3, 1, -8, 1, 1, -2, 1, 4, 7, 0, 3, -2, -7, 4, 6, 3, 1, 5, + -7, -3, 6, -7, -1, 3, -2, 1, -2, -4, 1, 5, -2, -11, -1, 6, 1, -1, 1, -1, -3, 0, 2, 1, 4, 1, -2, -2, -1, 1, + 1, -2, 0, -1, 1, 0, -3, 0, 1, 3, 3, 1, 2, -2, -4, -3, -3, -2, -1, -4, -2, -1, -6, 0, 1, 2, -1, 1, 0, 5, + 8, 5, 2, 0, -3, -3, 0, 0, 0, 1, 3, 1, -2, -4, -5, 2, 3, 8, 1, 2, -1, 2, -3, -5, -4, 0, 6, -2, -4, -2, + -2, 2, 0, -4, 2, 3, 5, 2, -3, -3, -3, -4, 1, 2, -3, 2, 3, 6, 2, 4, 3, 3, 3, 2, -1, 4, 9, 7, 0, -2, + -6, -8, -9, -4, -2, -3, 3, 2, 0, -1, 6, 6, 2, 0, 3, -13, -9, -5, 13, -7, -26, -12, 7, 4, 2, -9, 3, -2, -15, 3, + 18, -4, -7, 1, -4, -11, 4, 6, 9, 5, 4, -4, -3, 6, 5, 3, -7, -6, -9, -6, -5, 0, 2, -5, 3, 0, -1, -5, 5, 9, + 9, 2, 11, 6, -3, -5, -4, -6, -6, -3, 0, 2, 2, 1, 0, 5, 2, -3, 2, 18, -6, -7, -8, 1, -3, -5, 8, -2, -6, -5, + 0, -2, -1, 2, 9, -5, -1, -5, -11, -5, -1, -7, -2, 0, -14, -4, -1, 7, -1, -5, 0, -7, -2, -3, -8, -10, -13, -8, -11, -4, + 1, 3, 4, 4, 0, -1, -4, 0, 4, 1, 4, 10, 11, 5, -2, 7, 1, -8, -2, 1, -13, -8, 6, -3, -2, 8, 0, -3, 8, 0, + -7, -5, -4, -4, -4, 0, -6, -3, 4, -3, 7, 0, 8, 4, 2, -1, 9, 6, 7, -7, 8, -3, 1, 4, 2, 1, -2, 9, 3, -4, + 3, -3, 2, 4, -5, -5, -5, 0, 0, 1, 5, 3, 3, -5, -6, -1, 8, 7, 11, 4, -1, -1, -2, -2, -3, 2, 2, 0, 4, 2, + -1, -1, 0, 0, 2, 1, 1, -1, -2, 2, -3, -4, -6, -4, 2, 3, 4, 6, 1, 3, -3, -4, -1, 1, -2, -2, -4, -3, -6, -6, + 2, 0, 2, 0, 1, 3, -1, 3, 2, 1, -3, -1, 3, 0, 1, 2, 0, 0, -3, -3, -1, -3, 3, 6, 5, 1, 4, 6, 1, 2, + 1, 3, 1, -3, -1, -4, -1, 1, -5, -2, 3, 1, 1, -2, -3, -3, -1, -4, -3, -3, 1, -3, -2, 2, 3, 4, 3, -2, 4, -2, + 2, 1, -2, 5, 1, 4, 2, 5, 4, 3, 1, 8, 1, 2, 4, -2, -2, 3, 4, 0, -15, -21, -5, 23, -8, -23, 9, -1, 1, 2, + 0, 2, 9, -7, -3, 10, -9, -10, 3, -7, -9, 0, 6, 3, 5, 6, -6, -3, 8, 2, 5, 3, -4, -6, -2, -1, 2, 6, -1, 5, + 5, -1, 0, 4, 2, -2, 6, -2, 2, -1, -1, 1, -1, -6, -4, 0, 4, 3, -7, 5, 1, 0, -3, -1, 7, -9, -12, -9, -18, -16, + -18, -11, -9, -6, 2, 11, 4, 4, 5, 4, 1, -3, -12, -18, -18, -9, -5, -3, -2, -14, -13, -14, -13, -12, -15, -17, -16, -14, -16, -22, + -20, -17, -14, -10, -7, -8, -3, -5, -9, -10, -14, -20, -24, -30, -36, -38, -31, -26, -23, -14, -3, 1, 2, 4, 6, 4, 1, 1, -5, -3, + 8, 12, 21, 24, 18, 12, 11, 4, 4, 7, 4, 6, 6, 9, 12, 6, 8, 14, 11, 15, 12, 7, 8, 12, 16, 15, 7, 10, 13, 8, + 5, -8, 2, -2, 0, -5, -9, -5, -2, 1, -3, 0, -2, -1, -5, 13, 17, 21, 8, 7, 6, 26, 27, 5, 6, 6, 5, 6, 5, 0, + -2, -2, -6, -6, -9, -3, -3, -3, 1, 0, 4, -2, 2, -3, -1, 0, -1, -1, 2, 0, 3, 5, 8, 7, 10, 7, 5, 6, 1, -5, + -3, -3, -4, -1, -3, -2, 2, 2, 0, 1, -3, -3, -6, -8, -7, -10, -3, -3, 4, 10, 8, 13, 15, 16, 12, 7, 3, 1, -4, -1, + 2, -3, 0, 2, 2, 6, 3, 0, 2, 0, 2, 1, 2, 2, 1, -1, -1, -5, -7, -7, -6, -1, 1, 7, 10, 17, 15, 17, 8, 10, + 7, 6, 8, 7, 15, 20, 21, 15, 13, 11, 2, 3, -4, -5, -14, -13, -13, -8, -10, -14, -13, -13, -9, -10, -11, -17, -127, 71, 105, -57, + -21, 68, -21, -2, 32, -27, 9, 34, -66, 2, 19, -42, -15, -8, -22, -20, -4, -14, -7, -4, -7, -6, -6, -2, -10, 1, 3, -1, -8, -3, + -11, -17, -7, -9, -6, 2, 0, 4, 4, -1, 3, 2, -1, 2, -9, -7, -15, -14, -9, -7, -17, -4, -2, -6, 4, 6, -1, -5, 1, 17, + 7, 6, 21, 14, 5, -2, -4, -21, -17, -7, -10, -9, -1, -4, -3, -4, -7, 6, 12, -1, 5, 5, 12, 10, 5, 10, -3, -2, -4, 7, + 8, -3, 16, 10, 4, 15, 11, 20, 3, -5, 0, 14, 13, 3, -5, -22, -10, -4, 16, 7, 1, 14, -1, -27, -18, -12, -2, 0, 6, -2, + 1, 1, -8, -9, 14, -7, 22, 13, 22, 8, -5, 6, -3, -11, -10, -8, -10, 3, -19, -25, -5, -12, -5, 12, -7, -7, 8, -8, 2, -8, + -1, -12, -1, 1, 5, 6, 1, 2, 1, 1, 7, -1, -14, -5, -21, -27, -14, -10, 9, 2, -2, -1, 9, 11, -1, -22, -2, -14, 14, -3, + 2, 5, 20, 12, 10, -3, -8, -9, -5, -11, -7, -10, -16, -4, 2, 1, 9, 13, 26, 19, 14, 5, -15, -14, -12, -14, -12, -8, -18, -21, + -25, -17, -20, -6, -2, -1, 11, 10, 4, 2, -8, 2, 15, 13, 16, 0, 9, 0, 17, 19, 0, -8, -11, -14, -13, -5, 7, 6, 3, 20, + 15, 3, -2, -4, -9, -10, 3, -8, -22, -10, -16, -10, 5, 1, 10, 3, 9, 9, -13, 0, 11, -4, -6, 0, -4, 10, -1, -6, 3, 22, + 14, -1, -10, -19, 6, -4, -4, 6, -6, 7, -4, 6, 6, 6, -3, -3, 12, 1, 2, 15, 6, 6, 6, -2, 17, 0, 6, -1, 10, 5, + 6, 22, 1, 39, 26, 31, 33, -1, 29, -18, 10, -3, 9, 2, -23, 4, 27, 17, -11, -21, 1, 6, -2, 11, 19, -5, 5, 1, 14, 5, + -29, -17, 5, -20, -20, -5, 0, -19, 0, -7, -9, -3, -7, -6, -3, -7, 7, 17, -15, -15, 5, -4, -3, 6, 2, -8, 13, 15, 22, 24, + 23, -6, 13, 11, -18, 11, 24, 16, 18, 6, 8, 8, -8, -10, -9, -13, -14, -11, -1, -3, 11, 0, 13, 19, 4, 14, -4, -2, -8, 15, + 25, -5, -15, -6, -20, 1, -24, -15, 4, 11, -6, 4, 3, 3, 14, -3, 6, -10, 1, -10, 5, -4, -8, -16, -1, 1, -7, -14, -29, -14, + -26, -9, 8, 6, 6, 19, 5, 10, 0, 9, -8, -5, -14, -10, 4, 17, 8, -4, 16, 13, -5, -12, -24, -19, -7, 16, -12, -12, -25, -5, + -17, -23, -19, -1, 9, -11, -20, -4, -12, 2, -8, 18, -3, 4, 4, 6, 16, 24, 8, 17, 15, 2, -6, 15, -4, -13, 7, 16, 2, 11, + -6, 15, 2, 24, 2, -9, 5, -4, -5, -2, -2, 7, -12, -28, -36, -29, -22, -14, -7, -16, -16, 5, 0, -2, -1, 13, 1, 5, 10, -4, + -3, -7, 1, -12, -5, -8, 2, 8, 5, 11, 19, 18, 11, 18, 2, -16, -2, 5, -7, -7, -3, -6, -9, 1, 8, 5, -2, -17, -26, -6, + -11, -8, 7, -4, -4, 2, 2, 1, 2, -7, 2, 6, -2, -1, 6, 2, 7, -2, 26, 16, 7, 1, -2, 17, 3, 10, 11, -7, -10, 3, + 13, -10, -8, -3, 2, -11, 3, -15, -14, -17, -4, -3, 14, -7, -15, -17, 0, 13, 6, 8, 13, -1, -10, 13, -3, -3, 31, 13, -10, -14, + 4, 5, 5, 20, 34, -48, 20, -4, 2, -4, 9, -2, -39, 9, -29, -14, 18, -3, 13, -23, 12, 2, 0, -29, -44, -5, 3, -5, -4, -16, + -15, -2, 29, -7, 17, -13, -14, 6, 7, -12, 24, 7, 1, -5, -1, -7, 16, -6, 7, 7, 10, 9, 9, -1, -7, -13, 13, -7, 5, 2, + 14, 12, 15, 33, 3, -1, 0, -7, -8, -37, 22, 35, 23, 19, -10, -8, -5, -6, -7, -5, -16, -14, 22, 20, 12, 12, 35, -2, 11, 27, + 5, 2, 26, 7, 22, 18, -3, 5, -8, -3, 1, -5, 11, 7, 25, 17, 37, 25, 27, -15, 16, 7, 15, -24, -13, -28, -9, 0, -2, -19, + -22, -2, 3, -15, -10, -6, -19, -3, 6, -9, -4, 13, -10, -13, 31, -12, -32, 14, 7, -11, 3, -14, -15, 3, -23, 1, -35, -42, -54, -13, + 7, -28, -24, -13, 0, 1, 5, 2, 10, 0, 13, 13, 13, 9, -1, 4, 8, 5, 29, 6, -24, 27, 9, -4, 13, 29, 6, 9, 21, -7, + 9, 7, 20, -7, -5, -6, 6, -14, 11, -23, 10, 16, 11, 0, -13, -5, -9, -1, -10, -16, -4, -8, -7, -4, -16, -5, 1, 26, 25, 4, + 7, 11, 9, 1, -6, -9, -12, -8, -7, -3, 1, 1, 3, 1, 7, 16, 12, 9, 18, 10, -13, -1, -7, -17, -32, -20, -27, -18, -12, -11, + -17, -2, -2, -12, 2, 5, 5, -3, 17, 6, -2, 1, 15, 23, 29, 13, 9, 29, 18, 14, 6, 12, 16, -8, 8, 5, 2, -17, -10, -21, + 3, -24, 4, 3, 10, -5, 2, 0, -10, 4, 4, -3, 13, 5, -5, -23, -18, -6, -4, -13, -21, -10, -4, -16, -5, -24, -10, -2, 3, -2, + -6, -6, -1, 3, -5, -12, 12, 7, 17, -14, -17, 2, 6, 24, 12, 21, 18, -40, 20, -12, 0, 34, 10, 18, -30, -5, 23, 9, -10, -26, + 7, 5, -7, 3, -17, -19, 9, 5, 19, 36, 8, -19, 16, 11, -16, 12, -1, 9, 22, 5, -11, 5, -7, 6, -19, 0, -2, 14, 22, -9, + 0, -2, -2, 4, 8, -19, 3, 6, 20, 6, 1, -4, 6, 4, -41, 39, 37, 11, 24, 25, 8, 14, -4, 1, 0, -17, -35, -10, -7, 6, + 8, 2, -12, -17, 8, 9, 8, -5, -13, -4, -10, -17, -27, -38, -50, -31, -35, -26, -19, 5, 21, 22, 16, 3, 8, 6, -5, -24, 0, -3, + -22, -27, -20, 9, 8, 13, 14, -17, -25, -24, -37, -49, -21, -34, -40, -30, -10, 0, -11, -6, -4, 3, -6, 5, 9, 13, -7, -6, 1, -41, + -23, -23, -46, -35, -49, -12, -14, 8, 5, 6, 17, 19, 1, 7, 23, -2, 0, -1, 7, -13, -6, 16, -10, -1, -14, 7, 12, 12, 1, 1, + 17, 7, 13, 30, 18, 25, 22, 32, 28, 22, 20, 4, -3, 6, 0, -15, 0, -5, -3, -7, 6, -1, -5, 10, 14, 8, 14, 16, 7, 17, + 16, 4, 16, 1, 12, -3, -1, 7, -20, -24, -14, -22, -10, -33, -30, -22, 3, 6, 4, 0, 0, -1, -6, 1, 13, 14, 6, 0, 17, 15, + 28, 13, 1, 2, 0, 10, -12, -12, -13, -4, -3, -24, -10, 4, -6, 1, 18, 2, 12, 22, 25, 20, 5, 7, -9, -4, 8, 17, 0, -10, + -9, -20, -16, -9, -25, -7, 15, 8, 12, 3, 12, 12, 0, -7, -16, -8, -13, 13, -4, 0, 8, 3, -5, 3, 3, 13, 3, 1, -5, 8, + -11, -10, -6, -2, 12, 5, -4, 21, 3, -5, -5, 16, 10, 14, -12, -44, 24, -6, 30, 6, -8, -10, -11, 50, -24, 10, -5, 8, 21, -28, + -1, 22, 3, -27, 0, 4, 31, 7, -10, 3, -8, -1, -8, -9, -27, -41, -37, 4, 8, 5, 17, 17, 20, 2, 9, 1, 3, 7, -5, -13, + -9, 4, 18, -11, 9, 5, 4, 0, 12, 11, 5, 6, 5, 10, -13, 2, 6, 9, 28, -11, -13, -20, -20, -39, -37, -26, 9, 1, -7, 3, + -16, -30, -27, -16, -29, -29, -20, 5, 17, 1, -11, -22, -18, -7, 3, 5, -5, -31, -28, -66, -62, -63, -53, -47, -48, -43, -15, 3, -19, -39, + -21, -23, -32, -34, -26, -46, -25, -20, -22, -27, -16, -42, -28, -35, -8, -33, -57, -42, -60, -76, -45, -24, -42, -18, -29, -67, -47, -20, -14, 13, + -8, -21, -50, -44, -57, -106, -88, -95, -43, -40, -26, -1, 41, 26, 12, 32, 12, 20, 34, 39, 6, 42, 36, 15, 13, 34, 5, 19, 5, 14, + 35, 26, 33, 32, 38, 49, 73, 56, 77, 62, 72, 53, 65, 68, 43, 37, 18, 3, -10, -6, -14, -13, -6, -4, -1, -11, -7, -2, -3, -6, + 9, -1, 0, 14, 17, 16, 19, 20, 28, 5, 16, 0, 1, 11, -2, 1, -3, -1, -8, -6, -9, 17, 15, -4, 2, 14, 16, 13, 9, -2, + 11, 16, 25, 4, -2, 14, 24, 11, 10, 2, 4, 10, 8, 9, 14, -3, -17, -13, -9, -11, 14, 25, 24, 11, 8, -3, 5, 4, -1, 21, + 13, -5, -18, -29, -30, -41, -48, -47, -12, -24, 0, 5, 22, 28, 3, 1, -6, -12, -21, 6, -5, -1, -12, -17, -10, -24, -35, -33, -28, -12, + -7, -6, 8, 5, -4, 11, 0, -12, -18, 2, 7, 8, 12, 13, 3, -10, -4, -29, -16, -26, -81, -37, -5, 28, 11, 33, 1, 18, 79, -68, + 2, -12, 6, 19, -9, 25, 44, -8, 5, 34, 19, 32, 13, -9, -8, -9, -20, -17, 3, -5, -45, -35, 22, 15, 10, 24, 5, 25, 9, -20, + -24, 2, -6, -1, 2, 19, 10, 12, -10, -9, -12, 0, -1, 4, -9, 3, 6, -13, 5, 10, -12, 12, 18, 14, 0, -5, 17, 7, -4, -16, + -18, 3, -8, -21, -21, -17, -33, -15, -5, -10, -16, 5, 2, 5, -9, 2, -14, -25, -30, -28, -19, -30, -29, -8, 5, 11, -21, -28, -36, -17, + 21, 50, 53, 26, 19, -1, -30, -6, -2, 0, -37, -27, -26, -46, -69, -76, -49, -61, -96, -83, -86, -94, -95, -59, -59, -39, -19, 3, -26, -58, + -59, -23, -18, -30, -51, -60, -42, -49, -37, -38, -35, -55, -62, -73, -68, -27, -13, 0, -22, -4, -12, -4, -20, -8, 2, -29, -20, -6, -12, 1, + 2, 32, 28, 15, -5, 47, 46, 43, 54, 50, 75, 35, 48, 23, 47, 56, 71, 86, 85, 87, 83, 38, 45, 91, 37, -24, -14, 1, 7, -2, + 2, 6, 1, 0, -14, -3, -11, -6, -7, 2, 6, 8, -2, 2, 4, 0, 9, 0, -10, -8, -16, -8, -4, -25, -18, -11, 2, 1, -6, 6, + 10, 6, 9, 3, -15, -34, -42, -33, -27, -29, -21, -25, -38, -20, -18, -31, -26, -27, -59, -65, -79, -100, -100, -66, -28, -25, 22, 36, 16, -10, + 12, 30, 29, 15, 5, 14, -19, -18, -45, -48, -87, -93, -83, -72, -60, -9, -7, 22, 6, 19, 27, 22, 16, 12, 6, -7, -18, -30, -27, -43, + -52, -46, -51, -51, -72, -64, -53, -36, -12, 5, -14, -19, 1, -16, -23, -23, -14, 1, 8, -3, 9, 29, 27, 35, 28, -110, -45, 10, -36, 17, + 50, 37, -53, 127, -106, 63, -30, -30, 55, -33, -27, 30, -18, -34, 42, 26, 73, 10, 16, -8, 12, 43, 19, 22, 4, -5, 9, 8, 22, 26, + 16, 36, 20, 5, -13, -12, 5, -19, -6, -3, 3, -4, -11, 5, -4, -5, 7, -19, -11, -2, -8, 19, 11, 9, -3, -19, -8, -14, -13, -59, + -11, -10, 0, -4, -5, -4, -1, -1, -2, -11, -6, 3, -4, -6, 1, -7, 0, 5, 3, -1, 2, -5, -8, 4, 4, 4, 6, -5, -7, 0, + 12, 12, 8, -5, -2, -7, -16, -1, 4, 9, -3, -7, 0, 2, -8, -8, -1, 13, 1, 2, 4, 7, 7, 15, 7, 16, 16, 13, 6, 19, + 7, 14, 18, 15, -2, 0, -6, -8, 9, 11, 8, 1, 0, -2, -10, -4, -4, 5, -4, 0, 11, -13, -14, -5, -5, -5, -5, -14, 9, -10, + -6, -12, -2, 9, -9, -7, -5, 1, 0, -11, 1, -17, -11, -12, -4, 7, -1, 6, 1, 2, 9, -1, -7, -5, -6, -6, -8, 1, 14, 8, + -8, 1, 2, -4, -4, -4, -7, -3, 0, 4, 8, 6, 0, -5, -3, 5, 0, 9, 13, 13, 15, 4, 5, 0, 3, 5, -2, -5, -7, -10, + -8, -16, -5, -3, -13, -10, -9, 0, 7, 11, 12, 7, 8, 1, 6, 8, 4, 7, -5, -2, -8, -7, -3, -13, 0, -2, -1, -3, -6, -11, + -13, -2, 14, 9, -3, -5, 5, 2, 4, 7, 6, 9, 7, 4, 3, 8, 0, 4, -5, 5, 1, -5, -10, -5, -4, -7, -5, -8, 1, 2, + 1, 4, 1, -3, -16, -3, -2, -5, -11, -18, -11, 4, 4, 10, 10, 8, 2, -3, 3, 8, 3, 9, -2, -1, 6, 3, 7, 2, 3, 16, + 34, -16, 3, 21, 6, -45, -4, 17, 7, -24, -24, 12, 7, 1, 0, 5, 11, 7, 1, 2, -7, 10, -3, 1, 3, -1, 10, -5, -26, -7, + -6, -8, -8, -7, -15, -16, -14, 1, 5, -5, 0, 3, -1, 3, 13, 2, 3, -4, 8, -1, 4, 3, 4, 7, 11, 6, -8, 0, -7, -16, + 4, -4, -2, 3, 4, 16, 8, 2, 7, 5, 12, 1, 0, 1, -3, -5, 1, 8, 11, 5, 7, 1, -1, -11, -5, 4, -2, -5, -15, -5, + -6, 2, 11, -5, -6, 0, 7, 0, -4, 1, 9, 2, 7, 18, 12, 10, 14, 1, -2, -2, 1, -1, 2, -2, 1, 1, -1, -4, 4, 5, + -1, -5, -2, 0, 5, 6, 12, 9, -4, -9, -4, 6, 5, -10, -6, -7, -3, 9, 4, -12, -8, 2, 6, -2, -8, -3, -19, -13, 4, 0, + 2, -2, 4, 2, 1, 5, -6, 5, 7, 12, 3, 2, -2, 11, 8, -7, -5, -4, -16, -3, -12, 8, 0, -9, -6, 6, 3, -18, 0, 3, + -1, 1, -8, 5, 2, 0, 0, 0, -7, -2, 1, 0, 3, -2, 0, 0, 1, 0, -1, -2, -5, 0, -5, -4, -2, 0, -3, 1, -7, 2, + 3, 0, -1, 6, 4, 9, 7, 5, 0, 7, 2, 9, 9, 5, -3, 0, -7, -10, -8, -5, 4, 5, 4, 4, 4, -3, 2, 7, 2, 6, + 10, -3, -1, 2, 3, -1, 4, -1, -12, -19, 1, 11, 10, 8, 9, 10, 9, 8, 1, -1, -4, 6, 4, 0, -4, 2, -12, -7, -7, -8, + -3, -8, -2, 2, 1, 8, 2, 0, 2, -8, -4, 2, 4, 9, 4, 6, 5, -9, 4, 4, 2, -1, -1, -1, -10, -8, -4, -20, -20, -8, + -3, -1, -7, 4, 1, 28, -21, -12, 13, -24, -25, -7, -5, 16, -3, -8, 12, -3, 7, 5, 6, 14, 1, 4, 2, 2, -16, 15, 13, -1, + 0, -8, -6, -3, -4, -10, -22, 4, -9, -7, 8, -2, 4, 11, 9, -9, 12, 20, 8, 5, 5, -1, 12, 5, 9, 7, -12, -3, 15, -2, + 10, 3, -12, -14, -1, 0, -1, 7, 8, 0, 11, 1, 1, 7, 8, 8, 7, 7, 4, 10, 8, 4, 7, 14, -4, -5, -3, 2, -9, -14, + 7, 7, -4, -15, -7, -6, 3, 4, -11, -12, 11, 18, 6, 11, 5, 3, 7, -1, 1, 7, 9, 1, -6, -3, -5, -5, -1, 1, -2, -6, + 1, 5, 3, 0, 12, 12, 12, 11, 14, 1, -1, -4, 3, 2, 5, 9, 14, 6, -12, 1, 4, 10, 11, -2, -4, -2, 10, 4, 2, 1, + -2, 1, 3, 1, 16, 21, 0, 11, 27, 9, 11, -7, 18, -2, -3, -13, -3, -4, 0, -8, -13, -18, -8, -7, -11, 10, -3, -13, -14, -14, + -10, -7, -3, -9, -5, 8, 8, -10, -3, -8, 3, 0, -2, -8, -5, -3, -1, 2, 1, -9, -2, 4, 3, -2, -7, -8, -7, 4, 1, -6, + -5, 9, 10, 6, 7, 3, 2, -2, 1, -1, 6, 7, -2, -6, -1, 2, -1, -4, -7, -5, -3, -4, -4, -8, -8, -7, 3, 4, 0, -1, + 1, 4, -4, 2, 3, 4, 7, -8, 0, 9, 4, 4, 4, -6, 4, -3, 0, 0, -7, -2, 9, 16, 14, 4, 6, 7, 4, -7, -4, -7, + -19, -18, 0, -7, -10, -7, -19, -7, 4, 5, 1, 5, 18, 8, 4, -3, -3, 4, 7, 10, 12, 4, 7, -1, -5, -5, 1, -8, -7, -1, + -9, 6, 9, 2, 5, 1, -10, -17, -9, -8, 39, -43, -3, 21, -22, -44, 6, 0, -1, -2, 10, 22, -23, -17, 1, -4, -1, -6, -10, -8, + 0, -2, -2, 5, 14, -3, -14, -8, 0, 6, -8, -5, 10, -3, -10, -4, -3, -4, -5, 2, -15, -15, 6, 15, 0, 17, 12, 2, -9, 10, + -8, -7, -3, 7, 3, 1, -9, -10, -5, -1, -1, 10, 6, 10, 15, 11, 8, 7, 1, 2, -3, 4, 0, -4, -5, 0, -7, -2, -2, -15, + -2, 0, 1, 2, -8, -4, -12, -13, -8, -15, -1, -12, -15, -17, -9, -2, -16, -20, -8, -10, 0, -13, -2, -7, 0, 5, 3, 0, 6, 5, + 8, 1, 7, -5, -19, -11, -5, -2, -7, -5, -6, -14, -8, 6, -2, -7, -15, 1, 7, 11, 23, 9, 7, 1, 4, 17, 7, -14, 1, -3, + -1, 5, -11, 5, -10, -3, -4, 11, 11, 8, 3, 8, 11, 21, 6, 2, -2, 5, 5, -4, 16, 3, 24, 19, 7, -3, 16, 4, -9, -2, + 1, -6, 4, -12, -15, 5, 1, -1, -21, -7, 4, -16, -7, -13, 4, 7, 4, -2, -3, 0, -10, -9, -6, -7, -4, -8, -8, -4, -2, 6, + 7, 6, 14, 6, 1, 5, 6, 12, -5, -8, -4, -9, -4, -6, -5, 3, 0, 3, 1, 1, -3, -4, -8, -8, -13, -4, -2, 10, 3, 7, + 11, 7, 9, 6, 1, -4, -6, -1, 3, 0, 0, -1, 1, -2, -1, 1, -2, -7, 2, 2, 6, 3, 3, -2, -8, 3, 16, 4, 7, -3, + 3, 1, -8, 5, 0, -4, -3, 8, 12, -1, 6, 3, 1, 2, 3, -10, -10, -6, -12, -1, -4, -5, -7, -10, -10, -9, 2, -2, 0, 7, + 7, 9, 3, -1, -11, -1, 6, -4, -4, 5, 1, -4, 2, 9, 2, 71, -70, 28, 56, -42, -30, 35, -11, 6, 7, 5, 11, -16, -3, 5, + 13, 3, 9, -4, -15, -12, -18, -6, -6, -5, 4, -2, -9, 3, 18, 5, 7, 8, 11, 18, 20, 3, 5, -11, 5, -9, -7, 10, 10, 4, + 3, 10, 6, 1, 6, -5, -11, 1, -13, -13, 0, 1, -12, -10, -1, -1, 6, 0, 15, 9, 0, 1, 2, 4, 6, 20, 5, -9, -16, -13, + 0, 0, 4, 16, 5, 7, -3, 3, 0, 16, 14, 11, -4, -7, -5, -8, -1, -2, -17, 3, -4, 0, 6, -7, -7, -17, -8, -23, -24, -22, + -16, -10, -13, -18, -21, -22, -23, -32, -31, -23, -21, -27, -37, -32, -27, -24, -12, -6, 7, 15, 13, 8, 1, 14, 25, 18, 21, 20, 16, 14, + 7, 9, 5, -2, 16, 23, 20, 43, 28, 22, 11, 19, 22, 18, 15, 16, 16, 32, 24, 21, 7, 19, 8, 6, 0, 9, 1, 8, -2, 10, + -1, 9, -2, -19, 2, 8, 13, 12, 21, 13, 11, -4, -9, -18, -2, -14, -6, -16, -27, -31, 0, 3, 0, -1, 2, 0, -2, 0, 0, 0, + -1, -1, -4, 2, 5, 7, 7, 2, 0, -1, -1, 0, 5, 1, -1, 4, 4, -1, 9, 11, 12, 10, -1, 3, -2, -8, -15, -22, -19, -17, + -8, -12, -21, -16, -21, -18, -9, -7, -10, -15, -26, -17, -16, -16, -15, -8, 2, 11, 4, 3, 5, 5, -1, 9, 3, 9, 13, 3, -1, 0, + 3, 5, 1, -5, -2, 3, -1, 7, 1, -3, 9, 10, -6, -9, -10, -19, -14, -13, -9, -15, -20, -14, -17, -16, -18, -7, -10, -1, -8, -7, + -11, -8, -9, -15, -4, -5, -4, 0, -5, -12, -14, -18, -17, -12, -5, -2, -3, -8, -3, -10, 53, -127, 89, 52, -87, 5, 86, -90, 33, 47, + 3, 7, -17, -9, 27, -1, -1, -14, -26, 6, 13, -10, 7, 17, 18, 27, 5, 12, 5, 7, 5, -3, 2, -2, -5, -8, -3, -11, -20, -9, + 9, 3, 4, 20, 3, 15, 11, -9, -15, -12, -10, -18, -10, -10, -17, -15, 13, -13, -6, -7, -13, -14, -24, -5, -2, 6, -8, 1, -3, 0, + 2, -4, 1, -7, -18, -10, -10, -20, -22, -12, 6, 3, 9, -4, 2, -7, 1, -11, -6, -11, -16, -6, -7, -16, 6, -1, -7, -10, -3, -3, + 7, 11, 16, 20, 18, 20, 28, 17, -4, -7, -5, 3, 4, -2, -10, -2, -6, 1, -9, -31, -14, -2, 3, 7, 13, 32, 38, 48, 29, 15, + -3, -15, -5, 3, -4, -9, 2, 14, 0, 6, 13, -3, -1, 1, -13, -6, -2, -10, -7, -21, -12, 7, 8, -11, -2, -5, 11, 12, 26, -1, + 6, 2, 5, 8, 1, 4, 17, 11, 3, 12, 9, 0, 2, 5, 2, 5, -23, -33, -26, -13, -29, -29, -30, -37, -60, 6, 8, 15, 11, 12, + 9, 19, 18, 15, 8, 15, 7, 11, 11, 7, 10, 6, 10, 13, 19, 20, 12, 7, 15, 14, 12, 10, 4, 1, 0, -2, -2, -8, -5, -6, + -8, -7, -3, 1, -7, -7, -15, -20, -29, -39, -47, -48, -47, -39, -29, -31, -35, -43, -57, -56, -51, -38, -17, -5, 6, 19, 16, 21, 29, 30, + 28, 32, 30, 26, 22, 27, 21, 23, 19, 23, 25, 13, 21, 24, 12, 26, 24, 15, 11, 0, 5, 5, 1, -10, -20, -25, -33, -26, -18, -20, + -10, 2, 0, -19, -25, -18, -18, -23, -35, -27, -25, -30, -29, -31, -31, -30, -25, -36, -25, -22, -46, -61, -63, -53, -53, 44, -115, 94, -25, -115, + 54, 59, -101, 50, 42, 16, -9, -18, 15, -8, 29, 46, -39, -25, 46, -7, -18, 17, 11, -4, 18, 9, -4, -8, -5, -5, -11, -5, -5, -19, + 4, 21, -6, -6, 6, 5, 0, 9, 0, -3, -7, -21, -11, -16, -5, -10, 9, 16, 5, -13, 8, 9, 12, 3, -8, -2, -1, -7, 12, -26, + -5, -6, -1, 0, 1, 8, 3, 2, 7, 4, 7, 5, 4, -1, -3, -3, -1, 8, 4, 5, 1, 0, -7, -4, -2, -4, 1, -1, 0, -7, + -4, 1, 2, 0, -6, 3, 8, 6, -1, 2, 4, 2, 1, 6, 10, -2, -1, -7, -3, -1, -3, 6, 1, 9, 12, 5, 9, 7, 6, -2, + 1, 0, -3, -2, -8, 0, -1, -4, 4, 6, 5, 4, 1, 0, 3, 0, -5, -4, -5, 1, -3, 1, 4, -2, 3, 7, -3, -5, -8, 0, + -4, -2, -7, 1, -11, -15, -3, -17, 1, -3, -10, -1, -2, 10, -6, 4, -10, -5, 1, -10, 2, -10, -2, -4, 0, 6, 6, -7, -4, -2, + 2, 4, -3, -1, 1, 7, 6, 4, -3, -4, -6, -3, -7, -4, -5, 1, 3, 1, 2, 5, 4, 5, 12, 7, -3, -2, 3, 5, -6, -8, + -8, -5, -1, -1, 5, 7, 5, 10, 2, 3, 4, 1, 2, 2, -1, 0, 1, 1, -6, -10, -9, -6, -4, 4, 8, 3, 4, -2, -2, -7, + -11, -4, -2, 0, 3, 1, 3, -5, -1, 2, 2, 3, -1, 0, 4, -2, -1, -8, -8, 2, 4, 8, 2, 1, 5, 2, 2, -4, 0, 0, + -3, -1, 2, 3, 3, 1, 0, 6, 1, -3, 0, -3, -11, -4, -5, 1, -5, -3, -7, -6, -3, -10, 4, 5, 6, 3, 3, 2, 2, -8, + -4, 16, 7, 8, -3, -7, -1, -2, -3, -2, -6, -5, 3, -2, -12, 1, -1, -16, -7, -14, 1, -1, -4, 1, 3, -9, -9, 2, -4, -11, + 5, -4, -1, 6, 0, -2, 8, -1, -2, -6, 2, 13, 8, -1, 1, 0, 0, -8, -1, -7, 0, 4, 2, 3, 12, 8, 12, 8, -2, -2, + 2, -9, 2, -7, 12, -3, -6, -9, -1, 2, 8, 6, -3, 2, 0, 5, 3, 4, -4, 0, 4, 6, 9, 9, 4, 4, 5, -1, 4, -6, + -3, -7, 4, 0, 2, 2, -7, -6, -4, -4, -3, 0, -2, 1, 1, -5, 0, -1, -8, -8, -7, -5, -3, -9, -6, 2, 2, -6, -1, -1, + 5, 3, -2, -6, -5, 10, 9, 10, 14, -1, -4, -6, -1, 5, -2, -3, 2, 6, 1, -5, 1, 1, 10, 6, 10, 4, 10, 2, -7, 4, + -4, 3, 5, -7, -8, 4, 6, 2, 3, -6, 3, 9, 3, 8, 12, 4, 2, 9, 2, -3, 3, 0, 1, 1, -4, -1, 2, 4, 5, 7, + 3, -1, 5, 12, 4, -3, -1, 0, 8, 10, 4, 5, 3, 1, 0, 1, -4, 3, 1, 4, 1, 2, 4, 2, 0, 2, 2, 2, -3, -9, + -7, 1, 5, -2, 1, 0, 0, 1, 0, 0, 4, 7, 6, 4, 2, -2, -6, -3, -1, -1, -3, 3, 4, 1, 0, 4, -3, 4, 3, 3, + 6, 2, -4, -1, -5, -5, 4, 2, 0, 3, -6, 0, 2, 2, 0, -3, -1, -3, -2, -9, -2, -3, -3, 0, -7, 3, 1, -1, -7, -2, + -4, -4, -2, 2, 6, 4, 3, -2, 1, -1, -3, 2, -3, -2, 1, -1, 5, 4, -1, -7, -7, -2, -5, -2, -6, -3, -5, -2, 5, -2, + 0, 3, -2, 3, -3, 5, 6, 15, 15, -10, 1, 6, 19, 8, 4, 11, -2, 5, -2, -4, -8, -4, -9, 5, -6, 0, 9, 6, 0, 1, + -15, 6, 6, 4, 0, -4, 2, -2, -2, -8, 3, 2, 4, -4, -2, -5, -1, -3, -3, 6, 2, -3, 5, 3, 2, -4, 4, 5, -2, 5, + 3, 2, 5, 0, -7, -5, -8, -7, -7, 14, 1, 9, 13, 7, 12, 13, 9, 11, 13, 8, -4, -6, -10, 1, -7, -9, -3, -5, -4, -5, + 2, -7, -9, -6, -8, -3, 4, -3, -3, -2, -2, -3, -6, 1, 10, 12, 5, 2, -5, 3, 2, -3, 5, 9, 6, -2, 6, 1, 7, -2, + 0, 5, 3, -3, 2, 6, 2, 4, 6, 3, 7, 6, 4, 6, 3, 1, 4, -5, 6, 1, -4, 5, -13, -5, 3, -3, 0, -10, -13, 4, + 11, 1, -5, -8, -5, 1, -4, 1, -2, 4, 1, 2, 8, 0, 8, -3, 7, 8, 5, 0, 1, -3, 3, 5, 4, 9, 2, 0, -4, 2, + -11, 8, 8, 0, 9, 10, 8, -1, 1, 1, -1, 2, 0, 3, 8, 8, 4, 6, 1, -6, -6, -2, -6, 0, 2, 0, -2, -3, -5, -6, + -5, -6, -3, -7, -7, 0, 2, 3, 0, 2, 4, 4, 1, -2, 3, 3, 2, 7, 0, -4, -5, -2, -7, -2, 0, -10, -8, 2, -8, -14, + -9, -6, 0, 1, 0, 0, -3, 0, -4, 0, -1, -1, 5, 2, 1, 8, -2, 0, 0, 0, -2, 4, -1, -1, 3, -2, -1, -7, -2, 1, + -13, 1, -9, -4, -4, -5, -8, -3, 1, -8, 0, 5, -3, 2, -6, -1, -1, -9, -3, -1, -2, 3, -2, -2, 5, -2, -4, -5, -1, 1, + 2, 3, 4, 0, 1, -3, -3, -3, -1, -6, 7, 6, 12, 6, -2, -1, -1, -10, 9, 5, 6, 5, 6, 0, 1, 9, 2, -4, -3, 7, + -8, -2, 5, 7, 11, 4, 3, 14, 4, -7, -13, -6, 0, 0, -5, 3, 2, 7, 3, -9, -14, 2, -8, 4, 2, 0, 4, 9, 2, -2, + -1, 0, -3, 3, 9, 5, -1, 0, 1, -3, 2, -10, 3, -2, 3, 14, 9, 6, 10, 20, 12, 4, -4, -6, -7, -11, -7, -10, -12, -8, + -6, -7, -8, -3, -2, 3, -7, -7, -6, -3, -4, 2, 8, 0, -6, 4, 5, 6, 0, 0, 2, 3, 3, -5, -4, -6, 1, 2, -2, 4, + -2, -1, -4, -10, -5, 6, 8, -9, -3, 7, 3, 4, -1, 3, -5, 2, 0, -2, -12, -4, 3, 5, 1, 1, 5, 7, 2, 4, 8, -2, + 2, 2, -8, 2, 8, -6, -6, 0, 1, -3, -5, 2, 1, -4, -1, 11, 3, -3, 0, 8, 8, 14, 2, 6, 6, 4, 4, 0, 9, 8, + 10, 4, 2, -9, 1, -11, -5, -12, 2, 1, -8, -2, -1, -2, -1, 10, 8, 9, 12, 13, 8, 9, 4, 2, -7, -6, -3, -2, 1, -1, + 3, -4, -4, -3, -2, 1, -5, -3, -7, 2, 0, 1, 5, 1, 4, 5, -2, -4, 0, -5, -3, 1, 7, 2, 6, 8, 4, 7, 8, 3, + 0, -3, 1, -1, -3, 4, 5, 5, 4, 6, 1, 5, 2, 0, -2, -7, -6, -6, -5, -5, -2, -4, -6, -3, 4, -2, -1, -9, -2, -3, + -3, -2, -3, -3, -7, 3, -7, 0, -2, 2, 11, 6, 5, -6, -4, 5, -2, -6, 2, -7, 0, 1, -1, -2, 7, -1, 0, 0, 4, 7, + -6, -1, -10, -8, -1, 3, 3, 0, 1, 8, 10, 5, 2, 2, -8, -3, -5, 0, -5, -2, -3, -7, -12, -10, 7, 8, 5, -4, -12, -4, + 3, -2, -2, 7, 1, 2, -2, 0, -5, -8, -7, -2, 4, -4, -3, -13, -8, -5, 0, -10, -5, 6, -3, -7, 0, -2, 4, 2, -2, 4, + 13, 10, -3, 3, -2, 0, 4, -1, 5, 6, 2, 0, 5, 2, 4, 2, 1, 0, 1, -3, 19, 22, 14, 18, 24, 29, 19, -4, -3, -8, + -16, -31, -26, -24, -18, -23, -18, -11, -9, -11, -12, -15, -14, -13, -7, -2, -5, -1, 0, -17, -3, -8, -14, -14, -9, 2, 6, 5, -4, 5, + 3, 3, -4, -9, -1, 6, 3, -1, -4, -6, -1, -1, -9, -2, 6, 8, 4, 0, 5, 5, -1, 1, 6, 7, 5, 18, 12, 4, 4, -2, + 6, -2, -7, 1, -12, -19, -3, -3, 8, 6, 6, 13, 17, -4, 10, 16, 10, 3, -5, 1, 5, 12, 0, -3, -6, -3, -3, -4, 4, 5, + 10, 5, 9, 0, -6, -4, 1, 8, -1, 7, 9, 3, 1, 1, -5, -16, -13, -9, -9, -12, 17, 15, 18, 19, 19, 16, 12, 8, -3, -11, + -11, -17, -12, -13, -4, -5, -3, -1, 4, 3, 4, -5, -7, 0, 3, 8, 13, 12, 9, 3, 2, -3, -5, 1, -4, -1, -3, 1, 2, -1, + -2, 0, -4, -5, -9, -9, -15, -12, -7, -1, 3, -2, -1, 5, 2, 2, 1, 4, 5, 3, -4, 5, 2, -1, -5, 3, -3, -1, -2, -1, + -3, 1, -2, 1, 0, -2, -2, 1, -1, -6, -4, 6, 0, 6, 3, 3, -3, -6, -7, -3, -7, -5, -2, -7, 0, -8, -3, -8, 1, -1, + 1, 2, 6, 0, 1, 5, 3, -1, 1, 0, 4, 2, -2, 4, 4, 2, 2, -1, -1, 4, 10, 5, -15, 11, 12, -13, -14, -16, -10, 6, + 20, 18, 0, -19, 4, 15, 11, -4, -1, 5, -1, 3, -1, -10, -5, -1, 2, 3, 2, 0, -4, -1, -1, 7, -5, 3, 6, -2, 1, -3, + 6, 13, -2, 10, 16, 10, 1, -4, -7, 1, 4, 5, 1, 9, 14, 8, 7, 15, 1, 0, 1, -5, -3, 4, -18, 25, 23, 23, 14, 11, + 10, 11, -5, -21, -21, -27, -29, -29, -22, -23, -28, -23, -16, -12, -10, -13, -7, 1, 8, 2, 2, -8, -1, 5, 6, 8, 4, 6, -7, -19, + -25, -23, -23, -18, -20, -16, -11, -5, -3, 1, 3, 0, -1, -3, -11, -7, 5, 2, -14, -18, -18, -22, -22, -10, -10, -16, -11, -8, -12, -8, + -8, -4, -2, -2, -8, -6, -11, -12, -4, 1, -3, -12, -11, -3, -6, -8, 1, -3, -9, -13, -3, 4, 0, -2, 1, 3, 13, 2, 10, 20, + 16, 15, 29, 14, 13, 22, 18, 10, 7, -4, -8, -9, -8, -2, 5, 2, 3, -7, 0, 7, 5, 8, 0, 13, -10, 40, 33, 32, 28, 21, + 15, 10, -3, -7, -22, -22, -22, -19, -22, -16, -11, -9, -10, -6, -6, -2, -3, -3, 3, 0, 4, 3, 2, 6, 4, 2, 6, 4, 3, 0, + 0, 0, -3, -4, -1, -4, 1, 4, 2, -1, 1, -1, 0, -5, -6, 0, -2, 4, 3, -2, 2, 7, -4, 1, 8, -4, 5, 1, -5, 0, + -8, -6, 3, 6, 2, -1, 2, -5, 7, 4, 3, -1, -4, 3, 1, 5, -4, -1, 9, 9, 8, 11, 19, 16, 9, 3, 7, 6, 7, -2, + 1, 0, 5, 3, 4, 7, 2, 3, 2, 5, 16, 20, 25, 31, 22, 15, 4, -12, -28, -41, -56, -60, -74, -86, -127, -3, 34, -44, -8, 46, + -7, 32, -41, 6, 19, 37, 32, -7, -9, -2, 14, 2, -10, -6, -8, -4, 4, 3, -2, -13, -6, -2, -5, -3, -5, -9, -11, -3, 3, 2, + -1, -7, -5, -9, -4, 0, -7, 2, 3, 3, -2, -3, -8, -9, -1, -3, 6, 5, 0, -1, 0, 1, 0, -2, 7, 4, 0, 4, 0, 9, + 1, -3, -1, -3, -1, 3, 2, -6, -5, 0, 1, 3, 1, 0, 4, -3, 0, -2, 7, -1, -3, -3, -3, -8, -6, -3, 3, 1, -3, -4, + -1, -4, 1, 0, 3, 1, -2, 1, 1, -1, 1, -2, -5, -6, -1, 1, -4, -3, 0, -3, 2, 5, 1, -5, 3, 3, 1, -4, 1, 0, + 3, 4, -1, 4, 1, -1, 2, 0, 1, 3, 3, 10, 8, 2, 5, -2, 3, 3, 6, 6, 3, 4, 7, 6, 2, 1, 5, -7, 2, 6, + 14, -1, 2, 1, -6, -8, -10, -1, -7, -7, 1, -2, 0, -1, -1, -1, -4, -4, -4, -1, 1, 2, -6, -11, -1, 2, -4, -1, -2, -1, + 3, 3, 0, -3, 1, -1, 2, 1, 1, 3, -2, 3, -1, 2, -2, 2, 1, -2, -2, -4, -2, -2, 3, 1, 1, 0, 5, 6, 0, -2, + -4, 0, 3, 2, 0, 0, 1, 3, 0, -2, 2, 1, 0, 4, 2, -2, -3, -8, -4, 2, 2, 4, 6, 0, 3, 2, -4, -3, -3, 2, + -3, -3, 2, -1, 0, 2, 1, -4, -6, 1, 4, -1, -1, 0, 0, -2, 4, 2, 5, -1, 0, -3, 5, -3, -4, -5, 0, 0, 0, 3, + 7, -1, 1, 3, 5, 1, 4, -2, -2, -3, 0, 1, -4, 5, 1, -2, -2, -5, -6, -4, -3, 0, 0, 2, 5, 3, 6, -2, -6, 8, + -4, -18, 1, -7, -3, 1, -9, 0, 8, 5, 5, 1, -6, -7, -7, -2, -3, 0, 6, 4, -4, 4, -3, 2, -1, 4, -5, 2, 5, 6, + 2, 3, 6, 5, 2, 5, -1, 5, -7, 1, 3, 1, 6, 3, -1, 2, 1, 6, 2, 6, -4, -3, 1, -3, -4, 3, -8, 6, 4, -2, + -9, -5, -4, -4, 1, -6, -3, -11, -7, -5, 2, 4, 1, 0, -4, 0, 3, -1, -4, 4, 1, 4, 8, 0, -2, -3, -1, 2, 3, 0, + -3, 3, -2, -1, 0, 0, 0, -4, -2, -1, 2, -4, -1, -4, -1, -3, 0, -2, 1, -1, 2, 3, 1, 0, -3, 1, -1, 2, -1, -3, + -2, 3, 3, 1, 1, 3, 3, 9, 4, 1, 6, 6, 3, 6, 9, 2, 6, 5, 6, 4, 0, 5, 2, 1, 0, 8, -1, 1, 6, 4, + -1, 7, 1, 6, 1, 1, -6, -1, -1, -2, -1, -2, 1, 3, -2, -1, 1, -4, -4, -6, 0, -5, -12, -8, -12, -2, 3, -6, -4, 1, + -7, 1, -1, 0, -2, -4, -5, -5, -5, -2, 0, 1, 2, 0, -3, 0, 3, -1, -1, -5, -5, 0, -1, 1, 2, 1, 2, 4, 5, 3, + -1, 3, 1, 0, 0, -1, 3, 1, 2, 4, 1, 0, -2, -1, 0, 3, 3, -7, -3, 1, 1, 1, 7, 4, 4, -1, 6, 5, -2, 0, + 2, -1, 0, -1, -1, -1, -6, 0, -3, -5, 3, 3, -4, 1, -1, -2, 0, -1, 3, -2, 2, 4, 3, -2, 0, -4, -3, -2, -2, 1, + -5, -1, -1, 1, 0, 1, 5, 4, 1, 7, 5, 1, 2, -1, -3, -3, -1, -3, 2, -2, -2, 5, -1, 4, 5, 2, 4, 3, 3, 3, + -1, 1, -1, 4, 2, 4, -7, 6, 2, 1, -4, -5, 5, -1, -7, 12, -1, -6, -5, -1, 5, -2, 1, 1, 1, -8, 0, -4, -4, 2, + -1, -9, -3, 6, 2, 6, 13, 2, 2, -4, -3, -2, 2, 4, 6, 0, 2, 2, 2, -3, 1, 0, 7, 0, 0, 2, -4, -2, 3, -6, + -1, -6, 1, -2, 3, -1, -7, -6, -3, -3, 2, -1, -2, -10, -7, -1, 2, 4, 0, -3, -6, -1, -2, 0, -5, -6, 0, 3, 3, 1, + -7, -4, 3, -3, -3, 1, 2, -6, 6, 2, 0, 3, -1, -5, 0, 1, 2, 3, 3, -6, -5, -8, -4, -6, -4, 0, 5, 1, -2, -6, + -2, 1, 1, 3, 1, -6, 3, -1, 1, -4, 1, 2, 1, 1, -3, 1, -5, 7, 7, 2, 4, -1, -4, 0, -4, -2, -1, 1, 0, -6, + 4, 4, 7, 10, 0, 5, 1, 3, -2, 9, 4, 4, -3, 7, 0, 1, 4, 6, 9, -3, 1, 1, -8, -5, -10, 0, 9, 2, -2, -3, + 2, -10, -7, -9, -3, -3, 3, 1, -2, -2, 4, 0, -3, -8, -3, 2, 4, 3, -2, -3, -4, 0, 4, -1, -1, 1, 1, 6, 4, 2, + -1, 0, 0, -2, 0, 0, 1, 2, -1, -1, -3, -4, -4, -3, -2, -3, 1, 0, -3, -2, 7, 5, -1, 0, 2, 6, 2, 6, 4, 0, + 2, 1, 4, -1, -2, -3, -3, -2, -1, 1, 7, 0, -1, 2, -1, 5, -1, 0, -2, -2, -4, -3, 0, 1, -4, -2, 0, -3, 2, 1, + -3, 5, 7, 3, 3, -2, -2, -1, 1, 3, -1, -7, -1, -1, 0, 5, 3, 6, -2, 2, 1, -1, -3, -2, -3, -1, 4, 3, 2, 0, + 3, 2, 1, -1, 0, 0, -3, 1, -3, -2, 2, 2, -3, 5, 4, -4, -5, -11, -2, -1, -4, 3, -2, 1, -2, 2, 1, 7, 9, 0, + 2, -6, 2, 8, -5, 5, 5, 4, 2, -4, 2, 0, 1, -3, -6, -5, -12, -2, 3, 0, 6, 4, 0, 3, 0, -3, 2, -1, 3, 1, + -5, -8, -6, -1, -4, 1, 4, -1, 3, 6, 5, 3, 1, 3, -10, -4, -5, -2, 3, 9, 8, 9, -1, -3, -5, 2, 4, 1, 1, 2, + 2, 3, 0, 1, -1, -8, 0, 2, -9, -9, -4, -5, -6, -1, 0, 4, 5, 1, 10, 5, 7, 6, 3, 6, 4, 11, 3, 1, 0, 6, + -1, -4, -9, -1, -2, 3, 0, 4, 6, 7, 2, 2, 3, 0, 1, 1, 2, -3, 0, 1, -5, -1, 4, 4, 2, 1, 0, -7, 1, 1, + -4, 2, -7, 4, -5, -15, -1, -2, 0, -9, -8, 1, 3, 7, 11, 3, 4, -8, -2, 3, -2, 1, 0, 5, 3, -11, -1, -3, -2, -3, + -5, 3, 7, -4, 1, 4, -1, -2, -4, 1, -9, -2, -6, -8, 1, 2, 5, 1, -2, 0, 2, 2, 1, 1, 1, 3, -1, 3, 0, 0, + 2, -1, -3, 0, -1, -2, -3, -1, -3, -5, 1, 1, 2, 0, 2, 0, -1, -1, -5, -4, -1, -4, 1, 0, 1, -3, 1, -2, -5, -4, + -2, -2, 3, 2, -1, 2, 0, 3, 3, 2, -3, -5, 1, 1, -3, -2, -3, -5, -2, -4, -2, 1, -1, 1, -3, 1, 8, 2, -2, 2, + -3, -2, -1, 2, -1, 1, 6, 3, -2, 1, -4, -2, 2, -5, 0, -2, -1, 4, 1, 4, -1, 4, 1, -1, 0, 2, 3, -7, -2, 6, + 1, -3, 1, 3, 3, -4, 0, 3, 0, -1, -8, -2, -3, 7, 3, 9, 5, 7, 5, -5, -8, -7, -5, 1, -4, 0, 6, 1, -2, -1, + -1, 2, 6, 5, 4, -9, -6, -2, -4, -2, 5, 2, -4, -4, -3, -3, -4, 2, 1, 2, 2, -2, 1, -6, 0, 3, 2, -2, 5, 0, + -3, -5, 2, -3, -2, -9, -4, 0, -1, 1, 1, 0, 5, -3, 6, 5, 4, 6, 8, -12, -9, -11, -4, -4, -8, -4, -9, -6, -12, -8, + -8, -8, -13, -6, -3, -7, 2, -1, -4, 1, -1, -6, -4, -4, -12, -6, 3, 0, 3, 5, 0, 6, -2, 0, 6, 2, 3, 4, 3, 2, + 1, 2, 8, 0, 1, 0, 2, 3, 8, 8, 9, 4, 6, 10, 6, 9, 9, -9, -7, 0, -8, -4, 11, 6, 9, 14, -4, 3, 7, -4, + -3, 3, -5, -4, 2, -7, 3, 0, -5, -3, -9, -2, 0, -2, -7, 1, -1, -5, -10, -12, -5, -4, -5, 1, -10, 1, 9, 9, 15, 12, + 17, 17, 7, 6, -4, -13, -3, -6, 5, 4, 5, -2, -8, -6, 0, -5, -3, 3, -6, -4, 3, 3, 0, 2, 1, 3, 2, 2, -1, -3, + -2, 0, 1, 6, 4, 2, -2, -3, -1, -3, -2, -2, 0, 2, 2, 2, 6, 0, -1, -2, 3, 2, 0, -2, -2, -2, -5, -4, -4, -3, + -3, -2, 0, -1, 3, 2, 1, 4, 4, 1, 1, 6, -1, -3, -4, -4, -3, -2, -4, -1, -1, 1, -4, -1, -1, 4, 0, -3, 1, -1, + 3, 0, 2, -1, -3, 2, 1, -2, -1, 4, 2, 3, 4, 0, 2, 5, 4, -3, -3, -6, -3, 0, -1, 1, 0, -2, 3, -2, 5, 4, + 9, 2, -3, -8, -4, -6, 1, -1, 2, 2, -1, -1, -4, -3, -3, 0, 0, 0, -1, 3, -2, -4, 24, 8, -24, -1, 1, -8, 8, -4, + 8, 0, -18, -2, -7, -4, -3, -3, 4, -1, 2, 1, 3, 3, 3, -1, -8, -5, 2, 3, -2, -2, 4, 9, 2, 2, 2, 2, -5, 5, + 0, -1, 2, 5, 5, 2, 5, 1, 3, -2, 2, -3, 4, 6, 0, 5, -4, 6, -3, 3, 1, 8, 2, 7, 9, -8, -1, 3, -1, 1, + -4, -4, -9, -5, -1, 2, 1, -1, -5, -8, -4, -1, 1, -4, -11, -10, -10, -13, -14, -8, -4, 4, 6, 9, 7, 6, -2, -13, -10, -7, + -3, -5, -4, -6, -2, -7, -4, -5, -12, -10, -6, -11, -5, -7, -8, -12, -12, -14, -8, -3, 1, 2, -4, -7, -8, -4, 13, 26, 34, 33, + 20, 10, 4, 5, 3, -3, 3, 9, 8, 6, 4, 9, 9, 7, 13, 8, 9, 9, 3, 5, 3, 2, -1, -6, -6, -1, -3, 1, 6, -5, + 1, 5, 14, 18, 25, 19, 14, 10, -22, -35, -52, -34, -17, 9, 21, 12, -3, -3, -1, -6, 8, -8, 7, 1, 2, 8, 8, 7, 9, 9, + 8, 7, 9, 7, 9, 5, 12, 12, 11, 12, 7, 11, 8, 5, 2, 2, 4, 8, 3, 4, 5, 6, 6, 6, 7, 7, 6, 1, 1, -3, + -3, -6, -7, -11, -11, -2, -1, 1, -4, -6, -5, -5, -3, -5, -9, -16, -13, -15, -11, -17, -13, -12, -7, -8, -2, 4, 8, 11, 14, 8, + 2, 0, 1, -2, 2, -2, 3, -2, -2, -2, 1, 4, 10, 12, 18, 16, 19, 23, 16, 19, 22, 20, 18, 18, 20, 21, 21, 21, 14, 8, + -2, -7, -13, -24, -24, -37, -44, -54, -65, -65, -56, -38, -15, -4, 6, 11, 4, 10, 13, 16, 22, 17, 14, 11, -1, -44, -62, 127, -3, -51, + 91, -23, -5, 72, -1, 17, 9, -28, 1, -4, -10, -17, -18, -5, -6, 8, -17, -4, 10, -4, -3, 0, -6, 9, 8, -2, -7, 2, 2, 3, + -2, -13, -9, -11, -2, -6, -8, -2, -2, 2, 3, 2, 1, 6, -5, 0, -8, -3, -6, -14, -7, -7, -9, 1, -1, -4, 6, -3, -10, 50, + 4, 2, -9, 1, -2, -7, 3, 14, 12, 15, 4, 15, 12, 9, -4, -7, -14, -10, -2, -6, -8, -4, 1, -5, -5, -8, -11, -7, -5, -1, + 3, -6, -11, -8, 0, 2, -2, -4, 5, 8, -3, -5, -2, -3, 1, 3, 4, -1, 2, -1, -7, 2, 3, -4, -5, -9, 3, 1, 4, 4, + -1, -1, -1, 2, -6, -5, 3, 11, 0, 0, 8, 8, 7, 5, -14, -12, -11, -8, -11, -5, 1, 2, 1, -2, 0, 4, -2, 6, -7, 0, + 2, 7, -2, 8, 12, -3, 2, -5, 2, -11, -11, -4, 6, 8, 6, 12, 5, 9, 1, -3, -6, 12, 6, -1, -3, -8, 5, 10, 8, -6, + -5, -9, -6, 3, -3, -4, -2, 3, 7, 9, 5, 5, -4, 4, 1, 5, -3, -3, -4, 2, 2, 1, -10, -5, -2, -8, -11, -8, 6, 10, + 13, 7, 5, -2, -5, -5, -8, 0, 5, 3, -11, -11, -4, -4, -7, -5, -4, 1, 5, 2, 6, 6, 7, 10, 11, 12, 8, 8, 16, 18, + 15, 8, 8, 5, 2, -2, -5, -5, -7, -6, 0, -7, -1, 0, -7, -2, -1, 2, 1, -3, 2, 6, -3, 5, 1, -4, 2, 0, -1, 0, + 6, 3, 1, 2, 1, -1, -2, 0, 4, -1, 0, 3, 4, 11, 13, 3, 0, 2, -6, -5, 1, 3, 5, 2, 1, 2, -3, 7, 7, -29, + 41, -14, -15, 9, 13, -13, -7, -5, -16, -12, 5, -26, -9, 13, 0, -13, -18, -12, -1, 5, 15, -13, -8, -4, 0, -7, 4, -1, -5, 4, + 10, 2, -3, -7, -5, 9, -2, -1, -7, 6, 10, -14, 5, 0, -8, 1, 2, 11, 7, 3, 3, -6, -5, 6, 3, 9, 7, -12, 4, -1, + 2, 7, 4, 3, 54, -9, -9, -14, -7, 1, -3, 2, 16, 5, 6, 6, 4, 11, 4, -1, -8, -11, -5, 2, 5, -1, 3, 9, -1, -10, + 0, 9, 1, 1, 0, 5, 0, -2, 0, 4, 3, 6, 4, 2, 8, 6, 2, 2, -5, 4, -3, 4, 0, 7, 4, -5, 1, 2, 10, 4, + 1, 5, 9, 16, 9, 4, -6, -3, 0, 2, 11, -3, 5, -4, -9, 1, 9, 15, 12, -5, 6, -4, 7, 16, 9, 7, 9, 4, 1, 6, + 6, 6, 7, -8, -1, 4, 6, -2, 12, 9, 8, 3, 5, 11, 5, 1, -4, 0, -3, -18, -5, -2, -6, -6, 5, 15, 8, 4, 6, -2, + -12, -10, 5, 5, -1, -4, -7, -6, -7, -2, 0, 5, 2, 7, 3, 5, 2, -5, -2, -8, -3, 0, -3, 1, -3, 0, -5, -4, -2, -6, + -8, -2, -7, 0, 0, -5, -1, -1, -5, -1, -2, 0, -8, -5, -4, -5, 1, 6, 8, 2, 3, -3, -6, -1, -5, -4, -2, -5, -4, -4, + -3, 2, -5, 0, 7, 3, 2, 1, 2, 2, 13, 7, 4, 9, 6, 0, 6, 4, -3, -7, -1, -4, -1, 4, 0, 9, 9, -3, -14, -5, + 7, 7, 5, -1, 7, 5, 5, -5, 4, 1, -5, -4, -3, 1, -2, -6, 0, -5, 2, -3, -4, 6, 4, -8, 6, 11, 4, -4, -3, -7, + -13, -12, 9, 1, -4, 35, -12, -9, 11, 0, -17, 1, -3, -15, -7, -21, -16, -8, 12, 6, -15, 0, -12, -6, 0, 0, -14, 2, -7, -3, + 3, -1, 1, 11, -2, 5, 5, -3, -17, -12, 2, 0, -6, -3, -10, 8, -2, 16, 0, 2, 12, 9, 7, 10, 10, 6, -2, 3, 0, 14, + 5, -9, -12, 1, 2, 5, 13, 11, 11, 36, -4, -7, 1, -12, -3, 1, 13, 12, 4, 9, -2, -4, 10, 3, -4, -15, -7, -14, -7, -1, + -9, -6, -10, -5, -5, -6, -3, -10, 4, 4, -1, 2, 0, 1, 3, 3, -3, -6, -5, -4, -1, -8, -2, 0, 4, 6, 1, 11, 9, 5, + 0, 5, 8, -1, 6, -1, -2, -2, 13, 4, -8, 4, -3, -4, -3, -3, -3, 1, -1, 2, 5, 6, 11, 2, 0, 2, 1, 10, 10, 11, + 2, 7, -2, 3, 7, -3, 2, -1, -2, -5, -4, 3, 7, 16, 10, 11, -14, -9, -3, -16, -10, 1, -13, 4, 2, -1, 4, 4, -4, 12, + 2, -6, 0, -7, -1, 3, 7, 6, -14, -20, -2, -2, 4, 4, -1, 3, -5, 0, 5, 15, 9, 4, -1, 1, -1, -1, 5, 6, 4, 6, + -4, -5, -8, -2, -8, -8, -2, 4, 4, 5, 7, 2, 4, 0, 3, -1, -2, -3, -2, -7, -11, -5, 2, 4, 6, 8, 5, -6, -5, 0, + 0, 3, 5, 6, 8, 8, 8, 9, 11, 11, 9, 12, 8, 3, -2, -2, 2, 2, -3, 0, 3, -7, -4, -5, -6, -16, -1, -1, 7, -4, + 10, 8, 11, 5, -1, -2, 1, -1, -4, -5, 3, 1, 0, -4, 1, -5, -4, -3, -1, 1, -5, 0, -7, -5, -4, -11, -3, -5, -7, 6, + 5, 2, -4, 0, 11, 12, 2, 4, 0, -9, 25, -9, 0, 0, 5, -37, -13, -13, -7, -9, 2, 3, -12, -5, -1, -31, 6, 0, -2, 1, + -4, -2, 0, 14, 10, 0, -5, 2, 3, 4, -4, -2, 8, -4, -5, -9, 2, -2, -3, -4, -5, -6, 7, 13, -9, 0, -6, 10, -9, 6, + 4, 5, 4, 0, 14, 0, -4, -2, 0, -5, -6, 5, 10, 12, 17, -9, 3, -2, -14, -12, -6, 3, 4, 18, 6, 0, 4, 7, -6, 4, + 0, -9, -20, 2, -3, 6, -1, -8, -2, 5, 2, 0, 0, -2, 8, 17, 18, 14, 4, -1, -4, -5, -9, -12, -8, -9, 1, 14, 1, 3, + 0, 13, 15, 15, 2, 8, 8, 3, -4, 3, -6, -1, 5, -2, -6, 6, 3, -3, 5, 6, 3, 8, 4, 1, 3, 3, 8, 12, 11, 11, + 5, 6, 11, -5, -2, -6, -8, -1, -7, 2, -16, -8, -2, 3, -8, 2, 0, -3, 3, 3, 3, -10, 4, -1, 12, -7, 11, 2, 2, -3, + -1, -16, -8, -10, -7, -18, -3, -3, -1, -5, -6, -2, 4, -2, -7, 3, -2, -2, 1, 2, 0, -1, 3, 3, 8, 1, -6, -9, -4, 1, + 3, 3, 6, 3, 2, -4, -8, -10, -5, -8, -8, -4, -4, 8, 8, 10, 10, 17, 10, 13, 1, -8, -12, -11, -11, -6, -5, -1, -6, -14, + -9, -10, -10, -11, -7, 4, 1, 4, 2, 2, 7, 6, 0, -4, 1, 1, 4, 1, -4, -4, -8, -4, -6, -7, 1, -4, 9, 6, 12, 11, + 11, -3, -3, 5, 1, 5, 2, 2, 2, 2, 7, 0, 5, -3, 3, 4, 7, 6, 4, 12, 15, 3, 4, -1, -3, 0, 1, 0, 2, 5, + 3, 11, 12, -2, -1, -4, -2, -9, -17, -3, -6, -6, -8, -12, -18, 48, 4, 0, 6, 8, -15, -4, 3, 5, -6, 8, -1, -12, 12, 2, + -14, 9, 4, 10, 0, -7, -10, -5, -5, -1, -3, 1, -8, 4, 9, 1, 4, 0, -14, 5, 2, 2, 0, -1, -9, -3, -8, 6, 7, -6, + -13, -10, -1, 2, -13, 4, -1, -4, 2, -8, -13, -13, -10, -12, 4, 4, 6, -5, 5, -6, 12, 9, 11, 10, 0, 7, 4, 13, 2, 5, + 4, -1, 12, 23, 8, 10, -9, -10, 8, 2, -5, 12, 5, -1, 0, 1, 0, -9, -2, 3, -7, -4, 8, -10, -7, -14, 8, 5, 14, 8, + 13, 5, 4, 1, 11, 16, 9, 20, 21, 17, 9, 7, 11, -10, -5, -12, -12, 1, 7, 0, 12, 1, -5, 13, 11, 8, 24, 20, 17, 9, + 6, 12, -2, 1, 12, 9, 2, 21, 8, 13, -5, -8, -6, -11, -1, -8, -5, -5, -3, -1, 8, 11, 2, 17, 12, 10, 6, 8, 2, 10, + 6, 13, -6, 3, -4, 2, 1, -3, -4, -13, 3, -4, -4, 11, -3, -6, 3, -1, 8, 2, -10, -6, -2, -2, -5, -5, -11, 0, 6, 17, + 14, 3, 2, 5, 4, 0, -1, -3, -3, 6, 0, 4, -2, 1, -3, -3, 2, 2, 0, -4, 1, -1, -1, -7, -9, -5, -5, -4, 1, 8, + 7, 12, 7, 7, -2, 1, 1, -1, 0, 2, 5, 1, 1, -7, -7, -2, -13, -6, -9, -14, 0, -5, -4, -7, -9, -3, -2, -2, -1, -1, + 2, -1, -2, 6, 5, 4, 9, 0, 8, 11, 9, 12, 14, 11, 9, 12, 3, 5, 11, 12, 7, 2, -9, -12, 1, 5, 2, 4, 4, -1, + 2, 4, 0, -5, -7, 4, 3, -4, -5, 6, 0, 0, 3, -4, -2, -1, -4, -6, -14, -11, 88, -11, -4, 3, -4, -24, -23, -19, 0, 7, + 14, -5, -8, -3, -5, -13, 2, 27, 17, 9, -8, -3, 2, -8, 1, 16, 6, 4, 12, 10, 0, 9, 6, 3, 2, 5, -5, -1, -3, -10, + -2, -6, 4, 0, 10, -2, -2, 3, 13, 0, -3, -11, -5, 7, 7, -3, -1, 2, 6, 1, -7, -3, -4, -8, -40, 5, 10, 12, -1, 10, + 17, 20, 27, 34, 20, 19, 6, 18, 21, 16, 8, 6, 18, 23, 21, 30, 28, 14, 31, 23, 16, 24, 31, 46, 49, 42, 34, 30, 28, 22, + 23, 28, 13, 18, 16, 18, 7, 6, 1, 5, 2, 12, 13, 12, 7, 16, 8, 13, 14, 18, 0, 0, 3, 3, 12, 3, 11, 30, 27, 10, + 30, 33, 19, 38, 17, 6, 22, 16, 26, 20, 17, 23, 19, 9, 0, 7, 12, 13, -1, 3, -1, -5, -6, -8, -7, -7, 3, 1, 8, 5, + 3, 5, -6, -9, -3, -2, 4, -22, -8, -12, -24, -24, -13, -13, -11, -3, -18, -4, 10, 5, -4, -21, -7, 26, 13, 2, -5, -6, -2, -3, + -1, 0, 4, 5, 12, 7, 5, 0, -6, -4, -9, -8, -9, -9, -6, -1, -12, -10, -13, -9, -8, -3, 3, -5, -2, -1, 5, -3, 0, 2, + -2, -6, -5, -5, -8, -4, -6, -8, -3, -8, -1, -5, 3, -2, 0, 4, 2, 1, 12, 6, 3, 11, 6, 9, 14, 5, 7, 9, 6, -2, + 5, 17, 9, 9, 3, 4, -1, 3, -1, 5, 9, 14, 10, 11, 1, 8, 1, 3, 1, 5, 6, -3, -3, 2, -1, -1, 2, 6, 6, 0, + 1, -3, -3, 1, 2, 3, -2, -3, 1, -2, -3, -8, 0, 9, 5, 6, 2, 8, -1, 3, 12, 12, 9, 24, 27, 127, 66, -84, -91, 73, + 25, -59, -57, -15, 25, 5, -27, -20, 14, -13, -21, 24, 28, 13, 3, -4, -18, 5, -3, -7, -2, 9, -8, -5, -9, 14, 1, -10, -2, 12, + 9, 15, 3, 1, 7, -5, -9, 5, 2, -1, 5, 7, 4, 2, 3, 4, 1, 4, -1, 11, -5, 3, 1, 1, 2, -10, -1, 3, 12, -64, + 3, 3, 6, 2, 2, 6, 4, -1, -3, 4, 7, 1, -3, -5, 1, 2, 2, 6, -1, -2, -1, 5, 4, 1, 0, -2, 0, 5, -2, -1, + -1, 5, 4, 4, 1, 3, 3, -1, -6, -2, -2, -3, -2, -4, -7, -6, -2, 3, 4, -2, 3, 6, 1, -2, -2, 3, 1, -4, -3, -2, + -1, 0, -1, 2, 4, 2, 0, 0, 0, 3, 0, -3, -2, -6, 0, -1, 4, 2, 5, 1, -2, 7, 5, 2, 0, 5, 1, 3, -2, -6, + -6, -6, -3, 3, -2, 0, 2, 4, -1, -3, -1, -1, 0, 4, 3, 4, 7, 5, 0, -3, -5, -2, 3, -4, -2, 0, -2, 0, 3, 12, + 2, 1, -2, -1, 2, -1, 4, 3, 1, 1, -1, -4, -6, -3, -3, 1, 0, 1, -1, -3, -4, -5, -2, -2, -4, -5, -2, -1, -1, 0, + -2, -2, 1, 2, 0, 2, 3, 3, 1, 1, 2, 3, 4, 3, 2, 2, -1, 1, 0, 0, -1, 1, -2, -5, 1, 0, 1, 5, 1, 1, + -2, -2, 3, 2, 4, 2, -5, 0, -1, -2, 1, -4, -5, -2, -4, -1, 4, 3, 2, 4, 2, 3, 8, 1, 0, 3, 4, 5, 2, 4, + 0, -1, 3, 1, 2, 0, 3, 3, 1, 4, 1, -4, -5, -1, -2, 2, 1, 1, -2, -6, -3, 3, 1, -1, -7, -3, 0, -2, 1, 5, + 2, 36, 16, -8, -2, 4, 2, -4, -5, -9, -3, -6, -7, -5, -4, -2, -4, -6, -2, -4, 2, 3, 9, 5, 1, 3, -2, 7, 3, -5, + -2, -2, -2, -6, -3, 3, -2, 6, 1, 3, 5, -2, -3, -6, -5, -3, -6, -6, -4, -6, -5, -3, 0, 1, 3, 4, 1, 5, 5, 0, + 4, 3, 7, 1, 8, 3, -1, -6, 0, -1, 1, -6, 4, 3, 5, 3, 1, -4, -7, -5, -8, 1, 5, 2, 7, 3, 1, 5, 0, -3, + -3, -2, -2, -4, -3, -5, -3, -1, -3, -2, 2, 5, -1, 0, -3, -2, -4, 0, -3, 0, -2, 0, -2, -2, 2, 4, -1, -1, 7, 7, + 0, -1, -1, 1, -2, -4, -2, 3, -3, -3, 2, -6, 5, 5, -1, 0, 3, 0, -2, -7, -5, -2, 4, 0, 5, 2, 11, 6, 9, -1, + -1, 3, 5, -3, 1, -2, 8, -3, 0, -3, -1, 2, 2, 6, 6, 1, -1, -3, -2, -2, 1, -2, 2, 4, -2, -3, 8, 10, 0, 2, + -1, 2, 5, 4, 4, 1, 0, 0, 0, 0, 2, 3, 3, 3, 0, -2, -2, -4, -7, -6, -6, -6, -4, -1, -1, -1, -2, -2, 0, -1, + 0, -2, 1, -1, -1, 0, -2, -1, 2, 2, 0, 1, 0, 1, -1, 2, 3, 4, 2, 1, -2, -2, -1, -2, 1, 5, -2, -2, -2, -2, + 4, 4, -1, -3, -4, -6, -2, -1, -2, -1, -3, -5, -4, -1, 4, 3, 5, 0, 0, -3, 2, 0, 2, -5, 1, 0, 2, 5, 5, 2, + 2, 2, 3, 1, 3, -2, 1, -1, -4, 2, -1, 1, 1, 0, 2, 2, -4, -2, 2, -3, -1, -2, -2, 5, 0, 2, 3, 3, 0, 1, + 1, 2, 4, 8, -3, 4, 24, 8, -6, 0, -3, -2, 4, -6, -8, 1, 1, 0, -2, -1, 3, -1, 0, -2, -1, 3, 8, 9, 5, -1, + 3, 2, 3, 6, 0, 2, 0, 5, -3, 1, 1, 2, 2, 4, 5, 5, 2, 1, 1, -1, -1, -2, -4, -2, -4, -2, -2, 1, 0, 1, + 1, -1, 4, -2, 1, 3, 0, 7, 5, 0, -1, -2, -6, -4, -4, -1, 4, 3, -3, 1, -3, -5, 0, 2, 3, 2, 2, 2, 5, 1, + 4, 2, -1, 4, 6, 2, 0, -1, 8, 1, -5, -4, 1, 1, -1, -1, 8, 0, -2, -6, 4, -4, 1, 2, 6, -1, -1, -2, 0, -1, + -4, -1, 2, 5, 3, 8, -1, -2, -5, 2, 1, 1, 2, 5, 1, 2, 1, 1, 2, 6, 7, 1, -1, -1, -3, -1, -6, 0, -6, -7, + -5, 1, 1, 0, -1, -2, 1, 3, 4, 5, -5, 0, -6, -4, -7, -6, 2, -1, 4, -2, -1, -5, -2, -1, 6, 3, 6, 1, 2, -7, + -7, 0, 4, 0, -7, -4, -4, 0, 4, 6, -5, -2, -2, 0, 1, 0, 0, 0, 0, 3, 2, -3, -5, -1, 1, 0, 3, 0, 2, 4, + 5, 3, 3, 1, 0, 0, 4, 5, 1, 0, 0, 1, 3, 3, 1, 1, -3, -5, -2, 0, 0, -3, -1, 3, 5, 2, 4, 3, 1, 0, + 3, -2, -1, 5, 2, 1, 6, -3, -6, -6, -3, -4, -1, 1, 0, 0, -3, 0, 3, 1, 4, 4, 0, -1, 1, -2, -2, -2, -3, -1, + 0, 7, 1, 1, 2, 5, 1, 2, 1, 8, -2, -2, -1, -4, -3, -4, -2, -1, -2, -3, 1, -5, -2, -2, 0, 1, 1, 3, 2, -1, + 3, 2, 4, 2, 0, -3, 2, 4, -1, 2, 8, 21, 0, -2, -1, -5, 8, 6, -3, -4, -1, -10, -2, 0, -3, 5, -2, -4, 1, -3, + 9, 6, 8, 1, 0, -3, 3, 3, 0, -1, -3, -2, 0, -2, 6, 8, 2, -4, 5, 2, 1, -2, -3, -2, -3, 1, 0, -4, -4, -5, + -6, -7, -2, 7, 2, 5, 2, -2, 2, 1, 1, 1, 4, 3, -12, 3, 5, 2, 5, -2, -1, -1, 2, 1, -3, -3, -4, -6, -2, -1, + 2, 1, 3, 5, -5, -3, -2, -4, -2, 6, 4, -2, -2, -1, 3, -2, -4, -6, -1, 4, 0, -3, -2, 1, -3, -3, -5, 0, -2, -5, + -4, -4, 1, 4, -2, 0, 0, 2, 3, 2, 4, 1, 0, -6, 1, 1, -6, -5, -3, -13, -10, -5, 0, -3, 2, 7, 6, 4, 2, 4, + 5, 4, 3, -6, -6, -5, -6, -7, 2, 2, 4, 4, 5, 6, 6, 6, 0, 3, -1, -1, -3, 7, 6, 5, 3, -2, -3, -1, -6, 4, + 1, 5, -1, 0, -4, -4, 0, 7, 6, 3, -3, 0, 0, 2, 8, -2, -2, 1, 2, 2, 4, 8, 8, 3, 3, 1, 2, 1, -1, -2, + -2, -1, 3, 3, 0, 2, -1, 0, -4, -3, -7, -4, -6, -4, 0, -3, -5, -5, -2, 2, 1, 2, 2, 1, -4, -4, -6, -6, -7, -3, + -5, -2, -3, -4, -5, -2, -4, -7, -5, -3, -5, -2, -1, -2, -3, -2, -6, -4, -1, -3, -7, -1, 1, 3, 3, 1, 2, 0, -2, 3, + -1, -2, 1, 2, 3, 0, 1, 1, 2, 3, 3, 6, 6, 3, 6, 1, -2, -1, -4, 0, 0, 2, 1, 6, 3, 2, -2, -1, 0, -2, + -5, -1, 0, 5, 6, 4, 0, 1, 0, -5, -8, -3, -1, 1, 6, 13, 28, -2, -3, -8, -4, -6, -2, -19, -4, -8, -1, -6, -3, -5, + 1, 2, 5, 3, 2, 6, 1, 4, 7, 1, 2, 2, -7, -4, -1, -5, -1, -5, -1, 0, 7, 4, 4, 5, 1, 0, -1, -5, 0, -3, + -3, -5, -12, 0, -2, -6, -2, -6, 0, 0, -1, 1, 1, 3, 7, 3, 12, 4, 3, -19, -3, -3, 2, -4, -3, 0, -4, -2, -5, -3, + -4, -3, -2, -4, -2, 4, 6, 4, -2, 2, 1, -5, -9, -5, -5, -9, -8, -5, 0, 4, -2, -1, -2, 3, 2, 1, -3, -5, -6, -7, + -6, 4, 7, 5, -5, -4, -1, 5, -2, -6, 6, 7, 3, 4, 0, 0, -3, 2, -5, -2, 1, 5, -3, -11, -7, -3, -7, -4, -2, -1, + -1, 0, -5, -3, 5, 7, 4, 1, 3, 1, -2, -2, -6, -6, -4, -2, 5, 8, 9, 8, 7, 5, 6, 1, -11, -7, -4, -7, -1, -2, + -1, -5, 2, -6, -1, -4, -1, -1, 1, 4, -3, 7, 4, 4, 7, 0, 4, 4, 12, 18, -3, 0, -2, -4, -3, -3, 2, 1, -2, 0, + 0, 4, 4, 1, 1, -2, -4, -6, -6, -6, -4, -5, -5, -3, 3, 5, 5, 5, 0, 2, 2, 1, 0, -2, 3, 5, 3, -1, 1, 2, + 0, -1, 4, 2, -1, -2, -4, 0, -2, -2, -1, 0, 2, -3, 0, 1, 4, 3, 4, 2, 1, -1, -2, -1, -3, 1, -2, -2, -3, -1, + -2, 0, -3, -2, 3, 2, 1, 3, 0, 3, 3, -4, 0, 1, -1, 1, -1, 4, 4, 0, 1, -4, -4, -3, -4, -3, -4, -3, 0, 3, + -2, 0, 0, -1, 2, -5, -2, 0, 0, -4, 5, 5, 2, 2, 4, 4, 4, 4, 10, 7, 4, 43, -13, -12, -10, -12, -10, -13, -14, -16, + -18, -12, -6, -9, -3, 3, 2, 0, 2, 4, 13, -3, 0, -1, -4, -3, 0, 1, -5, 2, -4, 1, 0, 1, 1, 1, 4, 7, 4, 8, + -6, 0, 0, -2, -4, -3, -2, -10, -5, -1, -1, -2, 4, 4, 1, 5, 7, 4, 10, 6, 8, 12, 5, 10, -18, 5, 0, -1, -1, -3, + -3, -3, -1, -2, -8, -10, -5, -3, 1, 0, 1, 1, 3, 8, 11, 7, 5, -1, -6, -8, -12, -12, -9, -10, -5, -4, 1, -1, -2, -2, + 0, -2, -3, 0, -6, -3, -5, -7, -4, -8, -11, -11, -5, -7, -5, -6, -4, -1, -3, -5, 0, -1, 5, 12, 11, 11, 9, 8, 7, 11, + 3, 0, 2, -4, -7, -5, -10, -8, -4, -5, -1, 2, -2, -1, -1, 2, 1, -5, 0, -2, -8, -3, -2, 3, 7, 7, 9, 11, 6, 5, + 9, 2, 3, 8, 8, 4, 3, 5, 4, 10, 3, 4, 4, 4, 9, -2, 0, 12, 7, -6, 6, 7, 10, 4, 21, 3, 4, 0, 1, 1, + -1, -1, 1, 0, -3, -2, 1, -1, -1, -3, -3, -4, -5, -5, -3, -4, -3, -3, -2, -1, -1, 3, 3, 1, 0, 3, 1, 1, 2, 3, + 4, 0, 3, 1, 0, -1, -2, -3, -3, -2, -6, -6, -7, -6, -5, -5, -4, 0, 0, -2, -4, -3, 1, 3, 4, 7, 6, 3, 5, 1, + -3, 0, 1, 3, 1, 0, 5, -3, 2, -1, 2, 2, 1, 2, 2, 0, 0, -3, 2, -2, -1, -4, -5, -2, -4, -1, 0, 1, -1, -2, + 0, 2, 3, 5, 1, 4, -2, -4, -1, 1, 3, 5, 5, 4, 3, -1, -3, -3, -6, -4, -3, -3, -2, -3, -10, -5, 127, 109, 48, -26, + 19, 6, 16, -4, -20, -15, -21, -20, -2, -8, 3, -4, -3, -4, -3, 0, -3, -4, -3, 5, 5, -1, 1, -8, -1, -5, -2, 2, 1, 0, + 5, 7, 9, 1, -7, -6, 1, -1, -10, -7, -8, -19, -18, -10, -6, -4, -2, -5, -1, 2, 6, 8, 6, 8, 4, 3, 4, -1, -2, 13, + 3, -3, -3, -4, 7, 3, -12, -3, -16, -22, -12, -6, 2, -1, -4, -5, -1, -2, -7, 5, 6, 2, 1, -4, -3, -3, 9, 2, -3, -5, + -12, -7, -10, -11, 3, -9, 3, -6, 9, 1, -1, -4, -7, -11, -1, 7, 2, -4, 2, 7, 4, -2, -1, 2, 0, 3, -4, 9, 0, -2, + 1, 4, 3, -2, 0, 2, 1, -7, -10, -7, -13, -2, 5, -2, 1, 7, 13, 2, -3, 5, -13, -3, -6, 0, 12, 8, 2, -4, -12, 1, + -4, 5, -11, -8, -5, 1, -8, 4, 18, 17, 19, 10, 10, 1, -3, -7, 4, -10, -3, -11, 7, -6, -19, 0, 3, -3, -8, -4, -4, -2, + 0, -5, 4, -5, -1, 3, 5, 3, 0, -4, -2, 1, 5, 3, -2, -8, -6, -3, 2, 1, 10, 1, -1, 2, 3, 0, 0, 6, 2, 3, + 3, -3, -2, -1, -9, -6, -2, 3, 1, 2, 1, 4, -5, -5, -6, -4, 0, 0, 1, 3, -4, 0, 4, 2, -2, -10, -2, 2, -3, 3, + -8, 0, -4, -6, -5, 4, 1, 7, 6, 2, 2, 7, 9, 2, 7, 3, 6, -4, -2, -4, -6, 3, 11, -6, 3, 2, 6, 0, -1, 4, + -2, -3, 11, 12, 0, 6, -3, -1, 0, 7, 4, -11, 3, -7, 1, -5, 8, 1, 7, 7, 6, 1, -4, 4, -4, -3, 0, -6, 1, -8, + -19, 4, 4, 8, -22, -2, -1, -9, 6, 1, -4, -12, -11, -1, -10, 3, 2, -8, -9, 0, 7, -4, 2, 8, -2, 15, 10, 6, -6, -14, + -9, -5, 1, 2, -3, 12, 16, 1, 11, -3, -7, -9, 2, 11, -11, -3, -10, 13, 0, -3, -4, -5, 4, -9, 5, -13, 0, -4, -11, 10, + 4, 13, 1, -4, -28, 4, 6, 8, -4, 6, 12, 4, -1, -3, -1, -6, -3, 4, 6, 6, 4, -6, -8, -8, -9, -2, 2, 2, 2, 3, + -1, -1, -5, 0, -6, -2, -5, 3, -1, -8, -2, 8, 4, -1, 2, 2, -4, -9, -7, 1, -6, -4, -2, 0, -5, -6, -4, -14, -13, -1, + -1, -12, 4, 2, -11, -12, -3, -11, 3, 2, -3, -9, 2, -4, -7, -7, 2, 0, 2, 1, 5, 9, 8, 7, 5, -1, 7, 7, 5, -4, + -3, 3, -2, -7, 1, 3, 1, 12, 9, 1, 8, 6, 10, 7, 13, -2, -6, 6, -3, 7, -9, -4, -6, -12, 4, 4, -3, 3, 8, -1, + 1, 5, -3, -3, -12, -5, -6, 1, -3, -3, 2, 8, 9, 5, 7, 8, 0, 3, -2, 3, -3, -2, 1, 7, 8, 1, 0, 2, 0, -1, + 1, -1, -4, -1, 6, -1, -4, -3, -1, -10, -10, -1, 3, -7, 3, 6, -3, -6, 0, 3, -1, 2, 0, 3, 4, -4, 1, 1, -1, -5, + -4, 0, 8, 6, 9, 3, 5, 5, -6, -2, -5, -3, -3, -1, -9, -1, -4, -11, -11, -7, 2, 7, 3, -6, 0, -1, 5, -1, 12, 2, + -8, 0, 1, 5, 1, -6, -1, 1, 0, -5, 0, 2, 3, 3, 4, 3, -6, 0, 0, 5, -2, 7, 4, 2, -3, 5, 5, 2, 5, 3, + -5, -4, -5, 3, 1, -18, 1, 10, 17, -13, 1, -8, -5, -1, 11, -9, -9, -7, 4, 3, -22, -3, -4, -6, -4, 14, -3, -11, 21, 6, + -6, 8, 3, -3, -8, -13, 2, 12, 4, 11, 2, 8, 8, 4, 6, 4, -8, 3, -1, 16, 9, -4, -3, 10, 6, -1, -6, 7, 3, 9, + -8, -6, -3, 1, -1, 6, 9, 7, 4, -18, 5, -10, 3, -6, -13, -8, -2, -14, -11, 4, 2, -11, -2, -10, -10, -5, 1, 3, 6, 1, + -4, 3, -9, -6, -13, 0, 2, 9, 7, -3, -7, -5, 0, -3, -5, -8, 3, -1, -4, 1, 3, -1, -1, 4, 15, 10, -3, -3, 8, -2, + -9, 14, 9, -5, 4, 1, -11, 1, 11, 3, -4, -5, -10, 4, 12, -5, -4, -8, 0, 1, -1, 9, 8, 9, 17, 13, 2, 11, 1, 0, + -12, 4, -1, -9, -2, 2, 7, 8, 4, -2, 0, 12, -3, 0, -2, 2, 3, 17, 7, 2, 6, 2, 6, 1, -2, -2, 6, -4, -10, -3, + 3, 2, 5, 19, 6, 3, -6, -5, -2, -1, 10, 4, -2, 3, 1, 5, 11, 3, 11, 9, 3, 12, 8, 4, 2, -4, -11, -6, -8, -7, + -2, 0, -1, -6, -2, 0, -4, -6, -4, -6, -3, 1, -5, 0, 0, 2, -4, 5, 1, -4, -11, -13, -8, -3, 3, 4, 2, 0, -6, -6, + -2, 0, 4, -7, -13, -5, -8, 3, 14, 3, -3, 2, 3, 2, 3, -9, -1, 1, -1, -6, 9, 4, -5, -5, -7, -6, -3, 2, -6, 6, + -2, 6, 2, -6, -3, 5, 3, -2, 9, -1, -3, 0, -11, -9, 5, 3, 0, 1, 14, 0, 1, 4, -9, -3, -7, -4, 0, -2, -7, -4, + 2, 6, 1, -1, -1, 7, 6, -1, -8, -7, -30, 19, -8, 21, -18, -12, -5, -13, 10, 3, -6, 3, -17, -4, 9, -21, -6, 10, 12, 3, + 7, -3, -1, 2, 4, -5, 9, -1, 7, -9, -8, -7, 3, -6, 10, 1, 16, 28, 0, 0, 4, 0, 0, -4, 12, 3, 2, 7, -2, -1, + -4, -4, -12, -6, -6, -1, 5, -6, 0, -12, 0, -5, -5, -4, -13, -3, -3, -6, -2, -4, -4, 5, -11, -1, -6, -7, -3, 8, -3, -6, + 1, 11, 9, 4, -2, -8, -8, -4, 7, -2, -6, 1, 9, 0, -15, -5, -2, -1, 9, -3, 3, 5, 17, 20, 18, 14, -6, 0, 7, 7, + 7, 1, -4, 4, 3, -7, 1, -2, 8, 8, -4, 5, 20, 17, -8, 3, 8, 5, 5, -7, 1, 1, -6, 6, 6, 6, 2, 9, 19, -1, + -1, 1, -1, 6, -2, 3, 7, 5, 5, 8, 12, 8, 4, 3, -7, 0, 5, 2, -4, 10, -4, -6, 2, -6, 0, -4, -4, -7, -9, -5, + 0, -1, 3, -16, -6, 10, 3, 7, 12, 9, 12, -2, 11, 15, 12, -3, 1, -8, -3, -5, 3, -4, 5, -2, 2, 6, -1, 1, -3, -1, + 2, 2, -2, 0, 1, -7, -3, -7, -5, -7, -4, -8, 1, -1, -1, 2, -4, -3, -9, -1, -2, -2, -2, 6, 7, -5, -11, -13, -1, -1, + -1, 6, 7, 3, -2, -3, -8, -1, -7, -9, -11, -10, 2, 6, 0, -9, -5, -3, 2, 2, -8, 7, 6, 0, 7, 4, 0, -1, -1, -8, + -3, -4, -4, -1, 2, -8, -3, -10, 4, -4, 1, 4, -8, 3, 1, -3, 1, -5, -6, 9, 5, -6, -6, -2, -4, 6, 4, 2, -3, 6, + -1, 4, 3, -10, -8, -10, -6, -8, -8, 2, 3, -3, -1, -5, -11, -31, 38, 10, 36, -6, -11, 16, 13, 27, 20, 21, -5, -6, -5, 4, + -3, 10, 6, 11, 6, 20, 1, 7, 9, 5, 1, 2, 1, -5, -9, -17, -8, 3, -4, 3, -8, 12, 12, 11, 1, 7, -23, -6, 10, 7, + 2, -2, 4, 2, -4, 5, -11, -13, 4, -8, -9, -9, 0, -1, 0, 3, 7, -2, -11, 1, -17, -6, 2, 4, -3, 0, 9, -3, 2, -7, + 5, -2, -2, 0, -7, -4, 0, 5, 13, 12, -4, -6, -19, -10, -8, -2, 0, 2, -2, 3, 7, 0, 3, -4, 7, 17, 5, -3, -15, -4, + -9, 2, -13, -11, -17, -9, -11, -12, -15, -17, -24, 2, 9, 3, 12, 31, 21, 28, 47, 34, 21, 10, 26, 37, 46, 46, 50, 30, 51, 52, + 51, 37, 35, 38, 44, 42, 29, 49, 41, 29, 25, 11, 20, 16, -2, -33, -10, -22, -29, -44, -34, -36, -52, -50, -45, -64, -52, -52, -46, -45, + -24, -20, -20, -13, -5, -9, -2, 8, -7, -12, -11, 10, -10, 1, -3, 0, 11, -6, 11, 7, -15, -4, -6, -1, 1, -2, 7, -2, -5, -14, + -8, -9, -5, -10, -4, -6, -3, 2, 0, -5, -3, -15, -13, -19, -9, -12, -20, -14, -6, -5, -13, -24, -24, -18, -15, -5, -6, -14, -8, -8, + -14, -9, -18, -9, -7, -18, -11, -6, -10, -8, -4, -5, -4, -2, -5, -3, -3, 2, 1, 3, -15, -14, 2, 9, 6, 9, 3, 9, 13, 8, + 3, 7, 3, 9, 11, 18, 18, 28, 21, 18, -4, -2, 6, 6, -2, -13, -13, -18, -18, -38, -33, -35, -34, -29, -13, -10, -5, 1, 11, 6, + 19, 5, 3, -9, -3, -3, 12, 12, 11, 0, 2, 6, -3, -4, -7, -5, -4, -3, -8, -4, -51, 31, 1, 30, -31, -50, 54, 21, 4, 50, + 39, -7, 6, 3, -6, -6, 2, -7, -5, 3, 14, 1, 6, 0, -21, -21, 6, -6, -12, -19, -22, 0, -4, 0, 4, -2, -4, 19, 1, -11, + -7, -23, -20, -13, -8, -9, 1, -3, 3, -5, -4, -7, -12, 1, -10, -12, 0, 0, 1, -3, -7, -3, 0, -12, 23, -8, -2, -17, -12, -20, + -23, -24, -7, 5, 0, 3, -2, -7, -19, -8, -7, 3, 1, 8, 8, 9, -12, -19, -32, -23, -21, -8, 3, 2, 9, 0, 4, 4, -6, 0, + 4, 21, 9, 12, 6, 6, 13, 8, 14, 14, 16, 13, -4, -14, -20, -23, -17, -6, 10, 7, 3, 12, 13, 16, 9, 10, 16, 19, 33, 36, + 46, 36, 29, 29, 37, 39, 30, 26, 27, 34, 41, 45, 53, 40, 35, 37, 30, 34, 40, 45, 18, 32, 32, 23, 15, 13, 6, -10, -32, -65, + -80, -80, -61, -45, -33, -29, -16, -28, -40, -39, -40, -16, -6, 20, 19, 11, 1, -9, 10, 9, 16, 17, -3, 4, 11, -25, -25, -20, -7, -5, + -9, 4, -5, -5, -7, 1, 2, 3, -1, 5, -6, 4, 3, 1, -9, -5, -9, -10, -16, -9, -13, -6, -5, 5, 12, 1, -1, -3, -4, -2, + 0, -3, 1, -6, 0, 3, -4, -10, 2, 12, 5, 9, 13, 4, -3, -4, -2, -1, -4, -7, -14, -17, -21, -16, -17, -26, -33, -36, -23, -4, + -3, -16, -10, -5, 0, -2, -4, -4, -4, -3, -4, 12, 8, 0, 2, -8, -5, 9, 17, 4, -4, 5, 13, -1, -6, -22, -40, -70, -100, -116, + -127, -111, -92, -59, -16, -6, 0, 1, 1, -4, 12, 25, 17, 31, 30, 16, 10, -9, -19, -17, -15, -28, -42, -44, -54, -75, -10, -30, -16, -57, + -119, -4, 8, -45, 49, 4, -16, 5, 18, 9, 19, 4, 18, 22, -5, 20, 17, 1, 15, -1, -16, 20, 23, -9, -4, -10, 2, 6, 8, 7, + 11, 2, 5, -1, -5, -11, -19, 10, 8, 15, 7, 5, 9, 10, -3, 7, 6, 21, 12, 15, 12, 15, 18, 15, 10, 16, 21, 8, 8, 44, + 3, 2, -2, 0, -1, 2, -2, 7, 2, 0, -4, -1, 2, 3, 0, 5, 0, 0, 3, 2, 2, 0, 1, 2, 4, -2, -1, -6, -8, -3, + -2, 0, 1, -3, -7, -11, -7, -3, -2, 3, -1, 3, -3, -4, 7, 9, 4, -10, -5, 1, 1, -2, -2, 1, 4, -5, -2, -1, -2, 1, + -2, -8, -6, -2, -7, -11, -6, -3, -7, -11, -3, -1, -3, 0, -2, 1, -5, 6, 3, 6, -2, -3, 2, -4, 3, -7, -1, 4, -6, 5, + 4, 8, -5, 2, 4, -7, 4, -6, 5, 4, -6, 16, 8, 13, 7, 3, -1, 4, 7, -8, -5, 0, -7, -6, 5, -2, 5, -12, -3, 7, + -7, -2, -5, -3, -4, -6, -3, -2, -2, -1, -2, 1, -1, 2, 7, 8, 1, -2, 2, 5, 6, 4, 3, -1, 4, 3, -5, -1, -7, -7, + -6, -7, -4, -10, -7, -11, -4, 0, -2, -1, 3, 0, 5, 2, 4, 5, 1, -6, -2, -5, -4, -5, 2, 1, 3, 1, -1, -1, 3, 6, + 3, 2, 0, 0, -1, -4, -7, 1, -2, -4, -5, -7, 5, 8, 4, -2, 6, 3, 4, 4, -3, 4, -3, 1, 2, 4, 6, 4, -9, 1, + -3, 0, -3, 1, 0, 6, 1, 4, -4, -8, 0, -3, -4, 0, 6, 6, 0, 0, -1, 2, -1, -5, 1, -3, 4, 4, 9, 1, 1, 9, + -9, 1, 8, 17, 11, -10, -8, -4, 0, 3, 9, -6, -13, -3, 1, -4, 5, -11, -3, -4, -4, -5, -10, -16, -1, -4, -7, 2, -1, -12, + -3, -2, 3, -1, -8, 1, 3, -1, 8, -4, 1, 2, -9, -6, -6, 7, 4, -1, 4, 1, -4, -7, 0, 4, 0, 0, 9, 3, 5, 6, + 8, -1, 9, 0, 1, 3, 1, -2, 2, 4, -2, 1, -1, 2, -2, 3, -3, -2, 1, -3, -8, -1, -3, -1, 2, 2, -3, -2, 6, 4, + 2, -5, -10, -1, 4, 1, -9, -10, -6, 1, 1, 1, 2, 2, -3, 3, 6, 6, 10, 9, 3, -1, -7, 3, 0, 0, -4, 4, -5, -1, + 10, 5, -2, -3, -1, 2, 3, 3, 2, -6, -5, -2, -2, 0, -2, 3, 7, -2, -7, -6, -7, -4, -3, -5, -3, 1, 3, 5, 2, 5, + 3, 3, -3, 6, -1, -1, -4, 0, -7, -6, -2, -2, -4, -3, 1, 7, 4, 4, 4, -3, 6, 1, 6, -1, -6, 0, -3, -7, 3, 8, + 14, -1, 7, 3, -5, -5, -3, 3, 6, 0, 2, -3, -1, 2, 2, -4, 2, 2, -2, -2, -3, -2, -2, 4, 2, 5, 1, -4, -2, 3, + 0, 1, -1, 2, 2, -2, 0, -2, -1, -4, -5, 5, 4, 3, 2, -1, 5, 2, 2, 1, 2, 3, 1, 0, 2, 0, -4, 3, 2, -7, + -7, -1, -9, -8, 3, 0, 5, 1, 2, -2, -1, 1, -3, 0, -1, -4, 0, 2, 7, 1, -4, 7, 1, 2, -2, 7, 1, -1, -4, -1, + -6, -3, -9, -4, -1, -3, 2, 1, 9, 0, 4, 2, -2, -3, -1, 7, 0, -4, -5, 2, 0, 2, 3, -5, -7, -7, -3, -4, 0, 0, + -4, -3, 4, 7, 11, -23, 0, 18, 9, 2, -5, -8, 1, 22, 3, 13, -3, -8, 4, 6, 9, 3, 2, -4, -3, 2, 7, 7, -5, 4, + 1, 3, -1, 3, 1, 2, 5, -5, -6, -2, 3, -2, 5, 14, 6, -7, -4, -6, -3, -4, -7, 3, 5, 7, 1, 2, 1, 10, -7, 0, + 4, 4, 9, 5, 9, 2, -1, -4, -5, 3, 2, 3, 6, -3, 5, 6, 8, 9, 4, 9, 7, -1, 7, 3, -6, -8, -7, 0, 4, 0, + 2, 1, -3, 3, 4, -1, 0, -10, 5, 5, -4, 0, 0, 6, 1, -8, -5, 7, 2, 10, 5, -2, -2, 5, 1, -4, -4, -5, -2, -6, + -4, 7, -6, -9, 3, -1, -6, -6, 1, -7, -5, -3, -8, 0, -2, -5, 3, 3, 2, 8, 2, 0, -6, 1, 11, 3, 2, -1, -5, -2, + -1, 1, 7, 0, 3, 7, 0, -12, 1, 7, -13, 5, -1, 1, 3, -2, -5, -4, 1, 0, 9, 1, -3, -3, -11, 5, -3, -5, -1, 1, + 1, 6, 13, 0, -8, -4, -3, -8, -8, -1, -4, 1, -2, 0, 4, 4, 0, 2, -3, -2, -2, -3, -5, 0, -3, 0, -1, -7, 2, 5, + 11, 10, 2, 2, 4, 0, -1, -1, 1, 3, -1, 2, -2, -4, -6, -3, 1, 3, 5, -1, 1, -3, 3, 2, 3, 2, 1, 3, -7, -5, + -1, -3, 0, 1, -1, -3, -2, -1, 2, 2, -7, -1, 1, -3, -7, -10, -2, -2, 0, 1, -3, 8, 1, 3, -2, -4, -3, 1, -2, 0, + -1, 1, 1, 2, -1, -1, 0, 8, 7, 1, 5, 7, -3, 3, -10, -6, 6, 4, 1, -1, -2, -2, -7, -2, 7, 7, 5, -2, -6, -2, + 0, 8, 6, 3, -2, -3, -2, -1, 0, 4, -26, 9, 18, 14, 7, -2, -7, -2, 13, 6, 7, -4, -3, 1, -2, 7, 3, -2, -6, -2, + -1, 7, 10, -1, 11, 10, -3, -5, -4, 1, 1, 2, 4, 4, -1, 0, 5, 7, 4, 11, -4, -5, -10, -5, -5, -4, 1, 1, 0, 6, + -4, -5, 2, -5, 0, -2, 10, -1, -3, 8, 8, 1, 4, 0, 9, 12, 3, -3, 3, 0, -4, 2, 4, 9, 6, 3, -3, -1, 9, 5, + 0, 3, 1, -1, 4, 5, -1, -4, 0, -1, -9, 1, -1, -4, 1, 13, 5, -6, -8, -17, -3, 7, 5, -2, 7, 8, -4, -4, -5, -5, + -10, -8, -4, 0, -8, -8, 0, -6, 0, -3, -8, 2, -6, -7, -6, -11, -10, -7, -10, -14, -6, 11, -4, 3, 2, -9, -9, -5, -9, -14, + 4, 10, -8, -6, -6, 5, 8, 2, -1, -5, 5, -6, -7, 4, 7, -3, 9, -2, 1, 8, -10, 7, -6, 5, 3, 1, 17, 14, -5, 5, + 6, -17, -1, 4, -3, 5, 14, 1, 0, 4, -1, 1, -8, -8, 0, -3, -4, -1, 2, 2, 2, 4, 3, 7, 3, 7, 6, 1, 1, 5, + 2, 3, 1, 6, 9, 11, 8, -3, -5, -8, -3, 2, 2, 5, 3, 2, 6, -8, -10, -13, -15, -12, -7, 4, 5, 4, 1, 6, 2, 0, + -1, -3, -3, -3, -4, -1, 3, -3, -2, -13, -5, 3, -4, -3, -1, -3, -2, 6, 4, 0, 4, -2, -2, -1, 5, 0, -2, -6, 2, 3, + 7, 8, 2, -1, -7, 8, 1, -1, 3, 1, 3, -10, -2, 0, 5, 0, 2, -7, -1, -3, 1, 2, -4, 4, -1, -1, -1, -4, -7, 3, + 4, 5, 0, 7, 5, -2, -1, 1, 0, -1, 1, -5, -2, 8, 6, -14, -4, 19, 12, 11, -1, -13, -4, 15, 5, 6, -12, -11, -6, 4, + 5, 0, -3, 0, 4, -1, 2, 6, 0, -2, -3, -9, 3, -1, 7, 9, 3, 10, -4, 0, 3, 1, -1, 3, 4, -6, 0, -8, -4, -4, + 5, 0, -4, -11, -5, 1, 2, -7, -3, -2, 3, 5, 4, 8, 5, 6, 2, -4, 0, -7, -2, 5, -2, -2, -2, -1, 2, -2, 7, 5, + -6, -7, -1, 3, 3, 0, 4, -11, -12, -4, -12, -12, -6, -9, -7, -8, -10, -10, -5, -11, 1, 4, -4, -2, 0, 5, -1, 2, -1, 5, + 15, -3, 4, 2, 1, 2, -1, -10, -10, -12, -5, 4, 1, -5, -10, -18, -13, -10, -5, 0, 3, 1, 7, 5, 4, 14, 15, 8, 12, 6, + 6, -2, 2, 4, -4, 0, 16, 4, 8, 3, 12, 1, 5, -10, -8, 8, -4, 3, 8, -4, 3, 13, -5, -2, -1, -6, 0, -3, 4, -3, + -1, -3, -9, -3, -4, -1, -7, 5, -8, -12, -1, -3, -8, -4, 1, -6, 4, 0, 0, 4, 2, 2, 6, 2, 3, -1, -3, 1, 2, 0, + 2, 2, 5, 4, 1, 3, -2, -11, -8, -5, -9, -10, -6, -9, -10, -12, -7, 0, 1, 5, 8, 5, 5, 5, 1, 0, 2, 6, 8, 4, + -4, 0, -6, 0, -6, -3, -1, 3, -2, -4, -3, 4, 3, 10, 5, 1, 0, 2, 0, -3, -5, 7, 1, -1, 7, 7, -1, 4, 9, 16, + 10, 12, 4, 5, 7, 5, 5, 2, 8, 4, 4, 1, -8, 1, -3, 3, 4, -5, -2, -11, -7, -4, -2, -4, 1, -5, 3, -2, 2, 0, + -3, 0, -7, -2, -4, 1, 5, 2, -4, -2, 2, 4, -1, 4, 6, 6, -2, 1, 5, 3, -25, -35, -1, 10, 6, 0, -16, 1, 38, 34, + 10, -18, -15, -5, 5, 12, 11, 6, 0, 5, -2, 4, 7, 0, -3, 3, -2, 11, 3, 9, 8, 6, 3, -5, 1, -3, -6, 1, -2, 0, + 3, 10, -6, 4, -1, -5, -8, -9, 0, -2, -1, 4, -2, 3, -1, 1, 2, 9, 0, 5, 7, 0, 1, 1, -18, 7, 16, 19, 12, 15, + 13, 7, 7, -9, -6, 1, -10, -13, -15, -19, -23, -19, -21, -32, -29, -34, -27, -22, -23, -27, -30, -23, -14, -14, -13, -11, -2, -9, -6, -20, + -18, -13, -15, -6, 1, -3, -5, -4, -1, -2, 12, 12, 8, 12, 0, -3, 2, 4, -3, -2, 12, 5, 15, 20, 22, 11, 12, 13, -3, -1, + 11, 17, 23, 24, 24, 20, 10, 17, 17, 17, 7, 23, 19, 25, 24, 16, 25, 10, 5, 2, 6, -2, -4, -1, 6, 19, 15, 4, 13, 11, + -7, -1, -4, -7, -4, 0, 1, 1, -4, 2, -4, 2, 4, 1, -13, -6, -9, -9, 8, 23, 25, 10, 21, 31, 22, 4, 9, 12, 18, 17, + 18, 20, 12, 11, 4, 3, 4, 7, 5, 0, 0, -4, 1, -2, -3, -2, -4, -6, -8, -6, 1, 2, 2, -1, -2, -3, -1, -6, -13, -3, + -4, -7, -5, -1, 0, 4, 1, 3, -3, -2, 5, 2, 6, -1, 0, -3, -5, -3, 6, -3, -2, 8, 4, 4, 5, -7, 4, -5, -8, -3, + -7, -1, -5, -5, -2, -3, -2, -7, -1, 7, 12, 14, 10, 15, 13, 12, 3, 7, -2, -3, -4, -9, -8, -4, 6, 6, 16, 18, 18, 16, + 11, 2, 0, 6, 7, 9, 10, 12, 12, 17, 10, 7, 3, 0, -6, -8, 2, 0, -3, 0, -2, -8, -17, -25, -36, -38, -117, -127, -60, 11, + 13, -75, -53, 50, 51, 6, -16, -43, -14, 34, 5, 7, -9, -2, -3, -5, 1, 17, -11, -18, 9, 5, 9, 0, 3, 6, 3, 1, 0, 0, + 5, -8, -11, -7, 4, 4, -4, -5, -1, 4, -1, -5, -1, 0, 5, 10, 10, 8, -4, 1, 8, 15, 10, 11, 10, 5, 3, 9, 17, -11, + 5, 1, -14, -9, -6, 4, 0, 6, 0, -7, -8, -6, -19, -12, -17, -4, -3, 5, 4, 5, -2, 1, -3, 2, 2, 0, 3, 9, 13, 7, + 4, 9, 9, 23, 17, 13, 11, 18, 14, 6, 4, 11, 13, -4, -12, -9, -6, -11, -11, -2, -3, -3, 3, 7, 5, 2, 0, -2, -7, -2, + 0, 3, 7, 3, 11, 12, 12, 12, -9, 1, 5, -2, 5, 6, -12, -1, 7, -2, 4, 6, -4, 3, 1, 4, -4, 4, -5, 11, 14, -1, + 0, -1, -13, -14, 0, 0, -12, 0, 10, 3, -9, 0, -2, -14, -22, -18, -8, -3, 5, 12, 1, 6, -4, 3, 1, -10, 3, -15, -1, 10, + 0, -5, -4, -1, -3, 3, -5, -5, -12, -7, -8, -8, -9, -7, -8, -9, -3, -4, -7, -5, -5, -9, 0, 8, 11, 5, 6, 9, 6, 3, + 1, -6, 2, 5, 8, 3, 12, 8, 10, 6, -2, 1, 15, -1, -4, -5, -2, -7, -5, -6, -4, 3, -3, 9, 3, 7, 7, 6, -1, -4, + -1, 1, 4, 1, 3, 2, 8, 9, -1, -5, -4, -7, -4, 5, -5, -10, -2, 3, -1, -1, 7, 7, 0, 6, 2, -5, -3, 7, 6, 5, + -1, 3, 3, 3, 3, 10, -3, 0, -7, -11, -10, -20, -11, -14, -8, -11, -12, -1, -6, 9, 20, 4, 0, -3, -7, 5, 8, 7, 12, -10, + 1, 35, -13, -23, 3, 30, 18, -26, -17, 17, 8, -7, 1, 3, 5, 12, 16, 1, -3, 14, 3, -4, -2, 4, 7, 20, 6, 17, 12, -9, + -4, 4, 11, 6, -4, 1, 2, -7, 4, -1, -12, 5, -8, -11, -8, -6, -10, -8, -8, -10, 3, -5, -5, -1, -8, -3, -11, -12, -7, -6, + -11, -10, -1, -11, -7, -7, -7, -4, -8, -4, -9, 5, 8, -7, -17, 0, 1, -3, 1, -1, -6, 2, 3, 9, 5, 2, -8, -9, -2, 3, + 0, -2, 2, 5, 17, 14, 0, 6, 25, 24, 16, 16, 14, 14, 5, 0, -1, -2, -5, -2, -12, -11, -10, -9, -5, -7, -11, -4, 3, 3, + 10, 6, -5, -7, -2, 7, -5, 2, 9, 6, 3, 4, 0, -5, -17, -13, 0, 3, -7, -8, -3, -4, -1, 9, 9, -5, -5, -8, -7, -19, + -14, -7, 0, -10, 2, 8, 2, 4, -10, -26, -20, -5, -14, 1, 22, 1, 7, 1, -10, -20, -4, -14, -1, -2, -12, -2, 4, 6, 4, 2, + -1, 0, -7, -4, -3, -5, -4, -4, -2, 3, -3, -6, -5, -8, -11, -3, -5, 1, 0, -5, -8, -6, -8, -6, -14, -7, -4, -4, 1, 4, + 3, 0, -1, 9, 13, 9, 12, 14, 14, 18, 19, 23, 19, 14, 5, -2, -7, -9, -21, -22, -17, -13, -8, -9, -2, -11, -12, -5, 12, -2, + -1, 18, 1, -1, 5, -3, 3, 6, 9, 1, 1, -3, -9, -11, -1, 3, 5, 2, 1, 15, 6, 9, 14, 3, 3, -4, 3, -6, -3, 1, + -7, -6, 0, 1, -2, 1, 7, 1, 7, -6, -6, 1, -7, -12, -10, -10, -12, -13, -12, -10, -1, 3, 2, -5, 1, 14, 9, 10, 8, 6, + 5, 2, 10, 10, -9, -16, 28, -11, -14, -5, 12, 14, -26, -8, 13, 14, -15, -4, 9, -5, 11, 9, -8, 0, 4, -3, -3, 5, -6, 9, + 2, 0, 12, 12, 3, -11, -7, 14, 10, -2, -2, -2, 19, 11, 4, -2, 3, -3, -2, 1, -2, -7, -6, -4, 0, 11, -6, -4, -5, -4, + 0, -9, -12, -5, -5, -8, -8, 2, 0, 5, 14, 9, 6, -2, -1, -10, -13, -1, -2, -2, -13, -7, -9, 3, -7, 0, 0, 2, -6, -7, + 3, 7, 8, 2, 9, 3, 4, -1, 8, 10, 9, 1, -3, 9, 9, 8, -11, 4, 10, 18, 0, -1, -6, -7, -7, -9, 8, 11, 10, 12, + 4, -1, 8, 16, 22, 12, 2, 4, 11, 9, 16, 4, 2, 7, 0, 0, 14, 13, 11, 15, 12, 20, 8, 4, 4, -4, 8, -1, -17, -12, + -11, -9, -7, -4, -7, -5, -18, -11, -16, -3, -13, 6, 2, -2, 2, -22, -4, -11, -5, 0, -1, -15, -2, -2, 0, 3, -2, 10, 3, 10, + -1, 11, 8, 1, -1, -8, -3, -18, -9, 1, -16, -16, -9, 0, 1, -4, 6, -2, 0, -3, -8, -4, -3, -3, 2, 1, -1, -1, 0, 0, + 1, 2, 2, 0, 1, 1, 4, 2, 0, 7, 5, 9, 3, 9, 10, 9, 7, 6, 16, 11, 4, 5, 6, -4, -4, 1, 3, 6, -5, -8, + -4, 1, -5, 2, 0, -4, 2, -3, 2, 5, -8, -1, 4, 6, -1, 7, 2, -1, -4, -2, 2, 4, 4, -1, 12, -1, 15, 8, 8, 9, + 6, 4, -4, 6, -5, -4, -4, -8, -6, -3, 12, 8, -10, 1, -15, -19, -14, -9, -12, -4, -14, -12, -17, -15, 1, -2, 4, 7, 4, -3, + -11, -3, -11, -12, -4, 2, 4, 10, 8, -26, -23, 30, 8, -12, -3, 8, 15, -26, -10, 9, -12, -4, -3, -13, -18, -2, 3, -5, -5, -6, + -2, -7, -5, 9, 7, 6, -1, 1, -1, -6, 3, 2, -1, 4, -3, -8, -15, -4, 10, -1, 1, -2, -1, 4, -4, -6, -5, -10, 0, -2, + -7, 9, 9, 1, 1, 3, 0, -6, -1, -11, 9, -6, 4, -5, 3, 15, 16, 5, 4, 12, 4, 8, 6, 2, 12, 1, -5, 0, -12, -4, + -15, -10, -10, -17, -2, 2, -9, -9, 0, 2, -2, 9, 7, 12, 15, 34, 20, 6, 12, 4, 4, 15, 15, 19, -4, -5, 3, 7, 8, 5, + -13, -5, -11, -14, -9, -4, 5, 0, 2, 4, -1, -3, -9, 9, -11, -17, -9, 0, -3, 7, 10, 22, 11, 5, 12, -4, -4, 2, 0, -4, + 4, 12, -3, -15, -7, -6, 6, 13, 11, -6, -15, 13, 1, 17, 11, -7, 4, -6, -10, -18, -10, -3, 10, 8, -6, 4, 10, -5, -3, -3, + 0, -5, -6, 8, -1, 2, 16, 9, 0, -3, -15, -4, -6, 0, 1, -3, 7, 10, 5, 1, 4, -5, -1, 0, 1, 0, 2, -7, -4, -3, + -7, -6, -9, -15, -9, -8, -3, -9, -9, -1, -6, 0, -3, 11, 11, 17, 12, 7, 1, 9, 13, 6, 4, 3, 2, -7, 6, 6, 0, 0, + -6, -2, -6, -3, 2, 8, 11, 3, -2, -5, -3, 4, -3, -6, 5, 0, 10, 8, 9, -3, -9, -3, -15, -4, 1, 6, 6, 6, 7, -1, + 10, 16, 10, 2, -3, -9, -8, 2, 1, -5, -5, -9, -1, 6, 4, 2, 2, -12, -10, -16, -10, -4, -4, -6, -2, -16, -13, -8, -3, 2, + 13, 16, 11, 10, 8, 11, -3, 1, 1, 3, 1, -13, 0, -11, -26, 1, 23, 12, -3, -16, 7, 11, -34, -10, 5, -21, -18, -16, -5, 14, + 14, -2, 7, 4, 4, 6, 8, -3, -7, 11, 13, 1, 13, 5, -7, 3, 18, 2, 7, -4, -3, -9, -3, 12, -1, 6, 6, 14, 6, 0, + 11, -5, -15, -9, 1, -5, 7, 0, 5, 5, 9, -4, -10, -4, 1, 4, 3, -4, -3, -5, 2, 12, 20, 13, 14, -2, -6, 4, 5, 8, + 7, -6, -5, 1, -7, -7, 11, 4, 6, 19, 3, -6, -5, -15, -6, 2, -13, -16, -4, -7, -7, -6, -17, -14, -6, -8, -11, -5, -7, -9, + -10, -24, -23, -4, -24, -26, -30, -20, -19, -5, -5, 5, -1, -10, -4, -2, -7, -4, 12, -7, 1, 24, 27, 13, 16, 10, -8, 0, 5, 3, + 13, 0, 10, 13, 10, -1, 8, 5, -1, 15, 8, -9, -6, -19, -33, -26, -24, -27, -22, -15, -8, 7, -2, -12, 11, 4, 20, 19, 14, 7, + 13, 2, 5, -3, -3, 7, 30, 26, 29, 13, 10, -3, -8, -11, -6, 2, 5, -4, 1, 23, -6, 5, 9, 9, 9, -1, -4, -3, 2, 8, + 4, 7, 2, -3, 0, -6, -5, -8, -5, -2, 5, 3, -5, 2, 2, 2, 2, 1, 10, 4, 2, -6, -11, -11, 4, 1, 8, 7, 20, 19, + 8, 7, 16, 3, 4, 0, -12, -17, -16, -21, -14, -15, -9, -3, -18, -13, -7, -11, -3, -2, -11, -9, -14, -10, 2, -11, -16, -16, -12, -12, + -8, -11, -9, 3, 1, -3, -9, 0, 9, 23, 1, 7, 4, 11, -9, -12, -15, -30, -21, -22, -23, -11, -12, -34, -22, -24, -13, -12, 0, -2, + -1, -6, 1, -6, -3, 3, 2, 1, -8, 2, 3, 6, -10, -5, 6, 7, 5, 7, 6, 11, -5, -2, 12, 9, -39, 2, -11, -28, 19, 26, + -16, -23, 0, 6, 9, 6, 6, -12, -1, 10, 1, 13, 9, 11, -6, 3, 15, 2, 5, -2, 1, 3, 7, 6, 4, -2, -3, 1, 30, 10, + 12, 9, 4, 6, 1, 3, -6, -19, -4, -11, 3, -1, -2, -1, 11, 6, -1, -3, 4, -1, 11, 6, 2, 8, -24, 15, 12, 11, 18, 33, + 16, 9, 9, 17, 15, 4, -7, -6, -6, -4, 1, -3, -3, -4, -6, -10, -9, -8, 0, -7, -19, -15, -9, -26, -14, -27, -18, -24, -20, -23, + -24, -21, -29, -14, -26, -16, 0, 7, 6, -13, -9, -5, -3, 17, 28, 27, 7, 3, 10, 17, 13, 7, 0, 2, 14, 14, 5, -8, -14, 0, + -1, 2, 23, 25, 30, 14, 9, 8, -8, -4, -14, -3, 2, 10, 3, -8, -7, -40, -36, -43, -44, -44, -29, -21, -5, -10, -5, -23, -16, 2, + -3, -9, 8, 0, 5, 5, 2, -2, -15, -4, -3, 10, 10, 9, -8, 0, 1, 18, -4, 14, 0, 16, 6, 12, 24, 7, 11, 17, 20, 17, + 21, 17, 24, 22, 17, 16, 12, 15, 20, 10, 15, 8, -1, 2, 5, 2, -1, -16, -12, -7, -1, -6, -4, -3, -5, 0, -2, 0, -1, 7, + 11, 4, 2, 8, 3, 15, 8, 19, 5, -5, -1, -6, -7, -9, -9, -6, -10, -17, -13, -8, 0, -3, -9, -7, 1, -9, 5, 5, 3, 3, + -2, 3, 8, 9, 13, 9, 11, 14, 11, 13, 15, 15, 20, 26, 28, 14, 0, 2, -8, -8, -9, -9, 1, 1, 10, 8, 9, 9, 0, 7, + 8, 2, -5, 1, 0, -3, -1, -3, 5, 9, 7, 6, 9, 13, 5, 0, -3, 6, -8, -7, -9, -17, -15, -11, -2, -33, -78, -127, 66, -9, + -29, -66, 7, 35, 27, -13, -32, 12, 11, 8, 2, 18, 10, 11, 2, 25, 17, 8, 14, 5, 15, 7, 7, 4, 6, -2, 3, 5, 11, 4, + 5, -5, 9, 12, 14, 2, 8, 6, 1, -5, -7, -3, -9, -5, -3, 6, 16, 8, 2, 8, 10, 9, 13, 14, 13, 8, 7, 9, 11, 0, + 10, 7, 7, 3, 1, 6, 3, 4, 5, 7, 5, -1, 1, 0, 2, 2, -3, 2, 2, -8, -1, 1, 3, 0, -4, -1, -4, 5, 4, 1, + 3, 0, 0, -1, 1, -1, -2, 0, 4, -3, -5, -3, -8, 0, -1, 0, 3, -3, 0, -1, -6, -2, -3, -2, -1, 0, 2, -7, -6, -4, + -2, -8, -3, 2, 0, -3, 4, 2, 6, 1, -3, -1, 5, 3, 0, 0, -1, 3, -6, -2, 5, -2, -4, 2, -2, -3, 2, -5, 3, 3, + 0, -1, 5, 7, -1, -6, -5, 1, -2, -3, -1, -1, 0, 2, 0, 1, 1, 1, 0, -2, -6, -1, 2, -5, -2, -3, -6, -5, -8, -12, + 4, 4, 2, -4, 2, -1, 3, 1, 0, -2, 3, -2, -2, -1, 1, 3, 3, 7, 8, 4, -2, 2, 5, 4, 2, 2, -1, -1, -1, -5, + 1, 1, -5, -1, 0, 1, -1, 4, 3, 1, 1, -2, 0, 1, 7, 4, 2, -3, -5, 1, -2, -4, -1, -3, -3, -2, -2, -9, -8, -4, + -6, -5, -6, 2, 3, 0, 3, -1, -1, -2, -2, 1, -4, -1, -3, 0, 3, 5, -6, -4, -4, -1, 4, 6, 9, 1, 3, 4, 8, 3, + 7, 4, 5, 3, 0, -3, 0, 4, 6, 3, 1, 6, 2, 0, 3, 2, 0, -2, 4, -5, -15, -7, -1, 1, 1, 4, 1, 4, -5, 5, + 1, -19, 26, -12, -1, 13, -13, -2, -1, -3, 8, 5, 1, -4, -4, -6, -7, 4, -9, -4, 9, -7, 1, -2, -5, -10, -4, 10, 14, -1, + -10, 10, 3, -10, -2, -4, 0, -1, 1, -4, 2, -2, 4, 1, 1, 4, 7, 15, 10, 6, 11, 0, -4, -6, -3, -8, 1, -3, 4, 0, + -2, 8, 2, -4, -6, 0, -3, 3, 1, 3, 4, 0, -1, -1, -2, -5, -1, -3, -4, 1, 2, 1, -2, -10, 1, -6, -4, 1, -1, 2, + 5, -2, -1, 0, -5, -2, 4, 4, -7, -2, -3, 2, -3, -4, -2, -2, 2, -3, 2, 3, -1, 4, 0, -4, 3, -4, 0, 3, 5, 3, + -2, 7, 3, -5, -1, 0, 4, -5, -3, -5, 0, -4, -3, -5, -5, 8, -1, -6, 2, -4, -6, -2, 1, 1, -5, -9, 6, -3, -2, 3, + 4, 8, -3, 4, 6, -5, 5, -4, -3, -1, 1, -7, 2, 3, 5, 4, 7, 2, 2, -6, -5, -2, 3, 1, 2, 5, -5, 2, 3, 6, + 6, 6, -1, -5, -6, 0, -2, -3, 0, 0, 3, -1, 2, -2, -2, -4, 1, 0, 1, -1, -3, 1, -3, 1, -4, 0, 0, 5, 0, 1, + 4, 1, 1, -4, -4, 4, 2, 4, -2, 1, 2, -2, -4, 3, -2, -3, -5, 1, -4, -4, 3, -2, -7, -6, -2, -5, -1, -3, -10, 0, + 5, -5, 4, -5, -5, -1, 0, -1, 1, -2, 0, 2, 0, -3, -1, -1, -2, -2, 7, 1, -1, 3, 4, 5, 0, -1, 7, 0, -3, -5, + -2, -7, -5, 0, -6, -1, 5, -1, -7, 5, -1, -1, 6, 1, -6, -5, -3, 1, 2, 4, 4, 6, 5, 7, 4, -4, -5, 2, -4, 4, + 4, 3, -2, -3, -4, -1, -20, 15, -14, 2, 17, 0, 6, -5, 1, 9, 1, 8, 6, 3, 2, 13, 12, -3, 0, 1, 1, -6, -8, -2, + 2, 7, 8, 12, 4, -7, 5, 5, -6, 5, -2, -3, -3, 3, -3, -8, -4, 6, -2, -5, 3, 2, 5, -5, 6, 4, -7, -9, -5, -9, + 1, -2, 2, -4, 0, -1, 4, 2, -1, -12, 2, 5, 7, 8, -3, -2, -5, -3, 2, 8, -3, 0, -6, -6, -4, 8, -1, 1, -8, -9, + -5, -7, 2, 0, 0, 3, -2, 0, 0, -2, 3, 3, 0, 3, 3, 5, 3, -1, -5, -4, -5, -6, -7, -5, -10, -4, -5, 2, -4, 0, + 2, 2, 5, 2, 5, -5, 0, 2, 5, 1, 5, -6, -6, -4, 0, 8, 3, 8, 10, 9, 6, 1, 5, 7, 9, 7, 3, -11, -3, -4, + -3, 7, 1, 0, -4, -3, -1, 0, 3, -1, 5, 1, 9, -4, -3, 3, 4, 5, -2, 3, -4, 5, -5, 8, 6, 11, 11, -6, 0, -4, + 1, 7, -2, -5, 1, -5, -3, -1, 5, 1, -4, 0, -4, -6, -1, -4, 3, 3, 5, 5, 5, 0, -4, -6, -5, -3, 5, 5, 2, -2, + -5, 2, 2, 2, 0, -5, -2, -4, -1, -1, -2, -5, -1, -3, 1, 2, 2, -1, 6, 3, 1, 4, 6, 2, -1, 2, -4, -11, -4, -4, + -5, 3, 1, -3, 5, 0, -4, 0, -4, -2, -1, 3, -1, -2, 2, -1, -4, -5, -4, -7, -9, -11, -11, -2, -6, -1, 2, 1, 7, -5, + 1, 5, 8, 8, 3, 0, 1, 3, 7, 2, 2, 0, 13, 0, 2, 3, -4, 2, -4, -11, -4, -3, 1, -2, 4, -3, 1, 0, 4, 1, + 4, 0, 1, -2, 1, 0, -6, -1, 1, -2, 6, -6, 24, -3, -12, 10, 3, 0, 11, 7, -1, -9, 7, 0, -6, 0, 3, 2, -5, 0, + 3, 2, -9, -8, -2, 6, 1, 2, -5, -2, -5, -2, 2, 2, -7, -1, -5, -7, -11, -4, -5, 4, 2, -2, -4, 2, 6, 1, -3, 5, + 1, 3, 2, 4, -1, -5, -2, 7, -12, 4, 0, -1, 1, -3, -7, 1, -2, 1, 5, 3, 4, 3, 4, -3, 1, 5, 1, -2, 1, -2, + 1, -5, 5, 0, 5, 6, 1, -3, -2, -2, 0, 3, -4, 1, 3, 6, 8, -6, 3, 7, 5, 4, -3, 0, 7, 5, 5, 8, -1, 4, + 0, -7, -4, 5, 1, 0, -1, 1, -6, -9, 1, 0, -2, 0, 3, -4, -5, 1, 4, -2, 12, 2, -3, 0, 2, -5, -6, -2, 0, 8, + -4, 2, -6, 2, 5, 1, 4, 1, 3, 7, 10, 2, 8, -3, -3, 1, 3, -6, 1, -7, -3, 0, -3, 5, -6, 3, 5, 4, 0, -7, + -1, -3, -9, -7, -10, -2, -9, -15, -13, -6, -3, 1, 3, 0, 6, 8, 1, -1, -4, -5, 0, -1, -1, 2, 4, 4, 1, -3, -7, -6, + -5, -3, 1, -2, -2, -4, 1, 2, 1, -2, 5, 5, 3, 1, -1, 0, 1, -2, -5, -3, 1, 4, 4, 0, -1, -1, -1, -4, -1, -4, + 0, -2, -5, -2, 5, 6, 0, -1, 1, -1, -8, -4, -6, 2, 3, 0, 4, 1, -3, 3, 2, 9, 8, 3, 4, 1, 2, 4, -4, -2, + -10, -1, 3, 5, 2, 2, 7, 1, 1, -1, -3, 1, -4, -5, -10, 0, -1, 5, 1, 4, 1, 7, 3, -2, 2, -5, -3, -4, 3, 3, + 7, 1, 2, 5, 4, -1, 1, 5, 3, -1, -2, 5, -4, 4, 3, 7, -15, 22, -12, -18, 33, -15, -4, 9, 1, 12, 4, -8, 6, -1, + 0, -3, -1, 8, 7, 5, -2, 0, -8, 0, -1, 0, -4, -11, -7, 1, 4, 8, 2, -3, -3, -4, -3, -7, 4, -6, 0, 4, 3, 1, + 1, 10, 9, 5, -2, 1, -8, -8, -1, -2, -1, 2, 3, -1, 5, -1, 2, -5, -1, -4, 5, -1, -5, -11, 3, 13, 5, 8, 2, 0, + -4, -2, 1, -8, -6, 2, -5, 1, 3, 9, 5, 6, 11, 2, -10, -12, 2, 3, 1, -2, -8, -1, -5, -2, -2, -2, 6, -4, 0, 5, + -6, -5, 5, 4, -5, -7, 1, -4, -5, -7, 6, -7, -12, -15, -13, -21, -22, -16, -25, -24, -19, -13, -20, -10, -3, -4, -8, 13, 12, 4, + -5, 2, 7, 9, 12, 3, 4, 19, 15, 17, 6, 16, 17, 14, 13, 8, -2, 5, 4, 4, 4, -2, 1, -5, -9, 1, -11, 0, -6, 4, + 0, 2, -2, 7, 9, 2, -2, -11, -3, -8, -12, -5, 1, 3, 7, 7, 0, 8, 11, 19, 5, 3, 1, -8, -5, 0, 2, 2, -1, 0, + 2, -1, 1, 2, 4, 4, 3, 5, 2, 2, 4, -2, -3, 0, 1, -5, -3, -4, -4, 1, -4, -3, 1, -3, 3, 6, 6, 5, 2, 1, + 5, 3, 1, 4, 7, 9, 4, 0, 0, 0, 3, -2, -7, -2, -5, -5, -6, -4, -5, -1, -1, 6, 0, 0, 6, 8, 2, 5, 6, 3, + -5, 2, 4, 10, 12, 5, 4, 10, 8, 6, -1, -5, -4, -6, 0, -4, 4, -2, -5, 1, -1, 1, 2, 1, -6, -9, -13, -14, -8, -6, + 0, -1, -1, 8, 6, 6, 5, -1, 3, 1, 5, 7, 15, 11, -2, 6, 1, 5, 5, 5, -1, -39, 45, -28, -28, 40, -43, 19, 4, -33, + 27, -3, -9, 18, -1, 0, 13, 12, 5, 13, 4, 3, 0, -10, 7, 6, -6, 6, 4, -4, 2, 9, 4, 2, -1, 2, -8, 0, -2, 6, + 1, 3, 15, 11, 7, 8, 3, 2, 1, 1, -3, 1, 0, -1, 0, 2, 4, 0, -1, -1, -3, 8, -4, 2, 10, -7, -4, 7, -3, 2, + 10, 5, 10, 1, -3, -6, -2, -4, -1, -3, -10, -8, -7, -14, -10, 0, -2, -16, -10, -10, -4, -5, -8, -7, 0, 4, 10, 10, 5, 15, + -4, -8, -11, -8, 4, -14, -21, -7, 0, -9, -13, -5, 1, 2, 6, 10, 17, 19, 18, 6, -4, 2, -8, -12, -12, -17, -12, -7, -5, -4, + 1, 8, 13, 8, 5, -7, -12, -2, -2, 2, -3, -3, 7, -8, 9, 8, 0, 0, 1, 10, 9, 5, 3, 7, -3, -11, 3, -7, -2, -18, + 2, -18, -1, 4, -1, 2, 5, 17, 26, 29, 16, 16, -2, -1, -1, -9, 9, 7, 11, 0, 21, -2, 14, 7, 4, 17, 19, 12, 14, 6, + 6, 0, 0, 1, 3, 6, 0, 2, 1, 3, 2, 4, -2, 1, 6, 2, 1, -9, 2, 9, 4, -1, -7, -4, -5, -5, -1, 4, 5, 0, + -5, -7, -9, -13, -16, -12, -14, -13, 0, 3, -5, -4, 2, 2, 5, 7, 4, 4, -2, -21, -38, -53, -56, -61, -64, -54, -47, -33, -18, -11, + -3, 6, 21, 25, 26, 28, 18, 19, 20, 19, 18, 21, 13, 15, 18, 13, 12, 9, 5, 14, 6, 2, 1, -4, 0, -1, 1, -9, -3, 5, + 2, -4, -6, -15, -29, -43, -44, -55, -59, -51, -51, -42, -34, -22, -9, 9, 18, 27, 35, 36, 32, 28, 24, 20, 13, 3, -72, 127, -81, -8, + 94, -73, 33, 9, -79, 53, -22, -14, 25, -33, -15, 15, -10, -6, -2, -20, 5, -18, -22, 2, 8, 0, 9, 6, 4, -1, -3, -6, 0, -10, + 0, -2, -3, -4, -7, -4, 5, -3, -5, 3, -2, -6, 0, -2, 3, 1, -1, -6, 2, -4, 0, 1, -2, -2, 5, -1, 6, -8, -1, -15, + -1, -3, 1, -2, -4, 0, 4, 2, 5, 7, 0, 0, -7, -6, -6, -9, -3, 2, 2, 2, -8, 0, 0, 2, 0, -3, -1, 8, 7, 1, + 1, 5, 6, 12, 4, 3, -3, -3, 0, 1, -2, -3, -4, -1, -3, 1, 1, 2, 1, -7, 0, 7, 6, 6, 7, 4, 1, 0, 8, 3, + -8, -9, -7, -2, 3, -5, -1, -1, 4, 1, -4, -8, -4, -5, -11, -12, -5, -7, -1, 2, -5, -9, -4, 2, 0, 4, 4, 5, -3, 1, + 2, 7, -9, 0, 1, -4, -4, 0, 6, -1, -1, 5, 12, 10, 5, 0, 3, 2, 6, -1, -6, -1, -3, -7, -9, -5, -2, 2, -1, 8, + 3, 4, 1, 4, 2, 5, 5, 6, 7, 8, 7, -3, -5, -6, 0, -2, 1, 1, 2, 2, 0, 5, 7, 5, 3, 3, 2, 3, 3, 1, + 0, -2, 3, 5, 2, -4, -5, -3, -3, -5, -9, -6, -7, -7, -7, -2, 6, 8, 5, 0, 1, -1, -1, -1, -2, -5, -6, 0, 4, 2, + -3, -2, 1, 3, -2, 3, -1, 1, 2, -3, -3, -3, 3, 7, 6, 2, -1, 4, 3, 4, -1, 4, -2, 3, -3, 2, 4, 3, 0, 2, + 4, 8, 9, 6, 1, -3, -3, 2, -2, -5, -4, -3, 1, 0, -1, -5, -6, -7, -5, -4, -6, -3, -2, 0, 1, 1, 3, 1, 0, -4, + 12, 7, 18, 11, 10, 14, 3, 4, 7, -7, 6, -6, -4, -7, -17, -1, 5, -6, -8, -7, 6, 3, -7, -8, -7, 3, -2, 4, -9, -4, + -8, -7, 9, 3, -3, 5, 8, -2, -3, 0, -10, -9, -3, -1, -4, 3, 5, 1, 9, 4, -3, -11, -4, -4, -1, 1, 2, 5, 0, -1, + 0, -2, 4, -6, 53, 6, 10, 7, 9, 5, 4, 10, 8, 4, 6, 3, 2, 2, -7, -6, -4, 1, 7, 8, 2, 2, 2, -3, -5, -7, + -4, -7, -6, 4, 9, 6, -2, -8, -7, -7, 0, 1, -6, 2, 3, 1, -4, -3, -2, 2, 1, -5, 2, -1, -4, -2, 5, 1, 5, 8, + 3, 6, 6, -2, -2, 0, -1, -1, 1, 3, 2, 10, 9, 1, -5, -1, 1, 4, 4, -3, 6, -5, 1, -4, -2, -1, -2, -3, 1, -1, + 0, -7, -2, -4, 6, 2, 1, -1, -1, -3, -6, 0, -6, 9, 1, -1, 0, 0, 1, 0, 0, -13, 0, -11, -7, 2, 7, 2, 4, -1, + -1, 1, -2, 6, 3, 4, 0, 0, -1, 4, 6, 6, 1, 5, 2, -2, -3, -4, -6, -7, -7, 2, 6, 5, -3, -6, -3, 2, -4, -6, + -7, -4, 4, 3, 1, 1, -2, -4, 0, -2, 4, 7, 9, 8, 5, -1, 1, 2, 3, 3, 0, 0, -1, -3, -7, 1, 2, 1, 0, -5, + 0, 9, 3, -1, 2, 0, 1, 0, 4, 5, 3, -2, -6, -10, -9, -6, 0, -2, -3, 7, 9, 4, 7, 8, -1, 2, 6, -4, -4, -2, + -5, -4, 1, 3, -6, -2, 3, -1, 3, -2, -1, -1, 7, 5, 6, 11, 0, -1, -1, -2, 4, 0, 2, -5, 2, 4, 4, 3, 2, -6, + -6, -3, 4, 4, -3, 10, -2, 13, 11, 4, 14, 4, 10, 15, -3, 4, -8, -2, -7, -19, -7, -3, -1, 2, -3, -6, 8, 7, -1, 4, + -1, -4, 4, -2, -5, -4, 5, 6, 6, 2, 5, 2, -2, -6, 9, -5, -2, -10, -5, 3, 0, -4, -2, 9, 6, -3, 4, 4, -3, 4, + 4, -1, 3, 3, 0, 1, 1, 7, 1, 47, -7, -6, -2, -4, -2, -1, 2, -1, 0, -8, -3, 2, 4, -1, 4, -4, 0, 1, 4, 4, + 6, -2, 3, 4, -3, 0, 5, 4, 8, -4, 2, 3, 5, 4, 8, 9, 6, 5, 0, 6, 9, 1, 1, 5, 0, -4, -4, -1, 2, -8, + -12, -1, 7, 5, -1, -2, 0, -3, -3, 3, 2, -4, -4, 3, 3, 2, 6, 1, 3, -3, -2, 1, -2, 0, -5, -4, 4, -3, -7, -3, + 0, -7, -2, -2, 0, -12, -5, 0, 5, 5, 4, 6, -1, -2, 5, 6, 9, 2, 9, 2, 0, 0, -2, -1, 0, 0, -1, 2, 8, -1, + -4, 13, 7, -2, -6, -5, -1, -3, -6, -1, 0, 0, 9, 13, 8, 4, -2, -2, -2, -2, 1, 2, 1, -3, -2, 3, 1, 5, 3, -1, + -8, -1, 0, 2, -2, -4, 6, 6, 0, 3, 1, 3, -1, 4, 5, 5, -2, -7, -6, -8, -3, -3, 3, 0, 0, -4, 2, 0, -5, -3, + 1, -3, -1, 7, 3, 6, 10, -3, 5, 3, 0, 2, -2, -3, -5, -6, -5, -3, -2, 4, 4, 9, 1, 4, -1, -1, 0, 2, -5, 6, + -3, -1, -1, 1, 1, -5, 0, 1, -4, -7, 0, 4, 2, 2, -1, 1, -3, 2, -4, -7, 0, 1, -6, -3, -3, 1, 0, 2, -1, -2, + 7, 3, -1, 2, -4, -4, -2, -1, 3, 15, 8, -1, 7, 23, 5, 9, -1, -2, -3, -2, 0, -19, -4, -18, -14, -7, -2, -6, -7, -3, + -3, -7, -6, -6, -1, -9, 6, 8, 3, 8, -4, -5, 9, 3, 6, 0, 5, 10, -4, -10, -4, 0, -6, 0, -2, 10, 5, 4, 12, 2, + 7, -1, 1, -5, -5, -1, 1, -2, 0, -3, -2, 4, 2, 1, 33, 6, 5, 9, 6, -1, 4, 6, 18, 13, 7, 4, -1, 6, 6, 14, + 8, 6, 2, 0, -6, 4, 5, -1, -1, -10, -14, -7, -3, -8, -8, -9, -8, -1, -12, -5, -5, 1, 0, 2, -1, 0, -2, -2, -2, 2, + -4, -5, 3, 5, 0, -4, 4, 6, 6, 10, 4, 2, 1, -2, 4, -2, -5, 4, 4, 2, 2, 6, 1, -8, -3, -7, -8, -2, -3, -1, + -1, -8, -4, -9, -2, -2, -11, -2, -5, 2, -5, 1, -5, -2, -6, 6, -4, -1, 4, 9, 9, 4, 10, 14, 6, 4, 6, -6, -2, 3, + 0, -3, 4, 2, -3, 8, 3, 5, 5, -3, -6, -4, 1, 7, 13, -9, -5, -7, -7, -1, 2, 3, 2, -1, -3, -4, -4, -2, -2, 0, + -4, -2, 4, 4, 3, -4, -1, -1, 1, -4, -1, 4, 9, 4, 5, 8, 5, -5, -6, 3, 4, 3, 4, 5, -2, -1, -4, 1, 0, -4, + 2, 0, 1, 1, 2, 1, 4, 4, 4, 3, 4, 0, 5, 5, 2, 5, -3, -4, -8, -10, -3, 0, 1, 0, -1, 1, 3, 1, 1, 0, + 2, -3, 0, -6, -1, -4, -9, 1, 1, -1, 0, -1, -5, 2, -2, 1, 4, 1, 4, 8, 6, 7, 8, 5, -4, -1, 3, 4, 2, 1, + -1, 1, -1, 0, -3, 1, 5, 4, 0, -4, 3, 7, 0, 8, 2, 11, -15, 9, 13, -9, 1, 0, -6, 4, 12, 4, -17, -9, 1, -16, + -2, -2, -8, -1, -6, 2, -2, -4, -7, 2, -13, 6, 10, 6, 10, 7, 9, 6, 0, 5, -5, 8, 4, 4, -7, -2, 2, 4, -2, -1, + 1, 5, 3, 10, 17, 10, 2, 2, 0, 2, 5, 3, 9, 3, 3, -1, 1, 3, 1, -5, -11, 6, 7, 6, -6, -7, -8, -8, -7, -10, + -11, -2, 3, -5, 4, -1, -6, -12, -4, -4, 0, 3, -4, -6, -2, -3, -5, 7, 4, -11, -4, 5, 6, 6, 5, 9, 2, 2, 8, 13, + 17, 7, -2, 0, -1, 2, 3, 13, 14, 2, -5, 4, 0, 2, -1, -11, -10, -8, -7, -2, 6, 6, 1, 6, 2, 2, 6, 2, -5, 8, + 3, -6, 2, 7, 4, 4, 10, 7, 8, 2, 7, -1, 0, 4, 10, 6, 3, -4, -6, -2, 1, 7, 9, 8, 12, 10, 6, 4, 10, 11, + 11, 4, 2, 5, -2, -6, 0, 5, 2, 6, 10, 2, 5, 6, 6, 1, 7, 12, 8, 15, 1, 3, -2, 1, -1, -1, -4, 0, 0, -2, + -1, 0, 5, 2, 1, 1, 0, 2, 0, 3, 2, 3, 6, 0, -2, 2, 11, 8, 2, 1, -1, 0, 1, 0, 4, 5, 2, 5, 6, 5, + 9, 5, 3, -3, -4, -5, -5, -3, -1, -5, -2, -3, 0, 0, -5, -2, 1, -3, -4, -1, -3, 2, -1, -2, 4, -4, 1, 4, 3, -2, + 0, 0, 0, -2, 6, 5, 6, 1, 1, 0, 0, -4, -2, -2, -5, -3, -5, -5, -11, -1, -3, -4, -2, 0, 3, -2, -7, 4, -1, -7, + -4, -3, -5, -4, 5, 3, -3, 2, 1, 3, 5, 5, -2, -1, -2, 5, 1, 0, 4, 8, 27, -28, -4, 6, -11, -4, 7, 0, 27, 28, + 11, 6, -15, -15, -5, 4, 9, 1, -2, 2, 12, 11, 6, 0, -4, -6, 1, -5, -2, 4, 7, 4, 8, -5, -8, -6, -3, -11, -14, -9, + -17, -12, -4, -5, -13, -1, -3, -5, 1, 13, 1, -6, -4, -14, -14, -13, -9, -7, -10, -15, -6, -6, -12, -7, -38, -5, -4, -7, -10, -12, + -12, -5, -1, 3, -3, 0, 3, 7, 2, 8, 7, -4, 4, 3, 4, 3, 2, 4, 7, 0, 1, 5, 0, -6, -6, -3, -8, -5, -7, -3, + 4, 7, 0, 2, 8, 8, 5, -2, -2, -4, -9, -9, -8, -14, -20, -19, -13, -15, -3, -5, -15, -7, -5, -4, 7, 15, 6, -3, 2, -3, + 1, -3, -2, 4, 0, -1, -3, 3, 9, 10, 19, 6, 5, 10, 6, 9, 10, 6, -1, 8, 0, 8, 2, 0, 18, 12, 8, 4, 12, 10, + 8, 5, -1, 9, 3, -7, 3, -4, -12, -3, 3, 3, 4, -5, -9, -6, 1, 12, 0, 0, -3, 9, 13, -5, 11, -6, -6, -4, -2, -2, + 1, 5, 4, 5, 1, 1, -2, -3, 4, 5, 5, 3, -1, 0, 4, 5, -1, 0, 0, 0, 3, 6, 5, 0, -3, 1, 6, 5, 3, 9, + 6, 2, 5, 2, 2, 8, 7, 7, 1, -6, -4, -3, 4, -7, -12, -8, -7, -3, 2, -3, -2, -4, -8, -11, -8, -10, -6, -15, -17, -12, + -11, -9, -9, -13, -15, -16, -4, -7, 1, 2, -2, 4, 4, 6, 5, 13, 4, 9, 11, 11, 19, 23, 22, 23, 20, 19, 18, 18, 7, 11, + 10, 5, 8, 4, 4, 6, 9, 3, 2, 14, 13, 13, 13, 17, 15, 20, 14, 11, 0, -6, -17, -21, -32, -40, -56, 24, -66, -18, -24, -127, + -81, -12, 4, 21, 4, -7, 0, -6, -36, 4, 22, 1, 4, 14, 8, 3, 2, -3, 2, 0, -2, -15, 0, 5, 2, 5, 7, 9, -1, -5, + 9, 0, 6, 3, 3, 5, -11, -3, -3, 1, 8, 3, 14, 11, 15, 11, 5, -4, 5, 4, 6, 3, 4, 12, 8, 5, 5, 6, 13, -29, + 5, 2, -3, -4, -3, 3, 3, 1, 5, 3, 0, 4, 0, -2, -1, -5, 3, 3, 3, 3, -1, -5, -8, -5, -7, -3, 0, 1, -2, 1, + 1, 4, -2, -6, -2, -1, -4, -4, 0, 0, -5, -6, -1, 6, -1, 4, 3, -4, -4, -1, -2, -1, 2, 2, 0, 0, 2, 1, 6, 2, + 3, 0, -1, -4, 3, 7, 2, -3, -1, -2, -2, 1, 2, 3, -1, -4, -4, 3, -3, 0, 1, -1, 2, 8, 11, -2, -2, -6, -1, -5, + 4, 4, 3, 1, 1, 5, -4, 6, -1, 4, 2, 1, -4, 4, 1, 1, -2, 1, 2, 1, -4, 3, -6, -3, 2, 2, -3, 0, -1, -4, + -1, -2, -2, -5, -4, -1, -1, -1, 0, 0, -1, -4, -3, 1, -1, -1, 4, 3, 1, 0, 0, -3, -7, -1, 1, 2, -1, -5, -4, 0, + 2, 5, -1, 0, 2, 3, 3, -1, 3, 2, -1, 3, 6, 1, 1, -1, -5, -7, -3, 0, 0, 1, 0, 3, 2, 4, -1, -6, -5, 2, + 0, -2, -1, -4, 1, 4, 2, 4, 0, -2, -1, 2, 5, 3, 3, -1, -2, 4, -2, 1, -7, -6, -8, 0, 0, 3, 2, 7, 7, 0, + 3, 0, -8, -3, 2, -4, -5, -2, 0, 5, 3, 5, -1, -1, -3, 9, 3, -2, 0, -6, -5, -7, 1, -4, 5, -2, 1, -1, -3, 12, + 13, -3, 3, -3, -15, 5, 4, 1, 3, 2, -8, -3, 5, -3, 2, -12, -2, 3, -5, -3, 2, 4, 0, -8, -1, 9, 1, 3, 0, -3, + 2, 2, 0, -6, 1, 2, 0, -10, -1, -9, -1, 2, -1, -1, -1, -4, 1, 6, 1, 0, 2, -4, -7, 1, 2, 4, 1, 0, 4, 3, + 6, 2, 0, 2, -19, -4, -2, -6, 0, -3, 1, -2, -4, -3, -5, -2, 2, -2, -1, 0, -1, 1, 2, -2, -1, -2, 0, 1, 4, 1, + 0, 0, -4, 2, 2, 6, 1, 4, -6, 8, 9, 0, -5, -5, 1, 2, 1, -4, 0, 2, 0, 1, -2, -1, -4, 5, 7, 6, 0, 1, + 2, 5, -4, -2, 2, -2, 0, 3, -2, -4, -2, 0, -5, 1, -2, -3, 4, -3, 4, 1, 2, 0, 2, -7, -3, 4, -8, 6, 2, 0, + 3, 6, -4, 2, -7, 1, -7, -9, 0, 1, -2, -2, -4, -4, -1, -3, -3, -10, -5, 0, 2, 2, 4, -2, -3, 7, 7, -2, 2, 4, + -5, 4, 3, 4, 2, 7, 8, 7, 6, 0, 2, 0, 0, -5, -3, -6, -5, -5, -3, -3, 2, -4, 0, 2, 0, 2, 2, 0, -1, 0, + -1, 1, -4, 4, 3, 0, -3, -4, -3, -4, -3, -8, -6, -3, -2, -2, 0, 0, 3, 5, 5, 4, 2, 2, 2, 2, 0, -2, -5, -1, + -6, -7, -4, -4, 0, 0, -3, -3, -3, -1, 1, 11, 5, 2, 1, -1, 1, -3, 0, 0, -1, -1, -1, -1, 2, -4, -4, 0, 1, 0, + 2, 7, 4, 6, 3, 2, 0, -2, 4, -4, -1, -2, 1, -1, -2, -1, -1, -5, -4, -3, 3, 4, 3, 1, -4, -4, 0, 2, 2, 4, + 2, 1, -2, -1, -2, 13, 2, 1, -7, -11, 7, 2, 6, 1, 5, 6, 4, 4, -5, -6, -4, 4, 0, 0, 1, 5, 7, 2, 1, -5, + 2, 3, 3, 6, 1, -8, 2, -6, -3, -3, 3, -1, -5, -7, 4, -1, -3, 0, 3, 0, 0, -2, 4, 0, -9, -4, 2, -2, -3, -2, + -1, 0, -4, -3, 5, 2, 3, 2, 3, -13, -5, -2, -11, -6, -3, -4, -2, 1, 4, 2, 4, 11, -4, -2, -3, -5, 1, 12, 3, 1, + 0, -1, 2, 0, 4, 5, 4, 2, -1, -4, 4, 3, 1, 6, 7, 6, -1, -2, -2, 4, 4, 5, -2, 1, 6, 1, 2, -1, -7, -2, + 2, -3, 0, 2, -10, -4, 4, -3, -3, 0, -4, -3, 0, 2, 1, 1, 0, -3, -3, -1, 0, 3, 0, 7, 0, -5, -2, -10, 3, -2, + -4, -5, -5, -5, -3, -3, 0, -3, 3, 0, 0, -12, 3, 2, 4, 1, 2, -1, 3, -6, 4, -3, 3, -3, 0, 2, 8, -5, -3, 6, + 1, 2, -3, -3, 2, -10, 2, 1, 3, 3, -1, 0, 0, -1, -2, 2, 0, 0, 1, 4, 0, 1, -3, 1, 3, 5, 1, -1, 1, 0, + 0, 0, -1, -1, 3, 1, 0, -5, -5, -4, -5, -4, -4, -3, 0, -2, -3, -2, -4, -5, -2, -4, 1, 1, -1, 1, 3, -3, 2, 0, + -3, 1, 3, 0, -2, 0, -2, 0, 3, -2, -4, -3, 1, 1, -1, 2, 3, -1, 1, 0, -1, -4, 1, 5, -1, 1, 4, 0, 6, 1, + -2, 4, 2, 6, 5, -1, 1, 0, 0, 1, 4, 0, -1, 3, -1, 2, 1, 1, -2, -2, -1, -3, -2, -6, -2, -2, 4, 2, 3, 2, + -5, -5, 4, -3, -3, 1, 0, 0, 0, -4, 4, 10, 1, -2, -5, 5, -9, 2, -6, 3, -2, -3, -3, -3, -6, -3, -1, -3, -1, -7, + 4, 1, -3, -5, -1, 5, 1, 7, 4, -1, 5, 1, 2, 2, 3, 9, -2, -4, -1, 1, 4, 2, -1, 7, -3, 1, 4, 0, -3, -1, + -2, 1, 4, 4, -3, 2, -2, 1, -6, 4, 1, 6, -4, -6, 1, -1, -1, -2, -4, -5, 6, 11, 6, 1, -7, -4, 1, -1, -2, -3, + 8, 8, 1, -3, -6, -2, -1, 3, 6, 3, 3, 5, 3, -4, -1, 7, 1, 0, -2, -11, -8, -3, 3, -1, 2, 0, -5, -2, -4, 1, + 1, 3, 3, 5, -5, 0, 5, 5, 4, 2, -2, 2, 5, 0, -3, 1, 3, -1, -8, -6, -4, 4, 1, 3, 2, -3, 3, 9, 7, 2, + 0, 0, 1, 7, 5, 0, 2, 8, 7, 7, 1, -4, -5, -9, -1, 6, 1, -3, 3, 5, -1, -4, -8, -2, 0, -1, -1, 8, -5, -3, + -3, -7, -3, -3, 0, 1, 1, 3, -5, 1, -3, 3, 4, 8, 6, 2, 0, -1, 1, -1, 2, 3, 3, 0, 3, -2, -3, -6, -3, -2, + 0, 0, -3, -4, -2, -5, -5, -5, -5, -2, -3, -1, 2, -1, -1, 1, 2, 4, 0, 0, 0, -2, 1, 1, 1, 1, -1, -2, -3, -2, + 1, 1, 2, 0, 0, 6, 5, 1, -4, -4, -4, -3, -2, -4, 0, -1, 2, 0, -1, 3, -1, 3, 1, 3, -1, -3, -4, 1, 0, 0, + -3, 0, 2, 2, 1, 3, 4, 2, 0, -3, -1, 1, -2, -7, 3, 1, 1, 6, 4, 1, 1, 5, -3, 1, 1, 2, 5, 5, -3, 1, + -3, -2, -1, -3, -7, -6, -8, -1, -2, 1, 6, 8, -2, -9, -4, 6, 17, 0, -2, 8, 5, 7, 10, -12, -2, -5, 9, 0, -6, -3, + 6, -2, -3, 6, -3, -4, -5, -5, 3, 1, 1, 1, -1, 1, -6, 4, 0, -2, 0, -4, -2, 2, -2, 2, -4, -6, 2, 2, -10, -3, + -2, 2, 1, 4, -4, -1, 2, 5, 1, -5, 1, 2, 5, -6, 0, 3, -2, -9, -2, 20, -8, -3, 4, 1, -2, 1, 2, -2, -6, 8, + 5, 9, 9, 4, 5, 1, -6, -12, -6, -5, 3, 1, 0, -5, -5, -5, 0, 6, 7, 3, 7, 6, 4, 6, 2, 3, 0, -1, -1, -6, + -4, 0, 2, 2, -3, -4, -8, 0, 0, 0, 2, 5, 6, 7, 12, 15, 17, 10, 16, 12, 4, -1, -1, -5, 3, 2, 3, 4, 3, -1, + -10, -10, 3, 7, 3, 5, 8, 9, 17, 8, 5, 9, 2, 1, -2, -8, -1, -11, -10, -14, -5, -12, -6, -9, -8, -8, -7, -2, 2, -2, + 2, 6, 6, 2, -6, -6, -2, -11, -8, -5, -7, -7, -12, -5, -1, -3, -4, 5, 0, -3, 1, 5, 5, 5, 8, 1, 2, 2, 0, -4, + -4, 1, 3, 2, 2, 1, 4, 1, 4, 0, 3, 4, 4, 1, 1, 1, 2, 2, 3, 4, 8, 7, 2, -2, 1, 2, -4, -1, -3, -3, + 0, 2, 2, 3, 0, -4, -1, 3, -2, -2, -2, -1, 0, 5, 6, 3, 1, 7, 5, 2, -2, -4, -2, -5, -4, -6, -6, -1, 4, 8, + 2, 2, 8, 3, 1, -3, -1, 2, 4, 3, 6, 3, 8, 1, -2, -2, 1, 0, -4, -4, 0, -1, 3, 2, 0, 4, 8, 1, 6, 5, + 9, 6, 6, 3, -3, -1, 1, 2, 1, -1, -2, -2, 2, 8, 3, 2, -1, 1, 7, 2, -6, 19, -5, -5, -2, 2, -7, -8, -10, -4, + -4, -5, -2, -11, 1, 7, -12, 4, 9, -1, -3, 6, 0, 6, -4, -7, 1, 1, 0, -1, 2, -3, 8, -2, -8, 0, 2, -4, 2, -11, + 1, 1, -1, 11, 7, -3, 4, 4, 1, -5, 3, 2, 6, 0, 5, 6, -1, -2, -1, 1, -3, -1, -6, -6, 54, -15, -12, -10, -7, -4, + -2, -1, -4, -6, -9, -9, -9, -4, 2, 3, -2, -4, -7, -1, -7, -2, -2, -3, -4, -5, -6, -8, -6, -8, -5, -3, -3, -2, -1, -5, + -17, -23, -17, -7, -1, -1, -1, -9, -9, -6, -10, -10, -4, 3, 0, 3, 2, -1, -3, 1, -5, -11, -13, -5, -10, -6, -8, -10, -3, -10, + -8, 0, -5, -4, -10, -9, -7, -3, -5, -8, -2, 5, 4, -1, -3, -9, -19, -15, -8, 2, 5, 9, -2, -3, -4, -7, -11, -5, -2, -6, + 5, 7, 9, 7, 2, 12, 1, 4, -3, -1, 6, 0, -1, -2, -4, 2, 1, -10, 7, 3, 11, -1, 5, 6, -1, -1, 0, 4, 2, 1, + -3, -5, -3, -2, -1, -3, 4, 5, 1, -1, -4, 1, 5, 3, 8, 5, 9, 9, 10, 9, 5, 4, 3, 5, 10, 11, 15, 12, 9, 6, + 4, 4, 5, 8, 7, 5, 7, 5, 4, 5, 0, 4, 4, 3, 5, 6, -2, -4, -7, -6, -5, -1, 12, 14, 20, 20, 19, 20, 19, 13, + 9, 6, 1, -4, -4, -6, -7, -1, 2, 1, 7, 9, 14, 12, 8, 5, 4, 4, 4, 6, 10, 6, 3, 1, 6, 11, 16, 18, 19, 23, + 17, 9, -7, -19, -25, -29, -19, -7, 3, 6, 10, 14, 12, 9, 13, 8, 7, 2, 2, -6, -9, -11, -12, -10, -1, -41, -57, -8, 69, 0, + 69, -69, -6, 127, -44, -38, 43, -17, 35, 8, -23, 35, 4, -19, 11, -9, 16, 16, -20, -10, 18, 9, -17, -3, 5, -2, -8, -12, -7, -5, + -8, -9, -1, -5, -7, -4, 4, -1, 16, 5, -4, 2, 6, 5, -1, 3, -3, 1, -14, -4, -3, -6, -10, 2, -3, -4, -3, -6, -8, 92, + 28, 6, 10, 0, 3, 4, 4, 25, -14, -11, -12, -6, 4, 9, -6, 4, 10, 5, 3, 9, -4, -1, -22, -16, 11, -4, 5, 3, -12, 0, + -21, -31, -13, 15, 11, -4, 8, -13, 7, -5, 3, 5, 18, 15, 13, 5, 8, 6, 8, 5, 3, 11, 10, 10, -1, -3, -8, -2, 2, 5, + 6, 7, -8, -8, 4, 4, 16, 5, -24, 10, -2, 0, 12, -18, 6, 6, -8, -13, 4, 20, -12, 17, 7, 16, 7, 0, -16, -5, 5, -7, + 4, -7, -8, 2, -12, 13, 7, 14, 9, 13, -6, -11, 1, -9, 18, 5, 18, 0, -2, 11, 1, -10, 12, 16, 3, -16, -29, -43, -33, -7, + 7, -1, 3, 2, 5, 11, 15, 13, -3, -7, -6, -2, 4, 9, 3, -3, -1, -7, -11, -7, -8, -7, 7, 4, 12, 10, 2, 11, -1, -1, + -10, -11, -3, 23, 20, 10, 10, 12, -9, -8, 4, 9, 9, 5, 6, 11, 1, 17, -4, -14, -3, -9, 0, 6, 5, -3, 2, 5, 9, 5, + -6, -3, -7, -4, 3, 5, 9, 17, -6, -10, 14, -9, 7, 6, 7, 3, 5, -12, 1, -10, -7, -5, -8, -10, -8, -5, 0, -7, -14, -13, + -2, -2, -2, 4, 5, 13, 8, 7, 15, 0, 6, 2, 0, 8, 2, 14, 17, 10, 8, -4, -22, -43, -13, -10, -1, -6, 8, 24, 35, -21, + -64, 43, 47, -48, -39, -21, -12, 6, -5, 15, -2, 1, -24, -17, 4, 19, -19, -15, 10, -13, -16, -2, 15, 5, 10, 8, 0, 15, -24, -18, + 0, 8, 16, 6, -26, 13, -4, -6, 11, -3, -8, 1, -12, -21, -16, -9, -3, 2, -12, 11, 19, 24, 11, 1, -18, 8, 4, 1, 37, 22, + 18, 10, 17, 15, -16, 3, -4, -4, 7, 4, 4, -6, -3, -19, -21, -9, -2, -1, 17, 16, 2, 15, 2, -7, 0, 21, 3, -14, 7, 15, + 13, 20, 7, -4, 2, 7, 11, 6, 15, 20, -5, 2, -6, 2, -2, -9, -11, -10, -6, -13, 13, 10, -3, -5, -4, 15, 1, 12, 7, -15, + 1, 4, -9, 4, 0, -2, 16, 20, -2, -3, 19, 8, -14, -15, -1, -14, 8, 9, -18, 17, 6, -1, -6, 11, 27, -4, 10, -5, 2, -2, + -7, -9, -8, 15, -12, 7, 6, 7, -11, -6, 31, -1, 20, -3, 4, 4, -14, -21, -27, -6, -4, 2, 9, -1, 5, 15, -4, 2, -17, 1, + -12, -33, -32, -38, -6, -8, -9, -4, 5, 6, 8, 8, 8, -4, -9, -9, 2, 7, 4, 7, 12, 5, -4, 5, 7, -4, -11, -8, -5, -4, + 1, 6, 8, -1, -12, -14, 3, 13, 24, 18, 11, 4, 1, 4, -9, 4, -3, -5, 2, 6, -2, 5, -7, -2, 3, -22, -11, -13, -12, -9, + 0, -6, 3, -7, 2, 15, 0, 5, 6, 6, 3, 0, -13, -13, 2, 13, -3, 9, -17, 5, -5, 0, -7, -6, -5, 7, -7, 0, -13, -2, + 5, 16, 15, 12, -8, 7, 3, 7, 18, 15, 20, 27, 16, 0, 9, 10, 6, 9, -16, -14, 1, 15, 15, -5, -15, -19, -7, -12, -29, -5, + -10, -8, 5, 11, -3, -68, 33, 45, -45, -42, -15, 24, 13, 35, 27, -4, 17, -10, -13, -16, 15, -12, -8, 0, -4, -30, 7, 3, 0, -11, + 14, 20, 11, 11, 14, -1, 21, 48, 16, -15, -4, -4, -13, -1, -3, -14, -21, -13, 9, 0, -3, 0, 10, 14, 12, 12, 23, 6, -14, 2, + 4, -16, 2, 14, 13, 11, 3, 1, -3, -14, 1, -5, -6, 7, 9, -2, -5, -5, 6, -1, -16, 14, 1, 4, 0, -16, -23, -14, 8, 11, + -1, 4, 1, 7, 9, 8, -5, -2, -3, -8, -7, 18, 14, -11, -13, 3, 2, 7, 4, -14, 0, 4, 15, -6, 14, 21, -1, -11, 4, 6, + 20, 9, 25, 28, 26, 22, 0, 9, 1, 3, -2, 24, 10, 23, 26, 1, 7, -17, -17, 10, 11, -4, -10, 3, -5, -30, -25, -16, -35, -3, + 5, -2, -15, 11, -23, -2, -4, 14, -20, 3, 5, 5, -12, -13, -21, 11, -12, 3, -16, 0, 7, -19, -17, -22, -10, -25, -11, -4, 19, 4, + 13, 9, -13, -24, -4, -8, -18, -16, -50, -34, 10, 2, 5, 4, 8, 6, 4, 7, -7, -14, 4, 6, 28, 16, 6, -2, -10, -8, -14, 0, + 6, 1, -6, 1, 1, -6, 2, 1, -4, -8, 3, -1, 9, 16, 1, -7, 14, 17, -1, 4, 3, -7, -8, -9, -2, -3, 2, -14, 3, 1, + -7, -4, 5, 6, 6, 0, 9, -2, -6, 8, 16, 11, 9, 17, 26, 37, 22, 9, 21, 15, 12, -5, 4, 5, 6, -14, -14, -21, -19, -22, + -7, 4, -10, -2, -2, 8, 6, -2, -8, -4, 8, 5, 10, 12, 0, 3, 11, 4, 3, -7, 10, 9, 5, -4, 10, 3, -3, 6, 9, -13, + -1, -6, -2, -2, -1, -11, -6, 3, -19, -3, -68, 39, 51, 4, -23, 27, 36, 21, 23, 62, 20, 10, 9, -17, 0, -7, -8, -3, -19, -10, + -26, -33, -22, -30, -16, 8, 0, 5, 10, 4, 13, 13, 12, 6, 6, -21, 2, -2, -5, 3, -11, -6, -14, -9, -6, -19, 0, 8, -9, 19, + 19, -7, -15, 3, -10, 17, -3, 2, 6, 4, 14, 3, -19, -4, 20, -8, -10, 14, 4, 19, 14, 9, 1, -10, -7, 22, 18, 4, 8, 13, + -4, -15, 4, 8, -7, 24, 34, 7, -4, 9, 8, 14, 2, 8, 4, 15, 0, 1, -18, -23, -7, 11, 2, -3, -3, -12, -12, -24, -21, 5, + -10, -9, -5, -6, 4, -8, -1, -4, 5, 16, 37, 26, 18, -4, 19, 23, 4, 5, 5, -31, -21, 17, 10, 0, 32, 29, 22, 2, -3, -2, + -11, -26, -19, -28, -30, -26, -23, -4, -11, -23, -9, -7, -9, -5, 7, 12, -6, -9, -11, -5, -10, -21, -49, -41, -30, -16, -15, -8, 3, 13, + 1, -1, -10, 7, -12, -6, -6, -11, -14, -9, -30, -7, -5, -6, 1, 6, 4, 4, 7, 12, 3, 9, 1, -10, -24, -14, 2, 3, 9, 17, + 18, 7, 3, 6, 13, 20, 4, -3, 10, 8, -3, -3, -7, 3, 4, -2, -7, -13, -16, -18, -17, -13, -21, -20, -10, -11, -9, -29, -1, 7, + -1, 4, -11, -5, -11, -6, -3, -6, -8, -1, -10, 3, -6, -18, -4, -7, 4, 5, 8, 8, 13, 20, 17, 25, 24, 21, 23, 12, 11, 5, + 1, -7, -8, -14, -15, -1, -7, -6, -18, 3, 0, -5, -11, -6, 4, 10, 2, -21, -7, 2, -2, -6, -11, -11, 3, -5, -1, -5, -2, 8, + -1, -1, -6, -8, -24, -20, 12, 3, 0, -3, -13, -12, -21, -18, -21, -82, 63, 55, 8, -8, 63, 7, 35, 46, 91, 63, 9, 15, -9, -1, + -12, -19, -7, -17, 3, -20, -1, -5, 4, -25, -21, 5, 31, -3, 6, -11, 11, 14, -16, 1, -15, -25, -17, -7, 3, -6, -10, -24, -18, -2, + -5, -11, -16, -5, 4, 18, 0, -6, 18, -12, -10, -10, 29, -9, 8, 0, -22, -24, -30, 48, 23, 20, 16, 26, 14, 6, 18, 33, 35, 25, + 22, 25, 32, 31, 17, 17, 17, 17, 10, 10, 3, 11, 14, 17, 11, -3, -5, 8, -8, -4, 11, -3, -11, -12, -13, -18, 3, 6, 5, 1, + -11, -18, -16, -15, -11, -9, -7, -25, -23, -35, -16, 0, 5, 26, 20, 11, 6, 15, 19, 10, 7, 4, 13, 9, 7, 9, -1, 0, 5, 25, + 23, 21, 42, 32, 17, 27, 25, -4, -18, -13, -34, -32, -27, -24, -23, -17, -16, -7, 0, -6, -12, 6, -2, 2, 0, 3, 27, 11, 7, 4, + -10, -33, -43, -57, -54, -27, -8, -12, 6, 20, 24, 5, -19, -41, -62, -44, -49, -32, -25, -34, -16, -15, -1, 4, -1, 4, 12, 14, 11, 6, + 12, 7, -6, 2, 17, 15, 3, 0, 2, 16, 9, 3, -1, -2, -4, -11, -9, -19, -23, -15, -8, -8, -15, -8, -9, -11, -3, -3, 2, -6, + -17, -13, -28, -26, -12, -17, -12, -25, -23, -23, -25, -32, -29, -21, -9, -12, -2, 7, 14, 26, 14, 13, 9, 14, -12, -9, -3, 3, 19, 12, + 26, 5, 12, -2, -20, -5, -4, -1, -6, -3, 5, 10, 20, 18, 21, 36, 28, 10, 4, 0, 11, 15, 19, 31, 29, 23, 24, 22, -6, -12, + -22, -49, -32, -36, -44, -29, -3, -12, 6, -5, -9, -12, -31, -38, -52, -54, -38, -46, -32, -51, -50, 73, 16, 23, -51, 67, -11, 60, 29, 124, + 78, 35, 11, 12, 19, 0, -4, 10, -8, -23, -9, -20, -23, -20, -19, -11, -5, 27, -2, 29, 11, 18, 26, 25, -4, 8, 15, -12, 0, 4, + -19, 2, 5, -1, 0, 20, 20, 1, 31, 30, 4, 1, 9, 3, 2, 4, -1, 33, 14, 8, 14, -16, -36, -25, 42, 8, -35, -27, -2, 12, + 35, 14, 1, -3, -4, -16, -10, -13, 22, 17, 28, 17, 7, 10, 3, 5, -4, -15, -3, 9, -8, -5, -27, -17, 11, 14, 23, 10, 7, -2, + -14, -22, -25, -12, 8, 9, 11, 6, -10, -5, -11, -52, -65, -41, -34, -30, -28, -23, -17, 0, 13, 5, -6, 11, 11, 33, 14, -7, 7, 29, + 33, 34, -6, -16, 6, 0, 25, 22, 11, 52, 54, 71, 54, 6, -5, -28, -42, -46, -45, -35, -3, 3, 24, 4, 0, 3, -21, -64, -28, -17, + -5, 35, 30, 25, 31, 25, 18, 2, -7, 16, 28, 24, 14, 0, 10, 22, 42, 17, -5, -27, -58, -63, -69, -25, -48, 23, 8, 15, 5, 4, + 24, 33, 27, 24, 34, 17, 10, -8, 0, 8, 6, -2, 7, 2, 9, 13, 14, 10, 7, 4, -2, -1, -6, -5, -13, -6, 14, 2, 11, 19, + 26, 11, 9, 16, 13, 14, 11, -4, -8, -21, -28, -26, -29, -32, -34, -27, -42, -44, -21, -6, -5, 17, 4, 2, 6, -4, -6, -10, -2, -4, + -7, -3, 0, 13, 20, 28, 42, 72, 57, 56, 65, 47, 25, -12, -37, -48, -50, -62, -52, -40, -11, 0, 16, 16, 19, 33, 28, 12, 46, 49, + 49, 67, 65, 29, 1, -36, -76, -92, -89, -102, -121, -127, -110, -114, -66, -49, -16, 6, 4, 20, -9, 2, -11, 0, -30, -90, 30, -81, 14, -96, + -2, -63, 32, 2, 123, 39, 49, 7, 45, -5, 22, -32, -30, -30, -34, -8, -20, -28, -3, 11, 4, -18, 8, 34, 22, 26, 19, 23, 13, 20, + 9, 23, 20, 3, -9, 0, 1, -2, -3, -3, 13, 30, 33, 45, 39, 4, -16, -15, 7, -12, -13, 2, -3, 21, 17, 8, -14, -4, -42, 84, +}; + +// Layer 1 bias. +const float kPitchNetBias1[160] = { + -0x1.1bf7c4p-3f, -0x1.034a3p-6f, 0x1.a50898p-6f, -0x1.1b7ee4p-2f, -0x1.07348ap-2f, -0x1.8fe11ap-4f, + 0x1.0a39b2p-4f, 0x1.64d46p-2f, -0x1.95e498p-4f, -0x1.57ceb2p-7f, -0x1.312bcap-2f, -0x1.24a88p-7f, + -0x1.5d332ep-2f, -0x1.c2ab9p-4f, -0x1.85d43cp-3f, 0x1.7d991ep-3f, 0x1.ba83aep-6f, 0x1.0590bap-4f, + -0x1.a016cep-3f, -0x1.9c670ep-3f, 0x1.bc3f72p-4f, 0x1.013174p-2f, 0x1.ac5f6cp-3f, 0x1.15eff2p-4f, + 0x1.87f2e8p-3f, 0x1.bb0eap-3f, -0x1.d9d216p-3f, 0x1.ef9c0ep-5f, 0x1.868998p-4f, -0x1.044374p-8f, + -0x1.468aa2p-3f, 0x1.9d2c18p-6f, 0x1.a48718p-4f, -0x1.2271eap-3f, -0x1.07df16p-3f, -0x1.3bf7a2p-4f, + 0x1.1df382p-5f, 0x1.7beb02p-3f, 0x1.6f7aecp-4f, 0x1.4e39b2p-3f, -0x1.29301ep-4f, 0x1.12255p-3f, + 0x1.fce6eap-5f, -0x1.b572c8p-3f, -0x1.2b6a92p-4f, -0x1.fa8e5ap-3f, 0x1.b3b25ep-4f, -0x1.c82d0ap-4f, + -0x1.4f0e2ep-6f, 0x1.1daafap-3f, -0x1.4424c8p-3f, -0x1.c1c2ap-6f, 0x1.51d3cp-6f, 0x1.60d074p-4f, + -0x1.6d236p-2f, 0x1.e52984p-6f, 0x1.749a48p-5f, 0x1.29b47p-4f, 0x1.b8e2p-3f, -0x1.0ceebp-2f, + 0x1.332c8ep-4f, -0x1.bb663p-3f, -0x1.2712f8p-4f, -0x1.a5195p-3f, -0x1.8df388p-4f, -0x1.53ec6ep-11f, + -0x1.025a64p-6f, -0x1.4f0ed8p-3f, 0x1.0b4eecp-3f, 0x1.6ab644p-6f, 0x1.3df1dap-5f, 0x1.f1891ep-4f, + 0x1.0ca468p-4f, -0x1.d112bap-4f, -0x1.578e32p-2f, 0x1.09ed5ep-3f, -0x1.77ef1ap-2f, -0x1.0bf9b4p-12f, + 0x1.c22152p-6f, -0x1.7519c6p-3f, -0x1.cf44eep-3f, -0x1.d93de4p-2f, 0x1.147d8p-4f, 0x1.050c54p-2f, + 0x1.34cfd4p-4f, -0x1.438cfcp-3f, 0x1.c0f148p-3f, -0x1.54d50ap-3f, 0x1.933a8cp-4f, -0x1.a1e932p-4f, + 0x1.223ce4p-3f, -0x1.a052ap-3f, -0x1.85597p-4f, 0x1.b4fe14p-4f, 0x1.3f23e8p-4f, 0x1.b77032p-6f, + -0x1.fda704p-5f, -0x1.02b768p-4f, 0x1.a4a6dep-7f, -0x1.832282p-3f, -0x1.74dc52p-3f, -0x1.1f7d84p-3f, + -0x1.9a6728p-3f, 0x1.43335p-2f, 0x1.c964a2p-5f, 0x1.05ffdep-4f, -0x1.cd6f14p-6f, -0x1.cc98bap-4f, + -0x1.2c040ep-2f, 0x1.5b4c48p-9f, 0x1.33c074p-3f, -0x1.a99ac4p-6f, 0x1.432f26p-2f, -0x1.05c3aap-3f, + 0x1.244c86p-4f, -0x1.8ef00ap-5f, -0x1.b86d1ep-5f, 0x1.e46d9ep-5f, 0x1.4d5512p-2f, 0x1.a5191ap-5f, + 0x1.0c2dd6p-5f, -0x1.554328p-5f, -0x1.29a892p-6f, 0x1.7d52b8p-4f, -0x1.02b6a2p-2f, -0x1.94e21p-4f, + -0x1.e5780ep-2f, -0x1.041b0cp-2f, -0x1.83f7e4p-3f, -0x1.4cda92p-4f, -0x1.88def8p-4f, 0x1.8d952cp-4f, + 0x1.488cdap-2f, 0x1.4a3eaap-4f, -0x1.68aceep-2f, -0x1.07d7eap-4f, -0x1.b3845p-4f, 0x1.e76604p-4f, + 0x1.f3d336p-5f, 0x1.770d4p-6f, -0x1.d4adcep-4f, 0x1.d9dd3p-4f, 0x1.65c56cp-5f, -0x1.068ce6p-2f, + -0x1.f9ab9ap-4f, -0x1.d9c9aep-4f, -0x1.019dcap-3f, -0x1.ef088ep-5f, -0x1.cc3c64p-4f, 0x1.a0d992p-3f, + 0x1.029e5ap-5f, 0x1.90d348p-6f, 0x1.6dc31cp-3f, -0x1.274bacp-4f, 0x1.c6ce8cp-3f, 0x1.9ce14ap-3f, + -0x1.25eba6p-2f, 0x1.b06d3p-3f, -0x1.a0996p-3f, -0x1.fb5fd6p-5f, +}; + +// Layer 1 output scale. +const float kPitchNetScale1[160] = { + 0x1.4e19ccp-9f, 0x1.4e4df6p-8f, 0x1.3546eep-8f, 0x1.9700d8p-9f, 0x1.066794p-7f, 0x1.9f9416p-8f, + 0x1.3622b6p-8f, 0x1.1cc244p-8f, 0x1.a86318p-9f, 0x1.564742p-8f, 0x1.0ec818p-8f, 0x1.6be5bep-8f, + 0x1.6a03e8p-8f, 0x1.ea17dep-8f, 0x1.2c2cf2p-8f, 0x1.9a951ep-8f, 0x1.63f4acp-8f, 0x1.02861cp-8f, + 0x1.1cfa3ep-8f, 0x1.f0991ep-9f, 0x1.6086ep-8f, 0x1.10eb2ep-9f, 0x1.dd5ef8p-9f, 0x1.9a3f1p-8f, + 0x1.0002dcp-8f, 0x1.4fe3ecp-8f, 0x1.359984p-8f, 0x1.434f4ap-8f, 0x1.d790f2p-8f, 0x1.0c4c1ep-8f, + 0x1.f30ceep-9f, 0x1.a0bffcp-8f, 0x1.024ca4p-7f, 0x1.953fcp-9f, 0x1.c2526cp-8f, 0x1.bd420ap-9f, + 0x1.29eebep-8f, 0x1.168c5p-8f, 0x1.21f57ap-8f, 0x1.43060ep-8f, 0x1.00d19ep-8f, 0x1.5cac9ep-8f, + 0x1.b872e4p-9f, 0x1.73399cp-8f, 0x1.c9f6b8p-8f, 0x1.c091f4p-8f, 0x1.246f9ep-8f, 0x1.013f46p-7f, + 0x1.87f6acp-8f, 0x1.3d1bbcp-8f, 0x1.e68858p-9f, 0x1.e6d2cap-8f, 0x1.58fd6ep-8f, 0x1.2d1724p-8f, + 0x1.09f4ecp-8f, 0x1.efc52cp-8f, 0x1.4e622cp-8f, 0x1.2033a8p-8f, 0x1.15c66ap-8f, 0x1.8ccaeep-8f, + 0x1.a13226p-8f, 0x1.568f94p-8f, 0x1.8cb78ep-8f, 0x1.bb219ap-8f, 0x1.2afbbap-8f, 0x1.85e922p-8f, + 0x1.37593cp-8f, 0x1.cb35b6p-8f, 0x1.1fcdd2p-8f, 0x1.41d37p-8f, 0x1.82e324p-8f, 0x1.28ee4ap-8f, + 0x1.754a78p-8f, 0x1.104a84p-8f, 0x1.09b146p-7f, 0x1.66c588p-8f, 0x1.c0c6c4p-9f, 0x1.53b7fp-8f, + 0x1.d9caap-9f, 0x1.6949e6p-8f, 0x1.b468ccp-8f, 0x1.74e26p-8f, 0x1.d52ca4p-8f, 0x1.d1976p-9f, + 0x1.541d88p-9f, 0x1.758d72p-8f, 0x1.2e125cp-8f, 0x1.7a992ap-8f, 0x1.fa6322p-9f, 0x1.51546ep-8f, + 0x1.68dbbap-9f, 0x1.e14224p-9f, 0x1.1c30dp-8f, 0x1.6742c6p-8f, 0x1.cc7b76p-9f, 0x1.5b7574p-8f, + 0x1.bcba82p-8f, 0x1.5adbcap-8f, 0x1.2fb54ep-8f, 0x1.5a7384p-9f, 0x1.994952p-8f, 0x1.811cc2p-8f, + 0x1.68c52cp-8f, 0x1.b1eb68p-8f, 0x1.154804p-8f, 0x1.5c6bd4p-8f, 0x1.a98a42p-8f, 0x1.0c5972p-7f, + 0x1.776de2p-8f, 0x1.25f8fap-8f, 0x1.6eec84p-8f, 0x1.8dea86p-8f, 0x1.12eabp-8f, 0x1.98152ap-8f, + 0x1.d1eb06p-8f, 0x1.afe95p-8f, 0x1.1fea9cp-8f, 0x1.0695acp-7f, 0x1.b83536p-9f, 0x1.ce070cp-8f, + 0x1.156bc6p-8f, 0x1.5d387p-8f, 0x1.2e0458p-8f, 0x1.885c4cp-8f, 0x1.6c3128p-8f, 0x1.527552p-8f, + 0x1.302ecap-8f, 0x1.05fbbep-7f, 0x1.4cf34ep-8f, 0x1.972a4cp-9f, 0x1.2294b8p-8f, 0x1.5acc18p-8f, + 0x1.006f16p-8f, 0x1.8f86p-8f, 0x1.67f822p-9f, 0x1.b8a77p-8f, 0x1.392f4cp-8f, 0x1.06c914p-8f, + 0x1.478994p-9f, 0x1.67293cp-7f, 0x1.ecfa0cp-9f, 0x1.78bc76p-8f, 0x1.b9fc6cp-8f, 0x1.10ec54p-7f, + 0x1.cdbaeep-8f, 0x1.0bc4f8p-7f, 0x1.e964d4p-8f, 0x1.3832b8p-9f, 0x1.17a5c8p-8f, 0x1.803cbp-8f, + 0x1.f6141p-8f, 0x1.3f86f8p-8f, 0x1.447a32p-7f, 0x1.18d6f4p-8f, 0x1.a353ccp-8f, 0x1.16ecbcp-8f, + 0x1.a52534p-8f, 0x1.c66e52p-8f, 0x1.0d8b72p-7f, 0x1.67ae6ap-9f, +}; + +// Layer 2 weights [96][160]. +const int8_t kPitchNetWeights2[96 * 160] = { + -63, -30, 2, -24, -127, -31, -27, -18, -6, -12, 6, -26, 61, 16, -51, -16, 26, -38, -7, 4, -27, 19, 16, 10, -30, -23, -98, -46, 25, -31, 25, 45, + -48, 25, 1, 23, 28, 32, 61, 74, -18, 79, -91, -18, 69, -24, -26, 113, 34, 43, -43, 22, 33, 21, -37, -37, -22, -39, -27, -22, -10, -1, 76, -23, + 26, -14, 3, 50, -25, -41, 39, 72, 2, 39, 87, -32, -21, -109, -40, -29, 1, -8, 36, 16, 28, 26, 23, 51, -20, 68, 20, -15, -18, -63, -11, -8, + -15, -44, 31, -5, 10, -64, 10, -43, -69, -6, 53, 71, 22, -16, -78, -47, -21, -39, -45, 96, 13, 20, -17, -56, -19, -23, -33, -73, 69, 45, -19, -26, + 108, -25, 5, -78, -7, -38, 2, -6, 25, 3, 42, -62, -58, 58, 30, 39, -63, 10, -45, 10, -13, 7, -103, 15, 7, 14, 91, 104, -18, -76, 26, -46, + 4, 6, -7, -75, -45, 83, -50, 39, -27, -17, 3, 21, -127, -33, 20, 21, 103, 4, -6, -84, 51, 47, -14, 46, -18, 12, -63, -78, 52, 30, 15, 68, + 22, -14, 72, 21, 27, -13, 20, 67, 37, -31, -4, 7, 5, -3, -31, -70, -25, -33, -35, -46, 5, 33, -20, -13, -84, -29, -6, -15, -15, 80, -2, 10, + -61, 0, 25, 39, 49, 25, -40, -2, -6, -104, 0, 82, 3, -23, -32, 59, -44, 3, -3, 34, -8, 58, -17, -42, 19, 1, 35, -51, 72, -8, 26, 21, + 116, -51, 4, -13, -27, 42, -24, 63, 16, 25, -29, -97, -24, 36, 13, 24, -1, -46, -39, 37, 20, -20, 62, -50, 13, 45, -3, 17, -78, -17, -6, -86, + -56, 32, 39, -11, -29, -18, -9, 13, 2, 1, -23, 14, 35, 37, 18, -55, -40, -17, 27, 36, -36, 41, 46, 9, -12, 42, 72, 27, -99, 25, 12, 62, + -6, 17, -47, 23, 89, 26, -6, -4, -13, 19, -53, 33, 7, 4, 29, 5, 39, 14, -20, -3, -77, 34, 22, 68, 20, -56, -40, -25, 54, -62, 4, 5, + 96, -8, -38, -3, 52, -48, 56, -42, 35, -4, 2, -38, -28, -42, -75, 39, -41, -111, 25, 0, 5, -62, -22, -18, 93, -40, 23, 55, 72, -41, 2, -17, + -51, -68, 8, -15, 91, 38, -61, -12, 18, 50, -38, 48, -22, 20, -3, -25, 84, -20, 22, -31, -8, -17, -22, 42, 7, -49, 41, 4, 18, -21, 0, 61, + -57, 5, 15, -1, -9, 4, 12, 8, -55, 0, -10, 15, 26, 33, 35, 50, -21, 13, 77, 6, 16, 40, -12, 13, -4, -44, -36, -30, -3, 5, -5, 50, + 24, -5, -24, 12, -42, 26, -23, -72, 16, 41, -11, 69, -3, -5, 18, 34, 28, -97, -47, -14, 4, -7, 72, 17, 127, 23, -99, -63, 58, -54, -24, 8, + -86, 19, 26, -91, -74, -12, 7, 76, 88, 76, -11, -11, -61, -21, 8, 14, -6, -81, -42, -65, -16, 13, 16, -99, -68, 2, -14, -49, 60, 45, 73, -11, + -14, -21, -98, 94, -59, 52, -14, -41, -99, 50, 30, 31, 64, 1, -82, -59, -6, 36, 21, -33, 22, 34, 3, 44, -35, 57, 16, -32, -12, 10, 10, -17, + -19, 90, 51, 29, -51, 11, 26, -66, -50, -47, 39, 28, -77, 48, 3, 30, -101, 3, 69, 40, 16, -56, 24, -72, -26, -43, 5, -32, -12, 45, -1, -55, + -2, -45, 28, 51, 15, 77, -29, 27, 16, -62, 23, 7, -79, -96, 7, -69, 65, 16, -5, 59, 69, -31, -10, 41, 41, 74, 23, 32, -7, -6, -56, -84, + -22, -26, -1, -70, -6, -9, 78, 42, 44, -1, -2, -41, 23, 86, 53, -28, -28, 49, 76, -25, -20, 31, -61, 46, -44, 94, 82, 35, -127, -27, -31, -63, + -35, -21, 49, -42, -127, 40, 50, 42, 0, 65, 27, -18, 24, 63, -115, -34, -3, -38, 7, -83, -1, 2, 21, -57, 53, -23, -56, 35, -56, -20, 76, 34, + -24, -26, -53, 34, 22, 22, -19, 14, -27, -10, -34, 6, 78, -41, -95, -125, 28, -1, -43, -66, 69, 6, -11, -33, -66, -73, 41, 9, -1, -19, 8, 11, + -9, 29, -16, 82, -71, -87, -21, 27, 19, -7, 33, 74, -44, 79, 19, -28, -7, -19, 112, 43, 0, 54, 3, -12, 44, -61, 90, 23, 26, 39, -49, -4, + -10, 41, -18, -25, 35, -48, -11, -42, -2, -21, -9, -112, -59, 8, -11, 4, -18, 37, -44, 113, 1, 58, -17, 27, -27, 73, -45, 72, -84, 31, -27, -42, + -15, -13, 63, 29, 21, 78, -14, -29, -8, -84, 18, 8, 18, 55, 78, -18, -27, 22, 62, -7, 26, -33, 39, -28, 41, -43, -48, 17, 21, 30, 89, -24, + -20, -10, 16, 69, 9, -13, 50, -16, -21, -69, -59, -4, 34, 54, 2, 12, 29, 31, -69, -7, -75, 49, 29, 64, 35, 11, 6, 48, 102, 80, 2, -51, + 81, 19, -2, 44, 49, -8, 37, -32, 17, 52, -8, -70, -40, -42, 51, 61, -32, -60, -6, 43, 12, -52, -26, -42, 39, 4, -15, 12, 26, -25, -29, -19, + -3, 26, 77, 57, -13, -33, -98, 42, 36, 7, -18, -19, -27, -18, 42, -64, 80, -47, 11, 49, 35, 4, 15, -53, -68, -89, 9, -55, 7, -36, -9, 68, + 34, 34, 45, -3, -27, -7, -26, 47, 90, 25, -16, -39, 9, 60, -58, 14, 27, 38, 19, -11, -64, 99, 44, 116, 56, -14, -7, 19, -29, 8, -12, 18, + -37, -25, -10, 93, 24, -46, 50, -62, 16, 34, -33, 127, -70, -37, 19, -41, -37, -127, 16, -12, 66, -23, 89, -18, 41, -28, -5, -18, 54, 71, 14, 58, + -24, -21, 39, -84, -95, 90, 35, 58, -2, -21, 32, -5, -13, 80, -1, 42, 49, 44, -127, -14, 27, 38, 58, 26, 39, -17, -58, 59, -51, 17, -9, -23, + 11, 15, -56, -34, -60, 56, 22, -7, -89, -41, 18, 50, 48, 27, -9, 84, -30, 1, 19, -26, 21, 20, -4, 40, -30, 11, 23, -66, -6, 94, -28, -55, + -28, -4, -31, 80, 86, 19, -23, 43, 54, -26, -29, -11, -27, 56, 1, -74, -6, -3, 44, 30, 2, -65, 53, 2, -24, -15, -28, 36, -30, -3, -5, -14, + -120, -6, -11, 2, -4, 77, -37, 2, -31, -27, -1, -46, -9, 34, 34, 44, 22, -23, 39, -34, 19, 27, 2, 20, 17, -20, 0, -16, -54, 32, -59, 20, + 26, -38, 20, -3, 47, 5, -21, -30, 55, -85, 30, -20, 68, 8, 13, -66, 2, -17, -9, -20, 48, -28, 82, -8, 40, -30, 2, -25, -16, 51, -10, 21, + 31, -5, -20, -40, -57, 127, -38, 17, 9, -66, 66, 112, -29, 60, -13, -20, 43, -3, -93, 77, 46, 24, 0, -37, -38, -40, 19, 24, 25, 27, -52, -13, + -15, -19, -34, 49, -39, -20, -5, -45, 6, 26, -4, -19, -59, 41, 2, 45, -56, -78, 30, 13, 2, 27, -7, -52, 22, -2, 1, -60, 9, -57, 4, -84, + -18, 11, -16, -106, 30, 9, -50, -6, -33, 32, 19, -33, -22, 25, 43, -1, -22, 107, -113, 61, 47, 21, 26, -50, 26, -44, -4, -11, 16, -26, 1, -61, + -49, 49, 57, -19, -23, -25, 6, -39, 77, -42, -68, -17, 22, -15, -1, 52, 21, -29, -1, -29, 27, -46, 19, 81, 40, -46, -59, -44, 19, 38, -26, -40, + -9, -10, 89, 26, -56, 14, 15, -9, -83, 28, -48, -65, 60, -49, 11, 74, 34, 0, -33, -15, -9, -6, 16, -5, -14, -41, 3, 9, 54, -15, -8, -26, + 20, -77, 46, 9, -19, 113, -42, -16, 23, 82, 109, 15, -105, 30, -32, 9, 36, 31, 111, -14, 31, -48, 19, 65, -68, -13, 8, 58, -86, -65, -18, 65, + -37, -56, -37, 18, -15, 7, 73, 27, -127, -2, 11, 88, 14, 4, -72, -74, 55, -16, -86, -12, -24, 50, 4, 58, 6, 43, 5, -16, 3, 25, 16, 20, + -8, 51, -59, 77, -53, -20, -1, -2, -24, -93, 10, 65, -59, 6, -73, -45, -45, -5, -53, 46, 107, 72, 4, 9, 114, -25, 20, 16, -111, -26, 30, -28, + -106, -36, 59, -28, 67, -46, -30, 7, -18, 15, 51, 106, -114, 16, 26, 20, 11, -89, 99, 106, 14, 49, 16, 19, 42, -43, -14, -79, -15, 49, -49, -80, + -45, 63, 6, -25, -26, 10, -48, 54, -56, -15, 65, -83, -16, 68, -38, 70, 83, 100, -76, 43, -48, 52, -50, -5, -31, 47, 34, 60, 21, -32, 1, 12, + 7, 0, -50, 60, -22, -97, -15, 19, 16, -15, 1, -2, -59, 24, -53, 64, -10, 24, -1, -12, -22, -13, -2, -44, -6, -13, -59, -16, -38, -25, -14, 61, + -10, 127, -97, 30, 84, -76, -38, -62, -3, -75, -89, -13, 10, 31, 38, -11, 0, -60, 30, 17, 47, -32, -19, 33, -8, -69, 31, -24, 66, 37, -15, -51, + -59, 8, -3, 6, -25, -8, -36, -20, -21, -47, -58, -16, -5, -22, -48, 29, 10, -2, -34, -8, -48, -41, 8, -25, 37, -44, 26, -7, 44, -34, 3, 16, + -10, 2, -3, 0, -20, -20, -19, -20, 91, 8, -43, 27, -37, 60, 1, -23, -40, -61, -56, -39, 37, -16, 4, -4, -7, -52, 14, -3, -13, -104, 25, 17, + -17, -19, -16, 26, -21, -22, 12, -24, -45, -14, 21, 27, -21, -62, 26, 32, 36, -27, -70, -7, -72, -70, -21, 52, 33, -28, -1, -19, -68, -6, -13, 0, + 15, 28, 42, -29, -7, 27, -18, -1, -33, 1, 15, -7, 7, -23, 3, -127, 44, -70, 29, -22, -9, 8, 1, 32, -20, 3, 32, -71, 2, 17, -2, 3, + 41, 6, 0, -48, -3, 9, 9, 21, 31, -17, -12, -24, -46, -21, 6, -39, 5, -3, -39, -28, -22, -8, 3, 27, -2, -5, -24, 13, 9, 83, 33, 25, + 15, -12, -12, 0, -10, -10, -12, 45, -7, 26, 16, 40, -12, 15, 7, 19, 24, 19, 9, -2, 2, 16, 17, 3, 30, 3, 9, -34, 1, -5, -31, 67, + 36, 20, 17, 32, -10, -1, 54, 0, 0, 16, -55, 30, -31, 14, 4, -19, -32, -1, 42, 45, -46, -18, 3, 6, -54, -27, -71, 20, 7, 8, -9, -5, + -13, -27, -4, 16, -31, -13, -71, -13, -27, -3, -24, 14, 24, -8, -5, 5, -44, 26, -18, -12, -29, 15, -53, -21, 18, 24, -36, 4, -31, -8, 32, 15, + -25, 44, 1, -33, -19, 64, 23, 18, 69, 49, 58, 99, -5, 49, -54, -19, -48, 12, 11, -20, 33, 43, -41, -34, 6, 3, -41, -19, 2, 9, -2, -27, + -57, 6, -9, 47, -22, 24, 62, 3, -42, 4, -10, 79, 9, -18, -48, -11, 24, -37, -4, -48, 52, 5, 42, -34, -127, -58, -19, -19, 2, 59, 41, -51, + 60, 48, -17, 45, -19, -72, 28, 51, -6, -25, 44, 31, -45, -61, -20, -10, -51, 14, 35, 1, 16, 8, 8, 45, 3, -109, -7, 4, -125, 31, 28, -5, + 29, 17, 56, 17, -26, -42, 68, -45, 27, -20, 17, -87, -62, -68, -29, 59, 40, 18, 32, 26, -2, 63, 22, 6, 18, -22, -59, -81, 44, 10, -30, -40, + 29, 16, -9, -9, 14, -38, 26, 13, -15, 15, -4, -39, 4, 59, 3, -6, 26, -25, 36, -4, 11, -6, -17, 25, 1, -43, 60, -6, 8, -39, -10, -38, + -60, -69, -20, 29, 11, -9, -42, 43, -36, -34, -55, -52, -70, 7, 19, 9, 30, 15, -27, -31, 59, 37, -14, 67, -54, 57, 29, -46, 42, 27, -11, 32, + 3, -21, -71, -47, 22, -45, 18, 6, 54, -65, 9, -22, 3, -70, -8, 19, -20, 44, 2, 8, -80, 17, -21, -40, 63, 15, -27, 105, 2, -51, 11, -39, + 50, 4, -30, -5, -49, 5, -35, 66, -51, -35, 50, 19, 10, 22, 10, -68, -103, 68, 48, -24, 42, 71, 31, -27, 45, 24, 59, -53, -127, 0, -19, 40, + 66, -16, 42, -42, -2, 51, 92, -45, 17, 68, -21, 35, 1, -27, -38, -23, 42, 32, 76, 65, 37, 17, 18, 49, 2, 31, 58, 9, 18, 17, -68, -31, + -57, -27, -29, 16, -25, 43, -25, -52, -8, -17, -21, -16, -28, 80, 5, 3, -65, 46, -52, 41, -56, 43, -55, 13, -25, -37, 1, 38, -60, -63, -27, 16, + -9, 46, 3, -54, -29, 76, -10, -36, 60, 32, 76, 68, 64, 43, 40, -18, 86, -2, 37, -43, 49, -30, 1, -13, 3, 48, -23, -33, -20, 85, 12, 33, + 20, 40, 76, -33, -43, 48, 109, 68, -21, -53, 33, -6, -79, 43, 8, -4, -25, -5, -53, -82, 11, -22, -55, -32, -73, -75, 56, -111, 67, 45, -31, 35, + -22, -12, -7, 60, 6, 47, -25, 7, -61, -85, -33, 1, 34, -45, -58, -2, 22, -31, 41, 76, 64, 43, 5, 1, 76, -74, 40, -40, 66, -34, -51, -59, + -69, 45, 3, -41, -23, 4, -122, -68, 68, 16, 33, -54, -56, 25, -4, 27, 9, -3, -11, 45, 69, -7, 9, -3, 7, -2, -2, -44, -46, -34, 20, -33, + -8, 1, 28, 78, -64, -78, -3, 35, -99, 26, -48, 57, 28, -30, 2, -3, -19, 0, -6, -50, 23, -45, 101, -66, 40, -46, 26, 17, 34, -8, 127, 5, + -37, -62, 2, -5, -2, -56, 7, 1, -40, 12, -36, -4, 66, -2, 1, 17, -51, -54, -72, -3, 5, 7, 6, 12, -47, 39, -18, 41, 61, 64, 41, 1, + 33, 15, -79, 35, 32, -15, 29, 0, 44, -5, -127, -24, 40, -57, 39, 103, -21, 49, 28, 18, -2, -35, -36, -29, 75, 70, 1, 33, -16, -24, 53, -70, + 85, 9, -44, 32, -113, -30, -33, 65, 2, 6, 51, 41, -39, -30, 77, -79, 12, 52, 89, -26, 29, 12, 13, -13, -11, -17, 0, -45, 2, 21, -44, 95, + 51, 33, 31, 12, -38, 8, 56, -19, 30, 71, -58, 45, -29, -17, -75, 61, 34, 34, 45, 28, 30, 31, 40, 76, -67, 8, 44, -38, -13, -13, -86, -47, + -45, -28, -45, 13, 18, 69, 8, -38, -74, 0, -36, -17, -24, 15, 6, -46, -44, -32, 41, -20, -9, 11, -19, -25, 31, -24, -16, 14, -53, 42, 2, 5, + -14, -71, 6, -113, -49, 33, -12, 27, -27, -27, 15, 57, -49, -17, 16, -109, 4, -15, 11, 42, 62, 21, -24, 18, -39, 43, 23, -11, -46, 15, -1, -61, + 6, 8, -27, -31, -20, -23, 13, -39, 83, 8, 23, -40, -57, -113, -14, 78, -50, 3, -75, 17, -48, 4, -53, -12, 73, 33, 31, 113, -8, -36, 11, -19, + -34, -11, 14, -23, -13, 39, -49, 52, -48, 17, 62, 30, 41, 46, 15, -108, -48, 53, -70, 30, 33, -8, 39, -63, 9, 95, -12, 76, -7, 15, 2, -23, + -42, 2, 53, -36, -32, -5, -1, 16, 61, 27, -64, 127, 18, 15, -1, -12, 19, 89, 16, 32, -55, 11, 35, 26, -100, -33, -12, 99, 42, 59, 2, 37, + 48, -2, -69, -42, 45, -38, -37, -65, 38, 31, -16, 18, 59, 52, 14, 47, -28, 31, -2, -10, -43, 13, -19, -26, 23, 49, 17, 49, -11, -1, -91, -27, + -16, 59, -54, -57, 1, -59, -85, -27, 27, -18, -14, 21, 54, -60, 44, -51, 17, 5, 85, 19, -14, 48, -62, -74, -95, -13, -46, -57, 87, 23, 32, 74, + 40, 27, 102, 84, -11, -18, 25, -24, 30, -22, -17, 57, -61, -8, -9, -58, 28, 29, 12, 3, -72, -36, 19, -17, 37, 4, 5, 35, 75, -71, -26, 18, + -74, 39, -77, 51, 52, 80, 68, 5, -61, 17, 11, -20, -16, -50, 53, -69, 94, 18, -66, 42, 1, -3, -56, -25, -28, 57, -81, 34, -12, 17, -27, 16, + -18, -19, -25, 102, 38, -21, 14, -39, -68, -58, -22, 81, 3, -47, 21, -25, 96, 29, -80, 22, -64, -98, 88, -58, 51, -41, -19, -2, 49, 22, 78, 52, + -27, 44, -25, 51, -67, -37, 68, -6, -15, 92, -18, 65, 50, 7, -78, -31, -98, 127, 11, 21, -88, 42, -25, 96, -21, -29, 66, 4, -38, -16, 98, -8, + -20, -44, 110, 61, 89, 14, -80, -10, -34, 28, 10, 36, 127, -48, -27, 55, -30, -82, 8, -29, -9, -16, 10, 70, 17, -7, -45, -25, 45, 41, -39, 75, + -63, 67, -13, 70, 55, 14, -8, 46, 39, 57, 37, 64, -15, -35, -40, 99, -77, -7, 6, 34, -33, -57, 86, -36, -35, 18, -64, 5, -28, 38, 54, 40, + -68, -81, 10, 46, 84, 11, 46, 22, -63, -8, -18, 10, -60, 14, 28, 9, -5, -67, 3, 34, 18, -12, 35, 15, -2, 35, -9, 11, 22, -86, 93, 54, + -11, -35, 17, 21, 10, 28, 66, -108, -4, 91, -64, 43, 38, -56, -68, -40, -49, 35, 48, -8, 10, -54, -13, -62, 11, -49, 24, -51, -7, -64, -20, 17, + -27, -44, -1, -77, -12, -36, -76, 4, -84, 40, -16, -71, 76, 12, 41, -58, 11, 18, -10, 6, 0, 43, -74, -48, -20, -77, 18, -38, -103, -9, 16, 46, + -41, -56, -2, 50, 124, -17, -91, 62, -74, 30, -65, -20, -27, 58, 28, -41, 14, 72, -42, -32, 13, 45, -28, 13, -9, 7, -38, 1, -11, 11, 38, 96, + -1, 2, -2, -37, 31, -48, 29, -29, -23, -34, -69, -25, -21, 20, -11, -29, -4, 106, 7, 22, -17, 45, -44, -68, -41, -6, -30, -15, -33, -30, -15, -81, + 36, -31, -55, -39, 8, -3, -65, -13, -10, -17, -38, 25, -8, 30, 28, 13, 25, 80, 42, -14, -13, 19, 35, -111, -89, 127, -38, -56, -21, -19, 5, 16, + 59, 0, -18, 28, 46, 69, 42, -36, -10, 67, -123, 41, 33, -25, -22, -17, -79, -1, 104, -1, 18, -63, 9, -46, -7, 11, -44, 56, -14, -46, 74, -3, + -8, 10, -47, 87, -110, 104, -25, 10, -33, -21, -23, -31, -57, -22, -108, 12, 29, 4, -7, -1, 48, 12, 46, -9, -43, -30, 14, -57, -53, -23, 84, 76, + 25, 59, 20, -46, -42, 46, -22, -8, 25, 79, 4, -32, -61, -8, -42, -57, 35, -9, 0, 4, 22, 31, 36, -29, -25, 32, 25, -30, -32, 53, 20, 42, + -25, -10, -49, -23, -28, 3, 15, -21, -17, 0, -31, -6, -27, -5, -11, -25, -19, 45, 11, -21, 18, 39, -31, 48, -49, 17, 10, -44, 43, 23, 49, -33, + -8, -55, 12, -60, -30, -42, -11, -2, -26, 40, -65, 22, -44, 48, -8, -127, -6, 19, -3, 9, 34, -14, -13, -2, 16, 26, 21, 39, -31, 14, -37, 12, + 18, -9, -29, -8, -28, -74, 12, 42, -59, 17, 4, 83, 50, -52, 30, -6, 15, -2, 24, -2, -29, -7, 21, 8, -4, 2, -34, 59, 36, -23, 50, 12, + 14, -21, -3, 29, -14, -69, -49, -13, 10, 2, -26, -6, -6, 2, 35, -23, -19, -5, -44, 7, -62, 22, -37, -16, 3, 56, 23, 28, -37, -18, -7, -65, + -55, 12, -20, 27, -65, 92, -13, 73, -11, -71, 74, 101, 15, 66, -4, -2, 43, -100, -69, -12, 15, -36, 6, -60, -44, -11, 22, -9, -30, 49, 55, -33, + -24, -19, 34, 4, -51, -13, 37, 6, -17, -77, -17, 33, -51, -21, -37, 29, -105, -51, -34, -4, 26, 43, 4, -78, 9, -4, 20, 33, 2, -1, 86, -76, + -2, 1, -7, 21, 4, 23, 17, 52, -9, -29, -9, 45, -74, 46, 28, 13, -38, 56, 56, 45, 22, 25, 35, -52, -57, -15, -8, 5, 40, -127, 45, -16, + 1, 55, 36, -49, -18, -13, 31, -34, 45, 16, -53, -36, 57, -8, 28, 48, -63, 13, 27, 7, 67, 28, -15, 55, 7, -18, -19, -24, -44, -11, 15, -46, + -33, -63, 32, 43, -75, -24, -84, 20, -11, -41, -38, -33, 58, 8, 13, 4, 23, -3, -63, -24, 46, 7, 33, -68, 21, -4, 1, -2, -18, -27, -2, 60, + 4, -33, -56, -43, 38, 57, 32, -9, -67, 47, 2, 32, 11, 9, -58, -8, 52, -5, 37, 14, -20, 13, 11, 24, 4, 4, -112, 6, 83, 40, 51, 81, + 44, 1, -61, 33, 34, -17, -14, -31, 69, 6, -78, -27, -69, 21, 27, -25, 7, 14, -21, 8, 42, -37, -59, 33, 3, -55, -88, -65, 4, -55, 57, -70, + 13, -24, -90, -21, -25, 22, -52, 55, -2, 80, 0, -17, -78, -22, 45, -46, 127, -60, -35, 30, 99, 74, 16, 17, 71, 60, -47, 33, -22, 50, -58, 6, + -10, 20, -8, 30, -2, 49, 17, 27, 41, -13, -24, -41, -85, 7, -41, 27, 42, -51, 99, -52, -14, 6, 43, 49, -48, -52, -3, -13, 23, -8, -72, -17, + 25, 49, 63, -51, 84, 7, -25, -84, -55, 44, -20, 11, -16, 16, -34, 32, 15, -34, 23, 25, -53, -10, 8, -26, 48, -95, -4, 12, -30, 89, 47, 23, + -63, -59, 96, 1, -80, -37, 45, 115, -38, -31, -48, -127, -34, 23, -31, -24, 0, 21, -2, 47, 10, -29, 45, 22, 39, 6, 6, -2, -120, -96, 3, -45, + -45, -67, -11, 4, 79, 31, 57, 37, 71, 65, -37, 63, 70, -94, -28, 19, 34, 34, -63, -25, 16, 40, -11, -69, -54, -5, 15, 47, -86, -36, -58, 47, + -8, 81, 51, -14, -20, 10, 41, 75, 84, -17, -37, -8, 20, 42, -5, -39, -14, -71, 17, -23, 49, -6, -26, 12, 9, 18, 70, -39, -16, 28, 14, -21, + -49, -40, 125, -34, 106, 20, 28, -28, -97, 23, 25, 4, -4, -35, 7, -20, 29, -5, 8, 38, 1, 48, 11, -6, 88, 82, 37, 42, -51, 8, -65, -88, + 45, -4, 45, -49, 37, 71, -10, 30, 58, -62, 1, -1, -55, 10, 53, 8, 23, -50, -25, 60, 95, 17, -29, 75, -20, -90, -105, 5, 91, 23, 2, -9, + -18, -31, -51, -19, 76, -20, -46, -14, 18, 9, 14, -26, -13, -45, 15, 71, -34, -83, -37, 35, 27, 16, -16, -11, -37, 14, -3, -23, 22, 29, 36, 19, + -1, -12, -23, 45, -11, -5, 77, 32, 57, -28, -8, 14, 34, -21, -24, -51, -72, 54, 6, 34, -59, 0, 4, -33, -1, 14, -17, 41, -23, -57, 82, -65, + 51, -59, -28, -47, -73, 19, -4, 34, -15, -34, -12, 13, -73, 20, 8, -65, -60, 73, 25, 15, -21, 51, -4, -43, -42, 60, 41, 21, -46, -15, -36, 3, + 127, 52, 10, 32, 0, 35, 11, 24, -30, 41, -59, 13, -38, -66, -12, 10, 36, 86, 47, 43, 89, -13, 20, 2, -50, -65, 39, 88, 3, -40, 17, -47, + 9, 4, -24, 10, 22, 55, -9, -18, -66, -23, 1, -27, 38, 36, 45, -47, -89, 18, 34, -30, 26, 82, -70, -66, 17, 53, 74, -10, -72, -16, 6, 12, + 47, 31, -40, -36, -15, 35, 24, 50, 14, -7, -9, 109, 71, -96, 18, 73, 37, -30, -9, 0, 31, -6, 8, -107, 58, -1, -12, -27, 86, 58, 54, 62, + 34, 12, 16, 7, 9, 14, 26, 29, -54, 5, 5, -78, -63, -57, -21, 22, 0, -42, 17, -47, 10, 37, 90, 29, 17, 8, 19, -8, 63, 24, 90, -5, + 12, -12, -54, -6, 35, 65, 13, -10, -80, 32, -88, 15, -39, 45, 72, -41, -9, -1, -44, 59, 37, -127, 7, 36, 80, 23, -17, 38, -7, 32, 13, 26, + 58, 74, -16, 34, -68, -4, 42, 2, 78, 19, -20, -48, -58, -17, 33, 40, 26, 6, -35, -30, 49, 5, 43, -6, -79, -34, 64, 23, 67, -17, -31, -75, + 45, 27, -52, 15, 24, 24, -32, 7, -103, 68, 7, 31, 34, 35, -30, -74, -34, 63, 8, -34, -3, 41, 19, -45, 106, 9, 9, 14, -105, 42, -84, -22, + -82, 1, -16, -59, 11, 90, -14, 5, 18, 71, -40, 57, -15, -64, -43, -124, 56, 22, 2, 17, -32, -11, 11, 53, 0, -50, 97, -20, 67, -32, 3, 25, + 80, 30, 8, 12, -23, -41, 54, -39, 10, -75, 54, -45, -64, -38, 11, -13, -22, -37, -20, -25, -12, 28, 31, -15, 26, -44, 22, -13, -27, 19, -52, 30, + -69, -47, 11, 24, 64, -9, -26, -57, -31, 40, -16, 55, -37, 11, 17, 95, 35, 19, -63, 49, 21, -26, 4, -15, 48, -76, 1, 33, 4, -17, 5, -46, + -40, -10, 68, 3, -25, -19, -19, 12, -12, 37, -8, -68, -32, 14, -8, 1, -41, 28, -42, -29, 15, -12, 25, -7, 21, 70, -127, 71, -39, 47, 14, 60, + 26, 37, -7, -37, 6, 43, 33, -28, 21, 28, -23, -21, 93, -1, -17, -26, -72, 32, -15, -9, -36, 3, 17, -2, 36, -3, -22, -19, 9, 7, 5, 15, + 33, -33, -4, 91, -15, 20, 27, 3, -108, -28, -56, -59, -52, 95, -50, -85, -2, 62, 24, 74, -106, 36, 8, 82, 62, 81, 21, 40, -19, 8, -108, -23, + 71, 47, -18, -41, 40, -53, 114, -64, 4, -49, -4, -127, -68, -21, 13, 7, 46, 52, 7, 68, 1, 40, -35, 43, 67, 13, -3, 51, 35, -4, 91, 10, + 13, -32, 0, 0, 62, -46, -5, 68, 57, -83, -52, 23, 46, -51, 14, 0, -26, -56, -4, -22, 43, 8, 24, 2, -24, -94, 39, -8, -9, 44, -31, 85, + -53, 31, 61, -96, -65, -59, 75, -3, 47, 71, 29, 31, 2, 85, 14, -21, -59, 77, 102, -62, -39, 89, -41, 40, -53, -11, -46, -26, -42, 7, -15, 81, + 39, -14, 33, 18, 10, -19, 0, -10, -39, 20, 22, 97, 40, -59, -12, -23, -33, -57, -6, 24, 91, -50, 28, 10, -12, -31, -56, -31, 73, 8, 52, 22, + -89, -33, -48, 11, -99, -48, 62, -13, -70, 18, 12, -65, -6, 58, -7, 20, -22, -4, -44, 21, 0, 7, 15, -97, 15, -19, 40, 9, 68, -19, -15, -101, + -8, -3, 27, -75, 0, -13, 75, -17, -45, -21, 16, -25, 11, 31, -12, -91, -37, 34, -12, 42, 21, 2, -32, -103, -91, 23, 13, -19, 8, -53, -51, -19, + 27, -19, 37, 1, -8, -34, -78, 3, 43, -62, -1, -11, -34, 63, 14, -47, -22, 82, 73, 21, 20, -94, -21, -22, -39, -106, 9, -41, 21, 16, -44, -23, + 80, 34, 7, -18, 23, -14, -25, 29, 36, 12, -39, -65, 26, -8, -69, -127, 27, 89, 5, 22, -23, 102, 12, 11, -8, -5, -68, 86, -96, 30, -22, 49, + -21, -21, -27, 19, 66, 3, -41, -32, 57, 1, 8, 57, -23, -18, 52, -41, 13, -41, 80, -8, 31, 48, 81, -29, 39, -28, -16, -2, 56, 42, 11, -6, + -25, 38, 60, -26, -39, 28, -5, 27, -37, 16, -13, -10, -28, -18, -1, -8, 45, 33, 49, -24, 13, 29, 43, 11, 41, 52, -37, 24, -50, -9, -23, -25, + -30, 28, 73, -40, -29, 68, 37, -6, -23, -6, 25, 44, 7, 3, 10, 127, 3, -45, -1, -12, 23, 23, 21, -5, -18, 26, 17, -47, 9, 76, -2, 51, + -49, 13, -22, 104, 11, 21, 8, 24, 22, 3, 6, 17, -15, 0, -69, -46, -2, -6, 14, -7, 25, -17, -21, 28, -11, 16, 10, -26, 77, 5, 56, -35, + -97, 14, 26, -36, -20, 19, -35, 72, -35, -4, -6, 42, -1, -5, 61, -13, 7, -65, 13, 29, 11, -11, -13, -61, -1, -31, -11, -53, 3, -43, -9, -57, + 22, -4, -22, -47, 29, -36, -58, 81, 49, 3, -29, -21, 41, -14, 7, -37, -2, 42, -9, -39, 23, -23, -26, 16, -1, 9, 22, 36, -35, -35, 6, 25, + -5, -33, 98, -41, -60, -32, 24, 41, 43, -22, 56, 39, 45, -22, -13, -48, 19, -45, 24, -49, 59, 35, 18, -91, 38, 14, 63, -68, -40, -14, -21, -56, + 4, 24, 7, 23, -8, 52, 18, 15, -36, 15, 9, -1, 60, -9, -16, -5, 20, 23, 13, -39, 34, 28, -15, -10, -106, 34, -13, -34, -47, 49, 4, -7, + 66, 34, 35, 27, 27, -127, -2, 39, 27, -66, 27, 66, -34, -5, 6, 39, -35, 48, 69, 70, -22, -3, 33, 13, -2, -97, 21, 32, -95, 10, -13, -14, + 32, -30, 75, -26, 5, -88, 10, -35, -89, -12, 42, -22, -82, -54, -13, 21, 1, 9, -65, 61, 28, 88, 23, 2, -49, 19, -34, -26, -91, -25, -6, -20, + -9, 13, -3, -48, 24, -12, 70, -19, -2, -21, 45, -32, 13, -5, 45, -17, 50, -12, 53, 17, 34, -46, -64, 20, 35, 0, -23, 29, 0, -27, -14, -26, + -41, 10, -3, 67, -8, 69, -43, 9, 55, 33, 15, -44, 34, -52, -14, -15, 91, 2, 28, -10, -5, 85, 28, -9, -24, 35, 99, -89, 7, 36, -28, 38, + -34, 87, 82, -9, -2, -35, 38, -13, -18, -11, 58, 14, -63, -39, 1, 23, -12, -16, -14, -37, -20, 2, -70, -17, -117, 61, 1, 32, -6, 90, -67, 7, + -29, 25, 13, -7, 2, -25, -41, 2, -32, -54, -54, 14, 74, -34, -29, 31, -34, -20, 19, 42, -12, -34, 108, 18, 15, -4, -66, 12, -17, 33, -65, -28, + 65, -6, -23, -90, -42, 43, -127, 44, 76, 97, -81, 31, 33, 70, 4, -75, -6, 16, -24, -66, 21, 33, 51, 21, -36, -1, -62, 10, -91, -56, 98, 34, + -71, -32, -57, 71, -43, -75, -41, -46, 113, -18, -29, 27, 10, 78, -32, -114, -47, -63, 32, -20, -23, 24, -28, -31, -7, 79, -24, -69, -62, 26, -21, 23, + -71, -29, 9, -10, -34, 55, -33, 8, -16, -94, 57, 1, 11, 1, -18, -28, 19, 29, -28, 56, 33, 25, -35, -10, -26, -5, -23, 9, 17, 8, -40, -60, + 14, 34, -34, 29, -3, -56, 11, -81, 3, 72, -10, 12, -19, -42, 12, 127, -3, -14, -26, 49, -10, 3, -59, -56, 24, 18, 1, 28, -6, 17, 71, -27, + -19, -2, -37, -24, -6, 28, 19, 13, -8, 22, 27, -12, -3, -34, 43, -80, -3, 82, -37, 4, 46, -14, 6, -84, 31, 7, -11, -32, 34, 3, -23, -45, + -67, -2, 14, -10, 3, -39, -89, 11, 52, -1, -40, 104, 39, 46, -8, 7, 37, -37, -27, -1, -2, -22, -1, 10, -1, -25, 6, 9, -8, 59, -33, 5, + -47, 48, 20, -19, -26, -39, 5, -27, -42, 15, 11, 30, 12, -1, -21, 54, 8, 3, -14, -19, 17, -23, -46, 9, -30, -67, 36, -18, -8, 11, -53, -12, + -23, -23, 75, -46, 38, 44, -34, 6, -29, 26, 11, 33, 14, 56, 28, -6, -1, -109, 81, 1, 9, 16, -16, 23, -48, -28, -13, 17, 1, -35, -49, 34, + -35, 14, -38, 34, 0, -51, 83, -21, 8, -98, 89, -22, -6, 39, -33, -6, 40, -53, -57, -77, -82, 22, -32, -17, -39, -78, -21, 51, -6, 8, -22, 14, + -3, 63, -13, -14, 2, -79, 40, -1, -23, -31, 5, 39, -10, -32, -16, 53, 68, -14, -31, 28, 26, -4, -27, 52, 87, -24, -13, -38, -47, -59, -1, 56, + -22, 39, 5, -51, -25, -112, 15, -60, 12, 31, 20, -26, 32, 36, -61, 12, -127, 1, 27, 73, -29, -21, -9, -39, 32, -22, -29, -64, 45, 13, -5, -2, + 17, -91, 40, -74, -67, 29, -25, 10, -13, -25, 0, -72, -17, -10, -18, 36, 26, 50, -59, 9, -56, 20, -57, 7, 27, -49, 68, 44, -1, -36, 37, 59, + -26, -66, 19, 3, -45, -43, -38, -7, 0, 69, 102, -29, -36, 14, -68, -12, -20, -12, -40, 4, 6, 67, -3, -4, -57, 65, 10, 22, -72, 25, 23, 67, + -10, 27, -2, 37, 36, -13, -1, 28, 11, -2, -19, 33, 17, 113, -15, 20, 35, 4, 7, -26, 25, -23, -45, -44, -46, -36, -26, -17, -42, 69, 2, 32, + 0, 25, -34, -3, -52, -97, 12, 43, 32, -61, 26, 41, -87, -42, -12, -20, -3, -111, 2, -5, -24, 46, 30, -19, 13, 1, -8, -21, 42, -36, -70, -27, + -4, 7, 61, 64, 31, -56, -45, 27, -17, 40, -3, -53, -38, -71, -57, 3, 43, -34, 15, 63, 12, 38, -13, -39, -23, 13, -40, 8, -60, 17, -10, 7, + -23, -15, 75, -30, -37, 2, -4, 17, 22, -26, 50, -20, -18, 2, 4, -33, -10, -9, 74, 12, -11, 20, -7, -51, -9, 30, 26, 14, 26, 6, 127, -68, + -26, -45, -42, -26, 77, -7, -56, -8, -34, -27, 19, -38, -5, -41, 31, -26, 19, -4, -11, 54, -33, 64, 4, 71, -32, -11, -88, -44, 51, 21, -15, 94, + -47, 93, -51, -68, 38, -50, 10, 45, 127, -18, -19, -25, -28, 19, 2, 43, 12, 39, -1, 65, -22, -22, -93, -46, -23, -4, -24, 99, -15, -17, 63, -6, + -61, -28, 2, 42, -46, -3, -4, 6, -41, -43, 59, -12, -35, -58, 9, 5, -51, -41, -68, -26, 18, 120, -51, -1, 47, 72, -7, 3, 22, -18, -37, 16, + 41, -62, 45, -10, 22, -72, 70, -33, 34, 48, -57, 84, 47, -68, -46, -16, 10, 34, 84, 40, 22, -65, -19, -42, -15, 27, -23, 2, -18, -13, -27, 15, + -73, -53, 55, -70, -102, -76, -3, -45, -4, 30, -38, -40, 47, 15, -32, -5, -67, 13, -68, 24, -37, 51, -110, -11, -1, -63, 16, -13, -4, -16, 77, 11, + 45, -11, 9, 32, 53, -24, 17, 39, -6, -51, 9, 44, 31, -30, 27, 77, 25, -30, 23, -4, 91, -4, -43, -40, 0, 24, -4, 12, 8, 34, -24, 26, + -6, -1, -4, -32, -3, -9, -25, 10, 15, -61, -59, 22, 19, 44, 15, -1, 28, 27, 21, 12, 3, -43, 52, 35, -76, 14, 27, -49, 19, 24, 86, -5, + -9, -10, -107, -18, 41, 54, 50, -2, -22, -33, -103, 5, 23, 12, 13, 49, -33, 23, -11, 43, 17, -75, 23, 17, 16, 41, -14, -60, -49, -9, 61, 4, + 22, -85, -32, -21, 23, 18, -12, 57, 21, 21, -29, -8, 50, -12, 7, 54, 47, -51, 5, -61, 31, 1, 20, -43, 42, -41, 9, 3, -9, -51, 22, -113, + -26, -17, -18, -12, -5, -13, -15, 10, -83, 41, 13, 3, 28, 49, 11, 22, 75, -31, 6, -23, -127, 77, 5, -36, -17, -59, 56, -9, -50, 69, -60, 60, + 45, 27, -64, 33, 44, -1, -14, 44, -29, -3, -78, -4, 34, -61, 49, 37, -15, 14, -38, -9, 36, 53, -20, 16, 18, 16, -55, 6, 104, 39, -2, 36, + 127, 57, -5, 27, 40, 5, -7, 10, 36, -66, 20, -58, -61, -11, 21, 14, -39, -22, 16, -23, 13, -35, 25, -5, -16, 12, 16, -17, 59, 44, 21, -11, + -24, -6, -44, -24, 24, 59, -32, -32, 5, 52, -102, 21, -14, -10, 78, -38, 30, -21, -26, 22, 22, -76, 56, 1, -37, -6, -19, -34, -52, -3, 3, 70, + 29, 43, 21, 27, -7, 20, -2, 59, 57, 52, -9, -29, 80, 43, 33, 51, 23, -1, 29, -77, 5, -8, 69, -13, -53, -57, 26, 5, 34, -32, 64, -10, + -3, 19, -48, 64, -13, 13, -30, -64, -45, 38, -27, 97, -26, -2, -4, -42, 14, -57, -43, 6, -33, 1, 37, 5, 100, 1, 35, 0, -52, 53, -14, 10, + 51, -19, 7, -27, 42, 5, -48, 17, 29, 25, 16, 37, -7, -36, 29, 36, 114, -6, -27, -13, 103, 39, -29, 15, -23, 88, 10, -37, 71, 66, 20, -2, + -17, 42, 127, -20, -24, 11, 1, -25, 71, -126, 29, 12, -79, 101, -16, -80, -73, 14, 34, -76, 57, -28, -82, -53, -116, 31, 29, -35, 12, 2, -90, -19, + -34, -10, 28, 58, -124, 10, -46, 62, 18, -93, -10, 14, 71, -42, -21, 62, 15, -55, 37, 49, 85, -5, 25, 35, 19, 8, -29, -35, 104, -31, -78, 2, + 29, 52, 39, -24, -56, 56, -93, 6, -36, 64, -21, -53, 5, -54, 12, 14, -11, 9, -57, -39, 34, 57, 94, 8, -57, -61, 22, -79, -43, -89, 41, -51, + 12, 12, 86, -17, -21, -68, -21, -3, 4, -34, -38, -12, -3, 49, -30, -33, -59, -25, -27, 24, -43, 37, 72, -35, -22, -19, 45, 17, 38, 34, 108, 15, + -8, 76, -32, -46, -111, 66, 1, 11, 37, -50, 86, -14, -14, 41, 34, -32, 127, -57, -30, 0, -12, 5, 48, -30, 9, -7, 40, -87, 77, 8, 44, -24, + 23, -44, 47, 24, -31, -26, 8, 24, -53, -5, -41, -63, -112, 1, -24, -44, -22, -9, -13, -75, -33, 34, 23, -16, -26, -75, 8, 68, -27, -43, 7, -53, + 25, -40, -45, 20, -13, -7, 3, 28, 0, -9, -26, -76, -61, 102, -49, 43, -17, -72, 32, 62, -62, 79, 14, 22, -44, 9, -6, 2, 77, 37, -10, 16, + 107, -59, 25, -63, 26, 16, -48, -39, -47, -27, -34, -18, 41, 32, 14, 50, -106, 72, -14, -29, 69, -2, -26, 21, 55, 70, -76, 90, -13, 9, 37, 6, + -8, -79, 102, -2, -18, -55, -29, -3, 89, -28, -13, 6, 103, -61, 47, -29, -1, 65, 32, -65, 43, 30, 87, -28, -8, 49, 15, -13, -33, 27, -43, 73, + 54, 21, -52, -3, 12, 20, -31, 15, 36, 50, 49, 39, 18, -37, 5, 53, 11, -100, 8, -3, -34, -36, 51, 20, -27, 65, -90, -28, 35, -40, 63, -19, + -43, 11, 1, 57, 9, 3, 34, -22, 61, 2, 72, -1, -53, -24, 11, -25, -31, 13, 20, -11, -17, 5, 42, -46, 6, -45, 8, 30, 8, -69, 7, -6, + -29, -54, -72, 23, -57, 46, 57, -34, -48, -121, -28, -20, 38, 7, -48, -43, -93, -14, 17, -3, 1, 103, -82, -18, -44, 4, 3, -28, 35, 15, 52, -16, + 61, 4, -10, 78, -36, -41, 37, -29, -1, -13, 13, 32, 6, 37, -15, 49, -46, 20, -11, -31, 127, 45, -28, -31, -21, 14, 22, 25, -15, -21, 5, 18, + 15, 11, 32, -62, -18, 16, -15, 7, -66, -33, -31, -39, 54, -39, -37, -61, 16, -8, 12, -19, 11, 80, 3, -61, 14, -3, -59, 5, -56, -40, -19, 55, + -4, 13, -47, 67, -22, -19, 30, -31, 64, 4, 19, 18, 28, 13, -36, 46, -23, 10, -60, 0, 4, 37, -16, -69, 26, 38, 67, -69, 44, 49, 44, -57, + -48, 28, 43, -10, -6, -1, 45, 14, -14, -2, 60, -23, -50, 72, 39, -58, -38, -62, 33, 35, -58, -12, 38, -10, -47, 39, -88, -101, 72, -52, 63, -56, + 36, -40, -14, -59, -13, 13, -28, -15, 13, -62, -83, 15, -127, 23, -27, -26, -26, -40, 29, 84, 17, -50, 25, 25, -51, -7, -24, -15, 19, 9, -44, 26, + 91, 68, 10, 84, 14, -6, 32, -13, -14, 30, -27, -85, -10, -103, -50, -2, -21, 81, 52, 40, 12, 43, 4, -7, 21, -21, 1, 51, -2, -39, -30, -15, + 13, 9, 87, 31, 91, -102, 54, -6, -15, 47, 15, 1, 12, 7, 7, -10, 41, 7, 22, -55, 52, 58, -20, -15, -22, 0, 79, 22, -12, 34, 12, 33, + -39, 15, -60, 23, -8, 23, 19, 21, -27, -7, -8, 15, -17, -5, 26, 28, 22, -16, -33, 17, -44, 40, -3, -11, 34, -18, -18, -2, 107, 92, 62, -76, + 79, -10, 9, 27, 11, -82, 27, -70, -9, -48, 19, -64, -28, 41, 6, 52, -60, -22, 65, 27, -6, -44, 22, -52, -22, 51, 1, -26, 52, -56, 22, -9, + -55, -5, -12, 7, 25, 19, -48, -5, 8, 29, -43, -10, 27, 42, 85, -69, 61, -21, 36, 55, 11, -59, 19, -10, -91, 44, -60, 40, 5, -14, -16, 43, + -52, 38, 22, 33, -21, 29, -44, 58, 0, 28, -87, -7, 91, 48, 29, -21, -20, 15, 0, -57, -39, 38, 77, 52, 24, -29, 17, 18, -46, -36, 88, 40, + -68, 7, -79, 93, 27, -46, -26, -50, 88, 64, -31, 99, -8, 22, -19, -51, 7, -83, -2, -24, -47, 29, 117, -13, 127, 15, 11, 21, 20, -19, 1, 84, + -37, -41, 48, -73, -97, 102, 30, 21, -40, 18, 58, 19, -112, 58, -98, -55, 36, 31, -30, 95, 7, 51, -11, -43, 40, -6, -50, -36, 10, -24, -96, 3, + -46, -12, 32, 93, 61, 22, 32, 48, -33, 15, -113, 41, 37, -16, -15, 25, 43, 0, -35, 22, 95, 37, -61, -122, 69, -38, -50, 66, -47, -82, 22, 5, + -27, 71, -19, -35, -43, -100, 78, 28, 54, 127, 27, -112, -47, 35, 37, 70, 77, -18, -4, 5, 38, -6, 29, -118, 79, 25, 5, -27, -4, 29, -36, 8, + -82, -70, -24, -7, -45, -27, -32, 56, 55, 29, -37, -30, -105, 4, -9, -15, 25, -69, -71, 11, -65, 34, 82, 63, 17, 91, 0, 3, -7, 74, 19, -79, + -36, 75, 58, -104, 15, 33, 60, 57, 16, -29, 83, -81, -33, 86, 65, 41, 23, 40, 99, 33, -33, -22, -4, 59, -77, -27, 32, 45, 51, -1, -4, -33, + -32, 41, 1, -15, -35, -49, 57, 39, 11, 32, -29, -17, -68, -15, -25, 30, 69, 31, 66, 15, -95, 23, 69, 101, 53, 11, -47, 33, -9, -19, 24, -31, + -1, -11, 38, 9, 0, 66, 80, 42, -30, 20, 70, -59, -16, 46, -44, 16, -14, -13, 3, 12, 14, -18, 10, 30, 32, -68, 50, 65, -3, -127, 12, 64, + -39, 12, 72, 13, 36, 19, -63, 38, -12, 9, -47, 8, -3, 62, 31, -116, -23, -43, -4, 54, -78, 64, -2, -27, 38, 13, 72, 37, 27, -47, 74, -27, + -39, -20, 12, -20, 31, -25, -23, 53, -35, -35, 0, -14, -22, 3, 2, -52, 7, -7, 75, 36, 2, 20, 4, 29, 24, 9, -20, 40, -39, -45, 21, -37, + -5, 31, 67, -4, -43, 36, -11, 34, 46, -3, -16, -17, 20, -25, 67, 26, -36, -55, 40, -28, 55, -66, 11, 42, 17, 7, 24, 24, 13, 13, 38, 61, + 1, -11, 89, -50, -74, 17, 28, 43, -50, 18, 30, -13, 96, 7, -31, -11, 63, -14, -36, -48, 18, 9, 51, 21, -1, -9, -24, -36, 46, -17, 1, 52, + 6, 35, 45, 0, 22, -4, -28, 25, 6, 25, -65, 2, 39, -4, -49, -11, 12, -53, 9, -44, 36, 7, -5, -17, -127, -17, 9, -63, -20, 87, -8, 12, + 14, 52, -27, 30, -24, -78, -34, 9, 6, 2, 69, 44, -65, -71, -30, -25, 22, -75, 50, 7, 19, 33, 7, 10, 16, -21, -9, -16, 29, -2, -29, 13, + 40, 12, 9, -36, -8, -72, -29, -25, -25, 43, -17, -35, 26, -35, -25, -26, -6, -22, -46, 51, 10, 48, 29, -16, -17, 42, -24, -32, -22, -27, 39, -3, + 35, -11, 23, -47, 26, -18, -14, -3, 15, -16, 29, -17, -50, 13, 23, -43, -54, -25, -3, 25, -28, -65, -42, -3, 22, 16, -13, 13, -80, -13, 41, -14, + 1, -29, -19, 44, 27, -20, -35, 25, -127, 40, -52, -37, -9, 3, -5, -33, -8, 1, -4, 61, -9, 24, 10, 83, 41, 36, 2, -13, -42, -1, -68, 7, + -11, 41, 5, -41, 76, 9, -10, 18, 60, 9, 54, -75, -51, 92, -3, -54, 1, 16, 4, -8, -14, -25, -33, -34, 0, -7, 24, 43, 1, -16, -66, 20, + -68, -26, 23, -28, -29, -43, 42, 44, 35, -36, -33, -7, 27, 33, -19, -12, 32, -87, -7, 6, 34, 33, 43, 45, 5, 64, 53, -12, 7, -30, -43, -4, + -41, 10, 50, -22, 15, -56, 6, 74, -1, 23, 14, -20, 46, 10, -13, -22, 3, 43, 18, 33, 1, 24, 7, -25, 26, 12, -46, 17, -20, -7, -7, 43, + -9, 34, 16, -15, 68, 43, -21, 39, 28, -19, -19, -46, -24, -62, -21, 58, 26, -8, 21, 49, 18, 8, 5, -54, -81, -30, 22, 17, 32, -24, 11, -19, + 19, 7, 5, -5, -67, 28, 52, 31, 46, -59, 5, -21, 40, -6, -23, 64, 57, -48, 22, 19, 6, 17, 34, -51, 7, -9, 18, 38, 23, -19, -23, -20, + 3, -40, -11, 12, -50, 35, 45, 3, -21, -23, 27, -47, -32, -12, -10, -64, 32, 84, -5, -67, -27, 46, 66, 13, -32, -14, 64, -48, 44, -1, 8, -56, + -4, -29, 27, -2, 10, 12, 45, -72, 52, -17, -127, 34, 69, 8, -30, -41, -22, -12, 24, 7, -47, -71, -16, 14, -6, -17, 24, -21, -45, 33, 19, -34, + 27, 18, 15, 57, 53, 70, -8, 12, -58, -45, -33, -23, 49, 27, 38, 5, 19, 85, 29, 5, 50, -37, 26, 2, 61, 47, 18, -13, -53, -40, 38, -53, + -14, -4, 18, 67, 29, 7, 35, 18, -42, 31, 57, 14, -32, 10, 45, -56, 2, 56, -23, 25, -47, -5, 32, -13, -4, -12, 18, 3, 59, -18, -35, 43, + -31, -39, 20, 7, 90, -36, -62, -5, -8, -37, -9, 44, -29, -17, -28, -11, -16, 25, 57, 79, 29, 50, -30, 62, -37, 10, -53, -46, 44, -6, -28, -33, + 5, 79, -25, 27, 82, -56, -6, -38, 102, -22, 19, -76, -88, 5, 59, 29, 64, 1, -58, 8, -41, -50, -18, -6, 52, 27, 2, 81, 51, 13, -7, -1, + -15, -9, -127, -66, -37, 36, 95, -4, -49, -68, 20, 8, -28, -70, 15, 51, 0, 47, -52, -16, 11, -27, 45, -28, -6, 21, -23, -22, -106, 21, -39, 60, + 51, -1, -13, 54, -1, 14, -22, -8, 1, 63, -16, 25, 31, 11, -104, -55, 24, -29, 73, 34, 6, -24, 59, -4, -10, -53, -44, -38, -24, 38, -21, 50, + -31, 51, 21, -65, -58, -41, 54, -45, -13, 76, 4, 24, -5, 48, -77, 62, 46, 17, -38, 55, -106, 72, -23, 33, 5, -60, 30, -32, -24, -29, -9, 12, + -51, -36, -55, -9, -82, 71, 13, 42, -51, 28, 46, 52, -95, 68, -26, -60, 64, -40, 8, 84, -15, 26, 37, -7, 14, 31, -34, 73, 5, 4, -74, -30, + -15, 9, 9, 22, 54, -40, 1, -19, 7, 10, -67, -61, -49, 45, -18, -39, 12, 11, -53, 47, 20, 30, -19, -81, 30, 35, -55, -36, 19, -54, -10, -103, + -99, -13, 12, -127, 7, -86, 32, 41, 59, 23, 19, 2, 20, -37, -6, -62, 13, -24, 45, 17, 73, -43, 71, -118, -20, -45, 4, -62, 51, 48, -50, -14, + -96, -42, -10, -20, -5, -21, -94, 69, -15, 20, -25, 60, 55, 20, -112, -19, 16, -30, 37, -32, -25, 79, 25, 55, 28, 23, -36, 4, 30, 40, -34, 38, + -55, -18, 53, -6, -31, 53, 49, 53, 37, 10, 16, -20, 1, -34, -14, 71, 44, -43, 71, 52, 70, 18, 67, -14, 4, -70, -10, -36, 38, -35, 46, -31, + -29, -15, -22, -67, -25, 123, 33, 29, -12, 11, -5, 102, -43, 23, -84, 25, -3, 2, -61, 25, 98, 25, 22, -56, -81, -2, -37, 1, -5, 68, 9, 8, + -15, 19, 24, -29, -6, 24, -18, -1, 16, 0, 21, 22, -71, 12, 25, -96, -4, -62, 20, -5, -19, -17, -47, -48, -33, 33, 10, -127, 56, -10, -20, -38, + -50, -60, -74, -18, -37, 21, -27, 7, -30, 7, -12, 11, -116, 73, 11, -5, 11, 23, -38, 49, -27, 21, 45, -48, -16, 19, 6, 25, 8, -22, -39, 26, + 2, 40, 33, 75, 2, 38, -41, 41, 43, 53, -65, -83, 41, -8, -36, 7, 29, -52, 28, -51, -17, -7, 32, -13, 70, -80, 19, 53, -20, -7, -13, -22, + -52, 15, 19, -3, 24, -27, 31, -46, -34, 46, -15, 14, -8, -45, -10, 59, 82, -16, 7, -39, -100, 44, 46, 17, -30, 38, 39, 25, -26, 93, -42, -10, + -56, 2, 48, 9, 29, -2, 11, -32, -36, 10, 12, 18, 40, 50, -81, -63, 8, -8, 35, -29, -26, 48, 23, 45, 0, -41, -3, 29, 55, 27, 8, 10, + 31, -4, -51, 5, 55, -12, 78, 0, -17, -6, -12, -41, -24, -67, -59, 35, 19, 31, -65, -25, 13, 1, -2, 28, 18, -47, 0, 7, 20, 13, 26, -34, + 54, -3, 13, 5, 51, -20, -31, 18, -1, -28, 73, 27, 2, -40, 31, -6, 50, 31, 30, 33, 52, 69, -2, 17, 84, -17, 42, 30, -127, 69, -40, 22, + 16, 33, -40, -7, -8, -11, 1, -63, 2, 24, 10, -21, -85, 45, -83, -93, 4, 16, 37, 17, -30, 51, 21, 14, -6, 25, -70, 16, 2, 8, -9, 7, + 44, -4, -25, 40, -26, -46, -15, -50, -24, 18, 26, 27, -14, -14, 26, 32, -53, 1, 34, -8, 21, -10, -4, 17, 28, -34, -58, 1, -57, -20, 49, 20, + -22, -20, -32, 71, 42, 16, -57, -1, -79, -41, 30, 33, 86, -77, -85, 99, 86, -68, 43, 11, 2, -28, -12, 7, 31, 14, 50, -90, -27, 47, 23, -104, + 14, 41, 116, 45, -18, -26, -11, 15, 45, 51, 61, -94, -60, -46, -36, 76, -112, 55, 43, 94, -50, 60, 40, -54, 64, 18, -18, 42, 49, -20, 99, -38, + -57, -78, -78, 45, 36, 62, 2, -38, 0, 41, 12, 48, -78, 58, 34, -67, 6, -68, 28, -31, -20, -32, 62, -72, -24, 90, -62, 54, 33, -91, -42, 49, + -35, -65, -33, -12, -82, 39, -44, 82, 26, 50, -120, 127, 88, 7, -29, 32, -124, -7, -23, -21, 20, -5, 6, -7, -75, -14, -51, 12, -13, -16, 39, -2, + -60, 2, -45, 83, -87, 48, -20, -33, 79, -8, -61, -46, 32, 19, 28, 16, -33, 33, -88, -48, -19, 107, 43, -63, 32, 58, 58, -60, -12, -49, 57, 35, + -40, 32, -15, 8, -19, -25, 51, -10, -7, 56, -40, 7, 27, -33, -46, 16, -58, -15, 15, -10, 18, -44, -1, -73, -33, 35, 85, 12, 38, 127, 46, -26, + 15, 42, -74, -28, 46, -57, 44, -24, -9, -15, -50, -71, 68, -30, 70, -69, -39, 42, 32, 6, -77, -31, -62, 37, -32, 70, 58, 50, 61, -69, -3, -65, + 45, -12, -20, 23, -40, 27, -47, 18, -15, -44, -16, 19, -20, 34, 109, 13, 30, 37, 71, 75, -6, -40, 58, 46, 13, -37, -3, 41, -73, 58, 26, 49, + 79, 66, -6, -16, -6, 58, 66, -44, -9, 36, -4, -74, -54, 33, -26, -42, -11, 70, 45, -20, -26, -34, 22, 56, -37, -18, -65, 2, -31, -42, -41, 22, + -9, -55, -105, 70, 32, -29, -27, -80, -42, -2, -32, 54, -29, -20, 26, -21, 6, 27, -47, -31, -1, 10, -54, -13, 53, 15, -32, 6, -50, 72, -19, -8, + -5, -12, -15, 12, -127, -38, 60, 79, -20, -6, 26, -50, 48, 39, -11, 34, -73, -18, -63, 94, 46, 29, -22, -59, 14, -3, 41, -16, 8, -43, -21, -120, + -46, 11, -6, -26, 1, 10, -40, 10, -41, -17, 50, 4, 40, 41, 37, 2, -3, 45, 15, 18, -4, 36, 22, -53, -47, 58, 60, -43, -27, 11, -85, -48, + 43, -7, 23, -18, 52, -6, 38, -11, 19, -27, 10, -4, 45, 3, -15, -13, -78, 117, 49, 7, 15, -97, 44, -66, -1, -40, 26, -13, 10, 9, 6, -71, + 4, -12, 104, 8, 16, -2, 35, 33, -56, 25, -7, 21, 81, -15, -50, -53, 18, 22, 25, -1, 9, 36, 25, -23, -36, -17, -29, 12, 19, 1, 29, -17, + -45, 19, -72, -42, 41, 6, 61, 52, -1, -24, 41, -79, -21, -44, 11, 41, 92, 1, -10, -21, 22, 41, -27, -1, -59, -29, 6, 9, 35, -9, -93, -15, + -31, 11, 9, -12, -63, -95, 53, 37, -7, -124, 6, -44, 45, 37, 39, 1, -57, 4, -109, 125, 31, 19, 20, -93, -15, 81, 110, 27, -32, 6, 0, -55, + -2, 26, 23, -26, -57, 26, 44, 33, -57, -10, -6, -93, 15, 91, 1, -35, -40, 77, -4, 19, 9, -7, 11, -100, -7, -35, -77, 14, 17, -66, 54, -71, + 97, -31, 7, -26, -1, 21, 25, -14, 93, 11, 4, 3, -50, 88, 19, -46, -54, 90, 79, 42, 16, -62, 34, -36, -41, -105, 38, -31, 90, -4, -75, -56, + 41, 21, 13, 9, 35, 12, 1, -13, -49, 36, 38, -84, 39, -48, -82, 8, -21, 46, 22, -1, 36, 116, 13, 57, -51, 4, -24, 127, -118, -84, -62, 62, + 21, 14, -8, -15, 72, 71, -10, 80, -47, -48, 31, -87, -63, 10, 33, 8, 73, -63, 46, -1, 68, 26, 66, -33, -6, -25, -24, 27, -18, 20, 41, -1, + -43, -92, 6, -32, -90, 0, 32, -76, 42, -46, 24, -17, 77, 59, -98, 7, -84, 3, -69, 61, 39, -21, -5, -84, 21, -33, 34, -95, 56, -85, -68, -101, + -11, 2, 9, -20, -13, -20, 33, 26, -22, -17, 26, 17, 29, 5, 49, 20, -6, 42, 82, 52, 20, 24, -64, -55, -57, 34, -12, 11, -30, -10, 8, 0, + 64, 16, 18, 66, 20, -37, -65, -41, 13, -30, 68, -30, -32, 29, -46, -32, -66, 81, 77, -4, -5, -70, -11, 26, -60, -71, -4, -28, -43, 19, -70, -5, + 116, 27, -8, -37, -3, -68, -40, -1, 33, 19, -29, 18, -33, -1, -74, -127, -2, 55, -48, 83, -25, 81, -18, 5, -54, 34, -95, 81, -94, -18, -9, 79, + -5, -50, -12, 9, 36, -85, 30, -31, 31, -3, 49, 22, -62, -72, -14, -53, 45, 29, 112, 27, -22, 35, 13, -9, -18, 30, -20, 15, -10, 37, 3, -49, + -5, 66, -42, -30, -108, 96, 9, 50, 25, 57, 72, 53, -67, -21, 42, -15, 79, -106, -70, -24, 61, 44, 51, -52, -32, 27, 3, 33, 3, 25, 68, -86, + -9, 41, -118, -13, -19, 41, 11, 1, -20, -127, 83, -10, 5, -19, -30, 81, -19, 39, 36, -5, 38, 14, 11, -115, -14, 29, 29, -55, -43, 26, -83, -51, + -50, 22, -34, 34, 101, -46, 1, -9, 33, -44, -31, 90, -1, 73, -27, -42, 46, 65, 60, 29, -17, -29, 49, -95, -79, 31, 36, -7, 60, -7, 3, -117, + -24, -19, -6, -38, 18, -16, -108, -33, -24, -19, -54, 7, 79, 44, -19, -4, -18, 56, -3, 14, 25, -37, -20, -8, -31, 35, 44, -17, 2, 30, 76, 36, + -59, -57, -21, -63, -56, -10, -70, 23, -18, 10, 11, 17, 117, -27, 38, -30, 26, -15, 31, -70, 1, 17, 52, -32, 15, -23, 30, -25, -55, -14, 36, 46, + 18, 24, -37, 41, -9, 60, -51, 56, 50, 64, -21, -25, -53, -70, -21, -8, 74, -10, 25, -21, 3, -14, -36, -59, -21, 8, 38, -108, 65, -12, 51, 115, + 12, -8, 56, 41, 40, -19, -19, 49, 38, -6, -43, 20, 0, -17, -25, -127, 17, -6, 28, -33, -16, -4, 7, 42, -43, -26, -9, 61, 3, -30, 65, 32, + -69, 48, -8, -54, 18, -41, 39, 10, -41, 57, 5, 34, 14, -23, 81, -19, 21, 6, 9, -31, -54, 63, -12, -26, 54, 13, -25, 48, -28, 53, -48, 41, + 8, 1, 6, 28, 15, -22, 11, 31, -80, 3, -16, -20, -92, -81, 28, -65, 17, -43, -50, 18, -29, -51, 7, 42, 9, 31, -45, -39, 26, 25, 39, 0, + 11, 97, 22, 15, -83, -3, 23, -13, -11, -7, 44, 7, -96, 88, 33, 26, -51, 77, -36, 62, -73, -5, 17, 54, -2, 16, 31, 9, -70, -45, 33, -11, + 67, -16, 9, -11, -12, -26, 27, 1, -99, -1, -19, -8, -88, -21, 7, -87, 14, 9, 62, -10, 18, 39, 48, 73, 14, 65, 2, -8, -11, -46, 27, 8, + 11, 92, -9, -87, 32, 35, -2, 33, 0, -43, 28, 8, -10, 49, 7, -48, 17, -30, -40, -55, 0, 10, -74, 7, -9, -42, 16, 15, 11, 50, 26, 71, + -60, 21, -49, -56, 41, -1, 51, -1, -23, 22, -60, 94, -57, -45, 50, 67, 33, -33, -33, -44, 42, 24, 24, 28, 6, 60, 10, 18, -39, 65, 13, 65, + -25, -1, -57, 25, 10, -42, 88, -6, -16, 34, 10, 69, -62, 15, 62, -8, -5, -100, -66, 55, -16, -93, 49, -53, -28, 14, 8, 61, -28, -62, -3, -8, + 59, 27, -1, -51, 33, 4, -36, -4, -56, -47, 50, 21, -28, -37, 0, 13, -9, -10, -55, -1, -91, 12, -105, 40, -12, -8, -43, 21, -127, 64, 54, 3, + -67, -69, -61, -27, -46, 80, -12, -1, -64, 13, 18, 58, -19, 91, -97, -83, 59, -44, -11, 37, -4, 58, -2, -65, -30, -32, -30, 86, 86, -50, -5, 16, + -23, 12, -38, -63, 57, 14, 5, -15, -46, 30, -79, 2, 1, 58, -50, 66, 3, 1, -67, 16, 52, -9, -54, -120, 3, 39, -3, -68, -6, -94, 3, -109, + -24, -33, 6, -62, -30, -69, 8, 48, -13, 50, 41, -48, -17, 70, 25, -116, 28, 113, 36, 52, 61, -47, 41, -29, 44, -71, -38, 29, 35, -4, -95, 26, + -71, 35, 7, -55, -59, -37, -96, 27, 68, -20, -127, 92, 69, 65, -44, -38, 21, 5, 44, -27, -35, 28, 30, 22, -13, -63, -114, 42, 65, 25, 1, 25, + -80, 14, 6, 43, -67, 62, -13, 24, 8, 19, -12, -36, -53, -81, 41, 74, 47, -41, 6, -15, 2, -27, 111, -8, -11, 52, -11, -6, 24, 10, 12, -44, + -19, 57, 47, 43, 29, -1, 40, -38, -5, 77, -9, -25, -14, 6, -60, -19, -12, 29, 12, 7, -63, 42, 44, 5, -6, 11, 51, 12, 22, 51, -2, 4, + 80, 55, -67, -35, 78, 18, 63, -36, 51, -99, 38, -60, -58, 62, 90, -48, 60, -68, -92, 30, -16, -50, -94, 47, 28, -16, -26, -48, 45, 14, -75, -1, + -10, 27, -28, 12, -23, -28, -32, 10, -29, -58, -11, 29, -17, 3, 46, 51, 127, -40, 19, -6, 20, -17, 31, 22, -7, -108, -5, 38, 23, 9, -18, 79, + -33, 88, -94, 10, -25, 2, 5, 9, -32, 78, 24, -37, -29, 38, -60, -81, 16, 35, 47, -48, -11, 50, 33, 11, -59, 34, -76, -62, 26, -16, -3, 76, + 40, -18, -22, -7, -28, -36, -50, 11, 4, 22, -10, 19, 26, -8, -43, -25, -42, -44, 7, 0, -36, 17, -67, -53, 51, -77, -3, 6, -3, 19, 80, -6, + 27, 14, 99, 0, -23, -36, -77, 36, -14, 9, -53, 64, 103, 24, 10, -71, -73, 21, 53, -34, 13, 7, -6, 52, -23, -37, -82, -21, 25, 22, 3, 15, + 10, 103, -47, -15, -5, 29, 85, -35, 10, -69, 18, 41, -17, 14, 34, -16, 24, -16, -16, -98, -2, -33, -94, 69, -24, 23, -63, -66, 38, 81, -77, -22, + 64, 8, -40, 99, 22, -5, 46, 42, -46, 41, 18, 63, -64, -127, -20, 62, 98, -49, 95, 2, 41, -65, -6, 78, 22, -64, 41, 35, -69, 60, -28, 80, + -23, 84, -2, -56, -54, -59, 36, -70, -4, 126, 101, 0, -61, 39, -38, -65, -8, -59, -21, 38, -41, 19, 7, -40, -58, 22, -31, -65, 75, -17, -33, 59, + 91, -18, -56, -12, 23, -79, -60, -51, -38, -24, -5, -19, 7, 48, -53, -71, -106, -3, 22, -73, -69, -47, -107, -19, 17, 57, 24, 21, -119, 8, 91, 36, + 0, 71, 24, -49, -27, -45, -98, 39, 32, 69, 44, 52, -12, -23, 87, -48, 27, -22, -26, -61, 5, -14, -52, -48, -62, 46, -9, -11, -9, 86, 47, -61, + -2, 52, 44, -98, -42, 5, 24, -61, 36, -125, 26, 6, -54, 8, 30, 43, -4, -17, 10, -100, -38, -57, 30, -2, -55, -33, 1, 26, 60, 80, 3, -10, + -15, 23, -71, -5, -1, 7, 70, -52, -87, 21, -25, 66, -54, 69, -53, 8, 12, -13, -24, -22, 33, 38, 33, 45, 38, 33, -37, 72, 71, 110, 8, -39, + -36, 48, -57, 37, -87, -47, 51, 3, -53, 73, -42, 87, -6, -58, 87, 15, -66, -34, -45, 20, 26, -81, 0, -80, -31, -79, 1, 35, 47, -73, 86, 50, + 30, -33, 14, 62, -83, -127, -92, -43, 76, 32, 11, 106, 85, -7, -74, -22, -12, 46, -119, -75, -37, 38, -29, -64, 104, 22, -3, 8, -82, -74, -66, 63, + -23, -4, 14, -71, -10, -14, 18, 51, 7, 26, -54, 23, 27, 50, -43, 27, -24, -13, 18, -23, 13, 15, 58, 49, -12, 18, -89, -2, 4, 35, -54, 3, + -36, 29, -1, -8, -7, 42, 123, 52, -50, -20, 46, -23, 20, -23, 58, -9, 48, 35, -45, -12, -2, 15, -27, 57, 9, -74, 10, -13, 7, 28, -20, 26, + 59, -32, -14, 40, -19, 32, 14, 31, -40, -5, 26, 58, -30, -127, -30, -19, -25, -5, 64, 15, 9, 13, 9, 32, 8, 23, 59, 25, -90, 54, 26, -16, + 61, 44, -73, -56, -51, -46, 42, -72, 39, 19, 54, -25, -88, -16, -1, -25, 40, -28, 5, 45, 6, 10, 29, -19, -8, -12, 30, -20, 33, 22, -69, -4, + 98, -12, -14, -26, -28, -13, -9, 1, -40, 13, 17, -42, -29, -7, -15, 47, -69, 20, -67, -28, -24, -3, -108, 49, 4, 13, 42, 27, -94, 9, -28, -36, + 32, 4, 22, 2, -17, 120, 21, 73, 84, 13, -30, 9, 19, 5, -33, -8, 40, 36, -22, -14, -4, -22, 14, 48, -19, 16, 42, -42, 114, 16, -40, 10, + 51, 10, -36, 24, 29, 51, 18, 27, -11, 62, 10, 75, 68, -15, -21, -5, 5, -78, -18, 51, -20, 3, -18, 24, 49, -22, 10, -6, 49, 7, -79, -46, + -43, 77, 93, 113, 16, -60, -53, -30, 5, 31, -26, -17, 43, -19, 74, -55, 127, 14, -24, 67, 35, -61, -19, -8, -20, -121, 43, 12, -80, -20, 12, 60, + -6, 52, -8, 11, 1, 66, -21, 31, 71, -60, -5, -76, -7, 47, 43, -1, 14, 35, -28, -31, -48, 63, 55, 90, 40, 28, -13, 0, -43, 23, 10, 23, + -28, 14, -33, 84, 41, 36, 91, -53, -31, 8, -17, 69, -55, 46, -32, -85, -26, -50, -56, 14, -39, -28, 17, 18, 18, -19, -2, -55, 97, 77, -7, 39, + -20, 75, -7, 26, 7, 19, -24, 17, 0, 75, -41, -53, 9, -6, 2, -55, -6, -41, 6, 30, -9, 44, 36, 12, -72, 10, 23, -8, 49, 39, 10, -13, + 43, 30, -45, 19, 37, 9, 30, 10, 61, -33, 32, -72, -23, 35, 3, -22, -60, 67, -34, -5, -3, -8, -10, 36, 21, 42, 29, 68, 32, -111, -35, -4, + -34, -5, 28, -23, -61, 12, -55, -41, -28, 2, -1, 25, -32, -15, 11, -118, -5, -127, -19, 32, -36, -10, 41, -16, -67, 45, 24, 94, -41, 34, -45, 32, + 65, -1, 28, -25, 23, -30, 0, 15, -33, 25, -49, 83, 57, -21, 17, -54, 17, 51, 26, 42, 20, -38, -1, 10, -24, 50, -21, 33, 16, -54, 25, 7, + -63, 19, -2, -23, -48, -16, 12, -70, 36, 61, 20, -21, -36, -48, 10, 15, -19, -22, -61, 15, -51, 15, -26, 24, 14, 54, 22, 44, -19, 55, 23, 7, + -32, 86, 82, -16, -45, -53, 65, 36, -13, 117, -54, 74, 104, -32, -62, -2, -74, -23, 12, -44, 23, 15, 9, -41, 31, 42, -2, -75, 41, 41, 79, -67, + -29, 11, -82, 36, 41, 52, 48, -80, 32, -89, -22, -51, 52, 14, -27, -50, 16, -52, -61, -25, 88, 5, -13, -60, -53, 25, -37, -13, 41, -1, -8, -32, + 36, 89, -2, 43, -58, -36, -4, 10, -56, -2, -29, 47, -11, 25, 34, -70, 95, 15, 66, 17, 79, -80, -41, 94, 38, -104, 1, 24, -59, 33, 11, 49, + 31, 107, 21, -39, -23, -21, 74, 3, -69, 60, 36, -91, -96, -54, -57, -127, 14, 26, -10, 23, -52, 26, 10, 29, -28, 30, -91, -48, 29, -13, -78, 47, + 52, -20, -46, -38, 5, -63, -21, 3, -29, -24, 6, 34, -7, 33, 39, -74, -75, -20, 50, -36, -43, 19, -87, -49, 34, 18, 13, 23, -59, 53, 12, -21, + 7, -52, 1, 9, 75, -58, 26, 59, -45, -11, 21, -40, -127, 9, 21, 8, -45, -26, -105, 54, 12, 30, 19, -33, -67, -1, 76, 27, 73, 31, 21, 11, + -25, -73, 30, -12, 17, -2, -4, 4, 67, -7, 1, -15, 26, 36, -28, -39, -39, 64, 45, 44, -23, 7, -17, -36, 3, 82, 15, 1, 39, -69, -64, -89, + 3, -21, -13, -36, -31, 46, 13, 13, 33, -37, 11, 17, 36, -27, 33, -24, -73, 12, 25, -17, 53, 20, -11, -70, -29, -18, 31, -76, 2, -55, -46, 5, + 45, -6, 55, -36, 0, 81, -64, 50, -77, 17, -37, 2, 36, -96, 16, 35, 34, 11, 49, 19, 7, 41, -3, -3, -7, -4, 11, 6, 3, -12, 27, -14, + -51, -10, -22, 8, 24, 52, -41, 25, 37, -11, -7, -49, -7, 73, -59, 45, -39, -5, 42, -20, 74, 30, 7, 2, -56, 6, 34, -3, 63, -40, -6, -50, + 42, 79, 47, 8, 30, 11, -31, 47, 70, 57, -28, 35, 18, 5, 20, -59, -45, 19, 29, -30, 24, 43, -13, -19, -23, 24, -73, -48, -1, 13, 35, -37, + 2, 55, -66, -3, -12, 40, 24, -56, 51, -103, 3, 10, -61, 20, 30, -90, 8, -42, -2, -43, 0, -63, -55, 58, -19, -49, 8, -7, 51, 29, 20, -19, + 56, 26, -55, -81, 10, 4, 85, -23, -46, 68, -60, 39, -11, 11, -45, 57, 67, 10, 26, -10, 22, -55, 58, 116, 29, -48, -21, 124, 10, 44, -40, 33, + 10, 127, -48, 17, -85, -18, 69, -27, -57, 71, 31, -76, 1, -25, 62, -117, -5, -8, 40, 13, -42, -94, 7, -88, -39, -14, -34, -47, 67, -3, 9, 49, + 66, -36, -44, -52, -9, -126, -36, -30, -55, 24, 14, 19, -22, -17, -41, 60, 31, -31, -113, -85, -84, 29, -90, -7, 47, 50, 45, 5, -80, -21, -16, 27, + 19, 54, 60, -43, -127, 17, 49, 9, -6, 31, 53, -21, -70, 33, 30, -36, 82, 10, -33, -65, -5, 20, 12, 10, 44, 51, -36, 34, -85, 21, -28, -16, + 6, 14, 6, 13, -54, 32, -54, -10, 26, 37, -37, -57, 29, 34, 13, -66, -1, 18, 24, -35, 43, 34, -26, -16, -44, -8, 70, -89, 7, 41, -53, 4, + -32, -2, -34, 2, -13, -59, 4, 3, 53, -45, 3, 33, -44, 60, -54, 12, 11, -36, 71, 31, 3, 38, 46, -49, -25, -27, -7, 7, 63, 8, -22, -48, + 38, -5, -57, -55, -9, -47, -12, 25, 6, -10, 7, 1, 38, -3, 50, -32, 6, -33, -4, 67, 42, 38, -18, 10, 4, 44, -33, 51, -69, -31, -3, -45, + -5, -15, 61, -9, 12, 13, -15, -32, 5, 3, 70, -9, 43, -31, 29, 21, -34, 22, -1, -17, -45, 30, 37, -32, 21, 25, 14, 16, -40, 9, 35, -50, + 33, 53, -61, 11, 26, -30, -27, 107, 60, 22, -81, 6, 6, -70, 70, 20, 22, -38, 9, -5, 75, -8, -54, -87, -33, 24, -70, 33, 105, 44, 1, 59, + 94, 28, 80, -28, 41, -57, 12, -93, 40, -101, -17, -7, 4, 18, 0, 8, 31, -62, 60, -51, -55, -54, 109, 34, 5, 48, 6, 3, 86, -31, 29, -3, + 6, -3, -106, 16, 0, 69, 61, -5, -104, 29, -127, -5, 17, -40, 55, -50, 68, -10, -40, 36, 35, -84, 24, 41, 11, -5, -44, -27, 28, 36, -39, 61, + 20, -15, 16, 5, -8, 41, -12, 25, 19, 50, 18, -9, 27, -28, 64, 60, 8, -65, -10, -70, 24, -75, 43, -50, 15, -71, 40, 28, 73, -36, 30, -46, + -37, -29, -25, 28, 13, 13, -20, -30, 0, 32, 11, 91, 36, 90, -42, -64, -2, -8, -45, -68, -109, 26, 63, 26, 102, 23, 67, 16, -109, 21, -83, 82, + 13, -2, -2, -34, -52, 35, 29, 46, -30, -14, -35, -52, -43, 52, 15, -19, 50, 94, 13, -24, -71, 71, 87, 127, 65, 28, -93, 55, 38, 49, -63, 22, + 116, 83, -3, -1, 23, 61, 67, -5, 22, 15, 55, -78, -18, -22, 22, 47, -11, 6, -88, 6, 35, -27, -23, 52, 84, -105, 31, 12, -3, -10, 35, 40, + -86, -39, 83, 26, 70, 26, -89, 30, 39, 20, 15, 24, 24, -5, 57, -16, 15, -90, -27, 17, -2, 0, 1, -80, -40, -78, 71, -10, 23, -2, 38, 7, + -18, 49, -12, -31, -79, 14, 26, 82, 106, -27, -6, 25, 32, 89, -27, -59, 41, 9, 43, 2, -34, 31, 7, 6, 32, 56, 4, 24, -78, 31, 6, 17, + 10, -21, 30, 65, -23, -25, 4, -7, 30, 40, -25, 62, 3, -69, -23, -5, -59, -96, 11, 6, 42, -44, 81, -21, 56, -20, 18, -19, 36, 61, 41, -17, + -14, 31, 69, -65, -64, 83, 3, -5, -18, 68, -6, -24, 48, -29, 27, -107, -12, -68, -67, 52, 12, 28, -17, -42, -9, -7, 86, -87, 87, 1, 22, 11, + 1, 8, -66, -2, 20, 46, -36, 17, 26, 14, -19, -23, -19, -25, -13, -32, -63, 8, 31, -96, -3, 48, -8, -45, -122, -34, 10, 7, 3, 33, 30, -10, + 17, 23, 30, -40, -22, 14, -19, 23, 22, 39, 13, 17, -14, 96, 81, -40, -42, 14, -9, 33, 7, -89, 34, 27, -34, -33, 26, 73, -65, 18, -38, 13, + 28, 34, 84, -22, -6, -24, 99, 36, -127, 36, -15, 6, 80, -49, -31, -64, -32, 117, 0, 63, -54, 53, -16, -31, -57, 24, -10, 102, 62, -121, 34, 22, + 21, -63, -44, -25, 78, -9, -13, -69, -15, 34, 36, -84, -29, -21, -5, -83, 15, -3, 29, -39, 61, -31, -37, -53, -24, 62, 26, 4, -25, 18, -63, -5, + -53, -1, -120, -46, -56, -127, 73, 28, -61, 61, -67, -65, -90, 57, 35, -8, 15, -75, 42, 41, -127, 45, 11, -2, 45, 43, 36, -42, -3, -93, -37, 23, + -44, 15, -55, -70, 32, -15, 9, -30, -2, -98, 52, -7, 65, 41, -87, -34, 20, 59, -66, -30, 46, 84, 36, -44, 27, 47, 39, -14, 8, -119, -49, -28, + -58, 5, -30, 51, -69, -73, -64, -8, -2, -34, 11, -14, -21, 69, -46, -115, 19, 77, 23, 12, -2, -68, -14, -15, -16, 22, 62, -17, -6, -62, 101, -52, + -48, 40, 19, 5, 93, -22, -31, 22, 6, -66, -52, 48, 97, 8, -11, -89, -16, 39, 28, 99, -40, 15, -44, -3, -9, 88, -7, 90, 111, 59, 33, 41, + -120, -28, -22, 2, 33, 58, 15, 64, 53, 7, -12, -50, 31, 66, 30, 3, -43, 55, 68, 14, 3, -27, -23, 2, 42, 3, 60, 53, -62, 0, 42, -74, + -50, -74, -49, 4, 9, 27, 29, -2, -25, -56, 45, 53, -89, 38, 6, -10, 85, 48, -22, 65, -27, 29, 74, 18, 7, 9, -38, -2, -26, 60, -38, -87, + 49, 54, 26, -14, 50, -127, 54, -57, 10, 45, -52, -20, -103, 8, 34, 74, 4, -85, 10, 88, -11, -15, -11, -79, 86, -9, 18, -45, 87, -34, -4, -43, + -92, -50, -14, -97, 67, -1, -34, -24, 64, -28, -21, 2, -17, 43, 36, -31, 12, 18, 50, 38, 56, 22, 60, -38, -12, -36, -8, -40, 39, 14, -56, 11, + -69, -23, -53, -18, -31, 14, -124, -5, 29, 48, -9, 4, -5, 37, -7, 31, 12, -6, 34, -40, 36, 97, 27, 43, 28, -30, -38, 56, -58, 33, -3, 55, + -78, -9, 55, 39, -92, 12, 20, -56, 65, 24, -26, 103, -62, -25, -55, 27, 34, -113, -28, -26, 30, -32, 73, -7, 61, -69, -37, -63, 71, -40, 53, 47, + 18, 33, -17, 63, 59, -28, -16, 31, 6, -3, 17, -40, -5, 21, 33, 92, 69, -52, -92, -38, 14, 7, -11, -47, -4, 32, -2, 16, 78, 36, 60, 79, + 33, -31, 85, 46, -26, -23, 19, -5, -45, -44, 5, -25, -18, 76, -65, -77, -55, 29, 38, 24, 29, -32, 24, -76, -25, 65, -77, -82, 75, -81, 18, -24, + 15, -28, 12, -25, -9, -56, -5, -15, -12, -16, -65, -23, -43, 18, 51, -24, -16, -16, 39, 37, -6, 80, -24, -71, -13, 49, -27, -24, 58, -22, -12, 38, + 35, 46, -37, 55, 41, 52, -17, 32, 7, 22, -83, -68, 21, -59, -21, -33, 4, 11, 39, 33, -6, 23, 61, -1, -26, -13, 58, 15, -11, -20, 70, -89, + -94, 21, 54, 68, -21, 22, -7, 15, 25, -31, -37, -5, 44, 79, 68, -42, -48, -13, 21, -30, 11, 42, 51, -56, 22, -19, 50, 12, -1, -17, 127, 42, + -7, -58, -46, 36, 36, 74, 30, 17, -73, -72, 19, 73, -74, 15, -29, -95, 111, -42, -13, -3, 42, 41, 20, 108, -53, 8, -115, 11, -32, 14, -50, -53, + 25, -19, 19, 13, 35, -46, 28, -23, 55, 43, -71, -32, -65, -11, -53, 123, -38, -92, -88, 96, 11, -10, -61, -91, 67, -64, 11, 79, 34, 1, 6, -127, + -105, -83, -12, -90, 63, -24, -51, 44, -17, -71, 2, 11, -23, -51, -13, -45, 48, 36, -31, 69, 61, 70, 65, -82, 60, -91, 34, -8, 38, 4, -54, 47, + 12, -83, 64, 0, -35, -1, -117, 28, -16, 81, -65, -4, -10, 38, -59, 95, -7, -8, 71, 35, -2, 79, 9, 67, -20, -36, -101, 15, 3, 53, -30, 68, + -36, -3, 46, -22, -103, 60, -62, -21, -12, 0, -12, 22, -50, 3, 29, 67, 62, -95, 17, -44, -3, -16, 112, 51, 38, -53, 11, -11, 38, -50, 5, 57, + 41, 30, 85, -60, -24, -6, 86, 65, 45, 63, 57, -35, -57, -5, -2, -2, -41, 45, 71, 101, -15, -78, 112, -76, 73, 102, -94, 19, -104, -50, 0, -27, + -73, -55, 18, -32, 54, 48, 106, 127, -85, 70, 18, -50, 67, 52, 70, -127, 72, 0, -88, 48, 31, 19, -76, 25, 61, -48, 88, -46, 23, -46, 68, 105, + 79, -58, -3, 67, 5, 99, 54, -15, 42, -89, -3, 38, -62, 58, -27, 46, -116, 7, 106, 49, 0, 23, -32, -2, 114, 28, 22, 80, -7, 77, -11, -7, + 31, -36, -10, -52, 12, -14, 77, -57, -11, -57, 41, 12, -124, -22, -14, -47, 74, -80, -22, 120, -48, -24, 46, -86, 39, 45, 2, -9, 27, 53, -115, -75, + 63, -15, 39, -52, -38, -4, 49, 73, -58, 23, 117, -120, 38, -48, 38, 78, 47, 31, -105, 9, -19, -47, -37, 52, 14, -30, 16, 18, 33, 71, -18, -124, + -44, -15, 23, -12, -25, -41, 14, 24, 6, 24, -41, -28, 27, 42, -30, -13, 16, 0, 38, 0, -32, -3, 15, 17, 15, 26, -26, -31, 17, 38, 18, 40, + -30, 70, 0, -3, 35, 9, 127, 46, -42, -18, 73, -36, 6, 59, -11, -99, 37, 69, -27, -65, -3, 31, -37, 11, -30, 31, -11, -48, -14, 1, -93, -58, + -35, -7, -21, -3, 51, 62, 78, -22, 4, -12, -55, -3, 25, -100, -15, 14, 11, -83, 29, -8, 5, -35, 45, 51, -77, -16, 36, 10, -49, 37, -47, 14, + -11, 29, 39, 55, 25, 57, -13, -47, -67, 71, 59, 26, 15, -12, -1, -76, 3, -21, 88, 72, -23, -41, 24, -76, 36, -3, 33, -50, 57, 30, -23, 52, + -25, 66, -13, -97, -12, 30, 75, 26, 17, -58, 21, -86, -60, 76, -67, -10, -38, 50, -77, 29, -110, 6, -21, 68, -1, -47, 95, -34, -17, -14, 38, -27, + 30, 6, 6, 37, 23, -12, 6, 68, -17, 7, -96, 4, 3, -94, 29, 69, -9, -11, -24, 48, 25, 22, 29, -31, -4, 68, 78, -39, 59, 27, -12, 5, + 58, -51, -38, 29, 43, -10, 35, 26, 71, 19, 58, -70, -23, 9, -72, -50, -77, 15, -24, -32, -31, 11, -21, -7, -17, 43, -8, 23, 54, -6, 47, -21, + -56, -27, 83, -8, 2, 62, -23, -21, -9, -6, -127, 48, 44, 57, 22, 8, -27, -2, -54, -10, -48, 33, -34, -28, -1, -10, 42, 31, 27, -16, 7, 89, + 4, -17, 32, -8, -63, 65, 19, 108, 3, 5, -55, 35, -47, 7, 46, -24, 2, 72, 8, 20, 16, -47, 39, 35, 24, 45, 104, 19, 32, 4, -41, -127, + -34, 57, -61, 66, 3, 76, 46, -11, -38, -31, -30, -45, -66, 36, 25, -87, -3, -41, -52, 59, 48, 42, 49, -70, -10, 40, 9, -35, -57, 47, -40, 34, + 3, -15, -56, -50, -15, -71, -57, 47, -50, -44, -87, 91, 26, 24, 16, -18, -9, 26, -83, 5, 4, 39, 28, 127, 24, -22, 21, 28, -11, 24, 15, 0, + 15, 57, -119, 44, -15, -14, -38, -6, 11, 81, 43, -19, -61, -48, 94, 87, 27, -23, -43, 21, 10, -66, -62, 31, 46, 15, 71, 63, 26, 87, 52, 7, + -46, -13, -67, 59, 7, 75, 36, -2, -89, 6, 24, 40, -62, -77, 46, 2, 5, -97, -18, 39, -63, 40, 10, 51, 32, -16, 13, 70, -82, 35, 14, 2, + 12, 26, 26, 5, -105, -23, 68, -76, 35, 18, -95, 52, -18, -18, 30, 0, -19, -43, 71, 43, 1, 58, -23, -19, 6, 8, 36, -25, -10, 19, -107, 73, + -26, -26, 0, 46, -24, -1, -22, -15, -30, 40, 42, 45, 32, 16, -61, 25, 46, -54, -101, 20, -36, 16, -71, -21, 44, -70, -27, 12, -125, 56, -24, 7, + 59, -13, -24, 73, -9, -50, 12, 58, -94, -58, -127, -37, 24, -17, 15, -7, 54, -34, -1, -16, 17, 39, 25, 35, 7, 53, 8, 26, 35, 42, 9, -16, + 62, -28, 50, -38, 46, -51, 25, 29, 59, 28, -50, 0, -9, -84, 30, 82, -7, -3, 5, 12, -6, 9, -11, -9, -47, 43, 64, 13, 55, -65, 67, 3, + -87, -30, -20, 10, -5, -8, -22, -12, 37, 55, -48, -7, 7, 28, -25, -6, 67, -21, 34, 36, -23, -19, 12, -12, -32, 14, 7, 7, 111, 9, 71, 60, + -17, -7, 49, -47, 62, 53, -34, 49, -21, 29, -44, 61, -45, 62, -1, 5, 12, -14, 4, -82, -67, -3, -3, -11, -15, -45, 27, 94, 1, -8, -78, -24, + -18, 1, -54, 15, -14, 14, -55, -30, -6, 20, -2, 49, 14, 26, -14, -58, -8, -51, -58, -26, -88, 16, -31, -11, 32, -14, 16, 15, -20, -3, -20, 75, + -69, -35, 47, 15, 17, 38, 0, -20, -18, 59, -27, 3, -8, -38, -43, -27, -5, 5, 41, -19, 13, 12, 2, 35, -22, 7, -52, -53, 63, 47, -16, 38, + 11, 31, -58, -21, 21, -20, 53, 3, 32, -51, 51, -34, -31, -18, 22, 11, -15, -3, -32, -28, 8, -29, -24, -20, 30, 9, -5, 26, -7, 60, -16, -13, + -15, 10, -23, 20, 24, 2, -3, 24, -33, -49, 36, 31, 8, -63, 16, 45, 52, -6, -13, -25, 50, 6, -10, 19, 60, -12, 17, -16, -48, 23, 18, 47, + 1, -3, -13, -25, -27, -44, -20, -36, -22, 68, 43, -58, -23, 20, -79, -96, 16, 40, 26, -18, 2, -6, 26, 17, -42, 31, -127, -55, -14, -10, -8, 31, + 7, -12, 1, -37, -6, -33, 18, -47, -10, 13, 19, 9, 28, -5, 1, -20, -59, 4, -14, 16, -37, 14, -23, -8, 13, -67, -6, 20, -84, -8, 44, -2, + 35, 88, -11, -31, 100, -80, -58, 3, 7, 7, -35, 41, -35, -13, 87, -42, -12, -12, -25, -66, 20, 31, -19, 30, -51, -45, -30, -64, 11, 14, 39, 4, + 78, 83, -4, -42, 24, 20, -20, -89, 36, -64, 39, -90, -127, -17, 35, -5, 16, -69, 31, -9, 1, -58, 5, 13, 46, -33, 2, 91, 66, 68, -21, 3, + 32, -43, -80, -12, -74, 46, 41, -53, -81, -2, 41, 96, -67, -60, -19, 25, 67, -93, 5, -3, -10, 37, -4, 90, 28, -72, -41, 64, 49, 35, -27, 70, + 37, 49, -59, 32, -111, 11, 69, -70, -46, 58, 15, 3, 0, 22, 62, 35, -50, 15, 14, 8, 43, -53, -18, -87, -34, -20, -77, -58, 44, -10, 61, 99, + 97, -48, 12, 20, -33, -54, -21, -83, 69, 68, 24, 111, 0, -10, -123, 29, 39, -71, -101, -61, -28, 32, -5, -15, 77, 50, -53, -37, -58, 11, -27, 73, + 20, 30, 30, 10, -20, -34, -26, -6, -2, -52, 26, 76, 101, -46, 21, 65, 7, -17, -25, -39, 31, -27, -7, -59, -30, 24, -51, -20, 4, 21, 46, -41, + -7, 14, 28, 12, -20, 20, -16, 10, -56, 16, 0, 55, 32, -9, -20, 127, -31, 37, 49, 23, 25, -1, 2, -25, -10, 61, 18, -52, 22, -1, 59, -36, + 26, -14, -62, 57, 50, 27, 18, -2, -31, 10, 15, 0, -65, 29, -35, -20, -18, 57, 53, 39, 25, -19, 25, 7, -47, 28, -25, 27, -39, 1, 10, 26, + 15, 33, -24, -11, 3, -3, -7, -7, 25, 28, -48, 55, -8, -11, 41, -15, -1, 9, -11, 11, 46, 3, -5, -17, -25, -19, -4, -64, 34, -34, 25, -57, + -19, -1, -33, -2, 14, -49, 11, -11, -13, 18, -20, -22, 8, -5, -13, -26, 5, 22, 37, -59, -37, 35, -27, -78, 50, 49, 30, 16, -52, -14, -36, -16, + -24, -4, 58, 3, -28, 43, -44, 51, 17, 66, 54, 47, 50, 18, -1, -88, 68, -9, 85, -68, -22, -13, 55, -4, -33, -41, -122, 53, -19, 84, -71, 76, + 65, 52, -108, 50, 121, -38, 25, -54, 30, 1, -16, -20, 31, -41, -22, 104, 6, -15, -81, 48, 127, -31, 8, -85, 86, 0, -59, 14, -59, 53, 62, 1, + -52, -90, 53, -15, 43, -89, 4, 85, -24, -14, 94, 19, -47, -78, 20, -27, 106, 3, -34, 36, 77, 56, 70, -79, 105, -16, 77, -56, 67, -19, -12, 5, + -77, -65, 69, -26, 20, -39, -59, -89, -23, 14, 37, 41, -61, -24, -47, -40, 48, 24, 18, 28, -24, 32, -31, 42, 9, 2, -37, -32, -12, 84, -63, 48, + -16, -67, -14, -86, -15, 23, -40, -20, -18, -20, 58, 39, 6, -82, -5, -2, 11, -96, 38, 60, 43, -14, 74, -101, 65, -96, 12, 47, -9, -45, 56, -8, + 8, 51, 60, 12, -32, -21, -45, 57, -23, 74, -48, -20, 20, 5, 83, -119, -66, 34, 71, 9, 7, -45, 84, 52, 60, -1, -59, 71, -76, -23, 10, -8, + 36, 26, -65, -48, 18, 76, -17, 53, -13, 66, -32, -5, -12, -60, -4, 92, -10, 21, -32, -70, 124, 43, -40, 29, -13, -42, 7, -15, 54, 77, 18, 72, + 36, 4, -3, -4, -28, -19, 2, 27, 47, 21, 57, 66, -72, 13, 19, -52, 67, -69, 50, 72, 18, -17, -18, 68, 81, 15, 34, 77, -20, 31, -11, -4, + -127, 86, -73, -35, 9, -65, 36, -60, 44, -30, 69, -2, -35, 83, -33, 2, 5, -56, -34, 6, -7, 6, -38, 4, -36, 30, -108, 14, -7, 50, -26, 35, + 110, -9, 18, 32, 44, -40, -107, -61, -32, 31, 77, 9, 21, -33, 9, 28, -40, 21, 15, -4, -34, -70, -10, -61, -21, -7, -18, 73, -52, 84, 74, -51, + 1, -44, 103, -2, -41, 48, 10, 71, 42, 66, 24, 94, 12, -92, -97, 64, -5, -61, 18, -5, 14, 47, 39, -60, 70, -27, 27, -44, -12, -34, 27, -36, + -62, 13, -54, 54, 42, 72, 47, 24, 105, 28, 27, 23, -1, -109, -1, -52, 75, 40, -52, 21, -19, 81, 105, 13, -54, 11, 59, 8, 27, 41, 16, 78, + 34, 44, 85, -54, 64, -35, -44, 0, -59, -49, -99, 30, -6, -56, 46, 10, -14, -16, -15, 82, -35, -127, 38, 31, 59, -9, 90, -24, 27, -21, 120, -50, + -35, 39, 29, 39, 75, -33, -24, 5, -110, -37, 41, 35, -29, 62, 31, 47, -2, 61, -44, -21, 54, 25, 34, 50, -93, -68, 45, 67, -55, -91, 5, -108, + 34, 68, -31, -65, -18, 49, 58, -41, -78, 18, 58, -3, 81, -1, 42, -119, 1, 57, 69, -23, 25, 22, -53, 57, -38, -19, 16, 31, -63, 4, -71, 73, + 29, 49, 0, -84, -65, -57, -8, 2, 15, 57, 20, -69, -32, -7, 63, -1, 74, -43, -22, -10, -24, 67, -26, -6, -12, 59, 9, -3, 2, 43, -6, -43, + -19, 8, 100, -1, -24, 48, 5, 11, 16, 0, -2, -37, -9, 96, 13, -73, -26, -10, -3, -50, -23, -16, -1, -11, -127, 3, 34, -44, 37, -4, -52, -108, + -40, 20, 0, -92, -45, -21, 27, 5, -14, 18, -66, 30, -11, 70, -26, -82, -9, -53, 42, 15, 0, -7, 25, -13, 2, -39, -2, 66, 54, 13, -48, 28, + 16, -3, -2, -49, -34, -42, -52, 57, -100, 9, -28, 51, 95, -35, 27, -19, -16, 25, -4, 11, 21, 23, 13, 16, 16, -13, -23, 18, 8, -43, 77, 50, + -12, -5, -25, 18, 8, -74, -17, 20, 34, -20, -23, 22, -1, -51, -2, -25, 7, -23, -12, -10, -7, 3, 20, -22, 41, 16, 56, 26, 20, 30, 40, -24, + -41, -17, -29, -23, 29, 19, -23, 29, 9, -8, -4, -31, -30, 23, -8, -10, -18, -32, -27, -1, 46, 23, 5, -5, -14, -32, 18, -8, -18, -42, 1, 20, + -27, 17, -61, -1, -8, -31, -43, 10, 30, -22, -23, 8, 5, 36, 1, 4, 32, -5, -17, -60, -13, 31, -18, 1, -34, -11, -28, -15, -29, 21, 18, -4, + 4, 55, -37, -17, -32, -21, 66, 20, -10, -16, 36, 12, -30, -17, -75, 6, -2, 23, -8, 31, 30, 43, -3, -31, 16, 31, -10, -36, -5, -18, 33, -16, + -55, -44, -7, 32, 22, -13, 35, 9, -26, 15, 6, 52, 48, -28, -31, -22, 11, -96, 35, 48, -14, -12, -6, -55, 37, 14, 7, -46, 23, 34, -1, -26, + 7, 1, 25, -127, -21, -30, -21, 55, -16, -8, 5, -82, 4, 51, 21, 69, -33, 52, 44, 12, -12, 36, -43, 50, -50, -10, 45, 56, -75, 10, 24, 1, + -18, -4, 16, -6, -19, -5, -19, 26, 27, 18, 28, 73, 66, -13, -16, 31, -5, -36, -23, -33, 25, 30, -27, -38, 17, -11, -1, -41, 37, 25, 21, 35, + -3, 0, 1, 13, 2, -21, -5, 28, -54, -30, 16, 33, 23, -19, -24, 13, 6, -12, 29, -25, 9, -17, 70, 6, -14, 21, -13, -35, 9, 42, 51, 30, + -21, 18, -28, 25, 19, -31, 14, 14, -66, 25, 2, 47, -16, -31, 13, -49, -24, 17, 22, 11, 8, -26, -18, 6, 20, 18, -4, 3, 42, 3, 44, 29, + 17, 8, -26, 31, -23, -11, 29, -20, 33, 37, -21, -23, -44, -60, -20, 24, 11, -13, -64, 3, 36, 28, 16, -3, -42, 3, 20, -14, -28, -19, 14, -31, + 15, 3, 9, 18, 12, 19, -24, 6, -12, 4, -14, 24, 17, 50, 5, -39, -55, 57, 38, -40, -11, 37, -31, -25, 36, 23, -1, 27, -127, -4, 4, -1, + -22, 108, -6, -41, 35, -70, -29, 26, 31, 88, -10, -15, -2, -38, 59, -123, -38, -27, -39, 54, 22, 30, -2, -111, -26, 43, 89, -14, 7, 13, 73, -61, + 7, 25, -48, -77, -13, 37, 34, -49, 12, -71, -9, -56, -34, 42, 40, -51, 9, 29, -7, -106, 18, 29, -9, 60, -75, 53, 36, 13, 35, 13, 6, -82, + 35, 8, 14, -120, -55, -30, 23, -20, 43, 15, -65, 73, -29, 96, -62, -39, 34, 90, 45, 56, -35, -101, 59, 99, 2, -23, 7, 54, 46, 35, 23, 5, + -7, 110, 45, 21, -60, -48, 43, -4, -53, 12, -4, 35, 70, -33, -10, -26, -36, 33, 85, 17, -69, -78, 28, -36, -49, 47, -127, 59, 81, -29, 3, 103, + 39, -19, -53, 9, 43, -89, -6, -13, -13, 33, -23, -14, -8, -1, 37, -3, 9, 1, 52, -79, -93, 34, -54, -24, -37, -38, -18, 14, -7, 43, -25, -58, + -1, -31, -23, 58, -13, -36, 70, -9, 26, -15, -26, 40, 3, 55, -12, 29, 18, 23, -107, -12, -37, 57, 41, 46, 20, 18, 20, 60, 79, 111, 12, -15, + 56, -3, -29, 20, 4, 9, 33, -29, 63, 33, 9, -89, -4, -35, 45, -24, -27, -35, 4, 32, -1, -20, 15, -6, 8, -12, 36, 2, 35, 4, -13, -21, + 34, 10, 52, 71, -4, -6, -122, 66, 11, -33, 9, 18, -31, -24, 69, -61, -4, -7, 21, 38, 24, 5, 30, -61, -34, -86, 1, -29, 3, -1, -28, 39, + 52, 41, 42, -5, -23, 10, 7, 5, 127, 3, 6, -72, -36, 26, -11, 50, 39, 35, -37, -4, -21, 125, 39, 117, 2, -20, 23, 45, -45, -19, -63, 7, + 3, -2, 2, 98, 24, 13, 34, -71, -5, 36, 27, 114, 29, -20, 26, -75, -79, -55, -6, 2, 87, 19, 48, -22, 68, 7, -5, -31, -1, 114, -13, 31, + 45, 30, -14, -58, -18, 69, -49, 1, 41, 8, 64, -19, -13, -45, 83, -69, -2, -23, 51, 20, 30, 27, -38, -42, -16, 41, 15, -40, -11, 59, 52, 20, + 2, 2, -43, -76, -70, 37, 0, 17, -59, -54, 49, -14, -113, -18, 101, 8, -12, 24, 21, -52, -62, 5, -18, 7, -4, -43, 63, -4, 7, 58, -11, 45, + -49, 5, -92, 65, -23, -15, -13, -28, -73, -11, -6, 40, 20, 6, -69, -2, -37, 31, -24, 24, 1, -6, -7, -26, 52, -10, -21, 78, -9, 2, -22, 42, + 64, -78, -20, 42, -1, -9, 57, 19, -23, 56, -53, 60, 34, -53, 50, -16, -17, 3, 40, 2, -8, 38, 11, -96, 2, -5, 34, -4, 63, -52, 72, 45, + -14, -8, 39, 19, -59, -71, -59, -26, -25, 47, -44, -9, 57, -41, -127, -84, -3, 37, -55, 11, -53, 38, -23, -61, -10, 15, 9, 5, -69, 0, -43, 16, + -18, -31, 51, 25, -30, 28, -44, 19, -28, -16, 22, 10, -26, 96, -52, -1, 10, 59, -4, 43, 4, -43, 50, -12, 53, -7, -13, 27, -72, -37, -70, -13, + -47, 8, 17, 57, 50, 7, -14, 16, 34, -30, -13, -42, 1, 27, 36, 39, -10, 19, -20, 41, 59, 9, 32, -103, 67, 25, -43, -5, -32, -26, -17, -38, + 52, -4, 4, -74, 42, -127, 54, 82, 96, 28, 16, -56, -90, 19, -30, -45, 10, 47, 32, 8, 19, -45, 71, -103, 52, 2, 26, 1, -55, -3, -13, -20, + -55, -44, 37, -54, 58, -56, -28, 38, 27, 54, -16, -24, -22, 25, -79, 7, 17, -25, 7, -23, -10, 57, 16, 100, -2, -8, -89, -22, -32, 62, -1, -4, + -73, -1, 46, -62, 51, -34, 6, 72, 13, -52, 73, -39, -29, 9, 26, 118, 43, 1, 24, 60, 57, 4, 16, -81, -34, -22, 66, 23, 62, -19, -16, -37, + -35, 26, -48, -8, -70, -30, 12, -9, 4, 15, 54, -44, -102, 49, 29, -19, 56, 41, -3, 40, 2, 15, 29, 2, 29, 73, 9, 39, 1, 43, 19, -60, + 9, -53, 27, 21, -9, 5, -3, -17, -40, 37, -10, -76, -8, 82, -32, 50, -53, -55, -7, -45, -6, 24, 7, -1, -88, -27, -6, -57, 34, -16, -26, -70, + -5, -30, -17, -91, -33, -73, -33, 12, 6, 2, -34, 21, -35, 93, -1, -127, 14, 58, 75, 65, -13, -49, -9, -40, -48, -37, 10, 109, 87, 12, -45, 14, + 54, 72, 26, -12, -1, 33, 7, -6, -20, -26, -73, -43, 95, -43, -55, -42, -24, -36, 20, 3, -21, 45, 31, 62, 29, -1, -44, 67, 23, -21, -12, 65, + 11, -25, 10, 45, 23, -19, -43, -5, 65, 53, 34, 52, 31, -9, 50, -16, -35, -32, -15, -24, -37, 5, 89, -53, 94, 5, 10, -22, -20, 43, 49, -13, +}; + +// Layer 2 bias. +const float kPitchNetBias2[96] = { + -0x1.a76cdcp-7f, 0x1.ebcc22p-2f, 0x1.24cd2cp-2f, 0x1.7518bcp-2f, -0x1.e21cdcp-4f, 0x1.d3fae8p-3f, + 0x1.9fbb32p-2f, -0x1.930622p-3f, 0x1.990b3p-2f, -0x1.56e32p-5f, -0x1.3b50bp-4f, -0x1.2ac9cp-5f, + 0x1.2337e8p-2f, 0x1.4993c6p-2f, 0x1.154b74p-2f, 0x1.8a9e06p-3f, 0x1.21a78cp-2f, -0x1.f99c52p-3f, + 0x1.539706p-6f, 0x1.d872cap-3f, -0x1.9e676ap-3f, 0x1.19b126p-2f, 0x1.7e12c4p-2f, 0x1.050ce8p-4f, + 0x1.453e7ap-2f, 0x1.0f60bep-2f, 0x1.24c8bap-2f, 0x1.785f0ep-3f, 0x1.59049ep-2f, -0x1.2e7ce2p-3f, + -0x1.d199a6p-3f, 0x1.8234a2p-3f, -0x1.0c4046p-3f, 0x1.e39968p-3f, -0x1.a73004p-3f, 0x1.d21f86p-2f, + 0x1.294bbcp-2f, -0x1.f3f692p-4f, 0x1.780f82p-3f, 0x1.af23fep-3f, 0x1.4dd39ep-3f, 0x1.914646p-3f, + 0x1.e58164p-2f, 0x1.6eeb5ap-2f, -0x1.370d86p-6f, 0x1.8e53acp-2f, 0x1.9cfc68p-2f, 0x1.a0e75ep-5f, + -0x1.04c34ap-5f, 0x1.a3afap-2f, -0x1.5691e4p-3f, 0x1.066e92p-8f, 0x1.385a8cp-2f, 0x1.64c8bp-3f, + -0x1.4c5cd8p-3f, 0x1.90c9bep-3f, -0x1.adbfbp-5f, 0x1.a8a3ep-4f, 0x1.8768cap-2f, -0x1.4e8afep-4f, + -0x1.41c1f4p-5f, 0x1.345516p-2f, 0x1.26022ap-4f, 0x1.bcc83ap-2f, 0x1.6db84cp-2f, 0x1.05c9a4p-2f, + -0x1.a1f57ep-5f, 0x1.72e29p-3f, 0x1.11a786p-3f, 0x1.cabe6ap-2f, 0x1.13cb02p-2f, 0x1.2f3d9p-2f, + -0x1.899a48p-4f, -0x1.61ee3cp-4f, -0x1.b70c8cp-6f, 0x1.413f24p-3f, 0x1.3baedcp-3f, 0x1.81f92cp-2f, + 0x1.997556p-2f, 0x1.0d4b42p-2f, 0x1.28b7fap-2f, 0x1.22bfb6p-2f, 0x1.6d62bap-4f, 0x1.028696p-2f, + 0x1.44eafep-2f, -0x1.ff298cp-3f, 0x1.d87492p-2f, 0x1.7e1594p-2f, -0x1.30dac8p-3f, 0x1.449b9ep-2f, + 0x1.adf3dep-3f, 0x1.1b9bdcp-4f, 0x1.37e8dcp-3f, 0x1.eb7422p-5f, 0x1.e16774p-2f, 0x1.78de2ep-3f, +}; + +// Layer 2 output scale. +const float kPitchNetScale2[96] = { + 0x1.e70882p-10f, 0x1.8e09bp-10f, 0x1.053506p-9f, 0x1.7eeb4ap-10f, 0x1.da3d62p-10f, 0x1.6060d4p-10f, + 0x1.7c3ebep-10f, 0x1.f7188ep-10f, 0x1.261dd8p-10f, 0x1.aea9a8p-10f, 0x1.91736p-9f, 0x1.016384p-9f, + 0x1.f3ec16p-10f, 0x1.56e96ep-10f, 0x1.c0094p-10f, 0x1.92091ep-10f, 0x1.6552bep-10f, 0x1.78dd48p-10f, + 0x1.7d3d1p-11f, 0x1.49420ap-9f, 0x1.0a4a8ep-9f, 0x1.7319a6p-10f, 0x1.7bc296p-10f, 0x1.a852aap-10f, + 0x1.4e8e36p-10f, 0x1.ae19dep-10f, 0x1.4657dcp-10f, 0x1.ecdfb2p-10f, 0x1.6d6acap-10f, 0x1.10b5bcp-9f, + 0x1.96b984p-10f, 0x1.597fb8p-9f, 0x1.319f6p-9f, 0x1.18af0ep-9f, 0x1.363c42p-9f, 0x1.05293ep-9f, + 0x1.7cca2ap-10f, 0x1.8c4c84p-10f, 0x1.ad7dccp-10f, 0x1.e8601cp-10f, 0x1.751622p-10f, 0x1.9e816cp-10f, + 0x1.2eb1a6p-10f, 0x1.895f52p-10f, 0x1.4e7e6ap-9f, 0x1.00f68ap-9f, 0x1.807792p-10f, 0x1.161246p-9f, + 0x1.02bf1p-9f, 0x1.e03662p-10f, 0x1.0c6916p-9f, 0x1.708476p-10f, 0x1.aa5f26p-10f, 0x1.ec5c16p-10f, + 0x1.939162p-10f, 0x1.c6ea54p-10f, 0x1.a7a058p-10f, 0x1.b19602p-10f, 0x1.6bd6b8p-10f, 0x1.d0e3b4p-10f, + 0x1.08e43ep-9f, 0x1.8f9a08p-10f, 0x1.070cdep-9f, 0x1.c04406p-10f, 0x1.0d9126p-10f, 0x1.9438aap-10f, + 0x1.c8717ap-10f, 0x1.14799ap-9f, 0x1.01f558p-9f, 0x1.feaa66p-10f, 0x1.a7ac7cp-10f, 0x1.2a287p-10f, + 0x1.b45246p-10f, 0x1.ca7a7p-10f, 0x1.0bf08cp-9f, 0x1.a9999p-10f, 0x1.b4df98p-10f, 0x1.ace112p-11f, + 0x1.748778p-10f, 0x1.6720e6p-10f, 0x1.72c4c8p-10f, 0x1.888e9ep-10f, 0x1.aef668p-9f, 0x1.e31522p-10f, + 0x1.0edc1p-9f, 0x1.31f4c8p-10f, 0x1.6cd23cp-10f, 0x1.d4edcep-11f, 0x1.349824p-9f, 0x1.7330d6p-9f, + 0x1.5796e8p-9f, 0x1.c5ac2cp-10f, 0x1.a69b8ap-10f, 0x1.1adfe8p-9f, 0x1.ad475p-10f, 0x1.e012ep-10f, +}; + +// Layer 3 weights [121][96]. +const int8_t kPitchNetWeights3[121 * 96] = { + 4, -69, -42, -66, -81, -6, -29, -55, -15, -19, 7, -53, 38, -59, 54, 12, -106, 2, 1, 10, -34, -19, 3, 7, -52, -8, -50, -30, -15, 40, 3, 14, + -18, 27, 5, 35, -32, -12, -65, 47, -7, -45, -29, -100, 35, -7, 17, 45, -55, 20, -75, -24, 3, 59, 30, 28, 4, -84, -20, 16, -57, -20, -70, -34, + -37, 26, -84, -9, -33, -5, -31, -127, -15, -65, -25, -25, -22, -19, -56, 9, -36, 14, -26, -1, 37, 7, -16, 25, -59, 14, -33, 35, -9, 52, 25, -60, + 11, -65, -51, -70, -82, 11, -37, -67, -21, -23, -3, -75, 35, -66, 55, 16, -125, -1, 5, 12, -50, -32, -4, 44, -48, 11, -60, -48, 11, 57, 29, 22, + 5, 19, 13, 35, 1, -18, -75, 37, -15, -72, -15, -120, 43, -2, 24, 59, -27, 28, -84, -41, -9, 64, 56, 23, 15, -93, -25, 20, -54, -12, -61, -48, + -39, 41, -78, -7, -54, -1, -42, -127, -14, -60, -52, -33, -45, -7, -86, -11, -29, 25, -26, -10, 25, 6, -29, 6, -91, 3, -51, 47, -34, 52, 16, -68, + 32, -58, -49, -58, -95, -23, -38, -56, -22, -29, -2, -86, 14, -91, 74, 2, -124, 6, 9, 18, -65, -31, -10, 21, -35, 4, -60, -40, -14, 52, 33, 13, + -2, 13, 3, 36, -31, -11, -70, 36, -35, -62, -12, -127, 43, 35, 32, 67, -11, 29, -82, -55, -9, 40, 58, 27, 38, -94, -19, 23, -14, -36, -58, -47, + -46, 26, -75, -1, -47, -18, -47, -114, 5, -72, -57, -44, -46, -25, -89, -11, -7, 30, -24, -15, 26, -17, -47, 45, -67, 10, -73, 56, -30, 45, 15, -56, + 24, -42, -46, -53, -83, -58, -47, -59, -24, -32, -10, -102, -4, -73, 49, 12, -127, 23, 7, 7, -83, -48, -21, 47, -48, 23, -54, -41, -22, 42, 39, -7, + 17, 1, 8, 43, -10, -7, -84, 30, -32, -69, -6, -115, 44, 18, 28, 60, 13, 48, -70, -55, -10, 69, 61, 23, 34, -84, -4, 14, 0, -32, -43, -74, + -60, 23, -45, 13, -30, -16, -67, -74, 15, -71, -59, -70, -49, -57, -70, -25, 6, 32, -39, -29, 13, -12, -35, 17, -36, 7, -63, 53, -46, 33, 23, -68, + -33, -29, -61, -51, -88, -83, -35, -58, -28, -34, -24, -121, -16, -79, 35, 15, -127, 35, 0, -2, -98, -31, -26, 40, -55, 15, -41, -39, -31, 43, 43, -2, + 25, 3, 0, 52, -4, -5, -118, 13, -27, -56, -2, -109, -5, 42, 20, 56, 43, 39, -71, -63, -12, 81, 64, 27, 29, -70, 0, -2, 15, -36, -55, -81, + -76, 2, -40, -3, -18, -4, -87, -76, 23, -90, -53, -80, -62, -53, -48, -16, 10, 5, -49, -30, 27, 0, -53, -5, -33, 24, -74, 87, -83, 25, -1, -83, + -63, -39, -53, -21, -68, -86, -42, -52, -48, -31, -37, -121, -28, -77, 7, -1, -127, 43, -6, -7, -107, -34, -32, 34, -48, 2, -30, -37, -1, 41, 34, -5, + 29, 31, 7, 47, -13, 9, -107, 22, -57, -51, 0, -110, -46, 26, 24, 48, 45, 52, -63, -49, -3, 60, 67, 27, 34, -61, 15, 6, 22, -45, -57, -77, + -55, -17, -38, 6, 9, 15, -78, -61, 26, -81, -50, -64, -54, -63, 0, -10, -1, -22, -41, -20, 9, -9, -45, -9, -25, 27, -91, 79, -106, 34, 14, -73, + -63, -46, -54, -28, -73, -92, -34, -46, -43, -21, -43, -127, -45, -52, -2, -15, -118, 31, -7, -3, -108, -49, -18, 11, -38, -5, -32, -24, -14, 27, 22, -12, + 33, 48, -17, 39, -18, 14, -94, 3, -56, -47, -7, -103, -37, 52, 17, 63, 32, 40, -63, -32, -20, 67, 64, 17, 64, -54, 18, 14, 28, -28, -63, -74, + -43, -42, -34, 1, 30, 4, -67, -50, 27, -73, -47, -40, -27, -51, 23, -23, -21, -50, -34, -22, 21, -20, -54, -4, -4, 38, -113, 48, -123, 27, 10, -70, + -38, -35, -37, -27, -43, -86, -6, -21, -35, -7, -49, -85, -54, -22, -26, -33, -59, 33, -3, -9, -78, -28, -20, 6, -62, 8, -14, -9, -11, 7, 8, -19, + 38, 40, -15, 30, -1, 23, -73, -5, -41, -32, -10, -90, -31, 28, 1, 51, 28, 13, -63, -30, -41, 64, 54, 6, 37, -50, 31, 8, 11, -23, -53, -65, + -41, -30, -28, 5, 24, 20, -48, -49, 11, -56, -22, -28, -3, -15, 23, -7, -24, -64, -31, -22, 22, -5, -63, -16, -5, 27, -98, 46, -127, 18, 18, -69, + -13, -39, -24, -35, -58, -75, -3, 5, -17, -5, -52, -57, -79, -32, -41, -55, -44, 22, 0, -22, -63, -26, -16, -17, -72, 0, -14, 7, -4, 2, -1, -18, + 40, 36, -5, 35, 4, 34, -72, -4, -13, -34, -5, -89, -26, 24, -8, 49, 19, -3, -65, -25, -46, 55, 50, -13, 40, -44, 26, 10, 9, -24, -44, -50, + -41, -28, -30, 6, 36, 9, -51, -51, 9, -54, -9, -9, 17, 1, 19, -1, -23, -68, -24, -21, 14, -5, -64, -16, 3, 19, -104, 42, -127, 13, 29, -74, + 12, -60, -24, -73, -59, -75, -20, 22, -9, -6, -60, -36, -90, -34, -63, -65, -41, 12, 4, -45, -42, -24, -11, -32, -86, -6, -13, -8, -13, 20, -9, -24, + 38, 34, -11, 51, 10, 39, -75, 2, 1, -46, -4, -96, -52, 42, -13, 42, 15, -2, -78, -7, -47, 51, 44, -13, 31, -44, 27, 18, 15, -30, -43, -42, + -69, -29, -26, 9, 49, 0, -56, -52, -5, -61, -7, 10, 19, 12, 31, -22, -21, -82, -27, -23, 2, -2, -75, -16, -1, 20, -127, 38, -124, 5, 28, -76, + 28, -67, -11, -69, -64, -81, -18, 22, 3, -6, -45, -9, -80, -15, -61, -74, -26, 1, 5, -65, -22, -3, -4, -31, -76, -15, -3, -17, -25, 17, -19, -19, + 41, 25, -17, 51, -1, 29, -54, -6, 23, -39, -28, -82, -47, 49, -31, 33, 27, 4, -71, -15, -32, 36, 43, -22, 12, -21, 28, 16, 6, -25, -39, -37, + -49, -24, -30, 8, 46, 6, -46, -48, -11, -59, -1, 0, 3, 4, 27, -15, -23, -72, -28, -18, 8, -17, -80, -1, -12, 18, -116, 26, -127, -10, 33, -73, + 42, -80, -8, -67, -61, -85, -30, 29, 14, -9, -38, 3, -73, -20, -81, -83, -36, -2, 4, -69, -6, 15, -14, -44, -69, -34, -3, -20, -38, 22, -34, -21, + 48, 17, -25, 54, -16, 32, -55, 7, 43, -51, -9, -78, -70, 56, -45, 31, 31, 16, -102, -11, -30, 33, 45, -43, 0, -20, 29, 13, 6, -28, -33, -37, + -40, -44, -44, 11, 52, -2, -50, -71, -10, -54, 2, -13, 3, 9, 42, -3, -22, -77, -22, -16, -3, -24, -71, -22, -19, 17, -127, 17, -126, -35, 32, -74, + 37, -82, -6, -33, -36, -83, -13, 24, 11, -17, -34, 16, -56, -25, -79, -61, -44, -4, 1, -44, 0, 24, -9, -56, -52, -29, 0, -13, -43, 12, -50, -16, + 61, -4, -37, 40, -41, 36, -52, 15, 64, -42, -15, -73, -70, 42, -39, 39, 32, 24, -102, -17, -31, 22, 37, -63, -31, -12, 31, 8, -16, -20, -20, -27, + -22, -46, -46, 6, 37, -1, -43, -53, -3, -42, 10, -12, 0, 26, 22, 8, -20, -68, -18, -13, -6, -4, -64, -38, -23, 21, -102, 19, -127, -33, 37, -76, + 30, -79, -21, -26, -32, -101, -9, 40, 21, -29, -26, 25, -54, -33, -80, -43, -58, -5, -11, -29, -4, 21, -8, -47, -36, -26, 2, -36, -65, 8, -69, -4, + 73, -19, -47, 49, -63, 38, -58, 25, 65, -39, -13, -62, -88, 37, -48, 28, 45, 33, -97, -14, -54, 23, 42, -50, -57, 2, 21, 4, -28, -16, -15, -21, + -17, -60, -50, -4, 43, -7, -52, -68, 1, -33, 9, -25, 3, 31, 42, 4, -19, -66, -13, 1, -3, 8, -52, -65, -31, 32, -112, 6, -127, -16, 30, -84, + 26, -74, -25, -6, -36, -102, -1, 30, 36, -27, -5, 42, -39, -27, -72, -26, -55, -14, -9, -11, 4, 15, -11, -43, -26, -19, -8, -12, -63, -6, -69, 14, + 73, -21, -43, 29, -69, 20, -53, 29, 44, -52, 8, -79, -89, 43, -38, 34, 38, 34, -75, -15, -45, 26, 34, -54, -64, 2, 16, -5, -39, -13, -13, -8, + -17, -62, -36, -9, 36, -14, -35, -50, -9, -14, 5, -37, 6, 19, 21, -5, -26, -48, -27, 5, 5, 0, -51, -59, -31, 29, -109, 6, -127, -9, 28, -64, + 25, -79, -40, 5, -38, -108, -18, 35, 36, -25, 10, 52, -26, -24, -65, -8, -52, -27, -6, -20, 4, 4, -13, -26, -16, -18, -8, 3, -51, -11, -82, 17, + 77, -27, -43, 36, -66, 7, -52, 43, 31, -67, 12, -90, -115, 34, -27, 31, 33, 29, -55, -18, -60, 34, 28, -61, -54, 5, -5, 5, -49, -16, -19, -4, + -12, -67, -34, -20, 39, -18, -36, -47, -14, -1, -9, -59, 14, 12, 34, -20, -25, -58, -31, 13, 3, 6, -42, -63, -31, 38, -116, -4, -127, -6, 26, -57, + 29, -69, -43, 14, -40, -89, -26, 26, 29, -18, 15, 50, -9, -21, -55, 10, -39, -22, 1, -26, 8, 8, -10, -16, -2, -24, -17, -10, -33, -14, -77, 20, + 76, -34, -36, 29, -51, -10, -46, 46, 13, -76, 4, -84, -96, 21, -9, 29, 29, 22, -38, -24, -64, 35, 14, -55, -34, 6, -19, 11, -55, -5, -22, -10, + -5, -71, -36, -25, 36, -25, -30, -49, -30, 13, -21, -75, 11, 24, 34, -25, -22, -50, -37, 18, 0, 4, -40, -64, -37, 37, -95, -5, -127, -3, 39, -55, + 35, -74, -50, 10, -39, -110, -37, 26, 59, -3, 27, 51, 4, -18, -57, 13, -27, -27, 0, -35, 14, 0, -15, 2, -3, -33, -20, -31, -19, -15, -77, 27, + 64, -42, -37, 17, -58, -35, -41, 51, -1, -92, 23, -93, -74, 15, -7, 34, 30, 13, -33, -19, -65, 52, 6, -58, -23, 6, -34, 7, -55, 1, -32, 4, + -20, -78, -49, -31, 41, -47, -17, -41, -45, 27, -31, -92, 7, -10, 27, -17, -23, -25, -44, 16, 1, 6, -31, -78, -38, 40, -91, -5, -127, 0, 34, -56, + 29, -62, -45, 7, -42, -112, -28, 29, 55, 5, 17, 47, 10, -22, -49, 29, -13, -32, 3, -31, 5, -12, -20, 12, 4, -38, -20, -27, 8, -21, -72, 24, + 61, -42, -25, 7, -60, -63, -34, 37, -10, -86, 25, -73, -55, 11, 1, 37, 21, -4, -27, -14, -63, 51, -2, -56, -13, 17, -32, 17, -51, 11, -31, 8, + -26, -71, -48, -22, 38, -53, -23, -47, -59, 35, -31, -92, -1, -4, 25, -6, -16, -14, -33, -5, 9, 21, -33, -71, -48, 40, -76, -7, -127, 1, 28, -55, + 36, -57, -47, 2, -39, -108, -27, 20, 53, 3, 13, 39, 16, -31, -44, 32, -3, -34, 7, -18, 12, -15, -18, 6, 10, -35, -27, -31, 23, -28, -49, 30, + 50, -34, -11, -4, -68, -70, -32, 30, -32, -88, 18, -57, -47, 2, -10, 39, 17, -13, -12, -13, -77, 44, -1, -60, -8, 11, -35, 18, -53, 26, -33, -2, + -28, -49, -62, -15, 37, -56, -27, -56, -60, 41, -33, -88, -13, 13, 37, -1, -19, -5, -35, -14, -1, 16, -36, -71, -55, 37, -53, -10, -127, -1, 37, -58, + 32, -43, -52, 3, -41, -107, -35, 12, 45, 1, 6, 40, 15, -38, -38, 32, 11, -34, 8, -8, 7, -31, -12, 7, 19, -34, -27, -44, 29, -42, -33, 35, + 48, -23, 1, -26, -82, -69, -30, 11, -59, -73, 0, -41, -42, 6, -10, 35, 20, -21, -8, -6, -88, 40, 5, -63, -11, 17, -27, 21, -49, 33, -32, 0, + -36, -27, -65, -4, 30, -54, -28, -59, -60, 48, -36, -71, -16, 26, 37, -7, -25, -10, -35, -25, 7, 23, -32, -56, -59, 42, -47, -15, -127, -5, 38, -62, + 48, -37, -59, 1, -31, -105, -49, 7, 49, 1, 11, 29, 21, -43, -40, 28, 28, -31, 8, 1, 6, -45, -1, 5, 12, -35, -34, -54, 28, -50, -24, 32, + 44, -18, 8, -40, -97, -54, -36, -3, -77, -68, 14, -28, -44, 9, -25, 47, 28, -31, -6, -5, -93, 42, -4, -64, -7, 14, -33, 23, -39, 31, -33, 2, + -56, -9, -88, 5, 21, -46, -28, -57, -62, 53, -45, -53, -26, 13, 41, -6, -31, -5, -44, -23, 4, 21, -18, -38, -51, 33, -41, -14, -127, -13, 25, -67, + 58, -34, -63, -1, -38, -113, -72, -4, 48, -1, 16, 17, 26, -48, -37, 11, 34, -26, 5, 7, -3, -31, 6, 4, 4, -35, -44, -91, 20, -41, -22, 29, + 39, 1, 14, -53, -93, -36, -37, -12, -91, -55, 13, -16, -33, 10, -33, 51, 35, -40, -7, 0, -93, 32, -21, -45, -8, 10, -23, 26, -40, 34, -28, -4, + -61, 10, -97, 9, 9, -41, -22, -46, -57, 57, -51, -32, -31, 18, 35, -5, -33, -7, -43, -14, -5, 13, -16, -16, -46, 31, -29, -9, -127, -20, 25, -74, + 47, -27, -58, -1, -36, -127, -79, -11, 40, -10, 11, 0, 13, -52, -19, 6, 38, -24, 3, 17, -12, -16, 10, -2, -5, -35, -44, -72, 3, -27, -18, 17, + 34, 16, 27, -57, -77, -21, -35, -15, -76, -55, 13, 5, -18, 12, -28, 47, 29, -53, 1, 7, -97, 26, -40, -55, -15, 15, -1, 25, -34, 25, -17, 14, + -53, 8, -93, 19, -4, -32, -20, -43, -41, 56, -45, -9, -30, 6, 29, -8, -26, -7, -33, -21, -12, 17, -14, 0, -41, 34, -29, -7, -122, -28, 27, -78, + 45, -23, -49, -4, -25, -118, -76, -22, 36, -6, 9, -16, 5, -52, -13, 0, 44, -24, 5, 21, -26, -5, 14, 10, -17, -29, -46, -104, -14, -18, -15, 11, + 30, 27, 34, -58, -71, -4, -39, -28, -79, -62, 19, 19, -3, 24, -27, 44, 34, -69, 5, 7, -91, 21, -40, -53, -18, 21, 12, 20, -42, 17, -9, 24, + -53, 7, -77, 26, -11, -28, -19, -35, -33, 53, -52, 6, -34, 0, 22, -21, -24, -12, -27, -29, -19, 15, -10, 11, -39, 42, -27, -14, -127, -36, 15, -93, + 53, -14, -47, -2, -8, -121, -81, -36, 23, 5, 12, -24, 21, -36, -29, -21, 56, -21, 2, 22, -51, 12, 22, 12, -32, -21, -55, -127, -13, -11, -8, 1, + 29, 43, 36, -58, -71, 8, -49, -38, -89, -73, 21, 30, 5, 29, -31, 40, 41, -84, 7, 7, -74, 7, -29, -56, -22, 20, 26, 18, -44, 2, -9, 25, + -49, 18, -67, 30, -26, -25, -19, -29, -22, 48, -60, 15, -40, 2, 9, -29, -23, -32, -29, -28, -29, 5, -3, 15, -38, 43, -24, -20, -123, -41, 13, -113, + 54, -9, -53, -6, 9, -123, -80, -52, 10, 12, 17, -30, 33, -25, -42, -30, 56, -18, -4, 22, -59, 23, 26, 10, -42, -12, -69, -111, -8, -6, 3, -15, + 32, 53, 45, -50, -67, 20, -56, -43, -89, -78, 31, 39, 11, 26, -29, 32, 44, -92, 14, -1, -55, -11, -31, -59, -33, 28, 32, 8, -43, -9, -24, 16, + -59, 21, -79, 40, -41, -18, -29, -13, -14, 41, -62, 18, -36, 6, 14, -42, -23, -43, -29, -21, -34, -9, 6, 9, -38, 44, -9, -23, -116, -51, 12, -127, + 50, 1, -66, -3, 20, -111, -77, -60, 5, 0, 20, -34, 23, -7, -39, -34, 43, -17, -4, 22, -53, 24, 32, 11, -31, -6, -74, -101, -8, 0, 9, -31, + 30, 53, 52, -45, -61, 24, -56, -52, -99, -82, 36, 42, 13, 40, -24, 30, 43, -92, 16, -9, -54, -32, -45, -50, -54, 48, 40, -12, -40, -22, -45, 22, + -53, 12, -91, 46, -54, -7, -44, -19, -8, 41, -89, 28, -25, 4, 14, -63, -21, -46, -22, -23, -46, -5, 13, -1, -33, 53, 5, -31, -111, -59, 4, -127, + 44, 20, -86, -2, 35, -109, -84, -70, -6, -14, 27, -35, 29, 9, -51, -51, 38, -11, -6, 23, -46, 33, 29, 7, -28, 3, -90, -106, -5, 12, 15, -57, + 29, 59, 56, -44, -60, 28, -59, -56, -102, -101, 49, 40, 21, 38, -25, 27, 31, -95, 16, -23, -60, -56, -53, -45, -78, 56, 51, -27, -36, -40, -64, 21, + -54, 3, -102, 50, -65, 4, -63, -22, 1, 47, -104, 28, -22, 8, 17, -67, -21, -44, -18, -34, -58, -1, 21, -11, -27, 59, 17, -39, -102, -70, 5, -127, + 38, 36, -104, -1, 49, -96, -90, -72, -2, -7, 31, -28, 34, 20, -57, -68, 33, -10, -8, 18, -37, 45, 21, -1, -27, 5, -118, -100, -3, 35, 21, -88, + 27, 59, 52, -42, -65, 30, -57, -62, -99, -117, 52, 27, 34, 37, -39, 16, 14, -87, 24, -44, -79, -77, -61, -39, -86, 62, 53, -51, -32, -53, -77, 3, + -64, -11, -93, 45, -78, 11, -73, -1, 30, 48, -120, 27, -19, 29, 23, -58, -20, -42, -11, -39, -78, -3, 25, -13, -21, 65, 35, -48, -92, -79, 11, -127, + 33, 56, -114, 10, 48, -98, -90, -46, -4, 5, 33, -21, 32, 25, -59, -82, 25, -8, -3, 6, -26, 48, 16, -12, -28, 0, -125, -82, 5, 47, 22, -106, + 29, 59, 38, -38, -61, 25, -53, -63, -81, -127, 54, 14, 42, 26, -54, 2, -4, -68, 36, -58, -98, -92, -58, -42, -74, 64, 50, -73, -27, -50, -81, -3, + -54, -24, -68, 34, -90, 25, -82, -7, 57, 50, -113, 18, -26, 38, 14, -31, -14, -52, -4, -52, -95, 7, 26, -7, -16, 61, 36, -62, -70, -77, 14, -118, + 28, 61, -117, 23, 47, -87, -76, -16, 12, 20, 34, -6, 22, 23, -60, -82, 19, -2, -2, -8, -23, 47, 19, -26, -19, -13, -127, -77, 6, 55, 22, -103, + 30, 56, 22, -35, -61, 17, -43, -64, -70, -115, 51, 5, 48, 15, -62, -11, -15, -48, 37, -68, -104, -97, -55, -24, -54, 69, 43, -97, -20, -34, -84, -5, + -45, -43, -51, 30, -101, 39, -85, 4, 69, 43, -118, 8, -25, 27, 2, -6, -8, -56, 5, -65, -98, 16, 25, 0, -18, 57, 39, -58, -51, -78, 12, -109, + 21, 61, -102, 31, 48, -69, -52, 12, 17, 20, 28, 8, 14, 14, -54, -68, 12, 1, -8, -16, -21, 40, 9, -49, -19, -25, -118, -72, 11, 50, 20, -80, + 30, 54, 5, -32, -56, 4, -36, -60, -63, -108, 44, -8, 59, 7, -56, -22, -18, -33, 35, -54, -104, -85, -52, -8, -40, 66, 31, -102, -15, -25, -83, -2, + -36, -55, -28, 20, -87, 36, -85, 5, 68, 32, -127, -1, -27, 21, -10, 13, -9, -70, 7, -79, -81, 29, 27, 31, -23, 53, 33, -76, -27, -71, 1, -90, + 21, 44, -86, 28, 50, -34, -27, 28, 27, 12, 18, 18, 2, 8, -39, -46, 5, 6, -15, -21, -21, 20, -1, -61, -16, -35, -97, -50, 9, 41, 21, -55, + 23, 45, -11, -30, -35, -3, -27, -47, -56, -105, 25, -16, 58, -5, -46, -29, -20, -21, 26, -33, -98, -59, -43, 1, -26, 53, 23, -90, -11, -11, -70, -8, + -21, -55, -6, 13, -68, 30, -78, 13, 62, 14, -127, -15, -30, 23, -16, 14, -6, -70, 11, -82, -57, 32, 20, 38, -28, 49, 36, -69, -10, -64, 0, -77, + 20, 33, -85, 20, 53, -3, -15, 35, 42, 3, 14, 27, -11, 4, -24, -28, -1, 13, -30, -31, -24, -2, 2, -76, -10, -40, -79, -49, 7, 41, 20, -45, + 13, 46, -27, -30, -25, -7, -22, -35, -50, -112, 15, -21, 55, -23, -47, -40, -27, -21, 20, -17, -90, -38, -31, 14, -19, 48, 21, -87, -10, 0, -65, 3, + -7, -58, 1, 7, -60, 34, -78, 15, 60, 4, -127, -29, -43, 5, -16, 11, -6, -65, 10, -82, -40, 33, 20, 38, -34, 52, 37, -56, -4, -63, 0, -77, + 28, 28, -87, 15, 51, 6, -10, 35, 46, 1, 7, 33, -19, -2, -7, -13, -10, 20, -24, -37, -22, -20, 6, -80, -14, -46, -70, -48, 15, 44, 19, -42, + 9, 50, -48, -35, -23, -6, -23, -26, -42, -118, 4, -30, 52, -39, -47, -54, -33, -23, 27, -7, -86, -25, -17, 24, -13, 43, 18, -81, -11, 8, -56, -1, + 9, -57, 12, -5, -59, 33, -69, 17, 57, -3, -127, -45, -57, 6, -6, -1, -3, -55, 4, -89, -29, 27, 27, 28, -34, 54, 42, -55, 6, -64, 5, -85, + 35, 22, -91, 12, 50, 2, -3, 35, 52, -2, 6, 39, -25, -7, 7, 2, -11, 24, -2, -36, -25, -44, 16, -85, -14, -52, -60, -42, 12, 46, 15, -40, + 1, 52, -76, -44, -22, -6, -23, -16, -26, -122, 4, -30, 56, -50, -43, -62, -37, -36, 24, -4, -70, -7, 1, 32, -8, 36, 20, -73, -15, 20, -53, 8, + 15, -55, 19, -25, -58, 29, -63, 15, 47, -9, -127, -55, -70, -7, -8, -12, -6, -39, -5, -94, -5, 27, 31, 24, -38, 54, 36, -64, 22, -65, -1, -84, + 41, 14, -86, 9, 40, 5, 9, 24, 47, 0, 3, 40, -25, -9, 12, 11, -11, 20, 11, -32, -28, -54, 25, -70, -8, -61, -41, -20, 0, 36, 10, -25, + -5, 49, -96, -53, -25, -3, -19, -8, -16, -104, 0, -25, 54, -52, -29, -64, -31, -50, 18, -6, -41, 5, 9, 34, -8, 20, 21, -54, -17, 30, -46, 9, + 13, -40, 24, -39, -57, 23, -48, 14, 33, -10, -127, -55, -76, -1, -8, -33, -3, -26, -11, -94, 20, 20, 26, 23, -42, 43, 30, -56, 23, -63, -1, -69, + 38, 0, -79, 7, 36, 1, 9, 24, 33, 3, 1, 35, -16, -17, 11, 12, -10, 22, 17, -28, -32, -47, 26, -48, 0, -73, -18, 0, 16, 41, 9, -15, + -12, 48, -112, -56, -30, -7, -10, -1, -4, -90, 2, -21, 49, -51, -6, -68, -28, -65, 13, -10, -24, 12, 13, 30, -10, 7, 14, -25, -17, 29, -47, 21, + 17, -28, 25, -58, -55, 15, -39, -3, 24, -7, -127, -52, -77, 2, 1, -52, 0, -20, -14, -95, 33, 16, 27, 3, -49, 28, 25, -49, 34, -64, -5, -65, + 43, -20, -76, 7, 28, 0, 17, 18, 22, 9, -10, 30, -4, -17, 16, 8, -7, 15, 14, -17, -27, -42, 28, -29, 10, -82, 2, 10, 11, 37, 11, -6, + -19, 43, -109, -53, -29, -11, 0, -1, 0, -74, -10, -14, 44, -47, 5, -71, -19, -72, 17, -13, -5, 7, 15, 32, -14, -7, 4, -8, -26, 35, -53, 14, + 21, -20, 24, -70, -52, 19, -38, -4, 18, -1, -127, -44, -77, 19, 5, -53, 7, -17, -14, -89, 27, 5, 16, 3, -58, 13, 28, -27, 23, -67, 5, -57, + 44, -43, -80, 1, 27, 5, 15, 20, 18, 14, -15, 28, 11, -25, 13, 1, -14, 7, 19, -3, -24, -42, 28, -8, -5, -91, 16, 22, 15, 44, 15, -7, + -32, 38, -106, -55, -38, -17, 9, -2, 7, -74, 1, -18, 50, -48, 20, -83, -18, -84, 14, -17, 8, 7, 18, 31, -20, -10, -14, 5, -34, 27, -73, 21, + 7, -13, 28, -83, -47, 11, -31, -1, 18, 4, -127, -41, -78, 24, 19, -40, 13, -24, -16, -98, 40, -1, 23, 5, -72, 7, 27, -13, 31, -77, -3, -52, + 47, -69, -89, 4, 30, 0, 13, 21, 12, 16, -22, 27, 26, -30, 11, -4, -21, 8, 35, 11, -25, -43, 32, 11, 4, -96, 31, 26, 18, 55, 23, -9, + -51, 34, -94, -53, -55, -30, 13, -4, 16, -70, 6, -17, 51, -53, 30, -99, -19, -98, 16, -21, 28, 11, 24, 42, -28, -6, -35, 11, -44, 21, -95, 33, + 7, -2, 30, -93, -47, 14, -39, -5, 16, 14, -127, -29, -84, 15, 21, -22, 16, -28, -26, -107, 35, -4, 28, -3, -89, -1, 14, -2, 31, -81, -7, -46, + 49, -91, -108, 11, 34, -13, 14, 22, 1, 20, -32, 25, 44, -28, 29, 0, -40, 2, 44, 26, -28, -54, 31, 21, -6, -87, 45, 43, 7, 61, 27, -29, + -76, 25, -78, -59, -59, -55, 23, -8, 30, -62, 8, -14, 58, -55, 37, -120, -20, -109, 25, -27, 41, 9, 32, 43, -33, 1, -68, 9, -55, 11, -115, 36, + 10, 14, 37, -99, -49, 14, -44, -3, 19, 27, -127, -35, -87, 29, 18, 0, 20, -34, -48, -118, 36, -21, 26, 0, -105, -7, 4, 8, 28, -85, -3, -36, + 41, -87, -113, 18, 40, 17, 10, 20, -6, 17, -27, 37, 54, -27, 21, 5, -57, -9, 43, 32, -38, -56, 31, 45, 8, -46, 54, 42, -17, 57, 26, -47, + -98, 13, -56, -57, -78, -80, 27, -11, 15, -50, 1, -9, 57, -51, 35, -127, -23, -103, 17, -28, 61, 19, 43, 51, -26, 5, -69, 10, -53, -3, -109, 37, + 1, 34, 34, -85, -47, 17, -41, -8, 14, 40, -124, -24, -86, 34, 14, 13, 15, -28, -76, -118, 26, -33, 27, 8, -102, -16, -12, 14, 12, -89, 2, -20, + 30, -67, -111, 23, 35, 2, 4, 12, -5, 11, -22, 40, 53, -26, 29, 12, -65, -32, 31, 31, -39, -58, 37, 31, 2, -8, 46, 43, -43, 47, 22, -50, + -98, 3, -27, -61, -78, -105, 29, -12, 20, -40, -4, 5, 49, -38, 27, -127, -29, -93, 13, -27, 74, 18, 44, 57, -18, 0, -54, 12, -41, -28, -97, 40, + -2, 36, 29, -69, -39, 22, -33, -2, 21, 48, -106, -12, -87, 31, 5, 26, 8, -18, -82, -118, 19, -33, 17, 22, -89, -23, -16, 23, 12, -95, 13, 1, + 19, -54, -113, 28, 30, -19, -3, 7, -3, 5, -22, 33, 54, -27, 30, 20, -78, -58, 19, 32, -40, -65, 39, 28, -12, 16, 33, 52, -60, 42, 24, -56, + -93, -2, 3, -67, -75, -127, 32, -17, 24, -27, -10, 17, 37, -26, 20, -122, -27, -81, 13, -24, 71, 20, 42, 55, -8, -9, -39, 16, -37, -49, -86, 35, + 9, 33, 30, -57, -36, 28, -32, 7, 31, 54, -98, -8, -98, 33, -6, 30, 1, -9, -74, -127, 8, -32, 6, 23, -68, -30, -9, 33, 18, -106, 22, 14, + 0, -36, -97, 23, 37, -2, -2, 8, -3, -11, -15, 18, 54, -39, 9, 26, -78, -76, 9, 32, -44, -68, 26, 33, -24, 36, 19, 61, -62, 37, 31, -63, + -81, -12, 27, -66, -77, -124, 29, -23, 17, -16, 6, 18, 24, -11, 16, -106, -11, -59, -2, -22, 52, 33, 36, 39, 3, -11, -27, 20, -25, -77, -72, 29, + -4, 34, 32, -43, -34, 18, -25, 10, 34, 52, -83, -9, -106, 29, -17, 24, -10, -3, -52, -127, 13, -21, 7, 17, -39, -33, -9, 35, 27, -103, 8, 19, + -19, -26, -87, 29, 39, -8, 2, 11, -16, -24, -12, 3, 52, -59, 6, 37, -77, -91, 1, 35, -47, -88, 20, 17, -27, 41, 7, 67, -57, 26, 35, -68, + -72, -13, 49, -67, -75, -106, 26, -30, 17, -3, 6, 25, 7, 2, 12, -103, 1, -47, 2, -23, 33, 35, 34, 33, 14, -18, -21, 23, -10, -113, -67, 13, + 12, 37, 34, -32, -38, 27, -38, 7, 38, 50, -75, -9, -103, 35, -23, 20, -12, 2, -23, -127, 7, -13, -5, 19, -19, -31, -5, 35, 29, -101, 14, 23, + -36, -19, -62, 29, 37, 3, 9, 12, -26, -34, -9, -12, 41, -67, -7, 36, -63, -68, -5, 31, -45, -90, 12, 9, -19, 37, 1, 59, -33, 16, 29, -59, + -56, -5, 48, -57, -65, -66, 19, -32, 10, 1, 8, 26, -11, 11, 13, -92, 10, -30, 0, -19, 15, 36, 24, 27, 21, -21, -15, 22, 8, -127, -52, 0, + 19, 34, 29, -17, -38, 26, -45, 0, 28, 39, -58, -4, -83, 22, -14, 11, -9, -1, 6, -108, 0, -8, -2, 11, 1, -24, -4, 28, 21, -84, 11, 20, + -55, -16, -50, 33, 36, 13, 18, 8, -34, -41, -7, -25, 33, -67, -20, 33, -56, -39, -11, 29, -47, -89, 9, 7, -21, 33, 2, 54, -15, 9, 21, -56, + -52, 9, 41, -53, -57, -41, 19, -35, 12, 10, 7, 20, -23, 15, 12, -90, 11, -24, -3, -21, 6, 39, 22, 22, 26, -22, -13, 28, 18, -127, -47, -3, + 27, 32, 27, -4, -49, 27, -51, 10, 16, 35, -47, -3, -69, 12, -4, 7, -14, -3, 25, -102, -10, -12, 6, 11, 15, -19, -2, 20, 4, -74, 13, 18, + -75, -15, -41, 38, 33, 5, 22, -2, -39, -51, -11, -38, 27, -54, -41, 26, -59, -12, -18, 24, -48, -86, 14, -3, -34, 33, 1, 42, 1, 2, 15, -55, + -45, 19, 41, -54, -52, -29, 15, -45, 13, 15, 11, 16, -28, 24, 17, -92, 14, -24, -12, -26, 2, 38, 23, 31, 35, -30, -8, 37, 27, -127, -53, 2, + 22, 29, 30, 6, -58, 24, -66, 23, 10, 36, -38, 14, -64, -6, 5, -2, -32, -8, 37, -113, -18, -16, 10, 16, 30, -26, -1, 18, 12, -69, 14, 25, + -91, -16, -37, 46, 29, 11, 34, -2, -51, -57, -21, -54, 16, -30, -50, 19, -61, 13, -8, 22, -52, -81, 15, -18, -53, 30, 6, 46, 20, -2, 3, -67, + -47, 30, 36, -53, -40, -16, 15, -60, 16, 16, 13, 13, -32, 31, 25, -101, 18, -25, -18, -33, -11, 32, 25, 30, 39, -37, -4, 44, 35, -123, -66, -3, + 21, 30, 35, 19, -69, 22, -82, 37, 3, 39, -30, 26, -54, -7, 17, -10, -46, -12, 50, -127, -35, -24, 10, 24, 42, -34, 5, 14, 2, -63, 20, 33, + -95, -1, -34, 48, 23, 16, 41, 9, -51, -46, -31, -58, 2, -6, -45, 1, -60, 39, 8, 18, -52, -69, 19, -39, -66, 24, 17, 39, 22, -9, -12, -75, + -49, 39, 29, -51, -28, -4, 6, -71, 23, 19, 5, 22, -36, 30, 27, -102, 25, -30, -21, -38, -27, 21, 30, 31, 37, -47, 2, 50, 38, -102, -77, -7, + 19, 23, 36, 27, -68, 23, -84, 32, -7, 41, -21, 33, -32, -6, 27, -17, -59, -13, 54, -127, -45, -25, 9, 23, 50, -42, 1, 8, -7, -51, 22, 34, + -93, 10, -30, 45, 20, 14, 41, 23, -39, -37, -40, -58, -8, 10, -43, -28, -59, 54, 15, 12, -49, -52, 21, -59, -77, 17, 27, 34, 20, -12, -26, -80, + -52, 45, 20, -56, -17, 10, -2, -76, 27, 18, -3, 31, -39, 28, 30, -104, 33, -29, -22, -44, -38, 8, 34, 27, 32, -53, 2, 55, 40, -69, -84, -19, + 14, 13, 38, 32, -62, 22, -78, 34, -16, 45, -9, 37, -13, 4, 37, -20, -72, -3, 52, -127, -42, -20, 5, 18, 56, -48, -9, 2, -7, -43, 22, 35, + -91, 17, -23, 30, 24, 29, 42, 37, -15, -31, -36, -52, -19, 20, -47, -59, -53, 58, 18, 1, -39, -23, 18, -68, -74, 10, 33, 26, 8, -12, -38, -76, + -53, 45, 7, -58, -13, 26, -10, -73, 33, 8, -6, 36, -41, 22, 33, -102, 36, -23, -28, -48, -40, -4, 36, 19, 23, -51, -9, 58, 38, -34, -83, -25, + 0, 5, 40, 32, -52, 21, -67, 33, -27, 48, 5, 33, -4, 9, 39, -17, -78, 8, 41, -127, -28, -8, -1, 11, 55, -51, -24, -4, -17, -41, 16, 36, + -82, 12, -9, 14, 23, 12, 35, 43, 4, -34, -30, -48, -30, 32, -51, -82, -45, 52, 14, -15, -23, 5, 18, -71, -65, 1, 37, 24, 6, -11, -43, -63, + -47, 38, -2, -54, -14, 27, -9, -69, 29, -2, -3, 32, -39, 26, 28, -97, 40, -2, -24, -53, -39, -9, 33, 6, 14, -44, -24, 55, 36, -5, -80, -31, + 2, 2, 44, 25, -39, 20, -62, 25, -43, 46, 19, 43, 1, 8, 40, -17, -83, 14, 27, -127, -16, 2, -3, 1, 49, -53, -34, -5, 6, -37, 10, 33, + -73, 7, 3, -4, 23, 21, 31, 46, 16, -24, -25, -44, -38, 41, -55, -85, -37, 46, 15, -32, -8, 28, 18, -64, -42, -5, 36, 25, -1, -12, -48, -39, + -39, 30, -7, -41, -19, 25, -9, -62, 24, -12, -3, 32, -38, 26, 22, -98, 47, 14, -19, -57, -37, -14, 31, -9, 7, -33, -38, 51, 31, 11, -71, -33, + 7, 3, 45, 19, -25, 24, -61, 4, -62, 39, 29, 44, 2, 7, 38, -14, -81, 10, 13, -127, -9, 9, -1, -8, 36, -55, -39, -6, 14, -34, 5, 28, + -58, -7, 10, -14, 26, 8, 22, 51, 22, -10, -21, -38, -43, 48, -54, -79, -31, 39, 9, -43, 7, 41, 25, -56, -23, -9, 32, 27, -7, -16, -56, -17, + -31, 25, -7, -33, -25, 22, -7, -62, 27, -4, -7, 21, -35, 22, 12, -98, 54, 24, -8, -66, -27, -25, 29, -26, 5, -23, -49, 51, 22, 12, -68, -42, + 17, 0, 44, 12, -5, 27, -61, 7, -85, 27, 35, 43, 12, 10, 35, -4, -79, 3, 1, -127, -4, 8, 5, -9, 26, -56, -44, -14, 24, -30, 10, 18, + -46, -16, 13, -18, 32, 11, 20, 57, 23, 1, -15, -28, -53, 51, -47, -66, -25, 31, -5, -42, 21, 46, 32, -45, -8, -9, 26, 26, -22, -23, -66, 2, + -26, 20, -8, -27, -23, 17, -11, -60, 29, 5, -14, 12, -34, 18, 5, -98, 56, 26, 8, -74, -14, -45, 27, -37, 7, -13, -51, 54, 12, 11, -67, -49, + 25, -8, 41, 9, 11, 30, -60, 6, -98, 12, 39, 37, 21, 13, 28, 7, -73, -7, -16, -127, 1, 8, 11, -8, 13, -57, -53, -30, 18, -24, 19, 12, + -36, -18, 17, -18, 39, 39, 30, 58, 26, -3, -10, -15, -66, 46, -42, -46, -23, 19, -13, -40, 38, 46, 27, -33, -12, -2, 15, 17, -32, -30, -72, 18, + -24, 6, -9, -27, -4, 11, -25, -53, 21, -10, -1, -4, -39, 24, 14, -91, 50, 26, 22, -77, -4, -67, 20, -36, 12, -2, -53, 60, 2, -1, -71, -55, + 15, -13, 49, 11, 25, 20, -56, 3, -95, -5, 48, 35, 25, 18, 13, 7, -60, -24, -32, -127, 11, 15, 16, 2, 3, -61, -60, -51, 12, -15, 17, 23, + -26, -10, 20, -18, 46, 26, 26, 64, 20, -2, -9, -1, -74, 39, -30, -20, -22, 12, -13, -35, 41, 33, 29, -18, -10, -5, 6, 11, -36, -38, -73, 33, + -23, 2, -10, -23, 4, 4, -30, -46, 11, 10, 0, -4, -44, 19, 15, -75, 44, 27, 33, -74, -3, -77, 18, -39, 16, -2, -49, 60, -5, -13, -78, -50, + 24, -24, 52, 3, 25, 13, -57, -1, -74, -25, 48, 22, 33, 9, 3, 4, -50, -39, -40, -127, 19, 22, 25, -13, -11, -68, -64, -57, 17, -17, 23, 16, + -15, -6, 25, -17, 54, 30, 30, 66, 14, -4, -7, 10, -78, 33, -21, 7, -19, 16, -9, -35, 42, 22, 26, -9, -21, -7, -4, 13, -29, -48, -77, 46, + -22, -5, -7, -19, 22, -4, -40, -35, -3, 16, 11, -4, -56, 14, 21, -60, 42, 25, 40, -67, -8, -75, 11, -44, 21, -4, -53, 60, -10, -25, -91, -47, + 25, -36, 54, -5, 16, 1, -57, -3, -48, -45, 50, 12, 38, 2, -13, 0, -39, -46, -40, -127, 31, 30, 34, -25, -31, -73, -65, -56, 19, -27, 23, 19, + 3, -11, 26, -13, 63, 15, 27, 65, 3, 3, -5, 20, -86, 33, -5, 23, -19, 29, -4, -33, 35, 17, 30, -1, -12, -16, -10, 21, -15, -59, -86, 67, + -23, -1, 11, -20, 12, -15, -48, -34, -28, 41, 3, -7, -78, -1, 16, -49, 44, 26, 43, -62, -13, -73, 4, -55, 28, -19, -61, 58, -16, -37, -104, -49, + 46, -49, 57, -19, 2, -11, -62, 18, -14, -61, 49, 4, 61, -2, -28, -5, -37, -31, -39, -127, 36, 24, 42, -39, -57, -82, -66, -49, 19, -50, 39, 14, + 16, -18, 33, 2, 71, -5, 19, 57, -12, -7, 5, 32, -92, 28, 2, 40, -13, 43, 3, -34, 34, 16, 28, -4, -15, -28, -13, 22, 13, -74, -105, 91, + -25, -9, 41, -24, 16, -35, -67, -30, -56, 46, 21, -1, -104, -16, 22, -46, 40, 27, 44, -51, -19, -72, -8, -63, 35, -48, -78, 64, -20, -38, -127, -50, + 54, -63, 52, -35, -23, -32, -76, 23, 26, -75, 70, -5, 72, -19, -44, -2, -31, -10, -43, -126, 45, 45, 46, -62, -78, -91, -69, -45, 39, -70, 46, 19, + 25, -26, 31, 18, 60, 8, 20, 47, -24, -4, 19, 40, -88, 20, 20, 53, -9, 44, 10, -27, 16, 18, 23, -10, -12, -40, -10, 26, 29, -74, -113, 96, + -27, -19, 72, -28, 4, -58, -81, -24, -67, 52, 29, -10, -114, -27, 4, -36, 30, 14, 40, -25, -14, -62, -17, -71, 36, -59, -86, 66, -26, -33, -127, -48, + 35, -57, 27, -39, -52, -50, -75, 56, 48, -73, 79, -20, 77, -16, -58, 12, -26, 12, -41, -101, 43, 49, 39, -47, -80, -90, -57, -36, 23, -78, 48, 15, + 28, -23, 41, 40, 40, 52, 34, 27, -45, -6, 27, 40, -83, 11, 29, 67, -8, 39, 25, -18, 3, 23, 14, -10, -11, -46, 12, 14, 40, -72, -125, 105, + -37, -42, 93, -27, -2, -84, -106, -7, -76, 33, 49, -5, -123, -18, -18, -24, 27, -3, 42, 12, -15, -58, -25, -64, 32, -66, -87, 65, -26, -26, -127, -56, + 27, -24, 11, -35, -94, -59, -67, 33, 52, -70, 84, -28, 59, 4, -83, 17, -12, 24, -40, -80, 39, 74, 24, -40, -70, -86, -51, -31, 6, -70, 36, 13, + 32, -26, 46, 57, 14, 29, 34, 6, -57, 7, 33, 28, -74, -3, 47, 67, -6, 43, 26, -9, -14, 13, 20, -8, -12, -51, 25, 11, 52, -53, -127, 103, + -49, -62, 100, -23, -16, -90, -108, 8, -60, 42, 63, -7, -120, -4, -46, -3, 26, -18, 45, 39, -25, -52, -35, -61, 18, -65, -79, 58, -21, -26, -126, -59, + 9, 12, 0, -30, -120, -62, -58, 42, 39, -69, 77, -28, 54, 11, -97, 22, -8, 30, -30, -62, 33, 83, 20, -36, -48, -83, -50, -24, 22, -61, 19, -1, + 29, -37, 42, 64, 1, 2, 22, -21, -57, 15, 30, 6, -55, -14, 55, 54, -2, 41, 20, -2, -15, 11, 23, 2, -21, -44, 32, 6, 50, -29, -107, 93, + -59, -61, 91, -25, -11, -76, -83, 19, -39, 36, 53, 0, -105, 3, -53, 13, 30, -26, 43, 46, -28, -44, -41, -51, 0, -58, -56, 40, -18, -13, -112, -56, + 4, 35, -4, -19, -127, -48, -42, 40, 28, -61, 62, -18, 44, 19, -98, 23, 1, 31, -14, -36, 23, 69, 10, -28, -26, -67, -41, -20, 31, -47, 12, -16, + 24, -37, 38, 63, -3, 36, 18, -33, -54, 22, 25, -7, -33, -27, 54, 53, 4, 39, 19, -1, -19, 16, 20, 12, -33, -39, 41, -1, 35, -17, -82, 75, + -62, -65, 83, -23, 4, -72, -64, 28, -31, 15, 45, 10, -98, 4, -48, 22, 30, -39, 38, 53, -29, -38, -46, -43, -14, -52, -48, 31, -15, -6, -99, -52, + -17, 46, -7, -9, -127, -30, -32, 18, 31, -57, 59, -8, 32, 22, -94, 22, 17, 20, -4, -24, 8, 62, 7, -14, -4, -54, -33, -29, 15, -38, -1, -33, + 17, -40, 34, 53, -10, 40, 7, -45, -45, 29, 25, -8, -8, -41, 44, 41, 4, 43, 15, -4, -24, 24, 22, 22, -43, -35, 34, -6, 17, -7, -56, 64, + -53, -61, 80, -27, -1, -63, -42, 32, -24, 16, 30, 9, -91, 8, -49, 30, 35, -51, 28, 47, -17, -36, -47, -42, -28, -46, -42, 21, -16, -5, -92, -44, + -39, 47, -15, -2, -127, -18, -23, 35, 33, -55, 49, -5, 41, 8, -88, 25, 24, 8, 5, -11, 1, 40, 11, 4, 11, -49, -28, -41, 20, -22, -5, -50, + 13, -25, 31, 48, -29, 35, 1, -57, -43, 35, 25, 1, 10, -53, 36, 37, 3, 42, 13, -9, -27, 30, 21, 30, -49, -27, 32, 0, 9, -1, -37, 57, + -31, -58, 78, -26, 14, -51, -28, 39, -15, 11, 4, 18, -91, 14, -48, 32, 37, -68, 30, 41, -8, -41, -43, -50, -49, -44, -38, 10, -13, -6, -89, -40, + -27, 49, -21, 5, -127, -2, -24, 20, 34, -58, 46, -4, 44, 2, -80, 19, 38, 3, 8, -1, -18, 31, 10, 2, 19, -44, -28, -59, 28, 0, -4, -62, + 8, -12, 33, 40, -45, 34, 0, -73, -39, 41, 30, 13, 31, -68, 27, 29, -1, 45, 9, -16, -28, 34, 21, 34, -53, -12, 26, -17, -3, 1, -21, 53, + -10, -53, 77, -29, 13, -36, -23, 41, -12, 14, -21, 19, -92, 23, -54, 37, 33, -79, 28, 30, 7, -47, -38, -52, -72, -40, -35, -5, -6, -17, -95, -31, + -26, 48, -37, 11, -127, 6, -22, 28, 33, -63, 41, -5, 59, -16, -73, 15, 43, -3, 13, 6, -31, 16, 13, 4, 23, -51, -37, -73, 37, 23, -4, -60, + 3, -4, 34, 36, -62, 25, -5, -92, -31, 37, 35, 13, 46, -75, 21, 23, -8, 41, -1, -23, -26, 30, 22, 36, -54, 7, 19, -19, -6, 0, -5, 44, + 7, -50, 77, -33, 22, -15, -15, 35, -13, 10, -38, 23, -89, 33, -61, 42, 20, -80, 34, 19, 17, -52, -33, -62, -89, -32, -34, -24, 7, -20, -102, -22, + -15, 41, -57, 18, -127, 12, -20, 35, 30, -68, 39, -7, 71, -33, -68, 9, 50, -4, 23, 13, -44, 10, 7, -3, 17, -58, -46, -79, 46, 42, -2, -50, + -9, 13, 42, 33, -74, 51, -8, -116, -30, 33, 44, -1, 61, -73, 18, 26, -20, 37, -8, -36, -24, 28, 21, 44, -49, 27, 21, -29, -9, -6, 13, 31, + 19, -54, 78, -37, 25, 4, -9, 25, -18, -8, -44, 29, -87, 42, -61, 52, 1, -82, 43, 10, 16, -56, -29, -70, -100, -24, -34, -46, 25, -21, -115, -13, + -4, 39, -81, 25, -127, 16, -15, 24, 34, -74, 42, -16, 77, -45, -63, 1, 65, -2, 38, 19, -63, 16, -3, -24, 9, -68, -53, -91, 45, 63, -3, -40, + -26, 17, 45, 23, -75, 34, -21, -127, -21, 31, 57, -27, 70, -51, 18, 17, -29, 31, -17, -54, -19, 24, 23, 40, -31, 39, 19, -36, -19, -10, 34, 9, + 27, -54, 69, -39, 16, 19, 6, 4, -20, -13, -42, 29, -73, 43, -56, 61, -19, -73, 44, -5, 9, -53, -28, -70, -94, -18, -36, -63, 33, -7, -119, 0, + 10, 36, -95, 29, -111, 13, -21, 39, 36, -74, 41, -30, 86, -54, -51, 1, 63, 11, 60, 32, -77, 20, -21, -43, -5, -72, -49, -95, 54, 75, 0, -29, + -46, 37, 61, 1, -81, 38, -39, -127, -22, 43, 72, -58, 79, -27, 19, 18, -38, 25, -25, -84, -9, 25, 24, 30, 0, 48, 28, -45, -29, -10, 58, -20, + 36, -62, 55, -33, -19, 25, 10, -18, -22, -21, -45, 21, -64, 38, -41, 74, -40, -75, 41, -20, -2, -49, -27, -75, -86, -18, -34, -76, 39, 8, -126, 12, + 22, 50, -110, 35, -94, 6, -30, 49, 41, -84, 41, -40, 90, -57, -33, -4, 60, 24, 90, 45, -107, 28, -37, -58, -14, -75, -48, -113, 59, 87, -3, -29, + -64, 49, 63, -29, -84, 49, -55, -93, -27, 52, 77, -85, 70, -2, 17, 28, -36, 7, -27, -108, 5, 25, 15, 9, -1, 50, 42, -42, -26, -4, 74, -54, + 46, -75, 32, -24, -3, 27, 16, -33, -16, -38, -52, 13, -50, 16, -18, 71, -51, -75, 46, -21, -7, -40, -27, -83, -69, -15, -29, -82, 44, 25, -116, 16, + 31, 52, -110, 42, -68, 7, -36, 30, 34, -89, 40, -54, 84, -28, -9, -6, 58, 24, 115, 42, -127, 40, -46, -55, -30, -69, -28, -122, 46, 82, -7, -30, + -76, 46, 59, -52, -84, 23, -60, -53, -21, 53, 74, -94, 64, 18, 3, 19, -21, -2, -22, -117, 15, 28, 8, -26, 1, 48, 49, -45, -21, 4, 79, -75, + 54, -85, 6, -14, -10, 22, 14, -42, -15, -25, -51, -8, -30, -7, -3, 62, -52, -64, 37, -16, -4, -29, -24, -84, -46, -21, -11, -84, 50, 31, -101, 27, + 22, 50, -88, 43, -42, -7, -41, 38, 20, -97, 35, -57, 76, -21, 3, -8, 36, 21, 127, 37, -121, 42, -40, -34, -41, -62, -19, -111, 54, 60, -14, -35, + -88, 45, 56, -62, -84, 32, -52, -14, -14, 47, 69, -95, 55, 32, -7, 15, -1, -11, -21, -115, 18, 27, 6, -53, -3, 48, 50, -52, -17, 5, 73, -96, + 65, -92, -13, -4, -9, 23, 9, -43, -18, -13, -57, -36, -9, -23, 3, 51, -47, -61, 41, -3, 8, -20, -15, -85, -23, -24, 4, -90, 62, 29, -87, 33, + -3, 43, -70, 48, -18, -23, -31, 45, -2, -105, 34, -62, 63, -17, 16, -9, 28, 3, 127, 21, -108, 32, -21, 3, -52, -71, -15, -95, 44, 36, -17, -46, + -89, 29, 48, -70, -86, 11, -45, 8, -2, 41, 62, -95, 48, 45, -14, 11, 17, -18, -18, -115, 23, 30, 6, -76, -3, 47, 41, -52, -9, -2, 66, -102, + 71, -96, -33, 2, 13, 25, 2, -42, -25, 1, -60, -52, 4, -27, 5, 43, -37, -59, 46, 7, 18, -17, -10, -84, -8, -30, 11, -109, 70, 48, -76, 32, + -6, 36, -52, 49, -5, -39, -36, 46, -28, -113, 39, -64, 50, -4, 15, -14, 16, -5, 127, 18, -94, 26, -12, 29, -63, -80, -18, -72, 46, 7, -25, -58, + -72, 16, 45, -78, -84, 19, -38, 24, 6, 33, 55, -87, 41, 48, -27, 6, 36, -21, -4, -116, 22, 37, 5, -89, -5, 51, 41, -47, 2, -11, 53, -98, + 72, -96, -56, 8, 13, 33, -13, -39, -37, 7, -56, -57, 10, -28, 2, 31, -29, -51, 48, 11, 34, -16, -6, -94, 6, -36, 21, -127, 74, 55, -69, 38, + -9, 30, -30, 59, 9, -52, -23, 32, -41, -114, 45, -61, 35, -11, 19, -18, 15, -23, 118, 17, -73, 15, 9, 48, -67, -97, -17, -48, 41, -18, -41, -69, + -38, -10, 26, -77, -70, -2, -23, 20, 6, 24, 34, -70, 27, 52, -29, 2, 38, -21, 9, -103, 21, 36, 0, -88, 3, 44, 38, -39, 16, -22, 29, -63, + 56, -83, -69, 7, 39, 33, -21, -29, -33, 5, -47, -33, 3, -20, -7, 21, -14, -30, 50, 10, 41, -24, -9, -86, 13, -33, 23, -127, 55, 69, -52, 27, + 22, 26, 0, 57, 13, -44, -28, -2, -30, -88, 43, -48, 14, -2, 5, -19, 6, -21, 87, 24, -57, 18, 5, 30, -58, -88, -8, -22, 29, -41, -49, -69, + -20, -23, 24, -88, -67, 5, -19, 18, 14, 24, 29, -55, 20, 41, -35, -6, 42, -12, 9, -102, 17, 35, -4, -98, 13, 41, 29, -53, 10, -32, 12, -40, + 45, -78, -85, -2, 11, 38, -29, -28, -30, 7, -44, -29, 2, -10, -10, 7, -15, -18, 44, 5, 47, -26, -19, -87, 18, -33, 29, -127, 57, 64, -50, 34, + 14, 21, 23, 65, 27, -53, -4, 4, -3, -82, 49, -35, 3, -28, 6, -25, 9, -26, 78, 28, -37, 6, 23, 30, -53, -99, -8, -5, 26, -59, -58, -77, + -8, -40, 25, -105, -67, -10, -14, 21, 6, 24, 21, -46, 7, 39, -30, -9, 41, -7, 2, -97, 17, 29, -15, -103, 25, 39, 22, -68, 16, -46, -2, -14, + 31, -81, -95, -9, 9, 34, -25, -22, -21, 3, -45, -14, 1, 0, -10, 2, -20, -12, 43, -6, 51, -36, -30, -91, 15, -30, 25, -127, 59, 75, -47, 33, + 31, 26, 46, 65, 36, -59, 1, -19, 24, -84, 54, -23, -11, -35, 7, -38, 7, -23, 67, 33, -34, 15, 30, 8, -52, -102, -4, 13, 34, -77, -68, -87, + 1, -63, 26, -127, -64, 10, -1, 33, 5, 23, 19, -35, -11, 34, -24, -15, 35, -2, -8, -75, 15, 34, -27, -84, 32, 33, 16, -83, -2, -59, -19, 7, + 11, -76, -93, -20, -16, 31, -9, -21, -8, 3, -51, -22, 1, 9, -16, -9, -42, -21, 30, -19, 53, -49, -38, -92, 7, -21, 18, -110, 54, 73, -48, 39, + 27, 29, 66, 67, 48, -71, 25, -6, 38, -87, 51, -13, -18, -31, 15, -48, 11, -22, 61, 47, -26, 10, 33, 19, -55, -97, 5, 35, 15, -81, -72, -74, + 6, -78, 29, -127, -53, 10, 5, 49, -10, 10, 19, -25, -41, 16, -5, -15, 30, 0, -11, -43, 8, 28, -38, -52, 23, 36, 12, -83, 0, -66, -33, 24, + -7, -68, -78, -22, 3, 21, 20, -14, 7, -8, -50, -21, 3, 9, -16, -20, -68, -32, 14, -32, 53, -47, -46, -89, -15, -7, 3, -83, 59, 62, -40, 44, + 21, 25, 72, 61, 60, -80, 32, -19, 38, -89, 46, -1, -27, -28, 30, -52, 21, -26, 44, 44, -19, 14, 42, 11, -60, -85, 8, 47, 13, -64, -73, -47, + 17, -98, 29, -127, -55, -11, 9, 59, -31, -1, 29, -19, -70, 12, 13, -16, 16, -4, -7, -16, 14, 45, -45, -25, 7, 34, 17, -78, -7, -84, -53, 42, + -27, -66, -71, -27, 26, 4, 40, -16, 23, -6, -60, -24, 1, 2, -23, -33, -88, -40, -6, -45, 59, -58, -61, -90, -43, 5, -6, -73, 53, 74, -40, 36, + 23, 28, 84, 42, 68, -91, 34, -10, 35, -101, 38, 0, -40, 3, 43, -52, 29, -27, 30, 61, -18, 15, 31, 15, -66, -71, 22, 73, 14, -40, -70, -23, + 29, -102, 33, -127, -63, -20, 12, 73, -61, -13, 49, -12, -105, -1, 43, -16, 8, -11, 1, 13, 27, 49, -47, 9, 45, 33, 28, -77, -19, -114, -82, 58, + -59, -61, -79, -25, 41, -17, 52, -22, 35, 1, -84, -19, 4, -18, -33, -47, -108, -33, -35, -51, 67, -73, -88, -97, -81, 15, -4, -77, 54, 96, -37, 29, + 24, 39, 101, 6, 98, -114, 21, -7, 31, -118, 31, -4, -64, 28, 57, -59, 48, -34, 16, 77, -39, 18, 22, -7, -78, -64, 20, 109, 22, -21, -79, -9, + 22, -62, 36, -97, -58, 30, 8, 75, -75, -27, 72, 3, -112, -16, 53, 7, 1, -26, 0, 39, 39, 61, -46, 31, 4, 33, 35, -62, -50, -127, -97, 47, + -89, -40, -65, -26, 27, -42, 42, -33, 37, -10, -77, -19, 9, -42, -30, -55, -102, -25, -67, -36, 63, -68, -99, -89, -103, 22, 11, -60, 59, 54, -20, 43, + -16, 24, 94, -32, 113, -127, 52, 0, 42, -116, 18, -9, -83, 33, 73, -34, 73, -47, -9, 66, -15, -13, 46, 9, -68, -73, 27, 113, 15, 13, -81, 18, + 16, -43, 33, -77, -58, -9, 2, 72, -61, -36, 84, 10, -114, -29, 71, 15, 1, -48, 6, 59, 50, 39, -43, 61, 52, 32, 29, -48, -33, -127, -92, 35, + -119, -25, -71, -11, 42, -62, 30, -42, 50, 5, -71, -6, 9, -62, -35, -43, -108, -6, -72, -7, 63, -58, -111, -88, -125, 28, 26, -43, 45, 66, -3, 27, + -7, 33, 93, -82, 119, -126, 19, 2, 29, -104, 7, -21, -104, 47, 60, -23, 86, -32, -41, 63, -48, -9, 27, -44, -58, -73, 13, 123, 44, 38, -94, 26, + -3, -19, 29, -56, -51, -17, -7, 64, -37, -35, 88, 15, -93, -28, 71, 24, 1, -54, 6, 69, 43, 29, -53, 58, 38, 36, 20, -30, -39, -102, -66, 27, + -127, -16, -60, -8, 20, -71, 11, -52, 50, 22, -56, -3, -1, -63, -40, -28, -110, 4, -70, 13, 54, -42, -99, -87, -127, 30, 41, -17, 31, 32, 15, 37, + -6, 21, 83, -91, 109, -107, 24, 10, 32, -83, -12, -29, -107, 34, 44, 1, 87, -20, -69, 48, -37, -31, 35, -43, -35, -80, -1, 96, 43, 56, -100, 44, + -25, -17, 22, -44, -44, -7, -1, 54, -14, -30, 82, 8, -61, -14, 57, 28, 6, -50, 4, 72, 32, 33, -75, 46, 10, 35, 9, -18, -32, -73, -27, 36, + -127, -27, -55, -12, 42, -71, 6, -59, 38, 34, -48, -4, -24, -60, -39, -13, -115, 12, -62, 31, 42, -40, -81, -93, -127, 31, 37, 0, 12, 24, 33, 36, + -3, 27, 72, -88, 90, -75, 9, 0, 33, -65, -34, -47, -114, 49, 17, 24, 78, -7, -92, 39, -35, -44, 18, -38, -16, -83, 8, 78, 25, 61, -103, 57, + -50, -14, 34, -44, -34, -7, -20, 42, -3, -30, 76, 0, -34, -21, 35, 34, 2, -44, 2, 77, 14, 30, -92, 31, -12, 29, -8, -12, -21, -50, 14, 43, + -127, -45, -57, -25, 27, -58, 6, -66, 27, 37, -33, -1, -32, -52, -28, -3, -115, 26, -59, 51, 31, -35, -70, -101, -115, 26, 45, 15, -1, 8, 46, 35, + 1, 35, 60, -87, 83, -60, 23, -5, 37, -61, -58, -51, -125, 36, 6, 29, 80, -5, -115, 25, -18, -58, 27, -54, 6, -90, 11, 66, 43, 73, -122, 58, + -63, -20, 37, -41, -18, -8, -34, 28, -1, -21, 54, -14, -6, -25, 9, 38, 1, -38, -1, 78, -5, 25, -91, 3, -8, 12, -19, -12, -16, -34, 41, 37, + -113, -62, -61, -32, 10, -30, 14, -71, 12, 32, -28, -5, -17, -38, -16, 3, -97, 37, -49, 62, 23, -30, -50, -97, -86, 17, 39, 27, -19, 14, 55, 15, + 18, 46, 39, -81, 63, -37, 24, 10, 36, -55, -62, -39, -127, 29, 0, 24, 67, 0, -122, 25, -4, -66, 19, -49, 22, -76, 12, 47, 36, 72, -123, 49, + -67, -19, 30, -36, 4, -9, -30, 19, 4, -17, 33, -31, 16, -17, -10, 33, 0, -29, -1, 78, -23, 3, -80, -16, 10, 1, -24, -23, -27, -26, 48, 25, + -96, -72, -66, -33, 8, -6, 22, -69, 6, 38, -27, -7, 6, -25, -8, 11, -75, 39, -39, 62, 12, -24, -31, -79, -59, 17, 26, 35, -29, 26, 57, -4, + 21, 45, 20, -71, 47, -23, 18, 28, 30, -45, -61, -32, -117, 21, -1, 8, 54, 4, -127, 28, 5, -65, 9, -39, 38, -66, 0, 24, 20, 62, -114, 31, + -60, -20, 26, -34, 22, -7, -30, 11, 5, -11, 22, -48, 30, -8, -31, 29, 4, -25, -2, 78, -34, -14, -74, -33, 5, -5, -23, -33, -30, -25, 52, 10, + -85, -81, -69, -26, 19, 11, 33, -65, 3, 38, -23, -7, 21, -24, 1, 11, -62, 40, -37, 58, 9, -22, -21, -67, -46, 15, 12, 42, -40, 28, 60, -13, + 19, 43, 2, -65, 39, -12, 15, 38, 22, -42, -57, -26, -102, 8, 6, 1, 48, 4, -127, 32, 14, -71, 8, -28, 54, -69, -3, 8, 7, 57, -111, 23, + -44, -20, 27, -40, 29, 3, -27, 2, 1, 0, 7, -67, 33, 6, -51, 30, 11, -32, -2, 79, -36, -29, -72, -51, 9, -14, -23, -52, -13, -31, 60, -8, + -83, -85, -80, -16, 39, 20, 45, -57, -3, 23, -24, -17, 26, -28, 12, 13, -63, 39, -38, 59, 17, -24, -15, -56, -42, 13, 8, 45, -56, 28, 70, -26, + 26, 56, -15, -63, 35, -4, 7, 47, 12, -45, -56, -12, -95, -5, 9, -14, 43, 6, -127, 35, 15, -84, 1, -27, 70, -76, -2, -1, -11, 56, -117, 26, + -29, -18, 20, -53, 28, 16, -28, -12, -4, 12, 1, -77, 33, 24, -72, 27, 25, -38, -4, 91, -29, -39, -78, -68, 1, -23, -23, -68, -3, -46, 77, -26, + -99, -84, -93, -10, 58, 33, 60, -44, -3, 35, -30, -12, 34, -36, 26, 12, -80, 38, -43, 63, 20, -32, -14, -58, -41, 10, 12, 48, -75, 25, 81, -32, + 15, 49, -44, -66, 33, 15, 12, 51, -1, -58, -56, -7, -81, -21, 15, -27, 41, 4, -125, 51, 21, -113, -2, -29, 91, -96, -3, -5, -31, 53, -127, 31, + -18, 0, 16, -63, 2, 9, -23, -27, -25, 15, -12, -72, 16, 44, -80, 23, 33, -41, 5, 86, -3, -46, -78, -74, 12, -24, -16, -68, 24, -64, 87, -41, + -106, -72, -94, 1, 38, 29, 58, -18, 6, 45, -34, -21, 35, -42, 31, 13, -101, 23, -42, 57, 22, -39, -10, -55, -34, 10, 26, 37, -90, 18, 73, -28, + 8, 34, -74, -71, 26, 22, 19, 40, -19, -65, -45, 17, -62, -39, 8, -51, 27, 6, -104, 67, 27, -126, -5, -28, 121, -101, -20, -2, -28, 47, -127, 24, + -2, 21, -6, -64, -18, 25, -15, -24, -24, 21, -22, -63, -14, 39, -64, 9, 46, -40, 4, 72, 18, -35, -80, -61, 5, -26, -3, -56, 0, -55, 81, -54, + -107, -53, -82, -2, 38, 49, 59, 10, 10, 42, -44, 5, 26, -45, 32, 13, -110, 13, -35, 44, 23, -42, -3, -48, -23, -6, 23, 19, -89, -2, 85, -23, + -8, -2, -85, -59, 16, 39, 31, 34, -29, -62, -31, 3, -27, -29, 7, -48, 2, 22, -70, 71, 31, -127, -14, -33, 107, -92, -10, -1, -57, 22, -105, 30, + 5, 39, -2, -68, -29, 15, -16, -11, -35, 9, -38, -70, -40, 35, -67, 13, 46, -40, 14, 49, 38, -31, -83, -43, -9, -9, 7, -57, 33, -50, 75, -77, + -103, -45, -80, 7, 7, 50, 65, 36, 18, 28, -42, -9, 16, -46, 23, 10, -111, 3, -37, 27, 33, -42, -4, -26, -19, -15, 24, -2, -95, -27, 77, -9, + -7, -18, -84, -66, 10, 36, 52, 16, -38, -54, -20, 26, -7, -30, -1, -48, -5, 32, -51, 71, 32, -127, -10, -21, 103, -88, -6, 4, -37, 19, -96, 31, + 10, 65, -11, -77, -29, 14, -4, 3, -36, 3, -57, -91, -61, 26, -67, 12, 55, -36, 19, 25, 57, -29, -108, -29, 15, 4, 9, -58, 25, -48, 74, -110, + -115, -44, -98, 6, 1, 73, 92, 63, 11, 20, -57, 7, 6, -52, 18, 11, -124, 11, -49, 17, 29, -54, -7, -12, -18, -36, 24, -33, -107, -35, 104, -12, + -4, -29, -88, -71, 9, 54, 59, -11, -60, -56, -12, 27, 2, -25, -14, -58, -16, 57, -54, 76, 32, -127, -30, -32, 93, -79, -1, 2, -51, 12, -93, 41, + -9, 61, -2, -72, -18, -15, 26, 23, -27, -10, -62, -97, -64, 34, -64, 14, 47, -29, 17, -15, 63, -21, -121, -10, 3, 13, -11, -55, 34, -54, 54, -123, + -102, -46, -89, 20, -10, 76, 117, 75, 32, 44, -47, -7, 4, -47, -10, 1, -127, 17, -61, 4, 9, -65, -16, 2, -3, -17, 8, -48, -110, -34, 96, 1, + -40, -54, -81, -76, 5, 51, 59, -12, -77, -55, -5, 14, 13, -20, -27, -43, -17, 55, -57, 70, 34, -118, -32, 3, 81, -61, 8, 8, -24, 20, -74, 30, + -18, 69, 10, -68, -11, -32, 32, 22, -26, -21, -72, -66, -59, 16, -73, 24, 35, -23, 4, -53, 70, -7, -127, 4, 16, 16, -29, -38, 48, -53, 31, -119, + -101, -50, -82, 17, -14, 79, 118, 81, 24, 32, -42, -14, -6, -44, -2, -17, -109, 42, -61, 5, 1, -64, -17, 11, 20, -26, 6, -61, -106, -20, 95, -10, + -27, -42, -77, -86, -3, 48, 57, -35, -78, -65, 5, 25, 5, 7, -30, -48, -13, 47, -61, 57, 25, -85, -32, -4, 52, -32, 15, -2, 4, 29, -68, 19, + -23, 51, 20, -55, -10, -44, 46, 19, -18, -37, -75, -28, -61, 18, -81, 24, 28, -19, -12, -78, 82, 0, -127, 8, 6, 12, -52, -28, 35, -68, 12, -112, + -101, -57, -78, 18, -2, 86, 123, 80, 32, 23, -45, -26, -16, -47, -6, -30, -106, 62, -58, 6, 3, -70, -26, 16, 52, -24, 1, -75, -114, -16, 94, -13, + -36, -47, -72, -87, -17, 42, 60, -14, -69, -68, 11, 22, 5, 26, -42, -38, -16, 43, -59, 45, 24, -69, -33, 19, 25, -13, 32, -27, 10, 40, -54, 20, + -9, 59, 30, -50, -7, -20, 53, 16, -19, -45, -80, 10, -65, 10, -99, 21, 34, 5, -16, -93, 95, 12, -123, 9, 35, 0, -60, -34, 11, -80, -1, -104, + -105, -65, -89, 31, -28, 86, 108, 81, 9, 23, -65, -31, -40, -58, 3, -47, -108, 78, -68, 4, 5, -69, -30, 12, 87, -42, 4, -82, -127, -30, 95, -8, + -33, -38, -78, -92, -26, 36, 60, -10, -57, -72, 14, 25, -1, 22, -45, -36, -27, 29, -55, 37, 21, -49, -25, 25, -3, -1, 49, -53, 12, 48, -43, 15, + -5, 58, 25, -47, -4, -37, 61, 16, -27, -61, -85, 35, -60, 16, -102, 30, 31, 29, -18, -81, 110, -5, -125, 1, 8, -3, -69, -33, 12, -86, -15, -89, + -102, -79, -103, 34, 29, 64, 79, 87, 27, 20, -50, -15, -66, -49, 20, -50, -94, 72, -74, 8, -1, -72, -39, 17, 102, -43, -9, -90, -127, -43, 94, 3, + -17, -50, -71, -88, -31, 24, 52, -37, -45, -65, 20, 20, -5, 26, -43, -40, -28, 20, -49, 22, 32, -11, -13, 16, -35, 10, 59, -79, 30, 54, -51, 15, + -1, 41, 19, -41, 2, -26, 53, 8, -31, -59, -100, 49, -61, 28, -113, 13, 27, 54, -6, -74, 123, -4, -123, 15, 26, -13, -69, -41, 15, -76, -21, -74, + -95, -70, -114, 40, 36, 42, 54, 86, 11, 33, -66, -10, -86, -53, 14, -54, -103, 77, -64, 10, -10, -75, -45, 9, 116, -51, -11, -99, -127, -45, 86, 5, + -11, -43, -68, -91, -41, 9, 50, -18, -39, -48, 19, 12, 2, 16, -50, -34, -30, 10, -48, 7, 30, -11, -24, 8, -54, 13, 74, -77, 20, 56, -27, 13, + 0, 26, 19, -31, 8, -24, 43, 4, -43, -55, -108, 55, -61, 35, -109, 6, 29, 62, 6, -62, 126, -12, -127, 8, 22, -22, -65, -41, 20, -77, -18, -59, + -88, -59, -126, 56, 33, 18, 25, 73, 19, 29, -74, -11, -93, -53, 9, -59, -108, 58, -76, 20, -11, -60, -57, -11, 112, -57, -29, -93, -119, -55, 79, 0, + -11, -47, -55, -90, -44, -22, 38, -2, -29, -38, 21, 26, 4, 1, -54, -20, -15, -2, -33, -1, 47, -9, -20, 19, -51, 17, 77, -84, 20, 60, -24, 17, + -2, 18, 18, -25, 7, -20, 34, -7, -49, -45, -120, 58, -75, 32, -86, -2, 15, 83, 12, -69, 123, -16, -127, 9, 55, -30, -66, -50, 37, -68, -14, -41, + -76, -46, -122, 67, 14, -5, 3, 67, 18, 40, -100, -10, -104, -43, 11, -63, -125, 48, -79, 36, -26, -55, -55, -29, 103, -43, -53, -91, -96, -58, 72, 4, + -16, -39, -51, -89, -51, -51, 23, 8, -31, -31, 28, 33, -3, -22, -66, -22, -19, 9, -37, -8, 56, -3, -29, -1, -45, 10, 82, -78, 10, 63, -13, 5, + 6, -6, 19, -13, 0, -20, 35, -12, -39, -39, -115, 38, -73, 26, -59, -15, 10, 81, 7, -62, 108, -28, -127, 12, 58, -47, -50, -49, 48, -54, -8, -27, + -61, -36, -111, 70, 31, -6, 6, 63, 37, 42, -102, 6, -96, -47, 5, -52, -121, 32, -83, 53, -24, -33, -52, -38, 75, -33, -74, -97, -79, -41, 64, -21, + -15, -46, -47, -89, -52, -69, -1, -8, -38, -26, 22, 21, -15, -34, -66, -6, -7, 32, -38, -22, 51, 20, -44, -32, -36, -9, 97, -63, -3, 52, -10, -15, + 11, -34, 1, -15, -1, -23, 26, -30, -25, -41, -115, 14, -93, 42, -39, -35, -14, 101, -9, -71, 111, -16, -127, 24, 45, -48, -47, -59, 32, -58, -13, -20, + -58, -32, -126, 56, 68, -18, 10, 66, 41, 36, -117, 8, -114, -39, -10, -59, -126, 21, -85, 80, -19, -26, -50, -24, 63, -21, -112, -109, -79, -35, 60, -31, + -36, -53, -46, -88, -71, -95, 14, 2, -66, -36, 32, 9, -33, -43, -73, 21, -12, 64, -68, -29, 85, 5, -83, -17, -39, -28, 120, -59, -26, 48, -4, -43, + 7, -46, 8, -34, 0, -15, 5, -53, -26, -50, -119, -15, -86, 34, -32, -48, -25, 97, -8, -82, 97, -32, -118, 38, 48, -46, -24, -75, 47, -64, -17, -7, + -55, -31, -127, 54, 45, -7, 11, 90, 38, 30, -88, 13, -121, -43, 1, -54, -108, 4, -110, 115, 8, -17, -36, 0, 42, -24, -95, -113, -88, -41, 36, -33, + -36, -40, -39, -106, -85, -111, 37, -54, -73, -21, 20, 17, -54, -65, -55, 36, -13, 66, -80, -30, 101, 26, -79, -22, -45, -66, 116, -62, 0, 51, -24, -85, + 7, -55, 5, -28, -5, -23, -16, -61, -12, -41, -118, -45, -64, 16, 23, -59, -20, 87, 4, -69, 66, -29, -103, 40, 80, -40, -27, -49, 52, -50, -21, -5, + -41, -40, -108, 55, 23, -2, 20, 86, 32, 36, -88, -1, -127, -45, 26, -31, -108, 2, -105, 109, 12, -34, -37, 14, 26, -21, -86, -75, -72, -26, 35, -41, + -40, -22, -28, -89, -97, -92, 16, -25, -59, -23, 19, 41, -62, -51, -29, 39, -32, 64, -80, -25, 66, 11, -65, -2, -40, -68, 95, -82, -9, 29, -9, -104, + 1, -43, 2, -28, -24, -6, -24, -60, -16, -73, -127, -48, -35, 23, 17, -79, -13, 74, 16, -49, 53, -28, -75, 79, 72, -30, -15, -38, 23, -49, -26, 3, + -43, -32, -103, 63, 7, -3, 17, 84, 20, 48, -56, 15, -111, -39, 17, -11, -92, -2, -95, 127, 5, -27, -36, 27, 15, -13, -71, -80, -60, -32, 27, -39, + -22, -28, -19, -73, -99, -89, 32, -56, -53, -31, 3, 40, -76, -49, -7, 33, -28, 46, -58, -25, 55, 10, -50, -5, -37, -65, 64, -86, -1, 8, -42, -89, + -7, -23, 15, -6, -54, 6, -21, -39, -17, -84, -127, -17, -7, 1, 29, -77, 4, 61, 19, -44, 31, -14, -39, 57, 43, -22, -12, -31, -8, -40, -25, -7, + -31, -36, -91, 61, -5, 15, 14, 69, 20, 43, -57, -13, -102, -63, 38, 9, -110, 11, -81, 121, 6, -35, -37, 18, -9, 20, -53, -65, -28, -44, 11, -78, + -16, -11, -19, -14, -94, -95, 32, -20, -35, -45, -13, 49, -88, -32, 2, 29, -43, 42, -38, -28, 44, -24, -56, 5, -26, -42, 61, -73, -10, -29, -42, -80, + -28, 17, 34, 16, -74, -6, -35, -36, -18, -97, -127, 22, -5, -20, 28, -64, 37, 70, 17, -42, 25, -11, -9, 40, 11, 7, -18, -22, -11, -17, -14, -24, + -21, -40, -91, 53, 40, 27, 10, 49, 30, 20, -13, -22, -102, -78, 32, 20, -109, 9, -57, 114, 19, -20, -44, 15, -28, 49, -55, -64, 10, -65, -21, -91, + 10, -8, -32, 21, -75, -100, 47, -44, -56, -77, -7, 53, -124, -48, 8, 43, -34, 34, -38, -43, 47, -52, -98, 6, -44, -15, 27, -51, 20, -71, -70, -50, + -57, 40, 44, 18, -86, 18, -20, -25, -13, -85, -120, 36, 10, -17, 18, -59, 49, 54, 14, -42, -6, -3, -2, 38, 14, 29, -14, -12, -31, -2, -7, -43, + -14, -31, -89, 45, 21, 29, 9, 26, 44, 33, 4, -46, -88, -75, 29, 24, -99, 3, -60, 93, 21, -14, -51, 3, -29, 61, -45, -56, 21, -77, -47, -98, + 25, 11, -26, 48, -62, -100, 60, -29, -74, -93, -20, 46, -114, -23, 11, 40, -32, 40, -36, -43, 41, -71, -127, 28, -48, 3, 30, -27, 12, -96, -75, -41, + -61, 40, 46, 22, -79, 16, -29, -21, -8, -76, -102, 37, 6, -19, 19, -47, 54, 35, 2, -47, -24, -9, 7, 22, 29, 36, -18, 10, -19, 2, -1, -54, + -17, -31, -86, 40, 32, 27, 25, 10, 46, 22, 5, -46, -77, -71, 28, 24, -87, 5, -55, 68, 25, -13, -50, -18, -23, 53, -39, -51, 22, -72, -50, -93, + 37, 26, -29, 53, -52, -88, 49, -30, -86, -88, -17, 51, -101, -22, 12, 37, -28, 37, -30, -42, 37, -61, -127, 24, -53, 9, 25, -23, 8, -97, -68, -30, + -63, 42, 49, 19, -80, 15, -26, -19, -2, -75, -103, 29, 1, -19, 20, -51, 58, 27, -10, -52, -33, -10, 8, 35, 25, 35, -19, 1, 1, 9, 0, -60, + -15, -34, -85, 51, 31, 26, 31, 7, 64, 31, 11, -51, -76, -75, 24, 21, -87, 0, -48, 55, 23, -4, -54, -19, -16, 55, -40, -49, 21, -73, -51, -93, + 47, 38, -24, 51, -54, -87, 41, -35, -99, -91, -16, 42, -91, -23, 19, 48, -26, 35, -30, -42, 19, -59, -127, 3, -53, 6, 39, -19, 12, -102, -64, -35, + -56, 46, 86, 51, -66, 11, 57, -72, 27, -94, -126, -27, 7, 43, 47, 3, 43, -93, -93, 34, -124, 17, 75, 27, 40, 31, 60, 7, 33, -94, -72, -8, + -98, 50, -105, 66, 33, -30, -2, 69, 29, 14, 59, 36, -89, 58, 55, -33, -37, 63, -56, -41, 16, 7, -93, 57, -25, -2, 59, -84, -40, 16, -32, 31, + 53, 47, -62, 10, -22, 35, 34, 34, -127, -106, -29, 39, -28, 50, 46, 52, 36, 68, -31, 29, 46, -34, 54, 57, -93, 35, 26, -24, 17, 3, 79, -2, +}; + +// Layer 3 bias. +const float kPitchNetBias3[121] = { + -0x1.174becp-3f, -0x1.e459fep-4f, -0x1.6b64b6p-4f, -0x1.7a2bfep-5f, -0x1.6d4162p-4f, -0x1.7d36cap-5f, + -0x1.017464p-3f, -0x1.7f0092p-5f, -0x1.1ab156p-3f, -0x1.703bb6p-4f, -0x1.041234p-4f, -0x1.a08beep-5f, + -0x1.874156p-4f, -0x1.79436ep-4f, -0x1.2221fep-7f, 0x1.22250cp-8f, -0x1.031a5ap-4f, 0x1.5fb15ap-10f, + -0x1.83be16p-4f, -0x1.1c30ep-7f, -0x1.a1c294p-4f, -0x1.af4bc6p-4f, -0x1.a920c8p-5f, -0x1.90cabp-4f, + -0x1.e87cccp-4f, -0x1.e1e844p-4f, -0x1.5397d6p-4f, -0x1.0d1c96p-3f, -0x1.3f977ep-4f, -0x1.9ca29ap-4f, + 0x1.275984p-8f, -0x1.a71d68p-5f, -0x1.52f49ep-4f, -0x1.aca67ap-5f, -0x1.c317f2p-6f, -0x1.94aa92p-5f, + -0x1.78499cp-4f, -0x1.7f2868p-4f, -0x1.ba726ep-5f, -0x1.eebe58p-6f, -0x1.51f7fep-5f, -0x1.8a0d28p-4f, + -0x1.34e612p-5f, -0x1.2a087p-6f, -0x1.188e22p-4f, -0x1.62e8aep-4f, -0x1.232d78p-4f, -0x1.3b9702p-4f, + 0x1.3d5f6cp-6f, 0x1.084f7ap-11f, 0x1.13ac6ep-5f, -0x1.05efc8p-5f, -0x1.38d1ep-7f, -0x1.96c404p-5f, + 0x1.ff3d42p-11f, -0x1.22104cp-4f, -0x1.303bdp-4f, -0x1.fb8e4ap-4f, -0x1.e32aaep-4f, -0x1.6679aep-4f, + -0x1.0b7b24p-6f, -0x1.a4c41ep-5f, -0x1.a831e2p-4f, -0x1.866bbep-4f, -0x1.98ae5p-4f, -0x1.130e28p-4f, + -0x1.a6017p-5f, -0x1.b172b2p-4f, -0x1.f3d4b2p-5f, -0x1.416a3cp-5f, -0x1.34dffcp-4f, -0x1.2f0db4p-5f, + -0x1.46a4e6p-7f, -0x1.ea5f36p-9f, -0x1.217132p-4f, -0x1.4f9706p-4f, -0x1.8d5506p-4f, -0x1.f6e87p-9f, + 0x1.84e6b4p-8f, 0x1.d45778p-9f, -0x1.9b9944p-5f, -0x1.14119ep-5f, -0x1.a3aa54p-6f, 0x1.77b214p-7f, + -0x1.648c7cp-5f, -0x1.871398p-4f, -0x1.bc4684p-4f, -0x1.3cfa62p-4f, -0x1.cc3104p-7f, -0x1.3004cp-4f, + -0x1.b07478p-4f, -0x1.c69624p-4f, -0x1.e2edbap-4f, -0x1.c871ecp-4f, -0x1.386a62p-4f, -0x1.2c4156p-4f, + -0x1.cad022p-5f, -0x1.f076e8p-4f, -0x1.cb8aap-11f, -0x1.38cd04p-5f, -0x1.9853a8p-4f, -0x1.d97a68p-6f, + -0x1.152b9ep-4f, -0x1.4d56f8p-4f, -0x1.ae249cp-4f, -0x1.e8ede4p-7f, -0x1.f2fb1p-4f, -0x1.12176ep-3f, + -0x1.1f34f2p-3f, -0x1.d74af4p-4f, -0x1.095c08p-3f, -0x1.2f5612p-4f, -0x1.29edccp-4f, -0x1.48472ap-3f, + -0x1.023b8ap-2f, -0x1.8a8b7ep-3f, -0x1.41053p-2f, -0x1.9907p-2f, -0x1.7102a4p-3f, -0x1.538ee2p-3f, + 0x1.f1305ep-2f, +}; + +// Layer 3 output scale. +const float kPitchNetScale3[121] = { + 0x1.d2e9f6p-9f, 0x1.9b36b4p-9f, 0x1.8af9aap-9f, 0x1.798924p-9f, 0x1.45f404p-9f, 0x1.53ffb6p-9f, + 0x1.56aee6p-9f, 0x1.9e909p-9f, 0x1.b149d2p-9f, 0x1.8c79a4p-9f, 0x1.a9fb26p-9f, 0x1.7f149p-9f, + 0x1.959b7p-9f, 0x1.6e6bf8p-9f, 0x1.7d0bc4p-9f, 0x1.6b6c24p-9f, 0x1.80245ep-9f, 0x1.68a854p-9f, + 0x1.7263b8p-9f, 0x1.7231cep-9f, 0x1.6cbd1ap-9f, 0x1.5b50fap-9f, 0x1.59884cp-9f, 0x1.6c4514p-9f, + 0x1.665c6ap-9f, 0x1.58007ap-9f, 0x1.49c308p-9f, 0x1.34b5bp-9f, 0x1.16c888p-9f, 0x1.02e7bcp-9f, + 0x1.fe9ef8p-10f, 0x1.01c786p-9f, 0x1.0d85aap-9f, 0x1.36105ap-9f, 0x1.3f369ep-9f, 0x1.38e7aep-9f, + 0x1.2de09p-9f, 0x1.41fap-9f, 0x1.4ef3fcp-9f, 0x1.64e79ap-9f, 0x1.527ce8p-9f, 0x1.330c72p-9f, + 0x1.0bc898p-9f, 0x1.fdda98p-10f, 0x1.00fdcep-9f, 0x1.facfbcp-10f, 0x1.1065d4p-9f, 0x1.1486dp-9f, + 0x1.472ba8p-9f, 0x1.5e5fc8p-9f, 0x1.4e3054p-9f, 0x1.2e971p-9f, 0x1.2879a8p-9f, 0x1.2307c8p-9f, + 0x1.2a959ep-9f, 0x1.37692cp-9f, 0x1.4272c8p-9f, 0x1.4368aap-9f, 0x1.3f4262p-9f, 0x1.390748p-9f, + 0x1.3b66bep-9f, 0x1.303a3ap-9f, 0x1.11fc6ap-9f, 0x1.d4ca72p-10f, 0x1.c41a76p-10f, 0x1.b2b6f8p-10f, + 0x1.ba8f7p-10f, 0x1.00a78cp-9f, 0x1.1a953ap-9f, 0x1.2bc856p-9f, 0x1.31661cp-9f, 0x1.2681f4p-9f, + 0x1.196daep-9f, 0x1.f312dcp-10f, 0x1.d9ca82p-10f, 0x1.a7e18ep-10f, 0x1.a0b4f6p-10f, 0x1.b8c508p-10f, + 0x1.cace6p-10f, 0x1.ce9378p-10f, 0x1.d47716p-10f, 0x1.1582fep-9f, 0x1.1a6632p-9f, 0x1.120e78p-9f, + 0x1.0a671cp-9f, 0x1.101f72p-9f, 0x1.f203bap-10f, 0x1.93e0c2p-10f, 0x1.90209p-10f, 0x1.81147p-10f, + 0x1.a846dep-10f, 0x1.d463e2p-10f, 0x1.e695e2p-10f, 0x1.10e0ccp-9f, 0x1.399856p-9f, 0x1.4dd13p-9f, + 0x1.3e86a6p-9f, 0x1.13c262p-9f, 0x1.06baccp-9f, 0x1.1a1234p-9f, 0x1.28b58ap-9f, 0x1.09de98p-9f, + 0x1.0e039ap-9f, 0x1.190abcp-9f, 0x1.146ae4p-9f, 0x1.065132p-9f, 0x1.07542ap-9f, 0x1.083918p-9f, + 0x1.104cb6p-9f, 0x1.14e3e6p-9f, 0x1.2dafe8p-9f, 0x1.120604p-9f, 0x1.099554p-9f, 0x1.25602ap-9f, + 0x1.395f3cp-9f, 0x1.577352p-9f, 0x1.57773ep-9f, 0x1.5fa83cp-9f, 0x1.7c4b74p-9f, 0x1.79dce8p-9f, + 0x1.d370b4p-10f, +}; + +} // namespace halfrate::tables diff --git a/mbe/enc_tables.h b/mbe/enc_tables.h new file mode 100644 index 0000000..14d425f --- /dev/null +++ b/mbe/enc_tables.h @@ -0,0 +1,29 @@ +// Constant tables of the encoder (generated data, see the files named below). The pitch grid the encoder searches +// is the codebook's pitch table (tables.h: kPitchFundamental, kPitchHarmonicCount). +#pragma once +#include + +namespace halfrate::tables { + +// enc_pitch_net.cc: the pitch network (an int8 MLP 1830 -> 160 -> 96 -> 121). Weights are [output][input]. +extern const float kPitchNetMean[305]; // feature normalisation, per feature of one frame +extern const float kPitchNetInvStd[305]; +extern const int8_t kPitchNetWeights1[160 * 1830]; +extern const float kPitchNetBias1[160]; +extern const float kPitchNetScale1[160]; +extern const int8_t kPitchNetWeights2[96 * 160]; +extern const float kPitchNetBias2[96]; +extern const float kPitchNetScale2[96]; +extern const int8_t kPitchNetWeights3[121 * 96]; +extern const float kPitchNetBias3[121]; +extern const float kPitchNetScale3[121]; + +// enc_analysis.cc: analysis windows and voicing tables. +extern const float kLongWindow[256]; // window of the pitch spectrum +extern const float kShortWindow[160]; // window of the amplitude spectrum +extern const int32_t kVoicingRowStart[9]; // pitch index where each threshold row starts +extern const float kVoicingThresholdBase[9 * 8]; // [row][band] +extern const float kVoicingThresholdSlope[9 * 8]; // [row][band], times the pitch's fit cost +extern const float kRescoreBandEdge[18]; // Hz; band j is [edge[j], edge[j + 1]), the last one open + +} // namespace halfrate::tables diff --git a/mbe/encoder.cpp b/mbe/encoder.cpp new file mode 100644 index 0000000..940fe0b --- /dev/null +++ b/mbe/encoder.cpp @@ -0,0 +1,880 @@ +#include "encoder.h" + +#include +#include + +#include "enhance.h" +#include "fastmath.h" +#include "numeric.h" +#include "constants.h" +#include "enc_tables.h" +#include "tables.h" + +namespace halfrate::enc { + +namespace { + +using core::fast_exp2; +using core::fast_log2; +using core::to_int32_sat; + +constexpr int kAllUnvoiced = 16; // voicing index with no band voiced (indices 0..15 voice at least one) +constexpr int kTonePitch = 124; // pitch field of a silent frame: the fixed-pitch frame of 14 harmonics +constexpr int kToneHarmonics = 14; +constexpr int kAnalysisCenter = 944; // window centre for an offset option of 0 +constexpr int kNewSamples = kHistorySamples - kFrameSamples; // first sample of the newest frame +constexpr int kYinMaxLag = 126; +constexpr int kRescoreBands = 18; + +// Options that place the analysis windows are clamped so that every read stays inside the history block. +constexpr int kPitchOffsetLow = -781, kPitchOffsetHigh = 3372; +constexpr int kAmplitudeOffsetLow = -864, kAmplitudeOffsetHigh = 3455; + +const core::Codebook& codebook() { return tables::kCodebook; } + +inline bool is_voiced(int voicing) { return voicing < kAllUnvoiced; } + +inline int clamp_int(int v, int low, int high) { return v < low ? low : (v > high ? high : v); } + +// The voicing field of silent frames, clamped to the field's 5 bits. +int silent_voicing_index(const EncoderOptions& o) { return clamp_int(to_int32_sat(o.silent_voicing_index), 0, 31); } + +float fundamental_of(int pitch) { return tables::kPitchFundamental[pitch]; } +int harmonics_of(int pitch) { return tables::kPitchHarmonicCount[pitch]; } + +// The noise floor rises by floor_rise of the level's excess plus a fixed creep per frame and follows the level +// down. The gate is open while the level is above gate_level_db and gate_above_floor_db over the floor, and stays +// open gate_hang_frames frames after. Returns true when the gate is closed (the frame is silent). +bool update_gate(Encoder& e, float level) { + const EncoderOptions& o = e.options; + float floor = e.noise_floor_db; + float up = level - floor; + up = up < 0.0f ? 0.0f : up; + floor = floor + o.floor_rise * up; + floor = floor + kFloorCreep; + floor = level < floor ? level : floor; + e.noise_floor_db = floor; + if (level > o.gate_level_db && level > floor + o.gate_above_floor_db) { + e.gate_hang = to_int32_sat(o.gate_hang_frames); + return false; + } + int h = e.gate_hang; + if (h < 1) return true; + e.gate_hang = h - 1; + return false; +} + +// Starts the noise floor at the lowest level of the first three frames. +void init_floor(Encoder& e) { + float s0 = e.history.slots[0].level_db; + e.noise_floor_db = s0; + for (int j = 1; j < 3; j++) { + float s1 = e.history.slots[j].level_db; + if (s1 < s0) { + e.noise_floor_db = s1; + s0 = s1; + } + } +} + +// log2 amplitudes of harmonics 1..n from a harmonic fit: voiced ones (flags[k] set) blend the fitted amplitude +// toward the spectrum's rms, unvoiced ones take the rms; each gets its offset and a per-band offset interpolated +// over 500 Hz steps, unvoiced ones a pitch slope, and harmonics above the high-pass corner region get the +// compensation that undoes the input high-pass. +void harmonic_amplitudes(const Encoder& e, const HarmonicFit& fit, const uint8_t* flags, int n, float* out, + float fundamental) { + if (n < 1) return; + const EncoderOptions& o = e.options; + float f32 = fundamental * 32.0f; + for (int k = 0; k < n; k++) { + float hz = (fundamental * static_cast(static_cast(k + 1))) * 8000.0f; + float t = hz * kHzToVoicingBand; + float v, s; + if (flags[k]) { + if (t <= 0.0f) + v = o.voiced_band_offset[0]; + else if (t >= 8.0f) + v = o.voiced_band_offset[8]; + else { + int i = to_int32_sat(t); + float fraction = t - static_cast(to_int32_sat(t)); + float a0 = o.voiced_band_offset[i], a1 = o.voiced_band_offset[i + 1]; + v = a0 + fraction * (a1 - a0); + } + float q = fit.log2_amplitude[k]; + float r = q + o.voiced_amplitude_blend * (fit.log2_rms[k] - q); + s = (o.voiced_offset + r) + v; + } else { + if (t <= 0.0f) + v = o.unvoiced_band_offset[0]; + else if (t >= 8.0f) + v = o.unvoiced_band_offset[8]; + else { + int i = to_int32_sat(t); + float fraction = t - static_cast(to_int32_sat(t)); + float a0 = o.unvoiced_band_offset[i], a1 = o.unvoiced_band_offset[i + 1]; + v = a0 + fraction * (a1 - a0); + } + s = (fit.log2_rms[k] + o.unvoiced_offset) + v; + s = s + o.unvoiced_pitch_slope * fast_log2(f32); + } + out[k] = s; + float fc = o.highpass_hz, comp = o.highpass_compensation; + if (fc > 0.0f && comp > 0.0f && hz >= o.highpass_compensation_from_hz) { + float r = hz / fc; + float r4 = r * (r * (r * r)); + float c = comp * -0.5f; + float q = r4 / (r4 + 1.0f); + q = q + kCompensationFloor; + out[k] = s + c * fast_log2(q); + } + } +} + +// The voicing index for a harmonic fit at grid pitch `pitch` (whose fit cost is fit_cost): per band, the cost of +// calling it voiced or unvoiced against a threshold, weighted by the band's energy share; the best of the first +// code_count voicing patterns, with an optional cost for each band that changes from the previous frame. +int choose_voicing(const Encoder& e, const HarmonicFit& fit, int code_count, int pitch, float fit_cost) { + const EncoderOptions& o = e.options; + const core::Codebook& cb = codebook(); + int previous = e.previous_voicing; + int row = 0; + while (row < 8) { + if (pitch < tables::kVoicingRowStart[row + 1]) break; + row++; + } + float sum = 0.0f; + for (int i = 0; i < 8; i++) sum = sum + fit.band_energy[i]; + float pitch_index = static_cast(pitch); + float total = sum + kEnergyFloor; + const float* base = tables::kVoicingThresholdBase + 8 * row; + const float* slope = tables::kVoicingThresholdSlope + 8 * row; + float voiced_cost[8], unvoiced_cost[8], weight[8]; + for (int k = 0; k < 8; k++) { + float fk = static_cast(static_cast(k)); + float t; + if (o.voicing_table > 0.0f) + t = o.voicing_table_offset + (base[k] + fit_cost * slope[k]); + else + t = o.voicing_threshold + ((fk + -3.5f) * o.voicing_threshold_slope) * kTwoSevenths; + float strength = o.low_pitch_voicing_strength; + if (strength > 0.0f && fit_cost < o.low_pitch_voicing_fit && o.low_pitch_voicing_index > pitch_index) { + float d = strength * (o.low_pitch_voicing_fit - fit_cost); + t = t + (fk * kOneSeventh) * d; + } + bool has_data = fit.band_has_data[k] != 0; + float v = has_data ? fit.band_ratio[k] : t; + voiced_cost[k] = v > t ? (v - t) + kVoicingCostFloor : kVoicingCostFloor; + unvoiced_cost[k] = t > v ? t - v : 0.0f; + float w = 0.0f; + if (has_data) { + if (k == 0 && e.low_band && o.low_band_ignore_first > 0.0f) { + w = 0.0f; + } else { + float exponent = o.voicing_band_weight_exponent; + w = 1.0f; + if (!(exponent == 0.0f)) { + float r = fit.band_energy[k] / total; + w = 0.0f; + if (r > 0.0f) w = fast_exp2(exponent * fast_log2(r)); + } + } + } + weight[k] = w; + } + float weight_sum = 0.0f; + for (int k = 0; k < 8; k++) weight_sum = weight_sum + weight[k]; + if (weight_sum <= 0.0f && code_count >= 17) return kAllUnvoiced; + float best = kHuge; + int result = 0; + for (int i = 0; i < code_count; i++) { + const int32_t* c = cb.voicing[i]; + float acc = 0.0f; + for (int b = 0; b < 8; b++) acc = acc + (c[b] == 0 ? unvoiced_cost[b] : voiced_cost[b]) * weight[b]; + float penalty = o.voicing_hysteresis; + if (previous >= 0 && penalty > 0.0f) { + const int32_t* p = cb.voicing[previous]; + for (int b = 0; b < 8; b++) acc = c[b] == p[b] ? acc : penalty + acc; + } + if (acc < best) { + best = acc; + result = i; + } + } + return result; +} + +// Voicing of harmonics 1..n from the 500 Hz bands of voicing pattern `voicing`. +void voicing_flags(int voicing, int n, float fundamental, uint8_t* flags) { + const int32_t* row = codebook().voicing[voicing]; + for (int i = 0; i < n; i++) { + float v = static_cast(static_cast(i + 1)) * 16.0f; + int b = to_int32_sat(fundamental * v); + b = b < 7 ? b : 7; + flags[i] = static_cast(row[b]); + } +} + +// The rescoring input: each harmonic's band and weight (the window weight energy, scaled down by the amplitude +// offset the harmonic got), and the reference band energies from the amplitudes or from the amplitude spectrum. +void band_energies(const Encoder& e, RescoreInput& out, const float* amps, int n, const uint8_t* flags, + const float* weights, const AnalysisSlot& slot, float fundamental) { + const EncoderOptions& o = e.options; + out.band_energy.fill(0.0f); + const float* edge = tables::kRescoreBandEdge; + for (int k = 0; k < n; k++) { + float offset = (flags && flags[k]) ? o.voiced_offset : o.unvoiced_offset; + float hz = (fundamental * static_cast(static_cast(k + 1))) * 8000.0f; + int j = 0; + while (j < 17) { + if (!(hz >= edge[j + 1])) break; + j++; + } + out.band[k] = j; + out.weight[k] = weights[k] * fast_exp2(offset * -2.0f); + if (o.rescore_from_spectrum == 0.0f) { + float b = out.band_energy[j]; + float g = fast_exp2(amps[k] + amps[k]); + out.band_energy[j] = b + g * out.weight[k]; + } + } + if (!(o.rescore_from_spectrum == 0.0f)) { + const Spectrum& s = slot.amplitude_spectrum; + for (int i = 1; i < kSpectrumBins; i++) { + float hz = static_cast(static_cast(i)) * 15.625f; + int j = 0; + while (j < 17) { + if (!(hz >= edge[j + 1])) break; + j++; + } + float b = out.band_energy[j]; + b = b + s.re[i] * s.re[i]; + b = b + s.im[i] * s.im[i]; + out.band_energy[j] = b; + } + } +} + +// Chooses the gain and shape fields for the target log2 amplitudes amps[L], fills fields and runs the +// dequantiser on them. The gain is the nearest to the target mean, optionally looking two frames ahead; the shape +// is searched on the target minus the prediction, with optional rescoring of the best candidates (and the gains +// around the chosen one) by band energies or by the enhanced decoded amplitudes. +void quantize(Encoder& e, int pitch_field, int voicing_field, const float* amps, int L, const RescoreInput* rescore, + core::FrameFields& fields) { + const EncoderOptions& o = e.options; + const core::Codebook& cb = codebook(); + core::DequantState& state = e.predictor; + float prediction[kMaxFitHarmonics], target[kMaxFitHarmonics], weight[kMaxFitHarmonics]; + float recon[kMaxFitHarmonics], decoded[kMaxFitHarmonics], enhanced[kMaxFitHarmonics + 2], coef[kBasisRows]; + ShapeCandidate list[kMaxShapeResults]; + core::FrameParams frame{}; + core::dequant_predict(cb, state, L, prediction); + + float sum = 0.0f, sum_prediction = 0.0f, peak = kVeryNegative; + for (int i = 0; i < L; i++) { + sum = sum + amps[i]; + sum_prediction = sum_prediction + prediction[i]; + if (amps[i] > peak) peak = amps[i]; + } + float reciprocal = tables::kReciprocalCount[L]; + float mean = sum * reciprocal; + float bias = tables::kHalfLog2Count[L]; + float gain_target = mean + bias; + fields = core::FrameFields{}; + fields[core::kFieldPitch] = pitch_field; + fields[core::kFieldVoicing] = voicing_field; + fields[core::kFieldGain] = 0; + + const float gain_bias = o.gain_bias; + const int gain_count = cb.gain_count; + const float* gain = cb.gain; + int chosen_gain = 0; + if (gain_count >= 1) { + float w = cb.gain_weight, p = cb.previous_gain_weight * state.log2_gain; + float best = kHuge; + for (int k = 0; k < gain_count; k++) { + float v = (((w * gain[k]) + p) - gain_target) - gain_bias; + v = v < 0.0f ? -v : v; + if (v < best) { + fields[core::kFieldGain] = k; + chosen_gain = k; + best = v; + } + } + } + float lookahead_weight = o.gain_lookahead_weight; + int lookahead = e.lookahead_count; + if (lookahead_weight > 0.0f && lookahead >= 1) { + float best = kHuge; + for (int g = chosen_gain - 3, high = chosen_gain + 3;; g++) { + if (g >= 0 && g < gain_count) { + float w = cb.gain_weight, pw = cb.previous_gain_weight; + float level = (w * gain[g]) + (pw * state.log2_gain); + float c = (level - gain_target) - gain_bias; + c = c * c; + for (int m = 0; m < lookahead; m++) { + float carried = pw * level, next_target = e.lookahead_gain[m], nearest = kHuge; + for (int k = 0; k < gain_count; k++) { + float candidate = carried + (w * gain[k]); + float d = (candidate - next_target) - gain_bias; + d = d < 0.0f ? -d : d; + if (d < nearest) { + nearest = d; + level = candidate; + } + } + c = c + (nearest * (lookahead_weight * nearest)); + } + if (c < best) { + best = c; + chosen_gain = g; + } + } + if (!(g < high)) break; + } + fields[core::kFieldGain] = chosen_gain; + } + + float mean_prediction = sum_prediction * reciprocal; + if (L >= 1) { + float fL = static_cast(static_cast(L)), weight_sum = 0.0f; + for (int i = 0; i < L; i++) { + float a = amps[i]; + target[i] = (a - mean) - (prediction[i] - mean_prediction); + float w = 1.0f; + if (o.shape_weight_exponent > 0.0f) w = fast_exp2((a - peak) * o.shape_weight_exponent); + weight[i] = w; + float high = o.shape_high_weight; + if (high != 0.0f) { + float r = static_cast(static_cast(i + 1)) / fL; + if (r > kHighShapeStart) { + w = w * fast_exp2(((r + kMinusHighShapeStart) * high) * kHighShapeScale); + weight[i] = w; + } + } + weight_sum = weight_sum + w; + } + // every weight can underflow to 0 with a large shape_weight_exponent; they stay 0 then + float scale = weight_sum != 0.0f ? fL / weight_sum : 1.0f; + for (int i = 0; i < L; i++) weight[i] = scale * weight[i]; + } + + int candidates = 1; + if (rescore) { + int v = to_int32_sat(o.rescore_candidates); + if (v >= 1 && rescore->enabled != 0) candidates = v; + } + if (static_cast(candidates) >= 16) candidates = 16; + int beam = to_int32_sat(o.shape_search_beam); + int results = search_shape(e.shape_basis, cb, L, target, weight, beam, beam, list, candidates); + fields[core::kFieldShapeLow] = results >= 1 ? list[0].low : 0; + fields[core::kFieldShapeHigh] = results >= 1 ? list[0].high : 0; + for (int b = 0; b < 4; b++) fields[core::kFieldDetail1 + b] = results >= 1 ? list[0].detail[b] : 0; + + if (rescore && rescore->enabled != 0 && results >= 1) { + const float* rows = e.shape_basis.rows(L); + int span = to_int32_sat(o.rescore_gain_span); + span = span < gain_count ? span : gain_count; // a wider span reaches no further gain index + int center = fields[core::kFieldGain]; + float denominator = list[0].distortion + kRescoreDistanceFloor; + float best = kHuge; + int best_gain = center, best_candidate = 0; + const float* reference = rescore->band_energy.data(); + for (int c = 0; c < results; c++) { + const ShapeCandidate& candidate = list[c]; + const float* low = cb.shape_low[candidate.low]; + const float* high = cb.shape_high[candidate.high]; + for (int k = 0; k < 3; k++) coef[k] = low[k]; + for (int k = 0; k < 4; k++) coef[3 + k] = high[k]; + for (int b = 0; b < 4; b++) { + const float* detail = cb.detail[b] + static_cast(cb.detail_stride[b] * candidate.detail[b]) * 4; + for (int k = 0; k < 4; k++) coef[7 + 4 * b + k] = detail[k]; + } + for (int i = 0; i < L; i++) recon[i] = 0.0f; + for (int r = 0; r < kBasisRows; r++) + for (int i = 0; i < L; i++) recon[i] = recon[i] + coef[r] * rows[static_cast(r) * L + i]; + float error = 0.0f; + for (int i = 0; i < L; i++) { + float d = target[i] - recon[i]; + error = error + d * (weight[i] * d); + } + if (span < 0) continue; + float normalised_error = error / denominator; + for (int g = center - span, high_g = center + span;; g++) { + if (g >= 0 && g < gain_count) { + float level = (cb.gain_weight * gain[g]) + (cb.previous_gain_weight * state.log2_gain); + for (int i = 0; i < L; i++) + decoded[i] = (level - bias) + (recon[i] + (prediction[i] - mean_prediction)); + float gain_error = (level - gain_target) - gain_bias; + float score; + if (o.rescore_enhanced > 0.0f) { + frame.harmonic_count = L; + float f = pitch_field <= 119 ? cb.fundamental[pitch_field] : kToneFundamental; + frame.fundamental = f; + frame.omega = f * kTwoPi; + for (int i = 0; i < L; i++) frame.log2_amplitude[i] = decoded[i]; + core::shape_log2(frame, o.rescore_enhanced > 1.5f, enhanced); + float s = 0.0f; + if (L > 0) { + float a6 = o.gain_bias, a7 = o.rescore_enhanced_offset; + for (int i = 0; i < L; i++) { + float d = enhanced[1 + i] - ((amps[i] + a6) + a7); + s = s + d * (weight[i] * d); + } + } + score = (reciprocal * s) + (gain_error * (gain_error * o.rescore_gain_weight)); + } else { + float histogram[kRescoreBands] = {}; + for (int i = 0; i < L; i++) { + int band = rescore->band[i]; + float h = histogram[band]; + float d = decoded[i] - o.gain_bias; + float v = fast_exp2(d + d) * rescore->weight[i]; + histogram[band] = h + v; + } + float top = 0.0f; + for (int b = 0; b < kRescoreBands; b++) + if (reference[b] > top) top = reference[b]; + float floor = (top * fast_exp2(-o.rescore_floor)) + kRescoreBandFloor; + float total = top + floor; + float acc = 0.0f; + for (int b = 0; b < kRescoreBands; b++) { + if (reference[b] <= 0.0f && histogram[b] <= 0.0f) continue; // NaN goes on + float coded = fast_log2(floor + histogram[b]); + float wanted = fast_log2(floor + reference[b]); + float w = 1.0f; + if (o.rescore_weight_exponent > 0.0f) + w = fast_exp2(o.rescore_weight_exponent * fast_log2((floor + reference[b]) / total)); + float dl = coded - wanted, wf = 1.0f; + if (dl > 0.0f) wf = o.rescore_asymmetry; + acc = acc + ((dl * (dl * w)) * wf); + } + score = (acc + (normalised_error * o.rescore_shape_mix)) + + (gain_error * (gain_error * o.rescore_gain_weight)); + } + if (score < best) { + best_gain = g; + best_candidate = c; + best = score; + } + } + if (!(g < high_g)) break; + } + } + const ShapeCandidate& chosen = list[best_candidate]; + fields[core::kFieldShapeLow] = chosen.low; + fields[core::kFieldShapeHigh] = chosen.high; + for (int b = 0; b < 4; b++) fields[core::kFieldDetail1 + b] = chosen.detail[b]; + fields[core::kFieldGain] = best_gain; + } + core::dequantize(cb, state, fields, nullptr); +} + +// The input frame: scaled to +-1, through the high-pass when its corner is above 0. +void filter_input(Encoder& e, const int16_t* pcm, float* x) { + HighPass& hp = e.highpass; + float corner = e.options.highpass_hz; + if (corner > 0.0f) { + if (!(hp.designed_hz == corner)) { + int w8 = to_int32_sat((corner * 8192.0f) / 8000.0f + 0.5f); + float c = tables::kCosine[static_cast(w8) & 0x1fff]; + float alpha = tables::kCosine[(static_cast(w8) + 0x1800u) & 0x1fff]; + alpha = alpha * kInvSqrt2; + float denominator = alpha + 1.0f; + float one_plus_cos = c + 1.0f; + float half = one_plus_cos * 0.5f; + float minus = -one_plus_cos; + float a1 = c * -2.0f; + hp.b0 = half / denominator; + hp.b1 = minus / denominator; + hp.b2 = half / denominator; + hp.a1 = a1 / denominator; + hp.a2 = (1.0f - alpha) / denominator; + hp.designed_hz = corner; + } + for (int i = 0; i < kFrameSamples; i++) { + float in = static_cast(pcm[i]) * 0x1p-15f; + float y = hp.b0 * in; + y = y + hp.b1 * hp.x1; + y = y + hp.b2 * hp.x2; + y = y - hp.a1 * hp.y1; + y = y - hp.a2 * hp.y2; + float x1 = hp.x1, y1 = hp.y1; + hp.x2 = x1; + hp.x1 = in; + hp.y1 = (kHighPassFlush > std::fabs(y)) ? 0.0f : y; + hp.y2 = (kHighPassFlush > std::fabs(y1)) ? 0.0f : y1; + x[i] = y; + } + } else { + for (int i = 0; i < kFrameSamples; i++) x[i] = static_cast(pcm[i]) * 0x1p-15f; + } +} + +void update_transitions(Encoder& e) { + const EncoderOptions& o = e.options; + const float* lf = e.log2_fundamental.data(); + for (int r = 0; r < kPitchCount; r++) { + float* row = &e.transition[static_cast(r) * kPitchCount]; + for (int c = 0; c < kPitchCount; c++) { + float d = lf[r] - lf[c]; + float ad = d < 0.0f ? -d : d; + float s1 = (ad + -1.0f) * kOctaveJumpScale; + float octave = 0.0f, jump = 0.0f; + if (std::fabs(s1) < 3.0f) octave = o.octave_jump_cost * fast_exp2(s1 * (s1 * kOctaveJumpExponent)); + float f = ad - o.pitch_jump_free; + if (f > 0.0f) jump = f * o.pitch_jump_cost; + row[c] = octave + jump; + } + } +} + +// Analyses the newest frame (already in the history) into its slot and pushes its pitch costs to the tracker. +void analyse_frame(Encoder& e, int64_t count) { + const EncoderOptions& o = e.options; + SignalHistory& history = e.history; + AnalysisSlot& slot = history.slots[static_cast(count % 3)]; + int pitch_offset = clamp_int(to_int32_sat(o.pitch_window_offset), kPitchOffsetLow, kPitchOffsetHigh); + int amplitude_offset = + clamp_int(to_int32_sat(o.amplitude_window_offset), kAmplitudeOffsetLow, kAmplitudeOffsetHigh); + // The writes into the slot happen in this order: with positive offsets the later reads see the earlier writes. + analysis_spectrum(e.long_window, history, pitch_offset + kAnalysisCenter, slot.pitch_spectrum); + analysis_spectrum(e.short_window, history, amplitude_offset + kAnalysisCenter, slot.amplitude_spectrum); + slot.peak = 0.0f; + { + int i0 = amplitude_offset + kNewSamples, i1 = amplitude_offset + kHistorySamples - 1; + float top = 0.0f; + for (int i = i0; i <= i1; i++) { + float s = history.sample(i); + if (s < 0.0f) s = -s; + if (s > top) { + slot.peak = s; + top = s; + } + } + } + float energy; + harmonic_fit_cost(e.long_window, slot.pitch_spectrum, e.fit_cost.data(), &energy); + slot.fit_cost = e.fit_cost; + slot.level_db = fast_log2(energy + kEnergyFloor) * kDbPerLog2; + yin_difference(history, pitch_offset + kAnalysisCenter, e.inverse_fundamental.data(), kPitchCount, kYinMaxLag, + e.yin_cost.data()); + float low_pitch_penalty = o.low_pitch_penalty; + if (o.low_band_threshold_db < 0.0f) { + const Spectrum& s = slot.pitch_spectrum; + float a = kTiny; + for (int i = 2; i < 17; i++) { + a = a + s.re[i] * s.re[i]; + a = a + s.im[i] * s.im[i]; + } + float b = kTiny; + for (int i = 22; i < 65; i++) { + b = b + s.re[i] * s.re[i]; + b = b + s.im[i] * s.im[i]; + } + float t = fast_log2(a / b) * kDbPerLog2; + int low = t < o.low_band_threshold_db; + slot.low_band = low; + if (low) low_pitch_penalty = low_pitch_penalty * o.low_band_penalty_scale; + } + if (o.onset_db > 0.0f && count >= 2) { + float d = slot.level_db - history.slots[static_cast((count + 1) % 3)].level_db; + if (d > o.onset_db) low_pitch_penalty = low_pitch_penalty * o.onset_low_pitch_scale; + } + for (int i = 0; i < kPitchCount; i++) + e.pitch_cost[i] = (e.fit_cost[i] + e.yin_cost[i] * o.yin_weight) + e.log2_ratio_to_lowest[i] * low_pitch_penalty; + + // pitch network features: 120 fit costs, 120 YIN values, 64 band log energies (relative to the largest), level + std::array& features = e.features[static_cast(count % 6)]; + std::memcpy(&features[0], e.fit_cost.data(), sizeof(float) * kPitchCount); + std::memcpy(&features[kPitchCount], e.yin_cost.data(), sizeof(float) * kPitchCount); + { + float* band = &features[2 * kPitchCount]; + float top = kVeryNegative; + const Spectrum& s = slot.pitch_spectrum; + for (int k = 0; k < 64; k++) { + float sum = kTiny; + for (int j = 0; j < 4; j++) { + sum = sum + s.re[4 * k + j] * s.re[4 * k + j]; + sum = sum + s.im[4 * k + j] * s.im[4 * k + j]; + } + float v = fast_log2(sum); + band[k] = v; + top = v > top ? v : top; + } + for (int k = 0; k < 64; k++) band[k] = band[k] - top; + features[kNetFeatures - 1] = slot.level_db * kLevelFeatureScale; + } + if (o.pitch_net_weight > 0.0f) { + for (int i = 0; i < kNetFrames; i++) { + int64_t m = count - 5 + i; + float* in = &e.net_input[static_cast(i) * kNetFeatures]; + if (m < 0) + std::memset(in, 0, sizeof(float) * kNetFeatures); + else + std::memcpy(in, e.features[static_cast(m % 6)].data(), sizeof(float) * kNetFeatures); + } + pitch_net_forward(e.net_input.data(), e.net_output.data()); + float w = o.pitch_net_weight; + for (int i = 0; i < kPitchCount; i++) e.pitch_cost[i] = e.pitch_cost[i] - e.net_output[i] * w; + } + if (e.transitions_dirty) { + update_transitions(e); + e.transitions_dirty = false; + } + tracker_push(e.tracker, e.pitch_cost.data(), e.transition.data()); + history.frame_count = count + 1; +} + +// The expected gain target of the frame `ahead` (1 or 2) frames after `frame`, for the gain look-ahead. +float lookahead_target(Encoder& e, int64_t frame, int ahead) { + const EncoderOptions& o = e.options; + const AnalysisSlot& slot = e.history.slots[static_cast((ahead + frame) % 3)]; + int pitch = tracker_decide(e.tracker, 2 - ahead); + float level = slot.level_db; + if ((level > o.gate_level_db && level > e.noise_floor_db + o.gate_above_floor_db) || !(ahead >= e.gate_hang)) { + HarmonicFit fit; + uint8_t flags[kMaxFitHarmonics]; + float amps[kMaxFitHarmonics]; + fit_harmonics(e.long_window, slot.pitch_spectrum, pitch, harmonics_of(pitch), fundamental_of(pitch), fit); + e.low_band = slot.low_band; + const float cost = slot.fit_cost[pitch]; + int voicing = choose_voicing(e, fit, 32, pitch, cost); + if (!is_voiced(voicing) && cost < o.unvoiced_fit_guard) voicing = choose_voicing(e, fit, 16, pitch, cost); + float f0 = fundamental_of(pitch); + int n = harmonics_of(pitch); + fit_harmonics(e.short_window, slot.amplitude_spectrum, pitch, harmonics_of(pitch), fundamental_of(pitch), fit); + float s = 0.0f; + if (n >= 1) { + voicing_flags(voicing, n, f0, flags); + harmonic_amplitudes(e, fit, flags, n, amps, f0); + for (int i = 0; i < n; i++) s = s + amps[i]; + } + return s * tables::kReciprocalCount[n] + tables::kHalfLog2Count[n]; + } + float amps[kSilenceBands]; + silence_amplitudes(e.short_window, slot.amplitude_spectrum, amps); + float s = 0.0f; + for (int i = 0; i < kSilenceBands; i++) s = o.silence_offset + (o.unvoiced_offset + (s + amps[i])); + return tables::kHalfLog2Count[kToneHarmonics] + tables::kReciprocalCount[kToneHarmonics] * s; +} + +} // namespace + +void encoder_reset(Encoder& e) { + e.history.samples.fill(0.0f); + e.history.frame_count = 0; + for (AnalysisSlot& slot : e.history.slots) std::memset(&slot, 0, sizeof slot); + tracker_reset(e.tracker, kPitchCount, kEncoderDelay); + e.noise_floor_db = 0.0f; + e.gate_hang = 0; + core::dequant_reset(e.predictor); + e.lookahead_gain.fill(0.0f); + e.lookahead_count = 0; + e.previous_amplitudes.fill(0.0f); + e.previous_fundamental = kInitialPreviousFundamental; + e.previous_harmonic_count = 0; + e.have_previous = 0; + e.previous_voicing = -1; + e.after_silence = 0; + e.low_band = 0; + e.previous_unvoiced = 1; + e.highpass.x1 = e.highpass.x2 = e.highpass.y1 = e.highpass.y2 = 0.0f; + e.highpass.designed_hz = -1.0f; + for (auto& f : e.features) f.fill(0.0f); + e.net_input.fill(0.0f); + e.net_output.fill(0.0f); + e.transitions_dirty = true; +} + +void encoder_init(Encoder& e) { + for (int i = 0; i < kPitchCount; i++) { + float f0 = fundamental_of(i); + e.inverse_fundamental[i] = 1.0f / f0; + e.log2_fundamental[i] = fast_log2(f0); + } + for (int i = 0; i < kPitchCount; i++) e.log2_ratio_to_lowest[i] = e.log2_fundamental[0] - e.log2_fundamental[i]; + for (int i = 0; i < kPitchCount; i++) { + float t = e.log2_fundamental[i] + -1.0f; + int best = -1; + float m = kOctaveMatch; + for (int k = 0; k < kPitchCount; k++) { + float d = e.log2_fundamental[k] - t; + d = d < 0.0f ? -d : d; + if (d < m) { + best = k; + m = d; + } + } + e.octave_below[i] = best; + } + init_analysis_window(e.long_window, tables::kLongWindow, 256); + init_analysis_window(e.short_window, tables::kShortWindow, 160); + init_shape_basis(e.shape_basis, codebook()); + encoder_reset(e); +} + +void encode_frame(Encoder& e, const int16_t* pcm, core::FrameFields& fields) { + const EncoderOptions& o = e.options; + SignalHistory& history = e.history; + std::memmove(&history.samples[0], &history.samples[kFrameSamples], sizeof(float) * kNewSamples); + filter_input(e, pcm, &history.samples[kNewSamples]); + + int64_t count = history.frame_count; + analyse_frame(e, count); + + float amps[kMaxFitHarmonics]; + uint8_t flags[kMaxFitHarmonics] = {}; + int64_t frame = count - kEncoderDelay; + if (frame < 0) { + // the frames before the first: silent, at a fixed low level + e.lookahead_count = 0; + for (float& a : amps) a = kStartupAmplitude; + quantize(e, kTonePitch, silent_voicing_index(o), amps, kToneHarmonics, nullptr, fields); + return; + } + int pitch = tracker_decide(e.tracker, 2); + // take the octave below when its fit is nearly as good + if (o.octave_down_tolerance > 0.0f) { + int below = e.octave_below[pitch]; + float divisor = e.previous_unvoiced == 0 ? 1.0f : o.octave_down_after_unvoiced; + if (below >= 0) { + float s0 = o.octave_down_tolerance / divisor; + const std::array& cost = history.slots[static_cast(frame % 3)].fit_cost; + float s1 = cost[below]; + s0 = cost[pitch] - s0; + if (!(s1 > s0 || s1 != s1 || s0 != s0)) pitch = below; + } + } + AnalysisSlot& slot = history.slots[static_cast(frame % 3)]; + // after an unvoiced frame, take the octave below when one of the later frames is already there + if (o.octave_down_lookback > 0.0f && e.previous_unvoiced != 0) { + int below = e.octave_below[pitch]; + if (below >= 0) { + for (int lag = 1; lag != -1; lag--) { + int r = tracker_decide(e.tracker, lag); + if (std::fabs(e.log2_fundamental[r] - e.log2_fundamental[below]) < kOctaveLookbackTolerance) { + pitch = below; + break; + } + } + } + } + if (frame == 0) init_floor(e); + bool gate = update_gate(e, slot.level_db); + e.lookahead_count = 0; + if (o.gain_lookahead_weight > 0.0f) { + for (int ahead = 1; ahead != 3; ahead++) e.lookahead_gain[ahead - 1] = lookahead_target(e, frame, ahead); + e.lookahead_count = 2; + } + + // voicing at the decided pitch + HarmonicFit fit; + fit_harmonics(e.long_window, slot.pitch_spectrum, pitch, harmonics_of(pitch), fundamental_of(pitch), fit); + e.low_band = slot.low_band; + const float cost = slot.fit_cost[pitch]; + int voicing = choose_voicing(e, fit, 32, pitch, cost); + if (!is_voiced(voicing) && cost < o.unvoiced_fit_guard) voicing = choose_voicing(e, fit, 16, pitch, cost); + + RescoreInput rescore; + rescore.enabled = o.rescore_candidates > 1.0f ? 1 : 0; + if (gate && !(o.gated_as_unvoiced > 0.0f)) { + // silent frame + silence_amplitudes(e.short_window, slot.amplitude_spectrum, amps); + for (int i = 0; i < kSilenceBands; i++) amps[i] = o.silence_offset + (o.unvoiced_offset + amps[i]); + e.have_previous = 0; + if (rescore.enabled) + band_energies(e, rescore, amps, kSilenceBands, nullptr, e.short_window.silence_norm.data(), slot, + kToneFundamental); + e.previous_voicing = -1; + e.after_silence = 1; + e.previous_unvoiced = 1; + quantize(e, kTonePitch, silent_voicing_index(o), amps, kToneHarmonics, &rescore, fields); + return; + } + if (gate) voicing = kAllUnvoiced; + int after_silence = e.after_silence; + e.after_silence = 0; + if (after_silence && o.onset_unvoiced > 0.0f) voicing = kAllUnvoiced; + if (!is_voiced(voicing)) { + float s0 = o.unvoiced_pitch_index; + int v = to_int32_sat(s0); + if (!(s0 < 0.0f || s0 != s0)) pitch = v < kPitchCount ? v : kPitchCount - 1; + } + int n = harmonics_of(pitch); + float f0 = fundamental_of(pitch); + fit_harmonics(e.short_window, slot.amplitude_spectrum, pitch, n, f0, fit); + if (n > 0) { + voicing_flags(voicing, n, f0, flags); + harmonic_amplitudes(e, fit, flags, n, amps, f0); + if (gate) + for (int i = 0; i < n; i++) amps[i] = o.gated_offset + amps[i]; + if (after_silence) + for (int i = 0; i < n; i++) amps[i] = o.onset_offset + amps[i]; + } + // smoothing with the previous frame and the next one + float next_weight = o.smooth_next; + if (!(next_weight == 0.0f) || !(o.smooth_previous == 0.0f)) { + float previous_weight = e.have_previous ? o.smooth_previous : 0.0f; + float next[kMaxFitHarmonics]; + if (!(next_weight == 0.0f)) { + const AnalysisSlot& following = history.slots[static_cast((count - 1) % 3)]; + HarmonicFit next_fit; + fit_harmonics(e.short_window, following.amplitude_spectrum, pitch, n, f0, next_fit); + harmonic_amplitudes(e, next_fit, flags, n, next, f0); + } + if (n >= 1) { + float own = (1.0f - previous_weight) - next_weight; + const float* prev = e.previous_amplitudes.data(); + for (int i = 0; i < n; i++) { + float a = amps[i]; + float s3 = own * a; + if (!(previous_weight == 0.0f)) { + float pos = (f0 * static_cast(static_cast(i + 1))) / e.previous_fundamental; + pos = pos + -1.0f; + pos = pos < 0.0f ? 0.0f : pos; + int32_t pn = e.previous_harmonic_count; + float last = static_cast(pn - 1); + pos = pos > last ? last : pos; + int k = to_int32_sat(pos); + float p; + if (k + 1 < pn) { + float p0 = prev[k]; + p = p0 + (pos - static_cast(k)) * (prev[k + 1] - p0); + } else { + p = prev[k]; + } + s3 = s3 + previous_weight * p; + } + if (!(next_weight == 0.0f)) { + float b = next[i]; + a = a - o.smooth_next_margin; + a = b > a ? b : a; + s3 = s3 + next_weight * a; + } + amps[i] = s3; + } + } + } + if (n >= 1) std::memcpy(e.previous_amplitudes.data(), amps, sizeof(float) * static_cast(n)); + e.previous_fundamental = f0; + e.previous_harmonic_count = n; + e.have_previous = 1; + if (n >= 1 && slot.peak >= o.peak_threshold) + for (int i = 0; i < n; i++) amps[i] = amps[i] - o.peak_reduction; + if (rescore.enabled) { + int first = e.short_window.first_harmonic[pitch]; + band_energies(e, rescore, amps, n, flags, &e.short_window.weight_energy[first], slot, f0); + } + bool unvoiced = !is_voiced(voicing); + int keep; + if (unvoiced) + keep = (!gate && o.voicing_hold_unvoiced > 0.0f) ? voicing : -1; + else + keep = gate ? -1 : voicing; + e.previous_voicing = keep; + e.previous_unvoiced = (gate || unvoiced) ? 1 : 0; + quantize(e, pitch, voicing, amps, n, &rescore, fields); +} + +} // namespace halfrate::enc diff --git a/mbe/encoder.h b/mbe/encoder.h new file mode 100644 index 0000000..e7d3992 --- /dev/null +++ b/mbe/encoder.h @@ -0,0 +1,97 @@ +// The encoder: 160 input samples in, the nine fields of one frame out, two frames behind the input. +// +// Each input frame is high-passed, analysed (two windowed spectra, the per-pitch harmonic fit and YIN costs, the +// pitch network) and pushed into the pitch tracker. The frame two frames back is then decided: pitch from the +// tracker, the noise gate, voicing from the harmonic fit, harmonic amplitudes from the amplitude spectrum, and the +// quantiser chooses gain and shape fields against the decoder's own prediction, which it tracks with a +// dequantiser state of its own. +#pragma once +#include +#include + +#include "dequant.h" +#include "frame.h" +#include "analysis.h" +#include "history.h" +#include "options.h" +#include "pitch.h" +#include "shape_quantizer.h" + +namespace halfrate::enc { + +constexpr int kEncoderDelay = 2; + +// Input high-pass: a second-order section (coefficients for the corner the options name). +struct HighPass { + float b0 = 0.0f, b1 = 0.0f, b2 = 0.0f, a1 = 0.0f, a2 = 0.0f; + float x1 = 0.0f, x2 = 0.0f, y1 = 0.0f, y2 = 0.0f; + float designed_hz = -1.0f; // corner the coefficients are for +}; + +// What the band-energy rescoring of the shape candidates compares against: per harmonic its band (of the 18 +// rescoring bands) and weight, and the reference energy per band. +struct RescoreInput { + int32_t enabled = 0; + std::array band{}; + std::array weight{}; + std::array band_energy{}; +}; + +struct Encoder { + EncoderOptions options; + bool transitions_dirty = true; // the tracker's transition costs depend on options + + // pitch grid (the codebook's pitch indices) + std::array inverse_fundamental{}; // samples per period + std::array log2_fundamental{}; + std::array log2_ratio_to_lowest{}; // log2 f[0] - log2 f[i]: octaves below index 0 + std::array octave_below{}; // index one octave lower (-1: none within 0.06) + std::array transition{}; // tracker cost [from * 120 + to] + + AnalysisWindow long_window; // 256 points: pitch + AnalysisWindow short_window; // 160 points: amplitudes + ShapeBasis shape_basis; + + SignalHistory history; + PitchTracker tracker; + + // gate + float noise_floor_db = 0.0f; + int32_t gate_hang = 0; + + // the decoder's predictor state, and what the gain choice looks ahead to + core::DequantState predictor; + std::array lookahead_gain{}; // expected gain targets of the next two frames + int32_t lookahead_count = 0; // how many of them are set (0 or 2) + + // previous frame + std::array previous_amplitudes{}; + float previous_fundamental = 0.0f; + int32_t previous_harmonic_count = 0; + int32_t have_previous = 0; // previous_amplitudes hold a speech frame + int32_t previous_voicing = -1; // its voicing index for the hysteresis, -1: none + int32_t after_silence = 0; // the previous frame was silent + int32_t low_band = 0; // the frame being voiced has a weak low band + int32_t previous_unvoiced = 1; // the previous frame was unvoiced or gated + + HighPass highpass; + + // pitch network input: the last six frames' features (frame n in features[n % 6]) + std::array, kNetFrames> features{}; + std::array net_input{}; + std::array net_output{}; + + // per grid pitch, this frame + std::array fit_cost{}; + std::array yin_cost{}; + std::array pitch_cost{}; +}; + +// Builds the tables and resets the state (the options keep their values). +void encoder_init(Encoder& e); +void encoder_reset(Encoder& e); + +// Encodes 160 samples; fields gets the frame of the input two frames back. +void encode_frame(Encoder& e, const int16_t* pcm, core::FrameFields& fields); + +} // namespace halfrate::enc diff --git a/mbe/encoder_api.cpp b/mbe/encoder_api.cpp new file mode 100644 index 0000000..f1db62e --- /dev/null +++ b/mbe/encoder_api.cpp @@ -0,0 +1,47 @@ +// The encoder half of the C API (include/halfrate.h). +#include +#include + +#include "frame.h" +#include "numeric.h" +#include "encoder.h" +#include "halfrate.h" + +struct hr_encoder { + halfrate::enc::Encoder encoder; +}; + +extern "C" { + +hr_encoder* hr_encoder_new(void) { + hr_encoder* e = new (std::nothrow) hr_encoder; + if (!e) return nullptr; + halfrate::enc::encoder_init(e->encoder); + return e; +} + +void hr_encoder_free(hr_encoder* e) { delete e; } + +int hr_encoder_set(hr_encoder* e, const char* name, double value) { + if (!e || !name) return -1; + if (!halfrate::enc::set_option(e->encoder.options, name, value)) return -1; + e->encoder.transitions_dirty = true; + return 0; +} + +void hr_encode(hr_encoder* e, const int16_t* pcm, uint8_t* frame) { + using namespace halfrate; + if (!e || !pcm || !frame) return; + core::FrameFields fields; + enc::encode_frame(e->encoder, pcm, fields); + uint8_t bits[core::kFrameBits], rotated[core::kFrameBits]; + core::bits_from_fields(fields, bits); + if (core::to_int32_sat(e->encoder.options.rotated_layout) == 1) { + core::rotated_from_standard(bits, rotated); + core::bytes_from_bits(rotated, frame); + } else { + core::bytes_from_bits(bits, frame); + } +} + +} // extern "C" diff --git a/mbe/enhance.cpp b/mbe/enhance.cpp new file mode 100644 index 0000000..630cb5d --- /dev/null +++ b/mbe/enhance.cpp @@ -0,0 +1,101 @@ +#include "enhance.h" + +#include "fastmath.h" +#include "numeric.h" +#include "tables.h" + +namespace halfrate::core { + +namespace { +constexpr float kResponseScale = 0x1.8209f6p+1f; // 3.01592898 +constexpr float kLog2Floor = 0x1.197998p-40f; // 1e-12, keeps log2 finite +constexpr float kTiltStart = -0x1.4cccccp-1f; // tilt starts at harmonic 0.65 L ... +constexpr float kTiltWidth = 0x1.666668p-2f; // ... reaches full at 0.65 L + 0.35 L +constexpr float kTiltLog2Gain = 0x1.19999ap-1f; // full tilt: 2^0.55 + +// cos(2 pi f l) from the table, f in cycles per sample +inline float harmonic_cosine(float fundamental, float harmonic) { + float phase = fundamental * harmonic; + phase = phase * 8192.0f; + phase = phase + 0.5f; + return tables::kCosine[to_int64_sat(phase) & 8191]; +} +} // namespace + +void enhance_formants(const EnhanceOptions& options, float fundamental, float omega, int harmonic_count, + float* amplitude) { + if (options.mode != 1) return; + int count = harmonic_count; + if (count < 1) return; + float r0 = 0.0f, r1 = 0.0f; + for (int l = 1; l <= count; l++) { + float power = amplitude[l] * amplitude[l]; + r0 = r0 + power; + r1 = r1 + power * harmonic_cosine(fundamental, static_cast(static_cast(l))); + } + if (r0 <= 0.0f) return; + float r0_squared = r0 * r0, r1_squared = r1 * r1; + float squares = r1_squared + r0_squared; + float twice_product = r1 * (r0 + r0); + float difference = r0_squared - r1_squared; + float weight[kMaxHarmonics + 8]; + int32_t every = options.bypass_divisor; + uint32_t bypass_limit = static_cast(every); // l * every, wrapping like a 32-bit counter + for (int l = 1; l <= count; l++, bypass_limit += static_cast(every)) { + float w = 1.0f; + float denominator = difference * (r0 * omega); + float harmonic = static_cast(static_cast(l)); + float numerator; + if (denominator <= 0.0f) goto store; + numerator = squares - twice_product * harmonic_cosine(fundamental, harmonic); + numerator = numerator * kResponseScale; + if (numerator <= 0.0f) goto store; + if (amplitude[l] <= 0.0f) goto store; + { + float log2_amplitude = fast_log2(amplitude[l]); + float log2_response = fast_log2(numerator / denominator); + log2_response = log2_response * 0.5f; + float raw = fast_exp2(options.strength * (log2_amplitude + log2_response)); + if (every >= 1 && static_cast(bypass_limit) <= count) + w = 1.0f; + else + w = raw > options.max_weight ? options.max_weight : (raw < options.min_weight ? options.min_weight : raw); + float exponent = fundamental * harmonic < options.split_frequency ? options.power_low : options.power_high; + if (exponent != 1.0f) w = fast_exp2(exponent * fast_log2(w)); + } + store: + weight[l] = w; + } + float energy = 0.0f; + for (int l = 1; l <= count; l++) { + float v = amplitude[l] * weight[l]; + amplitude[l] = v; + energy = energy + v * v; + } + float scale = 1.0f; + if (energy > 0.0f) scale = fast_sqrt(r0 / energy); + for (int l = 1; l <= count; l++) amplitude[l] = scale * amplitude[l]; +} + +void shape_log2(const FrameParams& frame, bool tilt, float* out) { + int count = frame.harmonic_count; + float amplitude[kMaxHarmonics + 8]; + amplitude[0] = 0.0f; + for (int i = 0; i < count; i++) amplitude[1 + i] = fast_exp2(frame.log2_amplitude[i]); + enhance_formants(EnhanceOptions{}, frame.fundamental, frame.omega, count, amplitude); + if (tilt) { + for (int l = 1; l <= count; l++) { + float x = static_cast(static_cast(l)) / static_cast(count); + x = x + kTiltStart; + x = x / kTiltWidth; + if (!(x > 0.0f)) continue; + float a = amplitude[l]; + x = x > 1.0f ? 1.0f : x; + x = x * kTiltLog2Gain; + amplitude[l] = a * fast_exp2(x); + } + } + for (int i = 0; i < count; i++) out[1 + i] = fast_log2(amplitude[1 + i] + kLog2Floor); +} + +} // namespace halfrate::core diff --git a/mbe/enhance.h b/mbe/enhance.h new file mode 100644 index 0000000..a75efd9 --- /dev/null +++ b/mbe/enhance.h @@ -0,0 +1,33 @@ +// Spectral (formant) enhancement of the harmonic amplitudes, shared by the decoder (before synthesis) and the +// encoder (which scores candidate frames by what the decoder will produce). +#pragma once +#include + +#include "dequant.h" + +namespace halfrate::core { + +// Enhancement settings. The defaults are the decoder's defaults and what shape_log2 uses. +struct EnhanceOptions { + int32_t mode = 1; // the enhancement runs only when this is exactly 1 + float strength = 0.5f; // exponent applied to the raw weight + float min_weight = 0.3f; // weights are clamped to [min_weight, max_weight] + float max_weight = 2.0f; + int32_t bypass_divisor = 0; // >= 1: harmonics l with l * bypass_divisor <= L keep weight 1 + float power_high = 0.85f; // the weight is raised to this power at or above split_frequency + float power_low = 0.6f; // and to this one below it + float split_frequency = 0.125f; // cycles per sample (1 kHz) +}; + +// Enhances amplitude[1..L] (linear; amplitude[0] is not used) in place. Each harmonic gets a weight +// (amplitude * sqrt(R(w)))^strength, where R is the response of a one-pole model fitted to the spectrum's +// autocorrelation R0, R1, clamped and raised to a frequency-dependent power; the result is rescaled to the +// original energy. fundamental is in cycles per sample, omega in radians per sample. +void enhance_formants(const EnhanceOptions& options, float fundamental, float omega, int harmonic_count, + float* amplitude); + +// log2 harmonic amplitudes of frame after enhancement with the default options and, if tilt, a gain rising toward +// the top harmonics: out[1..L] (out[0] is not written). Reads fundamental, omega, harmonic_count and log2_amplitude. +void shape_log2(const FrameParams& frame, bool tilt, float* out); + +} // namespace halfrate::core diff --git a/mbe/fastmath.cpp b/mbe/fastmath.cpp new file mode 100644 index 0000000..6b942d3 --- /dev/null +++ b/mbe/fastmath.cpp @@ -0,0 +1,73 @@ +#include "fastmath.h" + +#include + +#include "numeric.h" + +namespace halfrate::core { + +namespace { +constexpr float kSmallestNormal = 0x1p-126f; +constexpr float kSqrt2 = 0x1.6a09e6p+0f; // 1.41421354 +constexpr float kTwoOverLn2 = 0x1.715476p+1f; // 2 / ln 2 +constexpr float kLn2 = 0x1.62e43p-1f; // ln 2 +} // namespace + +float fast_log2(float x) { + if (!(x >= kSmallestNormal)) return -126.0f; + uint32_t bits = float_bits(x); + float m = float_from_bits(0x3f800000u | (bits & 0x7fffffu)); // mantissa in [1, 2) + float half = m * 0.5f; + bool fold = m > kSqrt2; + m = fold ? half : m; + int exponent = (fold ? -126 : -127) + static_cast(bits >> 23); + // log(m) = 2 atanh(t), t = (m - 1) / (m + 1); series t (1 + t^2/3 + t^4/5 + t^6/7 + t^8/9) + float t = (m + -1.0f) / (m + 1.0f); + float t2 = t * t; + float p = t2 * (1.0f / 9.0f); + p = p + 1.0f / 7.0f; + p = t2 * p; + p = p + 1.0f / 5.0f; + p = t2 * p; + p = p + 1.0f / 3.0f; + p = t2 * p; + p = p + 1.0f; + float r = t * p; + r = r * kTwoOverLn2; + return r + static_cast(exponent); +} + +float fast_exp2(float x) { + if (x != x) return 0.0f; + x = x < -126.0f ? -126.0f : x; + x = x > 127.0f ? 127.0f : x; + // round half up: x + 200.5 is positive, so truncation is floor + int whole = static_cast(x + 0.5f + 200.0f) - 200; + float f = x - static_cast(whole); + f = f * kLn2; + // e^f = 1 + f (1 + f (1/2 + f (1/6 + f (1/24 + f (1/120 + f (1/720 + f / 5040)))))) + float p = f * (1.0f / 5040.0f); + p = p + 1.0f / 720.0f; + p = f * p; + p = p + 1.0f / 120.0f; + p = f * p; + p = p + 1.0f / 24.0f; + p = f * p; + p = p + 1.0f / 6.0f; + p = f * p; + p = p + 0.5f; + p = f * p; + p = p + 1.0f; + float r = f * p; + r = r + 1.0f; + whole = whole > -126 ? whole : -126; + whole = whole < 127 ? whole : 127; + return r * float_from_bits(0x3f800000u + (static_cast(whole) << 23)); +} + +float fast_sqrt(float x) { + if (!(x > kSmallestNormal)) return 0.0f; + return fast_exp2(fast_log2(x) * 0.5f); +} + +} // namespace halfrate::core diff --git a/mbe/fastmath.h b/mbe/fastmath.h new file mode 100644 index 0000000..7c74d32 --- /dev/null +++ b/mbe/fastmath.h @@ -0,0 +1,18 @@ +// The codec's own log2, exp2 and square root. They are approximations (series on the mantissa), and the codec's +// output depends on their exact results, so the codec uses these, never the C library's. +#pragma once + +namespace halfrate::core { + +// log2(x): an atanh series on the mantissa folded into [sqrt(1/2), sqrt(2)). For x below the smallest normal +// float (including 0, negatives, subnormals and NaN) it returns -126. log2(+inf) is 128. +float fast_log2(float x); + +// 2^x: x clamped to [-126, 127], the integer part (rounded half up) into the exponent, and a degree-7 Taylor +// series of e^(f ln 2) for the rest. NaN gives 0. +float fast_exp2(float x); + +// sqrt(x) = fast_exp2(fast_log2(x) / 2) for x above the smallest normal float; 0 otherwise (and for NaN). +float fast_sqrt(float x); + +} // namespace halfrate::core diff --git a/mbe/fec.cpp b/mbe/fec.cpp new file mode 100644 index 0000000..ab04778 --- /dev/null +++ b/mbe/fec.cpp @@ -0,0 +1,103 @@ +#include "fec.h" + +#include + +#include "tables.h" + +namespace halfrate::core { + +namespace { + +// channel position of code bit i (DMR interleave) +inline int channel_position(int i) { return 4 * i - 71 * (i / 18); } + +inline int popcount(uint32_t v) { return __builtin_popcount(v); } + +} // namespace + +uint32_t golay23_parity(uint32_t data) { + uint32_t parity = 0; + for (int i = 0; i < 12; i++) + if ((data >> (11 - i)) & 1) parity ^= tables::kGolayParityRows[i]; + return parity; +} + +uint32_t golay23_decode(uint32_t code, int* errors) { + uint32_t data = (code >> 11) & 0xfff; + uint32_t syndrome = (golay23_parity(data) ^ code) & 0x7ff; + uint32_t correction = tables::kGolaySyndromeCorrection[syndrome] & 0xfff; + data ^= correction; + if (errors) { + uint32_t left = (golay23_parity(data) ^ code) & 0x7ff; + *errors = popcount(left) + popcount(correction); + } + return data; +} + +uint32_t fec_scramble_mask(uint32_t first_data) { + uint32_t state = first_data << 4, mask = 0; + for (int i = 0; i < 23; i++) { + uint32_t v = state * 173 + 13849; + state = v & 0xffff; + mask = (mask << 1) | ((v >> 15) & 1); + } + return mask; +} + +void fec_encode_bits(const uint8_t* bits49, uint8_t* bits72) { + uint32_t d0 = 0, d1 = 0; + for (int i = 0; i < 12; i++) d0 = (d0 << 1) | (bits49[i] & 1); + for (int i = 0; i < 12; i++) d1 = (d1 << 1) | (bits49[12 + i] & 1); + uint8_t code[72]; + uint32_t word0 = (golay23_parity(d0) & 0x7ff) | (d0 << 11), parity = 0; + for (int i = 0; i < 23; i++) { + code[i] = (word0 >> (22 - i)) & 1; + parity ^= code[i]; + } + code[23] = static_cast(parity); + uint32_t word1 = fec_scramble_mask(d0) ^ ((golay23_parity(d1) & 0x7ff) | (d1 << 11)); + for (int i = 0; i < 23; i++) code[24 + i] = (word1 >> (22 - i)) & 1; + for (int i = 0; i < 25; i++) code[47 + i] = bits49[24 + i] & 1; + for (int i = 0; i < 72; i++) bits72[channel_position(i)] = code[i]; +} + +int fec_decode_bits(const uint8_t* bits72, uint8_t* bits49, FecErrors* errors) { + uint8_t code[72]; + for (int i = 0; i < 72; i++) code[i] = bits72[channel_position(i)] & 1; + uint32_t word = 0; + for (int i = 0; i < 23; i++) word = (word << 1) | code[i]; + int e0, e1; + uint32_t d0 = golay23_decode(word, &e0); + uint32_t corrected0 = (golay23_parity(d0) & 0x7ff) | (d0 << 11); + uint32_t parity = popcount(corrected0 & 0x7fffff) & 1; + word = 0; + for (int i = 24; i < 47; i++) word = (word << 1) | code[i]; + uint32_t d1 = golay23_decode(fec_scramble_mask(d0) ^ word, &e1); + for (int i = 0; i < 12; i++) bits49[i] = (d0 >> (11 - i)) & 1; + for (int i = 0; i < 12; i++) bits49[12 + i] = (d1 >> (11 - i)) & 1; + std::memcpy(bits49 + 24, code + 47, 25); + if (errors) { + errors->first_word = e0; + errors->second_word = e1; + } + return e0 >= 3 && parity != code[23] ? -1 : e1 + e0; +} + +void fec_encode_frame(const uint8_t* frame, uint8_t* air) { + uint8_t bits49[49], bits72[72]; + for (int i = 0; i < 49; i++) bits49[i] = (frame[i >> 3] >> (7 - (i & 7))) & 1; + fec_encode_bits(bits49, bits72); + std::memset(air, 0, 9); + for (int i = 0; i < 72; i++) air[i >> 3] |= static_cast(bits72[i] << (7 - (i & 7))); +} + +int fec_decode_frame(const uint8_t* air, uint8_t* frame, FecErrors* errors) { + uint8_t bits72[72], bits49[49]; + for (int i = 0; i < 72; i++) bits72[i] = (air[i >> 3] >> (7 - (i & 7))) & 1; + int result = fec_decode_bits(bits72, bits49, errors); + std::memset(frame, 0, 7); + for (int i = 0; i < 49; i++) frame[i >> 3] |= static_cast(bits49[i] << (7 - (i & 7))); + return result; +} + +} // namespace halfrate::core diff --git a/mbe/fec.h b/mbe/fec.h new file mode 100644 index 0000000..01d966c --- /dev/null +++ b/mbe/fec.h @@ -0,0 +1,41 @@ +// Forward error correction of the 49-bit frame into the 72-bit DMR on-air frame. +// +// The 72 code bits are: a Golay (24,12) word of frame bits 0..11 (the (23,12) code plus an overall parity bit), +// a Golay (23,12) word of frame bits 12..23 XORed with a 23-bit scrambling sequence seeded by bits 0..11, and frame +// bits 24..48 uncoded. Code bit i goes to channel bit 4 i - 71 floor(i / 18) (the DMR 4 x 18 interleave). +// Bit arrays hold one bit per byte (only bit 0 is read); byte frames are MSB first. +#pragma once +#include + +namespace halfrate::core { + +// The 11 parity bits of 12 data bits. +uint32_t golay23_parity(uint32_t data); + +// Decodes a (23,12) code word (data in bits 22..11, parity in bits 10..0) and returns the 12 corrected data bits. +// If errors is given it receives the corrected data bits plus the parity mismatches left after correction. +uint32_t golay23_decode(uint32_t code, int* errors); + +// 23-bit scrambling mask of the second Golay word, from the first word's 12 data bits. +uint32_t fec_scramble_mask(uint32_t first_data); + +// Error counts of one decoded frame. +struct FecErrors { + int first_word = 0; // errors of the Golay (24,12) word (frame bits 0..11) + int second_word = 0; // errors of the scrambled Golay (23,12) word (frame bits 12..23) +}; + +// 49 frame bits -> 72 channel bits. +void fec_encode_bits(const uint8_t* bits49, uint8_t* bits72); + +// 72 channel bits -> 49 frame bits. Returns first_word + second_word, or -1 (frame unreliable) when the first +// word had 3 errors or more and its overall parity bit disagrees with the corrected word. +int fec_decode_bits(const uint8_t* bits72, uint8_t* bits49, FecErrors* errors); + +// 7-byte frame -> 9-byte on-air frame. +void fec_encode_frame(const uint8_t* frame, uint8_t* air); + +// 9-byte on-air frame -> 7-byte frame. Returns what fec_decode_bits returns; errors as there (may be null). +int fec_decode_frame(const uint8_t* air, uint8_t* frame, FecErrors* errors); + +} // namespace halfrate::core diff --git a/mbe/fft.cpp b/mbe/fft.cpp new file mode 100644 index 0000000..29ac534 --- /dev/null +++ b/mbe/fft.cpp @@ -0,0 +1,49 @@ +#include "fft.h" + +#include "tables.h" + +namespace halfrate::core { + +void fft512(float* re, float* im) { + // bit-reversal permutation + unsigned j = 0; + for (int i = 0; i < 512; i++) { + if (i < static_cast(j)) { + float r = re[i], m = im[i]; + re[i] = re[j]; + im[i] = im[j]; + re[j] = r; + im[j] = m; + } + unsigned bit = 0x100; + while (bit && (j & bit)) { + j ^= bit; + bit >>= 1; + } + j |= bit; + } + const float* cosine = tables::kCosine; + for (int size = 2, shift = 1; size <= 512; size <<= 1, shift++) { + int half = size >> 1; + unsigned step = 8192u >> shift; // table entries per twiddle step + for (int start = 0; start < 512; start += size) { + for (int k = 0; k < half; k++) { + float c = cosine[k * step]; + float s = cosine[(6144 + k * step) & 8191]; // sin + int top = start + k, bottom = start + half + k; + float xr = re[bottom], xi = im[bottom]; + // t = x e^-j(angle) = (c xr + s xi) + j (c xi - s xr) + float tr = c * xr; + tr = tr + s * xi; + float ti = c * xi; + ti = ti - s * xr; + re[bottom] = re[top] - tr; + im[bottom] = im[top] - ti; + re[top] = tr + re[top]; + im[top] = ti + im[top]; + } + } + } +} + +} // namespace halfrate::core diff --git a/mbe/fft.h b/mbe/fft.h new file mode 100644 index 0000000..61838dd --- /dev/null +++ b/mbe/fft.h @@ -0,0 +1,10 @@ +// 512-point complex FFT. +#pragma once + +namespace halfrate::core { + +// In-place forward transform (kernel e^-j), unscaled, of re[512] + j im[512]: radix 2, decimation in time, with +// twiddles from the 8192-entry cosine table. +void fft512(float* re, float* im); + +} // namespace halfrate::core diff --git a/mbe/frame.cpp b/mbe/frame.cpp new file mode 100644 index 0000000..5861fcb --- /dev/null +++ b/mbe/frame.cpp @@ -0,0 +1,54 @@ +#include "frame.h" + +#include + +#include "tables.h" + +namespace halfrate::core { + +void bits_from_bytes(const uint8_t* frame, uint8_t* bits49) { + for (int i = 0; i < kFrameBits; i++) bits49[i] = (frame[i >> 3] >> (7 - (i & 7))) & 1; +} + +void bytes_from_bits(const uint8_t* bits49, uint8_t* frame) { + std::memset(frame, 0, kFrameBytes); + for (int i = 0; i < kFrameBits; i++) frame[i >> 3] |= static_cast((bits49[i] & 1) << (7 - (i & 7))); +} + +FrameFields fields_from_bits(const uint8_t* bits49) { + FrameFields fields{}; + for (int f = 0; f < kFieldCount; f++) { + uint32_t v = 0; + for (int k = 0; k < tables::kFieldWidth[f]; k++) v = (v << 1) | (bits49[tables::kFieldBitPosition[f][k]] & 1); + fields[f] = static_cast(v); + } + return fields; +} + +void bits_from_fields(const FrameFields& fields, uint8_t* bits49) { + for (int f = 0; f < kFieldCount; f++) { + int width = tables::kFieldWidth[f]; + uint32_t v = static_cast(fields[f]); + for (int k = 0; k < width; k++) bits49[tables::kFieldBitPosition[f][k]] = (v >> (width - 1 - k)) & 1; + } +} + +void standard_from_rotated(const uint8_t* rotated49, uint8_t* standard49) { + uint8_t b40 = rotated49[40], b41 = rotated49[41], b42 = rotated49[42], b43 = rotated49[43]; + std::memmove(standard49, rotated49, kFrameBits); + standard49[40] = b43; + standard49[41] = b40; + standard49[42] = b41; + standard49[43] = b42; +} + +void rotated_from_standard(const uint8_t* standard49, uint8_t* rotated49) { + uint8_t b40 = standard49[40], b41 = standard49[41], b42 = standard49[42], b43 = standard49[43]; + std::memmove(rotated49, standard49, kFrameBits); + rotated49[40] = b41; + rotated49[41] = b42; + rotated49[42] = b43; + rotated49[43] = b40; +} + +} // namespace halfrate::core diff --git a/mbe/frame.h b/mbe/frame.h new file mode 100644 index 0000000..3a2ad04 --- /dev/null +++ b/mbe/frame.h @@ -0,0 +1,50 @@ +// The 49-bit frame: nine parameter fields at fixed bit positions. +// +// field bits meaning +// 0 7 pitch index (0..119 voice; 120..123 erasure; 124..125 tone/fixed pitch; 126..127 reserved) +// 1 5 voicing index (16/17 silence, 18 and up pulse codes, see the decoder) +// 2 5 gain index +// 3 9 shape, 8-point transform coefficients 1..3 +// 4 7 shape, 8-point transform coefficients 4..7 +// 5..8 5 4 4 3 higher-order shape coefficients of blocks 1..4 +// +// Field bits are spread over the frame (tables::kFieldBitPosition). A bit array holds one bit per byte, frame +// bit 0 first; a byte frame is 7 bytes, MSB first, the last byte holding bit 48 in its top bit. +// +// The rotated layout (a decoder/encoder option) is the same frame with bits 40..43 rotated: what the standard +// layout has at 40, 41, 42, 43 is sent at 43, 40, 41, 42. +#pragma once +#include +#include + +namespace halfrate::core { + +constexpr int kFrameBits = 49; +constexpr int kFrameBytes = 7; +constexpr int kFieldCount = 9; + +// Field indices +enum Field : int { + kFieldPitch = 0, + kFieldVoicing = 1, + kFieldGain = 2, + kFieldShapeLow = 3, + kFieldShapeHigh = 4, + kFieldDetail1 = 5, // 5..8: blocks 1..4 +}; + +using FrameFields = std::array; + +// 7 bytes <-> 49 bits +void bits_from_bytes(const uint8_t* frame, uint8_t* bits49); +void bytes_from_bits(const uint8_t* bits49, uint8_t* frame); + +// 49 bits <-> the nine fields (standard layout). bits_from_fields writes every bit of the frame. +FrameFields fields_from_bits(const uint8_t* bits49); +void bits_from_fields(const FrameFields& fields, uint8_t* bits49); + +// Rotated layout <-> standard layout (bits 40..43); the other bits are copied. +void standard_from_rotated(const uint8_t* rotated49, uint8_t* standard49); +void rotated_from_standard(const uint8_t* standard49, uint8_t* rotated49); + +} // namespace halfrate::core diff --git a/mbe/frame_layout.cpp b/mbe/frame_layout.cpp new file mode 100644 index 0000000..b4e58ac --- /dev/null +++ b/mbe/frame_layout.cpp @@ -0,0 +1,21 @@ +// The 49-bit frame layout: width of each of the nine parameter fields, and the frame bit that carries each field +// bit, most significant first (unused entries are 0). Bits 0..23 are the two Golay-protected words. +#include "tables.h" + +namespace halfrate::tables { + +const int32_t kFieldWidth[9] = {7, 5, 5, 9, 7, 5, 4, 4, 3}; + +const int8_t kFieldBitPosition[9][9] = { + {0, 1, 2, 3, 37, 38, 39, 0, 0}, + {4, 5, 6, 7, 35, 0, 0, 0, 0}, + {8, 9, 10, 11, 36, 0, 0, 0, 0}, + {12, 13, 14, 15, 16, 17, 18, 19, 40}, + {20, 21, 22, 23, 41, 42, 43, 0, 0}, + {24, 25, 26, 27, 44, 0, 0, 0, 0}, + {28, 29, 30, 45, 0, 0, 0, 0, 0}, + {31, 32, 33, 46, 0, 0, 0, 0, 0}, + {34, 47, 48, 0, 0, 0, 0, 0, 0}, +}; + +} // namespace halfrate::tables diff --git a/mbe/golay.cpp b/mbe/golay.cpp new file mode 100644 index 0000000..847240d --- /dev/null +++ b/mbe/golay.cpp @@ -0,0 +1,272 @@ +// Generated table data. Do not edit. +#include "tables.h" + +namespace halfrate::tables { + +// Golay (23,12): the 11 parity bits contributed by each data bit, most significant data bit first. +const uint32_t kGolayParityRows[12] = { + 0x63a, 0x31d, 0x7b4, 0x3da, 0x1ed, 0x6cc, + 0x366, 0x1b3, 0x6e3, 0x54b, 0x49f, 0x475, +}; + +// Golay (23,12): error pattern for each 11-bit syndrome; the low 12 bits correct the data bits. +const uint32_t kGolaySyndromeCorrection[2048] = { + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x48, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x824, + 0x0, 0x0, 0x0, 0x301, 0x0, 0x400, 0x90, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x48, + 0x0, 0x0, 0x0, 0x48, 0x0, 0x48, 0x48, 0x48, + 0x0, 0x0, 0x0, 0x10, 0x0, 0x1, 0x602, 0x180, + 0x0, 0x86, 0x800, 0x420, 0x120, 0xa10, 0x5, 0x48, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x500, + 0x0, 0x0, 0x0, 0x4, 0x0, 0x222, 0x90, 0x801, + 0x0, 0x0, 0x0, 0x42, 0x0, 0x1, 0x90, 0x208, + 0x0, 0x808, 0x90, 0x420, 0x90, 0x144, 0x90, 0x90, + 0x0, 0x0, 0x0, 0xa80, 0x0, 0x1, 0x20, 0x16, + 0x0, 0x110, 0x3, 0x420, 0xc04, 0x80, 0x300, 0x48, + 0x0, 0x1, 0x10c, 0x420, 0x1, 0x1, 0x840, 0x1, + 0x240, 0x420, 0x420, 0x420, 0xa, 0x1, 0x90, 0x420, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x500, + 0x0, 0x0, 0x0, 0xa0, 0x0, 0x15, 0xa00, 0x2, + 0x0, 0x0, 0x0, 0x10, 0x0, 0x2c0, 0x9, 0x2, + 0x0, 0x808, 0x444, 0x2, 0x120, 0x2, 0x2, 0x2, + 0x0, 0x0, 0x0, 0x10, 0x0, 0x802, 0x84, 0x221, + 0x0, 0x600, 0x3, 0x904, 0x120, 0x80, 0x410, 0x48, + 0x0, 0x10, 0x10, 0x10, 0x120, 0x40c, 0x840, 0x10, + 0x120, 0x41, 0x288, 0x10, 0x120, 0x120, 0x120, 0x2, + 0x0, 0x0, 0x0, 0x500, 0x0, 0x500, 0x500, 0x500, + 0x0, 0x808, 0x3, 0x250, 0x40, 0x80, 0x2c, 0x500, + 0x0, 0x808, 0x220, 0x85, 0x6, 0x30, 0x840, 0x500, + 0x808, 0x808, 0x100, 0x808, 0x601, 0x808, 0x90, 0x2, + 0x0, 0x64, 0x3, 0x8, 0x218, 0x80, 0x840, 0x500, + 0x3, 0x80, 0x3, 0x3, 0x80, 0x80, 0x3, 0x80, + 0x480, 0x302, 0x840, 0x10, 0x840, 0x1, 0x840, 0x840, + 0x14, 0x808, 0x3, 0x420, 0x120, 0x80, 0x840, 0x204, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x83, + 0x0, 0x0, 0x0, 0x4, 0x0, 0x400, 0xa00, 0x130, + 0x0, 0x0, 0x0, 0x10, 0x0, 0x400, 0x140, 0x208, + 0x0, 0x400, 0x2a, 0x8c0, 0x400, 0x400, 0x5, 0x400, + 0x0, 0x0, 0x0, 0x10, 0x0, 0x304, 0x20, 0xc00, + 0x0, 0x821, 0x580, 0x202, 0x12, 0x80, 0x5, 0x48, + 0x0, 0x10, 0x10, 0x10, 0x888, 0x62, 0x5, 0x10, + 0x240, 0x108, 0x5, 0x10, 0x5, 0x400, 0x5, 0x5, + 0x0, 0x0, 0x0, 0x4, 0x0, 0x850, 0x20, 0x208, + 0x0, 0x4, 0x4, 0x4, 0x109, 0x80, 0x442, 0x4, + 0x0, 0x1a0, 0xc01, 0x208, 0x6, 0x208, 0x208, 0x208, + 0x240, 0x13, 0x100, 0x4, 0x820, 0x400, 0x90, 0x208, + 0x0, 0x40a, 0x20, 0x141, 0x20, 0x80, 0x20, 0x20, + 0x240, 0x80, 0x818, 0x4, 0x80, 0x80, 0x20, 0x80, + 0x240, 0x804, 0x82, 0x10, 0x510, 0x1, 0x20, 0x208, + 0x240, 0x240, 0x240, 0x420, 0x240, 0x80, 0x5, 0x902, + 0x0, 0x0, 0x0, 0x10, 0x0, 0x28, 0xa00, 0x44, + 0x0, 0x142, 0xa00, 0x409, 0xa00, 0x80, 0xa00, 0xa00, + 0x0, 0x10, 0x10, 0x10, 0x6, 0x901, 0x4a0, 0x10, + 0x81, 0x224, 0x100, 0x10, 0x58, 0x400, 0xa00, 0x2, + 0x0, 0x10, 0x10, 0x10, 0x441, 0x80, 0x10a, 0x10, + 0xc, 0x80, 0x60, 0x10, 0x80, 0x80, 0xa00, 0x80, + 0x10, 0x10, 0x10, 0x10, 0x200, 0x10, 0x10, 0x10, + 0xc02, 0x10, 0x10, 0x10, 0x120, 0x80, 0x5, 0x10, + 0x0, 0x201, 0xc8, 0x822, 0x6, 0x80, 0x11, 0x500, + 0x430, 0x80, 0x100, 0x4, 0x80, 0x80, 0xa00, 0x80, + 0x6, 0x440, 0x100, 0x10, 0x6, 0x6, 0x6, 0x208, + 0x100, 0x808, 0x100, 0x100, 0x6, 0x80, 0x100, 0x61, + 0x900, 0x80, 0x604, 0x10, 0x80, 0x80, 0x20, 0x80, + 0x80, 0x80, 0x3, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x29, 0x10, 0x10, 0x10, 0x6, 0x80, 0x840, 0x10, + 0x240, 0x80, 0x100, 0x10, 0x80, 0x80, 0x408, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x210, + 0x0, 0x0, 0x0, 0xa0, 0x0, 0x400, 0x106, 0x801, + 0x0, 0x0, 0x0, 0x42, 0x0, 0x400, 0x9, 0x180, + 0x0, 0x400, 0x800, 0x1c, 0x400, 0x400, 0x260, 0x400, + 0x0, 0x0, 0x0, 0x405, 0x0, 0x802, 0x20, 0x180, + 0x0, 0x110, 0x800, 0x202, 0x281, 0x24, 0x410, 0x48, + 0x0, 0x228, 0x800, 0x180, 0x54, 0x180, 0x180, 0x180, + 0x800, 0x41, 0x800, 0x800, 0xa, 0x400, 0x800, 0x180, + 0x0, 0x0, 0x0, 0x42, 0x0, 0x8c, 0x20, 0x801, + 0x0, 0x110, 0x608, 0x801, 0x40, 0x801, 0x801, 0x801, + 0x0, 0x42, 0x42, 0x42, 0xb00, 0x30, 0x404, 0x42, + 0x25, 0x280, 0x100, 0x42, 0xa, 0x400, 0x90, 0x801, + 0x0, 0x110, 0x20, 0x8, 0x20, 0x640, 0x20, 0x20, + 0x110, 0x110, 0xc4, 0x110, 0xa, 0x110, 0x20, 0x801, + 0x480, 0x804, 0x211, 0x42, 0xa, 0x1, 0x20, 0x180, + 0xa, 0x110, 0x800, 0x420, 0xa, 0xa, 0xa, 0x204, + 0x0, 0x0, 0x0, 0xa0, 0x0, 0x802, 0x9, 0x44, + 0x0, 0xa0, 0xa0, 0xa0, 0x40, 0x308, 0x410, 0xa0, + 0x0, 0x104, 0x9, 0xe00, 0x9, 0x30, 0x9, 0x9, + 0x212, 0x41, 0x100, 0xa0, 0x884, 0x400, 0x9, 0x2, + 0x0, 0x802, 0x340, 0x8, 0x802, 0x802, 0x410, 0x802, + 0xc, 0x41, 0x410, 0xa0, 0x410, 0x802, 0x410, 0x410, + 0x480, 0x41, 0x26, 0x10, 0x200, 0x802, 0x9, 0x180, + 0x41, 0x41, 0x800, 0x41, 0x120, 0x41, 0x410, 0x204, + 0x0, 0x201, 0x814, 0x8, 0x40, 0x30, 0x282, 0x500, + 0x40, 0x406, 0x100, 0xa0, 0x40, 0x40, 0x40, 0x801, + 0x480, 0x30, 0x100, 0x42, 0x30, 0x30, 0x9, 0x30, + 0x100, 0x808, 0x100, 0x100, 0x40, 0x30, 0x100, 0x204, + 0x480, 0x8, 0x8, 0x8, 0x105, 0x802, 0x20, 0x8, + 0xa20, 0x110, 0x3, 0x8, 0x40, 0x80, 0x410, 0x204, + 0x480, 0x480, 0x480, 0x8, 0x480, 0x30, 0x840, 0x204, + 0x480, 0x41, 0x100, 0x204, 0xa, 0x204, 0x204, 0x204, + 0x0, 0x0, 0x0, 0x908, 0x0, 0x400, 0x20, 0x44, + 0x0, 0x400, 0x51, 0x202, 0x400, 0x400, 0x88, 0x400, + 0x0, 0x400, 0x284, 0x21, 0x400, 0x400, 0x812, 0x400, + 0x400, 0x400, 0x100, 0x400, 0x400, 0x400, 0x400, 0x400, + 0x0, 0xc0, 0x20, 0x202, 0x20, 0x19, 0x20, 0x20, + 0xc, 0x202, 0x202, 0x202, 0x940, 0x400, 0x20, 0x202, + 0x103, 0x804, 0x448, 0x10, 0x200, 0x400, 0x20, 0x180, + 0xb0, 0x400, 0x800, 0x202, 0x400, 0x400, 0x5, 0x400, + 0x0, 0x201, 0x20, 0x490, 0x20, 0x102, 0x20, 0x20, + 0x882, 0x68, 0x100, 0x4, 0x214, 0x400, 0x20, 0x801, + 0x18, 0x804, 0x100, 0x42, 0xc1, 0x400, 0x20, 0x208, + 0x100, 0x400, 0x100, 0x100, 0x400, 0x400, 0x100, 0x400, + 0x20, 0x804, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x401, 0x110, 0x20, 0x202, 0x20, 0x80, 0x20, 0x20, + 0x804, 0x804, 0x20, 0x804, 0x20, 0x804, 0x20, 0x20, + 0x240, 0x804, 0x100, 0x89, 0xa, 0x400, 0x20, 0x50, + 0x0, 0x201, 0x402, 0x44, 0x190, 0x44, 0x44, 0x44, + 0xc, 0x810, 0x100, 0xa0, 0x23, 0x400, 0xa00, 0x44, + 0x860, 0x8a, 0x100, 0x10, 0x200, 0x400, 0x9, 0x44, + 0x100, 0x400, 0x100, 0x100, 0x400, 0x400, 0x100, 0x400, + 0xc, 0x520, 0x881, 0x10, 0x200, 0x802, 0x20, 0x44, + 0xc, 0xc, 0xc, 0x202, 0xc, 0x80, 0x410, 0x101, + 0x200, 0x10, 0x10, 0x10, 0x200, 0x200, 0x200, 0x10, + 0xc, 0x41, 0x100, 0x10, 0x200, 0x400, 0xc2, 0x828, + 0x201, 0x201, 0x100, 0x201, 0xc08, 0x201, 0x20, 0x44, + 0x100, 0x201, 0x100, 0x100, 0x40, 0x80, 0x100, 0x1a, + 0x100, 0x201, 0x100, 0x100, 0x6, 0x30, 0x100, 0x880, + 0x100, 0x100, 0x100, 0x100, 0x100, 0x400, 0x100, 0x100, + 0x52, 0x201, 0x20, 0x8, 0x20, 0x80, 0x20, 0x20, + 0xc, 0x80, 0x100, 0xc40, 0x80, 0x80, 0x20, 0x80, + 0x480, 0x804, 0x100, 0x10, 0x200, 0x148, 0x20, 0x403, + 0x100, 0x22, 0x100, 0x100, 0x811, 0x80, 0x100, 0x204, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x210, + 0x0, 0x0, 0x0, 0x4, 0x0, 0x980, 0x421, 0x2, + 0x0, 0x0, 0x0, 0x488, 0x0, 0x1, 0x140, 0x2, + 0x0, 0x70, 0x800, 0x2, 0x20c, 0x2, 0x2, 0x2, + 0x0, 0x0, 0x0, 0x122, 0x0, 0x1, 0x84, 0xc00, + 0x0, 0x600, 0x800, 0x91, 0x12, 0x24, 0x300, 0x48, + 0x0, 0x1, 0x800, 0x244, 0x1, 0x1, 0x38, 0x1, + 0x800, 0x108, 0x800, 0x800, 0x4c0, 0x1, 0x800, 0x2, + 0x0, 0x0, 0x0, 0x4, 0x0, 0x1, 0x80a, 0xe0, + 0x0, 0x4, 0x4, 0x4, 0x40, 0x418, 0x300, 0x4, + 0x0, 0x1, 0x220, 0x910, 0x1, 0x1, 0x404, 0x1, + 0x502, 0x280, 0x49, 0x4, 0x820, 0x1, 0x90, 0x2, + 0x0, 0x1, 0x450, 0x8, 0x1, 0x1, 0x300, 0x1, + 0xa8, 0x842, 0x300, 0x4, 0x300, 0x1, 0x300, 0x300, + 0x1, 0x1, 0x82, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x14, 0x1, 0x800, 0x420, 0x1, 0x1, 0x300, 0x1, + 0x0, 0x0, 0x0, 0x841, 0x0, 0x28, 0x84, 0x2, + 0x0, 0x600, 0x118, 0x2, 0x40, 0x2, 0x2, 0x2, + 0x0, 0x104, 0x220, 0x2, 0xc10, 0x2, 0x2, 0x2, + 0x81, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x0, 0x600, 0x84, 0x8, 0x84, 0x150, 0x84, 0x84, + 0x600, 0x600, 0x60, 0x600, 0x809, 0x600, 0x84, 0x2, + 0x4a, 0x8a0, 0x501, 0x10, 0x200, 0x1, 0x84, 0x2, + 0x14, 0x600, 0x800, 0x2, 0x120, 0x2, 0x2, 0x2, + 0x0, 0x92, 0x220, 0x8, 0x40, 0xa04, 0x11, 0x500, + 0x40, 0x121, 0xc80, 0x4, 0x40, 0x40, 0x40, 0x2, + 0x220, 0x440, 0x220, 0x220, 0x188, 0x1, 0x220, 0x2, + 0x14, 0x808, 0x220, 0x2, 0x40, 0x2, 0x2, 0x2, + 0x900, 0x8, 0x8, 0x8, 0x422, 0x1, 0x84, 0x8, + 0x14, 0x600, 0x3, 0x8, 0x40, 0x80, 0x300, 0x830, + 0x14, 0x1, 0x220, 0x8, 0x1, 0x1, 0x840, 0x1, + 0x14, 0x14, 0x14, 0x1c0, 0x14, 0x1, 0x408, 0x2, + 0x0, 0x0, 0x0, 0x4, 0x0, 0x28, 0x140, 0xc00, + 0x0, 0x4, 0x4, 0x4, 0x12, 0x241, 0x88, 0x4, + 0x0, 0xa02, 0x140, 0x21, 0x140, 0x94, 0x140, 0x140, + 0x81, 0x108, 0x610, 0x4, 0x820, 0x400, 0x140, 0x2, + 0x0, 0xc0, 0x209, 0xc00, 0x12, 0xc00, 0xc00, 0xc00, + 0x12, 0x108, 0x60, 0x4, 0x12, 0x12, 0x12, 0xc00, + 0x424, 0x108, 0x82, 0x10, 0x200, 0x1, 0x140, 0xc00, + 0x108, 0x108, 0x800, 0x108, 0x12, 0x108, 0x5, 0x2a0, + 0x0, 0x4, 0x4, 0x4, 0x680, 0x102, 0x11, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x820, 0x4, 0x4, 0x4, + 0x18, 0x440, 0x82, 0x4, 0x820, 0x1, 0x140, 0x208, + 0x820, 0x4, 0x4, 0x4, 0x820, 0x820, 0x820, 0x4, + 0x900, 0x230, 0x82, 0x4, 0x4c, 0x1, 0x20, 0xc00, + 0x401, 0x4, 0x4, 0x4, 0x12, 0x80, 0x300, 0x4, + 0x82, 0x1, 0x82, 0x82, 0x1, 0x1, 0x82, 0x1, + 0x240, 0x108, 0x82, 0x4, 0x820, 0x1, 0x408, 0x50, + 0x0, 0x28, 0x402, 0x380, 0x28, 0x28, 0x11, 0x28, + 0x81, 0x810, 0x60, 0x4, 0x504, 0x28, 0xa00, 0x2, + 0x81, 0x440, 0x80c, 0x10, 0x200, 0x28, 0x140, 0x2, + 0x81, 0x81, 0x81, 0x2, 0x81, 0x2, 0x2, 0x2, + 0x900, 0x7, 0x60, 0x10, 0x200, 0x28, 0x84, 0xc00, + 0x60, 0x600, 0x60, 0x60, 0x12, 0x80, 0x60, 0x101, + 0x200, 0x10, 0x10, 0x10, 0x200, 0x200, 0x200, 0x10, + 0x81, 0x108, 0x60, 0x10, 0x200, 0x844, 0x408, 0x2, + 0x900, 0x440, 0x11, 0x4, 0x11, 0x28, 0x11, 0x11, + 0x20a, 0x4, 0x4, 0x4, 0x40, 0x80, 0x11, 0x4, + 0x440, 0x440, 0x220, 0x440, 0x6, 0x440, 0x11, 0x880, + 0x81, 0x440, 0x100, 0x4, 0x820, 0x310, 0x408, 0x2, + 0x900, 0x900, 0x900, 0x8, 0x900, 0x80, 0x11, 0x242, + 0x900, 0x80, 0x60, 0x4, 0x80, 0x80, 0x408, 0x80, + 0x900, 0x440, 0x82, 0x10, 0x200, 0x1, 0x408, 0x124, + 0x14, 0x22, 0x408, 0xa01, 0x408, 0x80, 0x408, 0x408, + 0x0, 0x0, 0x0, 0x210, 0x0, 0x210, 0x210, 0x210, + 0x0, 0xb, 0x800, 0x540, 0x40, 0x24, 0x88, 0x210, + 0x0, 0x104, 0x800, 0x21, 0xa2, 0x848, 0x404, 0x210, + 0x800, 0x280, 0x800, 0x800, 0x111, 0x400, 0x800, 0x2, + 0x0, 0xc0, 0x800, 0x8, 0x508, 0x24, 0x43, 0x210, + 0x800, 0x24, 0x800, 0x800, 0x24, 0x24, 0x800, 0x24, + 0x800, 0x412, 0x800, 0x800, 0x200, 0x1, 0x800, 0x180, + 0x800, 0x800, 0x800, 0x800, 0x800, 0x24, 0x800, 0x800, + 0x0, 0xc20, 0x181, 0x8, 0x40, 0x102, 0x404, 0x210, + 0x40, 0x280, 0x32, 0x4, 0x40, 0x40, 0x40, 0x801, + 0x18, 0x280, 0x404, 0x42, 0x404, 0x1, 0x404, 0x404, + 0x280, 0x280, 0x800, 0x280, 0x40, 0x280, 0x404, 0x128, + 0x206, 0x8, 0x8, 0x8, 0x890, 0x1, 0x20, 0x8, + 0x401, 0x110, 0x800, 0x8, 0x40, 0x24, 0x300, 0x482, + 0x160, 0x1, 0x800, 0x8, 0x1, 0x1, 0x404, 0x1, + 0x800, 0x280, 0x800, 0x800, 0xa, 0x1, 0x800, 0x50, + 0x0, 0x104, 0x402, 0x8, 0x40, 0x481, 0x920, 0x210, + 0x40, 0x810, 0x205, 0xa0, 0x40, 0x40, 0x40, 0x2, + 0x104, 0x104, 0xd0, 0x104, 0x200, 0x104, 0x9, 0x2, + 0x428, 0x104, 0x800, 0x2, 0x40, 0x2, 0x2, 0x2, + 0x31, 0x8, 0x8, 0x8, 0x200, 0x802, 0x84, 0x8, + 0x182, 0x600, 0x800, 0x8, 0x40, 0x24, 0x410, 0x101, + 0x200, 0x104, 0x800, 0x8, 0x200, 0x200, 0x200, 0x460, + 0x800, 0x41, 0x800, 0x800, 0x200, 0x98, 0x800, 0x2, + 0x40, 0x8, 0x8, 0x8, 0x40, 0x40, 0x40, 0x8, + 0x40, 0x40, 0x40, 0x8, 0x40, 0x40, 0x40, 0x40, + 0x803, 0x104, 0x220, 0x8, 0x40, 0x30, 0x404, 0x880, + 0x40, 0x280, 0x100, 0x411, 0x40, 0x40, 0x40, 0x2, + 0x8, 0x8, 0x8, 0x8, 0x40, 0x8, 0x8, 0x8, + 0x40, 0x8, 0x8, 0x8, 0x40, 0x40, 0x40, 0x8, + 0x480, 0x8, 0x8, 0x8, 0x200, 0x1, 0x112, 0x8, + 0x14, 0x22, 0x800, 0x8, 0x40, 0xd00, 0xa1, 0x204, + 0x0, 0xc0, 0x402, 0x21, 0x805, 0x102, 0x88, 0x210, + 0x320, 0x810, 0x88, 0x4, 0x88, 0x400, 0x88, 0x88, + 0x18, 0x21, 0x21, 0x21, 0x200, 0x400, 0x140, 0x21, + 0x46, 0x400, 0x800, 0x21, 0x400, 0x400, 0x88, 0x400, + 0xc0, 0xc0, 0x114, 0xc0, 0x200, 0xc0, 0x20, 0xc00, + 0x401, 0xc0, 0x800, 0x202, 0x12, 0x24, 0x88, 0x101, + 0x200, 0xc0, 0x800, 0x21, 0x200, 0x200, 0x200, 0xe, + 0x800, 0x108, 0x800, 0x800, 0x200, 0x400, 0x800, 0x50, + 0x18, 0x102, 0xa40, 0x4, 0x102, 0x102, 0x20, 0x102, + 0x401, 0x4, 0x4, 0x4, 0x40, 0x102, 0x88, 0x4, + 0x18, 0x18, 0x18, 0x21, 0x18, 0x102, 0x404, 0x880, + 0x18, 0x280, 0x100, 0x4, 0x820, 0x400, 0x203, 0x50, + 0x401, 0xc0, 0x20, 0x8, 0x20, 0x102, 0x20, 0x20, + 0x401, 0x401, 0x401, 0x4, 0x401, 0xa08, 0x20, 0x50, + 0x18, 0x804, 0x82, 0x700, 0x200, 0x1, 0x20, 0x50, + 0x401, 0x22, 0x800, 0x50, 0x184, 0x50, 0x50, 0x50, + 0x402, 0x810, 0x402, 0x402, 0x200, 0x28, 0x402, 0x44, + 0x810, 0x810, 0x402, 0x810, 0x40, 0x810, 0x88, 0x101, + 0x200, 0x104, 0x402, 0x21, 0x200, 0x200, 0x200, 0x880, + 0x81, 0x810, 0x100, 0x248, 0x200, 0x400, 0x34, 0x2, + 0x200, 0xc0, 0x402, 0x8, 0x200, 0x200, 0x200, 0x101, + 0xc, 0x810, 0x60, 0x101, 0x200, 0x101, 0x101, 0x101, + 0x200, 0x200, 0x200, 0x10, 0x200, 0x200, 0x200, 0x200, + 0x200, 0x22, 0x800, 0x484, 0x200, 0x200, 0x200, 0x101, + 0xa4, 0x201, 0x402, 0x8, 0x40, 0x102, 0x11, 0x880, + 0x40, 0x810, 0x100, 0x4, 0x40, 0x40, 0x40, 0x620, + 0x18, 0x440, 0x100, 0x880, 0x200, 0x880, 0x880, 0x880, + 0x100, 0x22, 0x100, 0x100, 0x40, 0xd, 0x100, 0x880, + 0x900, 0x8, 0x8, 0x8, 0x200, 0x414, 0x20, 0x8, + 0x401, 0x22, 0x290, 0x8, 0x40, 0x80, 0x806, 0x101, + 0x200, 0x22, 0x45, 0x8, 0x200, 0x200, 0x200, 0x880, + 0x22, 0x22, 0x100, 0x22, 0x200, 0x22, 0x408, 0x50, +}; + +} // namespace halfrate::tables diff --git a/mbe/halfrate.h b/mbe/halfrate.h new file mode 100644 index 0000000..4ad4713 --- /dev/null +++ b/mbe/halfrate.h @@ -0,0 +1,67 @@ +/* halfrate: AMBE+2 compatible half-rate (2450 bit/s voice, DMR) speech encoder and decoder. + * + * Audio is 8 kHz, 16-bit mono, 160 samples (20 ms) per frame. A frame is 49 bits; the API carries it as 7 bytes, + * MSB first (the last byte holds one bit, in its top bit). hr_fec_encode / hr_fec_decode turn it into the 9-byte + * on-air frame with FEC and interleave that DMR carries. hr_bits_from_frame / hr_frame_from_bits convert to and + * from one bit per byte (on-air order), as other codecs' APIs use. + * + * One encoder or decoder per stream: both keep state from frame to frame. Objects are independent and may run on + * separate threads; one object is not thread-safe. + */ +#ifndef HALFRATE_H +#define HALFRATE_H +#include +#ifdef __cplusplus +extern "C" { +#endif + +#define HR_SAMPLES 160 +#define HR_FRAME_BYTES 7 +#define HR_AIR_BYTES 9 +#define HR_BITS 49 + +typedef struct hr_encoder hr_encoder; +typedef struct hr_decoder hr_decoder; + +hr_encoder *hr_encoder_new(void); +void hr_encoder_free(hr_encoder *e); +/* Sets a tuning option by name (docs/options.md). Returns 0, or -1 for an unknown name or a NaN or infinite + * value (the option is then left as it was). */ +int hr_encoder_set(hr_encoder *e, const char *name, double value); +/* pcm: 160 samples in, frame: 7 bytes out. The output runs HR_ENCODER_DELAY frames behind the input. */ +void hr_encode(hr_encoder *e, const int16_t *pcm, uint8_t *frame); +#define HR_ENCODER_DELAY 2 + +hr_decoder *hr_decoder_new(void); +void hr_decoder_free(hr_decoder *d); +/* Sets an option by name (docs/options.md). Returns 0, or -1 for an unknown name or a NaN or infinite value + * (the option is then left as it was). */ +int hr_decoder_set(hr_decoder *d, const char *name, double value); +/* frame: 7 bytes in, pcm: 160 samples out (must not be null). Returns the frame kind (HR_VOICE, ...), or -1 if d is + * null. + * frame may be null for a frame that was not received: it is concealed like an erasure. */ +int hr_decode(hr_decoder *d, const uint8_t *frame, int16_t *pcm); +/* Frame kinds hr_decode returns */ +#define HR_VOICE 0 /* speech */ +#define HR_SILENCE 1 /* a silence frame (background level) */ +#define HR_TONE 2 /* a tone frame: single, dual (keypad) or call-progress tone */ +#define HR_ERASURE 3 /* not decodable: concealed by repeating the last frame, then muting, then comfort noise */ +/* The same on a 9-byte on-air frame: FEC decode, then hr_decode. A null air frame is concealed. */ +int hr_decode_air(hr_decoder *d, const uint8_t *air, int16_t *pcm); + +/* 7-byte frame <-> 9-byte on-air frame. hr_fec_decode returns the number of bit errors corrected, or -1 when the + * first code word has more errors than it can correct (the frame is still written, as decoded). The frame helpers' + * pointers must not be null. */ +void hr_fec_encode(const uint8_t *frame, uint8_t *air); +int hr_fec_decode(const uint8_t *air, uint8_t *frame); + +/* 7-byte frame <-> 49 bytes of one bit each */ +void hr_bits_from_frame(const uint8_t *frame, uint8_t *bits); +void hr_frame_from_bits(const uint8_t *bits, uint8_t *frame); + +const char *hr_version(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/mbe/history.h b/mbe/history.h new file mode 100644 index 0000000..99e5c1e --- /dev/null +++ b/mbe/history.h @@ -0,0 +1,52 @@ +// The encoder's input history and the analysis of its last three frames, kept together in one block. +// +// The analysis reads the input around a position set by two options (pitch_window_offset and +// amplitude_window_offset). With the defaults the reads stay within the 1024 input samples; with positive +// offsets they run past the newest sample into what follows in this block (the frame counter, then the analysis +// slots), and the output depends on those values. sample() returns them the same way: index i reads the i-th +// 32-bit word of the block as a float. The options are clamped so that every read stays inside the block. +#pragma once +#include +#include +#include +#include + +#include "analysis.h" + +namespace halfrate::enc { + +constexpr int kHistorySamples = 1024; +constexpr int kFrameSamples = 160; + +// The analysis of one input frame. +struct AnalysisSlot { + Spectrum pitch_spectrum; // 256-point window: pitch search + Spectrum amplitude_spectrum; // 160-point window: harmonic amplitudes + float level_db; // energy of the pitch spectrum's fitted bins, dB + float peak; // largest sample magnitude around the amplitude window + int32_t low_band; // 1: weak energy below 250 Hz (only set with low_band_threshold_db < 0) + std::array fit_cost; // harmonic fit cost per grid pitch +}; + +struct SignalHistory { + std::array samples; // newest 160 at the end, scaled to +-1 + int64_t frame_count; // frames pushed so far + std::array slots; // frame n is in slots[n % 3] + + static constexpr int kWords = kHistorySamples + 2 + 3 * (sizeof(AnalysisSlot) / 4); + + // 32-bit word i of this block as a float, 0 <= i < kWords. + float sample(int i) const { + if (static_cast(i) < static_cast(kHistorySamples)) return samples[i]; + float f; + std::memcpy(&f, reinterpret_cast(this) + 4 * static_cast(i), 4); + return f; + } +}; + +static_assert(sizeof(AnalysisSlot) == 1151 * 4, "analysis slot: 1151 words, no padding"); +static_assert(sizeof(SignalHistory) >= SignalHistory::kWords * 4, "history block holds every word"); +static_assert(offsetof(SignalHistory, frame_count) == kHistorySamples * 4, "frame counter right after the samples"); +static_assert(offsetof(SignalHistory, slots) == (kHistorySamples + 2) * 4, "slots right after the counter"); + +} // namespace halfrate::enc diff --git a/mbe/mbevocoder.cpp b/mbe/mbevocoder.cpp index 5126a0b..8aa2108 100644 --- a/mbe/mbevocoder.cpp +++ b/mbe/mbevocoder.cpp @@ -79,6 +79,8 @@ static inline int load_reg(const uint8_t val[], int len) initMbeParms(); memset(ambe_d, 0, 49); m_dstar_gain_s = -99.0f; + d = ambe2_decoder_new(); + e = ambe2_encoder_new(); } MBEVocoder::~MBEVocoder() @@ -97,6 +99,8 @@ static inline int load_reg(const uint8_t val[], int len) void MBEVocoder::decode_2450x1150(int16_t *pcm, uint8_t *ambe) { + ambe2_decode_packed(d, ambe, pcm); + return; int samples = 0; process_2450x1150(ambe); int16_t *p = getAudio(samples); @@ -106,11 +110,23 @@ static inline int load_reg(const uint8_t val[], int len) void MBEVocoder::decode_2450(int16_t *pcm, uint8_t *ambe) { - int samples = 0; - process_2450(ambe); - int16_t *p = getAudio(samples); - memcpy(pcm, p, samples * sizeof(int16_t)); - resetAudio(); + uint8_t ambe_data[56]; + //char dvsi_data[7]; + //memset(dvsi_data, 0, 7); + + for(int i = 0; i < 6; ++i){ + for(int j = 0; j < 8; j++){ + ambe_data[j+(8*i)] = (1 & (ambe[i] >> (7 - j))); + } + } + + ambe_data[48] = (1 & (ambe[6] >> 7)); + //int samples = 0; + ambe2_decode(d, ambe_data, pcm); + //process_2450(ambe); + //int16_t *p = getAudio(samples); + //memcpy(pcm, p, samples * sizeof(int16_t)); + //resetAudio(); } void MBEVocoder::encode_2400x1200(int16_t *pcm, uint8_t *ambe) @@ -215,70 +231,74 @@ static inline int load_reg(const uint8_t val[], int len) void MBEVocoder::encode_2450(int16_t *pcm, uint8_t *ambe) { - int b[9]; - int16_t frame_vector[8]; // result ignored - uint8_t ambe_frame[56]; - memset(ambe, 0, 9); - - vocoder.imbe_encode(frame_vector, pcm); - encode_ambe(vocoder.param(), b, m_mbelibParms->m_cur_mp, m_mbelibParms->m_prev_mp, false, 1.0); + //int b[9]; + //int16_t frame_vector[8]; // result ignored + uint8_t ambe_bits[56]; + memset(ambe, 0, 9); + + ambe2_encode(e, pcm, ambe_bits); + //ambe2_pack(ambe_bits, ambe); + //return; + /* + vocoder.imbe_encode(frame_vector, pcm); + encode_ambe(vocoder.param(), b, m_mbelibParms->m_cur_mp, m_mbelibParms->m_prev_mp, false, 1.0); memset(ambe_frame, 0, 56); - - ambe_frame[0] = (b[0] >> 6) & 1; - ambe_frame[1] = (b[0] >> 5) & 1; - ambe_frame[2] = (b[0] >> 4) & 1; - ambe_frame[3] = (b[0] >> 3) & 1; - ambe_frame[4] = (b[1] >> 4) & 1; - ambe_frame[5] = (b[1] >> 3) & 1; - ambe_frame[6] = (b[1] >> 2) & 1; - ambe_frame[7] = (b[1] >> 1) & 1; - ambe_frame[8] = (b[2] >> 4) & 1; - ambe_frame[9] = (b[2] >> 3) & 1; - ambe_frame[10] = (b[2] >> 2) & 1; - ambe_frame[11] = (b[2] >> 1) & 1; - ambe_frame[12] = (b[3] >> 8) & 1; - ambe_frame[13] = (b[3] >> 7) & 1; - ambe_frame[14] = (b[3] >> 6) & 1; - ambe_frame[15] = (b[3] >> 5) & 1; - ambe_frame[16] = (b[3] >> 4) & 1; - ambe_frame[17] = (b[3] >> 3) & 1; - ambe_frame[18] = (b[3] >> 2) & 1; - ambe_frame[19] = (b[3] >> 1) & 1; - ambe_frame[20] = (b[4] >> 6) & 1; - ambe_frame[21] = (b[4] >> 5) & 1; - ambe_frame[22] = (b[4] >> 4) & 1; - ambe_frame[23] = (b[4] >> 3) & 1; - ambe_frame[24] = (b[5] >> 4) & 1; - ambe_frame[25] = (b[5] >> 3) & 1; - ambe_frame[26] = (b[5] >> 2) & 1; - ambe_frame[27] = (b[5] >> 1) & 1; - ambe_frame[28] = (b[6] >> 3) & 1; - ambe_frame[29] = (b[6] >> 2) & 1; - ambe_frame[30] = (b[6] >> 1) & 1; - ambe_frame[31] = (b[7] >> 3) & 1; - ambe_frame[32] = (b[7] >> 2) & 1; - ambe_frame[33] = (b[7] >> 1) & 1; - ambe_frame[34] = (b[8] >> 2) & 1; - ambe_frame[35] = b[1] & 1; - ambe_frame[36] = b[2] & 1; - ambe_frame[37] = (b[0] >> 2) & 1; - ambe_frame[38] = (b[0] >> 1) & 1; - ambe_frame[39] = b[0] & 1; - ambe_frame[40] = b[3] & 1; - ambe_frame[41] = (b[4] >> 2) & 1; - ambe_frame[42] = (b[4] >> 1) & 1; - ambe_frame[43] = b[4] & 1; - ambe_frame[44] = b[5] & 1; - ambe_frame[45] = b[6] & 1; - ambe_frame[46] = b[7] & 1; - ambe_frame[47] = (b[8] >> 1) & 1; - ambe_frame[48] = b[8] & 1; - - for(int i = 0; i < 7; ++i){ - for(int j = 0; j < 8; ++j){ - ambe[i] |= (ambe_frame[(i*8)+j] << (7-j)); - } - } + + ambe_frame[0] = (b[0] >> 6) & 1; + ambe_frame[1] = (b[0] >> 5) & 1; + ambe_frame[2] = (b[0] >> 4) & 1; + ambe_frame[3] = (b[0] >> 3) & 1; + ambe_frame[4] = (b[1] >> 4) & 1; + ambe_frame[5] = (b[1] >> 3) & 1; + ambe_frame[6] = (b[1] >> 2) & 1; + ambe_frame[7] = (b[1] >> 1) & 1; + ambe_frame[8] = (b[2] >> 4) & 1; + ambe_frame[9] = (b[2] >> 3) & 1; + ambe_frame[10] = (b[2] >> 2) & 1; + ambe_frame[11] = (b[2] >> 1) & 1; + ambe_frame[12] = (b[3] >> 8) & 1; + ambe_frame[13] = (b[3] >> 7) & 1; + ambe_frame[14] = (b[3] >> 6) & 1; + ambe_frame[15] = (b[3] >> 5) & 1; + ambe_frame[16] = (b[3] >> 4) & 1; + ambe_frame[17] = (b[3] >> 3) & 1; + ambe_frame[18] = (b[3] >> 2) & 1; + ambe_frame[19] = (b[3] >> 1) & 1; + ambe_frame[20] = (b[4] >> 6) & 1; + ambe_frame[21] = (b[4] >> 5) & 1; + ambe_frame[22] = (b[4] >> 4) & 1; + ambe_frame[23] = (b[4] >> 3) & 1; + ambe_frame[24] = (b[5] >> 4) & 1; + ambe_frame[25] = (b[5] >> 3) & 1; + ambe_frame[26] = (b[5] >> 2) & 1; + ambe_frame[27] = (b[5] >> 1) & 1; + ambe_frame[28] = (b[6] >> 3) & 1; + ambe_frame[29] = (b[6] >> 2) & 1; + ambe_frame[30] = (b[6] >> 1) & 1; + ambe_frame[31] = (b[7] >> 3) & 1; + ambe_frame[32] = (b[7] >> 2) & 1; + ambe_frame[33] = (b[7] >> 1) & 1; + ambe_frame[34] = (b[8] >> 2) & 1; + ambe_frame[35] = b[1] & 1; + ambe_frame[36] = b[2] & 1; + ambe_frame[37] = (b[0] >> 2) & 1; + ambe_frame[38] = (b[0] >> 1) & 1; + ambe_frame[39] = b[0] & 1; + ambe_frame[40] = b[3] & 1; + ambe_frame[41] = (b[4] >> 2) & 1; + ambe_frame[42] = (b[4] >> 1) & 1; + ambe_frame[43] = b[4] & 1; + ambe_frame[44] = b[5] & 1; + ambe_frame[45] = b[6] & 1; + ambe_frame[46] = b[7] & 1; + ambe_frame[47] = (b[8] >> 1) & 1; + ambe_frame[48] = b[8] & 1; +*/ + for(int i = 0; i < 7; ++i){ + for(int j = 0; j < 8; ++j){ + ambe[i] |= (ambe_bits[(i*8)+j] << (7-j)); + } + } } void MBEVocoder::initMbeParms() diff --git a/mbe/mbevocoder.h b/mbe/mbevocoder.h index 6c66f83..cf0143c 100644 --- a/mbe/mbevocoder.h +++ b/mbe/mbevocoder.h @@ -16,7 +16,8 @@ #define MBEVOCODER_H #include -#include +#include "ambe2.h" +#include "../imbe_vocoder/imbe_vocoder.h" extern "C" { struct mbe_parameters @@ -114,6 +115,8 @@ public: private: imbe_vocoder vocoder; + ambe2_decoder *d; + ambe2_encoder *e; mbelibParms *m_mbelibParms; int m_errs2; char m_err_str[64]; diff --git a/mbe/numeric.h b/mbe/numeric.h new file mode 100644 index 0000000..6784f6b --- /dev/null +++ b/mbe/numeric.h @@ -0,0 +1,61 @@ +// Numeric helpers with the conversion and rounding semantics the codec depends on. +// +// Float to integer conversions truncate toward zero and saturate at the target type's range; NaN converts to 0. +// (A plain C++ cast is undefined out of range; these are defined everywhere.) Rounding helpers name the rounding +// they do. Everything here is exact: no approximation, no rounding beyond what the name says. +#pragma once +#include +#include +#include +#include + +namespace halfrate::core { + +// The bits of a float and back. +inline uint32_t float_bits(float f) { uint32_t u; std::memcpy(&u, &f, 4); return u; } +inline float float_from_bits(uint32_t u) { float f; std::memcpy(&f, &u, 4); return f; } + +// Truncate toward zero, saturating; NaN gives 0. +inline int32_t to_int32_sat(float x) { + if (x != x) return 0; + if (x >= 2147483648.0f) return std::numeric_limits::max(); + if (x <= -2147483648.0f) return std::numeric_limits::min(); + return static_cast(x); +} +inline int32_t to_int32_sat(double x) { + if (x != x) return 0; + if (x >= 2147483648.0) return std::numeric_limits::max(); + if (x <= -2147483648.0) return std::numeric_limits::min(); + return static_cast(x); +} +inline int64_t to_int64_sat(float x) { + if (x != x) return 0; + if (x >= 9223372036854775808.0f) return std::numeric_limits::max(); + if (x <= -9223372036854775808.0f) return std::numeric_limits::min(); + return static_cast(x); +} +inline int64_t to_int64_sat(double x) { + if (x != x) return 0; + if (x >= 9223372036854775808.0) return std::numeric_limits::max(); + if (x <= -9223372036854775808.0) return std::numeric_limits::min(); + return static_cast(x); +} + +// Integer results of the four roundings, saturating (NaN gives 0). +inline int32_t floor_to_int32(float x) { return to_int32_sat(std::floor(x)); } +inline int32_t ceil_to_int32(float x) { return to_int32_sat(std::ceil(x)); } +inline int32_t round_half_away_to_int32(float x) { return to_int32_sat(std::round(x)); } +inline int32_t round_half_even_to_int32(float x) { return to_int32_sat(std::nearbyint(x)); } + +// Rounding to a whole float. +inline float floor_f(float x) { return std::floor(x); } +inline float ceil_f(float x) { return std::ceil(x); } +inline float trunc_f(float x) { return std::trunc(x); } +inline float round_half_away_f(float x) { return std::round(x); } // 2.5 -> 3, -2.5 -> -3 +inline float round_half_even_f(float x) { return std::nearbyint(x); } // default rounding mode: 2.5 -> 2 + +// Minimum and maximum that ignore a NaN operand (IEEE minNum / maxNum). +inline float min_num(float a, float b) { return std::fmin(a, b); } +inline float max_num(float a, float b) { return std::fmax(a, b); } + +} // namespace halfrate::core diff --git a/mbe/options.cpp b/mbe/options.cpp new file mode 100644 index 0000000..e7e66c6 --- /dev/null +++ b/mbe/options.cpp @@ -0,0 +1,142 @@ +#include "options.h" + +#include +#include + +namespace halfrate::enc { + +namespace { + +// One named option: a float field, or element `index` of a per-band array. +struct OptionEntry { + const char* name; + float EncoderOptions::*field; + std::array EncoderOptions::*bands; + int index; +}; + +constexpr OptionEntry real(const char* name, float EncoderOptions::*field) { return {name, field, nullptr, 0}; } +constexpr OptionEntry band(const char* name, std::array EncoderOptions::*bands, int index) { + return {name, nullptr, bands, index}; +} + +const OptionEntry kOptionTable[] = { + real("rotated_layout", &EncoderOptions::rotated_layout), + real("highpass_hz", &EncoderOptions::highpass_hz), + real("highpass_compensation", &EncoderOptions::highpass_compensation), + real("highpass_compensation_from_hz", &EncoderOptions::highpass_compensation_from_hz), + real("pitch_window_offset", &EncoderOptions::pitch_window_offset), + real("amplitude_window_offset", &EncoderOptions::amplitude_window_offset), + real("yin_weight", &EncoderOptions::yin_weight), + real("low_pitch_penalty", &EncoderOptions::low_pitch_penalty), + real("pitch_jump_cost", &EncoderOptions::pitch_jump_cost), + real("pitch_jump_free", &EncoderOptions::pitch_jump_free), + real("octave_jump_cost", &EncoderOptions::octave_jump_cost), + real("pitch_net_weight", &EncoderOptions::pitch_net_weight), + real("low_band_threshold_db", &EncoderOptions::low_band_threshold_db), + real("low_band_penalty_scale", &EncoderOptions::low_band_penalty_scale), + real("low_band_ignore_first", &EncoderOptions::low_band_ignore_first), + real("onset_db", &EncoderOptions::onset_db), + real("onset_low_pitch_scale", &EncoderOptions::onset_low_pitch_scale), + real("octave_down_tolerance", &EncoderOptions::octave_down_tolerance), + real("octave_down_after_unvoiced", &EncoderOptions::octave_down_after_unvoiced), + real("octave_down_lookback", &EncoderOptions::octave_down_lookback), + real("voicing_threshold", &EncoderOptions::voicing_threshold), + real("voicing_threshold_slope", &EncoderOptions::voicing_threshold_slope), + real("voicing_table", &EncoderOptions::voicing_table), + real("voicing_table_offset", &EncoderOptions::voicing_table_offset), + real("voicing_band_weight_exponent", &EncoderOptions::voicing_band_weight_exponent), + real("voicing_hysteresis", &EncoderOptions::voicing_hysteresis), + real("voicing_hold_unvoiced", &EncoderOptions::voicing_hold_unvoiced), + real("unvoiced_fit_guard", &EncoderOptions::unvoiced_fit_guard), + real("low_pitch_voicing_strength", &EncoderOptions::low_pitch_voicing_strength), + real("low_pitch_voicing_fit", &EncoderOptions::low_pitch_voicing_fit), + real("low_pitch_voicing_index", &EncoderOptions::low_pitch_voicing_index), + real("gate_level_db", &EncoderOptions::gate_level_db), + real("gate_above_floor_db", &EncoderOptions::gate_above_floor_db), + real("floor_rise", &EncoderOptions::floor_rise), + real("gate_hang_frames", &EncoderOptions::gate_hang_frames), + real("gated_as_unvoiced", &EncoderOptions::gated_as_unvoiced), + real("gated_offset", &EncoderOptions::gated_offset), + real("silent_voicing_index", &EncoderOptions::silent_voicing_index), + real("silence_offset", &EncoderOptions::silence_offset), + real("onset_unvoiced", &EncoderOptions::onset_unvoiced), + real("onset_offset", &EncoderOptions::onset_offset), + real("voiced_offset", &EncoderOptions::voiced_offset), + real("unvoiced_offset", &EncoderOptions::unvoiced_offset), + real("voiced_amplitude_blend", &EncoderOptions::voiced_amplitude_blend), + band("voiced_band_offset_0", &EncoderOptions::voiced_band_offset, 0), + band("voiced_band_offset_1", &EncoderOptions::voiced_band_offset, 1), + band("voiced_band_offset_2", &EncoderOptions::voiced_band_offset, 2), + band("voiced_band_offset_3", &EncoderOptions::voiced_band_offset, 3), + band("voiced_band_offset_4", &EncoderOptions::voiced_band_offset, 4), + band("voiced_band_offset_5", &EncoderOptions::voiced_band_offset, 5), + band("voiced_band_offset_6", &EncoderOptions::voiced_band_offset, 6), + band("voiced_band_offset_7", &EncoderOptions::voiced_band_offset, 7), + band("voiced_band_offset_8", &EncoderOptions::voiced_band_offset, 8), + band("unvoiced_band_offset_0", &EncoderOptions::unvoiced_band_offset, 0), + band("unvoiced_band_offset_1", &EncoderOptions::unvoiced_band_offset, 1), + band("unvoiced_band_offset_2", &EncoderOptions::unvoiced_band_offset, 2), + band("unvoiced_band_offset_3", &EncoderOptions::unvoiced_band_offset, 3), + band("unvoiced_band_offset_4", &EncoderOptions::unvoiced_band_offset, 4), + band("unvoiced_band_offset_5", &EncoderOptions::unvoiced_band_offset, 5), + band("unvoiced_band_offset_6", &EncoderOptions::unvoiced_band_offset, 6), + band("unvoiced_band_offset_7", &EncoderOptions::unvoiced_band_offset, 7), + band("unvoiced_band_offset_8", &EncoderOptions::unvoiced_band_offset, 8), + real("unvoiced_pitch_slope", &EncoderOptions::unvoiced_pitch_slope), + real("unvoiced_pitch_index", &EncoderOptions::unvoiced_pitch_index), + real("smooth_previous", &EncoderOptions::smooth_previous), + real("smooth_next", &EncoderOptions::smooth_next), + real("smooth_next_margin", &EncoderOptions::smooth_next_margin), + real("peak_threshold", &EncoderOptions::peak_threshold), + real("peak_reduction", &EncoderOptions::peak_reduction), + real("gain_bias", &EncoderOptions::gain_bias), + real("gain_lookahead_weight", &EncoderOptions::gain_lookahead_weight), + real("shape_weight_exponent", &EncoderOptions::shape_weight_exponent), + real("shape_high_weight", &EncoderOptions::shape_high_weight), + real("shape_search_beam", &EncoderOptions::shape_search_beam), + real("rescore_candidates", &EncoderOptions::rescore_candidates), + real("rescore_gain_span", &EncoderOptions::rescore_gain_span), + real("rescore_enhanced", &EncoderOptions::rescore_enhanced), + real("rescore_enhanced_offset", &EncoderOptions::rescore_enhanced_offset), + real("rescore_from_spectrum", &EncoderOptions::rescore_from_spectrum), + real("rescore_floor", &EncoderOptions::rescore_floor), + real("rescore_weight_exponent", &EncoderOptions::rescore_weight_exponent), + real("rescore_asymmetry", &EncoderOptions::rescore_asymmetry), + real("rescore_shape_mix", &EncoderOptions::rescore_shape_mix), + real("rescore_gain_weight", &EncoderOptions::rescore_gain_weight), + real("other_voicing_offset_low", &EncoderOptions::other_voicing_offset_low), + real("other_voicing_offset_high", &EncoderOptions::other_voicing_offset_high), + real("other_gated_pitch_zero", &EncoderOptions::other_gated_pitch_zero), + real("other_onset_bridge", &EncoderOptions::other_onset_bridge), + real("other_onset_bridge_db", &EncoderOptions::other_onset_bridge_db), + real("other_voiced_island", &EncoderOptions::other_voiced_island), + real("other_voiced_island_db", &EncoderOptions::other_voiced_island_db), + real("other_voiced_onset", &EncoderOptions::other_voiced_onset), + real("other_voiced_onset_db", &EncoderOptions::other_voiced_onset_db), + real("other_unvoiced_low_cut_hz", &EncoderOptions::other_unvoiced_low_cut_hz), + real("other_unvoiced_low_cut_db", &EncoderOptions::other_unvoiced_low_cut_db), + real("other_low_cut_quiet_db", &EncoderOptions::other_low_cut_quiet_db), + real("other_unvoiced_pitch_index", &EncoderOptions::other_unvoiced_pitch_index), + real("other_voiced_low", &EncoderOptions::other_voiced_low), + real("other_voiced_low_db", &EncoderOptions::other_voiced_low_db), +}; + +} // namespace + +bool set_option(EncoderOptions& options, const char* name, double value) { + // NaN and infinities would stay in the smoothing and noise floor state after the option is set back + if (!std::isfinite(value)) return false; + for (const OptionEntry& entry : kOptionTable) { + if (std::strcmp(name, entry.name) != 0) continue; + float v = static_cast(value); + if (entry.field) + options.*entry.field = v; + else + (options.*entry.bands)[entry.index] = v; + return true; + } + return false; +} + +} // namespace halfrate::enc diff --git a/mbe/options.h b/mbe/options.h new file mode 100644 index 0000000..1c322ec --- /dev/null +++ b/mbe/options.h @@ -0,0 +1,106 @@ +// Encoder options (docs/options.md). Every option is a float, set by name with set_option; options that act as +// counts, indices or switches are truncated toward zero where they are used, as the encoder always has. +#pragma once +#include + +namespace halfrate::enc { + +struct EncoderOptions { + // frame and input + float rotated_layout = 0x1p+0f; // 1: send frame bits 40..43 rotated (frame.h); else standard + float highpass_hz = 0x1.0da482p+7f; // input high-pass corner (Hz), off at 0 or below + float highpass_compensation = 0x1p+0f; // amplitude lift that undoes the high-pass, 0 = off + float highpass_compensation_from_hz = 0.0f; // harmonics below this frequency get no compensation + float pitch_window_offset = -0x1.ep+7f; // pitch analysis centre minus 944 (samples into the history) + float amplitude_window_offset = -0x1.e2p+7f; // amplitude analysis centre, likewise + // pitch search + float yin_weight = 0x1.3ab3ccp-1f; // weight of the YIN cost against the harmonic fit cost + float low_pitch_penalty = 0x1.a0d09ep-3f; // cost per octave below the highest grid pitch + float pitch_jump_cost = 0x1.ccccccp-1f; // tracker cost per octave of pitch change beyond the free range + float pitch_jump_free = 0x1.99999ap-4f; // pitch change (octaves) that costs nothing + float octave_jump_cost = 0x1p+0f; // extra cost of a jump of about one octave + float pitch_net_weight = 0x1.99999ap-4f; // weight of the pitch network's log posterior, 0 = off + float low_band_threshold_db = -0x1.ep+3f; // < 0: a frame whose low band trails by more than -this is "weak low band" + float low_band_penalty_scale = 0x1.333334p-1f; // low_pitch_penalty factor on such frames + float low_band_ignore_first = 0x1p+0f; // > 0: band 0 does not count for voicing on such frames + float onset_db = 0.0f; // > 0: level rise over two frames that counts as an onset + float onset_low_pitch_scale = 0x1p+0f; // low_pitch_penalty factor at an onset + float octave_down_tolerance = 0.0f; // > 0: take the octave below if its fit cost is within this + float octave_down_after_unvoiced = 0x1p+0f; // tolerance divisor after an unvoiced or silent frame + float octave_down_lookback = 0.0f; // > 0: after unvoiced, take the octave below if a later frame has it + // voicing + float voicing_threshold = 0x1.5c28f6p-1f; // band fit ratio below which a band is voiced + float voicing_threshold_slope = 0.0f; // threshold change across the bands + float voicing_table = 0x1p+0f; // > 0: thresholds from the pitch- and fit-dependent table instead + float voicing_table_offset = 0x1.99999ap-5f; // added to the table thresholds + float voicing_band_weight_exponent = 0x1.96966p-3f; // band weight = (band energy share)^this, 0 = equal + float voicing_hysteresis = 0.0f; // cost per band that differs from the previous frame's pattern + float voicing_hold_unvoiced = 0.0f; // > 0: the hysteresis also follows unvoiced frames + float unvoiced_fit_guard = 0.0f; // all-unvoiced choice is retried among the voiced patterns below this fit + float low_pitch_voicing_strength = 0.0f; // > 0: raise the upper bands' thresholds on good low-pitch fits + float low_pitch_voicing_fit = 0x1.333334p-2f; // fit cost below which that applies + float low_pitch_voicing_index = 0x1.ep+6f; // pitch indices below which that applies + // gate + float gate_level_db = -0x1.17fe1ap+6f; // frames below this level are silent + float gate_above_floor_db = 0x1.8bf50ep+2f; // or below the noise floor plus this + float floor_rise = 0x1.47ae14p-6f; // share of the level excess the noise floor rises by per frame + float gate_hang_frames = 0x1p+3f; // frames the gate stays open after speech + float gated_as_unvoiced = 0x1p+0f; // > 0: gated frames are coded as unvoiced speech, not silence + float gated_offset = -0x1.8p+1f; // log2 amplitude change of gated frames coded as speech + float silent_voicing_index = 0x1p+4f; // voicing field of silent frames (0..31) + float silence_offset = 0x1.77c7c6p-1f; // log2 amplitude offset of silent frames + float onset_unvoiced = 0.0f; // > 0: the frame after silence is unvoiced + float onset_offset = 0.0f; // log2 amplitude change of the frame after silence + // harmonic amplitudes + float voiced_offset = 0x1.eb3334p+3f; // log2 offset of voiced harmonics + float unvoiced_offset = 0x1.e471e4p+3f; // log2 offset of unvoiced harmonics + float voiced_amplitude_blend = 0x1p-1f; // voiced amplitude: fitted (0) to spectrum rms (1) + std::array voiced_band_offset = {-0x1p-2f, -0x1.eb851ep-6f, 0, 0, 0, 0, 0, 0, 0}; // per 500 Hz + std::array unvoiced_band_offset = {-0x1.cadc74p-3f, -0x1.4f13cep-5f, -0x1.41b196p-3f, 0, + -0x1.3e425ap-6f, 0x1.a7c7c6p-3f, 0, 0, 0}; + float unvoiced_pitch_slope = 0.0f; // unvoiced log2 offset per octave of pitch + float unvoiced_pitch_index = 0x1.dcp+6f; // >= 0: pitch index sent with an all-unvoiced pattern + float smooth_previous = 0x1.99999ap-5f; // weight of the previous frame's amplitudes + float smooth_next = 0.0f; // weight of the next frame's amplitudes + float smooth_next_margin = 0x1p+0f; // the next frame counts as at least this much below this one + float peak_threshold = 0x1.e66666p-1f; // frames with a sample peak at or above this ... + float peak_reduction = 0x1.333334p-3f; // ... are lowered by this (log2) + // quantiser + float gain_bias = -0x1.666666p-3f; // log2 offset of the gain target + float gain_lookahead_weight = 0x1.dbcdc2p-2f; // > 0: gain choice looks two frames ahead, this weight + float shape_weight_exponent = 0x1.155bb2p-1f; // harmonic weight = 2^((a - max) * this), 0 = equal + float shape_high_weight = 0.0f; // log2 weight tilt of the top 45% of the harmonics + float shape_search_beam = 0x1p+3f; // candidates kept per search stage (1..16) + float rescore_candidates = 0x1p+1f; // shape candidates re-scored (1 = none, up to 16) + float rescore_gain_span = 0x1p+0f; // gain indices either side re-scored with them, < 0 = none + float rescore_enhanced = 0.0f; // > 0: score against the enhanced decoded amplitudes (> 1.5 tilted) + float rescore_enhanced_offset = 0.0f; // log2 offset of the target in that score + float rescore_from_spectrum = 0.0f; // != 0: reference band energies from the spectrum, not the amplitudes + float rescore_floor = 0x1.4bbf9p+3f; // band energy floor, log2 below the strongest band + float rescore_weight_exponent = 0.0f; // > 0: band weight = (band energy share)^this + float rescore_asymmetry = 0x1p+0f; // weight of bands coded too loud + float rescore_shape_mix = 0.0f; // weight of the shape distortion in the band score + float rescore_gain_weight = 0.0f; // cost of moving the gain index + // Options that belong to other codec modes: accepted by name and kept, but nothing in this + // codec reads them (see docs/options.md). + float other_voicing_offset_low = 0.0f; + float other_voicing_offset_high = 0.0f; + float other_gated_pitch_zero = 0.0f; + float other_onset_bridge = 0.0f; + float other_onset_bridge_db = 0x1.4p+3f; + float other_voiced_island = 0.0f; + float other_voiced_island_db = 0x1.8p+2f; + float other_voiced_onset = 0.0f; + float other_voiced_onset_db = 0x1.4p+4f; + float other_unvoiced_low_cut_hz = 0.0f; + float other_unvoiced_low_cut_db = 0x1.4p+4f; + float other_low_cut_quiet_db = 0.0f; + float other_unvoiced_pitch_index = -0x1p+0f; + float other_voiced_low = 0.0f; + float other_voiced_low_db = 0x1.ep+3f; +}; + +// Sets the option `name` to value (converted to float). Returns false for an unknown name. +bool set_option(EncoderOptions& options, const char* name, double value); + +} // namespace halfrate::enc diff --git a/mbe/pitch.cpp b/mbe/pitch.cpp new file mode 100644 index 0000000..8169e90 --- /dev/null +++ b/mbe/pitch.cpp @@ -0,0 +1,109 @@ +#include "pitch.h" + +#include "fastmath.h" +#include "numeric.h" +#include "constants.h" +#include "enc_tables.h" + +namespace halfrate::enc { + +void tracker_reset(PitchTracker& t, int states, int depth) { + t = PitchTracker{}; + t.state_count = states; + t.depth = depth < kTrackerMaxDepth ? depth : kTrackerMaxDepth; +} + +void tracker_push(PitchTracker& t, const float* cost, const float* transition) { + int n = t.state_count; + if (t.frames == 0) { + for (int i = 0; i < n; i++) t.score[i] = cost[i]; + t.frames = 1; + return; + } + if (n >= 1) { + std::array& back = t.predecessor[t.frames % (t.depth + 1)]; + float next[kTrackerStates]; + float lowest = kHuge; + for (int j = 0; j < n; j++) { + float best = kHuge; + int from = 0; + for (int i = 0; i < n; i++) { + float c = t.score[i] + transition[static_cast(i) * n + j]; + if (c < best) { + best = c; + from = i; + } + } + back[j] = static_cast(from); + best = best + cost[j]; + next[j] = best; + if (best < lowest) lowest = best; + } + for (int i = 0; i < n; i++) t.score[i] = next[i] - lowest; + } + t.frames = t.frames + 1; +} + +int tracker_decide(const PitchTracker& t, int lag) { + int state = 0; + float best = kHuge; + for (int i = 0; i < t.state_count; i++) + if (t.score[i] < best) { + best = t.score[i]; + state = i; + } + int stop = t.frames - lag - 1; + for (int f = t.frames - 1; f > stop && f >= 0; f--) state = t.predecessor[f % (t.depth + 1)][state]; + return state; +} + +namespace { + +// Rounds half away from zero and saturates to [-127, 127]. +int8_t to_int8(float x) { + x = x + (x >= 0.0f ? 0.5f : -0.5f); + int q = core::to_int32_sat(x); + q = q > -127 ? q : -127; + q = q < 127 ? q : 127; + return static_cast(q); +} + +} // namespace + +void pitch_net_forward(const float* in, float* out) { + using namespace tables; + int8_t input[kNetInputs], hidden1_q[160], hidden2_q[96]; + float hidden1[160], hidden2[96]; + for (int i = 0; i < kNetInputs; i++) { + int j = i % kNetFeatures; + input[i] = to_int8((in[i] - kPitchNetMean[j]) * kPitchNetInvStd[j] * kNetInputScale); + } + for (int o = 0; o < 160; o++) { + int32_t acc = 0; + for (int i = 0; i < kNetInputs; i++) acc += input[i] * kPitchNetWeights1[o * kNetInputs + i]; + float y = kPitchNetBias1[o] + (kPitchNetScale1[o] * kNetLayer1Scale) * static_cast(acc); + hidden1[o] = y < 0.0f ? 0.0f : y; + } + for (int o = 0; o < 160; o++) hidden1_q[o] = to_int8(hidden1[o] * kNetHidden1Scale); + for (int o = 0; o < 96; o++) { + int32_t acc = 0; + for (int i = 0; i < 160; i++) acc += hidden1_q[i] * kPitchNetWeights2[o * 160 + i]; + float y = kPitchNetBias2[o] + (kPitchNetScale2[o] * kNetLayer2Scale) * static_cast(acc); + hidden2[o] = y < 0.0f ? 0.0f : y; + } + for (int o = 0; o < 96; o++) hidden2_q[o] = to_int8(hidden2[o] * kNetHidden2Scale); + for (int o = 0; o < kNetOutputs; o++) { + int32_t acc = 0; + for (int i = 0; i < 96; i++) acc += hidden2_q[i] * kPitchNetWeights3[o * 96 + i]; + out[o] = kPitchNetBias3[o] + (kPitchNetScale3[o] * kNetLayer3Scale) * static_cast(acc); + } + // log2 softmax + float top = kMinusHuge; + for (int o = 0; o < kNetOutputs; o++) top = out[o] > top ? out[o] : top; + float sum = 0.0f; + for (int o = 0; o < kNetOutputs; o++) sum = sum + core::fast_exp2((out[o] - top) * kLog2E); + float offset = top + core::fast_log2(sum) * kLn2; + for (int o = 0; o < kNetOutputs; o++) out[o] = out[o] - offset; +} + +} // namespace halfrate::enc diff --git a/mbe/pitch.h b/mbe/pitch.h new file mode 100644 index 0000000..afdb398 --- /dev/null +++ b/mbe/pitch.h @@ -0,0 +1,37 @@ +// Pitch tracking: a Viterbi tracker over the pitch grid that decides a frame's pitch a fixed number of frames +// late, and the pitch network that adds a learned log-posterior to the per-frame pitch costs. +#pragma once +#include +#include + +namespace halfrate::enc { + +constexpr int kTrackerStates = 120; +constexpr int kTrackerMaxDepth = 4; +constexpr int kNetFeatures = 305; // per frame: 120 fit costs, 120 YIN values, 64 band log energies, level +constexpr int kNetFrames = 6; +constexpr int kNetInputs = kNetFeatures * kNetFrames; +constexpr int kNetOutputs = 121; + +// Viterbi tracker: the best path cost ending in each state, and for each of the last depth + 1 frames the best +// predecessor of each state (a ring indexed by frame % (depth + 1)). +struct PitchTracker { + int32_t state_count = 0; + int32_t depth = 0; + int32_t frames = 0; // frames pushed + std::array score{}; + std::array, kTrackerMaxDepth + 1> predecessor{}; +}; + +void tracker_reset(PitchTracker& t, int states, int depth); + +// Adds a frame: cost[state], transition[from * states + to]. Scores are kept relative to the best one. +void tracker_push(PitchTracker& t, const float* cost, const float* transition); + +// The state on the best path, `lag` frames before the newest (lag <= depth). +int tracker_decide(const PitchTracker& t, int lag); + +// The pitch network over six frames of features (oldest first): out[0..120] are log2 posteriors. +void pitch_net_forward(const float* in, float* out); + +} // namespace halfrate::enc diff --git a/mbe/shape_quantizer.cpp b/mbe/shape_quantizer.cpp new file mode 100644 index 0000000..1b6babe --- /dev/null +++ b/mbe/shape_quantizer.cpp @@ -0,0 +1,257 @@ +#include "shape_quantizer.h" + +#include "constants.h" +#include "tables.h" + +namespace halfrate::enc { + +namespace { + +// Element `element`, basis function `order` of the size-n inverse DCT. +inline float inverse_dct(int n, int element, int order) { return tables::kInverseDct[n - 1][element][order]; } + +// Inserts (value, id) into the ascending list of at most capacity entries. +void insert_best(float* values, int* ids, int* count, int capacity, float value, int id) { + int n = *count; + if (n == capacity && value >= values[capacity - 1]) return; + int pos; + if (n < capacity) { + *count = n + 1; + pos = n; + } else { + pos = capacity - 1; + } + while (pos >= 1 && values[pos - 1] > value) { + values[pos] = values[pos - 1]; + ids[pos] = ids[pos - 1]; + pos--; + } + values[pos] = value; + ids[pos] = id; +} + +// a . b over 4 lanes, summed ((0 + p0) + p1 + p2) + p3 from a zero start +inline float dot4_from_zero(const float* a, const float* b) { + float p[4]; + for (int j = 0; j < 4; j++) p[j] = a[j] * b[j]; + float s = p[0] + 0.0f; + s = s + p[1]; + s = s + p[2]; + s = s + p[3]; + return s; +} + +// a . b over 4 lanes, summed ((p0 + p1) + p2) + p3 +inline float dot4(const float* a, const float* b) { + float p0 = a[0] * b[0], p1 = a[1] * b[1], p2 = a[2] * b[2], p3 = a[3] * b[3]; + float s = p0 + p1; + s = s + p2; + s = s + p3; + return s; +} + +} // namespace + +void init_shape_basis(ShapeBasis& basis, const core::Codebook& codebook) { + basis.offset.fill(0); + basis.values.fill(0.0f); + int offset = 0; + for (int L = kMinBasisHarmonics; L <= kMaxBasisHarmonics; L++) { + basis.offset[L] = offset; + float* rows = &basis.values[offset]; + const int32_t* blocks = codebook.band_sizes[L]; + // rows 0..6: coefficient 1 + row of the 8-point transform, through each block's pair (sum, difference) + for (int row = 0; row < 7; row++) { + float pair[4][2]; + for (int i = 0; i < 4; i++) { + pair[i][0] = inverse_dct(8, 2 * i, 1 + row); + pair[i][1] = inverse_dct(8, 2 * i + 1, 1 + row); + } + int pos = 0; + for (int b = 0; b < 4; b++) { + int n = blocks[b]; + if (n < 1) continue; + float sum = (pair[b][0] + pair[b][1]) * 0.5f; + float difference = (pair[b][0] - pair[b][1]) * kHalfInvSqrt2; + float* out = rows + row * L + pos; + pos += n; + for (int e = 0; e < n; e++) { + float v = sum * inverse_dct(n, e, 0); + if (n != 1) v = v + difference * inverse_dct(n, e, 1); + out[e] = v; + } + } + } + // rows 7 + 4 b + r: order 2 + r of block b's inverse DCT + int pos = 0; + for (int b = 0; b < 4; b++) { + int n = blocks[b]; + for (int r = 0; r < 4; r++) { + if (r + 2 >= n) continue; + float* out = rows + (7 + 4 * b + r) * L + pos; + for (int e = 0; e < n; e++) out[e] = inverse_dct(n, e, 2 + r); + } + pos = n + pos; + } + float reciprocal = tables::kReciprocalCount[L]; + for (int row = 0; row < kBasisRows; row++) { + float* out = rows + row * L; + float s = 0.0f; + for (int i = 0; i < L; i++) s = s + out[i]; + s = s * reciprocal; + for (int i = 0; i < L; i++) out[i] = out[i] - s; + } + offset = offset + kBasisRows * L; + } +} + +int search_shape(const ShapeBasis& basis, const core::Codebook& codebook, int L, const float* x, const float* w, + int best_low, int best_high, ShapeCandidate* out, int result_count) { + best_low = best_low > 1 ? best_low : 1; + best_low = best_low < 16 ? best_low : 16; + best_high = best_high > 1 ? best_high : 1; + best_high = best_high < 16 ? best_high : 16; + const float* rows = basis.rows(L); + float wx[kMaxBasisHarmonics]; + float gram[kBasisRows][kBasisRows], correlation[kBasisRows]; + float low_energy[512], high_energy[128], detail_energy[4][32]; + float low_values[16], high_values[16], residual1[kBasisRows], residual3[16]; + int low_ids[16], high_ids[16], low_count = 0, detail[4]; + const float* chosen[4]; + + float energy = 0.0f; + for (int i = 0; i < L; i++) { + wx[i] = w[i] * x[i]; + energy = energy + x[i] * wx[i]; + } + for (int r = 0; r < kBasisRows; r++) { + const float* row = rows + r * L; + float s = 0.0f; + for (int i = 0; i < L; i++) s = s + row[i] * wx[i]; + correlation[r] = s; + for (int t = 0; t <= r; t++) { + const float* other = rows + t * L; + float g = 0.0f; + for (int i = 0; i < L; i++) g = g + w[i] * row[i] * other[i]; + gram[r][t] = g; + gram[t][r] = g; + } + } + const float(*low_book)[3] = codebook.shape_low; + const float(*high_book)[4] = codebook.shape_high; + for (int j = 0; j < 512; j++) { + const float* p = low_book[j]; + float acc = 0.0f; + for (int a = 0; a < 3; a++) { + float t = 0.0f; + for (int b = 0; b < 3; b++) t = t + gram[a][b] * p[b]; + acc = acc + t * p[a]; + } + low_energy[j] = acc; + } + for (int j = 0; j < 128; j++) { + const float* p = high_book[j]; + float acc = 0.0f; + for (int a = 0; a < 4; a++) acc = acc + dot4_from_zero(&gram[3 + a][3], p) * p[a]; + high_energy[j] = acc; + } + for (int b = 0; b < 4; b++) { + int n = codebook.detail_count[b]; + const float* book = codebook.detail[b]; + long stride = codebook.detail_stride[b]; + for (int e = 0; e < n; e++) { + const float* p = book + e * stride * 4; + float acc = 0.0f; + for (int a = 0; a < 4; a++) acc = acc + dot4_from_zero(&gram[7 + 4 * b + a][7 + 4 * b], p) * p[a]; + detail_energy[b][e] = acc; + } + } + // stage 1: shape-low + for (int j = 0; j < 512; j++) { + const float* p = low_book[j]; + float t = p[0] * correlation[0]; + float u1 = p[1] * correlation[1], u2 = p[2] * correlation[2]; + t = t + u1; + t = t + u2; + t = t + t; + insert_best(low_values, low_ids, &low_count, best_low, (energy + low_energy[j]) - t, j); + } + int results = 0; + for (int i1 = 0; i1 < low_count; i1++) { + int j1 = low_ids[i1]; + const float* p1 = low_book[j1]; + int high_count = 0; + for (int r = 3; r < kBasisRows; r++) { + float s = correlation[r]; + for (int a = 0; a < 3; a++) s = s - gram[r][a] * p1[a]; + residual1[r] = s; + } + float v1 = low_values[i1]; + // stage 2: shape-high + for (int j = 0; j < 128; j++) { + float t = dot4(high_book[j], &residual1[3]); + t = t + t; + insert_best(high_values, high_ids, &high_count, best_high, (v1 + high_energy[j]) - t, j); + } + for (int i2 = 0; i2 < high_count; i2++) { + int j2 = high_ids[i2]; + const float* p2 = high_book[j2]; + for (int r = 0; r < 16; r++) { + float s = residual1[7 + r]; + for (int a = 0; a < 4; a++) s = s - gram[7 + r][3 + a] * p2[a]; + residual3[r] = s; + } + // stage 3: each block's detail on its own + for (int b = 0; b < 4; b++) { + int n = codebook.detail_count[b], arg = 0; + const float* book = codebook.detail[b]; + int stride = codebook.detail_stride[b]; + if (n > 0) { + float best = kHuge; + for (int e = 0; e < n; e++) { + float t = dot4(book + static_cast(e) * stride * 4, &residual3[4 * b]); + t = t + t; + float s = detail_energy[b][e] - t; + if (s < best) { + best = s; + arg = e; + } + } + } + detail[b] = arg; + chosen[b] = book + static_cast(stride * arg) * 4; + } + float distortion = high_values[i2]; + for (int r = 0; r < 16; r++) { + float s = residual3[r] * -2.0f; + for (int t = 0; t < 16; t++) s = s + gram[7 + r][7 + t] * chosen[t >> 2][t & 3]; + s = s * chosen[r >> 2][r & 3]; + distortion = distortion + s; + } + // insert into the sorted results + int pos, count; + if (results < result_count) { + count = results + 1; + pos = results; + } else { + count = results; + if (!(distortion < out[results - 1].distortion)) continue; + pos = result_count - 1; + } + while (pos >= 1 && out[pos - 1].distortion > distortion) { + out[pos] = out[pos - 1]; + pos--; + } + ShapeCandidate& c = out[pos]; + c = ShapeCandidate{}; + c.low = j1; + c.high = j2; + for (int b = 0; b < 4; b++) c.detail[b] = detail[b]; + c.distortion = distortion; + results = count; + } + } + return results; +} + +} // namespace halfrate::enc diff --git a/mbe/shape_quantizer.h b/mbe/shape_quantizer.h new file mode 100644 index 0000000..31ccb03 --- /dev/null +++ b/mbe/shape_quantizer.h @@ -0,0 +1,44 @@ +// The spectral shape quantiser: for each harmonic count L, the 23 basis vectors (each of L values) through which +// the shape fields act on the harmonic amplitudes, and the weighted three-stage tree search over the shape +// codebooks. +// +// Basis rows 0..2 belong to the shape-low coefficients, 3..6 to the shape-high ones (the 8-point transform's +// coefficients 1..7, spread over the four blocks as each block's pair sum and difference), and rows 7 + 4 b + r +// to coefficient r of block b's higher-order (detail) codebook. Every row has its mean removed. +#pragma once +#include +#include + +#include "codebook.h" + +namespace halfrate::enc { + +constexpr int kBasisRows = 23; +constexpr int kMinBasisHarmonics = 9; +constexpr int kMaxBasisHarmonics = 56; +constexpr int kBasisValues = kBasisRows * 1560; // 23 rows of L values for L = 9..56 +constexpr int kMaxShapeResults = 16; + +struct ShapeBasis { + std::array offset{}; // first value of L's rows in values + std::array values{}; + const float* rows(int harmonic_count) const { return &values[offset[harmonic_count]]; } +}; + +// One search result: the six shape fields and the weighted distortion. +struct ShapeCandidate { + int32_t low = 0; // shape-low index (field 3) + int32_t high = 0; // shape-high index (field 4) + std::array detail{}; // detail indices (fields 5..8) + float distortion = 0.0f; +}; + +void init_shape_basis(ShapeBasis& basis, const core::Codebook& codebook); + +// Searches the shape fields for the target x[L] under weights w[L], keeping the best_low shape-low and best_high +// shape-high candidates per stage (each clamped to 1..16) and choosing each block's detail greedily. Writes the +// result_count best results to out, sorted by distortion, and returns how many there are. +int search_shape(const ShapeBasis& basis, const core::Codebook& codebook, int harmonic_count, const float* x, + const float* w, int best_low, int best_high, ShapeCandidate* out, int result_count); + +} // namespace halfrate::enc diff --git a/mbe/tables.h b/mbe/tables.h new file mode 100644 index 0000000..01c9e15 --- /dev/null +++ b/mbe/tables.h @@ -0,0 +1,41 @@ +// Constant tables shared by the encoder and decoder. The large ones are generated data (cosine.cc, golay.cc, +// codebook.cc); the rest are written out by hand in the files named below. +#pragma once +#include + +#include "codebook.h" + +namespace halfrate::tables { + +// cosine.cc: cos(2 pi i / 8192) for i = 0..8191, one turn. sin is kCosine[(i + 6144) & 8191]. +extern const float kCosine[8192]; + +// golay.cc: the (23,12) Golay code. +extern const uint32_t kGolayParityRows[12]; // parity bits of each data bit, data bit 11 first +extern const uint32_t kGolaySyndromeCorrection[2048]; // syndrome -> error pattern (data part in the low 12 bits) + +// codebook.cc: the parameter codebooks. kCodebook (codebook_set.cc) ties them together. +extern const float kPitchFundamental[120]; // cycles per sample, per pitch index +extern const int32_t kPitchHarmonicCount[120]; +extern const int32_t kVoicingCodebook[32][8]; // per voicing index: band 0..7 voiced (1) or not (0) +extern const int32_t kBandSizes[57][4]; // per harmonic count L: sizes of the 4 transform blocks (sum L) +extern const float kGainCodebook[32]; +extern const float kShapeLowCodebook[512][3]; // 8-point transform coefficients 1..3 +extern const float kShapeHighCodebook[128][4]; // 8-point transform coefficients 4..7 +extern const float kShapeDetail1Codebook[32][4]; // higher-order coefficients of block 1..4 +extern const float kShapeDetail2Codebook[16][4]; +extern const float kShapeDetail3Codebook[16][4]; +extern const float kShapeDetail4Codebook[8][4]; +// kInverseDct[n - 1][i][k]: element i of basis function k of the size-n inverse DCT, n = 1..17 +extern const float kInverseDct[17][18][18]; +extern const float kHalfLog2Count[64]; // log2(L) / 2 +extern const float kReciprocalCount[64]; // 1 / L (0 for L = 0) + +// codebook_set.cc: the half-rate codebook set the dequantiser uses. +extern const core::Codebook kCodebook; + +// frame_layout.cc: the 49-bit frame layout. +extern const int32_t kFieldWidth[9]; // bits per parameter field +extern const int8_t kFieldBitPosition[9][9]; // frame bit of each field bit, most significant first + +} // namespace halfrate::tables