Commit 71c8d6b9 authored by Raymond Knopp's avatar Raymond Knopp

initializations for radix-3 FFTs (1536,3072,6144,12288,18432,24576), addition of 3072-point.

parent ad867af7
...@@ -5461,24 +5461,121 @@ void dft1536(int16_t *input, int16_t *output, int scale) ...@@ -5461,24 +5461,121 @@ void dft1536(int16_t *input, int16_t *output, int scale)
} }
int16_t twa3072[2048] __attribute__((aligned(32)));
int16_t twb3072[2048] __attribute__((aligned(32)));
// 1024 x 3 // 1024 x 3
void dft3072(int16_t *input, int16_t *output) void dft3072(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j;
uint32_t tmp[3][1024] __attribute__((aligned(32)));
uint32_t tmpo[3][1024] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<1024; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
tmp[1][i] = ((uint32_t *)input)[j++];
tmp[2][i] = ((uint32_t *)input)[j++];
}
dft1024((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1);
dft1024((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
dft1024((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
for (i=0,i2=0; i<2048; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+2048+i),(simd_q15_t*)(output+4096+i),
(simd_q15_t*)(twa3072+i),(simd_q15_t*)(twb3072+i));
}
if (scale==1) {
for (i=0; i<48; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty();
_m_empty();
} }
void idft3072(int16_t *input, int16_t *output) void idft3072(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j;
uint32_t tmp[3][1024]__attribute__((aligned(32)));
uint32_t tmpo[3][1024] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<1024; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
tmp[1][i] = ((uint32_t *)input)[j++];
tmp[2][i] = ((uint32_t *)input)[j++];
}
idft1024((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1);
idft1024((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft1024((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
for (i=0,i2=0; i<2048; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+2048+i),(simd_q15_t*)(output+4096+i),
(simd_q15_t*)(twa3072+i),(simd_q15_t*)(twb3072+i));
}
if (scale==1) {
for (i=0; i<48; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty();
_m_empty();
} }
#include "twiddle6144.h"
void idft6144(int16_t *input, int16_t *output) int16_t twa6144[4096] __attribute__((aligned(32)));
int16_t twb6144[4096] __attribute__((aligned(32)));
void idft6144(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][2048] __attribute__((aligned(32))); uint32_t tmp[3][2048] __attribute__((aligned(32)));
uint32_t tmpo[3][2048] __attribute__((aligned(32))); uint32_t tmpo[3][2048] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<2048; i++) { for (i=0,j=0; i<2048; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5490,36 +5587,47 @@ void idft6144(int16_t *input, int16_t *output) ...@@ -5490,36 +5587,47 @@ void idft6144(int16_t *input, int16_t *output)
idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
/*
for (i=1; i<2048; i++) {
tmpo[0][i] = tmpo[0][i<<1];
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
// LOG_M("in.m","in",input,6144,1,1);
// LOG_M("out0.m","o0",tmpo[0],2048,1,1);
// LOG_M("out1.m","o1",tmpo[1],2048,1,1);
// LOG_M("out2.m","o2",tmpo[2],2048,1,1);
for (i=0,i2=0; i<4096; i+=8,i2+=4) { for (i=0,i2=0; i<4096; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
(simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i));
} }
// LOG_M("out.m","out",output,6144,1,1); if (scale==1) {
for (i=0; i<96; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
} }
void dft6144(int16_t *input, int16_t *output) void dft6144(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][2048] __attribute__((aligned(32))); uint32_t tmp[3][2048] __attribute__((aligned(32)));
uint32_t tmpo[3][2048] __attribute__((aligned(32))); uint32_t tmpo[3][2048] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<2048; i++) { for (i=0,j=0; i<2048; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5547,19 +5655,44 @@ void dft6144(int16_t *input, int16_t *output) ...@@ -5547,19 +5655,44 @@ void dft6144(int16_t *input, int16_t *output)
(simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i));
} }
if (scale==1) {
for (i=0; i<96; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
} }
#include "twiddle12288.h"
int16_t twa12288[8192] __attribute__((aligned(32)));
int16_t twb12288[8192] __attribute__((aligned(32)));
// 4096 x 3 // 4096 x 3
void dft12288(int16_t *input, int16_t *output) void dft12288(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][4096] __attribute__((aligned(32))); uint32_t tmp[3][4096] __attribute__((aligned(32)));
uint32_t tmpo[3][4096] __attribute__((aligned(32))); uint32_t tmpo[3][4096] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<4096; i++) { for (i=0,j=0; i<4096; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5567,9 +5700,9 @@ void dft12288(int16_t *input, int16_t *output) ...@@ -5567,9 +5700,9 @@ void dft12288(int16_t *input, int16_t *output)
tmp[2][i] = ((uint32_t *)input)[j++]; tmp[2][i] = ((uint32_t *)input)[j++];
} }
dft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1); dft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
dft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); dft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
dft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); dft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
/* /*
for (i=1; i<4096; i++) { for (i=1; i<4096; i++) {
tmpo[0][i] = tmpo[0][i<<1]; tmpo[0][i] = tmpo[0][i<<1];
...@@ -5586,16 +5719,39 @@ void dft12288(int16_t *input, int16_t *output) ...@@ -5586,16 +5719,39 @@ void dft12288(int16_t *input, int16_t *output)
(simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i)); (simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i));
} }
if (scale==1) {
for (i=0; i<192; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
} }
void idft12288(int16_t *input, int16_t *output) void idft12288(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][4096] __attribute__((aligned(32))); uint32_t tmp[3][4096] __attribute__((aligned(32)));
uint32_t tmpo[3][4096] __attribute__((aligned(32))); uint32_t tmpo[3][4096] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<4096; i++) { for (i=0,j=0; i<4096; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5604,34 +5760,52 @@ void idft12288(int16_t *input, int16_t *output) ...@@ -5604,34 +5760,52 @@ void idft12288(int16_t *input, int16_t *output)
} }
idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1); idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
/*
LOG_M("in.m","in",input,12288,1,1);
LOG_M("out0.m","o0",tmpo[0],4096,1,1);
LOG_M("out1.m","o1",tmpo[1],4096,1,1);
LOG_M("out2.m","o2",tmpo[2],4096,1,1);
*/
for (i=0,i2=0; i<8192; i+=8,i2+=4) { for (i=0,i2=0; i<8192; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
(simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i)); (simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i));
} }
if (scale==1) {
for (i=0; i<192; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
// LOG_M("out.m","out",output,6144,1,1); // LOG_M("out.m","out",output,6144,1,1);
} }
#include "twiddle18432.h" int16_t twa18432[12288] __attribute__((aligned(32)));
int16_t twb18432[12288] __attribute__((aligned(32)));
// 6144 x 3 // 6144 x 3
void dft18432(int16_t *input, int16_t *output) { void dft18432(int16_t *input, int16_t *output,int scale) {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][6144] __attribute__((aligned(32))); uint32_t tmp[3][6144] __attribute__((aligned(32)));
uint32_t tmpo[3][6144] __attribute__((aligned(32))); uint32_t tmpo[3][6144] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<6144; i++) { for (i=0,j=0; i<6144; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5639,25 +5813,47 @@ void dft18432(int16_t *input, int16_t *output) { ...@@ -5639,25 +5813,47 @@ void dft18432(int16_t *input, int16_t *output) {
tmp[2][i] = ((uint32_t *)input)[j++]; tmp[2][i] = ((uint32_t *)input)[j++];
} }
dft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0])); dft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
dft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1])); dft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
dft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2])); dft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
for (i=0,i2=0; i<12288; i+=8,i2+=4) { for (i=0,i2=0; i<12288; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i),
(simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i)); (simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i));
} }
if (scale==1) {
for (i=0; i<288; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
} }
void idft18432(int16_t *input, int16_t *output) { void idft18432(int16_t *input, int16_t *output,int scale) {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][6144] __attribute__((aligned(32))); uint32_t tmp[3][6144] __attribute__((aligned(32)));
uint32_t tmpo[3][6144] __attribute__((aligned(32))); uint32_t tmpo[3][6144] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<6144; i++) { for (i=0,j=0; i<6144; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5665,27 +5861,51 @@ void idft18432(int16_t *input, int16_t *output) { ...@@ -5665,27 +5861,51 @@ void idft18432(int16_t *input, int16_t *output) {
tmp[2][i] = ((uint32_t *)input)[j++]; tmp[2][i] = ((uint32_t *)input)[j++];
} }
idft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0])); idft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
idft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1])); idft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
idft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2])); idft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
for (i=0,i2=0; i<12288; i+=8,i2+=4) { for (i=0,i2=0; i<12288; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i),
(simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i)); (simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i));
} }
if (scale==1) {
for (i=0; i<288; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
} }
#include "twiddle24576.h"
int16_t twa24576[16384] __attribute__((aligned(32)));
int16_t twb24576[16384] __attribute__((aligned(32)));
// 8192 x 3 // 8192 x 3
void dft24576(int16_t *input, int16_t *output) void dft24576(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][8192] __attribute__((aligned(32))); uint32_t tmp[3][8192] __attribute__((aligned(32)));
uint32_t tmpo[3][8192] __attribute__((aligned(32))); uint32_t tmpo[3][8192] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<8192; i++) { for (i=0,j=0; i<8192; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5712,17 +5932,40 @@ void dft24576(int16_t *input, int16_t *output) ...@@ -5712,17 +5932,40 @@ void dft24576(int16_t *input, int16_t *output)
(simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i));
} }
if (scale==1) {
for (i=0; i<384; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
// LOG_M("out.m","out",output,24576,1,1); // LOG_M("out.m","out",output,24576,1,1);
} }
void idft24576(int16_t *input, int16_t *output) void idft24576(int16_t *input, int16_t *output,int scale)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][8192] __attribute__((aligned(32))); uint32_t tmp[3][8192] __attribute__((aligned(32)));
uint32_t tmpo[3][8192] __attribute__((aligned(32))); uint32_t tmpo[3][8192] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<8192; i++) { for (i=0,j=0; i<8192; i++) {
tmp[0][i] = ((uint32_t *)input)[j++]; tmp[0][i] = ((uint32_t *)input)[j++];
...@@ -5746,7 +5989,27 @@ void idft24576(int16_t *input, int16_t *output) ...@@ -5746,7 +5989,27 @@ void idft24576(int16_t *input, int16_t *output)
(simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i),
(simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i));
} }
if (scale==1) {
for (i=0; i<384; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
...@@ -18594,7 +18857,7 @@ void init_rad3(int N,int16_t *twa,int16_t *twb) { ...@@ -18594,7 +18857,7 @@ void init_rad3(int N,int16_t *twa,int16_t *twb) {
int i; int i;
for (i=0;i<(N/3)-1;i++) { for (i=0;i<(N/3);i++) {
*twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); twa++; *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); twa++;
*twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); twa++; *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); twa++;
*twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); twb++; *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); twb++;
...@@ -18657,6 +18920,11 @@ init_dfts() { ...@@ -18657,6 +18920,11 @@ init_dfts() {
init_rad2(8192,tw8192); init_rad2(8192,tw8192);
init_rad3(1536,twa1536,twb1536); init_rad3(1536,twa1536,twb1536);
init_rad3(3072,twa3072,twb3072);
init_rad3(6144,twa6144,twb6144);
init_rad3(12288,twa12288,twb12288);
init_rad3(18432,twa18432,twb18432);
init_rad3(24576,twa24576,twb24576);
init_rad3_rep(288,twa288,twb288); init_rad3_rep(288,twa288,twb288);
init_rad5_rep(300,twa300,twb300,twc300,twd300); init_rad5_rep(300,twa300,twb300,twc300,twd300);
...@@ -18847,9 +19115,9 @@ int main(int argc, char**argv) ...@@ -18847,9 +19115,9 @@ int main(int argc, char**argv)
time_stats_t ts; time_stats_t ts;
#ifdef __AVX2__ #ifdef __AVX2__
simd256_q15_t x[2048],y[2048],tw0,tw1,tw2,tw3; simd256_q15_t x[4096],y[4096],tw0,tw1,tw2,tw3;
#else #else
simd_q15_t x[4096],y[4096],tw0,tw1,tw2,tw3; simd_q15_t x[8192],y[8192],tw0,tw1,tw2,tw3;
#endif #endif
int i; int i;
simd_q15_t *x128=x,*y128=y; simd_q15_t *x128=x,*y128=y;
...@@ -19462,7 +19730,7 @@ int main(int argc, char**argv) ...@@ -19462,7 +19730,7 @@ int main(int argc, char**argv)
else else
((int16_t*)x)[i] = -364; ((int16_t*)x)[i] = -364;
} }
for (i=2*(4096-1200);i<8192;i++) { for (i=2*(8192-2400);i<16384;i++) {
if ((taus() & 1)==0) if ((taus() & 1)==0)
((int16_t*)x)[i] = 364; ((int16_t*)x)[i] = 364;
else else
...@@ -19475,10 +19743,158 @@ int main(int argc, char**argv) ...@@ -19475,10 +19743,158 @@ int main(int argc, char**argv)
stop_meas(&ts); stop_meas(&ts);
} }
printf("\n\n8192-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); printf("\n\n1536-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y8192.m","y8192",y,8192,1,1); LOG_M("y8192.m","y8192",y,8192,1,1);
LOG_M("x8192.m","x8192",x,8192,1,1); LOG_M("x8192.m","x8192",x,8192,1,1);
memset((void*)x,0,1536*sizeof(int32_t));
for (i=2;i<1202;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(1536-600);i<3072;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft1536((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n1536-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y1536.m","y1536",y,1536,1,1);
LOG_M("x1536.m","x1536",x,1536,1,1);
printf("\n\n1536-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y8192.m","y8192",y,8192,1,1);
LOG_M("x8192.m","x8192",x,8192,1,1);
memset((void*)x,0,3072*sizeof(int32_t));
for (i=2;i<1202;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(3072-600);i<3072;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft3072((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n3072-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y3072.m","y3072",y,3072,1,1);
LOG_M("x3072.m","x3072",x,3072,1,1);
memset((void*)x,0,6144*sizeof(int32_t));
for (i=2;i<4802;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(6144-2400);i<12288;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft6144((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n6144-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y6144.m","y6144",y,6144,1,1);
LOG_M("x6144.m","x6144",x,6144,1,1);
memset((void*)x,0,12288*sizeof(int32_t));
for (i=2;i<9602;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(12288-4800);i<24576;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft12288((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n12288-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y12288.m","y12288",y,12288,1,1);
LOG_M("x12288.m","x12288",x,12288,1,1);
memset((void*)x,0,18432*sizeof(int32_t));
for (i=2;i<14402;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(18432-7200);i<36864;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft18432((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n18432-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y18432.m","y18432",y,18432,1,1);
LOG_M("x18432.m","x18432",x,18432,1,1);
memset((void*)x,0,24576*sizeof(int32_t));
for (i=2;i<19202;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(24576-19200);i<49152;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft24576((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n24576-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
LOG_M("y24576.m","y24576",y,24576,1,1);
LOG_M("x24576.m","x24576",x,24576,1,1);
return(0); return(0);
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdint.h>
/* Twiddles generated with
twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:511)/1536));
twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:1022)/1536));
twa2 = zeros(1,1024);
twb2 = zeros(1,1024);
twa2(1:2:end) = real(twa);
twa2(2:2:end) = imag(twa);
twb2(1:2:end) = real(twb);
twb2(2:2:end) = imag(twb);
*/
int16_t twa1536[1024] __attribute__((aligned(16))) = {32767,0,32766,-135,32765,-269,32764,-403,32762,-537,32760,-671,32757,-805,32753,-939,32749,-1073,32744,-1207,32739,-1340,32733,-1474,32727,-1608,32720,-1742,32713,-1876,32705,-2010,32696,-2144,32687,-2277,32678,-2411,32668,-2545,32657,-2678,32646,-2812,32634,-2945,32622,-3079,32609,-3212,32595,-3346,32581,-3479,32567,-3612,32552,-3745,32536,-3878,32520,-4012,32503,-4145,32486,-4277,32468,-4410,32450,-4543,32431,-4676,32412,-4808,32392,-4941,32371,-5073,32350,-5206,32329,-5338,32307,-5470,32284,-5602,32261,-5734,32237,-5866,32213,-5998,32188,-6130,32163,-6262,32137,-6393,32110,-6524,32084,-6656,32056,-6787,32028,-6918,31999,-7049,31970,-7180,31941,-7311,31911,-7441,31880,-7572,31849,-7702,31817,-7832,31785,-7962,31752,-8092,31718,-8222,31684,-8352,31650,-8481,31615,-8611,31580,-8740,31544,-8869,31507,-8998,31470,-9127,31432,-9255,31394,-9384,31356,-9512,31316,-9640,31277,-9768,31236,-9896,31196,-10024,31154,-10152,31113,-10279,31070,-10406,31028,-10533,30984,-10660,30940,-10787,30896,-10913,30851,-11039,30806,-11165,30760,-11291,30713,-11417,30666,-11543,30619,-11668,30571,-11793,30522,-11918,30473,-12043,30424,-12167,30374,-12292,30323,-12416,30272,-12540,30221,-12664,30169,-12787,30116,-12910,30063,-13034,30009,-13156,29955,-13279,29901,-13401,29846,-13524,29790,-13646,29734,-13767,29678,-13889,29621,-14010,29563,-14131,29505,-14252,29446,-14373,29387,-14493,29328,-14613,29268,-14733,29207,-14853,29146,-14972,29085,-15091,29023,-15210,28960,-15328,28897,-15447,28834,-15565,28770,-15683,28706,-15800,28641,-15918,28575,-16035,28510,-16151,28443,-16268,28377,-16384,28309,-16500,28242,-16616,28173,-16731,28105,-16846,28036,-16961,27966,-17075,27896,-17190,27825,-17304,27754,-17417,27683,-17531,27611,-17644,27538,-17757,27466,-17869,27392,-17981,27319,-18093,27244,-18205,27170,-18316,27094,-18427,27019,-18538,26943,-18648,26866,-18758,26789,-18868,26712,-18977,26634,-19087,26556,-19195,26477,-19304,26398,-19412,26318,-19520,26238,-19627,26158,-19734,26077,-19841,25995,-19948,25913,-20054,25831,-20160,25749,-20265,25665,-20370,25582,-20475,25498,-20580,25414,-20684,25329,-20788,25243,-20891,25158,-20994,25072,-21097,24985,-21199,24898,-21301,24811,-21403,24723,-21504,24635,-21605,24546,-21706,24457,-21806,24368,-21906,24278,-22005,24188,-22105,24097,-22203,24006,-22302,23915,-22400,23823,-22497,23731,-22595,23638,-22692,23545,-22788,23452,-22884,23358,-22980,23264,-23075,23169,-23170,23074,-23265,22979,-23359,22883,-23453,22787,-23546,22691,-23639,22594,-23732,22496,-23824,22399,-23916,22301,-24007,22202,-24098,22104,-24189,22004,-24279,21905,-24369,21805,-24458,21705,-24547,21604,-24636,21503,-24724,21402,-24812,21300,-24899,21198,-24986,21096,-25073,20993,-25159,20890,-25244,20787,-25330,20683,-25415,20579,-25499,20474,-25583,20369,-25666,20264,-25750,20159,-25832,20053,-25914,19947,-25996,19840,-26078,19733,-26159,19626,-26239,19519,-26319,19411,-26399,19303,-26478,19194,-26557,19086,-26635,18976,-26713,18867,-26790,18757,-26867,18647,-26944,18537,-27020,18426,-27095,18315,-27171,18204,-27245,18092,-27320,17980,-27393,17868,-27467,17756,-27539,17643,-27612,17530,-27684,17416,-27755,17303,-27826,17189,-27897,17074,-27967,16960,-28037,16845,-28106,16730,-28174,16615,-28243,16499,-28310,16383,-28378,16267,-28444,16150,-28511,16034,-28576,15917,-28642,15799,-28707,15682,-28771,15564,-28835,15446,-28898,15327,-28961,15209,-29024,15090,-29086,14971,-29147,14852,-29208,14732,-29269,14612,-29329,14492,-29388,14372,-29447,14251,-29506,14130,-29564,14009,-29622,13888,-29679,13766,-29735,13645,-29791,13523,-29847,13400,-29902,13278,-29956,13155,-30010,13033,-30064,12909,-30117,12786,-30170,12663,-30222,12539,-30273,12415,-30324,12291,-30375,12166,-30425,12042,-30474,11917,-30523,11792,-30572,11667,-30620,11542,-30667,11416,-30714,11290,-30761,11164,-30807,11038,-30852,10912,-30897,10786,-30941,10659,-30985,10532,-31029,10405,-31071,10278,-31114,10151,-31155,10023,-31197,9895,-31237,9767,-31278,9639,-31317,9511,-31357,9383,-31395,9254,-31433,9126,-31471,8997,-31508,8868,-31545,8739,-31581,8610,-31616,8480,-31651,8351,-31685,8221,-31719,8091,-31753,7961,-31786,7831,-31818,7701,-31850,7571,-31881,7440,-31912,7310,-31942,7179,-31971,7048,-32000,6917,-32029,6786,-32057,6655,-32085,6523,-32111,6392,-32138,6261,-32164,6129,-32189,5997,-32214,5865,-32238,5733,-32262,5601,-32285,5469,-32308,5337,-32330,5205,-32351,5072,-32372,4940,-32393,4807,-32413,4675,-32432,4542,-32451,4409,-32469,4276,-32487,4144,-32504,4011,-32521,3877,-32537,3744,-32553,3611,-32568,3478,-32582,3345,-32596,3211,-32610,3078,-32623,2944,-32635,2811,-32647,2677,-32658,2544,-32669,2410,-32679,2276,-32688,2143,-32697,2009,-32706,1875,-32714,1741,-32721,1607,-32728,1473,-32734,1339,-32740,1206,-32745,1072,-32750,938,-32754,804,-32758,670,-32761,536,-32763,402,-32765,268,-32766,134,-32767,0,-32767,-135,-32767,-269,-32766,-403,-32765,-537,-32763,-671,-32761,-805,-32758,-939,-32754,-1073,-32750,-1207,-32745,-1340,-32740,-1474,-32734,-1608,-32728,-1742,-32721,-1876,-32714,-2010,-32706,-2144,-32697,-2277,-32688,-2411,-32679,-2545,-32669,-2678,-32658,-2812,-32647,-2945,-32635,-3079,-32623,-3212,-32610,-3346,-32596,-3479,-32582,-3612,-32568,-3745,-32553,-3878,-32537,-4012,-32521,-4145,-32504,-4277,-32487,-4410,-32469,-4543,-32451,-4676,-32432,-4808,-32413,-4941,-32393,-5073,-32372,-5206,-32351,-5338,-32330,-5470,-32308,-5602,-32285,-5734,-32262,-5866,-32238,-5998,-32214,-6130,-32189,-6262,-32164,-6393,-32138,-6524,-32111,-6656,-32085,-6787,-32057,-6918,-32029,-7049,-32000,-7180,-31971,-7311,-31942,-7441,-31912,-7572,-31881,-7702,-31850,-7832,-31818,-7962,-31786,-8092,-31753,-8222,-31719,-8352,-31685,-8481,-31651,-8611,-31616,-8740,-31581,-8869,-31545,-8998,-31508,-9127,-31471,-9255,-31433,-9384,-31395,-9512,-31357,-9640,-31317,-9768,-31278,-9896,-31237,-10024,-31197,-10152,-31155,-10279,-31114,-10406,-31071,-10533,-31029,-10660,-30985,-10787,-30941,-10913,-30897,-11039,-30852,-11165,-30807,-11291,-30761,-11417,-30714,-11543,-30667,-11668,-30620,-11793,-30572,-11918,-30523,-12043,-30474,-12167,-30425,-12292,-30375,-12416,-30324,-12540,-30273,-12664,-30222,-12787,-30170,-12910,-30117,-13034,-30064,-13156,-30010,-13279,-29956,-13401,-29902,-13524,-29847,-13646,-29791,-13767,-29735,-13889,-29679,-14010,-29622,-14131,-29564,-14252,-29506,-14373,-29447,-14493,-29388,-14613,-29329,-14733,-29269,-14853,-29208,-14972,-29147,-15091,-29086,-15210,-29024,-15328,-28961,-15447,-28898,-15565,-28835,-15683,-28771,-15800,-28707,-15918,-28642,-16035,-28576,-16151,-28511,-16268,-28444};
int16_t twb1536[1024] __attribute__((aligned(16))) = {32767,0,32765,-269,32762,-537,32757,-805,32749,-1073,32739,-1340,32727,-1608,32713,-1876,32696,-2144,32678,-2411,32657,-2678,32634,-2945,32609,-3212,32581,-3479,32552,-3745,32520,-4012,32486,-4277,32450,-4543,32412,-4808,32371,-5073,32329,-5338,32284,-5602,32237,-5866,32188,-6130,32137,-6393,32084,-6656,32028,-6918,31970,-7180,31911,-7441,31849,-7702,31785,-7962,31718,-8222,31650,-8481,31580,-8740,31507,-8998,31432,-9255,31356,-9512,31277,-9768,31196,-10024,31113,-10279,31028,-10533,30940,-10787,30851,-11039,30760,-11291,30666,-11543,30571,-11793,30473,-12043,30374,-12292,30272,-12540,30169,-12787,30063,-13034,29955,-13279,29846,-13524,29734,-13767,29621,-14010,29505,-14252,29387,-14493,29268,-14733,29146,-14972,29023,-15210,28897,-15447,28770,-15683,28641,-15918,28510,-16151,28377,-16384,28242,-16616,28105,-16846,27966,-17075,27825,-17304,27683,-17531,27538,-17757,27392,-17981,27244,-18205,27094,-18427,26943,-18648,26789,-18868,26634,-19087,26477,-19304,26318,-19520,26158,-19734,25995,-19948,25831,-20160,25665,-20370,25498,-20580,25329,-20788,25158,-20994,24985,-21199,24811,-21403,24635,-21605,24457,-21806,24278,-22005,24097,-22203,23915,-22400,23731,-22595,23545,-22788,23358,-22980,23169,-23170,22979,-23359,22787,-23546,22594,-23732,22399,-23916,22202,-24098,22004,-24279,21805,-24458,21604,-24636,21402,-24812,21198,-24986,20993,-25159,20787,-25330,20579,-25499,20369,-25666,20159,-25832,19947,-25996,19733,-26159,19519,-26319,19303,-26478,19086,-26635,18867,-26790,18647,-26944,18426,-27095,18204,-27245,17980,-27393,17756,-27539,17530,-27684,17303,-27826,17074,-27967,16845,-28106,16615,-28243,16383,-28378,16150,-28511,15917,-28642,15682,-28771,15446,-28898,15209,-29024,14971,-29147,14732,-29269,14492,-29388,14251,-29506,14009,-29622,13766,-29735,13523,-29847,13278,-29956,13033,-30064,12786,-30170,12539,-30273,12291,-30375,12042,-30474,11792,-30572,11542,-30667,11290,-30761,11038,-30852,10786,-30941,10532,-31029,10278,-31114,10023,-31197,9767,-31278,9511,-31357,9254,-31433,8997,-31508,8739,-31581,8480,-31651,8221,-31719,7961,-31786,7701,-31850,7440,-31912,7179,-31971,6917,-32029,6655,-32085,6392,-32138,6129,-32189,5865,-32238,5601,-32285,5337,-32330,5072,-32372,4807,-32413,4542,-32451,4276,-32487,4011,-32521,3744,-32553,3478,-32582,3211,-32610,2944,-32635,2677,-32658,2410,-32679,2143,-32697,1875,-32714,1607,-32728,1339,-32740,1072,-32750,804,-32758,536,-32763,268,-32766,0,-32767,-269,-32766,-537,-32763,-805,-32758,-1073,-32750,-1340,-32740,-1608,-32728,-1876,-32714,-2144,-32697,-2411,-32679,-2678,-32658,-2945,-32635,-3212,-32610,-3479,-32582,-3745,-32553,-4012,-32521,-4277,-32487,-4543,-32451,-4808,-32413,-5073,-32372,-5338,-32330,-5602,-32285,-5866,-32238,-6130,-32189,-6393,-32138,-6656,-32085,-6918,-32029,-7180,-31971,-7441,-31912,-7702,-31850,-7962,-31786,-8222,-31719,-8481,-31651,-8740,-31581,-8998,-31508,-9255,-31433,-9512,-31357,-9768,-31278,-10024,-31197,-10279,-31114,-10533,-31029,-10787,-30941,-11039,-30852,-11291,-30761,-11543,-30667,-11793,-30572,-12043,-30474,-12292,-30375,-12540,-30273,-12787,-30170,-13034,-30064,-13279,-29956,-13524,-29847,-13767,-29735,-14010,-29622,-14252,-29506,-14493,-29388,-14733,-29269,-14972,-29147,-15210,-29024,-15447,-28898,-15683,-28771,-15918,-28642,-16151,-28511,-16384,-28378,-16616,-28243,-16846,-28106,-17075,-27967,-17304,-27826,-17531,-27684,-17757,-27539,-17981,-27393,-18205,-27245,-18427,-27095,-18648,-26944,-18868,-26790,-19087,-26635,-19304,-26478,-19520,-26319,-19734,-26159,-19948,-25996,-20160,-25832,-20370,-25666,-20580,-25499,-20788,-25330,-20994,-25159,-21199,-24986,-21403,-24812,-21605,-24636,-21806,-24458,-22005,-24279,-22203,-24098,-22400,-23916,-22595,-23732,-22788,-23546,-22980,-23359,-23170,-23170,-23359,-22980,-23546,-22788,-23732,-22595,-23916,-22400,-24098,-22203,-24279,-22005,-24458,-21806,-24636,-21605,-24812,-21403,-24986,-21199,-25159,-20994,-25330,-20788,-25499,-20580,-25666,-20370,-25832,-20160,-25996,-19948,-26159,-19734,-26319,-19520,-26478,-19304,-26635,-19087,-26790,-18868,-26944,-18648,-27095,-18427,-27245,-18205,-27393,-17981,-27539,-17757,-27684,-17531,-27826,-17304,-27967,-17075,-28106,-16846,-28243,-16616,-28378,-16384,-28511,-16151,-28642,-15918,-28771,-15683,-28898,-15447,-29024,-15210,-29147,-14972,-29269,-14733,-29388,-14493,-29506,-14252,-29622,-14010,-29735,-13767,-29847,-13524,-29956,-13279,-30064,-13034,-30170,-12787,-30273,-12540,-30375,-12292,-30474,-12043,-30572,-11793,-30667,-11543,-30761,-11291,-30852,-11039,-30941,-10787,-31029,-10533,-31114,-10279,-31197,-10024,-31278,-9768,-31357,-9512,-31433,-9255,-31508,-8998,-31581,-8740,-31651,-8481,-31719,-8222,-31786,-7962,-31850,-7702,-31912,-7441,-31971,-7180,-32029,-6918,-32085,-6656,-32138,-6393,-32189,-6130,-32238,-5866,-32285,-5602,-32330,-5338,-32372,-5073,-32413,-4808,-32451,-4543,-32487,-4277,-32521,-4012,-32553,-3745,-32582,-3479,-32610,-3212,-32635,-2945,-32658,-2678,-32679,-2411,-32697,-2144,-32714,-1876,-32728,-1608,-32740,-1340,-32750,-1073,-32758,-805,-32763,-537,-32766,-269,-32767,-1,-32766,268,-32763,536,-32758,804,-32750,1072,-32740,1339,-32728,1607,-32714,1875,-32697,2143,-32679,2410,-32658,2677,-32635,2944,-32610,3211,-32582,3478,-32553,3744,-32521,4011,-32487,4276,-32451,4542,-32413,4807,-32372,5072,-32330,5337,-32285,5601,-32238,5865,-32189,6129,-32138,6392,-32085,6655,-32029,6917,-31971,7179,-31912,7440,-31850,7701,-31786,7961,-31719,8221,-31651,8480,-31581,8739,-31508,8997,-31433,9254,-31357,9511,-31278,9767,-31197,10023,-31114,10278,-31029,10532,-30941,10786,-30852,11038,-30761,11290,-30667,11542,-30572,11792,-30474,12042,-30375,12291,-30273,12539,-30170,12786,-30064,13033,-29956,13278,-29847,13523,-29735,13766,-29622,14009,-29506,14251,-29388,14492,-29269,14732,-29147,14971,-29024,15209,-28898,15446,-28771,15682,-28642,15917,-28511,16150,-28378,16383,-28243,16615,-28106,16845,-27967,17074,-27826,17303,-27684,17530,-27539,17756,-27393,17980,-27245,18204,-27095,18426,-26944,18647,-26790,18867,-26635,19086,-26478,19303,-26319,19519,-26159,19733,-25996,19947,-25832,20159,-25666,20369,-25499,20579,-25330,20787,-25159,20993,-24986,21198,-24812,21402,-24636,21604,-24458,21805,-24279,22004,-24098,22202,-23916,22399,-23732,22594,-23546,22787,-23359,22979,-23170,23169,-22980,23358,-22788,23545,-22595,23731,-22400,23915,-22203,24097,-22005,24278,-21806,24457,-21605,24635,-21403,24811,-21199,24985,-20994,25158,-20788,25329,-20580,25498,-20370,25665,-20160,25831,-19948,25995,-19734,26158,-19520,26318,-19304,26477,-19087,26634,-18868,26789,-18648,26943,-18427,27094,-18205,27244,-17981,27392,-17757,27538,-17531,27683,-17304,27825,-17075,27966,-16846,28105,-16616,28242};
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/* Twiddles generated with
twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:2047)/6144));
twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:4094)/6144));
twa2 = zeros(1,4096);
twb2 = zeros(1,4096);
twa2(1:2:end) = real(twa);
twa2(2:2:end) = imag(twa);
twb2(1:2:end) = real(twb);
twb2(2:2:end) = imag(twb);
*/
int16_t twa6144[4096] __attribute__((aligned(32))) = {32767,0,32766,-34,32766,-68,32766,-101,32766,-135,32766,-168,32766,-202,32766,-235,32765,-269,32765,-302,32765,-336,32764,-369,32764,-403,32764,-436,32763,-470,32763,-503,32762,-537,32762,-570,32761,-604,32760,-637,32760,-671,32759,-704,32758,-738,32757,-771,32757,-805,32756,-838,32755,-872,32754,-905,32753,-939,32752,-972,32751,-1006,32750,-1039,32749,-1073,32748,-1106,32747,-1140,32746,-1173,32744,-1207,32743,-1240,32742,-1274,32740,-1307,32739,-1340,32738,-1374,32736,-1407,32735,-1441,32733,-1474,32732,-1508,32730,-1541,32729,-1575,32727,-1608,32725,-1642,32724,-1675,32722,-1709,32720,-1742,32718,-1776,32717,-1809,32715,-1843,32713,-1876,32711,-1909,32709,-1943,32707,-1976,32705,-2010,32703,-2043,32701,-2077,32699,-2110,32696,-2144,32694,-2177,32692,-2210,32690,-2244,32687,-2277,32685,-2311,32683,-2344,32680,-2378,32678,-2411,32675,-2444,32673,-2478,32670,-2511,32668,-2545,32665,-2578,32662,-2611,32660,-2645,32657,-2678,32654,-2712,32651,-2745,32649,-2778,32646,-2812,32643,-2845,32640,-2879,32637,-2912,32634,-2945,32631,-2979,32628,-3012,32625,-3045,32622,-3079,32618,-3112,32615,-3146,32612,-3179,32609,-3212,32605,-3246,32602,-3279,32599,-3312,32595,-3346,32592,-3379,32588,-3412,32585,-3446,32581,-3479,32578,-3512,32574,-3546,32571,-3579,32567,-3612,32563,-3645,32559,-3679,32556,-3712,32552,-3745,32548,-3779,32544,-3812,32540,-3845,32536,-3878,32532,-3912,32528,-3945,32524,-3978,32520,-4012,32516,-4045,32512,-4078,32508,-4111,32503,-4145,32499,-4178,32495,-4211,32491,-4244,32486,-4277,32482,-4311,32477,-4344,32473,-4377,32468,-4410,32464,-4444,32459,-4477,32455,-4510,32450,-4543,32445,-4576,32441,-4609,32436,-4643,32431,-4676,32426,-4709,32422,-4742,32417,-4775,32412,-4808,32407,-4842,32402,-4875,32397,-4908,32392,-4941,32387,-4974,32382,-5007,32377,-5040,32371,-5073,32366,-5107,32361,-5140,32356,-5173,32350,-5206,32345,-5239,32340,-5272,32334,-5305,32329,-5338,32323,-5371,32318,-5404,32312,-5437,32307,-5470,32301,-5503,32295,-5536,32290,-5569,32284,-5602,32278,-5635,32273,-5668,32267,-5701,32261,-5734,32255,-5767,32249,-5800,32243,-5833,32237,-5866,32231,-5899,32225,-5932,32219,-5965,32213,-5998,32207,-6031,32201,-6064,32194,-6097,32188,-6130,32182,-6163,32176,-6196,32169,-6229,32163,-6262,32156,-6294,32150,-6327,32143,-6360,32137,-6393,32130,-6426,32124,-6459,32117,-6492,32110,-6524,32104,-6557,32097,-6590,32090,-6623,32084,-6656,32077,-6689,32070,-6721,32063,-6754,32056,-6787,32049,-6820,32042,-6852,32035,-6885,32028,-6918,32021,-6951,32014,-6983,32007,-7016,31999,-7049,31992,-7082,31985,-7114,31978,-7147,31970,-7180,31963,-7212,31956,-7245,31948,-7278,31941,-7311,31933,-7343,31926,-7376,31918,-7408,31911,-7441,31903,-7474,31895,-7506,31888,-7539,31880,-7572,31872,-7604,31864,-7637,31856,-7669,31849,-7702,31841,-7734,31833,-7767,31825,-7800,31817,-7832,31809,-7865,31801,-7897,31793,-7930,31785,-7962,31776,-7995,31768,-8027,31760,-8060,31752,-8092,31743,-8125,31735,-8157,31727,-8190,31718,-8222,31710,-8254,31701,-8287,31693,-8319,31684,-8352,31676,-8384,31667,-8416,31659,-8449,31650,-8481,31641,-8514,31633,-8546,31624,-8578,31615,-8611,31606,-8643,31597,-8675,31588,-8708,31580,-8740,31571,-8772,31562,-8804,31553,-8837,31544,-8869,31534,-8901,31525,-8933,31516,-8966,31507,-8998,31498,-9030,31489,-9062,31479,-9095,31470,-9127,31461,-9159,31451,-9191,31442,-9223,31432,-9255,31423,-9288,31413,-9320,31404,-9352,31394,-9384,31385,-9416,31375,-9448,31365,-9480,31356,-9512,31346,-9544,31336,-9576,31326,-9608,31316,-9640,31307,-9672,31297,-9704,31287,-9736,31277,-9768,31267,-9800,31257,-9832,31247,-9864,31236,-9896,31226,-9928,31216,-9960,31206,-9992,31196,-10024,31185,-10056,31175,-10088,31165,-10120,31154,-10152,31144,-10183,31134,-10215,31123,-10247,31113,-10279,31102,-10311,31092,-10343,31081,-10374,31070,-10406,31060,-10438,31049,-10470,31038,-10501,31028,-10533,31017,-10565,31006,-10597,30995,-10628,30984,-10660,30973,-10692,30962,-10723,30951,-10755,30940,-10787,30929,-10818,30918,-10850,30907,-10881,30896,-10913,30885,-10945,30874,-10976,30862,-11008,30851,-11039,30840,-11071,30828,-11102,30817,-11134,30806,-11165,30794,-11197,30783,-11228,30771,-11260,30760,-11291,30748,-11323,30737,-11354,30725,-11386,30713,-11417,30702,-11449,30690,-11480,30678,-11511,30666,-11543,30655,-11574,30643,-11605,30631,-11637,30619,-11668,30607,-11699,30595,-11731,30583,-11762,30571,-11793,30559,-11824,30547,-11856,30535,-11887,30522,-11918,30510,-11949,30498,-11981,30486,-12012,30473,-12043,30461,-12074,30449,-12105,30436,-12136,30424,-12167,30411,-12199,30399,-12230,30386,-12261,30374,-12292,30361,-12323,30349,-12354,30336,-12385,30323,-12416,30311,-12447,30298,-12478,30285,-12509,30272,-12540,30259,-12571,30247,-12602,30234,-12633,30221,-12664,30208,-12695,30195,-12725,30182,-12756,30169,-12787,30156,-12818,30142,-12849,30129,-12880,30116,-12910,30103,-12941,30090,-12972,30076,-13003,30063,-13034,30050,-13064,30036,-13095,30023,-13126,30009,-13156,29996,-13187,29983,-13218,29969,-13248,29955,-13279,29942,-13310,29928,-13340,29915,-13371,29901,-13401,29887,-13432,29873,-13463,29860,-13493,29846,-13524,29832,-13554,29818,-13585,29804,-13615,29790,-13646,29776,-13676,29762,-13707,29748,-13737,29734,-13767,29720,-13798,29706,-13828,29692,-13859,29678,-13889,29663,-13919,29649,-13950,29635,-13980,29621,-14010,29606,-14040,29592,-14071,29577,-14101,29563,-14131,29548,-14161,29534,-14192,29519,-14222,29505,-14252,29490,-14282,29476,-14312,29461,-14343,29446,-14373,29432,-14403,29417,-14433,29402,-14463,29387,-14493,29372,-14523,29358,-14553,29343,-14583,29328,-14613,29313,-14643,29298,-14673,29283,-14703,29268,-14733,29253,-14763,29238,-14793,29222,-14823,29207,-14853,29192,-14882,29177,-14912,29162,-14942,29146,-14972,29131,-15002,29116,-15031,29100,-15061,29085,-15091,29069,-15121,29054,-15150,29038,-15180,29023,-15210,29007,-15239,28992,-15269,28976,-15299,28960,-15328,28945,-15358,28929,-15388,28913,-15417,28897,-15447,28882,-15476,28866,-15506,28850,-15535,28834,-15565,28818,-15594,28802,-15624,28786,-15653,28770,-15683,28754,-15712,28738,-15741,28722,-15771,28706,-15800,28690,-15830,28673,-15859,28657,-15888,28641,-15918,28625,-15947,28608,-15976,28592,-16005,28575,-16035,28559,-16064,28543,-16093,28526,-16122,28510,-16151,28493,-16180,28477,-16210,28460,-16239,28443,-16268,28427,-16297,28410,-16326,28393,-16355,28377,-16384,28360,-16413,28343,-16442,28326,-16471,28309,-16500,28292,-16529,28275,-16558,28259,-16587,28242,-16616,28225,-16644,28208,-16673,28190,-16702,28173,-16731,28156,-16760,28139,-16789,28122,-16817,28105,-16846,28087,-16875,28070,-16904,28053,-16932,28036,-16961,28018,-16990,28001,-17018,27983,-17047,27966,-17075,27948,-17104,27931,-17133,27913,-17161,27896,-17190,27878,-17218,27861,-17247,27843,-17275,27825,-17304,27808,-17332,27790,-17361,27772,-17389,27754,-17417,27736,-17446,27719,-17474,27701,-17502,27683,-17531,27665,-17559,27647,-17587,27629,-17616,27611,-17644,27593,-17672,27575,-17700,27557,-17728,27538,-17757,27520,-17785,27502,-17813,27484,-17841,27466,-17869,27447,-17897,27429,-17925,27411,-17953,27392,-17981,27374,-18009,27355,-18037,27337,-18065,27319,-18093,27300,-18121,27281,-18149,27263,-18177,27244,-18205,27226,-18233,27207,-18261,27188,-18288,27170,-18316,27151,-18344,27132,-18372,27113,-18399,27094,-18427,27076,-18455,27057,-18483,27038,-18510,27019,-18538,27000,-18565,26981,-18593,26962,-18621,26943,-18648,26924,-18676,26905,-18703,26885,-18731,26866,-18758,26847,-18786,26828,-18813,26809,-18841,26789,-18868,26770,-18895,26751,-18923,26731,-18950,26712,-18977,26692,-19005,26673,-19032,26654,-19059,26634,-19087,26615,-19114,26595,-19141,26575,-19168,26556,-19195,26536,-19222,26516,-19250,26497,-19277,26477,-19304,26457,-19331,26437,-19358,26418,-19385,26398,-19412,26378,-19439,26358,-19466,26338,-19493,26318,-19520,26298,-19547,26278,-19574,26258,-19600,26238,-19627,26218,-19654,26198,-19681,26178,-19708,26158,-19734,26137,-19761,26117,-19788,26097,-19815,26077,-19841,26056,-19868,26036,-19895,26016,-19921,25995,-19948,25975,-19974,25954,-20001,25934,-20027,25913,-20054,25893,-20080,25872,-20107,25852,-20133,25831,-20160,25811,-20186,25790,-20213,25769,-20239,25749,-20265,25728,-20292,25707,-20318,25686,-20344,25665,-20370,25645,-20397,25624,-20423,25603,-20449,25582,-20475,25561,-20501,25540,-20528,25519,-20554,25498,-20580,25477,-20606,25456,-20632,25435,-20658,25414,-20684,25392,-20710,25371,-20736,25350,-20762,25329,-20788,25307,-20814,25286,-20839,25265,-20865,25243,-20891,25222,-20917,25201,-20943,25179,-20968,25158,-20994,25136,-21020,25115,-21046,25093,-21071,25072,-21097,25050,-21123,25029,-21148,25007,-21174,24985,-21199,24964,-21225,24942,-21250,24920,-21276,24898,-21301,24877,-21327,24855,-21352,24833,-21378,24811,-21403,24789,-21428,24767,-21454,24745,-21479,24723,-21504,24701,-21530,24679,-21555,24657,-21580,24635,-21605,24613,-21630,24591,-21656,24569,-21681,24546,-21706,24524,-21731,24502,-21756,24480,-21781,24457,-21806,24435,-21831,24413,-21856,24390,-21881,24368,-21906,24346,-21931,24323,-21956,24301,-21981,24278,-22005,24256,-22030,24233,-22055,24211,-22080,24188,-22105,24165,-22129,24143,-22154,24120,-22179,24097,-22203,24075,-22228,24052,-22253,24029,-22277,24006,-22302,23984,-22326,23961,-22351,23938,-22375,23915,-22400,23892,-22424,23869,-22449,23846,-22473,23823,-22497,23800,-22522,23777,-22546,23754,-22570,23731,-22595,23708,-22619,23685,-22643,23661,-22667,23638,-22692,23615,-22716,23592,-22740,23569,-22764,23545,-22788,23522,-22812,23499,-22836,23475,-22860,23452,-22884,23428,-22908,23405,-22932,23382,-22956,23358,-22980,23335,-23004,23311,-23028,23287,-23051,23264,-23075,23240,-23099,23217,-23123,23193,-23147,23169,-23170,23146,-23194,23122,-23218,23098,-23241,23074,-23265,23050,-23288,23027,-23312,23003,-23336,22979,-23359,22955,-23383,22931,-23406,22907,-23429,22883,-23453,22859,-23476,22835,-23500,22811,-23523,22787,-23546,22763,-23570,22739,-23593,22715,-23616,22691,-23639,22666,-23662,22642,-23686,22618,-23709,22594,-23732,22569,-23755,22545,-23778,22521,-23801,22496,-23824,22472,-23847,22448,-23870,22423,-23893,22399,-23916,22374,-23939,22350,-23962,22325,-23985,22301,-24007,22276,-24030,22252,-24053,22227,-24076,22202,-24098,22178,-24121,22153,-24144,22128,-24166,22104,-24189,22079,-24212,22054,-24234,22029,-24257,22004,-24279,21980,-24302,21955,-24324,21930,-24347,21905,-24369,21880,-24391,21855,-24414,21830,-24436,21805,-24458,21780,-24481,21755,-24503,21730,-24525,21705,-24547,21680,-24570,21655,-24592,21629,-24614,21604,-24636,21579,-24658,21554,-24680,21529,-24702,21503,-24724,21478,-24746,21453,-24768,21427,-24790,21402,-24812,21377,-24834,21351,-24856,21326,-24878,21300,-24899,21275,-24921,21249,-24943,21224,-24965,21198,-24986,21173,-25008,21147,-25030,21122,-25051,21096,-25073,21070,-25094,21045,-25116,21019,-25137,20993,-25159,20967,-25180,20942,-25202,20916,-25223,20890,-25244,20864,-25266,20838,-25287,20813,-25308,20787,-25330,20761,-25351,20735,-25372,20709,-25393,20683,-25415,20657,-25436,20631,-25457,20605,-25478,20579,-25499,20553,-25520,20527,-25541,20500,-25562,20474,-25583,20448,-25604,20422,-25625,20396,-25646,20369,-25666,20343,-25687,20317,-25708,20291,-25729,20264,-25750,20238,-25770,20212,-25791,20185,-25812,20159,-25832,20132,-25853,20106,-25873,20079,-25894,20053,-25914,20026,-25935,20000,-25955,19973,-25976,19947,-25996,19920,-26017,19894,-26037,19867,-26057,19840,-26078,19814,-26098,19787,-26118,19760,-26138,19733,-26159,19707,-26179,19680,-26199,19653,-26219,19626,-26239,19599,-26259,19573,-26279,19546,-26299,19519,-26319,19492,-26339,19465,-26359,19438,-26379,19411,-26399,19384,-26419,19357,-26438,19330,-26458,19303,-26478,19276,-26498,19249,-26517,19221,-26537,19194,-26557,19167,-26576,19140,-26596,19113,-26616,19086,-26635,19058,-26655,19031,-26674,19004,-26693,18976,-26713,18949,-26732,18922,-26752,18894,-26771,18867,-26790,18840,-26810,18812,-26829,18785,-26848,18757,-26867,18730,-26886,18702,-26906,18675,-26925,18647,-26944,18620,-26963,18592,-26982,18564,-27001,18537,-27020,18509,-27039,18482,-27058,18454,-27077,18426,-27095,18398,-27114,18371,-27133,18343,-27152,18315,-27171,18287,-27189,18260,-27208,18232,-27227,18204,-27245,18176,-27264,18148,-27282,18120,-27301,18092,-27320,18064,-27338,18036,-27356,18008,-27375,17980,-27393,17952,-27412,17924,-27430,17896,-27448,17868,-27467,17840,-27485,17812,-27503,17784,-27521,17756,-27539,17727,-27558,17699,-27576,17671,-27594,17643,-27612,17615,-27630,17586,-27648,17558,-27666,17530,-27684,17501,-27702,17473,-27720,17445,-27737,17416,-27755,17388,-27773,17360,-27791,17331,-27809,17303,-27826,17274,-27844,17246,-27862,17217,-27879,17189,-27897,17160,-27914,17132,-27932,17103,-27949,17074,-27967,17046,-27984,17017,-28002,16989,-28019,16960,-28037,16931,-28054,16903,-28071,16874,-28088,16845,-28106,16816,-28123,16788,-28140,16759,-28157,16730,-28174,16701,-28191,16672,-28209,16643,-28226,16615,-28243,16586,-28260,16557,-28276,16528,-28293,16499,-28310,16470,-28327,16441,-28344,16412,-28361,16383,-28378,16354,-28394,16325,-28411,16296,-28428,16267,-28444,16238,-28461,16209,-28478,16179,-28494,16150,-28511,16121,-28527,16092,-28544,16063,-28560,16034,-28576,16004,-28593,15975,-28609,15946,-28626,15917,-28642,15887,-28658,15858,-28674,15829,-28691,15799,-28707,15770,-28723,15740,-28739,15711,-28755,15682,-28771,15652,-28787,15623,-28803,15593,-28819,15564,-28835,15534,-28851,15505,-28867,15475,-28883,15446,-28898,15416,-28914,15387,-28930,15357,-28946,15327,-28961,15298,-28977,15268,-28993,15238,-29008,15209,-29024,15179,-29039,15149,-29055,15120,-29070,15090,-29086,15060,-29101,15030,-29117,15001,-29132,14971,-29147,14941,-29163,14911,-29178,14881,-29193,14852,-29208,14822,-29223,14792,-29239,14762,-29254,14732,-29269,14702,-29284,14672,-29299,14642,-29314,14612,-29329,14582,-29344,14552,-29359,14522,-29373,14492,-29388,14462,-29403,14432,-29418,14402,-29433,14372,-29447,14342,-29462,14311,-29477,14281,-29491,14251,-29506,14221,-29520,14191,-29535,14160,-29549,14130,-29564,14100,-29578,14070,-29593,14039,-29607,14009,-29622,13979,-29636,13949,-29650,13918,-29664,13888,-29679,13858,-29693,13827,-29707,13797,-29721,13766,-29735,13736,-29749,13706,-29763,13675,-29777,13645,-29791,13614,-29805,13584,-29819,13553,-29833,13523,-29847,13492,-29861,13462,-29874,13431,-29888,13400,-29902,13370,-29916,13339,-29929,13309,-29943,13278,-29956,13247,-29970,13217,-29984,13186,-29997,13155,-30010,13125,-30024,13094,-30037,13063,-30051,13033,-30064,13002,-30077,12971,-30091,12940,-30104,12909,-30117,12879,-30130,12848,-30143,12817,-30157,12786,-30170,12755,-30183,12724,-30196,12694,-30209,12663,-30222,12632,-30235,12601,-30248,12570,-30260,12539,-30273,12508,-30286,12477,-30299,12446,-30312,12415,-30324,12384,-30337,12353,-30350,12322,-30362,12291,-30375,12260,-30387,12229,-30400,12198,-30412,12166,-30425,12135,-30437,12104,-30450,12073,-30462,12042,-30474,12011,-30487,11980,-30499,11948,-30511,11917,-30523,11886,-30536,11855,-30548,11823,-30560,11792,-30572,11761,-30584,11730,-30596,11698,-30608,11667,-30620,11636,-30632,11604,-30644,11573,-30656,11542,-30667,11510,-30679,11479,-30691,11448,-30703,11416,-30714,11385,-30726,11353,-30738,11322,-30749,11290,-30761,11259,-30772,11227,-30784,11196,-30795,11164,-30807,11133,-30818,11101,-30829,11070,-30841,11038,-30852,11007,-30863,10975,-30875,10944,-30886,10912,-30897,10880,-30908,10849,-30919,10817,-30930,10786,-30941,10754,-30952,10722,-30963,10691,-30974,10659,-30985,10627,-30996,10596,-31007,10564,-31018,10532,-31029,10500,-31039,10469,-31050,10437,-31061,10405,-31071,10373,-31082,10342,-31093,10310,-31103,10278,-31114,10246,-31124,10214,-31135,10182,-31145,10151,-31155,10119,-31166,10087,-31176,10055,-31186,10023,-31197,9991,-31207,9959,-31217,9927,-31227,9895,-31237,9863,-31248,9831,-31258,9799,-31268,9767,-31278,9735,-31288,9703,-31298,9671,-31308,9639,-31317,9607,-31327,9575,-31337,9543,-31347,9511,-31357,9479,-31366,9447,-31376,9415,-31386,9383,-31395,9351,-31405,9319,-31414,9287,-31424,9254,-31433,9222,-31443,9190,-31452,9158,-31462,9126,-31471,9094,-31480,9061,-31490,9029,-31499,8997,-31508,8965,-31517,8932,-31526,8900,-31535,8868,-31545,8836,-31554,8803,-31563,8771,-31572,8739,-31581,8707,-31589,8674,-31598,8642,-31607,8610,-31616,8577,-31625,8545,-31634,8513,-31642,8480,-31651,8448,-31660,8415,-31668,8383,-31677,8351,-31685,8318,-31694,8286,-31702,8253,-31711,8221,-31719,8189,-31728,8156,-31736,8124,-31744,8091,-31753,8059,-31761,8026,-31769,7994,-31777,7961,-31786,7929,-31794,7896,-31802,7864,-31810,7831,-31818,7799,-31826,7766,-31834,7733,-31842,7701,-31850,7668,-31857,7636,-31865,7603,-31873,7571,-31881,7538,-31889,7505,-31896,7473,-31904,7440,-31912,7407,-31919,7375,-31927,7342,-31934,7310,-31942,7277,-31949,7244,-31957,7211,-31964,7179,-31971,7146,-31979,7113,-31986,7081,-31993,7048,-32000,7015,-32008,6982,-32015,6950,-32022,6917,-32029,6884,-32036,6851,-32043,6819,-32050,6786,-32057,6753,-32064,6720,-32071,6688,-32078,6655,-32085,6622,-32091,6589,-32098,6556,-32105,6523,-32111,6491,-32118,6458,-32125,6425,-32131,6392,-32138,6359,-32144,6326,-32151,6293,-32157,6261,-32164,6228,-32170,6195,-32177,6162,-32183,6129,-32189,6096,-32195,6063,-32202,6030,-32208,5997,-32214,5964,-32220,5931,-32226,5898,-32232,5865,-32238,5832,-32244,5799,-32250,5766,-32256,5733,-32262,5700,-32268,5667,-32274,5634,-32279,5601,-32285,5568,-32291,5535,-32296,5502,-32302,5469,-32308,5436,-32313,5403,-32319,5370,-32324,5337,-32330,5304,-32335,5271,-32341,5238,-32346,5205,-32351,5172,-32357,5139,-32362,5106,-32367,5072,-32372,5039,-32378,5006,-32383,4973,-32388,4940,-32393,4907,-32398,4874,-32403,4841,-32408,4807,-32413,4774,-32418,4741,-32423,4708,-32427,4675,-32432,4642,-32437,4608,-32442,4575,-32446,4542,-32451,4509,-32456,4476,-32460,4443,-32465,4409,-32469,4376,-32474,4343,-32478,4310,-32483,4276,-32487,4243,-32492,4210,-32496,4177,-32500,4144,-32504,4110,-32509,4077,-32513,4044,-32517,4011,-32521,3977,-32525,3944,-32529,3911,-32533,3877,-32537,3844,-32541,3811,-32545,3778,-32549,3744,-32553,3711,-32557,3678,-32560,3644,-32564,3611,-32568,3578,-32572,3545,-32575,3511,-32579,3478,-32582,3445,-32586,3411,-32589,3378,-32593,3345,-32596,3311,-32600,3278,-32603,3245,-32606,3211,-32610,3178,-32613,3145,-32616,3111,-32619,3078,-32623,3044,-32626,3011,-32629,2978,-32632,2944,-32635,2911,-32638,2878,-32641,2844,-32644,2811,-32647,2777,-32650,2744,-32652,2711,-32655,2677,-32658,2644,-32661,2610,-32663,2577,-32666,2544,-32669,2510,-32671,2477,-32674,2443,-32676,2410,-32679,2377,-32681,2343,-32684,2310,-32686,2276,-32688,2243,-32691,2209,-32693,2176,-32695,2143,-32697,2109,-32700,2076,-32702,2042,-32704,2009,-32706,1975,-32708,1942,-32710,1908,-32712,1875,-32714,1842,-32716,1808,-32718,1775,-32719,1741,-32721,1708,-32723,1674,-32725,1641,-32726,1607,-32728,1574,-32730,1540,-32731,1507,-32733,1473,-32734,1440,-32736,1406,-32737,1373,-32739,1339,-32740,1306,-32741,1273,-32743,1239,-32744,1206,-32745,1172,-32747,1139,-32748,1105,-32749,1072,-32750,1038,-32751,1005,-32752,971,-32753,938,-32754,904,-32755,871,-32756,837,-32757,804,-32758,770,-32758,737,-32759,703,-32760,670,-32761,636,-32761,603,-32762,569,-32763,536,-32763,502,-32764,469,-32764,435,-32765,402,-32765,368,-32765,335,-32766,301,-32766,268,-32766,234,-32767,201,-32767,167,-32767,134,-32767,100,-32767,67,-32767,33,-32767,0,-32767,-34,-32767,-68,-32767,-101,-32767,-135,-32767,-168,-32767,-202,-32767,-235,-32767,-269,-32766,-302,-32766,-336,-32766,-369,-32765,-403,-32765,-436,-32765,-470,-32764,-503,-32764,-537,-32763,-570,-32763,-604,-32762,-637,-32761,-671,-32761,-704,-32760,-738,-32759,-771,-32758,-805,-32758,-838,-32757,-872,-32756,-905,-32755,-939,-32754,-972,-32753,-1006,-32752,-1039,-32751,-1073,-32750,-1106,-32749,-1140,-32748,-1173,-32747,-1207,-32745,-1240,-32744,-1274,-32743,-1307,-32741,-1340,-32740,-1374,-32739,-1407,-32737,-1441,-32736,-1474,-32734,-1508,-32733,-1541,-32731,-1575,-32730,-1608,-32728,-1642,-32726,-1675,-32725,-1709,-32723,-1742,-32721,-1776,-32719,-1809,-32718,-1843,-32716,-1876,-32714,-1909,-32712,-1943,-32710,-1976,-32708,-2010,-32706,-2043,-32704,-2077,-32702,-2110,-32700,-2144,-32697,-2177,-32695,-2210,-32693,-2244,-32691,-2277,-32688,-2311,-32686,-2344,-32684,-2378,-32681,-2411,-32679,-2444,-32676,-2478,-32674,-2511,-32671,-2545,-32669,-2578,-32666,-2611,-32663,-2645,-32661,-2678,-32658,-2712,-32655,-2745,-32652,-2778,-32650,-2812,-32647,-2845,-32644,-2879,-32641,-2912,-32638,-2945,-32635,-2979,-32632,-3012,-32629,-3045,-32626,-3079,-32623,-3112,-32619,-3146,-32616,-3179,-32613,-3212,-32610,-3246,-32606,-3279,-32603,-3312,-32600,-3346,-32596,-3379,-32593,-3412,-32589,-3446,-32586,-3479,-32582,-3512,-32579,-3546,-32575,-3579,-32572,-3612,-32568,-3645,-32564,-3679,-32560,-3712,-32557,-3745,-32553,-3779,-32549,-3812,-32545,-3845,-32541,-3878,-32537,-3912,-32533,-3945,-32529,-3978,-32525,-4012,-32521,-4045,-32517,-4078,-32513,-4111,-32509,-4145,-32504,-4178,-32500,-4211,-32496,-4244,-32492,-4277,-32487,-4311,-32483,-4344,-32478,-4377,-32474,-4410,-32469,-4444,-32465,-4477,-32460,-4510,-32456,-4543,-32451,-4576,-32446,-4609,-32442,-4643,-32437,-4676,-32432,-4709,-32427,-4742,-32423,-4775,-32418,-4808,-32413,-4842,-32408,-4875,-32403,-4908,-32398,-4941,-32393,-4974,-32388,-5007,-32383,-5040,-32378,-5073,-32372,-5107,-32367,-5140,-32362,-5173,-32357,-5206,-32351,-5239,-32346,-5272,-32341,-5305,-32335,-5338,-32330,-5371,-32324,-5404,-32319,-5437,-32313,-5470,-32308,-5503,-32302,-5536,-32296,-5569,-32291,-5602,-32285,-5635,-32279,-5668,-32274,-5701,-32268,-5734,-32262,-5767,-32256,-5800,-32250,-5833,-32244,-5866,-32238,-5899,-32232,-5932,-32226,-5965,-32220,-5998,-32214,-6031,-32208,-6064,-32202,-6097,-32195,-6130,-32189,-6163,-32183,-6196,-32177,-6229,-32170,-6262,-32164,-6294,-32157,-6327,-32151,-6360,-32144,-6393,-32138,-6426,-32131,-6459,-32125,-6492,-32118,-6524,-32111,-6557,-32105,-6590,-32098,-6623,-32091,-6656,-32085,-6689,-32078,-6721,-32071,-6754,-32064,-6787,-32057,-6820,-32050,-6852,-32043,-6885,-32036,-6918,-32029,-6951,-32022,-6983,-32015,-7016,-32008,-7049,-32000,-7082,-31993,-7114,-31986,-7147,-31979,-7180,-31971,-7212,-31964,-7245,-31957,-7278,-31949,-7311,-31942,-7343,-31934,-7376,-31927,-7408,-31919,-7441,-31912,-7474,-31904,-7506,-31896,-7539,-31889,-7572,-31881,-7604,-31873,-7637,-31865,-7669,-31857,-7702,-31850,-7734,-31842,-7767,-31834,-7800,-31826,-7832,-31818,-7865,-31810,-7897,-31802,-7930,-31794,-7962,-31786,-7995,-31777,-8027,-31769,-8060,-31761,-8092,-31753,-8125,-31744,-8157,-31736,-8190,-31728,-8222,-31719,-8254,-31711,-8287,-31702,-8319,-31694,-8352,-31685,-8384,-31677,-8416,-31668,-8449,-31660,-8481,-31651,-8514,-31642,-8546,-31634,-8578,-31625,-8611,-31616,-8643,-31607,-8675,-31598,-8708,-31589,-8740,-31581,-8772,-31572,-8804,-31563,-8837,-31554,-8869,-31545,-8901,-31535,-8933,-31526,-8966,-31517,-8998,-31508,-9030,-31499,-9062,-31490,-9095,-31480,-9127,-31471,-9159,-31462,-9191,-31452,-9223,-31443,-9255,-31433,-9288,-31424,-9320,-31414,-9352,-31405,-9384,-31395,-9416,-31386,-9448,-31376,-9480,-31366,-9512,-31357,-9544,-31347,-9576,-31337,-9608,-31327,-9640,-31317,-9672,-31308,-9704,-31298,-9736,-31288,-9768,-31278,-9800,-31268,-9832,-31258,-9864,-31248,-9896,-31237,-9928,-31227,-9960,-31217,-9992,-31207,-10024,-31197,-10056,-31186,-10088,-31176,-10120,-31166,-10152,-31155,-10183,-31145,-10215,-31135,-10247,-31124,-10279,-31114,-10311,-31103,-10343,-31093,-10374,-31082,-10406,-31071,-10438,-31061,-10470,-31050,-10501,-31039,-10533,-31029,-10565,-31018,-10597,-31007,-10628,-30996,-10660,-30985,-10692,-30974,-10723,-30963,-10755,-30952,-10787,-30941,-10818,-30930,-10850,-30919,-10881,-30908,-10913,-30897,-10945,-30886,-10976,-30875,-11008,-30863,-11039,-30852,-11071,-30841,-11102,-30829,-11134,-30818,-11165,-30807,-11197,-30795,-11228,-30784,-11260,-30772,-11291,-30761,-11323,-30749,-11354,-30738,-11386,-30726,-11417,-30714,-11449,-30703,-11480,-30691,-11511,-30679,-11543,-30667,-11574,-30656,-11605,-30644,-11637,-30632,-11668,-30620,-11699,-30608,-11731,-30596,-11762,-30584,-11793,-30572,-11824,-30560,-11856,-30548,-11887,-30536,-11918,-30523,-11949,-30511,-11981,-30499,-12012,-30487,-12043,-30474,-12074,-30462,-12105,-30450,-12136,-30437,-12167,-30425,-12199,-30412,-12230,-30400,-12261,-30387,-12292,-30375,-12323,-30362,-12354,-30350,-12385,-30337,-12416,-30324,-12447,-30312,-12478,-30299,-12509,-30286,-12540,-30273,-12571,-30260,-12602,-30248,-12633,-30235,-12664,-30222,-12695,-30209,-12725,-30196,-12756,-30183,-12787,-30170,-12818,-30157,-12849,-30143,-12880,-30130,-12910,-30117,-12941,-30104,-12972,-30091,-13003,-30077,-13034,-30064,-13064,-30051,-13095,-30037,-13126,-30024,-13156,-30010,-13187,-29997,-13218,-29984,-13248,-29970,-13279,-29956,-13310,-29943,-13340,-29929,-13371,-29916,-13401,-29902,-13432,-29888,-13463,-29874,-13493,-29861,-13524,-29847,-13554,-29833,-13585,-29819,-13615,-29805,-13646,-29791,-13676,-29777,-13707,-29763,-13737,-29749,-13767,-29735,-13798,-29721,-13828,-29707,-13859,-29693,-13889,-29679,-13919,-29664,-13950,-29650,-13980,-29636,-14010,-29622,-14040,-29607,-14071,-29593,-14101,-29578,-14131,-29564,-14161,-29549,-14192,-29535,-14222,-29520,-14252,-29506,-14282,-29491,-14312,-29477,-14343,-29462,-14373,-29447,-14403,-29433,-14433,-29418,-14463,-29403,-14493,-29388,-14523,-29373,-14553,-29359,-14583,-29344,-14613,-29329,-14643,-29314,-14673,-29299,-14703,-29284,-14733,-29269,-14763,-29254,-14793,-29239,-14823,-29223,-14853,-29208,-14882,-29193,-14912,-29178,-14942,-29163,-14972,-29147,-15002,-29132,-15031,-29117,-15061,-29101,-15091,-29086,-15121,-29070,-15150,-29055,-15180,-29039,-15210,-29024,-15239,-29008,-15269,-28993,-15299,-28977,-15328,-28961,-15358,-28946,-15388,-28930,-15417,-28914,-15447,-28898,-15476,-28883,-15506,-28867,-15535,-28851,-15565,-28835,-15594,-28819,-15624,-28803,-15653,-28787,-15683,-28771,-15712,-28755,-15741,-28739,-15771,-28723,-15800,-28707,-15830,-28691,-15859,-28674,-15888,-28658,-15918,-28642,-15947,-28626,-15976,-28609,-16005,-28593,-16035,-28576,-16064,-28560,-16093,-28544,-16122,-28527,-16151,-28511,-16180,-28494,-16210,-28478,-16239,-28461,-16268,-28444,-16297,-28428,-16326,-28411,-16355,-28394};
int16_t twb6144[4096] __attribute__((aligned(32))) = {32767,0,32766,-68,32766,-135,32766,-202,32765,-269,32765,-336,32764,-403,32763,-470,32762,-537,32761,-604,32760,-671,32758,-738,32757,-805,32755,-872,32753,-939,32751,-1006,32749,-1073,32747,-1140,32744,-1207,32742,-1274,32739,-1340,32736,-1407,32733,-1474,32730,-1541,32727,-1608,32724,-1675,32720,-1742,32717,-1809,32713,-1876,32709,-1943,32705,-2010,32701,-2077,32696,-2144,32692,-2210,32687,-2277,32683,-2344,32678,-2411,32673,-2478,32668,-2545,32662,-2611,32657,-2678,32651,-2745,32646,-2812,32640,-2879,32634,-2945,32628,-3012,32622,-3079,32615,-3146,32609,-3212,32602,-3279,32595,-3346,32588,-3412,32581,-3479,32574,-3546,32567,-3612,32559,-3679,32552,-3745,32544,-3812,32536,-3878,32528,-3945,32520,-4012,32512,-4078,32503,-4145,32495,-4211,32486,-4277,32477,-4344,32468,-4410,32459,-4477,32450,-4543,32441,-4609,32431,-4676,32422,-4742,32412,-4808,32402,-4875,32392,-4941,32382,-5007,32371,-5073,32361,-5140,32350,-5206,32340,-5272,32329,-5338,32318,-5404,32307,-5470,32295,-5536,32284,-5602,32273,-5668,32261,-5734,32249,-5800,32237,-5866,32225,-5932,32213,-5998,32201,-6064,32188,-6130,32176,-6196,32163,-6262,32150,-6327,32137,-6393,32124,-6459,32110,-6524,32097,-6590,32084,-6656,32070,-6721,32056,-6787,32042,-6852,32028,-6918,32014,-6983,31999,-7049,31985,-7114,31970,-7180,31956,-7245,31941,-7311,31926,-7376,31911,-7441,31895,-7506,31880,-7572,31864,-7637,31849,-7702,31833,-7767,31817,-7832,31801,-7897,31785,-7962,31768,-8027,31752,-8092,31735,-8157,31718,-8222,31701,-8287,31684,-8352,31667,-8416,31650,-8481,31633,-8546,31615,-8611,31597,-8675,31580,-8740,31562,-8804,31544,-8869,31525,-8933,31507,-8998,31489,-9062,31470,-9127,31451,-9191,31432,-9255,31413,-9320,31394,-9384,31375,-9448,31356,-9512,31336,-9576,31316,-9640,31297,-9704,31277,-9768,31257,-9832,31236,-9896,31216,-9960,31196,-10024,31175,-10088,31154,-10152,31134,-10215,31113,-10279,31092,-10343,31070,-10406,31049,-10470,31028,-10533,31006,-10597,30984,-10660,30962,-10723,30940,-10787,30918,-10850,30896,-10913,30874,-10976,30851,-11039,30828,-11102,30806,-11165,30783,-11228,30760,-11291,30737,-11354,30713,-11417,30690,-11480,30666,-11543,30643,-11605,30619,-11668,30595,-11731,30571,-11793,30547,-11856,30522,-11918,30498,-11981,30473,-12043,30449,-12105,30424,-12167,30399,-12230,30374,-12292,30349,-12354,30323,-12416,30298,-12478,30272,-12540,30247,-12602,30221,-12664,30195,-12725,30169,-12787,30142,-12849,30116,-12910,30090,-12972,30063,-13034,30036,-13095,30009,-13156,29983,-13218,29955,-13279,29928,-13340,29901,-13401,29873,-13463,29846,-13524,29818,-13585,29790,-13646,29762,-13707,29734,-13767,29706,-13828,29678,-13889,29649,-13950,29621,-14010,29592,-14071,29563,-14131,29534,-14192,29505,-14252,29476,-14312,29446,-14373,29417,-14433,29387,-14493,29358,-14553,29328,-14613,29298,-14673,29268,-14733,29238,-14793,29207,-14853,29177,-14912,29146,-14972,29116,-15031,29085,-15091,29054,-15150,29023,-15210,28992,-15269,28960,-15328,28929,-15388,28897,-15447,28866,-15506,28834,-15565,28802,-15624,28770,-15683,28738,-15741,28706,-15800,28673,-15859,28641,-15918,28608,-15976,28575,-16035,28543,-16093,28510,-16151,28477,-16210,28443,-16268,28410,-16326,28377,-16384,28343,-16442,28309,-16500,28275,-16558,28242,-16616,28208,-16673,28173,-16731,28139,-16789,28105,-16846,28070,-16904,28036,-16961,28001,-17018,27966,-17075,27931,-17133,27896,-17190,27861,-17247,27825,-17304,27790,-17361,27754,-17417,27719,-17474,27683,-17531,27647,-17587,27611,-17644,27575,-17700,27538,-17757,27502,-17813,27466,-17869,27429,-17925,27392,-17981,27355,-18037,27319,-18093,27281,-18149,27244,-18205,27207,-18261,27170,-18316,27132,-18372,27094,-18427,27057,-18483,27019,-18538,26981,-18593,26943,-18648,26905,-18703,26866,-18758,26828,-18813,26789,-18868,26751,-18923,26712,-18977,26673,-19032,26634,-19087,26595,-19141,26556,-19195,26516,-19250,26477,-19304,26437,-19358,26398,-19412,26358,-19466,26318,-19520,26278,-19574,26238,-19627,26198,-19681,26158,-19734,26117,-19788,26077,-19841,26036,-19895,25995,-19948,25954,-20001,25913,-20054,25872,-20107,25831,-20160,25790,-20213,25749,-20265,25707,-20318,25665,-20370,25624,-20423,25582,-20475,25540,-20528,25498,-20580,25456,-20632,25414,-20684,25371,-20736,25329,-20788,25286,-20839,25243,-20891,25201,-20943,25158,-20994,25115,-21046,25072,-21097,25029,-21148,24985,-21199,24942,-21250,24898,-21301,24855,-21352,24811,-21403,24767,-21454,24723,-21504,24679,-21555,24635,-21605,24591,-21656,24546,-21706,24502,-21756,24457,-21806,24413,-21856,24368,-21906,24323,-21956,24278,-22005,24233,-22055,24188,-22105,24143,-22154,24097,-22203,24052,-22253,24006,-22302,23961,-22351,23915,-22400,23869,-22449,23823,-22497,23777,-22546,23731,-22595,23685,-22643,23638,-22692,23592,-22740,23545,-22788,23499,-22836,23452,-22884,23405,-22932,23358,-22980,23311,-23028,23264,-23075,23217,-23123,23169,-23170,23122,-23218,23074,-23265,23027,-23312,22979,-23359,22931,-23406,22883,-23453,22835,-23500,22787,-23546,22739,-23593,22691,-23639,22642,-23686,22594,-23732,22545,-23778,22496,-23824,22448,-23870,22399,-23916,22350,-23962,22301,-24007,22252,-24053,22202,-24098,22153,-24144,22104,-24189,22054,-24234,22004,-24279,21955,-24324,21905,-24369,21855,-24414,21805,-24458,21755,-24503,21705,-24547,21655,-24592,21604,-24636,21554,-24680,21503,-24724,21453,-24768,21402,-24812,21351,-24856,21300,-24899,21249,-24943,21198,-24986,21147,-25030,21096,-25073,21045,-25116,20993,-25159,20942,-25202,20890,-25244,20838,-25287,20787,-25330,20735,-25372,20683,-25415,20631,-25457,20579,-25499,20527,-25541,20474,-25583,20422,-25625,20369,-25666,20317,-25708,20264,-25750,20212,-25791,20159,-25832,20106,-25873,20053,-25914,20000,-25955,19947,-25996,19894,-26037,19840,-26078,19787,-26118,19733,-26159,19680,-26199,19626,-26239,19573,-26279,19519,-26319,19465,-26359,19411,-26399,19357,-26438,19303,-26478,19249,-26517,19194,-26557,19140,-26596,19086,-26635,19031,-26674,18976,-26713,18922,-26752,18867,-26790,18812,-26829,18757,-26867,18702,-26906,18647,-26944,18592,-26982,18537,-27020,18482,-27058,18426,-27095,18371,-27133,18315,-27171,18260,-27208,18204,-27245,18148,-27282,18092,-27320,18036,-27356,17980,-27393,17924,-27430,17868,-27467,17812,-27503,17756,-27539,17699,-27576,17643,-27612,17586,-27648,17530,-27684,17473,-27720,17416,-27755,17360,-27791,17303,-27826,17246,-27862,17189,-27897,17132,-27932,17074,-27967,17017,-28002,16960,-28037,16903,-28071,16845,-28106,16788,-28140,16730,-28174,16672,-28209,16615,-28243,16557,-28276,16499,-28310,16441,-28344,16383,-28378,16325,-28411,16267,-28444,16209,-28478,16150,-28511,16092,-28544,16034,-28576,15975,-28609,15917,-28642,15858,-28674,15799,-28707,15740,-28739,15682,-28771,15623,-28803,15564,-28835,15505,-28867,15446,-28898,15387,-28930,15327,-28961,15268,-28993,15209,-29024,15149,-29055,15090,-29086,15030,-29117,14971,-29147,14911,-29178,14852,-29208,14792,-29239,14732,-29269,14672,-29299,14612,-29329,14552,-29359,14492,-29388,14432,-29418,14372,-29447,14311,-29477,14251,-29506,14191,-29535,14130,-29564,14070,-29593,14009,-29622,13949,-29650,13888,-29679,13827,-29707,13766,-29735,13706,-29763,13645,-29791,13584,-29819,13523,-29847,13462,-29874,13400,-29902,13339,-29929,13278,-29956,13217,-29984,13155,-30010,13094,-30037,13033,-30064,12971,-30091,12909,-30117,12848,-30143,12786,-30170,12724,-30196,12663,-30222,12601,-30248,12539,-30273,12477,-30299,12415,-30324,12353,-30350,12291,-30375,12229,-30400,12166,-30425,12104,-30450,12042,-30474,11980,-30499,11917,-30523,11855,-30548,11792,-30572,11730,-30596,11667,-30620,11604,-30644,11542,-30667,11479,-30691,11416,-30714,11353,-30738,11290,-30761,11227,-30784,11164,-30807,11101,-30829,11038,-30852,10975,-30875,10912,-30897,10849,-30919,10786,-30941,10722,-30963,10659,-30985,10596,-31007,10532,-31029,10469,-31050,10405,-31071,10342,-31093,10278,-31114,10214,-31135,10151,-31155,10087,-31176,10023,-31197,9959,-31217,9895,-31237,9831,-31258,9767,-31278,9703,-31298,9639,-31317,9575,-31337,9511,-31357,9447,-31376,9383,-31395,9319,-31414,9254,-31433,9190,-31452,9126,-31471,9061,-31490,8997,-31508,8932,-31526,8868,-31545,8803,-31563,8739,-31581,8674,-31598,8610,-31616,8545,-31634,8480,-31651,8415,-31668,8351,-31685,8286,-31702,8221,-31719,8156,-31736,8091,-31753,8026,-31769,7961,-31786,7896,-31802,7831,-31818,7766,-31834,7701,-31850,7636,-31865,7571,-31881,7505,-31896,7440,-31912,7375,-31927,7310,-31942,7244,-31957,7179,-31971,7113,-31986,7048,-32000,6982,-32015,6917,-32029,6851,-32043,6786,-32057,6720,-32071,6655,-32085,6589,-32098,6523,-32111,6458,-32125,6392,-32138,6326,-32151,6261,-32164,6195,-32177,6129,-32189,6063,-32202,5997,-32214,5931,-32226,5865,-32238,5799,-32250,5733,-32262,5667,-32274,5601,-32285,5535,-32296,5469,-32308,5403,-32319,5337,-32330,5271,-32341,5205,-32351,5139,-32362,5072,-32372,5006,-32383,4940,-32393,4874,-32403,4807,-32413,4741,-32423,4675,-32432,4608,-32442,4542,-32451,4476,-32460,4409,-32469,4343,-32478,4276,-32487,4210,-32496,4144,-32504,4077,-32513,4011,-32521,3944,-32529,3877,-32537,3811,-32545,3744,-32553,3678,-32560,3611,-32568,3545,-32575,3478,-32582,3411,-32589,3345,-32596,3278,-32603,3211,-32610,3145,-32616,3078,-32623,3011,-32629,2944,-32635,2878,-32641,2811,-32647,2744,-32652,2677,-32658,2610,-32663,2544,-32669,2477,-32674,2410,-32679,2343,-32684,2276,-32688,2209,-32693,2143,-32697,2076,-32702,2009,-32706,1942,-32710,1875,-32714,1808,-32718,1741,-32721,1674,-32725,1607,-32728,1540,-32731,1473,-32734,1406,-32737,1339,-32740,1273,-32743,1206,-32745,1139,-32748,1072,-32750,1005,-32752,938,-32754,871,-32756,804,-32758,737,-32759,670,-32761,603,-32762,536,-32763,469,-32764,402,-32765,335,-32766,268,-32766,201,-32767,134,-32767,67,-32767,0,-32767,-68,-32767,-135,-32767,-202,-32767,-269,-32766,-336,-32766,-403,-32765,-470,-32764,-537,-32763,-604,-32762,-671,-32761,-738,-32759,-805,-32758,-872,-32756,-939,-32754,-1006,-32752,-1073,-32750,-1140,-32748,-1207,-32745,-1274,-32743,-1340,-32740,-1407,-32737,-1474,-32734,-1541,-32731,-1608,-32728,-1675,-32725,-1742,-32721,-1809,-32718,-1876,-32714,-1943,-32710,-2010,-32706,-2077,-32702,-2144,-32697,-2210,-32693,-2277,-32688,-2344,-32684,-2411,-32679,-2478,-32674,-2545,-32669,-2611,-32663,-2678,-32658,-2745,-32652,-2812,-32647,-2879,-32641,-2945,-32635,-3012,-32629,-3079,-32623,-3146,-32616,-3212,-32610,-3279,-32603,-3346,-32596,-3412,-32589,-3479,-32582,-3546,-32575,-3612,-32568,-3679,-32560,-3745,-32553,-3812,-32545,-3878,-32537,-3945,-32529,-4012,-32521,-4078,-32513,-4145,-32504,-4211,-32496,-4277,-32487,-4344,-32478,-4410,-32469,-4477,-32460,-4543,-32451,-4609,-32442,-4676,-32432,-4742,-32423,-4808,-32413,-4875,-32403,-4941,-32393,-5007,-32383,-5073,-32372,-5140,-32362,-5206,-32351,-5272,-32341,-5338,-32330,-5404,-32319,-5470,-32308,-5536,-32296,-5602,-32285,-5668,-32274,-5734,-32262,-5800,-32250,-5866,-32238,-5932,-32226,-5998,-32214,-6064,-32202,-6130,-32189,-6196,-32177,-6262,-32164,-6327,-32151,-6393,-32138,-6459,-32125,-6524,-32111,-6590,-32098,-6656,-32085,-6721,-32071,-6787,-32057,-6852,-32043,-6918,-32029,-6983,-32015,-7049,-32000,-7114,-31986,-7180,-31971,-7245,-31957,-7311,-31942,-7376,-31927,-7441,-31912,-7506,-31896,-7572,-31881,-7637,-31865,-7702,-31850,-7767,-31834,-7832,-31818,-7897,-31802,-7962,-31786,-8027,-31769,-8092,-31753,-8157,-31736,-8222,-31719,-8287,-31702,-8352,-31685,-8416,-31668,-8481,-31651,-8546,-31634,-8611,-31616,-8675,-31598,-8740,-31581,-8804,-31563,-8869,-31545,-8933,-31526,-8998,-31508,-9062,-31490,-9127,-31471,-9191,-31452,-9255,-31433,-9320,-31414,-9384,-31395,-9448,-31376,-9512,-31357,-9576,-31337,-9640,-31317,-9704,-31298,-9768,-31278,-9832,-31258,-9896,-31237,-9960,-31217,-10024,-31197,-10088,-31176,-10152,-31155,-10215,-31135,-10279,-31114,-10343,-31093,-10406,-31071,-10470,-31050,-10533,-31029,-10597,-31007,-10660,-30985,-10723,-30963,-10787,-30941,-10850,-30919,-10913,-30897,-10976,-30875,-11039,-30852,-11102,-30829,-11165,-30807,-11228,-30784,-11291,-30761,-11354,-30738,-11417,-30714,-11480,-30691,-11543,-30667,-11605,-30644,-11668,-30620,-11731,-30596,-11793,-30572,-11856,-30548,-11918,-30523,-11981,-30499,-12043,-30474,-12105,-30450,-12167,-30425,-12230,-30400,-12292,-30375,-12354,-30350,-12416,-30324,-12478,-30299,-12540,-30273,-12602,-30248,-12664,-30222,-12725,-30196,-12787,-30170,-12849,-30143,-12910,-30117,-12972,-30091,-13034,-30064,-13095,-30037,-13156,-30010,-13218,-29984,-13279,-29956,-13340,-29929,-13401,-29902,-13463,-29874,-13524,-29847,-13585,-29819,-13646,-29791,-13707,-29763,-13767,-29735,-13828,-29707,-13889,-29679,-13950,-29650,-14010,-29622,-14071,-29593,-14131,-29564,-14192,-29535,-14252,-29506,-14312,-29477,-14373,-29447,-14433,-29418,-14493,-29388,-14553,-29359,-14613,-29329,-14673,-29299,-14733,-29269,-14793,-29239,-14853,-29208,-14912,-29178,-14972,-29147,-15031,-29117,-15091,-29086,-15150,-29055,-15210,-29024,-15269,-28993,-15328,-28961,-15388,-28930,-15447,-28898,-15506,-28867,-15565,-28835,-15624,-28803,-15683,-28771,-15741,-28739,-15800,-28707,-15859,-28674,-15918,-28642,-15976,-28609,-16035,-28576,-16093,-28544,-16151,-28511,-16210,-28478,-16268,-28444,-16326,-28411,-16384,-28378,-16442,-28344,-16500,-28310,-16558,-28276,-16616,-28243,-16673,-28209,-16731,-28174,-16789,-28140,-16846,-28106,-16904,-28071,-16961,-28037,-17018,-28002,-17075,-27967,-17133,-27932,-17190,-27897,-17247,-27862,-17304,-27826,-17361,-27791,-17417,-27755,-17474,-27720,-17531,-27684,-17587,-27648,-17644,-27612,-17700,-27576,-17757,-27539,-17813,-27503,-17869,-27467,-17925,-27430,-17981,-27393,-18037,-27356,-18093,-27320,-18149,-27282,-18205,-27245,-18261,-27208,-18316,-27171,-18372,-27133,-18427,-27095,-18483,-27058,-18538,-27020,-18593,-26982,-18648,-26944,-18703,-26906,-18758,-26867,-18813,-26829,-18868,-26790,-18923,-26752,-18977,-26713,-19032,-26674,-19087,-26635,-19141,-26596,-19195,-26557,-19250,-26517,-19304,-26478,-19358,-26438,-19412,-26399,-19466,-26359,-19520,-26319,-19574,-26279,-19627,-26239,-19681,-26199,-19734,-26159,-19788,-26118,-19841,-26078,-19895,-26037,-19948,-25996,-20001,-25955,-20054,-25914,-20107,-25873,-20160,-25832,-20213,-25791,-20265,-25750,-20318,-25708,-20370,-25666,-20423,-25625,-20475,-25583,-20528,-25541,-20580,-25499,-20632,-25457,-20684,-25415,-20736,-25372,-20788,-25330,-20839,-25287,-20891,-25244,-20943,-25202,-20994,-25159,-21046,-25116,-21097,-25073,-21148,-25030,-21199,-24986,-21250,-24943,-21301,-24899,-21352,-24856,-21403,-24812,-21454,-24768,-21504,-24724,-21555,-24680,-21605,-24636,-21656,-24592,-21706,-24547,-21756,-24503,-21806,-24458,-21856,-24414,-21906,-24369,-21956,-24324,-22005,-24279,-22055,-24234,-22105,-24189,-22154,-24144,-22203,-24098,-22253,-24053,-22302,-24007,-22351,-23962,-22400,-23916,-22449,-23870,-22497,-23824,-22546,-23778,-22595,-23732,-22643,-23686,-22692,-23639,-22740,-23593,-22788,-23546,-22836,-23500,-22884,-23453,-22932,-23406,-22980,-23359,-23028,-23312,-23075,-23265,-23123,-23218,-23170,-23170,-23218,-23123,-23265,-23075,-23312,-23028,-23359,-22980,-23406,-22932,-23453,-22884,-23500,-22836,-23546,-22788,-23593,-22740,-23639,-22692,-23686,-22643,-23732,-22595,-23778,-22546,-23824,-22497,-23870,-22449,-23916,-22400,-23962,-22351,-24007,-22302,-24053,-22253,-24098,-22203,-24144,-22154,-24189,-22105,-24234,-22055,-24279,-22005,-24324,-21956,-24369,-21906,-24414,-21856,-24458,-21806,-24503,-21756,-24547,-21706,-24592,-21656,-24636,-21605,-24680,-21555,-24724,-21504,-24768,-21454,-24812,-21403,-24856,-21352,-24899,-21301,-24943,-21250,-24986,-21199,-25030,-21148,-25073,-21097,-25116,-21046,-25159,-20994,-25202,-20943,-25244,-20891,-25287,-20839,-25330,-20788,-25372,-20736,-25415,-20684,-25457,-20632,-25499,-20580,-25541,-20528,-25583,-20475,-25625,-20423,-25666,-20370,-25708,-20318,-25750,-20265,-25791,-20213,-25832,-20160,-25873,-20107,-25914,-20054,-25955,-20001,-25996,-19948,-26037,-19895,-26078,-19841,-26118,-19788,-26159,-19734,-26199,-19681,-26239,-19627,-26279,-19574,-26319,-19520,-26359,-19466,-26399,-19412,-26438,-19358,-26478,-19304,-26517,-19250,-26557,-19195,-26596,-19141,-26635,-19087,-26674,-19032,-26713,-18977,-26752,-18923,-26790,-18868,-26829,-18813,-26867,-18758,-26906,-18703,-26944,-18648,-26982,-18593,-27020,-18538,-27058,-18483,-27095,-18427,-27133,-18372,-27171,-18316,-27208,-18261,-27245,-18205,-27282,-18149,-27320,-18093,-27356,-18037,-27393,-17981,-27430,-17925,-27467,-17869,-27503,-17813,-27539,-17757,-27576,-17700,-27612,-17644,-27648,-17587,-27684,-17531,-27720,-17474,-27755,-17417,-27791,-17361,-27826,-17304,-27862,-17247,-27897,-17190,-27932,-17133,-27967,-17075,-28002,-17018,-28037,-16961,-28071,-16904,-28106,-16846,-28140,-16789,-28174,-16731,-28209,-16673,-28243,-16616,-28276,-16558,-28310,-16500,-28344,-16442,-28378,-16384,-28411,-16326,-28444,-16268,-28478,-16210,-28511,-16151,-28544,-16093,-28576,-16035,-28609,-15976,-28642,-15918,-28674,-15859,-28707,-15800,-28739,-15741,-28771,-15683,-28803,-15624,-28835,-15565,-28867,-15506,-28898,-15447,-28930,-15388,-28961,-15328,-28993,-15269,-29024,-15210,-29055,-15150,-29086,-15091,-29117,-15031,-29147,-14972,-29178,-14912,-29208,-14853,-29239,-14793,-29269,-14733,-29299,-14673,-29329,-14613,-29359,-14553,-29388,-14493,-29418,-14433,-29447,-14373,-29477,-14312,-29506,-14252,-29535,-14192,-29564,-14131,-29593,-14071,-29622,-14010,-29650,-13950,-29679,-13889,-29707,-13828,-29735,-13767,-29763,-13707,-29791,-13646,-29819,-13585,-29847,-13524,-29874,-13463,-29902,-13401,-29929,-13340,-29956,-13279,-29984,-13218,-30010,-13156,-30037,-13095,-30064,-13034,-30091,-12972,-30117,-12910,-30143,-12849,-30170,-12787,-30196,-12725,-30222,-12664,-30248,-12602,-30273,-12540,-30299,-12478,-30324,-12416,-30350,-12354,-30375,-12292,-30400,-12230,-30425,-12167,-30450,-12105,-30474,-12043,-30499,-11981,-30523,-11918,-30548,-11856,-30572,-11793,-30596,-11731,-30620,-11668,-30644,-11605,-30667,-11543,-30691,-11480,-30714,-11417,-30738,-11354,-30761,-11291,-30784,-11228,-30807,-11165,-30829,-11102,-30852,-11039,-30875,-10976,-30897,-10913,-30919,-10850,-30941,-10787,-30963,-10723,-30985,-10660,-31007,-10597,-31029,-10533,-31050,-10470,-31071,-10406,-31093,-10343,-31114,-10279,-31135,-10215,-31155,-10152,-31176,-10088,-31197,-10024,-31217,-9960,-31237,-9896,-31258,-9832,-31278,-9768,-31298,-9704,-31317,-9640,-31337,-9576,-31357,-9512,-31376,-9448,-31395,-9384,-31414,-9320,-31433,-9255,-31452,-9191,-31471,-9127,-31490,-9062,-31508,-8998,-31526,-8933,-31545,-8869,-31563,-8804,-31581,-8740,-31598,-8675,-31616,-8611,-31634,-8546,-31651,-8481,-31668,-8416,-31685,-8352,-31702,-8287,-31719,-8222,-31736,-8157,-31753,-8092,-31769,-8027,-31786,-7962,-31802,-7897,-31818,-7832,-31834,-7767,-31850,-7702,-31865,-7637,-31881,-7572,-31896,-7506,-31912,-7441,-31927,-7376,-31942,-7311,-31957,-7245,-31971,-7180,-31986,-7114,-32000,-7049,-32015,-6983,-32029,-6918,-32043,-6852,-32057,-6787,-32071,-6721,-32085,-6656,-32098,-6590,-32111,-6524,-32125,-6459,-32138,-6393,-32151,-6327,-32164,-6262,-32177,-6196,-32189,-6130,-32202,-6064,-32214,-5998,-32226,-5932,-32238,-5866,-32250,-5800,-32262,-5734,-32274,-5668,-32285,-5602,-32296,-5536,-32308,-5470,-32319,-5404,-32330,-5338,-32341,-5272,-32351,-5206,-32362,-5140,-32372,-5073,-32383,-5007,-32393,-4941,-32403,-4875,-32413,-4808,-32423,-4742,-32432,-4676,-32442,-4609,-32451,-4543,-32460,-4477,-32469,-4410,-32478,-4344,-32487,-4277,-32496,-4211,-32504,-4145,-32513,-4078,-32521,-4012,-32529,-3945,-32537,-3878,-32545,-3812,-32553,-3745,-32560,-3679,-32568,-3612,-32575,-3546,-32582,-3479,-32589,-3412,-32596,-3346,-32603,-3279,-32610,-3212,-32616,-3146,-32623,-3079,-32629,-3012,-32635,-2945,-32641,-2879,-32647,-2812,-32652,-2745,-32658,-2678,-32663,-2611,-32669,-2545,-32674,-2478,-32679,-2411,-32684,-2344,-32688,-2277,-32693,-2210,-32697,-2144,-32702,-2077,-32706,-2010,-32710,-1943,-32714,-1876,-32718,-1809,-32721,-1742,-32725,-1675,-32728,-1608,-32731,-1541,-32734,-1474,-32737,-1407,-32740,-1340,-32743,-1274,-32745,-1207,-32748,-1140,-32750,-1073,-32752,-1006,-32754,-939,-32756,-872,-32758,-805,-32759,-738,-32761,-671,-32762,-604,-32763,-537,-32764,-470,-32765,-403,-32766,-336,-32766,-269,-32767,-202,-32767,-135,-32767,-68,-32767,-1,-32767,67,-32767,134,-32767,201,-32766,268,-32766,335,-32765,402,-32764,469,-32763,536,-32762,603,-32761,670,-32759,737,-32758,804,-32756,871,-32754,938,-32752,1005,-32750,1072,-32748,1139,-32745,1206,-32743,1273,-32740,1339,-32737,1406,-32734,1473,-32731,1540,-32728,1607,-32725,1674,-32721,1741,-32718,1808,-32714,1875,-32710,1942,-32706,2009,-32702,2076,-32697,2143,-32693,2209,-32688,2276,-32684,2343,-32679,2410,-32674,2477,-32669,2544,-32663,2610,-32658,2677,-32652,2744,-32647,2811,-32641,2878,-32635,2944,-32629,3011,-32623,3078,-32616,3145,-32610,3211,-32603,3278,-32596,3345,-32589,3411,-32582,3478,-32575,3545,-32568,3611,-32560,3678,-32553,3744,-32545,3811,-32537,3877,-32529,3944,-32521,4011,-32513,4077,-32504,4144,-32496,4210,-32487,4276,-32478,4343,-32469,4409,-32460,4476,-32451,4542,-32442,4608,-32432,4675,-32423,4741,-32413,4807,-32403,4874,-32393,4940,-32383,5006,-32372,5072,-32362,5139,-32351,5205,-32341,5271,-32330,5337,-32319,5403,-32308,5469,-32296,5535,-32285,5601,-32274,5667,-32262,5733,-32250,5799,-32238,5865,-32226,5931,-32214,5997,-32202,6063,-32189,6129,-32177,6195,-32164,6261,-32151,6326,-32138,6392,-32125,6458,-32111,6523,-32098,6589,-32085,6655,-32071,6720,-32057,6786,-32043,6851,-32029,6917,-32015,6982,-32000,7048,-31986,7113,-31971,7179,-31957,7244,-31942,7310,-31927,7375,-31912,7440,-31896,7505,-31881,7571,-31865,7636,-31850,7701,-31834,7766,-31818,7831,-31802,7896,-31786,7961,-31769,8026,-31753,8091,-31736,8156,-31719,8221,-31702,8286,-31685,8351,-31668,8415,-31651,8480,-31634,8545,-31616,8610,-31598,8674,-31581,8739,-31563,8803,-31545,8868,-31526,8932,-31508,8997,-31490,9061,-31471,9126,-31452,9190,-31433,9254,-31414,9319,-31395,9383,-31376,9447,-31357,9511,-31337,9575,-31317,9639,-31298,9703,-31278,9767,-31258,9831,-31237,9895,-31217,9959,-31197,10023,-31176,10087,-31155,10151,-31135,10214,-31114,10278,-31093,10342,-31071,10405,-31050,10469,-31029,10532,-31007,10596,-30985,10659,-30963,10722,-30941,10786,-30919,10849,-30897,10912,-30875,10975,-30852,11038,-30829,11101,-30807,11164,-30784,11227,-30761,11290,-30738,11353,-30714,11416,-30691,11479,-30667,11542,-30644,11604,-30620,11667,-30596,11730,-30572,11792,-30548,11855,-30523,11917,-30499,11980,-30474,12042,-30450,12104,-30425,12166,-30400,12229,-30375,12291,-30350,12353,-30324,12415,-30299,12477,-30273,12539,-30248,12601,-30222,12663,-30196,12724,-30170,12786,-30143,12848,-30117,12909,-30091,12971,-30064,13033,-30037,13094,-30010,13155,-29984,13217,-29956,13278,-29929,13339,-29902,13400,-29874,13462,-29847,13523,-29819,13584,-29791,13645,-29763,13706,-29735,13766,-29707,13827,-29679,13888,-29650,13949,-29622,14009,-29593,14070,-29564,14130,-29535,14191,-29506,14251,-29477,14311,-29447,14372,-29418,14432,-29388,14492,-29359,14552,-29329,14612,-29299,14672,-29269,14732,-29239,14792,-29208,14852,-29178,14911,-29147,14971,-29117,15030,-29086,15090,-29055,15149,-29024,15209,-28993,15268,-28961,15327,-28930,15387,-28898,15446,-28867,15505,-28835,15564,-28803,15623,-28771,15682,-28739,15740,-28707,15799,-28674,15858,-28642,15917,-28609,15975,-28576,16034,-28544,16092,-28511,16150,-28478,16209,-28444,16267,-28411,16325,-28378,16383,-28344,16441,-28310,16499,-28276,16557,-28243,16615,-28209,16672,-28174,16730,-28140,16788,-28106,16845,-28071,16903,-28037,16960,-28002,17017,-27967,17074,-27932,17132,-27897,17189,-27862,17246,-27826,17303,-27791,17360,-27755,17416,-27720,17473,-27684,17530,-27648,17586,-27612,17643,-27576,17699,-27539,17756,-27503,17812,-27467,17868,-27430,17924,-27393,17980,-27356,18036,-27320,18092,-27282,18148,-27245,18204,-27208,18260,-27171,18315,-27133,18371,-27095,18426,-27058,18482,-27020,18537,-26982,18592,-26944,18647,-26906,18702,-26867,18757,-26829,18812,-26790,18867,-26752,18922,-26713,18976,-26674,19031,-26635,19086,-26596,19140,-26557,19194,-26517,19249,-26478,19303,-26438,19357,-26399,19411,-26359,19465,-26319,19519,-26279,19573,-26239,19626,-26199,19680,-26159,19733,-26118,19787,-26078,19840,-26037,19894,-25996,19947,-25955,20000,-25914,20053,-25873,20106,-25832,20159,-25791,20212,-25750,20264,-25708,20317,-25666,20369,-25625,20422,-25583,20474,-25541,20527,-25499,20579,-25457,20631,-25415,20683,-25372,20735,-25330,20787,-25287,20838,-25244,20890,-25202,20942,-25159,20993,-25116,21045,-25073,21096,-25030,21147,-24986,21198,-24943,21249,-24899,21300,-24856,21351,-24812,21402,-24768,21453,-24724,21503,-24680,21554,-24636,21604,-24592,21655,-24547,21705,-24503,21755,-24458,21805,-24414,21855,-24369,21905,-24324,21955,-24279,22004,-24234,22054,-24189,22104,-24144,22153,-24098,22202,-24053,22252,-24007,22301,-23962,22350,-23916,22399,-23870,22448,-23824,22496,-23778,22545,-23732,22594,-23686,22642,-23639,22691,-23593,22739,-23546,22787,-23500,22835,-23453,22883,-23406,22931,-23359,22979,-23312,23027,-23265,23074,-23218,23122,-23170,23169,-23123,23217,-23075,23264,-23028,23311,-22980,23358,-22932,23405,-22884,23452,-22836,23499,-22788,23545,-22740,23592,-22692,23638,-22643,23685,-22595,23731,-22546,23777,-22497,23823,-22449,23869,-22400,23915,-22351,23961,-22302,24006,-22253,24052,-22203,24097,-22154,24143,-22105,24188,-22055,24233,-22005,24278,-21956,24323,-21906,24368,-21856,24413,-21806,24457,-21756,24502,-21706,24546,-21656,24591,-21605,24635,-21555,24679,-21504,24723,-21454,24767,-21403,24811,-21352,24855,-21301,24898,-21250,24942,-21199,24985,-21148,25029,-21097,25072,-21046,25115,-20994,25158,-20943,25201,-20891,25243,-20839,25286,-20788,25329,-20736,25371,-20684,25414,-20632,25456,-20580,25498,-20528,25540,-20475,25582,-20423,25624,-20370,25665,-20318,25707,-20265,25749,-20213,25790,-20160,25831,-20107,25872,-20054,25913,-20001,25954,-19948,25995,-19895,26036,-19841,26077,-19788,26117,-19734,26158,-19681,26198,-19627,26238,-19574,26278,-19520,26318,-19466,26358,-19412,26398,-19358,26437,-19304,26477,-19250,26516,-19195,26556,-19141,26595,-19087,26634,-19032,26673,-18977,26712,-18923,26751,-18868,26789,-18813,26828,-18758,26866,-18703,26905,-18648,26943,-18593,26981,-18538,27019,-18483,27057,-18427,27094,-18372,27132,-18316,27170,-18261,27207,-18205,27244,-18149,27281,-18093,27319,-18037,27355,-17981,27392,-17925,27429,-17869,27466,-17813,27502,-17757,27538,-17700,27575,-17644,27611,-17587,27647,-17531,27683,-17474,27719,-17417,27754,-17361,27790,-17304,27825,-17247,27861,-17190,27896,-17133,27931,-17075,27966,-17018,28001,-16961,28036,-16904,28070,-16846,28105,-16789,28139,-16731,28173,-16673,28208,-16616,28242,-16558,28275,-16500,28309,-16442,28343};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment