Merge 1/4 coding branch into master

Adds a new 1/4 coding rate option
This commit is contained in:
Zenith 2026-01-10 23:28:03 -05:00 committed by GitHub
commit 4ce3f6b8db
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 869 additions and 44 deletions

View file

@ -917,7 +917,7 @@ void print_help(const char* prog) {
<< " --list-audio List available audio devices and exit\n"
<< " -c, --callsign CALL Callsign (default: N0CALL)\n"
<< " -m, --modulation MOD BPSK/QPSK/8PSK/QAM16/QAM64/QAM256 (default: QPSK)\n"
<< " -r, --rate RATE Code rate: 1/2, 2/3, 3/4, 5/6 (default: 1/2)\n"
<< " -r, --rate RATE Code rate: 1/2, 2/3, 3/4, 5/6, 1/4 (default: 1/2)\n"
<< " -f, --freq FREQ Center frequency in Hz (default: 1500)\n"
<< " --short Use short frames\n"
<< " --normal Use normal frames (default)\n"

View file

@ -7,7 +7,7 @@
#include <atomic>
#include "common.hh"
#include "phy/common.hh"
#include "schmidl_cox.hh"
#include "bip_buffer.hh"
#include "theil_sen.hh"
@ -81,7 +81,7 @@ struct ModemConfig {
return acc;
}
static int encode_mode(const char* modulation, const char* code_rate, bool short_frame) {
static int encode_mode(const char* modulation, const char* code_rate, bool short_frame) {
int mode = 0;
if (!strcmp(modulation, "BPSK"))
@ -111,6 +111,8 @@ struct ModemConfig {
mode |= 2 << 1;
else if (!strcmp(code_rate, "5/6"))
mode |= 3 << 1;
else if (!strcmp(code_rate, "1/4"))
mode |= 4 << 1;
else
return -1;

299
phy/common.hh Normal file
View file

@ -0,0 +1,299 @@
#pragma once
#include <iomanip>
#include <iostream>
#include <cstdint>
#include <cstring>
#include <cassert>
#include <cmath>
namespace DSP { using std::abs; using std::min; using std::cos; using std::sin; }
#include "xorshift.hh"
#include "complex.hh"
#include "decibel.hh"
#include "bitman.hh"
#include "quick.hh"
#include "wav.hh"
#include "pcm.hh"
#include "fft.hh"
#include "mls.hh"
#include "psk.hh"
#include "qam.hh"
#include "crc.hh"
#include "polar_tables.hh"
#include "polar_tables_rate14.hh"
#include "hadamard_encoder.hh"
struct Common
{
static const int mod_max = 12;
static const int code_max = 16;
static const int bits_max = 1 << code_max;
static const int data_max = 8192;
static const int symbols_max = 26 + 1;
static const int mls0_poly = 0x331;
static const int mls0_seed = 214;
static const int mls1_poly = 0x43;
static const int mls2_poly = 0x163;
static const int data_tones = 256;
static const int seed_tones = 64;
static const int tone_count = data_tones + seed_tones;
static const int block_length = 5;
static const int block_skew = 3;
static const int first_seed = 4;
CODE::CRC<uint16_t> crc0;
CODE::CRC<uint32_t> crc1;
CODE::HadamardEncoder<7> hadamard_encoder;
int8_t seed[seed_tones];
uint8_t data[data_max];
const uint32_t *frozen_bits;
int mod_bits;
int data_bits;
int data_bytes;
int code_order;
int oper_mode;
int tone_off;
int seed_off;
int symbol_count;
Common() : crc0(0xA8F4), crc1(0x8F6E37A0) {}
bool setup(int mode)
{
bool analog_mode = mode & 128;
if (analog_mode) {
std::cerr << "analog mode not supported yet" << std::endl;
return false;
}
std::cerr << "modulation: ";
int modulation = (mode >> 4) & 7;
switch (modulation) {
case 0:
mod_bits = 1;
symbol_count = 8;
code_order = 11;
std::cerr << "BPSK";
break;
case 1:
mod_bits = 2;
symbol_count = 4;
code_order = 11;
std::cerr << "QPSK";
break;
case 2:
mod_bits = 3;
symbol_count = 11;
code_order = 13;
std::cerr << "8PSK";
break;
case 3:
mod_bits = 4;
symbol_count = 4;
code_order = 12;
std::cerr << "QAM16";
break;
case 4:
mod_bits = 6;
symbol_count = 11;
code_order = 14;
std::cerr << "QAM64";
break;
case 5:
mod_bits = 8;
symbol_count = 8;
code_order = 14;
std::cerr << "QAM256";
break;
case 6:
mod_bits = 10;
symbol_count = 13;
code_order = 15;
std::cerr << "QAM1024";
break;
case 7:
mod_bits = 12;
symbol_count = 11;
code_order = 15;
std::cerr << "QAM4096";
break;
default:
return false;
}
std::cerr << std::endl;
bool frame_size = mode & 1;
std::cerr << "frame size: " << (frame_size ? "normal" : "short") << std::endl;
if (frame_size) {
if (symbol_count == 4) {
symbol_count *= 4;
code_order += 2;
} else {
symbol_count *= 2;
++code_order;
}
}
int code_rate = (mode >> 1) & 7;
std::cerr << "code rate: ";
if (code_rate == 0) {
std::cerr << "1/2";
switch (code_order) {
case 11:
data_bits = 1024;
frozen_bits = frozen_2048_1056;
break;
case 12:
data_bits = 2048;
frozen_bits = frozen_4096_2080;
break;
case 13:
data_bits = 4096;
frozen_bits = frozen_8192_4128;
break;
case 14:
data_bits = 8192;
frozen_bits = frozen_16384_8224;
break;
case 15:
data_bits = 16384;
frozen_bits = frozen_32768_16416;
break;
case 16:
data_bits = 32768;
frozen_bits = frozen_65536_32800;
break;
default:
return false;
}
} else if (code_rate == 1) {
std::cerr << "2/3";
switch (code_order) {
case 11:
data_bits = 1368;
frozen_bits = frozen_2048_1400;
break;
case 12:
data_bits = 2736;
frozen_bits = frozen_4096_2768;
break;
case 13:
data_bits = 5472;
frozen_bits = frozen_8192_5504;
break;
case 14:
data_bits = 10944;
frozen_bits = frozen_16384_10976;
break;
case 15:
data_bits = 21888;
frozen_bits = frozen_32768_21920;
break;
case 16:
data_bits = 43776;
frozen_bits = frozen_65536_43808;
break;
default:
return false;
}
} else if (code_rate == 2) {
std::cerr << "3/4";
switch (code_order) {
case 11:
data_bits = 1536;
frozen_bits = frozen_2048_1568;
break;
case 12:
data_bits = 3072;
frozen_bits = frozen_4096_3104;
break;
case 13:
data_bits = 6144;
frozen_bits = frozen_8192_6176;
break;
case 14:
data_bits = 12288;
frozen_bits = frozen_16384_12320;
break;
case 15:
data_bits = 24576;
frozen_bits = frozen_32768_24608;
break;
case 16:
data_bits = 49152;
frozen_bits = frozen_65536_49184;
break;
default:
return false;
}
} else if (code_rate == 3) {
std::cerr << "5/6";
switch (code_order) {
case 11:
data_bits = 1704;
frozen_bits = frozen_2048_1736;
break;
case 12:
data_bits = 3408;
frozen_bits = frozen_4096_3440;
break;
case 13:
data_bits = 6816;
frozen_bits = frozen_8192_6848;
break;
case 14:
data_bits = 13632;
frozen_bits = frozen_16384_13664;
break;
case 15:
data_bits = 27264;
frozen_bits = frozen_32768_27296;
break;
case 16:
data_bits = 54528;
frozen_bits = frozen_65536_54560;
break;
default:
return false;
}
} else if (code_rate == 4) {
// 1/4 rate
std::cerr << "1/4";
switch (code_order) {
case 11:
data_bits = 512;
frozen_bits = frozen_2048_544;
break;
case 12:
data_bits = 1024;
frozen_bits = frozen_4096_1056;
break;
case 13:
data_bits = 2048;
frozen_bits = frozen_8192_2080;
break;
case 14:
data_bits = 4096;
frozen_bits = frozen_16384_4128;
break;
case 15:
data_bits = 8192;
frozen_bits = frozen_32768_8224;
break;
case 16:
data_bits = 16384;
frozen_bits = frozen_65536_16416;
break;
default:
return false;
}
} else {
std::cerr << "unsupported" << std::endl;
return false;
}
std::cerr << std::endl;
oper_mode = mode;
data_bytes = data_bits / 8;
float duration = 41. / 300. * (3 + symbol_count);
std::cerr << "duration: " << duration << "s" << std::endl;
std::cerr << "payload: " << data_bytes << "B" << std::endl;
std::cerr << "bitrate: " << data_bits / duration / 1000. << "kb/s" << std::endl;
return true;
}
};

523
phy/polar_tables_rate14.hh Normal file
View file

@ -0,0 +1,523 @@
/*
1/4 frozen bit tables for polar codes
https://github.com/aicodix/code/blob/master/polar_freezer.hh
*/
#pragma once
static const uint32_t frozen_2048_544[64] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0x7fffffff, 0x17f7fff, 0x7fffffff, 0x11717ff, 0x117177f, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff,
0xffffffff, 0x7fffffff, 0x177fffff, 0x117177f, 0x177f7fff, 0x3177f, 0x1013f, 0x1,
0xffffffff, 0x177f7fff, 0x177f7fff, 0x1013f, 0x1177fff, 0x10117, 0x10117, 0x1,
0x11717ff, 0x10117, 0x10117, 0x1, 0x10117, 0x0, 0x0, 0x0, };
// N=2048 K=544 data_bits=512 rate=0.265625
static const uint32_t frozen_4096_1056[128] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x1017f, 0x1011f, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x1fffffff, 0x177fffff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0x7fffffff, 0x177f7fff, 0x37f7fff, 0x1011f,
0x7fffffff, 0x11f7fff, 0x11717ff, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x37f7fff, 0x7fffffff, 0x11717ff, 0x117177f, 0x10117,
0x177fffff, 0x117177f, 0x117177f, 0x117, 0x7177f, 0x1, 0x1, 0x0,
0x177f7fff, 0x7177f, 0x1017f, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, };
// N=4096 K=1056 data_bits=1024 rate=0.257812
static const uint32_t frozen_8192_2080[256] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x7177f,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x17f7fff, 0x1171fff, 0x10117,
0x1fffffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x11f7fff, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x1173fff, 0x17ffffff, 0x117177f, 0x117177f, 0x10117,
0xffffffff, 0x1fffffff, 0x177fffff, 0x117177f, 0x177f7fff, 0x117177f, 0x3177f, 0x1,
0x177f7fff, 0x1017f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x1017f, 0x10117, 0x1,
0x7fffffff, 0x177f7fff, 0x13f7fff, 0x10117, 0x11717ff, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x7fffffff, 0x1171fff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x0, 0x17, 0x0, 0x0, 0x0,
0x117177f, 0x17, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
// N=8192 K=2080 data_bits=2048 rate=0.253906
static const uint32_t frozen_16384_4128[512] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1173fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x11717ff, 0x117177f, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1177fff,
0xffffffff, 0x7fffffff, 0x177fffff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x117,
0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x1017f, 0x10117, 0x1,
0x1177fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x3fffffff, 0x117177f, 0x177fffff, 0x117177f, 0x117177f, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x117177f,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x3177f, 0x17f7fff, 0x10117, 0x10117, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x37f7fff, 0x1011f,
0x7fffffff, 0x1173fff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x17ffffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x17, 0x0, 0x3, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0x7fffffff, 0x177f7fff, 0x177f7fff, 0x3177f,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x1177fff, 0x11717ff, 0x10117,
0x17ffffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0x7fffffff, 0x3fffffff, 0x117177f, 0x177fffff, 0x117177f, 0x117177f, 0x10117,
0x177f7fff, 0x117177f, 0x117177f, 0x7, 0x1077f, 0x1, 0x1, 0x0,
0x177f7fff, 0x1077f, 0x1011f, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x7177f, 0x1017f, 0x1,
0x17f7fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x11717ff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
// N=16384 K=4128 data_bits=4096 rate=0.251953
static const uint32_t frozen_32768_8224[1024] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x1173fff, 0x117177f, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x7177f, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x177f7fff, 0x3177f,
0x7fffffff, 0x37f7fff, 0x1171fff, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x1171fff, 0x117177f, 0x10117,
0x177fffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x117, 0x7, 0x0,
0x7177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x1017f, 0x1177fff, 0x10117, 0x10117, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x17f7fff, 0x10117,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x17f7fff, 0x3fffffff, 0x117177f, 0x117177f, 0x10117,
0x177fffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff, 0x177fffff, 0x117177f, 0x117177f, 0x10117,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x7,
0x177f7fff, 0x1077f, 0x1011f, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x7177f, 0x17f7fff, 0x10117, 0x10117, 0x1,
0x11717ff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x13f7fff, 0x1fffffff, 0x117177f, 0x117177f, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff,
0xffffffff, 0x17ffffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x17,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x117177f, 0x77f7fff, 0x1011f, 0x10117, 0x1,
0x1173fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0x7fffffff, 0x177f7fff, 0x77f7fff, 0x1011f, 0x1171fff, 0x10117, 0x10117, 0x1,
0x7fffffff, 0x1173fff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x177fffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x117, 0x0, 0x0, 0x0,
0x117177f, 0x117, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x11f7fff, 0x11717ff, 0x10117,
0x17ffffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x0,
0x117177f, 0x17, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0,
0x177f7fff, 0x117177f, 0x117177f, 0x17, 0x3177f, 0x1, 0x1, 0x0,
0x1013f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x177f7fff, 0x3177f, 0x1013f, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
// N=32768 K=8224 data_bits=8192 rate=0.250977
static const uint32_t frozen_65536_16416[2048] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x11f7fff, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x17,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x1177fff, 0x10117,
0x7fffffff, 0x11717ff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x177f7fff, 0x1013f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x1177fff, 0x17ffffff, 0x117177f, 0x117177f, 0x10117,
0xffffffff, 0x1fffffff, 0x177fffff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x10117,
0x177f7fff, 0x117177f, 0x17177f, 0x3, 0x1037f, 0x1, 0x1, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f,
0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x17177f, 0x3,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x3177f, 0x17f7fff, 0x10117, 0x10117, 0x1,
0x11717ff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x7fffffff, 0x37f7fff, 0x1171fff, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x13f7fff, 0x11717ff, 0x10117,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff, 0x177fffff, 0x117177f, 0x117177f, 0x10117,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x117, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x37f7fff, 0x1011f,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x10117,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x3fffffff, 0x177fffff, 0x117177f,
0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x1077f, 0x1,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x1017f, 0x1177fff, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x1077f, 0x11f7fff, 0x10117, 0x10117, 0x1,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x11f7fff, 0x10117,
0x7fffffff, 0x11717ff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x177fffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x0, 0x0,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff, 0x17ffffff, 0x117177f, 0x117177f, 0x10117,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x17177f, 0x3, 0x1, 0x0,
0x1037f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x177f7fff, 0x17177f, 0x1037f, 0x1, 0x1011f, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x13f7fff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x1fffffff, 0x177f7fff, 0x117177f,
0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x7177f, 0x1017f, 0x1,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x117177f,
0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x177f7fff, 0x37f7fff, 0x1011f,
0x7fffffff, 0x1173fff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x13f7fff, 0x1fffffff, 0x117177f, 0x117177f, 0x10117,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x17, 0x3, 0x0,
0x3177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff,
0xffffffff, 0x7fffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x1171fff, 0x117177f, 0x10117,
0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x10117,
0x177f7fff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x17, 0x3, 0x0,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x17177f, 0x3,
0x177f7fff, 0x1077f, 0x1011f, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x11f7fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x3177f, 0x13f7fff, 0x10117, 0x10117, 0x1,
0x11717ff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f,
0xffffffff, 0x177fffff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x117177f, 0x117177f, 0x117,
0x7fffffff, 0x177f7fff, 0x177f7fff, 0x117177f, 0x177f7fff, 0x1013f, 0x10117, 0x1,
0x1173fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x7fffffff, 0x177f7fff, 0x1177fff, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x7fffffff, 0x11717ff, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0,
0x10117, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x117177f, 0x10117, 0x10117, 0x1, 0x117, 0x0, 0x0, 0x0,
0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x177fffff, 0x117177f, 0x117177f, 0x10117, 0x117177f, 0x10117, 0x10117, 0x1,
0x117177f, 0x10117, 0x10117, 0x1, 0x117, 0x0, 0x0, 0x0,
0x117177f, 0x117, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x7177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1017f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
// N=65536 K=16416 data_bits=16384 rate=0.250488

View file

@ -31,7 +31,7 @@ const std::vector<std::string> MODULATION_OPTIONS = {
};
const std::vector<std::string> CODE_RATE_OPTIONS = {
"1/2", "2/3", "3/4", "5/6"
"1/2", "2/3", "3/4", "5/6", "1/4"
};
const std::vector<std::string> PTT_TYPE_OPTIONS = {
@ -207,50 +207,51 @@ struct TNCUIState {
// TEMP modem tables
void update_modem_info() {
// Modulations: BPSK=0, QPSK=1, 8PSK=2, QAM16=3, QAM64=4, QAM256=5, QAM1024=6, QAM4096=7
// Code rates: 1/2=0, 2/3=1, 3/4=2, 5/6=3
static const int payload_short[8][4] = {
{128, 171, 192, 213}, // BPSK
{128, 171, 192, 213}, // QPSK
{512, 684, 768, 852}, // 8PSK
{256, 342, 384, 426}, // QAM16
{1024, 1368, 1536, 1704}, // QAM64
{1024, 1368, 1536, 1704}, // QAM256
{2048, 2736, 3072, 3408}, // QAM1024
{2048, 2736, 3072, 3408}, // QAM4096
// Code rates: 1/2=0, 2/3=1, 3/4=2, 5/6=3, 1/4=4
// Columns: [1/2, 2/3, 3/4, 5/6, 1/4]
static const int payload_short[8][5] = {
{128, 171, 192, 213, 64}, // BPSK
{128, 171, 192, 213, 64}, // QPSK
{512, 684, 768, 852, 256}, // 8PSK
{256, 342, 384, 426, 128}, // QAM16
{1024, 1368, 1536, 1704, 512}, // QAM64
{1024, 1368, 1536, 1704, 512}, // QAM256
{2048, 2736, 3072, 3408, 1024}, // QAM1024
{2048, 2736, 3072, 3408, 1024}, // QAM4096
};
static const int payload_normal[8][4] = {
{256, 342, 384, 426}, // BPSK
{512, 684, 768, 852}, // QPSK
{1024, 1368, 1536, 1704}, // 8PSK
{1024, 1368, 1536, 1704}, // QAM16
{2048, 2736, 3072, 3408}, // QAM64
{2048, 2736, 3072, 3408}, // QAM256
{4096, 5472, 6144, 6816}, // QAM1024
{4096, 5472, 6144, 6816}, // QAM4096
static const int payload_normal[8][5] = {
{256, 342, 384, 426, 128}, // BPSK
{512, 684, 768, 852, 256}, // QPSK
{1024, 1368, 1536, 1704, 512}, // 8PSK
{1024, 1368, 1536, 1704, 512}, // QAM16
{2048, 2736, 3072, 3408, 1024}, // QAM64
{2048, 2736, 3072, 3408, 1024}, // QAM256
{4096, 5472, 6144, 6816, 2048}, // QAM1024
{4096, 5472, 6144, 6816, 2048}, // QAM4096
};
// Bitrate tables in bps
static const int bitrate_short[8][4] = {
{700, 900, 1000, 1100}, // BPSK
{1100, 1400, 1600, 1800}, // QPSK
{2100, 2900, 3200, 3600}, // 8PSK
{2100, 2900, 3200, 3600}, // QAM16
{4300, 5700, 6400, 7100}, // QAM64
{5400, 7300, 8200, 9100}, // QAM256
{7500, 10000, 11200, 12500}, // QAM1024
{8600, 11400, 12800, 14200}, // QAM4096
// Bitrate tables in bps (columns: 1/2, 2/3, 3/4, 5/6, 1/4)
static const int bitrate_short[8][5] = {
{700, 900, 1000, 1100, 300}, // BPSK
{1100, 1400, 1600, 1800, 500}, // QPSK
{2100, 2900, 3200, 3600, 1100}, // 8PSK
{2100, 2900, 3200, 3600, 1000}, // QAM16
{4300, 5700, 6400, 7100, 2200}, // QAM64
{5400, 7300, 8200, 9100, 2700}, // QAM256
{7500, 10000, 11200, 12500, 3700}, // QAM1024
{8600, 11400, 12800, 14200, 4300}, // QAM4096
};
static const int bitrate_normal[8][4] = {
{800, 1100, 1200, 1300}, // BPSK
{1600, 2100, 2400, 2600}, // QPSK
{2400, 3200, 3600, 4000}, // 8PSK
{3200, 4200, 4700, 5200}, // QAM16
{4800, 6400, 7200, 8000}, // QAM64
{6300, 8400, 9500, 10500}, // QAM256
{8300, 11000, 12400, 13800}, // QAM1024
{9600, 12800, 14400, 16000}, // QAM4096
static const int bitrate_normal[8][5] = {
{800, 1100, 1200, 1300, 400}, // BPSK
{1600, 2100, 2400, 2600, 800}, // QPSK
{2400, 3200, 3600, 4000, 1200}, // 8PSK
{3200, 4200, 4700, 5200, 1600}, // QAM16
{4800, 6400, 7200, 8000, 2400}, // QAM64
{6300, 8400, 9500, 10500, 3200}, // QAM256
{8300, 11000, 12400, 13800, 4100}, // QAM1024
{9600, 12800, 14400, 16000, 4800}, // QAM4096
};
static const int duration_short[8] = {1500, 1000, 1900, 1000, 1900, 1500, 2200, 1900};
@ -260,7 +261,7 @@ struct TNCUIState {
int rate = code_rate_index;
if (mod < 0 || mod > 7) mod = 1;
if (rate < 0 || rate > 3) rate = 0;
if (rate < 0 || rate > 4) rate = 0;
if (short_frame) {
mtu_bytes = payload_short[mod][rate] - 2;
@ -1122,7 +1123,7 @@ private:
state_.modulation_index = (state_.modulation_index + delta + 8) % 8;
break;
case FIELD_CODERATE:
state_.code_rate_index = (state_.code_rate_index + delta + 4) % 4;
state_.code_rate_index = (state_.code_rate_index + delta + 5) % 5;
break;
case FIELD_FRAMESIZE:
state_.short_frame = !state_.short_frame;