[wip] factoring vdk out into several packages

This commit is contained in:
2023-05-25 15:05:48 -06:00
parent 35ef2e0b1d
commit ee30eaaf7f
231 changed files with 13800 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
export declare const rlp: {
decoded: import("./jex_include/local-vdk-0.1.0/dist/rlp.js").decoded_data;
encoded: Uint8Array;
}[];
export declare const base58: {
encoded: string;
decoded: Uint8Array;
}[];
export declare const base64: {
decoded: Uint8Array;
encoded: string;
}[];
+3657
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
/**
* Base58 encoding/decoding
*/
export { encode, decode };
/**
* Encode a Uint8Array into base58
*/
declare function encode(binary: Uint8Array): string;
/**
* Decode a Base58 string into a Uint8Array
*/
declare function decode(base58: string): Uint8Array;
@@ -0,0 +1,308 @@
/**
* Base58 encoding/decoding
*/
export { encode, decode };
//=============================================================================
// ENCODING
//=============================================================================
/**
* Encode a Uint8Array into base58
*/
function encode(binary) {
let num_leading_zeros = nlz(binary);
let rest = binary.slice(num_leading_zeros);
let ones = encode_zeros(num_leading_zeros);
let rest_b58 = encode_rest(rest);
let result = ones + rest_b58;
return result;
}
/**
* count the number of leading zeros in a uint8array
*
* @internal
*/
function nlz(bytes) {
let n = 0;
for (let this_byte of bytes) {
if (0 === this_byte) {
n++;
}
else {
break;
}
}
return n;
}
/**
* Generate a bunch of '1's for however many leading zeros there are
*
* @internal
*/
function encode_zeros(how_many) {
let ones = '';
for (let i = 1; i <= how_many; i++) {
ones += '1';
}
return ones;
}
/**
* Encode a Uint8Array that has no leading zeros
*
* @internal
*/
function encode_rest(bytes) {
let bytes_bignum = bytes_to_bigint(bytes);
let result = bignum_to_base58(bytes_bignum);
return result;
}
/**
* Convert a bytestring to a bignum
*
* @internal
*/
function bytes_to_bigint(bytes) {
let acc_bigint = 0n;
for (let this_byte of bytes) {
acc_bigint <<= 8n;
acc_bigint += BigInt(this_byte);
}
return acc_bigint;
}
/**
* Convert a BigInt to Base58
*
* @internal
*/
function bignum_to_base58(q) {
let s = '';
while (q !== 0n) {
let this_n = q % 58n;
q /= 58n;
let this_b58_char = bigint_to_char(this_n);
s = this_b58_char + s;
}
return s;
}
//=============================================================================
// DECODING
//=============================================================================
/**
* Decode a Base58 string into a Uint8Array
*/
function decode(base58) {
let num_leading_ones = nlo(base58);
let rest = base58.slice(num_leading_ones);
let zeros = decode_ones(num_leading_ones);
let rest_arr = decode_rest(rest);
let pre_result = zeros.concat(rest_arr);
return new Uint8Array(pre_result);
}
/**
* count the number of leading 1 characters in a uint8array
*
* @internal
*/
function nlo(base58) {
let n = 0;
for (let this_char of base58) {
if ('1' === this_char) {
n++;
}
else {
break;
}
}
return n;
}
/**
* Generate a bunch of '0's for however many leading ones there are
*
* @internal
*/
function decode_ones(how_many) {
let zeros = [];
for (let i = 1; i <= how_many; i++) {
zeros.push(0);
}
return zeros;
}
/**
* Decode a string that has no leading 1s
*
* @internal
*/
function decode_rest(base58) {
let result_bignum = base58_to_bigint(base58);
let result = bigint_to_base256(result_bignum);
return result;
}
/**
* Convert a base58 string to a bignum
*
* @internal
*/
function base58_to_bigint(base58) {
let acc_bigint = 0n;
for (let this_char of base58) {
acc_bigint *= 58n;
acc_bigint += char_to_bigint(this_char);
}
return acc_bigint;
}
/**
* convert a bignum into a byte array
*
* @end
*/
function bigint_to_base256(q) {
let arr_reverse = [];
while (q !== 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return arr_reverse;
}
//=============================================================================
// TRANSLATION TABLES
//=============================================================================
/**
* Base58 integer -> character conversion table
*
* @internal
*/
function bigint_to_char(n) {
switch (n) {
case 0n: return '1';
case 1n: return '2';
case 2n: return '3';
case 3n: return '4';
case 4n: return '5';
case 5n: return '6';
case 6n: return '7';
case 7n: return '8';
case 8n: return '9';
case 9n: return 'A';
case 10n: return 'B';
case 11n: return 'C';
case 12n: return 'D';
case 13n: return 'E';
case 14n: return 'F';
case 15n: return 'G';
case 16n: return 'H';
case 17n: return 'J';
case 18n: return 'K';
case 19n: return 'L';
case 20n: return 'M';
case 21n: return 'N';
case 22n: return 'P';
case 23n: return 'Q';
case 24n: return 'R';
case 25n: return 'S';
case 26n: return 'T';
case 27n: return 'U';
case 28n: return 'V';
case 29n: return 'W';
case 30n: return 'X';
case 31n: return 'Y';
case 32n: return 'Z';
case 33n: return 'a';
case 34n: return 'b';
case 35n: return 'c';
case 36n: return 'd';
case 37n: return 'e';
case 38n: return 'f';
case 39n: return 'g';
case 40n: return 'h';
case 41n: return 'i';
case 42n: return 'j';
case 43n: return 'k';
case 44n: return 'm';
case 45n: return 'n';
case 46n: return 'o';
case 47n: return 'p';
case 48n: return 'q';
case 49n: return 'r';
case 50n: return 's';
case 51n: return 't';
case 52n: return 'u';
case 53n: return 'v';
case 54n: return 'w';
case 55n: return 'x';
case 56n: return 'y';
case 57n: return 'z';
default:
throw new Error('invalid base58 bigint: ' + n);
}
}
/**
* Base58 character -> integer conversion table
*
* @internal
*/
function char_to_bigint(s) {
switch (s) {
case '1': return 0n;
case '2': return 1n;
case '3': return 2n;
case '4': return 3n;
case '5': return 4n;
case '6': return 5n;
case '7': return 6n;
case '8': return 7n;
case '9': return 8n;
case 'A': return 9n;
case 'B': return 10n;
case 'C': return 11n;
case 'D': return 12n;
case 'E': return 13n;
case 'F': return 14n;
case 'G': return 15n;
case 'H': return 16n;
case 'J': return 17n;
case 'K': return 18n;
case 'L': return 19n;
case 'M': return 20n;
case 'N': return 21n;
case 'P': return 22n;
case 'Q': return 23n;
case 'R': return 24n;
case 'S': return 25n;
case 'T': return 26n;
case 'U': return 27n;
case 'V': return 28n;
case 'W': return 29n;
case 'X': return 30n;
case 'Y': return 31n;
case 'Z': return 32n;
case 'a': return 33n;
case 'b': return 34n;
case 'c': return 35n;
case 'd': return 36n;
case 'e': return 37n;
case 'f': return 38n;
case 'g': return 39n;
case 'h': return 40n;
case 'i': return 41n;
case 'j': return 42n;
case 'k': return 43n;
case 'm': return 44n;
case 'n': return 45n;
case 'o': return 46n;
case 'p': return 47n;
case 'q': return 48n;
case 'r': return 49n;
case 's': return 50n;
case 't': return 51n;
case 'u': return 52n;
case 'v': return 53n;
case 'w': return 54n;
case 'x': return 55n;
case 'y': return 56n;
case 'z': return 57n;
default:
throw new Error('invalid base58 char: ' + s);
}
}
//# sourceMappingURL=b58.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
/**
* Base64 Utility Functions in TypeScript
*/
export { encode, decode };
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
declare function encode(bytes: Uint8Array): string;
/**
* Decode a base64-encoded string
*/
declare function decode(base64_str: string): Uint8Array;
@@ -0,0 +1,507 @@
/**
* Base64 Utility Functions in TypeScript
*/
export { encode, decode };
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
function encode(bytes) {
// slice the array
// length of head is a multiple of 3
// treat the tail as a special case
let { head, tail, tail_len } = slice3k(bytes);
let head_str = encode_head(head);
let tail_str = encode_tail(tail, tail_len);
return head_str + tail_str;
}
/**
* Take a Uint8Array, take the first 3k (k >= 0) bytes, put them in head, and
* the remaining 0,1, or 2 bytes, put them in tail
*
* @internal
*/
function slice3k(bytes) {
let len = bytes.length;
// too lazy to look up how to do integer division in js so this will do
let tail_len = len % 3;
let head_len = len - tail_len;
// for slice:
// first argument is the 0-index of the start
// second - first is the length of the slice
let head = bytes.slice(0, head_len);
// empty second argument means go to the end
let tail = bytes.slice(head_len);
return { head: head,
tail: tail,
tail_len: tail_len };
}
/**
* Encode a Uint8Array whose length is known to be a multiple of 3
*
* @internal
*/
function encode_head(head_bytes) {
// can assume length of bytes is a multiple of 3
// start index at 0
// increment by 3
let head_bytes_len = head_bytes.length;
let max_idx0 = head_bytes_len - 1;
let head_str_acc = '';
for (let this_3slice_start_idx0 = 0; this_3slice_start_idx0 <= max_idx0; this_3slice_start_idx0 += 3) {
let this_3slice_bytes = head_bytes.slice(this_3slice_start_idx0, this_3slice_start_idx0 + 3);
let this_3slice_str = encode3(this_3slice_bytes);
head_str_acc += this_3slice_str;
}
return head_str_acc;
}
/**
* Encode a 3 bytes into base64 notation
*
* @internal
*/
function encode3(bytes) {
let b0 = bytes[0];
let b1 = bytes[1];
let b2 = bytes[2];
// ABCDEFGH 12345678 abcdefgh
// b0 b1 b2
// ABCDEF GH1234 5678ab cdefgh
// n0 n1 n2 n3
let n0 = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// b2 = abcdefgh
// b2 >> 6 = ______ab
// n2 = __5678ab
let n2 = ((b1 % 16) << 2) + (b2 >> 6);
// b2 = abcdefgh
// 64 = _1______
// n3 = __cdefgh
let n3 = b2 % 64;
// convert to chars
let s0 = int2char(n0);
let s1 = int2char(n1);
let s2 = int2char(n2);
let s3 = int2char(n3);
// retrvn
return s0 + s1 + s2 + s3;
}
/**
* Encode the final 0, 1, or 2 bytes
*
* @internal
*/
function encode_tail(tail_bytes, tail_len) {
switch (tail_len) {
case 0: return '';
case 1: return encode1(tail_bytes);
case 2: return encode2(tail_bytes);
default:
throw new Error('encode_tail with tail_len = ' + tail_len);
}
}
/**
* Encode a single byte
*
* @internal
*/
function encode1(bytes) {
let b0 = bytes[0];
// n0 = __ABCDEF
// b0 = ABCDEFGH
// b0 >> 2 = __ABCDEF
let n0 = b0 >> 2;
// n1 = __GH____
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
let n1 = (b0 % 4) << 4;
return int2char(n0) + int2char(n1) + '==';
}
/**
* Encode two bytes
*
* @internal
*/
function encode2(bytes) {
let b0 = bytes[0];
let b1 = bytes[1];
// ABCDEFGH 12345678
// b0 b1
// ABCDEF GH1234 5678__
// n0 n1 n2
let n0 = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// n2 = __5678__
let n2 = (b1 % 16) << 2;
// convert to chars
let s0 = int2char(n0);
let s1 = int2char(n1);
let s2 = int2char(n2);
// retrvn
return s0 + s1 + s2 + '=';
}
/**
* Decode a base64-encoded string
*/
function decode(base64_str) {
// length of the string is guaranteed to be a multiple of 4
// if the string is empty, return the empty array
let len = base64_str.length;
// this branching contains the implicit assertion that the length is a
// multiple of 4. If this is not true, the bottom branch is triggered.
// general case goes first because speeeeeed
if ((4 < len)
&& (0 === (len % 4))) {
// split the head and tail
let tail_start_idx0 = len - 4;
let head_s = base64_str.slice(0, tail_start_idx0);
let tail_s = base64_str.slice(tail_start_idx0);
// Using arrays because Uint8Arrays don't have a concat operation
let head_arr = decode_head(head_s);
let tail_arr = decode_tail(tail_s);
// silly to put these in variables but this is exactly the type of
// situation where JS type insanity shows up
//
// see: i forgot
// > [1,2,3] + [4,5,6]
// '1,2,34,5,6'
//
// Originally, I used + like some sort of moron who codes in a sane
// language
//
// seriously what is this language
//
// this is some clown behavior
let total_arr = head_arr.concat(tail_arr);
return new Uint8Array(total_arr);
}
// special case if the length is exactly 4
else if (4 === len) {
// it's just a tail
return new Uint8Array(decode_tail(base64_str));
}
// empty string
else if (0 === len) {
return new Uint8Array([]);
}
else {
throw new Error('base64 decode: invalid string length: ' + len);
}
}
/**
* Decode a string known to not have any padding
*
* @internal
*/
function decode_head(s) {
// go 4 characters at a time
let max_i0 = s.length - 1;
let decoded_acc = [];
for (let i0 = 0; i0 <= max_i0; i0 += 4) {
let this_slice_s = s.slice(i0, i0 + 4);
let this_slice_arr = decode3(this_slice_s);
// update accumulator
decoded_acc = decoded_acc.concat(this_slice_arr);
}
return decoded_acc;
}
/**
* Decode 4 characters that correspond to either 3 bytes, 2, bytes, or 1 byte
*
* @internal
*/
function decode_tail(s) {
// all that matters right now is the last 2 chars
// s0, s1, s2, s3
// 0 based indexing is so annoying
let s2 = s[2];
let s3 = s[3];
// braaaaaaaaaaaaaaaaaench
// two equals signs means 1 byte
if (('=' === s3) && ('=' === s2)) {
return decode1(s);
}
// one equals sign means 2 bytes
else if (('=' === s3)) {
return decode2(s);
}
// 0 equals signs means 3 bytes
else {
return decode3(s);
}
}
/**
* Decode a 4-character long base64 string corresponding to 3 bytes
*
* @internal
*/
function decode3(s) {
// pull out strings
let s0 = s[0];
let s1 = s[1];
let s2 = s[2];
let s3 = s[3];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
let n2 = char2int(s2);
let n3 = char2int(s3);
// abcdef gh1234 5678ab cdefgh
// n0 n1 n2 n3
// abcdefgh 12345678 abcdefgh
// b0 b1 b2
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678ab
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 = ((n1 % 16) << 4) + (n2 >> 2);
// n2 = __5678ab
// 4 = _____1__
// n2 % 4 = ______ab
// (n2 % 4) << 6 = ab______
// n3 = __cdefgh
let b2 = ((n2 % 4) << 6) + n3;
return [b0, b1, b2];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function decode2(s) {
// xyz=
// pull out strings
let s0 = s[0];
let s1 = s[1];
let s2 = s[2];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
let n2 = char2int(s2);
// abcdef gh1234 5678__
// n0 n1 n2
// abcdefgh 12345678
// b0 b1
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678__
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 = ((n1 % 16) << 4) + (n2 >> 2);
return [b0, b1];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function decode1(s) {
// xy==
// pull out strings
let s0 = s[0];
let s1 = s[1];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
// abcdef gh____
// n0 n1
// abcdefgh
// b0
// n0 = __abcdef
// n1 = __gh____
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
return [b0];
}
// FIXME: these tables would *probably* be faster if they were made into objects
/**
* Conversion table for base64 encode
*
* @internal
*/
function int2char(n) {
switch (n) {
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
case 5: return 'F';
case 6: return 'G';
case 7: return 'H';
case 8: return 'I';
case 9: return 'J';
case 10: return 'K';
case 11: return 'L';
case 12: return 'M';
case 13: return 'N';
case 14: return 'O';
case 15: return 'P';
case 16: return 'Q';
case 17: return 'R';
case 18: return 'S';
case 19: return 'T';
case 20: return 'U';
case 21: return 'V';
case 22: return 'W';
case 23: return 'X';
case 24: return 'Y';
case 25: return 'Z';
case 26: return 'a';
case 27: return 'b';
case 28: return 'c';
case 29: return 'd';
case 30: return 'e';
case 31: return 'f';
case 32: return 'g';
case 33: return 'h';
case 34: return 'i';
case 35: return 'j';
case 36: return 'k';
case 37: return 'l';
case 38: return 'm';
case 39: return 'n';
case 40: return 'o';
case 41: return 'p';
case 42: return 'q';
case 43: return 'r';
case 44: return 's';
case 45: return 't';
case 46: return 'u';
case 47: return 'v';
case 48: return 'w';
case 49: return 'x';
case 50: return 'y';
case 51: return 'z';
case 52: return '0';
case 53: return '1';
case 54: return '2';
case 55: return '3';
case 56: return '4';
case 57: return '5';
case 58: return '6';
case 59: return '7';
case 60: return '8';
case 61: return '9';
case 62: return '+';
case 63: return '/';
default: throw new Error("invalid base64 encode byte: " + n);
}
}
/**
* Conversion table for base64 decode
*
* @internal
*/
function char2int(s) {
switch (s) {
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 17;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
case 'a': return 26;
case 'b': return 27;
case 'c': return 28;
case 'd': return 29;
case 'e': return 30;
case 'f': return 31;
case 'g': return 32;
case 'h': return 33;
case 'i': return 34;
case 'j': return 35;
case 'k': return 36;
case 'l': return 37;
case 'm': return 38;
case 'n': return 39;
case 'o': return 40;
case 'p': return 41;
case 'q': return 42;
case 'r': return 43;
case 's': return 44;
case 't': return 45;
case 'u': return 46;
case 'v': return 47;
case 'w': return 48;
case 'x': return 49;
case 'y': return 50;
case 'z': return 51;
case '0': return 52;
case '1': return 53;
case '2': return 54;
case '3': return 55;
case '4': return 56;
case '5': return 57;
case '6': return 58;
case '7': return 59;
case '8': return 60;
case '9': return 61;
case '+': return 62;
case '/': return 63;
default: throw new Error("invalid base64 character: " + s);
}
}
//# sourceMappingURL=b64.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,28 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export { bytes_to_bigint, bigint_to_bytes, concat, strong_rand_bytes };
/**
* Concatenate two arrays
*/
declare function concat(arr1: Uint8Array, arr2: Uint8Array): Uint8Array;
/**
* Cryptographically random bytes
*/
declare function strong_rand_bytes(how_many: number): Uint8Array;
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
declare function bytes_to_bigint(bytes: Uint8Array): bigint;
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
declare function bigint_to_bytes(q: bigint): Uint8Array;
@@ -0,0 +1,266 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export { bytes_to_bigint, bigint_to_bytes, concat, strong_rand_bytes };
/**
* Concatenate two arrays
*/
function concat(arr1, arr2) {
let len1 = arr1.length;
let len2 = arr2.length;
let arr1_idx0_offset = 0;
let arr2_idx0_offset = len1;
let result_len = len1 + len2;
let result = new Uint8Array(result_len);
// copy first array into result
for (let arr1_idx0 = 0; arr1_idx0 < len1; arr1_idx0++) {
// no offset here
let result_idx0 = arr1_idx0 + arr1_idx0_offset;
result[result_idx0] = arr1[arr1_idx0];
}
// copy second array into result
for (let arr2_idx0 = 0; arr2_idx0 < len2; arr2_idx0++) {
// offset by the length of the first array
let result_idx0 = arr2_idx0 + arr2_idx0_offset;
result[result_idx0] = arr2[arr2_idx0];
}
return result;
}
/**
* Cryptographically random bytes
*/
function strong_rand_bytes(how_many) {
let arr = new Uint8Array(how_many);
(new Crypto()).getRandomValues(arr);
return arr;
}
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
function bytes_to_bigint(bytes) {
let n = 0n;
for (let b of bytes) {
// move first, then add
// otherwise it ends on a move
// imperative languages are for losers
n <<= 8n;
n += BigInt(b);
}
return n;
}
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
function bigint_to_bytes(q) {
if (q < 0n) {
throw new Error('q < 0n: ' + q);
}
let arr_reverse = [];
while (q > 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return new Uint8Array(arr_reverse);
}
/**
* Get an uninitialized bitstring
*
* @internal
*/
function bits_null(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
return { bit_length: bit_length,
bytes: result };
}
/**
* Get a bitstring of a given length where every value is 0.
*/
function bits_zeros(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
for (let i0 = 0; i0 < byte_length; i0++) {
result[i0] = 0;
}
return { bit_length: bit_length,
bytes: result };
}
/**
* Get a bitstring of a given length where every value is 1.
*/
function bits_ones(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
// fill everything except the last byte with 255s
for (let i0 = 0; i0 < (byte_length - 1); i0++) {
result[i0] = 255;
}
// alright so the last byte
// ok so the number of leading 0s is
// 8 - (bit_length % 8)
let num_trailing_zero_bits = 8 - (bit_length % 8);
// the trailing byte is 255 << that
// e.g. 3 trailing 0s
// 1111_1111 -> 1111_1000
let last_byte = 255 << num_trailing_zero_bits;
let last_byte_idx0 = byte_length - 1;
result[last_byte_idx0] = last_byte;
return { bit_length: bit_length,
bytes: result };
}
/**
* Get the bit at a given 0-index
*/
function bits_i0th(bit_idx0, bits) {
// first task is figuring out what byte we're at
// for instance if we want bit 27
// 3*8 = 24 =< 27 < 4*8
// so it's Math.floor(bit_idx0 / 8)
let byte_idx0 = Math.floor(bit_idx0 / 8);
// let's fetch the byte and work with that
let the_byte = bits.bytes[byte_idx0];
// ok so let's go with 27 again
// 27 = 3 mod 8
// so we bitshift right by (8 - 3)
// and then take the remainder dividing by 2
// --B-_---- -> ----_---B -> 0000_000B
let bsr = 8 - (bit_idx0 % 8);
return (the_byte >> bsr) % 2;
}
/**
* Concatenate two bitstrings
*/
function bits_concat(bits1, bits2) {
let result_bit_length = bits1.bit_length + bits2.bit_length;
let bytes1 = bits1.bytes;
let bytes2 = bits2.bytes;
// using zeros here because of our xor trick in a minute
let result_bits = bits_null(result_bit_length);
let result_bytes = result_bits.bytes;
// go along each byte in result, and compute the byte boundary
for (let i = 0; i < result_bytes.length; i++) {
// ABCD_EFGH _
// 0123_4567 8
// this is the bit index of the leftmost bit in this byte
let start_bit_bi0 = i * 8;
let next_start_bit_bi0 = start_bit_bi0 + 8;
// does the bit at the beginning of this byte correspond to the first array?
// strict comparison:
// suppose i = 0,
// suppose bit_length1 is 0
// then this says no, go to second array
// suppose bl1 = 1,
// this says start at first array
let start_bit_is_of_first_array = start_bit_bi0 < bits1.bit_length;
// weak comparison:
// suppose bit_length1 = 8
// ABCD_EFGH _
// 0123_4567 8
// ^
// start_bit_bi0 ^ next_start_bit_bi0
let stop_bit_is_of_first_array = next_start_bit_bi0 <= bits1.bit_length;
// is this a bytes1 byte
let is_bytes1_byte = start_bit_is_of_first_array && stop_bit_is_of_first_array;
let is_boundary_byte = start_bit_is_of_first_array && !stop_bit_is_of_first_array;
// need to work out the ping_pong bs up here because js is dumb and I
// can't put lets between elseifs
// alright, now we're in the case of only copying from the second array
// we have two cases:
// ping-pong:
// ABCD_EFGH 1234_5678
// - ---- ---
// copying these bits
// ping:
// ABCD_EFGH <end>
// - ---- 000
//
// how to distinguish between these two??
//
// we're in the ping case when the start_bit_bi0 corresponds to the
// final byte of the second array
//
// ok
//
// we need to compute the bit address in the second array that
// corresponds to the bit address at the beginning of this byte in the
// result array
let bits2_addr_bi0 = start_bit_bi0 - bits1.bit_length;
// I think the variable is
// bits_left_to_copy = bits2.bit_length - bit_addr2_bi0
// no + 1 because the current bit is uncopied,
// so if bit_addr2_bi0 = 7 and bits2.bit_length is 8, it means we
// have the last bit to copy
// cases:
// bits_left_to_copy <= 0 ->
// this would mean we have more bits to copy, but are out of
// source bits. should be impossible if bits_null is correct
// bits_left_to_copy <= 8 ->
// this would mean we are going to fill this last byte in the
// result array with the correct bits from array2, but how we
// do this will depend on how those are arranged in bytes2
// (whether we grab one or two bytes)
//
// this is the tricky case
//
// I think what matters here is the byte address in the second array
// if we're on the last byte
// 8 < bits_left_to_copy ->
// this means we can safely grab two bytes from bytes2, and do
// our bitshifting to make it correct
//
// FIXME
let bits_left_to_copy = bits2.bit_length - bits2_addr_bi0;
// no the variable that matters is which byte we're on in the result
let this_bytes2_addr_i0 = Math.floor(bits2_addr_bi0 / 8);
let next_bytes2_addr_i0 = this_bytes2_addr_i0 + 1;
let bitshift_amt = bits1.bit_length % 8;
let ping = next_bytes2_addr_i0 === bytes2.length;
// simple case: this is a byte from the first array
// just copy it
if (is_bytes1_byte)
result_bytes[i] = bytes1[i];
// this is a boundary byte
// further cases:
// second bit length is 0 ->
// ABCD_EF-- <empty>
// ^ starting here
// just copy first byte and move along
else if (is_boundary_byte && (bits2.bit_length === 0))
result_bytes[i] = bytes1[i];
// boundary byte, and there is at least one byte in the second array
else if (is_boundary_byte) {
// copy over the first byte
result_bytes[i] = bytes1[i];
// take the first byte from the second array
let first_byte_of_second_array = bytes2[0];
// bytes1:
// ABCD_EF00
// 6
// bytes2:
// 1234_5678
// 0000_0012
// and bitshift it right by that amount
let bitshift_amt = bits1.bit_length % 8;
result_bytes[i] ^= first_byte_of_second_array >> bitshift_amt;
}
// last byte of second array
else if (ping)
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt);
// ping-pong: not last byte of second array
else
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt) ^ (bytes2[next_bytes2_addr_i0] << bitshift_amt);
}
return { bit_length: result_bit_length,
bytes: result_bytes };
}
//# sourceMappingURL=bin.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,30 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export { encode, decode, byte_of_word, check_word, check_byte, words };
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
declare function encode(bytes: Uint8Array): string;
/**
* Decode a FAERT string into bytes
*/
declare function decode(faert: string): safe.Safe<Uint8Array, string>;
/**
* given a word, find its index
*/
declare function byte_of_word(word: string): safe.Safe<number, string>;
/**
* compute the check word of an array
*/
declare function check_word(bytes: Uint8Array): string;
/**
* given an array, compute the xor of all the bytes in the array
*/
declare function check_byte(bytes: Uint8Array): number;
declare let words: string[];
@@ -0,0 +1,344 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export { encode, decode, byte_of_word, check_word, check_byte, words };
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
function encode(bytes) {
// initial accumulator
let words_acc = [];
// go along each byte and look up the word
// add it to the accumulator
for (let this_byte of bytes) {
let this_word = words[this_byte];
words_acc.push(this_word);
}
// prepend check word to phrase
// yes craig it would be faster to do the check byte inline
// the usage case here is 64 byte strings
// double pass is not a big deal
return check_word(bytes) + ' ' + words_acc.join(' ');
}
/**
* Decode a FAERT string into bytes
*/
function decode(faert) {
let all_words = faert.split(' ');
let input_check_word = all_words[0];
let input_words = all_words.slice(1);
// accumulator
let computed_bytes = [];
// loop over words and figure out accumulator
for (let this_input_word of input_words) {
let maybe_this_byte = byte_of_word(this_input_word);
// if the word is an allowable word, add it to the accumulator
if (maybe_this_byte.ok) {
let this_byte = maybe_this_byte.result;
computed_bytes.push(this_byte);
}
// error case, propagate the error up the call chain
else
return maybe_this_byte;
}
// at this point, we can assume we correctly decoded all words
// compute the check byte
let computed_bytes_u8s = new Uint8Array(computed_bytes);
let computed_check_word = check_word(computed_bytes_u8s);
// check if it is correct
// if so, return the computed bytes
if (computed_check_word === input_check_word)
return safe.ok(computed_bytes_u8s);
// otherwise, return an error
else
return safe.error('checksum failure! computed check word: ' + computed_check_word + '; input check word: ' + input_check_word);
}
/**
* given a word, find its index
*/
function byte_of_word(word) {
for (let i = 0; i <= 255; i++) {
if (word === words[i])
return safe.ok(i);
}
return safe.error('invalid word: ' + word);
}
/**
* compute the check word of an array
*/
function check_word(bytes) {
return words[check_byte(bytes)];
}
/**
* given an array, compute the xor of all the bytes in the array
*/
function check_byte(bytes) {
let check_byte = 0;
for (let this_byte of bytes)
check_byte ^= this_byte;
return check_byte;
}
let words = [
"able",
"abuse",
"acquire",
"adjust",
"agent",
"air",
"alert",
"alpha",
"anger",
"answer",
"any",
"argue",
"around",
"assume",
"asthma",
"aunt",
"awkward",
"balcony",
"barrel",
"because",
"behave",
"bicycle",
"bike",
"blind",
"blouse",
"bonus",
"bottom",
"breeze",
"brother",
"bubble",
"burger",
"butter",
"can",
"cannon",
"cargo",
"catalog",
"caught",
"century",
"chaos",
"chicken",
"churn",
"cinnamon",
"clever",
"clock",
"clown",
"collect",
"conduct",
"convince",
"correct",
"cradle",
"crane",
"crime",
"cross",
"crystal",
"curve",
"daughter",
"debris",
"decrease",
"deny",
"deputy",
"despair",
"diesel",
"dinner",
"distance",
"document",
"donate",
"drama",
"drink",
"dutch",
"earth",
"educate",
"elbow",
"employ",
"endless",
"enlist",
"enter",
"equal",
"eternal",
"example",
"exhibit",
"exotic",
"faculty",
"famous",
"fault",
"feature",
"fiber",
"filter",
"firm",
"flame",
"flush",
"follow",
"forward",
"frame",
"fringe",
"future",
"game",
"gate",
"gift",
"glare",
"glow",
"goat",
"grab",
"grief",
"guilt",
"hand",
"hawk",
"health",
"hen",
"hire",
"honey",
"hover",
"hurry",
"hybrid",
"impose",
"inch",
"inherit",
"injury",
"install",
"iron",
"jazz",
"joke",
"just",
"kit",
"kitchen",
"language",
"laundry",
"leader",
"lend",
"leopard",
"license",
"live",
"lobster",
"lounge",
"magnet",
"mail",
"mansion",
"mass",
"math",
"media",
"message",
"metal",
"misery",
"mix",
"more",
"mountain",
"museum",
"mutual",
"narrow",
"nerve",
"next",
"note",
"obey",
"obtain",
"offer",
"once",
"orange",
"ostrich",
"over",
"owner",
"palace",
"patch",
"pave",
"pen",
"phrase",
"piece",
"pizza",
"plunge",
"polar",
"pool",
"power",
"pretty",
"private",
"protect",
"pulp",
"purity",
"quit",
"quote",
"raise",
"razor",
"recall",
"region",
"relief",
"rent",
"rescue",
"review",
"ride",
"risk",
"roof",
"rough",
"saddle",
"salmon",
"sand",
"scene",
"scrub",
"season",
"seek",
"series",
"shed",
"shoe",
"sick",
"silent",
"situate",
"skill",
"slide",
"slush",
"snack",
"solar",
"soul",
"special",
"sphere",
"spot",
"spy",
"stairs",
"stereo",
"strategy",
"stuff",
"success",
"sunny",
"surge",
"swear",
"symptom",
"tail",
"ten",
"tent",
"theme",
"thumb",
"tiny",
"toe",
"tooth",
"topic",
"trade",
"trash",
"trophy",
"truly",
"tumble",
"typical",
"uncle",
"unfair",
"until",
"upper",
"useless",
"van",
"venue",
"video",
"visa",
"vocal",
"walk",
"waste",
"wedding",
"weekend",
"wide",
"winner",
"wise",
"wood",
"wrist",
"zero"
];
//# sourceMappingURL=faert.js.map
@@ -0,0 +1 @@
{"version":3,"file":"faert.js","sourceRoot":"","sources":["../src/faert.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,EACR,CAAA;AAED,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC;;GAEG;AACH,SACA,MAAM,CACD,KAAkB;IAGnB,sBAAsB;IACtB,IAAI,SAAS,GAAoB,EAAE,CAAC;IAEpC,0CAA0C;IAC1C,4BAA4B;IAC5B,KAAK,IAAI,SAAS,IAAI,KAAK,EAC3B;QACI,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC7B;IAED,+BAA+B;IAC/B,2DAA2D;IAC3D,yCAAyC;IACzC,gCAAgC;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAID;;GAEG;AACH,SACA,MAAM,CACD,KAAc;IAGf,IAAI,SAAS,GAA0B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,gBAAgB,GAAmB,SAAS,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,WAAW,GAAwB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEzD,cAAc;IACd,IAAI,cAAc,GAAmB,EAAE,CAAC;IAExC,6CAA6C;IAC7C,KAAK,IAAI,eAAe,IAAI,WAAW,EACvC;QACI,IAAI,eAAe,GAA+B,YAAY,CAAC,eAAe,CAAC,CAAC;QAChF,8DAA8D;QAC9D,IAAI,eAAe,CAAC,EAAE,EACtB;YACI,IAAI,SAAS,GAAY,eAAe,CAAC,MAAM,CAAC;YAChD,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;QACD,oDAAoD;;YAEhD,OAAO,eAAe,CAAC;KAC9B;IAED,8DAA8D;IAC9D,yBAAyB;IACzB,IAAI,kBAAkB,GAAiB,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,mBAAmB,GAAY,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAElE,yBAAyB;IACzB,mCAAmC;IACnC,IAAI,mBAAmB,KAAK,gBAAgB;QACxC,OAAO,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IACvC,6BAA6B;;QAEzB,OAAO,IAAI,CAAC,KAAK,CAAC,yCAAyC,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;AACvI,CAAC;AAID;;GAEG;AACH,SACA,YAAY,CACP,IAAY;IAGb,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,IAAE,GAAG,EAAE,CAAC,EAAE,EACzB;QACI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACzB;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AAID;;GAEG;AACH,SACA,UAAU,CACL,KAAiB;IAGlB,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAGD;;GAEG;AACH,SACA,UAAU,CACL,KAAiB;IAGlB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,SAAS,IAAI,KAAK;QACvB,UAAU,IAAI,SAAS,CAAC;IAC5B,OAAO,UAAU,CAAC;AACtB,CAAC;AAID,IAAI,KAAK,GAAG;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;CACT,CAAA"}
@@ -0,0 +1,37 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export { decoded_data, decode_result, decode, encode };
/**
* Data that RLP can encode. Also the result of decoding.
*/
declare type decoded_data = Uint8Array | Array<decoded_data>;
/**
* Decoding can have a remainder
*/
declare type decode_result = {
decoded_data: decoded_data;
remainder: Uint8Array;
};
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
declare function decode(bytes: Uint8Array): decode_result;
/**
* Encode some decoded data
*/
declare function encode(data: decoded_data): Uint8Array;
@@ -0,0 +1,382 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export { decode, encode };
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
function decode(bytes) {
// check the first byte
let first_byte = bytes[0];
let rest = bytes.slice(1);
// if the first byte is between 0 and 127, that is the data
if (first_byte <= 127) {
return dr(new Uint8Array([first_byte]), rest);
}
// if the first byte is between 128 and 183 = 128 + 55, it is a bytestring
// and the length is Byte - 128
else if (first_byte <= 183) {
let payload_byte_length = first_byte - 128;
let payload = rest.slice(0, payload_byte_length);
let rest2 = rest.slice(payload_byte_length);
return dr(payload, rest2);
}
// if the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
// bytestring. the byte length of bytestring is FirstByte - 183. Then pull
// out the actual data
else if (first_byte <= 191) {
let byte_length_of_byte_length = first_byte - 183;
let bytes_of_byte_length = rest.slice(0, byte_length_of_byte_length);
let byte_length = bytes_to_number(bytes_of_byte_length);
let bytes = rest.slice(byte_length_of_byte_length, byte_length + byte_length_of_byte_length);
let rest2 = rest.slice(byte_length + byte_length_of_byte_length);
return dr(bytes, rest2);
}
// If the first byte is between 192 and 247 = 192 + 55, it is a list. The
// byte length of the list-payload is FirstByte - 192. Then the list
// payload, which needs to be decoded on its own.
else if (first_byte <= 247) {
let byte_length_of_list = first_byte - 192;
let list_payload = rest.slice(0, byte_length_of_list);
let list = decode_list(list_payload);
let rest2 = rest.slice(byte_length_of_list);
return dr(list, rest2);
}
// If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a
// list. The byte length of the byte length of the list-payload is
// FirstByte - 247. Then the byte length of the list. Then the list
// payload, which needs to be decoded on its own.
else {
let byte_length_of_byte_length = first_byte - 247;
let bytes_of_byte_length = rest.slice(0, byte_length_of_byte_length);
let byte_length = bytes_to_number(bytes_of_byte_length);
let list_bytes = rest.slice(byte_length_of_byte_length, byte_length + byte_length_of_byte_length);
let list = decode_list(list_bytes);
let rest2 = rest.slice(byte_length + byte_length_of_byte_length);
return dr(list, rest2);
}
}
/**
* Decode a list payload (non-prefixed) into an `Array<decoded_data>`.
*
* Repeatedly decodes an element off the list until remainder is empty.
*
* @internal
*/
function decode_list(bytes) {
let arr = [];
while (bytes.length > 0) {
// grab an item off the bytes
let { decoded_data, remainder } = decode(bytes);
// push it
arr.push(decoded_data);
// update bytes
bytes = remainder;
}
return arr;
}
/**
* Convert bytestring to number
*
* @internal
*/
function bytes_to_number(bytes) {
let n = 0;
for (let b of bytes) {
n <<= 8;
n += b;
}
return n;
}
/**
* Make a `decode_result` containing the two arguments
*
* @internal
*/
function dr(x, y) {
return { decoded_data: x,
remainder: y };
}
//=============================================================================
//=============================================================================
// ENCODING
//=============================================================================
//=============================================================================
/**
* Encode some decoded data
*/
function encode(data) {
// is it an array or data
if (is_binary(data)) {
return encode_binary(data);
}
else if (is_list(data)) {
return encode_list(data);
}
else {
throw new Error('encode told to encode something that is not an array or a binary: ' + data);
}
}
/**
* Encode a binary into RLP
*
* @internal
*/
function encode_binary(bytes) {
let len = bytes.length;
// single byte case when the byte is between 0..127
// result is the bytestring containing the byte itself
if ((len === 1) &&
(bytes[0] <= 127)) {
return bytes;
}
// if the bytestring is 0..55 bytes long, the first byte in the result is
// 128 + Length, the rest of the result bytestring is the input string
else if (len <= 55) {
// construct the result
// <<128 + Len, Bytes/binary>>
let result = new Uint8Array(len + 1);
// first byte is 128 + length
result[0] = 128 + len;
// copy input bytes into result
for (let input_idx0 = 0; input_idx0 < len; input_idx0++) {
let result_idx0 = input_idx0 + 1;
result[result_idx0] = bytes[input_idx0];
}
return result;
}
// if the bytestring is more than 55 bytes long, the first byte is 183 +
// ByteLengthOfByteLength, followed by the byte length, followed by the
// bytes
else {
let len_bytes = encode_unsigned(len);
let len_bytes_length = len_bytes.length;
// total array is
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
let result = new Uint8Array(1 + len_bytes_length + len);
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
result[0] = 183 + len_bytes_length;
// copy len_bytes into result
for (let len_bytes_idx0 = 0; len_bytes_idx0 < len_bytes_length; len_bytes_idx0++) {
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0 = len_bytes_idx0 + 1;
result[result_idx0] = len_bytes[len_bytes_idx0];
}
// copy original byte array into result
for (let input_idx0 = 0; input_idx0 < len; input_idx0++) {
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0 = input_idx0 + (1 + len_bytes_length);
result[result_idx0] = bytes[input_idx0];
}
// finally, return the result
return result;
}
}
/**
* Encode a list
*
* @internal
*/
function encode_list(list) {
// first encode every element in the list, then branch
let payloads = list.map(encode);
let payload = uint8arr_concat(payloads);
let payload_size = payload.length;
// if the payload size is in 0..55, then the first byte is 192 + payload
// size, followed by the payload
if (payload_size <= 55) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
let result = new Uint8Array(1 + payload_size);
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
result[0] = 192 + payload_size;
// copy the rest of the payload into result
for (let payload_idx0 = 0; payload_idx0 < payload_size; payload_idx0++) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
let result_idx0 = payload_idx0 + 1;
result[result_idx0] = payload[payload_idx0];
}
return result;
}
// if the payload size is greater than 55, the first byte is 247 +
// size_of_payload_size, followed by the payload size, followed by the
// payload
else {
// compute the payload size size
let payload_size_bytes = encode_unsigned(payload_size);
let payload_size_size = payload_size_bytes.length;
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
let result = new Uint8Array(1 + payload_size_size + payload_size);
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// first byte is 247 + payload_size_size
result[0] = 247 + payload_size_size;
// copy the payload_size_bytes into result
for (let psb_idx0 = 0; psb_idx0 < payload_size_size; psb_idx0++) {
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 byte for this
let result_idx0 = psb_idx0 + 1;
result[result_idx0] = payload_size_bytes[psb_idx0];
}
// copy the payload into result
for (let pb_idx0 = 0; pb_idx0 < payload_size; pb_idx0++) {
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 + payload_size_size bytes for this
let result_idx0 = pb_idx0 + (1 + payload_size_size);
result[result_idx0] = payload[pb_idx0];
}
// finally, return result
return result;
}
}
/**
* Encode a number as a bytestring
*
* Not for general use, this assumes the input number is greater than 55
*
* @internal
*/
function encode_unsigned(n) {
// can assume that n initially is greater than 55
// have to encode it in reverse order
let arr = [];
// repeated division by 256 with remainder
//
// example: suppose bign was 1234 and we were dividing by 10
//
// iteration 0:
// bign = 1234
// arr = []
// ---
// bign / 10 = 123
// bign % 10 = 4
// ---
// bign = 123
// arr = [4]
//
// iteration 1:
// bign = 123
// arr = [4]
// ---
// bign / 10 = 12
// bign % 10 = 3
// ---
// bign = 12
// arr = [4, 3]
//
// iteration 2:
// bign = 12
// arr = [4, 3]
// ---
// bign / 10 = 1
// bign % 10 = 2
// ---
// bign = 1
// arr = [4, 3, 2]
//
// iteration 3:
// bign = 1
// arr = [4, 3, 2]
// ---
// bign / 10 = 0
// bign % 10 = 1
// ---
// bign = 0
// arr = [4, 3, 2, 1]
//
// iteration 4:
// bign = 0
// arr = [4, 3, 2, 1]
// ---
// DONE
while (n > 0) {
arr.push(n % 256);
n >>= 8;
}
// reverse and make into Uint8Array
arr.reverse();
return new Uint8Array(arr);
}
/**
* concatenate an array of `Uint8Array`s into a single Uint8Array
*
* @internal
*/
function uint8arr_concat(arrs) {
// total length
let total_len = arrs.reduce(// fold
function (acc_len, this_uint8array) {
return acc_len + this_uint8array.length;
},
// initial accumulator
0);
// start up result
let result = new Uint8Array(total_len);
let result_idx0 = 0;
// concatenate
for (let this_uint8arr of arrs) {
// bytewise copy of this uint8array
for (let this_uint8arr_idx0 = 0; this_uint8arr_idx0 < this_uint8arr.length; this_uint8arr_idx0++) {
// copy byte and increment result idx0
result[result_idx0] = this_uint8arr[this_uint8arr_idx0];
result_idx0++;
}
}
return result;
}
/**
* returns true if input is `instanceof Uint8Array`
*
* @internal
*/
function is_binary(x) {
return (x instanceof Uint8Array);
}
/**
* returns true if input is `instanceof Array`
*
* @internal
*/
function is_list(x) {
return (x instanceof Array);
}
//# sourceMappingURL=rlp.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,66 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export { Safe, Ok, Error, ok, error, unsafe };
/**
* Type that catches positive errors
*/
declare type Safe<ok_t, err_t> = Ok<ok_t> | Error<err_t>;
/**
* Ok type
*/
declare type Ok<ok_t> = {
ok: true;
result: ok_t;
};
/**
* Error type
*/
declare type Error<err_t> = {
ok: false;
error: err_t;
};
/**
* Constructs an `Ok` value from a pure value
*/
declare function ok<ok_t>(x: ok_t): Ok<ok_t>;
/**
* Constructs an `Error` value from a pure value
*/
declare function error<err_t>(x: err_t): Error<err_t>;
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
declare function unsafe<ok_t, err_t>(x: Safe<ok_t, err_t>): ok_t;
@@ -0,0 +1,58 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export { ok, error, unsafe };
/**
* Constructs an `Ok` value from a pure value
*/
function ok(x) {
return { ok: true, result: x };
}
/**
* Constructs an `Error` value from a pure value
*/
function error(x) {
return { ok: false, error: x };
}
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
function unsafe(x) {
if (x.ok)
return x.result;
else
throw x.error;
}
//# sourceMappingURL=safe.js.map
@@ -0,0 +1 @@
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAIH,EAAE,EACF,KAAK,EACL,MAAM,EACT,CAAA;AA2BD;;GAEG;AACH,SACA,EAAE,CAEG,CAAQ;IAGT,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;AACjC,CAAC;AAID;;GAEG;AACH,SACA,KAAK,CAEA,CAAQ;IAGT,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;AACjC,CAAC;AAID;;;GAGG;AACH,SACA,MAAM,CAED,CAAoB;IAGrB,IAAI,CAAC,CAAC,EAAE;QACJ,OAAO,CAAC,CAAC,MAAM,CAAC;;QAEhB,MAAM,CAAC,CAAC,KAAK,CAAC;AACtB,CAAC"}
@@ -0,0 +1,418 @@
/**
* Base58 encoding/decoding
*/
export {
encode,
decode
}
//=============================================================================
// ENCODING
//=============================================================================
/**
* Encode a Uint8Array into base58
*/
function
encode
(binary : Uint8Array)
: string
{
let num_leading_zeros : number = nlz(binary);
let rest : Uint8Array = binary.slice(num_leading_zeros);
let ones : string = encode_zeros(num_leading_zeros);
let rest_b58 : string = encode_rest(rest);
let result : string = ones + rest_b58;
return result;
}
/**
* count the number of leading zeros in a uint8array
*
* @internal
*/
function
nlz
(bytes: Uint8Array)
: number
{
let n = 0;
for (let this_byte of bytes)
{
if (0 === this_byte) { n++; }
else { break; }
}
return n;
}
/**
* Generate a bunch of '1's for however many leading zeros there are
*
* @internal
*/
function
encode_zeros
(how_many : number)
: string
{
let ones : string = '';
for (let i = 1;
i <= how_many;
i++)
{
ones += '1';
}
return ones;
}
/**
* Encode a Uint8Array that has no leading zeros
*
* @internal
*/
function
encode_rest
(bytes : Uint8Array)
: string
{
let bytes_bignum : bigint = bytes_to_bigint(bytes);
let result : string = bignum_to_base58(bytes_bignum);
return result;
}
/**
* Convert a bytestring to a bignum
*
* @internal
*/
function
bytes_to_bigint
(bytes: Uint8Array)
: bigint
{
let acc_bigint : bigint = 0n;
for(let this_byte of bytes)
{
acc_bigint <<= 8n;
acc_bigint += BigInt(this_byte);
}
return acc_bigint;
}
/**
* Convert a BigInt to Base58
*
* @internal
*/
function
bignum_to_base58
(q: bigint)
: string
{
let s = '';
while (q !== 0n)
{
let this_n : bigint = q % 58n;
q /= 58n;
let this_b58_char : string = bigint_to_char(this_n);
s = this_b58_char + s;
}
return s;
}
//=============================================================================
// DECODING
//=============================================================================
/**
* Decode a Base58 string into a Uint8Array
*/
function
decode
(base58: string)
: Uint8Array
{
let num_leading_ones : number = nlo(base58);
let rest : string = base58.slice(num_leading_ones);
let zeros : Array<number> = decode_ones(num_leading_ones);
let rest_arr : Array<number> = decode_rest(rest);
let pre_result : Array<number> = zeros.concat(rest_arr);
return new Uint8Array(pre_result);
}
/**
* count the number of leading 1 characters in a uint8array
*
* @internal
*/
function
nlo
(base58: string)
: number
{
let n = 0;
for (let this_char of base58)
{
if ('1' === this_char) { n++; }
else { break; }
}
return n;
}
/**
* Generate a bunch of '0's for however many leading ones there are
*
* @internal
*/
function
decode_ones
(how_many : number)
: Array<number>
{
let zeros : Array<number> = [];
for (let i = 1;
i <= how_many;
i++)
{
zeros.push(0);
}
return zeros;
}
/**
* Decode a string that has no leading 1s
*
* @internal
*/
function
decode_rest
(base58: string)
: Array<number>
{
let result_bignum : bigint = base58_to_bigint(base58);
let result : Array<number> = bigint_to_base256(result_bignum);
return result;
}
/**
* Convert a base58 string to a bignum
*
* @internal
*/
function
base58_to_bigint
(base58: string)
: bigint
{
let acc_bigint : bigint = 0n;
for(let this_char of base58)
{
acc_bigint *= 58n;
acc_bigint += char_to_bigint(this_char);
}
return acc_bigint;
}
/**
* convert a bignum into a byte array
*
* @end
*/
function
bigint_to_base256
(q: bigint)
: Array<number>
{
let arr_reverse = [];
while(q !== 0n)
{
let r: number = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return arr_reverse;
}
//=============================================================================
// TRANSLATION TABLES
//=============================================================================
/**
* Base58 integer -> character conversion table
*
* @internal
*/
function
bigint_to_char
(n: bigint)
: string
{
switch(n) {
case 0n: return '1';
case 1n: return '2';
case 2n: return '3';
case 3n: return '4';
case 4n: return '5';
case 5n: return '6';
case 6n: return '7';
case 7n: return '8';
case 8n: return '9';
case 9n: return 'A';
case 10n: return 'B';
case 11n: return 'C';
case 12n: return 'D';
case 13n: return 'E';
case 14n: return 'F';
case 15n: return 'G';
case 16n: return 'H';
case 17n: return 'J';
case 18n: return 'K';
case 19n: return 'L';
case 20n: return 'M';
case 21n: return 'N';
case 22n: return 'P';
case 23n: return 'Q';
case 24n: return 'R';
case 25n: return 'S';
case 26n: return 'T';
case 27n: return 'U';
case 28n: return 'V';
case 29n: return 'W';
case 30n: return 'X';
case 31n: return 'Y';
case 32n: return 'Z';
case 33n: return 'a';
case 34n: return 'b';
case 35n: return 'c';
case 36n: return 'd';
case 37n: return 'e';
case 38n: return 'f';
case 39n: return 'g';
case 40n: return 'h';
case 41n: return 'i';
case 42n: return 'j';
case 43n: return 'k';
case 44n: return 'm';
case 45n: return 'n';
case 46n: return 'o';
case 47n: return 'p';
case 48n: return 'q';
case 49n: return 'r';
case 50n: return 's';
case 51n: return 't';
case 52n: return 'u';
case 53n: return 'v';
case 54n: return 'w';
case 55n: return 'x';
case 56n: return 'y';
case 57n: return 'z';
default:
throw new Error('invalid base58 bigint: ' + n);
}
}
/**
* Base58 character -> integer conversion table
*
* @internal
*/
function
char_to_bigint
(s: string)
: bigint
{
switch(s) {
case '1': return 0n;
case '2': return 1n;
case '3': return 2n;
case '4': return 3n;
case '5': return 4n;
case '6': return 5n;
case '7': return 6n;
case '8': return 7n;
case '9': return 8n;
case 'A': return 9n;
case 'B': return 10n;
case 'C': return 11n;
case 'D': return 12n;
case 'E': return 13n;
case 'F': return 14n;
case 'G': return 15n;
case 'H': return 16n;
case 'J': return 17n;
case 'K': return 18n;
case 'L': return 19n;
case 'M': return 20n;
case 'N': return 21n;
case 'P': return 22n;
case 'Q': return 23n;
case 'R': return 24n;
case 'S': return 25n;
case 'T': return 26n;
case 'U': return 27n;
case 'V': return 28n;
case 'W': return 29n;
case 'X': return 30n;
case 'Y': return 31n;
case 'Z': return 32n;
case 'a': return 33n;
case 'b': return 34n;
case 'c': return 35n;
case 'd': return 36n;
case 'e': return 37n;
case 'f': return 38n;
case 'g': return 39n;
case 'h': return 40n;
case 'i': return 41n;
case 'j': return 42n;
case 'k': return 43n;
case 'm': return 44n;
case 'n': return 45n;
case 'o': return 46n;
case 'p': return 47n;
case 'q': return 48n;
case 'r': return 49n;
case 's': return 50n;
case 't': return 51n;
case 'u': return 52n;
case 'v': return 53n;
case 'w': return 54n;
case 'x': return 55n;
case 'y': return 56n;
case 'z': return 57n;
default:
throw new Error('invalid base58 char: ' + s);
}
}
@@ -0,0 +1,655 @@
/**
* Base64 Utility Functions in TypeScript
*/
export {
encode,
decode
}
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
function
encode
(bytes: Uint8Array)
: string
{
// slice the array
// length of head is a multiple of 3
// treat the tail as a special case
let {head, tail, tail_len} = slice3k(bytes);
let head_str : string = encode_head(head);
let tail_str : string = encode_tail(tail, tail_len);
return head_str + tail_str;
}
type slice3k
= {head : Uint8Array,
tail : Uint8Array,
tail_len : number};
/**
* Take a Uint8Array, take the first 3k (k >= 0) bytes, put them in head, and
* the remaining 0,1, or 2 bytes, put them in tail
*
* @internal
*/
function
slice3k
(bytes: Uint8Array)
: slice3k
{
let len : number = bytes.length;
// too lazy to look up how to do integer division in js so this will do
let tail_len : number = len % 3;
let head_len : number = len - tail_len;
// for slice:
// first argument is the 0-index of the start
// second - first is the length of the slice
let head : Uint8Array = bytes.slice(0, head_len);
// empty second argument means go to the end
let tail : Uint8Array = bytes.slice(head_len);
return {head : head,
tail : tail,
tail_len : tail_len};
}
/**
* Encode a Uint8Array whose length is known to be a multiple of 3
*
* @internal
*/
function
encode_head
(head_bytes: Uint8Array)
: string
{
// can assume length of bytes is a multiple of 3
// start index at 0
// increment by 3
let head_bytes_len : number = head_bytes.length;
let max_idx0 : number = head_bytes_len - 1;
let head_str_acc : string = '';
for(let this_3slice_start_idx0 = 0;
this_3slice_start_idx0 <= max_idx0;
this_3slice_start_idx0 += 3)
{
let this_3slice_bytes : Uint8Array = head_bytes.slice(this_3slice_start_idx0, this_3slice_start_idx0 + 3);
let this_3slice_str : string = encode3(this_3slice_bytes);
head_str_acc += this_3slice_str;
}
return head_str_acc;
}
/**
* Encode a 3 bytes into base64 notation
*
* @internal
*/
function
encode3
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
let b1 : number = bytes[1];
let b2 : number = bytes[2];
// ABCDEFGH 12345678 abcdefgh
// b0 b1 b2
// ABCDEF GH1234 5678ab cdefgh
// n0 n1 n2 n3
let n0 : number = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// b2 = abcdefgh
// b2 >> 6 = ______ab
// n2 = __5678ab
let n2 : number = ((b1 % 16) << 2) + (b2 >> 6);
// b2 = abcdefgh
// 64 = _1______
// n3 = __cdefgh
let n3 : number = b2 % 64;
// convert to chars
let s0 : string = int2char(n0);
let s1 : string = int2char(n1);
let s2 : string = int2char(n2);
let s3 : string = int2char(n3);
// retrvn
return s0 + s1 + s2 + s3;
}
/**
* Encode the final 0, 1, or 2 bytes
*
* @internal
*/
function
encode_tail
(tail_bytes : Uint8Array,
tail_len : number)
: string
{
switch(tail_len) {
case 0: return '';
case 1: return encode1(tail_bytes);
case 2: return encode2(tail_bytes);
default:
throw new Error('encode_tail with tail_len = ' + tail_len);
}
}
/**
* Encode a single byte
*
* @internal
*/
function
encode1
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
// n0 = __ABCDEF
// b0 = ABCDEFGH
// b0 >> 2 = __ABCDEF
let n0 : number = b0 >> 2;
// n1 = __GH____
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
let n1 : number = (b0 % 4) << 4;
return int2char(n0) + int2char(n1) + '==';
}
/**
* Encode two bytes
*
* @internal
*/
function
encode2
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
let b1 : number = bytes[1];
// ABCDEFGH 12345678
// b0 b1
// ABCDEF GH1234 5678__
// n0 n1 n2
let n0 : number = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// n2 = __5678__
let n2 : number = (b1 % 16) << 2;
// convert to chars
let s0 : string = int2char(n0);
let s1 : string = int2char(n1);
let s2 : string = int2char(n2);
// retrvn
return s0 + s1 + s2 + '=';
}
/**
* Decode a base64-encoded string
*/
function
decode
(base64_str : string)
: Uint8Array
{
// length of the string is guaranteed to be a multiple of 4
// if the string is empty, return the empty array
let len = base64_str.length;
// this branching contains the implicit assertion that the length is a
// multiple of 4. If this is not true, the bottom branch is triggered.
// general case goes first because speeeeeed
if ( (4 < len)
&& (0 === (len % 4)))
{
// split the head and tail
let tail_start_idx0 : number = len - 4;
let head_s : string = base64_str.slice(0, tail_start_idx0);
let tail_s : string = base64_str.slice(tail_start_idx0);
// Using arrays because Uint8Arrays don't have a concat operation
let head_arr : Array<number> = decode_head(head_s);
let tail_arr : Array<number> = decode_tail(tail_s);
// silly to put these in variables but this is exactly the type of
// situation where JS type insanity shows up
//
// see: i forgot
// > [1,2,3] + [4,5,6]
// '1,2,34,5,6'
//
// Originally, I used + like some sort of moron who codes in a sane
// language
//
// seriously what is this language
//
// this is some clown behavior
let total_arr : Array<number> = head_arr.concat(tail_arr);
return new Uint8Array(total_arr);
}
// special case if the length is exactly 4
else if (4 === len)
{
// it's just a tail
return new Uint8Array(decode_tail(base64_str));
}
// empty string
else if (0 === len)
{
return new Uint8Array([]);
}
else
{
throw new Error('base64 decode: invalid string length: ' + len);
}
}
/**
* Decode a string known to not have any padding
*
* @internal
*/
function
decode_head
(s: string)
: Array<number>
{
// go 4 characters at a time
let max_i0 : number = s.length - 1;
let decoded_acc : Array<number> = [];
for(let i0 = 0;
i0 <= max_i0;
i0 += 4)
{
let this_slice_s : string = s.slice(i0, i0 + 4);
let this_slice_arr : Array<number> = decode3(this_slice_s);
// update accumulator
decoded_acc = decoded_acc.concat(this_slice_arr);
}
return decoded_acc;
}
/**
* Decode 4 characters that correspond to either 3 bytes, 2, bytes, or 1 byte
*
* @internal
*/
function
decode_tail
(s: string)
: Array<number>
{
// all that matters right now is the last 2 chars
// s0, s1, s2, s3
// 0 based indexing is so annoying
let s2 = s[2];
let s3 = s[3];
// braaaaaaaaaaaaaaaaaench
// two equals signs means 1 byte
if (('=' === s3) && ('=' === s2)) {
return decode1(s);
}
// one equals sign means 2 bytes
else if (('=' === s3)) {
return decode2(s);
}
// 0 equals signs means 3 bytes
else {
return decode3(s);
}
}
/**
* Decode a 4-character long base64 string corresponding to 3 bytes
*
* @internal
*/
function
decode3
(s: string)
: Array<number>
{
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
let s2 : string = s[2];
let s3 : string = s[3];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
let n2 : number = char2int(s2);
let n3 : number = char2int(s3);
// abcdef gh1234 5678ab cdefgh
// n0 n1 n2 n3
// abcdefgh 12345678 abcdefgh
// b0 b1 b2
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678ab
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 : number = ((n1 % 16) << 4) + (n2 >> 2);
// n2 = __5678ab
// 4 = _____1__
// n2 % 4 = ______ab
// (n2 % 4) << 6 = ab______
// n3 = __cdefgh
let b2 : number = ((n2 % 4) << 6) + n3;
return [b0, b1, b2];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function
decode2
(s: string)
: Array<number>
{
// xyz=
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
let s2 : string = s[2];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
let n2 : number = char2int(s2);
// abcdef gh1234 5678__
// n0 n1 n2
// abcdefgh 12345678
// b0 b1
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678__
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 : number = ((n1 % 16) << 4) + (n2 >> 2);
return [b0, b1];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function
decode1
(s: string)
: Array<number>
{
// xy==
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
// abcdef gh____
// n0 n1
// abcdefgh
// b0
// n0 = __abcdef
// n1 = __gh____
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
return [b0];
}
// FIXME: these tables would *probably* be faster if they were made into objects
/**
* Conversion table for base64 encode
*
* @internal
*/
function
int2char
(n: number)
: string
{
switch(n) {
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
case 5: return 'F';
case 6: return 'G';
case 7: return 'H';
case 8: return 'I';
case 9: return 'J';
case 10: return 'K';
case 11: return 'L';
case 12: return 'M';
case 13: return 'N';
case 14: return 'O';
case 15: return 'P';
case 16: return 'Q';
case 17: return 'R';
case 18: return 'S';
case 19: return 'T';
case 20: return 'U';
case 21: return 'V';
case 22: return 'W';
case 23: return 'X';
case 24: return 'Y';
case 25: return 'Z';
case 26: return 'a';
case 27: return 'b';
case 28: return 'c';
case 29: return 'd';
case 30: return 'e';
case 31: return 'f';
case 32: return 'g';
case 33: return 'h';
case 34: return 'i';
case 35: return 'j';
case 36: return 'k';
case 37: return 'l';
case 38: return 'm';
case 39: return 'n';
case 40: return 'o';
case 41: return 'p';
case 42: return 'q';
case 43: return 'r';
case 44: return 's';
case 45: return 't';
case 46: return 'u';
case 47: return 'v';
case 48: return 'w';
case 49: return 'x';
case 50: return 'y';
case 51: return 'z';
case 52: return '0';
case 53: return '1';
case 54: return '2';
case 55: return '3';
case 56: return '4';
case 57: return '5';
case 58: return '6';
case 59: return '7';
case 60: return '8';
case 61: return '9';
case 62: return '+';
case 63: return '/';
default: throw new Error("invalid base64 encode byte: " + n);
}
}
/**
* Conversion table for base64 decode
*
* @internal
*/
function
char2int
(s: string)
: number
{
switch(s) {
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 17;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
case 'a': return 26;
case 'b': return 27;
case 'c': return 28;
case 'd': return 29;
case 'e': return 30;
case 'f': return 31;
case 'g': return 32;
case 'h': return 33;
case 'i': return 34;
case 'j': return 35;
case 'k': return 36;
case 'l': return 37;
case 'm': return 38;
case 'n': return 39;
case 'o': return 40;
case 'p': return 41;
case 'q': return 42;
case 'r': return 43;
case 's': return 44;
case 't': return 45;
case 'u': return 46;
case 'v': return 47;
case 'w': return 48;
case 'x': return 49;
case 'y': return 50;
case 'z': return 51;
case '0': return 52;
case '1': return 53;
case '2': return 54;
case '3': return 55;
case '4': return 56;
case '5': return 57;
case '6': return 58;
case '7': return 59;
case '8': return 60;
case '9': return 61;
case '+': return 62;
case '/': return 63;
default: throw new Error("invalid base64 character: " + s);
}
}
@@ -0,0 +1,377 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export {
bytes_to_bigint,
bigint_to_bytes,
concat,
strong_rand_bytes
};
/**
* Concatenate two arrays
*/
function
concat
(arr1 : Uint8Array,
arr2 : Uint8Array)
: Uint8Array
{
let len1 : number = arr1.length;
let len2 : number = arr2.length;
let arr1_idx0_offset : number = 0;
let arr2_idx0_offset : number = len1;
let result_len : number = len1 + len2;
let result : Uint8Array = new Uint8Array(result_len);
// copy first array into result
for (let arr1_idx0 = 0;
arr1_idx0 < len1;
arr1_idx0++)
{
// no offset here
let result_idx0 : number = arr1_idx0 + arr1_idx0_offset;
result[result_idx0] = arr1[arr1_idx0];
}
// copy second array into result
for (let arr2_idx0 = 0;
arr2_idx0 < len2;
arr2_idx0++)
{
// offset by the length of the first array
let result_idx0 : number = arr2_idx0 + arr2_idx0_offset;
result[result_idx0] = arr2[arr2_idx0];
}
return result;
}
/**
* Cryptographically random bytes
*/
function
strong_rand_bytes
(how_many : number)
: Uint8Array
{
let arr = new Uint8Array(how_many);
(new Crypto()).getRandomValues(arr);
return arr;
}
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
function
bytes_to_bigint
(bytes: Uint8Array)
: bigint
{
let n : bigint = 0n;
for (let b of bytes) {
// move first, then add
// otherwise it ends on a move
// imperative languages are for losers
n <<= 8n;
n += BigInt(b);
}
return n;
}
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
function
bigint_to_bytes
(q: bigint)
: Uint8Array
{
if (q < 0n) {
throw new Error('q < 0n: ' + q);
}
let arr_reverse = [];
while (q > 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return new Uint8Array(arr_reverse);
}
/**
* Oh no, bitstrings in a language that only has bytestrings
*
* By convention these are `Uint8Array`s with byte length `ceil(bit_length /
* 8)`, and all trailing bits are zero.
*/
type bits =
{bit_length : number,
bytes : Uint8Array};
/**
* Get an uninitialized bitstring
*
* @internal
*/
function
bits_null
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
return {bit_length : bit_length,
bytes : result};
}
/**
* Get a bitstring of a given length where every value is 0.
*/
function
bits_zeros
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
for (let i0 = 0;
i0 < byte_length;
i0++)
{
result[i0] = 0;
}
return {bit_length : bit_length,
bytes : result};
}
/**
* Get a bitstring of a given length where every value is 1.
*/
function
bits_ones
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
// fill everything except the last byte with 255s
for (let i0 = 0;
i0 < (byte_length - 1);
i0++)
{
result[i0] = 255;
}
// alright so the last byte
// ok so the number of leading 0s is
// 8 - (bit_length % 8)
let num_trailing_zero_bits : number = 8 - (bit_length % 8);
// the trailing byte is 255 << that
// e.g. 3 trailing 0s
// 1111_1111 -> 1111_1000
let last_byte : number = 255 << num_trailing_zero_bits;
let last_byte_idx0 : number = byte_length - 1;
result[last_byte_idx0] = last_byte;
return {bit_length : bit_length,
bytes : result};
}
/**
* Get the bit at a given 0-index
*/
function
bits_i0th
(bit_idx0 : number,
bits : bits)
: number
{
// first task is figuring out what byte we're at
// for instance if we want bit 27
// 3*8 = 24 =< 27 < 4*8
// so it's Math.floor(bit_idx0 / 8)
let byte_idx0 : number = Math.floor(bit_idx0 / 8);
// let's fetch the byte and work with that
let the_byte : number = bits.bytes[byte_idx0];
// ok so let's go with 27 again
// 27 = 3 mod 8
// so we bitshift right by (8 - 3)
// and then take the remainder dividing by 2
// --B-_---- -> ----_---B -> 0000_000B
let bsr : number = 8 - (bit_idx0 % 8);
return (the_byte >> bsr) % 2;
}
/**
* Concatenate two bitstrings
*/
function
bits_concat
(bits1 : bits,
bits2 : bits)
: bits
{
let result_bit_length : number = bits1.bit_length + bits2.bit_length;
let bytes1 : Uint8Array = bits1.bytes;
let bytes2 : Uint8Array = bits2.bytes;
// using zeros here because of our xor trick in a minute
let result_bits : bits = bits_null(result_bit_length);
let result_bytes : Uint8Array = result_bits.bytes;
// go along each byte in result, and compute the byte boundary
for (let i = 0;
i < result_bytes.length;
i++)
{
// ABCD_EFGH _
// 0123_4567 8
// this is the bit index of the leftmost bit in this byte
let start_bit_bi0 : number = i * 8;
let next_start_bit_bi0 : number = start_bit_bi0 + 8;
// does the bit at the beginning of this byte correspond to the first array?
// strict comparison:
// suppose i = 0,
// suppose bit_length1 is 0
// then this says no, go to second array
// suppose bl1 = 1,
// this says start at first array
let start_bit_is_of_first_array : boolean = start_bit_bi0 < bits1.bit_length;
// weak comparison:
// suppose bit_length1 = 8
// ABCD_EFGH _
// 0123_4567 8
// ^
// start_bit_bi0 ^ next_start_bit_bi0
let stop_bit_is_of_first_array : boolean = next_start_bit_bi0 <= bits1.bit_length;
// is this a bytes1 byte
let is_bytes1_byte : boolean = start_bit_is_of_first_array && stop_bit_is_of_first_array;
let is_boundary_byte : boolean = start_bit_is_of_first_array && !stop_bit_is_of_first_array;
// need to work out the ping_pong bs up here because js is dumb and I
// can't put lets between elseifs
// alright, now we're in the case of only copying from the second array
// we have two cases:
// ping-pong:
// ABCD_EFGH 1234_5678
// - ---- ---
// copying these bits
// ping:
// ABCD_EFGH <end>
// - ---- 000
//
// how to distinguish between these two??
//
// we're in the ping case when the start_bit_bi0 corresponds to the
// final byte of the second array
//
// ok
//
// we need to compute the bit address in the second array that
// corresponds to the bit address at the beginning of this byte in the
// result array
let bits2_addr_bi0 : number = start_bit_bi0 - bits1.bit_length;
// I think the variable is
// bits_left_to_copy = bits2.bit_length - bit_addr2_bi0
// no + 1 because the current bit is uncopied,
// so if bit_addr2_bi0 = 7 and bits2.bit_length is 8, it means we
// have the last bit to copy
// cases:
// bits_left_to_copy <= 0 ->
// this would mean we have more bits to copy, but are out of
// source bits. should be impossible if bits_null is correct
// bits_left_to_copy <= 8 ->
// this would mean we are going to fill this last byte in the
// result array with the correct bits from array2, but how we
// do this will depend on how those are arranged in bytes2
// (whether we grab one or two bytes)
//
// this is the tricky case
//
// I think what matters here is the byte address in the second array
// if we're on the last byte
// 8 < bits_left_to_copy ->
// this means we can safely grab two bytes from bytes2, and do
// our bitshifting to make it correct
//
// FIXME
let bits_left_to_copy : number = bits2.bit_length - bits2_addr_bi0;
// no the variable that matters is which byte we're on in the result
let this_bytes2_addr_i0 : number = Math.floor(bits2_addr_bi0 / 8);
let next_bytes2_addr_i0 : number = this_bytes2_addr_i0 + 1;
let bitshift_amt : number = bits1.bit_length % 8;
let ping : boolean = next_bytes2_addr_i0 === bytes2.length;
// simple case: this is a byte from the first array
// just copy it
if (is_bytes1_byte)
result_bytes[i] = bytes1[i];
// this is a boundary byte
// further cases:
// second bit length is 0 ->
// ABCD_EF-- <empty>
// ^ starting here
// just copy first byte and move along
else if (is_boundary_byte && (bits2.bit_length === 0))
result_bytes[i] = bytes1[i];
// boundary byte, and there is at least one byte in the second array
else if (is_boundary_byte)
{
// copy over the first byte
result_bytes[i] = bytes1[i];
// take the first byte from the second array
let first_byte_of_second_array : number = bytes2[0];
// bytes1:
// ABCD_EF00
// 6
// bytes2:
// 1234_5678
// 0000_0012
// and bitshift it right by that amount
let bitshift_amt : number = bits1.bit_length % 8;
result_bytes[i] ^= first_byte_of_second_array >> bitshift_amt;
}
// last byte of second array
else if (ping)
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt);
// ping-pong: not last byte of second array
else
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt) ^ (bytes2[next_bytes2_addr_i0] << bitshift_amt);
}
return {bit_length : result_bit_length,
bytes : result_bytes};
}
@@ -0,0 +1,399 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export {
encode,
decode,
byte_of_word,
check_word,
check_byte,
words
}
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
function
encode
(bytes : Uint8Array)
: string
{
// initial accumulator
let words_acc : Array<string> = [];
// go along each byte and look up the word
// add it to the accumulator
for (let this_byte of bytes)
{
let this_word = words[this_byte];
words_acc.push(this_word);
}
// prepend check word to phrase
// yes craig it would be faster to do the check byte inline
// the usage case here is 64 byte strings
// double pass is not a big deal
return check_word(bytes) + ' ' + words_acc.join(' ');
}
/**
* Decode a FAERT string into bytes
*/
function
decode
(faert : string)
: safe.Safe<Uint8Array, string>
{
let all_words : Array<string> = faert.split(' ');
let input_check_word : string = all_words[0];
let input_words : Array<string> = all_words.slice(1)
// accumulator
let computed_bytes : Array<number> = [];
// loop over words and figure out accumulator
for (let this_input_word of input_words)
{
let maybe_this_byte : safe.Safe<number, string> = byte_of_word(this_input_word);
// if the word is an allowable word, add it to the accumulator
if (maybe_this_byte.ok)
{
let this_byte : number = maybe_this_byte.result;
computed_bytes.push(this_byte);
}
// error case, propagate the error up the call chain
else
return maybe_this_byte;
}
// at this point, we can assume we correctly decoded all words
// compute the check byte
let computed_bytes_u8s : Uint8Array = new Uint8Array(computed_bytes);
let computed_check_word : string = check_word(computed_bytes_u8s);
// check if it is correct
// if so, return the computed bytes
if (computed_check_word === input_check_word)
return safe.ok(computed_bytes_u8s);
// otherwise, return an error
else
return safe.error('checksum failure! computed check word: ' + computed_check_word + '; input check word: ' + input_check_word);
}
/**
* given a word, find its index
*/
function
byte_of_word
(word: string)
: safe.Safe<number, string>
{
for (let i=0; i<=255; i++)
{
if (word === words[i])
return safe.ok(i);
}
return safe.error('invalid word: ' + word);
}
/**
* compute the check word of an array
*/
function
check_word
(bytes: Uint8Array)
: string
{
return words[check_byte(bytes)];
}
/**
* given an array, compute the xor of all the bytes in the array
*/
function
check_byte
(bytes: Uint8Array)
: number
{
let check_byte = 0;
for (let this_byte of bytes)
check_byte ^= this_byte;
return check_byte;
}
let words = [
"able",
"abuse",
"acquire",
"adjust",
"agent",
"air",
"alert",
"alpha",
"anger",
"answer",
"any",
"argue",
"around",
"assume",
"asthma",
"aunt",
"awkward",
"balcony",
"barrel",
"because",
"behave",
"bicycle",
"bike",
"blind",
"blouse",
"bonus",
"bottom",
"breeze",
"brother",
"bubble",
"burger",
"butter",
"can",
"cannon",
"cargo",
"catalog",
"caught",
"century",
"chaos",
"chicken",
"churn",
"cinnamon",
"clever",
"clock",
"clown",
"collect",
"conduct",
"convince",
"correct",
"cradle",
"crane",
"crime",
"cross",
"crystal",
"curve",
"daughter",
"debris",
"decrease",
"deny",
"deputy",
"despair",
"diesel",
"dinner",
"distance",
"document",
"donate",
"drama",
"drink",
"dutch",
"earth",
"educate",
"elbow",
"employ",
"endless",
"enlist",
"enter",
"equal",
"eternal",
"example",
"exhibit",
"exotic",
"faculty",
"famous",
"fault",
"feature",
"fiber",
"filter",
"firm",
"flame",
"flush",
"follow",
"forward",
"frame",
"fringe",
"future",
"game",
"gate",
"gift",
"glare",
"glow",
"goat",
"grab",
"grief",
"guilt",
"hand",
"hawk",
"health",
"hen",
"hire",
"honey",
"hover",
"hurry",
"hybrid",
"impose",
"inch",
"inherit",
"injury",
"install",
"iron",
"jazz",
"joke",
"just",
"kit",
"kitchen",
"language",
"laundry",
"leader",
"lend",
"leopard",
"license",
"live",
"lobster",
"lounge",
"magnet",
"mail",
"mansion",
"mass",
"math",
"media",
"message",
"metal",
"misery",
"mix",
"more",
"mountain",
"museum",
"mutual",
"narrow",
"nerve",
"next",
"note",
"obey",
"obtain",
"offer",
"once",
"orange",
"ostrich",
"over",
"owner",
"palace",
"patch",
"pave",
"pen",
"phrase",
"piece",
"pizza",
"plunge",
"polar",
"pool",
"power",
"pretty",
"private",
"protect",
"pulp",
"purity",
"quit",
"quote",
"raise",
"razor",
"recall",
"region",
"relief",
"rent",
"rescue",
"review",
"ride",
"risk",
"roof",
"rough",
"saddle",
"salmon",
"sand",
"scene",
"scrub",
"season",
"seek",
"series",
"shed",
"shoe",
"sick",
"silent",
"situate",
"skill",
"slide",
"slush",
"snack",
"solar",
"soul",
"special",
"sphere",
"spot",
"spy",
"stairs",
"stereo",
"strategy",
"stuff",
"success",
"sunny",
"surge",
"swear",
"symptom",
"tail",
"ten",
"tent",
"theme",
"thumb",
"tiny",
"toe",
"tooth",
"topic",
"trade",
"trash",
"trophy",
"truly",
"tumble",
"typical",
"uncle",
"unfair",
"until",
"upper",
"useless",
"van",
"venue",
"video",
"visa",
"vocal",
"walk",
"waste",
"wedding",
"weekend",
"wide",
"winner",
"wise",
"wood",
"wrist",
"zero"
]
@@ -0,0 +1,521 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export {
decoded_data,
decode_result,
decode,
encode
}
//=============================================================================
//=============================================================================
// DECODING
//=============================================================================
//=============================================================================
/**
* Data that RLP can encode. Also the result of decoding.
*/
type decoded_data
= Uint8Array
| Array<decoded_data>;
/**
* Decoding can have a remainder
*/
type decode_result
= {decoded_data : decoded_data,
remainder : Uint8Array};
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
function
decode
(bytes: Uint8Array)
: decode_result
{
// check the first byte
let first_byte: number = bytes[0];
let rest : Uint8Array = bytes.slice(1);
// if the first byte is between 0 and 127, that is the data
if
(first_byte <= 127) {
return dr(new Uint8Array([first_byte]), rest);
}
// if the first byte is between 128 and 183 = 128 + 55, it is a bytestring
// and the length is Byte - 128
else if
(first_byte <= 183) {
let payload_byte_length : number = first_byte - 128;
let payload : Uint8Array = rest.slice(0, payload_byte_length);
let rest2 : Uint8Array = rest.slice(payload_byte_length);
return dr(payload, rest2);
}
// if the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
// bytestring. the byte length of bytestring is FirstByte - 183. Then pull
// out the actual data
else if
(first_byte <= 191) {
let byte_length_of_byte_length : number = first_byte - 183;
let bytes_of_byte_length : Uint8Array = rest.slice(0, byte_length_of_byte_length);
let byte_length : number = bytes_to_number(bytes_of_byte_length);
let bytes : Uint8Array = rest.slice(byte_length_of_byte_length,
byte_length + byte_length_of_byte_length);
let rest2 : Uint8Array = rest.slice(byte_length + byte_length_of_byte_length);
return dr(bytes, rest2);
}
// If the first byte is between 192 and 247 = 192 + 55, it is a list. The
// byte length of the list-payload is FirstByte - 192. Then the list
// payload, which needs to be decoded on its own.
else if
(first_byte <= 247) {
let byte_length_of_list : number = first_byte - 192;
let list_payload : Uint8Array = rest.slice(0, byte_length_of_list);
let list : Array<decoded_data> = decode_list(list_payload);
let rest2 : Uint8Array = rest.slice(byte_length_of_list);
return dr(list, rest2);
}
// If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a
// list. The byte length of the byte length of the list-payload is
// FirstByte - 247. Then the byte length of the list. Then the list
// payload, which needs to be decoded on its own.
else {
let byte_length_of_byte_length : number = first_byte - 247;
let bytes_of_byte_length : Uint8Array = rest.slice(0, byte_length_of_byte_length);
let byte_length : number = bytes_to_number(bytes_of_byte_length);
let list_bytes : Uint8Array = rest.slice(byte_length_of_byte_length,
byte_length + byte_length_of_byte_length);
let list : Array<decoded_data> = decode_list(list_bytes);
let rest2 : Uint8Array = rest.slice(byte_length + byte_length_of_byte_length);
return dr(list, rest2);
}
}
/**
* Decode a list payload (non-prefixed) into an `Array<decoded_data>`.
*
* Repeatedly decodes an element off the list until remainder is empty.
*
* @internal
*/
function
decode_list
(bytes: Uint8Array)
: Array<decoded_data>
{
let arr : Array<decoded_data> = [];
while (bytes.length > 0) {
// grab an item off the bytes
let {decoded_data, remainder} = decode(bytes);
// push it
arr.push(decoded_data);
// update bytes
bytes = remainder;
}
return arr;
}
/**
* Convert bytestring to number
*
* @internal
*/
function
bytes_to_number
(bytes: Uint8Array)
: number
{
let n : number = 0;
for (let b of bytes)
{
n <<= 8;
n += b;
}
return n;
}
/**
* Make a `decode_result` containing the two arguments
*
* @internal
*/
function
dr
(x : decoded_data,
y : Uint8Array)
: decode_result
{
return {decoded_data : x,
remainder : y};
}
//=============================================================================
//=============================================================================
// ENCODING
//=============================================================================
//=============================================================================
/**
* Encode some decoded data
*/
function
encode
(data: decoded_data)
: Uint8Array
{
// is it an array or data
if
(is_binary(data)) {
return encode_binary(data as Uint8Array);
}
else if
(is_list(data)) {
return encode_list(data as Array<decoded_data>);
}
else {
throw new Error('encode told to encode something that is not an array or a binary: ' + data);
}
}
/**
* Encode a binary into RLP
*
* @internal
*/
function
encode_binary
(bytes: Uint8Array)
: Uint8Array
{
let len: number = bytes.length;
// single byte case when the byte is between 0..127
// result is the bytestring containing the byte itself
if
((len === 1) &&
(bytes[0] <= 127)){
return bytes;
}
// if the bytestring is 0..55 bytes long, the first byte in the result is
// 128 + Length, the rest of the result bytestring is the input string
else if
(len <= 55) {
// construct the result
// <<128 + Len, Bytes/binary>>
let result : Uint8Array = new Uint8Array(len + 1);
// first byte is 128 + length
result[0] = 128 + len;
// copy input bytes into result
for (let input_idx0 = 0;
input_idx0 < len;
input_idx0++)
{
let result_idx0 : number = input_idx0 + 1;
result[result_idx0] = bytes[input_idx0];
}
return result;
}
// if the bytestring is more than 55 bytes long, the first byte is 183 +
// ByteLengthOfByteLength, followed by the byte length, followed by the
// bytes
else {
let len_bytes : Uint8Array = encode_unsigned(len);
let len_bytes_length : number = len_bytes.length;
// total array is
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
let result : Uint8Array = new Uint8Array(1 + len_bytes_length + len);
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
result[0] = 183 + len_bytes_length;
// copy len_bytes into result
for (let len_bytes_idx0 = 0;
len_bytes_idx0 < len_bytes_length;
len_bytes_idx0++)
{
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0: number = len_bytes_idx0 + 1;
result[result_idx0] = len_bytes[len_bytes_idx0];
}
// copy original byte array into result
for (let input_idx0 = 0;
input_idx0 < len;
input_idx0++)
{
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0: number = input_idx0 + (1 + len_bytes_length);
result[result_idx0] = bytes[input_idx0];
}
// finally, return the result
return result;
}
}
/**
* Encode a list
*
* @internal
*/
function
encode_list
(list: Array<decoded_data>)
: Uint8Array
{
// first encode every element in the list, then branch
let payloads : Array<Uint8Array> = list.map(encode);
let payload : Uint8Array = uint8arr_concat(payloads);
let payload_size : number = payload.length;
// if the payload size is in 0..55, then the first byte is 192 + payload
// size, followed by the payload
if
(payload_size <= 55) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
let result : Uint8Array = new Uint8Array(1 + payload_size);
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
result[0] = 192 + payload_size;
// copy the rest of the payload into result
for (let payload_idx0 = 0;
payload_idx0 < payload_size;
payload_idx0++)
{
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
let result_idx0: number = payload_idx0 + 1;
result[result_idx0] = payload[payload_idx0];
}
return result;
}
// if the payload size is greater than 55, the first byte is 247 +
// size_of_payload_size, followed by the payload size, followed by the
// payload
else {
// compute the payload size size
let payload_size_bytes : Uint8Array = encode_unsigned(payload_size);
let payload_size_size : number = payload_size_bytes.length;
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
let result: Uint8Array = new Uint8Array(1 + payload_size_size + payload_size);
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// first byte is 247 + payload_size_size
result[0] = 247 + payload_size_size;
// copy the payload_size_bytes into result
for (let psb_idx0 = 0;
psb_idx0 < payload_size_size;
psb_idx0++)
{
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 byte for this
let result_idx0 : number = psb_idx0 + 1;
result[result_idx0] = payload_size_bytes[psb_idx0];
}
// copy the payload into result
for (let pb_idx0 = 0;
pb_idx0 < payload_size;
pb_idx0++)
{
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 + payload_size_size bytes for this
let result_idx0 : number = pb_idx0 + (1 + payload_size_size);
result[result_idx0] = payload[pb_idx0];
}
// finally, return result
return result;
}
}
/**
* Encode a number as a bytestring
*
* Not for general use, this assumes the input number is greater than 55
*
* @internal
*/
function
encode_unsigned
(n: number)
: Uint8Array
{
// can assume that n initially is greater than 55
// have to encode it in reverse order
let arr : Array<number> = [];
// repeated division by 256 with remainder
//
// example: suppose bign was 1234 and we were dividing by 10
//
// iteration 0:
// bign = 1234
// arr = []
// ---
// bign / 10 = 123
// bign % 10 = 4
// ---
// bign = 123
// arr = [4]
//
// iteration 1:
// bign = 123
// arr = [4]
// ---
// bign / 10 = 12
// bign % 10 = 3
// ---
// bign = 12
// arr = [4, 3]
//
// iteration 2:
// bign = 12
// arr = [4, 3]
// ---
// bign / 10 = 1
// bign % 10 = 2
// ---
// bign = 1
// arr = [4, 3, 2]
//
// iteration 3:
// bign = 1
// arr = [4, 3, 2]
// ---
// bign / 10 = 0
// bign % 10 = 1
// ---
// bign = 0
// arr = [4, 3, 2, 1]
//
// iteration 4:
// bign = 0
// arr = [4, 3, 2, 1]
// ---
// DONE
while (n > 0) {
arr.push(n % 256);
n >>= 8;
}
// reverse and make into Uint8Array
arr.reverse();
return new Uint8Array(arr);
}
/**
* concatenate an array of `Uint8Array`s into a single Uint8Array
*
* @internal
*/
function
uint8arr_concat
(arrs: Array<Uint8Array>)
: Uint8Array
{
// total length
let total_len = arrs.reduce(// fold
function (acc_len: number, this_uint8array: Uint8Array): number {
return acc_len + this_uint8array.length;
},
// initial accumulator
0);
// start up result
let result : Uint8Array = new Uint8Array(total_len);
let result_idx0 : number = 0;
// concatenate
for (let this_uint8arr of arrs) {
// bytewise copy of this uint8array
for (let this_uint8arr_idx0 = 0;
this_uint8arr_idx0 < this_uint8arr.length;
this_uint8arr_idx0++)
{
// copy byte and increment result idx0
result[result_idx0] = this_uint8arr[this_uint8arr_idx0];
result_idx0++;
}
}
return result;
}
/**
* returns true if input is `instanceof Uint8Array`
*
* @internal
*/
function
is_binary
(x: any)
: boolean
{
return (x instanceof Uint8Array);
}
/**
* returns true if input is `instanceof Array`
*
* @internal
*/
function
is_list
(x: any)
: boolean
{
return (x instanceof Array);
}
@@ -0,0 +1,112 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export {
Safe,
Ok,
Error,
ok,
error,
unsafe
}
/**
* Type that catches positive errors
*/
type Safe<ok_t, err_t>
= Ok<ok_t>
| Error<err_t>;
/**
* Ok type
*/
type Ok<ok_t>
= {ok : true,
result : ok_t};
/**
* Error type
*/
type Error<err_t>
= {ok : false,
error : err_t};
/**
* Constructs an `Ok` value from a pure value
*/
function
ok
<ok_t>
(x : ok_t)
: Ok<ok_t>
{
return {ok: true, result: x};
}
/**
* Constructs an `Error` value from a pure value
*/
function
error
<err_t>
(x: err_t)
: Error<err_t>
{
return {ok: false, error: x};
}
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
function
unsafe
<ok_t, err_t>
(x: Safe<ok_t, err_t>)
: ok_t
{
if (x.ok)
return x.result;
else
throw x.error;
}
+7
View File
@@ -0,0 +1,7 @@
import * as rlp from './jex_include/local-vdk-0.1.0/dist/rlp.js';
declare type rlpcases = {
decoded: rlp.decoded_data;
encoded: Uint8Array;
};
export declare const cases: Array<rlpcases>;
export {};
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+5
View File
@@ -0,0 +1,5 @@
{type, library}.
{realm, local}.
{name, vdk_cases}.
{version, "0.1.0"}.
{deps, ["local-vdk-0.1.0"]}.
+12
View File
@@ -0,0 +1,12 @@
export declare const rlp: {
decoded: import("./jex_include/local-vdk-0.1.0/dist/rlp.js").decoded_data;
encoded: Uint8Array;
}[];
export declare const base58: {
encoded: string;
decoded: Uint8Array;
}[];
export declare const base64: {
decoded: Uint8Array;
encoded: string;
}[];
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
/**
* Base58 encoding/decoding
*/
export { encode, decode };
/**
* Encode a Uint8Array into base58
*/
declare function encode(binary: Uint8Array): string;
/**
* Decode a Base58 string into a Uint8Array
*/
declare function decode(base58: string): Uint8Array;
@@ -0,0 +1,308 @@
/**
* Base58 encoding/decoding
*/
export { encode, decode };
//=============================================================================
// ENCODING
//=============================================================================
/**
* Encode a Uint8Array into base58
*/
function encode(binary) {
let num_leading_zeros = nlz(binary);
let rest = binary.slice(num_leading_zeros);
let ones = encode_zeros(num_leading_zeros);
let rest_b58 = encode_rest(rest);
let result = ones + rest_b58;
return result;
}
/**
* count the number of leading zeros in a uint8array
*
* @internal
*/
function nlz(bytes) {
let n = 0;
for (let this_byte of bytes) {
if (0 === this_byte) {
n++;
}
else {
break;
}
}
return n;
}
/**
* Generate a bunch of '1's for however many leading zeros there are
*
* @internal
*/
function encode_zeros(how_many) {
let ones = '';
for (let i = 1; i <= how_many; i++) {
ones += '1';
}
return ones;
}
/**
* Encode a Uint8Array that has no leading zeros
*
* @internal
*/
function encode_rest(bytes) {
let bytes_bignum = bytes_to_bigint(bytes);
let result = bignum_to_base58(bytes_bignum);
return result;
}
/**
* Convert a bytestring to a bignum
*
* @internal
*/
function bytes_to_bigint(bytes) {
let acc_bigint = 0n;
for (let this_byte of bytes) {
acc_bigint <<= 8n;
acc_bigint += BigInt(this_byte);
}
return acc_bigint;
}
/**
* Convert a BigInt to Base58
*
* @internal
*/
function bignum_to_base58(q) {
let s = '';
while (q !== 0n) {
let this_n = q % 58n;
q /= 58n;
let this_b58_char = bigint_to_char(this_n);
s = this_b58_char + s;
}
return s;
}
//=============================================================================
// DECODING
//=============================================================================
/**
* Decode a Base58 string into a Uint8Array
*/
function decode(base58) {
let num_leading_ones = nlo(base58);
let rest = base58.slice(num_leading_ones);
let zeros = decode_ones(num_leading_ones);
let rest_arr = decode_rest(rest);
let pre_result = zeros.concat(rest_arr);
return new Uint8Array(pre_result);
}
/**
* count the number of leading 1 characters in a uint8array
*
* @internal
*/
function nlo(base58) {
let n = 0;
for (let this_char of base58) {
if ('1' === this_char) {
n++;
}
else {
break;
}
}
return n;
}
/**
* Generate a bunch of '0's for however many leading ones there are
*
* @internal
*/
function decode_ones(how_many) {
let zeros = [];
for (let i = 1; i <= how_many; i++) {
zeros.push(0);
}
return zeros;
}
/**
* Decode a string that has no leading 1s
*
* @internal
*/
function decode_rest(base58) {
let result_bignum = base58_to_bigint(base58);
let result = bigint_to_base256(result_bignum);
return result;
}
/**
* Convert a base58 string to a bignum
*
* @internal
*/
function base58_to_bigint(base58) {
let acc_bigint = 0n;
for (let this_char of base58) {
acc_bigint *= 58n;
acc_bigint += char_to_bigint(this_char);
}
return acc_bigint;
}
/**
* convert a bignum into a byte array
*
* @end
*/
function bigint_to_base256(q) {
let arr_reverse = [];
while (q !== 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return arr_reverse;
}
//=============================================================================
// TRANSLATION TABLES
//=============================================================================
/**
* Base58 integer -> character conversion table
*
* @internal
*/
function bigint_to_char(n) {
switch (n) {
case 0n: return '1';
case 1n: return '2';
case 2n: return '3';
case 3n: return '4';
case 4n: return '5';
case 5n: return '6';
case 6n: return '7';
case 7n: return '8';
case 8n: return '9';
case 9n: return 'A';
case 10n: return 'B';
case 11n: return 'C';
case 12n: return 'D';
case 13n: return 'E';
case 14n: return 'F';
case 15n: return 'G';
case 16n: return 'H';
case 17n: return 'J';
case 18n: return 'K';
case 19n: return 'L';
case 20n: return 'M';
case 21n: return 'N';
case 22n: return 'P';
case 23n: return 'Q';
case 24n: return 'R';
case 25n: return 'S';
case 26n: return 'T';
case 27n: return 'U';
case 28n: return 'V';
case 29n: return 'W';
case 30n: return 'X';
case 31n: return 'Y';
case 32n: return 'Z';
case 33n: return 'a';
case 34n: return 'b';
case 35n: return 'c';
case 36n: return 'd';
case 37n: return 'e';
case 38n: return 'f';
case 39n: return 'g';
case 40n: return 'h';
case 41n: return 'i';
case 42n: return 'j';
case 43n: return 'k';
case 44n: return 'm';
case 45n: return 'n';
case 46n: return 'o';
case 47n: return 'p';
case 48n: return 'q';
case 49n: return 'r';
case 50n: return 's';
case 51n: return 't';
case 52n: return 'u';
case 53n: return 'v';
case 54n: return 'w';
case 55n: return 'x';
case 56n: return 'y';
case 57n: return 'z';
default:
throw new Error('invalid base58 bigint: ' + n);
}
}
/**
* Base58 character -> integer conversion table
*
* @internal
*/
function char_to_bigint(s) {
switch (s) {
case '1': return 0n;
case '2': return 1n;
case '3': return 2n;
case '4': return 3n;
case '5': return 4n;
case '6': return 5n;
case '7': return 6n;
case '8': return 7n;
case '9': return 8n;
case 'A': return 9n;
case 'B': return 10n;
case 'C': return 11n;
case 'D': return 12n;
case 'E': return 13n;
case 'F': return 14n;
case 'G': return 15n;
case 'H': return 16n;
case 'J': return 17n;
case 'K': return 18n;
case 'L': return 19n;
case 'M': return 20n;
case 'N': return 21n;
case 'P': return 22n;
case 'Q': return 23n;
case 'R': return 24n;
case 'S': return 25n;
case 'T': return 26n;
case 'U': return 27n;
case 'V': return 28n;
case 'W': return 29n;
case 'X': return 30n;
case 'Y': return 31n;
case 'Z': return 32n;
case 'a': return 33n;
case 'b': return 34n;
case 'c': return 35n;
case 'd': return 36n;
case 'e': return 37n;
case 'f': return 38n;
case 'g': return 39n;
case 'h': return 40n;
case 'i': return 41n;
case 'j': return 42n;
case 'k': return 43n;
case 'm': return 44n;
case 'n': return 45n;
case 'o': return 46n;
case 'p': return 47n;
case 'q': return 48n;
case 'r': return 49n;
case 's': return 50n;
case 't': return 51n;
case 'u': return 52n;
case 'v': return 53n;
case 'w': return 54n;
case 'x': return 55n;
case 'y': return 56n;
case 'z': return 57n;
default:
throw new Error('invalid base58 char: ' + s);
}
}
//# sourceMappingURL=b58.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
/**
* Base64 Utility Functions in TypeScript
*/
export { encode, decode };
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
declare function encode(bytes: Uint8Array): string;
/**
* Decode a base64-encoded string
*/
declare function decode(base64_str: string): Uint8Array;
@@ -0,0 +1,507 @@
/**
* Base64 Utility Functions in TypeScript
*/
export { encode, decode };
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
function encode(bytes) {
// slice the array
// length of head is a multiple of 3
// treat the tail as a special case
let { head, tail, tail_len } = slice3k(bytes);
let head_str = encode_head(head);
let tail_str = encode_tail(tail, tail_len);
return head_str + tail_str;
}
/**
* Take a Uint8Array, take the first 3k (k >= 0) bytes, put them in head, and
* the remaining 0,1, or 2 bytes, put them in tail
*
* @internal
*/
function slice3k(bytes) {
let len = bytes.length;
// too lazy to look up how to do integer division in js so this will do
let tail_len = len % 3;
let head_len = len - tail_len;
// for slice:
// first argument is the 0-index of the start
// second - first is the length of the slice
let head = bytes.slice(0, head_len);
// empty second argument means go to the end
let tail = bytes.slice(head_len);
return { head: head,
tail: tail,
tail_len: tail_len };
}
/**
* Encode a Uint8Array whose length is known to be a multiple of 3
*
* @internal
*/
function encode_head(head_bytes) {
// can assume length of bytes is a multiple of 3
// start index at 0
// increment by 3
let head_bytes_len = head_bytes.length;
let max_idx0 = head_bytes_len - 1;
let head_str_acc = '';
for (let this_3slice_start_idx0 = 0; this_3slice_start_idx0 <= max_idx0; this_3slice_start_idx0 += 3) {
let this_3slice_bytes = head_bytes.slice(this_3slice_start_idx0, this_3slice_start_idx0 + 3);
let this_3slice_str = encode3(this_3slice_bytes);
head_str_acc += this_3slice_str;
}
return head_str_acc;
}
/**
* Encode a 3 bytes into base64 notation
*
* @internal
*/
function encode3(bytes) {
let b0 = bytes[0];
let b1 = bytes[1];
let b2 = bytes[2];
// ABCDEFGH 12345678 abcdefgh
// b0 b1 b2
// ABCDEF GH1234 5678ab cdefgh
// n0 n1 n2 n3
let n0 = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// b2 = abcdefgh
// b2 >> 6 = ______ab
// n2 = __5678ab
let n2 = ((b1 % 16) << 2) + (b2 >> 6);
// b2 = abcdefgh
// 64 = _1______
// n3 = __cdefgh
let n3 = b2 % 64;
// convert to chars
let s0 = int2char(n0);
let s1 = int2char(n1);
let s2 = int2char(n2);
let s3 = int2char(n3);
// retrvn
return s0 + s1 + s2 + s3;
}
/**
* Encode the final 0, 1, or 2 bytes
*
* @internal
*/
function encode_tail(tail_bytes, tail_len) {
switch (tail_len) {
case 0: return '';
case 1: return encode1(tail_bytes);
case 2: return encode2(tail_bytes);
default:
throw new Error('encode_tail with tail_len = ' + tail_len);
}
}
/**
* Encode a single byte
*
* @internal
*/
function encode1(bytes) {
let b0 = bytes[0];
// n0 = __ABCDEF
// b0 = ABCDEFGH
// b0 >> 2 = __ABCDEF
let n0 = b0 >> 2;
// n1 = __GH____
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
let n1 = (b0 % 4) << 4;
return int2char(n0) + int2char(n1) + '==';
}
/**
* Encode two bytes
*
* @internal
*/
function encode2(bytes) {
let b0 = bytes[0];
let b1 = bytes[1];
// ABCDEFGH 12345678
// b0 b1
// ABCDEF GH1234 5678__
// n0 n1 n2
let n0 = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// n2 = __5678__
let n2 = (b1 % 16) << 2;
// convert to chars
let s0 = int2char(n0);
let s1 = int2char(n1);
let s2 = int2char(n2);
// retrvn
return s0 + s1 + s2 + '=';
}
/**
* Decode a base64-encoded string
*/
function decode(base64_str) {
// length of the string is guaranteed to be a multiple of 4
// if the string is empty, return the empty array
let len = base64_str.length;
// this branching contains the implicit assertion that the length is a
// multiple of 4. If this is not true, the bottom branch is triggered.
// general case goes first because speeeeeed
if ((4 < len)
&& (0 === (len % 4))) {
// split the head and tail
let tail_start_idx0 = len - 4;
let head_s = base64_str.slice(0, tail_start_idx0);
let tail_s = base64_str.slice(tail_start_idx0);
// Using arrays because Uint8Arrays don't have a concat operation
let head_arr = decode_head(head_s);
let tail_arr = decode_tail(tail_s);
// silly to put these in variables but this is exactly the type of
// situation where JS type insanity shows up
//
// see: i forgot
// > [1,2,3] + [4,5,6]
// '1,2,34,5,6'
//
// Originally, I used + like some sort of moron who codes in a sane
// language
//
// seriously what is this language
//
// this is some clown behavior
let total_arr = head_arr.concat(tail_arr);
return new Uint8Array(total_arr);
}
// special case if the length is exactly 4
else if (4 === len) {
// it's just a tail
return new Uint8Array(decode_tail(base64_str));
}
// empty string
else if (0 === len) {
return new Uint8Array([]);
}
else {
throw new Error('base64 decode: invalid string length: ' + len);
}
}
/**
* Decode a string known to not have any padding
*
* @internal
*/
function decode_head(s) {
// go 4 characters at a time
let max_i0 = s.length - 1;
let decoded_acc = [];
for (let i0 = 0; i0 <= max_i0; i0 += 4) {
let this_slice_s = s.slice(i0, i0 + 4);
let this_slice_arr = decode3(this_slice_s);
// update accumulator
decoded_acc = decoded_acc.concat(this_slice_arr);
}
return decoded_acc;
}
/**
* Decode 4 characters that correspond to either 3 bytes, 2, bytes, or 1 byte
*
* @internal
*/
function decode_tail(s) {
// all that matters right now is the last 2 chars
// s0, s1, s2, s3
// 0 based indexing is so annoying
let s2 = s[2];
let s3 = s[3];
// braaaaaaaaaaaaaaaaaench
// two equals signs means 1 byte
if (('=' === s3) && ('=' === s2)) {
return decode1(s);
}
// one equals sign means 2 bytes
else if (('=' === s3)) {
return decode2(s);
}
// 0 equals signs means 3 bytes
else {
return decode3(s);
}
}
/**
* Decode a 4-character long base64 string corresponding to 3 bytes
*
* @internal
*/
function decode3(s) {
// pull out strings
let s0 = s[0];
let s1 = s[1];
let s2 = s[2];
let s3 = s[3];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
let n2 = char2int(s2);
let n3 = char2int(s3);
// abcdef gh1234 5678ab cdefgh
// n0 n1 n2 n3
// abcdefgh 12345678 abcdefgh
// b0 b1 b2
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678ab
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 = ((n1 % 16) << 4) + (n2 >> 2);
// n2 = __5678ab
// 4 = _____1__
// n2 % 4 = ______ab
// (n2 % 4) << 6 = ab______
// n3 = __cdefgh
let b2 = ((n2 % 4) << 6) + n3;
return [b0, b1, b2];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function decode2(s) {
// xyz=
// pull out strings
let s0 = s[0];
let s1 = s[1];
let s2 = s[2];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
let n2 = char2int(s2);
// abcdef gh1234 5678__
// n0 n1 n2
// abcdefgh 12345678
// b0 b1
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678__
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 = ((n1 % 16) << 4) + (n2 >> 2);
return [b0, b1];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function decode1(s) {
// xy==
// pull out strings
let s0 = s[0];
let s1 = s[1];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
// abcdef gh____
// n0 n1
// abcdefgh
// b0
// n0 = __abcdef
// n1 = __gh____
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
return [b0];
}
// FIXME: these tables would *probably* be faster if they were made into objects
/**
* Conversion table for base64 encode
*
* @internal
*/
function int2char(n) {
switch (n) {
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
case 5: return 'F';
case 6: return 'G';
case 7: return 'H';
case 8: return 'I';
case 9: return 'J';
case 10: return 'K';
case 11: return 'L';
case 12: return 'M';
case 13: return 'N';
case 14: return 'O';
case 15: return 'P';
case 16: return 'Q';
case 17: return 'R';
case 18: return 'S';
case 19: return 'T';
case 20: return 'U';
case 21: return 'V';
case 22: return 'W';
case 23: return 'X';
case 24: return 'Y';
case 25: return 'Z';
case 26: return 'a';
case 27: return 'b';
case 28: return 'c';
case 29: return 'd';
case 30: return 'e';
case 31: return 'f';
case 32: return 'g';
case 33: return 'h';
case 34: return 'i';
case 35: return 'j';
case 36: return 'k';
case 37: return 'l';
case 38: return 'm';
case 39: return 'n';
case 40: return 'o';
case 41: return 'p';
case 42: return 'q';
case 43: return 'r';
case 44: return 's';
case 45: return 't';
case 46: return 'u';
case 47: return 'v';
case 48: return 'w';
case 49: return 'x';
case 50: return 'y';
case 51: return 'z';
case 52: return '0';
case 53: return '1';
case 54: return '2';
case 55: return '3';
case 56: return '4';
case 57: return '5';
case 58: return '6';
case 59: return '7';
case 60: return '8';
case 61: return '9';
case 62: return '+';
case 63: return '/';
default: throw new Error("invalid base64 encode byte: " + n);
}
}
/**
* Conversion table for base64 decode
*
* @internal
*/
function char2int(s) {
switch (s) {
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 17;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
case 'a': return 26;
case 'b': return 27;
case 'c': return 28;
case 'd': return 29;
case 'e': return 30;
case 'f': return 31;
case 'g': return 32;
case 'h': return 33;
case 'i': return 34;
case 'j': return 35;
case 'k': return 36;
case 'l': return 37;
case 'm': return 38;
case 'n': return 39;
case 'o': return 40;
case 'p': return 41;
case 'q': return 42;
case 'r': return 43;
case 's': return 44;
case 't': return 45;
case 'u': return 46;
case 'v': return 47;
case 'w': return 48;
case 'x': return 49;
case 'y': return 50;
case 'z': return 51;
case '0': return 52;
case '1': return 53;
case '2': return 54;
case '3': return 55;
case '4': return 56;
case '5': return 57;
case '6': return 58;
case '7': return 59;
case '8': return 60;
case '9': return 61;
case '+': return 62;
case '/': return 63;
default: throw new Error("invalid base64 character: " + s);
}
}
//# sourceMappingURL=b64.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,28 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export { bytes_to_bigint, bigint_to_bytes, concat, strong_rand_bytes };
/**
* Concatenate two arrays
*/
declare function concat(arr1: Uint8Array, arr2: Uint8Array): Uint8Array;
/**
* Cryptographically random bytes
*/
declare function strong_rand_bytes(how_many: number): Uint8Array;
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
declare function bytes_to_bigint(bytes: Uint8Array): bigint;
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
declare function bigint_to_bytes(q: bigint): Uint8Array;
@@ -0,0 +1,266 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export { bytes_to_bigint, bigint_to_bytes, concat, strong_rand_bytes };
/**
* Concatenate two arrays
*/
function concat(arr1, arr2) {
let len1 = arr1.length;
let len2 = arr2.length;
let arr1_idx0_offset = 0;
let arr2_idx0_offset = len1;
let result_len = len1 + len2;
let result = new Uint8Array(result_len);
// copy first array into result
for (let arr1_idx0 = 0; arr1_idx0 < len1; arr1_idx0++) {
// no offset here
let result_idx0 = arr1_idx0 + arr1_idx0_offset;
result[result_idx0] = arr1[arr1_idx0];
}
// copy second array into result
for (let arr2_idx0 = 0; arr2_idx0 < len2; arr2_idx0++) {
// offset by the length of the first array
let result_idx0 = arr2_idx0 + arr2_idx0_offset;
result[result_idx0] = arr2[arr2_idx0];
}
return result;
}
/**
* Cryptographically random bytes
*/
function strong_rand_bytes(how_many) {
let arr = new Uint8Array(how_many);
(new Crypto()).getRandomValues(arr);
return arr;
}
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
function bytes_to_bigint(bytes) {
let n = 0n;
for (let b of bytes) {
// move first, then add
// otherwise it ends on a move
// imperative languages are for losers
n <<= 8n;
n += BigInt(b);
}
return n;
}
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
function bigint_to_bytes(q) {
if (q < 0n) {
throw new Error('q < 0n: ' + q);
}
let arr_reverse = [];
while (q > 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return new Uint8Array(arr_reverse);
}
/**
* Get an uninitialized bitstring
*
* @internal
*/
function bits_null(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
return { bit_length: bit_length,
bytes: result };
}
/**
* Get a bitstring of a given length where every value is 0.
*/
function bits_zeros(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
for (let i0 = 0; i0 < byte_length; i0++) {
result[i0] = 0;
}
return { bit_length: bit_length,
bytes: result };
}
/**
* Get a bitstring of a given length where every value is 1.
*/
function bits_ones(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
// fill everything except the last byte with 255s
for (let i0 = 0; i0 < (byte_length - 1); i0++) {
result[i0] = 255;
}
// alright so the last byte
// ok so the number of leading 0s is
// 8 - (bit_length % 8)
let num_trailing_zero_bits = 8 - (bit_length % 8);
// the trailing byte is 255 << that
// e.g. 3 trailing 0s
// 1111_1111 -> 1111_1000
let last_byte = 255 << num_trailing_zero_bits;
let last_byte_idx0 = byte_length - 1;
result[last_byte_idx0] = last_byte;
return { bit_length: bit_length,
bytes: result };
}
/**
* Get the bit at a given 0-index
*/
function bits_i0th(bit_idx0, bits) {
// first task is figuring out what byte we're at
// for instance if we want bit 27
// 3*8 = 24 =< 27 < 4*8
// so it's Math.floor(bit_idx0 / 8)
let byte_idx0 = Math.floor(bit_idx0 / 8);
// let's fetch the byte and work with that
let the_byte = bits.bytes[byte_idx0];
// ok so let's go with 27 again
// 27 = 3 mod 8
// so we bitshift right by (8 - 3)
// and then take the remainder dividing by 2
// --B-_---- -> ----_---B -> 0000_000B
let bsr = 8 - (bit_idx0 % 8);
return (the_byte >> bsr) % 2;
}
/**
* Concatenate two bitstrings
*/
function bits_concat(bits1, bits2) {
let result_bit_length = bits1.bit_length + bits2.bit_length;
let bytes1 = bits1.bytes;
let bytes2 = bits2.bytes;
// using zeros here because of our xor trick in a minute
let result_bits = bits_null(result_bit_length);
let result_bytes = result_bits.bytes;
// go along each byte in result, and compute the byte boundary
for (let i = 0; i < result_bytes.length; i++) {
// ABCD_EFGH _
// 0123_4567 8
// this is the bit index of the leftmost bit in this byte
let start_bit_bi0 = i * 8;
let next_start_bit_bi0 = start_bit_bi0 + 8;
// does the bit at the beginning of this byte correspond to the first array?
// strict comparison:
// suppose i = 0,
// suppose bit_length1 is 0
// then this says no, go to second array
// suppose bl1 = 1,
// this says start at first array
let start_bit_is_of_first_array = start_bit_bi0 < bits1.bit_length;
// weak comparison:
// suppose bit_length1 = 8
// ABCD_EFGH _
// 0123_4567 8
// ^
// start_bit_bi0 ^ next_start_bit_bi0
let stop_bit_is_of_first_array = next_start_bit_bi0 <= bits1.bit_length;
// is this a bytes1 byte
let is_bytes1_byte = start_bit_is_of_first_array && stop_bit_is_of_first_array;
let is_boundary_byte = start_bit_is_of_first_array && !stop_bit_is_of_first_array;
// need to work out the ping_pong bs up here because js is dumb and I
// can't put lets between elseifs
// alright, now we're in the case of only copying from the second array
// we have two cases:
// ping-pong:
// ABCD_EFGH 1234_5678
// - ---- ---
// copying these bits
// ping:
// ABCD_EFGH <end>
// - ---- 000
//
// how to distinguish between these two??
//
// we're in the ping case when the start_bit_bi0 corresponds to the
// final byte of the second array
//
// ok
//
// we need to compute the bit address in the second array that
// corresponds to the bit address at the beginning of this byte in the
// result array
let bits2_addr_bi0 = start_bit_bi0 - bits1.bit_length;
// I think the variable is
// bits_left_to_copy = bits2.bit_length - bit_addr2_bi0
// no + 1 because the current bit is uncopied,
// so if bit_addr2_bi0 = 7 and bits2.bit_length is 8, it means we
// have the last bit to copy
// cases:
// bits_left_to_copy <= 0 ->
// this would mean we have more bits to copy, but are out of
// source bits. should be impossible if bits_null is correct
// bits_left_to_copy <= 8 ->
// this would mean we are going to fill this last byte in the
// result array with the correct bits from array2, but how we
// do this will depend on how those are arranged in bytes2
// (whether we grab one or two bytes)
//
// this is the tricky case
//
// I think what matters here is the byte address in the second array
// if we're on the last byte
// 8 < bits_left_to_copy ->
// this means we can safely grab two bytes from bytes2, and do
// our bitshifting to make it correct
//
// FIXME
let bits_left_to_copy = bits2.bit_length - bits2_addr_bi0;
// no the variable that matters is which byte we're on in the result
let this_bytes2_addr_i0 = Math.floor(bits2_addr_bi0 / 8);
let next_bytes2_addr_i0 = this_bytes2_addr_i0 + 1;
let bitshift_amt = bits1.bit_length % 8;
let ping = next_bytes2_addr_i0 === bytes2.length;
// simple case: this is a byte from the first array
// just copy it
if (is_bytes1_byte)
result_bytes[i] = bytes1[i];
// this is a boundary byte
// further cases:
// second bit length is 0 ->
// ABCD_EF-- <empty>
// ^ starting here
// just copy first byte and move along
else if (is_boundary_byte && (bits2.bit_length === 0))
result_bytes[i] = bytes1[i];
// boundary byte, and there is at least one byte in the second array
else if (is_boundary_byte) {
// copy over the first byte
result_bytes[i] = bytes1[i];
// take the first byte from the second array
let first_byte_of_second_array = bytes2[0];
// bytes1:
// ABCD_EF00
// 6
// bytes2:
// 1234_5678
// 0000_0012
// and bitshift it right by that amount
let bitshift_amt = bits1.bit_length % 8;
result_bytes[i] ^= first_byte_of_second_array >> bitshift_amt;
}
// last byte of second array
else if (ping)
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt);
// ping-pong: not last byte of second array
else
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt) ^ (bytes2[next_bytes2_addr_i0] << bitshift_amt);
}
return { bit_length: result_bit_length,
bytes: result_bytes };
}
//# sourceMappingURL=bin.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,30 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export { encode, decode, byte_of_word, check_word, check_byte, words };
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
declare function encode(bytes: Uint8Array): string;
/**
* Decode a FAERT string into bytes
*/
declare function decode(faert: string): safe.Safe<Uint8Array, string>;
/**
* given a word, find its index
*/
declare function byte_of_word(word: string): safe.Safe<number, string>;
/**
* compute the check word of an array
*/
declare function check_word(bytes: Uint8Array): string;
/**
* given an array, compute the xor of all the bytes in the array
*/
declare function check_byte(bytes: Uint8Array): number;
declare let words: string[];
@@ -0,0 +1,344 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export { encode, decode, byte_of_word, check_word, check_byte, words };
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
function encode(bytes) {
// initial accumulator
let words_acc = [];
// go along each byte and look up the word
// add it to the accumulator
for (let this_byte of bytes) {
let this_word = words[this_byte];
words_acc.push(this_word);
}
// prepend check word to phrase
// yes craig it would be faster to do the check byte inline
// the usage case here is 64 byte strings
// double pass is not a big deal
return check_word(bytes) + ' ' + words_acc.join(' ');
}
/**
* Decode a FAERT string into bytes
*/
function decode(faert) {
let all_words = faert.split(' ');
let input_check_word = all_words[0];
let input_words = all_words.slice(1);
// accumulator
let computed_bytes = [];
// loop over words and figure out accumulator
for (let this_input_word of input_words) {
let maybe_this_byte = byte_of_word(this_input_word);
// if the word is an allowable word, add it to the accumulator
if (maybe_this_byte.ok) {
let this_byte = maybe_this_byte.result;
computed_bytes.push(this_byte);
}
// error case, propagate the error up the call chain
else
return maybe_this_byte;
}
// at this point, we can assume we correctly decoded all words
// compute the check byte
let computed_bytes_u8s = new Uint8Array(computed_bytes);
let computed_check_word = check_word(computed_bytes_u8s);
// check if it is correct
// if so, return the computed bytes
if (computed_check_word === input_check_word)
return safe.ok(computed_bytes_u8s);
// otherwise, return an error
else
return safe.error('checksum failure! computed check word: ' + computed_check_word + '; input check word: ' + input_check_word);
}
/**
* given a word, find its index
*/
function byte_of_word(word) {
for (let i = 0; i <= 255; i++) {
if (word === words[i])
return safe.ok(i);
}
return safe.error('invalid word: ' + word);
}
/**
* compute the check word of an array
*/
function check_word(bytes) {
return words[check_byte(bytes)];
}
/**
* given an array, compute the xor of all the bytes in the array
*/
function check_byte(bytes) {
let check_byte = 0;
for (let this_byte of bytes)
check_byte ^= this_byte;
return check_byte;
}
let words = [
"able",
"abuse",
"acquire",
"adjust",
"agent",
"air",
"alert",
"alpha",
"anger",
"answer",
"any",
"argue",
"around",
"assume",
"asthma",
"aunt",
"awkward",
"balcony",
"barrel",
"because",
"behave",
"bicycle",
"bike",
"blind",
"blouse",
"bonus",
"bottom",
"breeze",
"brother",
"bubble",
"burger",
"butter",
"can",
"cannon",
"cargo",
"catalog",
"caught",
"century",
"chaos",
"chicken",
"churn",
"cinnamon",
"clever",
"clock",
"clown",
"collect",
"conduct",
"convince",
"correct",
"cradle",
"crane",
"crime",
"cross",
"crystal",
"curve",
"daughter",
"debris",
"decrease",
"deny",
"deputy",
"despair",
"diesel",
"dinner",
"distance",
"document",
"donate",
"drama",
"drink",
"dutch",
"earth",
"educate",
"elbow",
"employ",
"endless",
"enlist",
"enter",
"equal",
"eternal",
"example",
"exhibit",
"exotic",
"faculty",
"famous",
"fault",
"feature",
"fiber",
"filter",
"firm",
"flame",
"flush",
"follow",
"forward",
"frame",
"fringe",
"future",
"game",
"gate",
"gift",
"glare",
"glow",
"goat",
"grab",
"grief",
"guilt",
"hand",
"hawk",
"health",
"hen",
"hire",
"honey",
"hover",
"hurry",
"hybrid",
"impose",
"inch",
"inherit",
"injury",
"install",
"iron",
"jazz",
"joke",
"just",
"kit",
"kitchen",
"language",
"laundry",
"leader",
"lend",
"leopard",
"license",
"live",
"lobster",
"lounge",
"magnet",
"mail",
"mansion",
"mass",
"math",
"media",
"message",
"metal",
"misery",
"mix",
"more",
"mountain",
"museum",
"mutual",
"narrow",
"nerve",
"next",
"note",
"obey",
"obtain",
"offer",
"once",
"orange",
"ostrich",
"over",
"owner",
"palace",
"patch",
"pave",
"pen",
"phrase",
"piece",
"pizza",
"plunge",
"polar",
"pool",
"power",
"pretty",
"private",
"protect",
"pulp",
"purity",
"quit",
"quote",
"raise",
"razor",
"recall",
"region",
"relief",
"rent",
"rescue",
"review",
"ride",
"risk",
"roof",
"rough",
"saddle",
"salmon",
"sand",
"scene",
"scrub",
"season",
"seek",
"series",
"shed",
"shoe",
"sick",
"silent",
"situate",
"skill",
"slide",
"slush",
"snack",
"solar",
"soul",
"special",
"sphere",
"spot",
"spy",
"stairs",
"stereo",
"strategy",
"stuff",
"success",
"sunny",
"surge",
"swear",
"symptom",
"tail",
"ten",
"tent",
"theme",
"thumb",
"tiny",
"toe",
"tooth",
"topic",
"trade",
"trash",
"trophy",
"truly",
"tumble",
"typical",
"uncle",
"unfair",
"until",
"upper",
"useless",
"van",
"venue",
"video",
"visa",
"vocal",
"walk",
"waste",
"wedding",
"weekend",
"wide",
"winner",
"wise",
"wood",
"wrist",
"zero"
];
//# sourceMappingURL=faert.js.map
@@ -0,0 +1 @@
{"version":3,"file":"faert.js","sourceRoot":"","sources":["../src/faert.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,EACR,CAAA;AAED,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC;;GAEG;AACH,SACA,MAAM,CACD,KAAkB;IAGnB,sBAAsB;IACtB,IAAI,SAAS,GAAoB,EAAE,CAAC;IAEpC,0CAA0C;IAC1C,4BAA4B;IAC5B,KAAK,IAAI,SAAS,IAAI,KAAK,EAC3B;QACI,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC7B;IAED,+BAA+B;IAC/B,2DAA2D;IAC3D,yCAAyC;IACzC,gCAAgC;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAID;;GAEG;AACH,SACA,MAAM,CACD,KAAc;IAGf,IAAI,SAAS,GAA0B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,gBAAgB,GAAmB,SAAS,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,WAAW,GAAwB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEzD,cAAc;IACd,IAAI,cAAc,GAAmB,EAAE,CAAC;IAExC,6CAA6C;IAC7C,KAAK,IAAI,eAAe,IAAI,WAAW,EACvC;QACI,IAAI,eAAe,GAA+B,YAAY,CAAC,eAAe,CAAC,CAAC;QAChF,8DAA8D;QAC9D,IAAI,eAAe,CAAC,EAAE,EACtB;YACI,IAAI,SAAS,GAAY,eAAe,CAAC,MAAM,CAAC;YAChD,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;QACD,oDAAoD;;YAEhD,OAAO,eAAe,CAAC;KAC9B;IAED,8DAA8D;IAC9D,yBAAyB;IACzB,IAAI,kBAAkB,GAAiB,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,mBAAmB,GAAY,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAElE,yBAAyB;IACzB,mCAAmC;IACnC,IAAI,mBAAmB,KAAK,gBAAgB;QACxC,OAAO,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IACvC,6BAA6B;;QAEzB,OAAO,IAAI,CAAC,KAAK,CAAC,yCAAyC,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;AACvI,CAAC;AAID;;GAEG;AACH,SACA,YAAY,CACP,IAAY;IAGb,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,IAAE,GAAG,EAAE,CAAC,EAAE,EACzB;QACI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACzB;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AAID;;GAEG;AACH,SACA,UAAU,CACL,KAAiB;IAGlB,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAGD;;GAEG;AACH,SACA,UAAU,CACL,KAAiB;IAGlB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,SAAS,IAAI,KAAK;QACvB,UAAU,IAAI,SAAS,CAAC;IAC5B,OAAO,UAAU,CAAC;AACtB,CAAC;AAID,IAAI,KAAK,GAAG;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;CACT,CAAA"}
@@ -0,0 +1,37 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export { decoded_data, decode_result, decode, encode };
/**
* Data that RLP can encode. Also the result of decoding.
*/
declare type decoded_data = Uint8Array | Array<decoded_data>;
/**
* Decoding can have a remainder
*/
declare type decode_result = {
decoded_data: decoded_data;
remainder: Uint8Array;
};
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
declare function decode(bytes: Uint8Array): decode_result;
/**
* Encode some decoded data
*/
declare function encode(data: decoded_data): Uint8Array;
@@ -0,0 +1,382 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export { decode, encode };
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
function decode(bytes) {
// check the first byte
let first_byte = bytes[0];
let rest = bytes.slice(1);
// if the first byte is between 0 and 127, that is the data
if (first_byte <= 127) {
return dr(new Uint8Array([first_byte]), rest);
}
// if the first byte is between 128 and 183 = 128 + 55, it is a bytestring
// and the length is Byte - 128
else if (first_byte <= 183) {
let payload_byte_length = first_byte - 128;
let payload = rest.slice(0, payload_byte_length);
let rest2 = rest.slice(payload_byte_length);
return dr(payload, rest2);
}
// if the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
// bytestring. the byte length of bytestring is FirstByte - 183. Then pull
// out the actual data
else if (first_byte <= 191) {
let byte_length_of_byte_length = first_byte - 183;
let bytes_of_byte_length = rest.slice(0, byte_length_of_byte_length);
let byte_length = bytes_to_number(bytes_of_byte_length);
let bytes = rest.slice(byte_length_of_byte_length, byte_length + byte_length_of_byte_length);
let rest2 = rest.slice(byte_length + byte_length_of_byte_length);
return dr(bytes, rest2);
}
// If the first byte is between 192 and 247 = 192 + 55, it is a list. The
// byte length of the list-payload is FirstByte - 192. Then the list
// payload, which needs to be decoded on its own.
else if (first_byte <= 247) {
let byte_length_of_list = first_byte - 192;
let list_payload = rest.slice(0, byte_length_of_list);
let list = decode_list(list_payload);
let rest2 = rest.slice(byte_length_of_list);
return dr(list, rest2);
}
// If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a
// list. The byte length of the byte length of the list-payload is
// FirstByte - 247. Then the byte length of the list. Then the list
// payload, which needs to be decoded on its own.
else {
let byte_length_of_byte_length = first_byte - 247;
let bytes_of_byte_length = rest.slice(0, byte_length_of_byte_length);
let byte_length = bytes_to_number(bytes_of_byte_length);
let list_bytes = rest.slice(byte_length_of_byte_length, byte_length + byte_length_of_byte_length);
let list = decode_list(list_bytes);
let rest2 = rest.slice(byte_length + byte_length_of_byte_length);
return dr(list, rest2);
}
}
/**
* Decode a list payload (non-prefixed) into an `Array<decoded_data>`.
*
* Repeatedly decodes an element off the list until remainder is empty.
*
* @internal
*/
function decode_list(bytes) {
let arr = [];
while (bytes.length > 0) {
// grab an item off the bytes
let { decoded_data, remainder } = decode(bytes);
// push it
arr.push(decoded_data);
// update bytes
bytes = remainder;
}
return arr;
}
/**
* Convert bytestring to number
*
* @internal
*/
function bytes_to_number(bytes) {
let n = 0;
for (let b of bytes) {
n <<= 8;
n += b;
}
return n;
}
/**
* Make a `decode_result` containing the two arguments
*
* @internal
*/
function dr(x, y) {
return { decoded_data: x,
remainder: y };
}
//=============================================================================
//=============================================================================
// ENCODING
//=============================================================================
//=============================================================================
/**
* Encode some decoded data
*/
function encode(data) {
// is it an array or data
if (is_binary(data)) {
return encode_binary(data);
}
else if (is_list(data)) {
return encode_list(data);
}
else {
throw new Error('encode told to encode something that is not an array or a binary: ' + data);
}
}
/**
* Encode a binary into RLP
*
* @internal
*/
function encode_binary(bytes) {
let len = bytes.length;
// single byte case when the byte is between 0..127
// result is the bytestring containing the byte itself
if ((len === 1) &&
(bytes[0] <= 127)) {
return bytes;
}
// if the bytestring is 0..55 bytes long, the first byte in the result is
// 128 + Length, the rest of the result bytestring is the input string
else if (len <= 55) {
// construct the result
// <<128 + Len, Bytes/binary>>
let result = new Uint8Array(len + 1);
// first byte is 128 + length
result[0] = 128 + len;
// copy input bytes into result
for (let input_idx0 = 0; input_idx0 < len; input_idx0++) {
let result_idx0 = input_idx0 + 1;
result[result_idx0] = bytes[input_idx0];
}
return result;
}
// if the bytestring is more than 55 bytes long, the first byte is 183 +
// ByteLengthOfByteLength, followed by the byte length, followed by the
// bytes
else {
let len_bytes = encode_unsigned(len);
let len_bytes_length = len_bytes.length;
// total array is
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
let result = new Uint8Array(1 + len_bytes_length + len);
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
result[0] = 183 + len_bytes_length;
// copy len_bytes into result
for (let len_bytes_idx0 = 0; len_bytes_idx0 < len_bytes_length; len_bytes_idx0++) {
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0 = len_bytes_idx0 + 1;
result[result_idx0] = len_bytes[len_bytes_idx0];
}
// copy original byte array into result
for (let input_idx0 = 0; input_idx0 < len; input_idx0++) {
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0 = input_idx0 + (1 + len_bytes_length);
result[result_idx0] = bytes[input_idx0];
}
// finally, return the result
return result;
}
}
/**
* Encode a list
*
* @internal
*/
function encode_list(list) {
// first encode every element in the list, then branch
let payloads = list.map(encode);
let payload = uint8arr_concat(payloads);
let payload_size = payload.length;
// if the payload size is in 0..55, then the first byte is 192 + payload
// size, followed by the payload
if (payload_size <= 55) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
let result = new Uint8Array(1 + payload_size);
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
result[0] = 192 + payload_size;
// copy the rest of the payload into result
for (let payload_idx0 = 0; payload_idx0 < payload_size; payload_idx0++) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
let result_idx0 = payload_idx0 + 1;
result[result_idx0] = payload[payload_idx0];
}
return result;
}
// if the payload size is greater than 55, the first byte is 247 +
// size_of_payload_size, followed by the payload size, followed by the
// payload
else {
// compute the payload size size
let payload_size_bytes = encode_unsigned(payload_size);
let payload_size_size = payload_size_bytes.length;
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
let result = new Uint8Array(1 + payload_size_size + payload_size);
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// first byte is 247 + payload_size_size
result[0] = 247 + payload_size_size;
// copy the payload_size_bytes into result
for (let psb_idx0 = 0; psb_idx0 < payload_size_size; psb_idx0++) {
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 byte for this
let result_idx0 = psb_idx0 + 1;
result[result_idx0] = payload_size_bytes[psb_idx0];
}
// copy the payload into result
for (let pb_idx0 = 0; pb_idx0 < payload_size; pb_idx0++) {
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 + payload_size_size bytes for this
let result_idx0 = pb_idx0 + (1 + payload_size_size);
result[result_idx0] = payload[pb_idx0];
}
// finally, return result
return result;
}
}
/**
* Encode a number as a bytestring
*
* Not for general use, this assumes the input number is greater than 55
*
* @internal
*/
function encode_unsigned(n) {
// can assume that n initially is greater than 55
// have to encode it in reverse order
let arr = [];
// repeated division by 256 with remainder
//
// example: suppose bign was 1234 and we were dividing by 10
//
// iteration 0:
// bign = 1234
// arr = []
// ---
// bign / 10 = 123
// bign % 10 = 4
// ---
// bign = 123
// arr = [4]
//
// iteration 1:
// bign = 123
// arr = [4]
// ---
// bign / 10 = 12
// bign % 10 = 3
// ---
// bign = 12
// arr = [4, 3]
//
// iteration 2:
// bign = 12
// arr = [4, 3]
// ---
// bign / 10 = 1
// bign % 10 = 2
// ---
// bign = 1
// arr = [4, 3, 2]
//
// iteration 3:
// bign = 1
// arr = [4, 3, 2]
// ---
// bign / 10 = 0
// bign % 10 = 1
// ---
// bign = 0
// arr = [4, 3, 2, 1]
//
// iteration 4:
// bign = 0
// arr = [4, 3, 2, 1]
// ---
// DONE
while (n > 0) {
arr.push(n % 256);
n >>= 8;
}
// reverse and make into Uint8Array
arr.reverse();
return new Uint8Array(arr);
}
/**
* concatenate an array of `Uint8Array`s into a single Uint8Array
*
* @internal
*/
function uint8arr_concat(arrs) {
// total length
let total_len = arrs.reduce(// fold
function (acc_len, this_uint8array) {
return acc_len + this_uint8array.length;
},
// initial accumulator
0);
// start up result
let result = new Uint8Array(total_len);
let result_idx0 = 0;
// concatenate
for (let this_uint8arr of arrs) {
// bytewise copy of this uint8array
for (let this_uint8arr_idx0 = 0; this_uint8arr_idx0 < this_uint8arr.length; this_uint8arr_idx0++) {
// copy byte and increment result idx0
result[result_idx0] = this_uint8arr[this_uint8arr_idx0];
result_idx0++;
}
}
return result;
}
/**
* returns true if input is `instanceof Uint8Array`
*
* @internal
*/
function is_binary(x) {
return (x instanceof Uint8Array);
}
/**
* returns true if input is `instanceof Array`
*
* @internal
*/
function is_list(x) {
return (x instanceof Array);
}
//# sourceMappingURL=rlp.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,66 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export { Safe, Ok, Error, ok, error, unsafe };
/**
* Type that catches positive errors
*/
declare type Safe<ok_t, err_t> = Ok<ok_t> | Error<err_t>;
/**
* Ok type
*/
declare type Ok<ok_t> = {
ok: true;
result: ok_t;
};
/**
* Error type
*/
declare type Error<err_t> = {
ok: false;
error: err_t;
};
/**
* Constructs an `Ok` value from a pure value
*/
declare function ok<ok_t>(x: ok_t): Ok<ok_t>;
/**
* Constructs an `Error` value from a pure value
*/
declare function error<err_t>(x: err_t): Error<err_t>;
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
declare function unsafe<ok_t, err_t>(x: Safe<ok_t, err_t>): ok_t;
@@ -0,0 +1,58 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export { ok, error, unsafe };
/**
* Constructs an `Ok` value from a pure value
*/
function ok(x) {
return { ok: true, result: x };
}
/**
* Constructs an `Error` value from a pure value
*/
function error(x) {
return { ok: false, error: x };
}
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
function unsafe(x) {
if (x.ok)
return x.result;
else
throw x.error;
}
//# sourceMappingURL=safe.js.map
@@ -0,0 +1 @@
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAIH,EAAE,EACF,KAAK,EACL,MAAM,EACT,CAAA;AA2BD;;GAEG;AACH,SACA,EAAE,CAEG,CAAQ;IAGT,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;AACjC,CAAC;AAID;;GAEG;AACH,SACA,KAAK,CAEA,CAAQ;IAGT,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;AACjC,CAAC;AAID;;;GAGG;AACH,SACA,MAAM,CAED,CAAoB;IAGrB,IAAI,CAAC,CAAC,EAAE;QACJ,OAAO,CAAC,CAAC,MAAM,CAAC;;QAEhB,MAAM,CAAC,CAAC,KAAK,CAAC;AACtB,CAAC"}
@@ -0,0 +1,418 @@
/**
* Base58 encoding/decoding
*/
export {
encode,
decode
}
//=============================================================================
// ENCODING
//=============================================================================
/**
* Encode a Uint8Array into base58
*/
function
encode
(binary : Uint8Array)
: string
{
let num_leading_zeros : number = nlz(binary);
let rest : Uint8Array = binary.slice(num_leading_zeros);
let ones : string = encode_zeros(num_leading_zeros);
let rest_b58 : string = encode_rest(rest);
let result : string = ones + rest_b58;
return result;
}
/**
* count the number of leading zeros in a uint8array
*
* @internal
*/
function
nlz
(bytes: Uint8Array)
: number
{
let n = 0;
for (let this_byte of bytes)
{
if (0 === this_byte) { n++; }
else { break; }
}
return n;
}
/**
* Generate a bunch of '1's for however many leading zeros there are
*
* @internal
*/
function
encode_zeros
(how_many : number)
: string
{
let ones : string = '';
for (let i = 1;
i <= how_many;
i++)
{
ones += '1';
}
return ones;
}
/**
* Encode a Uint8Array that has no leading zeros
*
* @internal
*/
function
encode_rest
(bytes : Uint8Array)
: string
{
let bytes_bignum : bigint = bytes_to_bigint(bytes);
let result : string = bignum_to_base58(bytes_bignum);
return result;
}
/**
* Convert a bytestring to a bignum
*
* @internal
*/
function
bytes_to_bigint
(bytes: Uint8Array)
: bigint
{
let acc_bigint : bigint = 0n;
for(let this_byte of bytes)
{
acc_bigint <<= 8n;
acc_bigint += BigInt(this_byte);
}
return acc_bigint;
}
/**
* Convert a BigInt to Base58
*
* @internal
*/
function
bignum_to_base58
(q: bigint)
: string
{
let s = '';
while (q !== 0n)
{
let this_n : bigint = q % 58n;
q /= 58n;
let this_b58_char : string = bigint_to_char(this_n);
s = this_b58_char + s;
}
return s;
}
//=============================================================================
// DECODING
//=============================================================================
/**
* Decode a Base58 string into a Uint8Array
*/
function
decode
(base58: string)
: Uint8Array
{
let num_leading_ones : number = nlo(base58);
let rest : string = base58.slice(num_leading_ones);
let zeros : Array<number> = decode_ones(num_leading_ones);
let rest_arr : Array<number> = decode_rest(rest);
let pre_result : Array<number> = zeros.concat(rest_arr);
return new Uint8Array(pre_result);
}
/**
* count the number of leading 1 characters in a uint8array
*
* @internal
*/
function
nlo
(base58: string)
: number
{
let n = 0;
for (let this_char of base58)
{
if ('1' === this_char) { n++; }
else { break; }
}
return n;
}
/**
* Generate a bunch of '0's for however many leading ones there are
*
* @internal
*/
function
decode_ones
(how_many : number)
: Array<number>
{
let zeros : Array<number> = [];
for (let i = 1;
i <= how_many;
i++)
{
zeros.push(0);
}
return zeros;
}
/**
* Decode a string that has no leading 1s
*
* @internal
*/
function
decode_rest
(base58: string)
: Array<number>
{
let result_bignum : bigint = base58_to_bigint(base58);
let result : Array<number> = bigint_to_base256(result_bignum);
return result;
}
/**
* Convert a base58 string to a bignum
*
* @internal
*/
function
base58_to_bigint
(base58: string)
: bigint
{
let acc_bigint : bigint = 0n;
for(let this_char of base58)
{
acc_bigint *= 58n;
acc_bigint += char_to_bigint(this_char);
}
return acc_bigint;
}
/**
* convert a bignum into a byte array
*
* @end
*/
function
bigint_to_base256
(q: bigint)
: Array<number>
{
let arr_reverse = [];
while(q !== 0n)
{
let r: number = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return arr_reverse;
}
//=============================================================================
// TRANSLATION TABLES
//=============================================================================
/**
* Base58 integer -> character conversion table
*
* @internal
*/
function
bigint_to_char
(n: bigint)
: string
{
switch(n) {
case 0n: return '1';
case 1n: return '2';
case 2n: return '3';
case 3n: return '4';
case 4n: return '5';
case 5n: return '6';
case 6n: return '7';
case 7n: return '8';
case 8n: return '9';
case 9n: return 'A';
case 10n: return 'B';
case 11n: return 'C';
case 12n: return 'D';
case 13n: return 'E';
case 14n: return 'F';
case 15n: return 'G';
case 16n: return 'H';
case 17n: return 'J';
case 18n: return 'K';
case 19n: return 'L';
case 20n: return 'M';
case 21n: return 'N';
case 22n: return 'P';
case 23n: return 'Q';
case 24n: return 'R';
case 25n: return 'S';
case 26n: return 'T';
case 27n: return 'U';
case 28n: return 'V';
case 29n: return 'W';
case 30n: return 'X';
case 31n: return 'Y';
case 32n: return 'Z';
case 33n: return 'a';
case 34n: return 'b';
case 35n: return 'c';
case 36n: return 'd';
case 37n: return 'e';
case 38n: return 'f';
case 39n: return 'g';
case 40n: return 'h';
case 41n: return 'i';
case 42n: return 'j';
case 43n: return 'k';
case 44n: return 'm';
case 45n: return 'n';
case 46n: return 'o';
case 47n: return 'p';
case 48n: return 'q';
case 49n: return 'r';
case 50n: return 's';
case 51n: return 't';
case 52n: return 'u';
case 53n: return 'v';
case 54n: return 'w';
case 55n: return 'x';
case 56n: return 'y';
case 57n: return 'z';
default:
throw new Error('invalid base58 bigint: ' + n);
}
}
/**
* Base58 character -> integer conversion table
*
* @internal
*/
function
char_to_bigint
(s: string)
: bigint
{
switch(s) {
case '1': return 0n;
case '2': return 1n;
case '3': return 2n;
case '4': return 3n;
case '5': return 4n;
case '6': return 5n;
case '7': return 6n;
case '8': return 7n;
case '9': return 8n;
case 'A': return 9n;
case 'B': return 10n;
case 'C': return 11n;
case 'D': return 12n;
case 'E': return 13n;
case 'F': return 14n;
case 'G': return 15n;
case 'H': return 16n;
case 'J': return 17n;
case 'K': return 18n;
case 'L': return 19n;
case 'M': return 20n;
case 'N': return 21n;
case 'P': return 22n;
case 'Q': return 23n;
case 'R': return 24n;
case 'S': return 25n;
case 'T': return 26n;
case 'U': return 27n;
case 'V': return 28n;
case 'W': return 29n;
case 'X': return 30n;
case 'Y': return 31n;
case 'Z': return 32n;
case 'a': return 33n;
case 'b': return 34n;
case 'c': return 35n;
case 'd': return 36n;
case 'e': return 37n;
case 'f': return 38n;
case 'g': return 39n;
case 'h': return 40n;
case 'i': return 41n;
case 'j': return 42n;
case 'k': return 43n;
case 'm': return 44n;
case 'n': return 45n;
case 'o': return 46n;
case 'p': return 47n;
case 'q': return 48n;
case 'r': return 49n;
case 's': return 50n;
case 't': return 51n;
case 'u': return 52n;
case 'v': return 53n;
case 'w': return 54n;
case 'x': return 55n;
case 'y': return 56n;
case 'z': return 57n;
default:
throw new Error('invalid base58 char: ' + s);
}
}
@@ -0,0 +1,655 @@
/**
* Base64 Utility Functions in TypeScript
*/
export {
encode,
decode
}
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
function
encode
(bytes: Uint8Array)
: string
{
// slice the array
// length of head is a multiple of 3
// treat the tail as a special case
let {head, tail, tail_len} = slice3k(bytes);
let head_str : string = encode_head(head);
let tail_str : string = encode_tail(tail, tail_len);
return head_str + tail_str;
}
type slice3k
= {head : Uint8Array,
tail : Uint8Array,
tail_len : number};
/**
* Take a Uint8Array, take the first 3k (k >= 0) bytes, put them in head, and
* the remaining 0,1, or 2 bytes, put them in tail
*
* @internal
*/
function
slice3k
(bytes: Uint8Array)
: slice3k
{
let len : number = bytes.length;
// too lazy to look up how to do integer division in js so this will do
let tail_len : number = len % 3;
let head_len : number = len - tail_len;
// for slice:
// first argument is the 0-index of the start
// second - first is the length of the slice
let head : Uint8Array = bytes.slice(0, head_len);
// empty second argument means go to the end
let tail : Uint8Array = bytes.slice(head_len);
return {head : head,
tail : tail,
tail_len : tail_len};
}
/**
* Encode a Uint8Array whose length is known to be a multiple of 3
*
* @internal
*/
function
encode_head
(head_bytes: Uint8Array)
: string
{
// can assume length of bytes is a multiple of 3
// start index at 0
// increment by 3
let head_bytes_len : number = head_bytes.length;
let max_idx0 : number = head_bytes_len - 1;
let head_str_acc : string = '';
for(let this_3slice_start_idx0 = 0;
this_3slice_start_idx0 <= max_idx0;
this_3slice_start_idx0 += 3)
{
let this_3slice_bytes : Uint8Array = head_bytes.slice(this_3slice_start_idx0, this_3slice_start_idx0 + 3);
let this_3slice_str : string = encode3(this_3slice_bytes);
head_str_acc += this_3slice_str;
}
return head_str_acc;
}
/**
* Encode a 3 bytes into base64 notation
*
* @internal
*/
function
encode3
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
let b1 : number = bytes[1];
let b2 : number = bytes[2];
// ABCDEFGH 12345678 abcdefgh
// b0 b1 b2
// ABCDEF GH1234 5678ab cdefgh
// n0 n1 n2 n3
let n0 : number = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// b2 = abcdefgh
// b2 >> 6 = ______ab
// n2 = __5678ab
let n2 : number = ((b1 % 16) << 2) + (b2 >> 6);
// b2 = abcdefgh
// 64 = _1______
// n3 = __cdefgh
let n3 : number = b2 % 64;
// convert to chars
let s0 : string = int2char(n0);
let s1 : string = int2char(n1);
let s2 : string = int2char(n2);
let s3 : string = int2char(n3);
// retrvn
return s0 + s1 + s2 + s3;
}
/**
* Encode the final 0, 1, or 2 bytes
*
* @internal
*/
function
encode_tail
(tail_bytes : Uint8Array,
tail_len : number)
: string
{
switch(tail_len) {
case 0: return '';
case 1: return encode1(tail_bytes);
case 2: return encode2(tail_bytes);
default:
throw new Error('encode_tail with tail_len = ' + tail_len);
}
}
/**
* Encode a single byte
*
* @internal
*/
function
encode1
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
// n0 = __ABCDEF
// b0 = ABCDEFGH
// b0 >> 2 = __ABCDEF
let n0 : number = b0 >> 2;
// n1 = __GH____
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
let n1 : number = (b0 % 4) << 4;
return int2char(n0) + int2char(n1) + '==';
}
/**
* Encode two bytes
*
* @internal
*/
function
encode2
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
let b1 : number = bytes[1];
// ABCDEFGH 12345678
// b0 b1
// ABCDEF GH1234 5678__
// n0 n1 n2
let n0 : number = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// n2 = __5678__
let n2 : number = (b1 % 16) << 2;
// convert to chars
let s0 : string = int2char(n0);
let s1 : string = int2char(n1);
let s2 : string = int2char(n2);
// retrvn
return s0 + s1 + s2 + '=';
}
/**
* Decode a base64-encoded string
*/
function
decode
(base64_str : string)
: Uint8Array
{
// length of the string is guaranteed to be a multiple of 4
// if the string is empty, return the empty array
let len = base64_str.length;
// this branching contains the implicit assertion that the length is a
// multiple of 4. If this is not true, the bottom branch is triggered.
// general case goes first because speeeeeed
if ( (4 < len)
&& (0 === (len % 4)))
{
// split the head and tail
let tail_start_idx0 : number = len - 4;
let head_s : string = base64_str.slice(0, tail_start_idx0);
let tail_s : string = base64_str.slice(tail_start_idx0);
// Using arrays because Uint8Arrays don't have a concat operation
let head_arr : Array<number> = decode_head(head_s);
let tail_arr : Array<number> = decode_tail(tail_s);
// silly to put these in variables but this is exactly the type of
// situation where JS type insanity shows up
//
// see: i forgot
// > [1,2,3] + [4,5,6]
// '1,2,34,5,6'
//
// Originally, I used + like some sort of moron who codes in a sane
// language
//
// seriously what is this language
//
// this is some clown behavior
let total_arr : Array<number> = head_arr.concat(tail_arr);
return new Uint8Array(total_arr);
}
// special case if the length is exactly 4
else if (4 === len)
{
// it's just a tail
return new Uint8Array(decode_tail(base64_str));
}
// empty string
else if (0 === len)
{
return new Uint8Array([]);
}
else
{
throw new Error('base64 decode: invalid string length: ' + len);
}
}
/**
* Decode a string known to not have any padding
*
* @internal
*/
function
decode_head
(s: string)
: Array<number>
{
// go 4 characters at a time
let max_i0 : number = s.length - 1;
let decoded_acc : Array<number> = [];
for(let i0 = 0;
i0 <= max_i0;
i0 += 4)
{
let this_slice_s : string = s.slice(i0, i0 + 4);
let this_slice_arr : Array<number> = decode3(this_slice_s);
// update accumulator
decoded_acc = decoded_acc.concat(this_slice_arr);
}
return decoded_acc;
}
/**
* Decode 4 characters that correspond to either 3 bytes, 2, bytes, or 1 byte
*
* @internal
*/
function
decode_tail
(s: string)
: Array<number>
{
// all that matters right now is the last 2 chars
// s0, s1, s2, s3
// 0 based indexing is so annoying
let s2 = s[2];
let s3 = s[3];
// braaaaaaaaaaaaaaaaaench
// two equals signs means 1 byte
if (('=' === s3) && ('=' === s2)) {
return decode1(s);
}
// one equals sign means 2 bytes
else if (('=' === s3)) {
return decode2(s);
}
// 0 equals signs means 3 bytes
else {
return decode3(s);
}
}
/**
* Decode a 4-character long base64 string corresponding to 3 bytes
*
* @internal
*/
function
decode3
(s: string)
: Array<number>
{
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
let s2 : string = s[2];
let s3 : string = s[3];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
let n2 : number = char2int(s2);
let n3 : number = char2int(s3);
// abcdef gh1234 5678ab cdefgh
// n0 n1 n2 n3
// abcdefgh 12345678 abcdefgh
// b0 b1 b2
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678ab
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 : number = ((n1 % 16) << 4) + (n2 >> 2);
// n2 = __5678ab
// 4 = _____1__
// n2 % 4 = ______ab
// (n2 % 4) << 6 = ab______
// n3 = __cdefgh
let b2 : number = ((n2 % 4) << 6) + n3;
return [b0, b1, b2];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function
decode2
(s: string)
: Array<number>
{
// xyz=
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
let s2 : string = s[2];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
let n2 : number = char2int(s2);
// abcdef gh1234 5678__
// n0 n1 n2
// abcdefgh 12345678
// b0 b1
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678__
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 : number = ((n1 % 16) << 4) + (n2 >> 2);
return [b0, b1];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function
decode1
(s: string)
: Array<number>
{
// xy==
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
// abcdef gh____
// n0 n1
// abcdefgh
// b0
// n0 = __abcdef
// n1 = __gh____
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
return [b0];
}
// FIXME: these tables would *probably* be faster if they were made into objects
/**
* Conversion table for base64 encode
*
* @internal
*/
function
int2char
(n: number)
: string
{
switch(n) {
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
case 5: return 'F';
case 6: return 'G';
case 7: return 'H';
case 8: return 'I';
case 9: return 'J';
case 10: return 'K';
case 11: return 'L';
case 12: return 'M';
case 13: return 'N';
case 14: return 'O';
case 15: return 'P';
case 16: return 'Q';
case 17: return 'R';
case 18: return 'S';
case 19: return 'T';
case 20: return 'U';
case 21: return 'V';
case 22: return 'W';
case 23: return 'X';
case 24: return 'Y';
case 25: return 'Z';
case 26: return 'a';
case 27: return 'b';
case 28: return 'c';
case 29: return 'd';
case 30: return 'e';
case 31: return 'f';
case 32: return 'g';
case 33: return 'h';
case 34: return 'i';
case 35: return 'j';
case 36: return 'k';
case 37: return 'l';
case 38: return 'm';
case 39: return 'n';
case 40: return 'o';
case 41: return 'p';
case 42: return 'q';
case 43: return 'r';
case 44: return 's';
case 45: return 't';
case 46: return 'u';
case 47: return 'v';
case 48: return 'w';
case 49: return 'x';
case 50: return 'y';
case 51: return 'z';
case 52: return '0';
case 53: return '1';
case 54: return '2';
case 55: return '3';
case 56: return '4';
case 57: return '5';
case 58: return '6';
case 59: return '7';
case 60: return '8';
case 61: return '9';
case 62: return '+';
case 63: return '/';
default: throw new Error("invalid base64 encode byte: " + n);
}
}
/**
* Conversion table for base64 decode
*
* @internal
*/
function
char2int
(s: string)
: number
{
switch(s) {
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 17;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
case 'a': return 26;
case 'b': return 27;
case 'c': return 28;
case 'd': return 29;
case 'e': return 30;
case 'f': return 31;
case 'g': return 32;
case 'h': return 33;
case 'i': return 34;
case 'j': return 35;
case 'k': return 36;
case 'l': return 37;
case 'm': return 38;
case 'n': return 39;
case 'o': return 40;
case 'p': return 41;
case 'q': return 42;
case 'r': return 43;
case 's': return 44;
case 't': return 45;
case 'u': return 46;
case 'v': return 47;
case 'w': return 48;
case 'x': return 49;
case 'y': return 50;
case 'z': return 51;
case '0': return 52;
case '1': return 53;
case '2': return 54;
case '3': return 55;
case '4': return 56;
case '5': return 57;
case '6': return 58;
case '7': return 59;
case '8': return 60;
case '9': return 61;
case '+': return 62;
case '/': return 63;
default: throw new Error("invalid base64 character: " + s);
}
}
@@ -0,0 +1,377 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export {
bytes_to_bigint,
bigint_to_bytes,
concat,
strong_rand_bytes
};
/**
* Concatenate two arrays
*/
function
concat
(arr1 : Uint8Array,
arr2 : Uint8Array)
: Uint8Array
{
let len1 : number = arr1.length;
let len2 : number = arr2.length;
let arr1_idx0_offset : number = 0;
let arr2_idx0_offset : number = len1;
let result_len : number = len1 + len2;
let result : Uint8Array = new Uint8Array(result_len);
// copy first array into result
for (let arr1_idx0 = 0;
arr1_idx0 < len1;
arr1_idx0++)
{
// no offset here
let result_idx0 : number = arr1_idx0 + arr1_idx0_offset;
result[result_idx0] = arr1[arr1_idx0];
}
// copy second array into result
for (let arr2_idx0 = 0;
arr2_idx0 < len2;
arr2_idx0++)
{
// offset by the length of the first array
let result_idx0 : number = arr2_idx0 + arr2_idx0_offset;
result[result_idx0] = arr2[arr2_idx0];
}
return result;
}
/**
* Cryptographically random bytes
*/
function
strong_rand_bytes
(how_many : number)
: Uint8Array
{
let arr = new Uint8Array(how_many);
(new Crypto()).getRandomValues(arr);
return arr;
}
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
function
bytes_to_bigint
(bytes: Uint8Array)
: bigint
{
let n : bigint = 0n;
for (let b of bytes) {
// move first, then add
// otherwise it ends on a move
// imperative languages are for losers
n <<= 8n;
n += BigInt(b);
}
return n;
}
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
function
bigint_to_bytes
(q: bigint)
: Uint8Array
{
if (q < 0n) {
throw new Error('q < 0n: ' + q);
}
let arr_reverse = [];
while (q > 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return new Uint8Array(arr_reverse);
}
/**
* Oh no, bitstrings in a language that only has bytestrings
*
* By convention these are `Uint8Array`s with byte length `ceil(bit_length /
* 8)`, and all trailing bits are zero.
*/
type bits =
{bit_length : number,
bytes : Uint8Array};
/**
* Get an uninitialized bitstring
*
* @internal
*/
function
bits_null
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
return {bit_length : bit_length,
bytes : result};
}
/**
* Get a bitstring of a given length where every value is 0.
*/
function
bits_zeros
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
for (let i0 = 0;
i0 < byte_length;
i0++)
{
result[i0] = 0;
}
return {bit_length : bit_length,
bytes : result};
}
/**
* Get a bitstring of a given length where every value is 1.
*/
function
bits_ones
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
// fill everything except the last byte with 255s
for (let i0 = 0;
i0 < (byte_length - 1);
i0++)
{
result[i0] = 255;
}
// alright so the last byte
// ok so the number of leading 0s is
// 8 - (bit_length % 8)
let num_trailing_zero_bits : number = 8 - (bit_length % 8);
// the trailing byte is 255 << that
// e.g. 3 trailing 0s
// 1111_1111 -> 1111_1000
let last_byte : number = 255 << num_trailing_zero_bits;
let last_byte_idx0 : number = byte_length - 1;
result[last_byte_idx0] = last_byte;
return {bit_length : bit_length,
bytes : result};
}
/**
* Get the bit at a given 0-index
*/
function
bits_i0th
(bit_idx0 : number,
bits : bits)
: number
{
// first task is figuring out what byte we're at
// for instance if we want bit 27
// 3*8 = 24 =< 27 < 4*8
// so it's Math.floor(bit_idx0 / 8)
let byte_idx0 : number = Math.floor(bit_idx0 / 8);
// let's fetch the byte and work with that
let the_byte : number = bits.bytes[byte_idx0];
// ok so let's go with 27 again
// 27 = 3 mod 8
// so we bitshift right by (8 - 3)
// and then take the remainder dividing by 2
// --B-_---- -> ----_---B -> 0000_000B
let bsr : number = 8 - (bit_idx0 % 8);
return (the_byte >> bsr) % 2;
}
/**
* Concatenate two bitstrings
*/
function
bits_concat
(bits1 : bits,
bits2 : bits)
: bits
{
let result_bit_length : number = bits1.bit_length + bits2.bit_length;
let bytes1 : Uint8Array = bits1.bytes;
let bytes2 : Uint8Array = bits2.bytes;
// using zeros here because of our xor trick in a minute
let result_bits : bits = bits_null(result_bit_length);
let result_bytes : Uint8Array = result_bits.bytes;
// go along each byte in result, and compute the byte boundary
for (let i = 0;
i < result_bytes.length;
i++)
{
// ABCD_EFGH _
// 0123_4567 8
// this is the bit index of the leftmost bit in this byte
let start_bit_bi0 : number = i * 8;
let next_start_bit_bi0 : number = start_bit_bi0 + 8;
// does the bit at the beginning of this byte correspond to the first array?
// strict comparison:
// suppose i = 0,
// suppose bit_length1 is 0
// then this says no, go to second array
// suppose bl1 = 1,
// this says start at first array
let start_bit_is_of_first_array : boolean = start_bit_bi0 < bits1.bit_length;
// weak comparison:
// suppose bit_length1 = 8
// ABCD_EFGH _
// 0123_4567 8
// ^
// start_bit_bi0 ^ next_start_bit_bi0
let stop_bit_is_of_first_array : boolean = next_start_bit_bi0 <= bits1.bit_length;
// is this a bytes1 byte
let is_bytes1_byte : boolean = start_bit_is_of_first_array && stop_bit_is_of_first_array;
let is_boundary_byte : boolean = start_bit_is_of_first_array && !stop_bit_is_of_first_array;
// need to work out the ping_pong bs up here because js is dumb and I
// can't put lets between elseifs
// alright, now we're in the case of only copying from the second array
// we have two cases:
// ping-pong:
// ABCD_EFGH 1234_5678
// - ---- ---
// copying these bits
// ping:
// ABCD_EFGH <end>
// - ---- 000
//
// how to distinguish between these two??
//
// we're in the ping case when the start_bit_bi0 corresponds to the
// final byte of the second array
//
// ok
//
// we need to compute the bit address in the second array that
// corresponds to the bit address at the beginning of this byte in the
// result array
let bits2_addr_bi0 : number = start_bit_bi0 - bits1.bit_length;
// I think the variable is
// bits_left_to_copy = bits2.bit_length - bit_addr2_bi0
// no + 1 because the current bit is uncopied,
// so if bit_addr2_bi0 = 7 and bits2.bit_length is 8, it means we
// have the last bit to copy
// cases:
// bits_left_to_copy <= 0 ->
// this would mean we have more bits to copy, but are out of
// source bits. should be impossible if bits_null is correct
// bits_left_to_copy <= 8 ->
// this would mean we are going to fill this last byte in the
// result array with the correct bits from array2, but how we
// do this will depend on how those are arranged in bytes2
// (whether we grab one or two bytes)
//
// this is the tricky case
//
// I think what matters here is the byte address in the second array
// if we're on the last byte
// 8 < bits_left_to_copy ->
// this means we can safely grab two bytes from bytes2, and do
// our bitshifting to make it correct
//
// FIXME
let bits_left_to_copy : number = bits2.bit_length - bits2_addr_bi0;
// no the variable that matters is which byte we're on in the result
let this_bytes2_addr_i0 : number = Math.floor(bits2_addr_bi0 / 8);
let next_bytes2_addr_i0 : number = this_bytes2_addr_i0 + 1;
let bitshift_amt : number = bits1.bit_length % 8;
let ping : boolean = next_bytes2_addr_i0 === bytes2.length;
// simple case: this is a byte from the first array
// just copy it
if (is_bytes1_byte)
result_bytes[i] = bytes1[i];
// this is a boundary byte
// further cases:
// second bit length is 0 ->
// ABCD_EF-- <empty>
// ^ starting here
// just copy first byte and move along
else if (is_boundary_byte && (bits2.bit_length === 0))
result_bytes[i] = bytes1[i];
// boundary byte, and there is at least one byte in the second array
else if (is_boundary_byte)
{
// copy over the first byte
result_bytes[i] = bytes1[i];
// take the first byte from the second array
let first_byte_of_second_array : number = bytes2[0];
// bytes1:
// ABCD_EF00
// 6
// bytes2:
// 1234_5678
// 0000_0012
// and bitshift it right by that amount
let bitshift_amt : number = bits1.bit_length % 8;
result_bytes[i] ^= first_byte_of_second_array >> bitshift_amt;
}
// last byte of second array
else if (ping)
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt);
// ping-pong: not last byte of second array
else
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt) ^ (bytes2[next_bytes2_addr_i0] << bitshift_amt);
}
return {bit_length : result_bit_length,
bytes : result_bytes};
}
@@ -0,0 +1,399 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export {
encode,
decode,
byte_of_word,
check_word,
check_byte,
words
}
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
function
encode
(bytes : Uint8Array)
: string
{
// initial accumulator
let words_acc : Array<string> = [];
// go along each byte and look up the word
// add it to the accumulator
for (let this_byte of bytes)
{
let this_word = words[this_byte];
words_acc.push(this_word);
}
// prepend check word to phrase
// yes craig it would be faster to do the check byte inline
// the usage case here is 64 byte strings
// double pass is not a big deal
return check_word(bytes) + ' ' + words_acc.join(' ');
}
/**
* Decode a FAERT string into bytes
*/
function
decode
(faert : string)
: safe.Safe<Uint8Array, string>
{
let all_words : Array<string> = faert.split(' ');
let input_check_word : string = all_words[0];
let input_words : Array<string> = all_words.slice(1)
// accumulator
let computed_bytes : Array<number> = [];
// loop over words and figure out accumulator
for (let this_input_word of input_words)
{
let maybe_this_byte : safe.Safe<number, string> = byte_of_word(this_input_word);
// if the word is an allowable word, add it to the accumulator
if (maybe_this_byte.ok)
{
let this_byte : number = maybe_this_byte.result;
computed_bytes.push(this_byte);
}
// error case, propagate the error up the call chain
else
return maybe_this_byte;
}
// at this point, we can assume we correctly decoded all words
// compute the check byte
let computed_bytes_u8s : Uint8Array = new Uint8Array(computed_bytes);
let computed_check_word : string = check_word(computed_bytes_u8s);
// check if it is correct
// if so, return the computed bytes
if (computed_check_word === input_check_word)
return safe.ok(computed_bytes_u8s);
// otherwise, return an error
else
return safe.error('checksum failure! computed check word: ' + computed_check_word + '; input check word: ' + input_check_word);
}
/**
* given a word, find its index
*/
function
byte_of_word
(word: string)
: safe.Safe<number, string>
{
for (let i=0; i<=255; i++)
{
if (word === words[i])
return safe.ok(i);
}
return safe.error('invalid word: ' + word);
}
/**
* compute the check word of an array
*/
function
check_word
(bytes: Uint8Array)
: string
{
return words[check_byte(bytes)];
}
/**
* given an array, compute the xor of all the bytes in the array
*/
function
check_byte
(bytes: Uint8Array)
: number
{
let check_byte = 0;
for (let this_byte of bytes)
check_byte ^= this_byte;
return check_byte;
}
let words = [
"able",
"abuse",
"acquire",
"adjust",
"agent",
"air",
"alert",
"alpha",
"anger",
"answer",
"any",
"argue",
"around",
"assume",
"asthma",
"aunt",
"awkward",
"balcony",
"barrel",
"because",
"behave",
"bicycle",
"bike",
"blind",
"blouse",
"bonus",
"bottom",
"breeze",
"brother",
"bubble",
"burger",
"butter",
"can",
"cannon",
"cargo",
"catalog",
"caught",
"century",
"chaos",
"chicken",
"churn",
"cinnamon",
"clever",
"clock",
"clown",
"collect",
"conduct",
"convince",
"correct",
"cradle",
"crane",
"crime",
"cross",
"crystal",
"curve",
"daughter",
"debris",
"decrease",
"deny",
"deputy",
"despair",
"diesel",
"dinner",
"distance",
"document",
"donate",
"drama",
"drink",
"dutch",
"earth",
"educate",
"elbow",
"employ",
"endless",
"enlist",
"enter",
"equal",
"eternal",
"example",
"exhibit",
"exotic",
"faculty",
"famous",
"fault",
"feature",
"fiber",
"filter",
"firm",
"flame",
"flush",
"follow",
"forward",
"frame",
"fringe",
"future",
"game",
"gate",
"gift",
"glare",
"glow",
"goat",
"grab",
"grief",
"guilt",
"hand",
"hawk",
"health",
"hen",
"hire",
"honey",
"hover",
"hurry",
"hybrid",
"impose",
"inch",
"inherit",
"injury",
"install",
"iron",
"jazz",
"joke",
"just",
"kit",
"kitchen",
"language",
"laundry",
"leader",
"lend",
"leopard",
"license",
"live",
"lobster",
"lounge",
"magnet",
"mail",
"mansion",
"mass",
"math",
"media",
"message",
"metal",
"misery",
"mix",
"more",
"mountain",
"museum",
"mutual",
"narrow",
"nerve",
"next",
"note",
"obey",
"obtain",
"offer",
"once",
"orange",
"ostrich",
"over",
"owner",
"palace",
"patch",
"pave",
"pen",
"phrase",
"piece",
"pizza",
"plunge",
"polar",
"pool",
"power",
"pretty",
"private",
"protect",
"pulp",
"purity",
"quit",
"quote",
"raise",
"razor",
"recall",
"region",
"relief",
"rent",
"rescue",
"review",
"ride",
"risk",
"roof",
"rough",
"saddle",
"salmon",
"sand",
"scene",
"scrub",
"season",
"seek",
"series",
"shed",
"shoe",
"sick",
"silent",
"situate",
"skill",
"slide",
"slush",
"snack",
"solar",
"soul",
"special",
"sphere",
"spot",
"spy",
"stairs",
"stereo",
"strategy",
"stuff",
"success",
"sunny",
"surge",
"swear",
"symptom",
"tail",
"ten",
"tent",
"theme",
"thumb",
"tiny",
"toe",
"tooth",
"topic",
"trade",
"trash",
"trophy",
"truly",
"tumble",
"typical",
"uncle",
"unfair",
"until",
"upper",
"useless",
"van",
"venue",
"video",
"visa",
"vocal",
"walk",
"waste",
"wedding",
"weekend",
"wide",
"winner",
"wise",
"wood",
"wrist",
"zero"
]
@@ -0,0 +1,521 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export {
decoded_data,
decode_result,
decode,
encode
}
//=============================================================================
//=============================================================================
// DECODING
//=============================================================================
//=============================================================================
/**
* Data that RLP can encode. Also the result of decoding.
*/
type decoded_data
= Uint8Array
| Array<decoded_data>;
/**
* Decoding can have a remainder
*/
type decode_result
= {decoded_data : decoded_data,
remainder : Uint8Array};
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
function
decode
(bytes: Uint8Array)
: decode_result
{
// check the first byte
let first_byte: number = bytes[0];
let rest : Uint8Array = bytes.slice(1);
// if the first byte is between 0 and 127, that is the data
if
(first_byte <= 127) {
return dr(new Uint8Array([first_byte]), rest);
}
// if the first byte is between 128 and 183 = 128 + 55, it is a bytestring
// and the length is Byte - 128
else if
(first_byte <= 183) {
let payload_byte_length : number = first_byte - 128;
let payload : Uint8Array = rest.slice(0, payload_byte_length);
let rest2 : Uint8Array = rest.slice(payload_byte_length);
return dr(payload, rest2);
}
// if the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
// bytestring. the byte length of bytestring is FirstByte - 183. Then pull
// out the actual data
else if
(first_byte <= 191) {
let byte_length_of_byte_length : number = first_byte - 183;
let bytes_of_byte_length : Uint8Array = rest.slice(0, byte_length_of_byte_length);
let byte_length : number = bytes_to_number(bytes_of_byte_length);
let bytes : Uint8Array = rest.slice(byte_length_of_byte_length,
byte_length + byte_length_of_byte_length);
let rest2 : Uint8Array = rest.slice(byte_length + byte_length_of_byte_length);
return dr(bytes, rest2);
}
// If the first byte is between 192 and 247 = 192 + 55, it is a list. The
// byte length of the list-payload is FirstByte - 192. Then the list
// payload, which needs to be decoded on its own.
else if
(first_byte <= 247) {
let byte_length_of_list : number = first_byte - 192;
let list_payload : Uint8Array = rest.slice(0, byte_length_of_list);
let list : Array<decoded_data> = decode_list(list_payload);
let rest2 : Uint8Array = rest.slice(byte_length_of_list);
return dr(list, rest2);
}
// If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a
// list. The byte length of the byte length of the list-payload is
// FirstByte - 247. Then the byte length of the list. Then the list
// payload, which needs to be decoded on its own.
else {
let byte_length_of_byte_length : number = first_byte - 247;
let bytes_of_byte_length : Uint8Array = rest.slice(0, byte_length_of_byte_length);
let byte_length : number = bytes_to_number(bytes_of_byte_length);
let list_bytes : Uint8Array = rest.slice(byte_length_of_byte_length,
byte_length + byte_length_of_byte_length);
let list : Array<decoded_data> = decode_list(list_bytes);
let rest2 : Uint8Array = rest.slice(byte_length + byte_length_of_byte_length);
return dr(list, rest2);
}
}
/**
* Decode a list payload (non-prefixed) into an `Array<decoded_data>`.
*
* Repeatedly decodes an element off the list until remainder is empty.
*
* @internal
*/
function
decode_list
(bytes: Uint8Array)
: Array<decoded_data>
{
let arr : Array<decoded_data> = [];
while (bytes.length > 0) {
// grab an item off the bytes
let {decoded_data, remainder} = decode(bytes);
// push it
arr.push(decoded_data);
// update bytes
bytes = remainder;
}
return arr;
}
/**
* Convert bytestring to number
*
* @internal
*/
function
bytes_to_number
(bytes: Uint8Array)
: number
{
let n : number = 0;
for (let b of bytes)
{
n <<= 8;
n += b;
}
return n;
}
/**
* Make a `decode_result` containing the two arguments
*
* @internal
*/
function
dr
(x : decoded_data,
y : Uint8Array)
: decode_result
{
return {decoded_data : x,
remainder : y};
}
//=============================================================================
//=============================================================================
// ENCODING
//=============================================================================
//=============================================================================
/**
* Encode some decoded data
*/
function
encode
(data: decoded_data)
: Uint8Array
{
// is it an array or data
if
(is_binary(data)) {
return encode_binary(data as Uint8Array);
}
else if
(is_list(data)) {
return encode_list(data as Array<decoded_data>);
}
else {
throw new Error('encode told to encode something that is not an array or a binary: ' + data);
}
}
/**
* Encode a binary into RLP
*
* @internal
*/
function
encode_binary
(bytes: Uint8Array)
: Uint8Array
{
let len: number = bytes.length;
// single byte case when the byte is between 0..127
// result is the bytestring containing the byte itself
if
((len === 1) &&
(bytes[0] <= 127)){
return bytes;
}
// if the bytestring is 0..55 bytes long, the first byte in the result is
// 128 + Length, the rest of the result bytestring is the input string
else if
(len <= 55) {
// construct the result
// <<128 + Len, Bytes/binary>>
let result : Uint8Array = new Uint8Array(len + 1);
// first byte is 128 + length
result[0] = 128 + len;
// copy input bytes into result
for (let input_idx0 = 0;
input_idx0 < len;
input_idx0++)
{
let result_idx0 : number = input_idx0 + 1;
result[result_idx0] = bytes[input_idx0];
}
return result;
}
// if the bytestring is more than 55 bytes long, the first byte is 183 +
// ByteLengthOfByteLength, followed by the byte length, followed by the
// bytes
else {
let len_bytes : Uint8Array = encode_unsigned(len);
let len_bytes_length : number = len_bytes.length;
// total array is
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
let result : Uint8Array = new Uint8Array(1 + len_bytes_length + len);
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
result[0] = 183 + len_bytes_length;
// copy len_bytes into result
for (let len_bytes_idx0 = 0;
len_bytes_idx0 < len_bytes_length;
len_bytes_idx0++)
{
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0: number = len_bytes_idx0 + 1;
result[result_idx0] = len_bytes[len_bytes_idx0];
}
// copy original byte array into result
for (let input_idx0 = 0;
input_idx0 < len;
input_idx0++)
{
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0: number = input_idx0 + (1 + len_bytes_length);
result[result_idx0] = bytes[input_idx0];
}
// finally, return the result
return result;
}
}
/**
* Encode a list
*
* @internal
*/
function
encode_list
(list: Array<decoded_data>)
: Uint8Array
{
// first encode every element in the list, then branch
let payloads : Array<Uint8Array> = list.map(encode);
let payload : Uint8Array = uint8arr_concat(payloads);
let payload_size : number = payload.length;
// if the payload size is in 0..55, then the first byte is 192 + payload
// size, followed by the payload
if
(payload_size <= 55) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
let result : Uint8Array = new Uint8Array(1 + payload_size);
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
result[0] = 192 + payload_size;
// copy the rest of the payload into result
for (let payload_idx0 = 0;
payload_idx0 < payload_size;
payload_idx0++)
{
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
let result_idx0: number = payload_idx0 + 1;
result[result_idx0] = payload[payload_idx0];
}
return result;
}
// if the payload size is greater than 55, the first byte is 247 +
// size_of_payload_size, followed by the payload size, followed by the
// payload
else {
// compute the payload size size
let payload_size_bytes : Uint8Array = encode_unsigned(payload_size);
let payload_size_size : number = payload_size_bytes.length;
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
let result: Uint8Array = new Uint8Array(1 + payload_size_size + payload_size);
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// first byte is 247 + payload_size_size
result[0] = 247 + payload_size_size;
// copy the payload_size_bytes into result
for (let psb_idx0 = 0;
psb_idx0 < payload_size_size;
psb_idx0++)
{
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 byte for this
let result_idx0 : number = psb_idx0 + 1;
result[result_idx0] = payload_size_bytes[psb_idx0];
}
// copy the payload into result
for (let pb_idx0 = 0;
pb_idx0 < payload_size;
pb_idx0++)
{
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 + payload_size_size bytes for this
let result_idx0 : number = pb_idx0 + (1 + payload_size_size);
result[result_idx0] = payload[pb_idx0];
}
// finally, return result
return result;
}
}
/**
* Encode a number as a bytestring
*
* Not for general use, this assumes the input number is greater than 55
*
* @internal
*/
function
encode_unsigned
(n: number)
: Uint8Array
{
// can assume that n initially is greater than 55
// have to encode it in reverse order
let arr : Array<number> = [];
// repeated division by 256 with remainder
//
// example: suppose bign was 1234 and we were dividing by 10
//
// iteration 0:
// bign = 1234
// arr = []
// ---
// bign / 10 = 123
// bign % 10 = 4
// ---
// bign = 123
// arr = [4]
//
// iteration 1:
// bign = 123
// arr = [4]
// ---
// bign / 10 = 12
// bign % 10 = 3
// ---
// bign = 12
// arr = [4, 3]
//
// iteration 2:
// bign = 12
// arr = [4, 3]
// ---
// bign / 10 = 1
// bign % 10 = 2
// ---
// bign = 1
// arr = [4, 3, 2]
//
// iteration 3:
// bign = 1
// arr = [4, 3, 2]
// ---
// bign / 10 = 0
// bign % 10 = 1
// ---
// bign = 0
// arr = [4, 3, 2, 1]
//
// iteration 4:
// bign = 0
// arr = [4, 3, 2, 1]
// ---
// DONE
while (n > 0) {
arr.push(n % 256);
n >>= 8;
}
// reverse and make into Uint8Array
arr.reverse();
return new Uint8Array(arr);
}
/**
* concatenate an array of `Uint8Array`s into a single Uint8Array
*
* @internal
*/
function
uint8arr_concat
(arrs: Array<Uint8Array>)
: Uint8Array
{
// total length
let total_len = arrs.reduce(// fold
function (acc_len: number, this_uint8array: Uint8Array): number {
return acc_len + this_uint8array.length;
},
// initial accumulator
0);
// start up result
let result : Uint8Array = new Uint8Array(total_len);
let result_idx0 : number = 0;
// concatenate
for (let this_uint8arr of arrs) {
// bytewise copy of this uint8array
for (let this_uint8arr_idx0 = 0;
this_uint8arr_idx0 < this_uint8arr.length;
this_uint8arr_idx0++)
{
// copy byte and increment result idx0
result[result_idx0] = this_uint8arr[this_uint8arr_idx0];
result_idx0++;
}
}
return result;
}
/**
* returns true if input is `instanceof Uint8Array`
*
* @internal
*/
function
is_binary
(x: any)
: boolean
{
return (x instanceof Uint8Array);
}
/**
* returns true if input is `instanceof Array`
*
* @internal
*/
function
is_list
(x: any)
: boolean
{
return (x instanceof Array);
}
@@ -0,0 +1,112 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export {
Safe,
Ok,
Error,
ok,
error,
unsafe
}
/**
* Type that catches positive errors
*/
type Safe<ok_t, err_t>
= Ok<ok_t>
| Error<err_t>;
/**
* Ok type
*/
type Ok<ok_t>
= {ok : true,
result : ok_t};
/**
* Error type
*/
type Error<err_t>
= {ok : false,
error : err_t};
/**
* Constructs an `Ok` value from a pure value
*/
function
ok
<ok_t>
(x : ok_t)
: Ok<ok_t>
{
return {ok: true, result: x};
}
/**
* Constructs an `Error` value from a pure value
*/
function
error
<err_t>
(x: err_t)
: Error<err_t>
{
return {ok: false, error: x};
}
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
function
unsafe
<ok_t, err_t>
(x: Safe<ok_t, err_t>)
: ok_t
{
if (x.ok)
return x.result;
else
throw x.error;
}
+7
View File
@@ -0,0 +1,7 @@
import * as rlp from './jex_include/local-vdk-0.1.0/dist/rlp.js';
declare type rlpcases = {
decoded: rlp.decoded_data;
encoded: Uint8Array;
};
export declare const cases: Array<rlpcases>;
export {};
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,12 @@
/**
* Base58 encoding/decoding
*/
export { encode, decode };
/**
* Encode a Uint8Array into base58
*/
declare function encode(binary: Uint8Array): string;
/**
* Decode a Base58 string into a Uint8Array
*/
declare function decode(base58: string): Uint8Array;
@@ -0,0 +1,308 @@
/**
* Base58 encoding/decoding
*/
export { encode, decode };
//=============================================================================
// ENCODING
//=============================================================================
/**
* Encode a Uint8Array into base58
*/
function encode(binary) {
let num_leading_zeros = nlz(binary);
let rest = binary.slice(num_leading_zeros);
let ones = encode_zeros(num_leading_zeros);
let rest_b58 = encode_rest(rest);
let result = ones + rest_b58;
return result;
}
/**
* count the number of leading zeros in a uint8array
*
* @internal
*/
function nlz(bytes) {
let n = 0;
for (let this_byte of bytes) {
if (0 === this_byte) {
n++;
}
else {
break;
}
}
return n;
}
/**
* Generate a bunch of '1's for however many leading zeros there are
*
* @internal
*/
function encode_zeros(how_many) {
let ones = '';
for (let i = 1; i <= how_many; i++) {
ones += '1';
}
return ones;
}
/**
* Encode a Uint8Array that has no leading zeros
*
* @internal
*/
function encode_rest(bytes) {
let bytes_bignum = bytes_to_bigint(bytes);
let result = bignum_to_base58(bytes_bignum);
return result;
}
/**
* Convert a bytestring to a bignum
*
* @internal
*/
function bytes_to_bigint(bytes) {
let acc_bigint = 0n;
for (let this_byte of bytes) {
acc_bigint <<= 8n;
acc_bigint += BigInt(this_byte);
}
return acc_bigint;
}
/**
* Convert a BigInt to Base58
*
* @internal
*/
function bignum_to_base58(q) {
let s = '';
while (q !== 0n) {
let this_n = q % 58n;
q /= 58n;
let this_b58_char = bigint_to_char(this_n);
s = this_b58_char + s;
}
return s;
}
//=============================================================================
// DECODING
//=============================================================================
/**
* Decode a Base58 string into a Uint8Array
*/
function decode(base58) {
let num_leading_ones = nlo(base58);
let rest = base58.slice(num_leading_ones);
let zeros = decode_ones(num_leading_ones);
let rest_arr = decode_rest(rest);
let pre_result = zeros.concat(rest_arr);
return new Uint8Array(pre_result);
}
/**
* count the number of leading 1 characters in a uint8array
*
* @internal
*/
function nlo(base58) {
let n = 0;
for (let this_char of base58) {
if ('1' === this_char) {
n++;
}
else {
break;
}
}
return n;
}
/**
* Generate a bunch of '0's for however many leading ones there are
*
* @internal
*/
function decode_ones(how_many) {
let zeros = [];
for (let i = 1; i <= how_many; i++) {
zeros.push(0);
}
return zeros;
}
/**
* Decode a string that has no leading 1s
*
* @internal
*/
function decode_rest(base58) {
let result_bignum = base58_to_bigint(base58);
let result = bigint_to_base256(result_bignum);
return result;
}
/**
* Convert a base58 string to a bignum
*
* @internal
*/
function base58_to_bigint(base58) {
let acc_bigint = 0n;
for (let this_char of base58) {
acc_bigint *= 58n;
acc_bigint += char_to_bigint(this_char);
}
return acc_bigint;
}
/**
* convert a bignum into a byte array
*
* @end
*/
function bigint_to_base256(q) {
let arr_reverse = [];
while (q !== 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return arr_reverse;
}
//=============================================================================
// TRANSLATION TABLES
//=============================================================================
/**
* Base58 integer -> character conversion table
*
* @internal
*/
function bigint_to_char(n) {
switch (n) {
case 0n: return '1';
case 1n: return '2';
case 2n: return '3';
case 3n: return '4';
case 4n: return '5';
case 5n: return '6';
case 6n: return '7';
case 7n: return '8';
case 8n: return '9';
case 9n: return 'A';
case 10n: return 'B';
case 11n: return 'C';
case 12n: return 'D';
case 13n: return 'E';
case 14n: return 'F';
case 15n: return 'G';
case 16n: return 'H';
case 17n: return 'J';
case 18n: return 'K';
case 19n: return 'L';
case 20n: return 'M';
case 21n: return 'N';
case 22n: return 'P';
case 23n: return 'Q';
case 24n: return 'R';
case 25n: return 'S';
case 26n: return 'T';
case 27n: return 'U';
case 28n: return 'V';
case 29n: return 'W';
case 30n: return 'X';
case 31n: return 'Y';
case 32n: return 'Z';
case 33n: return 'a';
case 34n: return 'b';
case 35n: return 'c';
case 36n: return 'd';
case 37n: return 'e';
case 38n: return 'f';
case 39n: return 'g';
case 40n: return 'h';
case 41n: return 'i';
case 42n: return 'j';
case 43n: return 'k';
case 44n: return 'm';
case 45n: return 'n';
case 46n: return 'o';
case 47n: return 'p';
case 48n: return 'q';
case 49n: return 'r';
case 50n: return 's';
case 51n: return 't';
case 52n: return 'u';
case 53n: return 'v';
case 54n: return 'w';
case 55n: return 'x';
case 56n: return 'y';
case 57n: return 'z';
default:
throw new Error('invalid base58 bigint: ' + n);
}
}
/**
* Base58 character -> integer conversion table
*
* @internal
*/
function char_to_bigint(s) {
switch (s) {
case '1': return 0n;
case '2': return 1n;
case '3': return 2n;
case '4': return 3n;
case '5': return 4n;
case '6': return 5n;
case '7': return 6n;
case '8': return 7n;
case '9': return 8n;
case 'A': return 9n;
case 'B': return 10n;
case 'C': return 11n;
case 'D': return 12n;
case 'E': return 13n;
case 'F': return 14n;
case 'G': return 15n;
case 'H': return 16n;
case 'J': return 17n;
case 'K': return 18n;
case 'L': return 19n;
case 'M': return 20n;
case 'N': return 21n;
case 'P': return 22n;
case 'Q': return 23n;
case 'R': return 24n;
case 'S': return 25n;
case 'T': return 26n;
case 'U': return 27n;
case 'V': return 28n;
case 'W': return 29n;
case 'X': return 30n;
case 'Y': return 31n;
case 'Z': return 32n;
case 'a': return 33n;
case 'b': return 34n;
case 'c': return 35n;
case 'd': return 36n;
case 'e': return 37n;
case 'f': return 38n;
case 'g': return 39n;
case 'h': return 40n;
case 'i': return 41n;
case 'j': return 42n;
case 'k': return 43n;
case 'm': return 44n;
case 'n': return 45n;
case 'o': return 46n;
case 'p': return 47n;
case 'q': return 48n;
case 'r': return 49n;
case 's': return 50n;
case 't': return 51n;
case 'u': return 52n;
case 'v': return 53n;
case 'w': return 54n;
case 'x': return 55n;
case 'y': return 56n;
case 'z': return 57n;
default:
throw new Error('invalid base58 char: ' + s);
}
}
//# sourceMappingURL=b58.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
/**
* Base64 Utility Functions in TypeScript
*/
export { encode, decode };
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
declare function encode(bytes: Uint8Array): string;
/**
* Decode a base64-encoded string
*/
declare function decode(base64_str: string): Uint8Array;
@@ -0,0 +1,507 @@
/**
* Base64 Utility Functions in TypeScript
*/
export { encode, decode };
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
function encode(bytes) {
// slice the array
// length of head is a multiple of 3
// treat the tail as a special case
let { head, tail, tail_len } = slice3k(bytes);
let head_str = encode_head(head);
let tail_str = encode_tail(tail, tail_len);
return head_str + tail_str;
}
/**
* Take a Uint8Array, take the first 3k (k >= 0) bytes, put them in head, and
* the remaining 0,1, or 2 bytes, put them in tail
*
* @internal
*/
function slice3k(bytes) {
let len = bytes.length;
// too lazy to look up how to do integer division in js so this will do
let tail_len = len % 3;
let head_len = len - tail_len;
// for slice:
// first argument is the 0-index of the start
// second - first is the length of the slice
let head = bytes.slice(0, head_len);
// empty second argument means go to the end
let tail = bytes.slice(head_len);
return { head: head,
tail: tail,
tail_len: tail_len };
}
/**
* Encode a Uint8Array whose length is known to be a multiple of 3
*
* @internal
*/
function encode_head(head_bytes) {
// can assume length of bytes is a multiple of 3
// start index at 0
// increment by 3
let head_bytes_len = head_bytes.length;
let max_idx0 = head_bytes_len - 1;
let head_str_acc = '';
for (let this_3slice_start_idx0 = 0; this_3slice_start_idx0 <= max_idx0; this_3slice_start_idx0 += 3) {
let this_3slice_bytes = head_bytes.slice(this_3slice_start_idx0, this_3slice_start_idx0 + 3);
let this_3slice_str = encode3(this_3slice_bytes);
head_str_acc += this_3slice_str;
}
return head_str_acc;
}
/**
* Encode a 3 bytes into base64 notation
*
* @internal
*/
function encode3(bytes) {
let b0 = bytes[0];
let b1 = bytes[1];
let b2 = bytes[2];
// ABCDEFGH 12345678 abcdefgh
// b0 b1 b2
// ABCDEF GH1234 5678ab cdefgh
// n0 n1 n2 n3
let n0 = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// b2 = abcdefgh
// b2 >> 6 = ______ab
// n2 = __5678ab
let n2 = ((b1 % 16) << 2) + (b2 >> 6);
// b2 = abcdefgh
// 64 = _1______
// n3 = __cdefgh
let n3 = b2 % 64;
// convert to chars
let s0 = int2char(n0);
let s1 = int2char(n1);
let s2 = int2char(n2);
let s3 = int2char(n3);
// retrvn
return s0 + s1 + s2 + s3;
}
/**
* Encode the final 0, 1, or 2 bytes
*
* @internal
*/
function encode_tail(tail_bytes, tail_len) {
switch (tail_len) {
case 0: return '';
case 1: return encode1(tail_bytes);
case 2: return encode2(tail_bytes);
default:
throw new Error('encode_tail with tail_len = ' + tail_len);
}
}
/**
* Encode a single byte
*
* @internal
*/
function encode1(bytes) {
let b0 = bytes[0];
// n0 = __ABCDEF
// b0 = ABCDEFGH
// b0 >> 2 = __ABCDEF
let n0 = b0 >> 2;
// n1 = __GH____
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
let n1 = (b0 % 4) << 4;
return int2char(n0) + int2char(n1) + '==';
}
/**
* Encode two bytes
*
* @internal
*/
function encode2(bytes) {
let b0 = bytes[0];
let b1 = bytes[1];
// ABCDEFGH 12345678
// b0 b1
// ABCDEF GH1234 5678__
// n0 n1 n2
let n0 = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// n2 = __5678__
let n2 = (b1 % 16) << 2;
// convert to chars
let s0 = int2char(n0);
let s1 = int2char(n1);
let s2 = int2char(n2);
// retrvn
return s0 + s1 + s2 + '=';
}
/**
* Decode a base64-encoded string
*/
function decode(base64_str) {
// length of the string is guaranteed to be a multiple of 4
// if the string is empty, return the empty array
let len = base64_str.length;
// this branching contains the implicit assertion that the length is a
// multiple of 4. If this is not true, the bottom branch is triggered.
// general case goes first because speeeeeed
if ((4 < len)
&& (0 === (len % 4))) {
// split the head and tail
let tail_start_idx0 = len - 4;
let head_s = base64_str.slice(0, tail_start_idx0);
let tail_s = base64_str.slice(tail_start_idx0);
// Using arrays because Uint8Arrays don't have a concat operation
let head_arr = decode_head(head_s);
let tail_arr = decode_tail(tail_s);
// silly to put these in variables but this is exactly the type of
// situation where JS type insanity shows up
//
// see: i forgot
// > [1,2,3] + [4,5,6]
// '1,2,34,5,6'
//
// Originally, I used + like some sort of moron who codes in a sane
// language
//
// seriously what is this language
//
// this is some clown behavior
let total_arr = head_arr.concat(tail_arr);
return new Uint8Array(total_arr);
}
// special case if the length is exactly 4
else if (4 === len) {
// it's just a tail
return new Uint8Array(decode_tail(base64_str));
}
// empty string
else if (0 === len) {
return new Uint8Array([]);
}
else {
throw new Error('base64 decode: invalid string length: ' + len);
}
}
/**
* Decode a string known to not have any padding
*
* @internal
*/
function decode_head(s) {
// go 4 characters at a time
let max_i0 = s.length - 1;
let decoded_acc = [];
for (let i0 = 0; i0 <= max_i0; i0 += 4) {
let this_slice_s = s.slice(i0, i0 + 4);
let this_slice_arr = decode3(this_slice_s);
// update accumulator
decoded_acc = decoded_acc.concat(this_slice_arr);
}
return decoded_acc;
}
/**
* Decode 4 characters that correspond to either 3 bytes, 2, bytes, or 1 byte
*
* @internal
*/
function decode_tail(s) {
// all that matters right now is the last 2 chars
// s0, s1, s2, s3
// 0 based indexing is so annoying
let s2 = s[2];
let s3 = s[3];
// braaaaaaaaaaaaaaaaaench
// two equals signs means 1 byte
if (('=' === s3) && ('=' === s2)) {
return decode1(s);
}
// one equals sign means 2 bytes
else if (('=' === s3)) {
return decode2(s);
}
// 0 equals signs means 3 bytes
else {
return decode3(s);
}
}
/**
* Decode a 4-character long base64 string corresponding to 3 bytes
*
* @internal
*/
function decode3(s) {
// pull out strings
let s0 = s[0];
let s1 = s[1];
let s2 = s[2];
let s3 = s[3];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
let n2 = char2int(s2);
let n3 = char2int(s3);
// abcdef gh1234 5678ab cdefgh
// n0 n1 n2 n3
// abcdefgh 12345678 abcdefgh
// b0 b1 b2
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678ab
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 = ((n1 % 16) << 4) + (n2 >> 2);
// n2 = __5678ab
// 4 = _____1__
// n2 % 4 = ______ab
// (n2 % 4) << 6 = ab______
// n3 = __cdefgh
let b2 = ((n2 % 4) << 6) + n3;
return [b0, b1, b2];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function decode2(s) {
// xyz=
// pull out strings
let s0 = s[0];
let s1 = s[1];
let s2 = s[2];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
let n2 = char2int(s2);
// abcdef gh1234 5678__
// n0 n1 n2
// abcdefgh 12345678
// b0 b1
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678__
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 = ((n1 % 16) << 4) + (n2 >> 2);
return [b0, b1];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function decode1(s) {
// xy==
// pull out strings
let s0 = s[0];
let s1 = s[1];
// convert to numbers
let n0 = char2int(s0);
let n1 = char2int(s1);
// abcdef gh____
// n0 n1
// abcdefgh
// b0
// n0 = __abcdef
// n1 = __gh____
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 = (n0 << 2) + (n1 >> 4);
return [b0];
}
// FIXME: these tables would *probably* be faster if they were made into objects
/**
* Conversion table for base64 encode
*
* @internal
*/
function int2char(n) {
switch (n) {
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
case 5: return 'F';
case 6: return 'G';
case 7: return 'H';
case 8: return 'I';
case 9: return 'J';
case 10: return 'K';
case 11: return 'L';
case 12: return 'M';
case 13: return 'N';
case 14: return 'O';
case 15: return 'P';
case 16: return 'Q';
case 17: return 'R';
case 18: return 'S';
case 19: return 'T';
case 20: return 'U';
case 21: return 'V';
case 22: return 'W';
case 23: return 'X';
case 24: return 'Y';
case 25: return 'Z';
case 26: return 'a';
case 27: return 'b';
case 28: return 'c';
case 29: return 'd';
case 30: return 'e';
case 31: return 'f';
case 32: return 'g';
case 33: return 'h';
case 34: return 'i';
case 35: return 'j';
case 36: return 'k';
case 37: return 'l';
case 38: return 'm';
case 39: return 'n';
case 40: return 'o';
case 41: return 'p';
case 42: return 'q';
case 43: return 'r';
case 44: return 's';
case 45: return 't';
case 46: return 'u';
case 47: return 'v';
case 48: return 'w';
case 49: return 'x';
case 50: return 'y';
case 51: return 'z';
case 52: return '0';
case 53: return '1';
case 54: return '2';
case 55: return '3';
case 56: return '4';
case 57: return '5';
case 58: return '6';
case 59: return '7';
case 60: return '8';
case 61: return '9';
case 62: return '+';
case 63: return '/';
default: throw new Error("invalid base64 encode byte: " + n);
}
}
/**
* Conversion table for base64 decode
*
* @internal
*/
function char2int(s) {
switch (s) {
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 17;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
case 'a': return 26;
case 'b': return 27;
case 'c': return 28;
case 'd': return 29;
case 'e': return 30;
case 'f': return 31;
case 'g': return 32;
case 'h': return 33;
case 'i': return 34;
case 'j': return 35;
case 'k': return 36;
case 'l': return 37;
case 'm': return 38;
case 'n': return 39;
case 'o': return 40;
case 'p': return 41;
case 'q': return 42;
case 'r': return 43;
case 's': return 44;
case 't': return 45;
case 'u': return 46;
case 'v': return 47;
case 'w': return 48;
case 'x': return 49;
case 'y': return 50;
case 'z': return 51;
case '0': return 52;
case '1': return 53;
case '2': return 54;
case '3': return 55;
case '4': return 56;
case '5': return 57;
case '6': return 58;
case '7': return 59;
case '8': return 60;
case '9': return 61;
case '+': return 62;
case '/': return 63;
default: throw new Error("invalid base64 character: " + s);
}
}
//# sourceMappingURL=b64.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,28 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export { bytes_to_bigint, bigint_to_bytes, concat, strong_rand_bytes };
/**
* Concatenate two arrays
*/
declare function concat(arr1: Uint8Array, arr2: Uint8Array): Uint8Array;
/**
* Cryptographically random bytes
*/
declare function strong_rand_bytes(how_many: number): Uint8Array;
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
declare function bytes_to_bigint(bytes: Uint8Array): bigint;
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
declare function bigint_to_bytes(q: bigint): Uint8Array;
@@ -0,0 +1,266 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export { bytes_to_bigint, bigint_to_bytes, concat, strong_rand_bytes };
/**
* Concatenate two arrays
*/
function concat(arr1, arr2) {
let len1 = arr1.length;
let len2 = arr2.length;
let arr1_idx0_offset = 0;
let arr2_idx0_offset = len1;
let result_len = len1 + len2;
let result = new Uint8Array(result_len);
// copy first array into result
for (let arr1_idx0 = 0; arr1_idx0 < len1; arr1_idx0++) {
// no offset here
let result_idx0 = arr1_idx0 + arr1_idx0_offset;
result[result_idx0] = arr1[arr1_idx0];
}
// copy second array into result
for (let arr2_idx0 = 0; arr2_idx0 < len2; arr2_idx0++) {
// offset by the length of the first array
let result_idx0 = arr2_idx0 + arr2_idx0_offset;
result[result_idx0] = arr2[arr2_idx0];
}
return result;
}
/**
* Cryptographically random bytes
*/
function strong_rand_bytes(how_many) {
let arr = new Uint8Array(how_many);
(new Crypto()).getRandomValues(arr);
return arr;
}
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
function bytes_to_bigint(bytes) {
let n = 0n;
for (let b of bytes) {
// move first, then add
// otherwise it ends on a move
// imperative languages are for losers
n <<= 8n;
n += BigInt(b);
}
return n;
}
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
function bigint_to_bytes(q) {
if (q < 0n) {
throw new Error('q < 0n: ' + q);
}
let arr_reverse = [];
while (q > 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return new Uint8Array(arr_reverse);
}
/**
* Get an uninitialized bitstring
*
* @internal
*/
function bits_null(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
return { bit_length: bit_length,
bytes: result };
}
/**
* Get a bitstring of a given length where every value is 0.
*/
function bits_zeros(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
for (let i0 = 0; i0 < byte_length; i0++) {
result[i0] = 0;
}
return { bit_length: bit_length,
bytes: result };
}
/**
* Get a bitstring of a given length where every value is 1.
*/
function bits_ones(bit_length) {
let byte_length = Math.ceil(bit_length / 8);
let result = new Uint8Array(byte_length);
// fill everything except the last byte with 255s
for (let i0 = 0; i0 < (byte_length - 1); i0++) {
result[i0] = 255;
}
// alright so the last byte
// ok so the number of leading 0s is
// 8 - (bit_length % 8)
let num_trailing_zero_bits = 8 - (bit_length % 8);
// the trailing byte is 255 << that
// e.g. 3 trailing 0s
// 1111_1111 -> 1111_1000
let last_byte = 255 << num_trailing_zero_bits;
let last_byte_idx0 = byte_length - 1;
result[last_byte_idx0] = last_byte;
return { bit_length: bit_length,
bytes: result };
}
/**
* Get the bit at a given 0-index
*/
function bits_i0th(bit_idx0, bits) {
// first task is figuring out what byte we're at
// for instance if we want bit 27
// 3*8 = 24 =< 27 < 4*8
// so it's Math.floor(bit_idx0 / 8)
let byte_idx0 = Math.floor(bit_idx0 / 8);
// let's fetch the byte and work with that
let the_byte = bits.bytes[byte_idx0];
// ok so let's go with 27 again
// 27 = 3 mod 8
// so we bitshift right by (8 - 3)
// and then take the remainder dividing by 2
// --B-_---- -> ----_---B -> 0000_000B
let bsr = 8 - (bit_idx0 % 8);
return (the_byte >> bsr) % 2;
}
/**
* Concatenate two bitstrings
*/
function bits_concat(bits1, bits2) {
let result_bit_length = bits1.bit_length + bits2.bit_length;
let bytes1 = bits1.bytes;
let bytes2 = bits2.bytes;
// using zeros here because of our xor trick in a minute
let result_bits = bits_null(result_bit_length);
let result_bytes = result_bits.bytes;
// go along each byte in result, and compute the byte boundary
for (let i = 0; i < result_bytes.length; i++) {
// ABCD_EFGH _
// 0123_4567 8
// this is the bit index of the leftmost bit in this byte
let start_bit_bi0 = i * 8;
let next_start_bit_bi0 = start_bit_bi0 + 8;
// does the bit at the beginning of this byte correspond to the first array?
// strict comparison:
// suppose i = 0,
// suppose bit_length1 is 0
// then this says no, go to second array
// suppose bl1 = 1,
// this says start at first array
let start_bit_is_of_first_array = start_bit_bi0 < bits1.bit_length;
// weak comparison:
// suppose bit_length1 = 8
// ABCD_EFGH _
// 0123_4567 8
// ^
// start_bit_bi0 ^ next_start_bit_bi0
let stop_bit_is_of_first_array = next_start_bit_bi0 <= bits1.bit_length;
// is this a bytes1 byte
let is_bytes1_byte = start_bit_is_of_first_array && stop_bit_is_of_first_array;
let is_boundary_byte = start_bit_is_of_first_array && !stop_bit_is_of_first_array;
// need to work out the ping_pong bs up here because js is dumb and I
// can't put lets between elseifs
// alright, now we're in the case of only copying from the second array
// we have two cases:
// ping-pong:
// ABCD_EFGH 1234_5678
// - ---- ---
// copying these bits
// ping:
// ABCD_EFGH <end>
// - ---- 000
//
// how to distinguish between these two??
//
// we're in the ping case when the start_bit_bi0 corresponds to the
// final byte of the second array
//
// ok
//
// we need to compute the bit address in the second array that
// corresponds to the bit address at the beginning of this byte in the
// result array
let bits2_addr_bi0 = start_bit_bi0 - bits1.bit_length;
// I think the variable is
// bits_left_to_copy = bits2.bit_length - bit_addr2_bi0
// no + 1 because the current bit is uncopied,
// so if bit_addr2_bi0 = 7 and bits2.bit_length is 8, it means we
// have the last bit to copy
// cases:
// bits_left_to_copy <= 0 ->
// this would mean we have more bits to copy, but are out of
// source bits. should be impossible if bits_null is correct
// bits_left_to_copy <= 8 ->
// this would mean we are going to fill this last byte in the
// result array with the correct bits from array2, but how we
// do this will depend on how those are arranged in bytes2
// (whether we grab one or two bytes)
//
// this is the tricky case
//
// I think what matters here is the byte address in the second array
// if we're on the last byte
// 8 < bits_left_to_copy ->
// this means we can safely grab two bytes from bytes2, and do
// our bitshifting to make it correct
//
// FIXME
let bits_left_to_copy = bits2.bit_length - bits2_addr_bi0;
// no the variable that matters is which byte we're on in the result
let this_bytes2_addr_i0 = Math.floor(bits2_addr_bi0 / 8);
let next_bytes2_addr_i0 = this_bytes2_addr_i0 + 1;
let bitshift_amt = bits1.bit_length % 8;
let ping = next_bytes2_addr_i0 === bytes2.length;
// simple case: this is a byte from the first array
// just copy it
if (is_bytes1_byte)
result_bytes[i] = bytes1[i];
// this is a boundary byte
// further cases:
// second bit length is 0 ->
// ABCD_EF-- <empty>
// ^ starting here
// just copy first byte and move along
else if (is_boundary_byte && (bits2.bit_length === 0))
result_bytes[i] = bytes1[i];
// boundary byte, and there is at least one byte in the second array
else if (is_boundary_byte) {
// copy over the first byte
result_bytes[i] = bytes1[i];
// take the first byte from the second array
let first_byte_of_second_array = bytes2[0];
// bytes1:
// ABCD_EF00
// 6
// bytes2:
// 1234_5678
// 0000_0012
// and bitshift it right by that amount
let bitshift_amt = bits1.bit_length % 8;
result_bytes[i] ^= first_byte_of_second_array >> bitshift_amt;
}
// last byte of second array
else if (ping)
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt);
// ping-pong: not last byte of second array
else
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt) ^ (bytes2[next_bytes2_addr_i0] << bitshift_amt);
}
return { bit_length: result_bit_length,
bytes: result_bytes };
}
//# sourceMappingURL=bin.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,30 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export { encode, decode, byte_of_word, check_word, check_byte, words };
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
declare function encode(bytes: Uint8Array): string;
/**
* Decode a FAERT string into bytes
*/
declare function decode(faert: string): safe.Safe<Uint8Array, string>;
/**
* given a word, find its index
*/
declare function byte_of_word(word: string): safe.Safe<number, string>;
/**
* compute the check word of an array
*/
declare function check_word(bytes: Uint8Array): string;
/**
* given an array, compute the xor of all the bytes in the array
*/
declare function check_byte(bytes: Uint8Array): number;
declare let words: string[];
@@ -0,0 +1,344 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export { encode, decode, byte_of_word, check_word, check_byte, words };
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
function encode(bytes) {
// initial accumulator
let words_acc = [];
// go along each byte and look up the word
// add it to the accumulator
for (let this_byte of bytes) {
let this_word = words[this_byte];
words_acc.push(this_word);
}
// prepend check word to phrase
// yes craig it would be faster to do the check byte inline
// the usage case here is 64 byte strings
// double pass is not a big deal
return check_word(bytes) + ' ' + words_acc.join(' ');
}
/**
* Decode a FAERT string into bytes
*/
function decode(faert) {
let all_words = faert.split(' ');
let input_check_word = all_words[0];
let input_words = all_words.slice(1);
// accumulator
let computed_bytes = [];
// loop over words and figure out accumulator
for (let this_input_word of input_words) {
let maybe_this_byte = byte_of_word(this_input_word);
// if the word is an allowable word, add it to the accumulator
if (maybe_this_byte.ok) {
let this_byte = maybe_this_byte.result;
computed_bytes.push(this_byte);
}
// error case, propagate the error up the call chain
else
return maybe_this_byte;
}
// at this point, we can assume we correctly decoded all words
// compute the check byte
let computed_bytes_u8s = new Uint8Array(computed_bytes);
let computed_check_word = check_word(computed_bytes_u8s);
// check if it is correct
// if so, return the computed bytes
if (computed_check_word === input_check_word)
return safe.ok(computed_bytes_u8s);
// otherwise, return an error
else
return safe.error('checksum failure! computed check word: ' + computed_check_word + '; input check word: ' + input_check_word);
}
/**
* given a word, find its index
*/
function byte_of_word(word) {
for (let i = 0; i <= 255; i++) {
if (word === words[i])
return safe.ok(i);
}
return safe.error('invalid word: ' + word);
}
/**
* compute the check word of an array
*/
function check_word(bytes) {
return words[check_byte(bytes)];
}
/**
* given an array, compute the xor of all the bytes in the array
*/
function check_byte(bytes) {
let check_byte = 0;
for (let this_byte of bytes)
check_byte ^= this_byte;
return check_byte;
}
let words = [
"able",
"abuse",
"acquire",
"adjust",
"agent",
"air",
"alert",
"alpha",
"anger",
"answer",
"any",
"argue",
"around",
"assume",
"asthma",
"aunt",
"awkward",
"balcony",
"barrel",
"because",
"behave",
"bicycle",
"bike",
"blind",
"blouse",
"bonus",
"bottom",
"breeze",
"brother",
"bubble",
"burger",
"butter",
"can",
"cannon",
"cargo",
"catalog",
"caught",
"century",
"chaos",
"chicken",
"churn",
"cinnamon",
"clever",
"clock",
"clown",
"collect",
"conduct",
"convince",
"correct",
"cradle",
"crane",
"crime",
"cross",
"crystal",
"curve",
"daughter",
"debris",
"decrease",
"deny",
"deputy",
"despair",
"diesel",
"dinner",
"distance",
"document",
"donate",
"drama",
"drink",
"dutch",
"earth",
"educate",
"elbow",
"employ",
"endless",
"enlist",
"enter",
"equal",
"eternal",
"example",
"exhibit",
"exotic",
"faculty",
"famous",
"fault",
"feature",
"fiber",
"filter",
"firm",
"flame",
"flush",
"follow",
"forward",
"frame",
"fringe",
"future",
"game",
"gate",
"gift",
"glare",
"glow",
"goat",
"grab",
"grief",
"guilt",
"hand",
"hawk",
"health",
"hen",
"hire",
"honey",
"hover",
"hurry",
"hybrid",
"impose",
"inch",
"inherit",
"injury",
"install",
"iron",
"jazz",
"joke",
"just",
"kit",
"kitchen",
"language",
"laundry",
"leader",
"lend",
"leopard",
"license",
"live",
"lobster",
"lounge",
"magnet",
"mail",
"mansion",
"mass",
"math",
"media",
"message",
"metal",
"misery",
"mix",
"more",
"mountain",
"museum",
"mutual",
"narrow",
"nerve",
"next",
"note",
"obey",
"obtain",
"offer",
"once",
"orange",
"ostrich",
"over",
"owner",
"palace",
"patch",
"pave",
"pen",
"phrase",
"piece",
"pizza",
"plunge",
"polar",
"pool",
"power",
"pretty",
"private",
"protect",
"pulp",
"purity",
"quit",
"quote",
"raise",
"razor",
"recall",
"region",
"relief",
"rent",
"rescue",
"review",
"ride",
"risk",
"roof",
"rough",
"saddle",
"salmon",
"sand",
"scene",
"scrub",
"season",
"seek",
"series",
"shed",
"shoe",
"sick",
"silent",
"situate",
"skill",
"slide",
"slush",
"snack",
"solar",
"soul",
"special",
"sphere",
"spot",
"spy",
"stairs",
"stereo",
"strategy",
"stuff",
"success",
"sunny",
"surge",
"swear",
"symptom",
"tail",
"ten",
"tent",
"theme",
"thumb",
"tiny",
"toe",
"tooth",
"topic",
"trade",
"trash",
"trophy",
"truly",
"tumble",
"typical",
"uncle",
"unfair",
"until",
"upper",
"useless",
"van",
"venue",
"video",
"visa",
"vocal",
"walk",
"waste",
"wedding",
"weekend",
"wide",
"winner",
"wise",
"wood",
"wrist",
"zero"
];
//# sourceMappingURL=faert.js.map
@@ -0,0 +1 @@
{"version":3,"file":"faert.js","sourceRoot":"","sources":["../src/faert.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,EACR,CAAA;AAED,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC;;GAEG;AACH,SACA,MAAM,CACD,KAAkB;IAGnB,sBAAsB;IACtB,IAAI,SAAS,GAAoB,EAAE,CAAC;IAEpC,0CAA0C;IAC1C,4BAA4B;IAC5B,KAAK,IAAI,SAAS,IAAI,KAAK,EAC3B;QACI,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC7B;IAED,+BAA+B;IAC/B,2DAA2D;IAC3D,yCAAyC;IACzC,gCAAgC;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAID;;GAEG;AACH,SACA,MAAM,CACD,KAAc;IAGf,IAAI,SAAS,GAA0B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,gBAAgB,GAAmB,SAAS,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,WAAW,GAAwB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEzD,cAAc;IACd,IAAI,cAAc,GAAmB,EAAE,CAAC;IAExC,6CAA6C;IAC7C,KAAK,IAAI,eAAe,IAAI,WAAW,EACvC;QACI,IAAI,eAAe,GAA+B,YAAY,CAAC,eAAe,CAAC,CAAC;QAChF,8DAA8D;QAC9D,IAAI,eAAe,CAAC,EAAE,EACtB;YACI,IAAI,SAAS,GAAY,eAAe,CAAC,MAAM,CAAC;YAChD,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;QACD,oDAAoD;;YAEhD,OAAO,eAAe,CAAC;KAC9B;IAED,8DAA8D;IAC9D,yBAAyB;IACzB,IAAI,kBAAkB,GAAiB,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,mBAAmB,GAAY,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAElE,yBAAyB;IACzB,mCAAmC;IACnC,IAAI,mBAAmB,KAAK,gBAAgB;QACxC,OAAO,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IACvC,6BAA6B;;QAEzB,OAAO,IAAI,CAAC,KAAK,CAAC,yCAAyC,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;AACvI,CAAC;AAID;;GAEG;AACH,SACA,YAAY,CACP,IAAY;IAGb,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,IAAE,GAAG,EAAE,CAAC,EAAE,EACzB;QACI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACzB;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AAID;;GAEG;AACH,SACA,UAAU,CACL,KAAiB;IAGlB,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAGD;;GAEG;AACH,SACA,UAAU,CACL,KAAiB;IAGlB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,SAAS,IAAI,KAAK;QACvB,UAAU,IAAI,SAAS,CAAC;IAC5B,OAAO,UAAU,CAAC;AACtB,CAAC;AAID,IAAI,KAAK,GAAG;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;CACT,CAAA"}
@@ -0,0 +1,37 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export { decoded_data, decode_result, decode, encode };
/**
* Data that RLP can encode. Also the result of decoding.
*/
declare type decoded_data = Uint8Array | Array<decoded_data>;
/**
* Decoding can have a remainder
*/
declare type decode_result = {
decoded_data: decoded_data;
remainder: Uint8Array;
};
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
declare function decode(bytes: Uint8Array): decode_result;
/**
* Encode some decoded data
*/
declare function encode(data: decoded_data): Uint8Array;
@@ -0,0 +1,382 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export { decode, encode };
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
function decode(bytes) {
// check the first byte
let first_byte = bytes[0];
let rest = bytes.slice(1);
// if the first byte is between 0 and 127, that is the data
if (first_byte <= 127) {
return dr(new Uint8Array([first_byte]), rest);
}
// if the first byte is between 128 and 183 = 128 + 55, it is a bytestring
// and the length is Byte - 128
else if (first_byte <= 183) {
let payload_byte_length = first_byte - 128;
let payload = rest.slice(0, payload_byte_length);
let rest2 = rest.slice(payload_byte_length);
return dr(payload, rest2);
}
// if the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
// bytestring. the byte length of bytestring is FirstByte - 183. Then pull
// out the actual data
else if (first_byte <= 191) {
let byte_length_of_byte_length = first_byte - 183;
let bytes_of_byte_length = rest.slice(0, byte_length_of_byte_length);
let byte_length = bytes_to_number(bytes_of_byte_length);
let bytes = rest.slice(byte_length_of_byte_length, byte_length + byte_length_of_byte_length);
let rest2 = rest.slice(byte_length + byte_length_of_byte_length);
return dr(bytes, rest2);
}
// If the first byte is between 192 and 247 = 192 + 55, it is a list. The
// byte length of the list-payload is FirstByte - 192. Then the list
// payload, which needs to be decoded on its own.
else if (first_byte <= 247) {
let byte_length_of_list = first_byte - 192;
let list_payload = rest.slice(0, byte_length_of_list);
let list = decode_list(list_payload);
let rest2 = rest.slice(byte_length_of_list);
return dr(list, rest2);
}
// If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a
// list. The byte length of the byte length of the list-payload is
// FirstByte - 247. Then the byte length of the list. Then the list
// payload, which needs to be decoded on its own.
else {
let byte_length_of_byte_length = first_byte - 247;
let bytes_of_byte_length = rest.slice(0, byte_length_of_byte_length);
let byte_length = bytes_to_number(bytes_of_byte_length);
let list_bytes = rest.slice(byte_length_of_byte_length, byte_length + byte_length_of_byte_length);
let list = decode_list(list_bytes);
let rest2 = rest.slice(byte_length + byte_length_of_byte_length);
return dr(list, rest2);
}
}
/**
* Decode a list payload (non-prefixed) into an `Array<decoded_data>`.
*
* Repeatedly decodes an element off the list until remainder is empty.
*
* @internal
*/
function decode_list(bytes) {
let arr = [];
while (bytes.length > 0) {
// grab an item off the bytes
let { decoded_data, remainder } = decode(bytes);
// push it
arr.push(decoded_data);
// update bytes
bytes = remainder;
}
return arr;
}
/**
* Convert bytestring to number
*
* @internal
*/
function bytes_to_number(bytes) {
let n = 0;
for (let b of bytes) {
n <<= 8;
n += b;
}
return n;
}
/**
* Make a `decode_result` containing the two arguments
*
* @internal
*/
function dr(x, y) {
return { decoded_data: x,
remainder: y };
}
//=============================================================================
//=============================================================================
// ENCODING
//=============================================================================
//=============================================================================
/**
* Encode some decoded data
*/
function encode(data) {
// is it an array or data
if (is_binary(data)) {
return encode_binary(data);
}
else if (is_list(data)) {
return encode_list(data);
}
else {
throw new Error('encode told to encode something that is not an array or a binary: ' + data);
}
}
/**
* Encode a binary into RLP
*
* @internal
*/
function encode_binary(bytes) {
let len = bytes.length;
// single byte case when the byte is between 0..127
// result is the bytestring containing the byte itself
if ((len === 1) &&
(bytes[0] <= 127)) {
return bytes;
}
// if the bytestring is 0..55 bytes long, the first byte in the result is
// 128 + Length, the rest of the result bytestring is the input string
else if (len <= 55) {
// construct the result
// <<128 + Len, Bytes/binary>>
let result = new Uint8Array(len + 1);
// first byte is 128 + length
result[0] = 128 + len;
// copy input bytes into result
for (let input_idx0 = 0; input_idx0 < len; input_idx0++) {
let result_idx0 = input_idx0 + 1;
result[result_idx0] = bytes[input_idx0];
}
return result;
}
// if the bytestring is more than 55 bytes long, the first byte is 183 +
// ByteLengthOfByteLength, followed by the byte length, followed by the
// bytes
else {
let len_bytes = encode_unsigned(len);
let len_bytes_length = len_bytes.length;
// total array is
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
let result = new Uint8Array(1 + len_bytes_length + len);
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
result[0] = 183 + len_bytes_length;
// copy len_bytes into result
for (let len_bytes_idx0 = 0; len_bytes_idx0 < len_bytes_length; len_bytes_idx0++) {
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0 = len_bytes_idx0 + 1;
result[result_idx0] = len_bytes[len_bytes_idx0];
}
// copy original byte array into result
for (let input_idx0 = 0; input_idx0 < len; input_idx0++) {
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0 = input_idx0 + (1 + len_bytes_length);
result[result_idx0] = bytes[input_idx0];
}
// finally, return the result
return result;
}
}
/**
* Encode a list
*
* @internal
*/
function encode_list(list) {
// first encode every element in the list, then branch
let payloads = list.map(encode);
let payload = uint8arr_concat(payloads);
let payload_size = payload.length;
// if the payload size is in 0..55, then the first byte is 192 + payload
// size, followed by the payload
if (payload_size <= 55) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
let result = new Uint8Array(1 + payload_size);
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
result[0] = 192 + payload_size;
// copy the rest of the payload into result
for (let payload_idx0 = 0; payload_idx0 < payload_size; payload_idx0++) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
let result_idx0 = payload_idx0 + 1;
result[result_idx0] = payload[payload_idx0];
}
return result;
}
// if the payload size is greater than 55, the first byte is 247 +
// size_of_payload_size, followed by the payload size, followed by the
// payload
else {
// compute the payload size size
let payload_size_bytes = encode_unsigned(payload_size);
let payload_size_size = payload_size_bytes.length;
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
let result = new Uint8Array(1 + payload_size_size + payload_size);
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// first byte is 247 + payload_size_size
result[0] = 247 + payload_size_size;
// copy the payload_size_bytes into result
for (let psb_idx0 = 0; psb_idx0 < payload_size_size; psb_idx0++) {
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 byte for this
let result_idx0 = psb_idx0 + 1;
result[result_idx0] = payload_size_bytes[psb_idx0];
}
// copy the payload into result
for (let pb_idx0 = 0; pb_idx0 < payload_size; pb_idx0++) {
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 + payload_size_size bytes for this
let result_idx0 = pb_idx0 + (1 + payload_size_size);
result[result_idx0] = payload[pb_idx0];
}
// finally, return result
return result;
}
}
/**
* Encode a number as a bytestring
*
* Not for general use, this assumes the input number is greater than 55
*
* @internal
*/
function encode_unsigned(n) {
// can assume that n initially is greater than 55
// have to encode it in reverse order
let arr = [];
// repeated division by 256 with remainder
//
// example: suppose bign was 1234 and we were dividing by 10
//
// iteration 0:
// bign = 1234
// arr = []
// ---
// bign / 10 = 123
// bign % 10 = 4
// ---
// bign = 123
// arr = [4]
//
// iteration 1:
// bign = 123
// arr = [4]
// ---
// bign / 10 = 12
// bign % 10 = 3
// ---
// bign = 12
// arr = [4, 3]
//
// iteration 2:
// bign = 12
// arr = [4, 3]
// ---
// bign / 10 = 1
// bign % 10 = 2
// ---
// bign = 1
// arr = [4, 3, 2]
//
// iteration 3:
// bign = 1
// arr = [4, 3, 2]
// ---
// bign / 10 = 0
// bign % 10 = 1
// ---
// bign = 0
// arr = [4, 3, 2, 1]
//
// iteration 4:
// bign = 0
// arr = [4, 3, 2, 1]
// ---
// DONE
while (n > 0) {
arr.push(n % 256);
n >>= 8;
}
// reverse and make into Uint8Array
arr.reverse();
return new Uint8Array(arr);
}
/**
* concatenate an array of `Uint8Array`s into a single Uint8Array
*
* @internal
*/
function uint8arr_concat(arrs) {
// total length
let total_len = arrs.reduce(// fold
function (acc_len, this_uint8array) {
return acc_len + this_uint8array.length;
},
// initial accumulator
0);
// start up result
let result = new Uint8Array(total_len);
let result_idx0 = 0;
// concatenate
for (let this_uint8arr of arrs) {
// bytewise copy of this uint8array
for (let this_uint8arr_idx0 = 0; this_uint8arr_idx0 < this_uint8arr.length; this_uint8arr_idx0++) {
// copy byte and increment result idx0
result[result_idx0] = this_uint8arr[this_uint8arr_idx0];
result_idx0++;
}
}
return result;
}
/**
* returns true if input is `instanceof Uint8Array`
*
* @internal
*/
function is_binary(x) {
return (x instanceof Uint8Array);
}
/**
* returns true if input is `instanceof Array`
*
* @internal
*/
function is_list(x) {
return (x instanceof Array);
}
//# sourceMappingURL=rlp.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,66 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export { Safe, Ok, Error, ok, error, unsafe };
/**
* Type that catches positive errors
*/
declare type Safe<ok_t, err_t> = Ok<ok_t> | Error<err_t>;
/**
* Ok type
*/
declare type Ok<ok_t> = {
ok: true;
result: ok_t;
};
/**
* Error type
*/
declare type Error<err_t> = {
ok: false;
error: err_t;
};
/**
* Constructs an `Ok` value from a pure value
*/
declare function ok<ok_t>(x: ok_t): Ok<ok_t>;
/**
* Constructs an `Error` value from a pure value
*/
declare function error<err_t>(x: err_t): Error<err_t>;
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
declare function unsafe<ok_t, err_t>(x: Safe<ok_t, err_t>): ok_t;
@@ -0,0 +1,58 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export { ok, error, unsafe };
/**
* Constructs an `Ok` value from a pure value
*/
function ok(x) {
return { ok: true, result: x };
}
/**
* Constructs an `Error` value from a pure value
*/
function error(x) {
return { ok: false, error: x };
}
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
function unsafe(x) {
if (x.ok)
return x.result;
else
throw x.error;
}
//# sourceMappingURL=safe.js.map
@@ -0,0 +1 @@
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAIH,EAAE,EACF,KAAK,EACL,MAAM,EACT,CAAA;AA2BD;;GAEG;AACH,SACA,EAAE,CAEG,CAAQ;IAGT,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;AACjC,CAAC;AAID;;GAEG;AACH,SACA,KAAK,CAEA,CAAQ;IAGT,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;AACjC,CAAC;AAID;;;GAGG;AACH,SACA,MAAM,CAED,CAAoB;IAGrB,IAAI,CAAC,CAAC,EAAE;QACJ,OAAO,CAAC,CAAC,MAAM,CAAC;;QAEhB,MAAM,CAAC,CAAC,KAAK,CAAC;AACtB,CAAC"}
@@ -0,0 +1,418 @@
/**
* Base58 encoding/decoding
*/
export {
encode,
decode
}
//=============================================================================
// ENCODING
//=============================================================================
/**
* Encode a Uint8Array into base58
*/
function
encode
(binary : Uint8Array)
: string
{
let num_leading_zeros : number = nlz(binary);
let rest : Uint8Array = binary.slice(num_leading_zeros);
let ones : string = encode_zeros(num_leading_zeros);
let rest_b58 : string = encode_rest(rest);
let result : string = ones + rest_b58;
return result;
}
/**
* count the number of leading zeros in a uint8array
*
* @internal
*/
function
nlz
(bytes: Uint8Array)
: number
{
let n = 0;
for (let this_byte of bytes)
{
if (0 === this_byte) { n++; }
else { break; }
}
return n;
}
/**
* Generate a bunch of '1's for however many leading zeros there are
*
* @internal
*/
function
encode_zeros
(how_many : number)
: string
{
let ones : string = '';
for (let i = 1;
i <= how_many;
i++)
{
ones += '1';
}
return ones;
}
/**
* Encode a Uint8Array that has no leading zeros
*
* @internal
*/
function
encode_rest
(bytes : Uint8Array)
: string
{
let bytes_bignum : bigint = bytes_to_bigint(bytes);
let result : string = bignum_to_base58(bytes_bignum);
return result;
}
/**
* Convert a bytestring to a bignum
*
* @internal
*/
function
bytes_to_bigint
(bytes: Uint8Array)
: bigint
{
let acc_bigint : bigint = 0n;
for(let this_byte of bytes)
{
acc_bigint <<= 8n;
acc_bigint += BigInt(this_byte);
}
return acc_bigint;
}
/**
* Convert a BigInt to Base58
*
* @internal
*/
function
bignum_to_base58
(q: bigint)
: string
{
let s = '';
while (q !== 0n)
{
let this_n : bigint = q % 58n;
q /= 58n;
let this_b58_char : string = bigint_to_char(this_n);
s = this_b58_char + s;
}
return s;
}
//=============================================================================
// DECODING
//=============================================================================
/**
* Decode a Base58 string into a Uint8Array
*/
function
decode
(base58: string)
: Uint8Array
{
let num_leading_ones : number = nlo(base58);
let rest : string = base58.slice(num_leading_ones);
let zeros : Array<number> = decode_ones(num_leading_ones);
let rest_arr : Array<number> = decode_rest(rest);
let pre_result : Array<number> = zeros.concat(rest_arr);
return new Uint8Array(pre_result);
}
/**
* count the number of leading 1 characters in a uint8array
*
* @internal
*/
function
nlo
(base58: string)
: number
{
let n = 0;
for (let this_char of base58)
{
if ('1' === this_char) { n++; }
else { break; }
}
return n;
}
/**
* Generate a bunch of '0's for however many leading ones there are
*
* @internal
*/
function
decode_ones
(how_many : number)
: Array<number>
{
let zeros : Array<number> = [];
for (let i = 1;
i <= how_many;
i++)
{
zeros.push(0);
}
return zeros;
}
/**
* Decode a string that has no leading 1s
*
* @internal
*/
function
decode_rest
(base58: string)
: Array<number>
{
let result_bignum : bigint = base58_to_bigint(base58);
let result : Array<number> = bigint_to_base256(result_bignum);
return result;
}
/**
* Convert a base58 string to a bignum
*
* @internal
*/
function
base58_to_bigint
(base58: string)
: bigint
{
let acc_bigint : bigint = 0n;
for(let this_char of base58)
{
acc_bigint *= 58n;
acc_bigint += char_to_bigint(this_char);
}
return acc_bigint;
}
/**
* convert a bignum into a byte array
*
* @end
*/
function
bigint_to_base256
(q: bigint)
: Array<number>
{
let arr_reverse = [];
while(q !== 0n)
{
let r: number = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return arr_reverse;
}
//=============================================================================
// TRANSLATION TABLES
//=============================================================================
/**
* Base58 integer -> character conversion table
*
* @internal
*/
function
bigint_to_char
(n: bigint)
: string
{
switch(n) {
case 0n: return '1';
case 1n: return '2';
case 2n: return '3';
case 3n: return '4';
case 4n: return '5';
case 5n: return '6';
case 6n: return '7';
case 7n: return '8';
case 8n: return '9';
case 9n: return 'A';
case 10n: return 'B';
case 11n: return 'C';
case 12n: return 'D';
case 13n: return 'E';
case 14n: return 'F';
case 15n: return 'G';
case 16n: return 'H';
case 17n: return 'J';
case 18n: return 'K';
case 19n: return 'L';
case 20n: return 'M';
case 21n: return 'N';
case 22n: return 'P';
case 23n: return 'Q';
case 24n: return 'R';
case 25n: return 'S';
case 26n: return 'T';
case 27n: return 'U';
case 28n: return 'V';
case 29n: return 'W';
case 30n: return 'X';
case 31n: return 'Y';
case 32n: return 'Z';
case 33n: return 'a';
case 34n: return 'b';
case 35n: return 'c';
case 36n: return 'd';
case 37n: return 'e';
case 38n: return 'f';
case 39n: return 'g';
case 40n: return 'h';
case 41n: return 'i';
case 42n: return 'j';
case 43n: return 'k';
case 44n: return 'm';
case 45n: return 'n';
case 46n: return 'o';
case 47n: return 'p';
case 48n: return 'q';
case 49n: return 'r';
case 50n: return 's';
case 51n: return 't';
case 52n: return 'u';
case 53n: return 'v';
case 54n: return 'w';
case 55n: return 'x';
case 56n: return 'y';
case 57n: return 'z';
default:
throw new Error('invalid base58 bigint: ' + n);
}
}
/**
* Base58 character -> integer conversion table
*
* @internal
*/
function
char_to_bigint
(s: string)
: bigint
{
switch(s) {
case '1': return 0n;
case '2': return 1n;
case '3': return 2n;
case '4': return 3n;
case '5': return 4n;
case '6': return 5n;
case '7': return 6n;
case '8': return 7n;
case '9': return 8n;
case 'A': return 9n;
case 'B': return 10n;
case 'C': return 11n;
case 'D': return 12n;
case 'E': return 13n;
case 'F': return 14n;
case 'G': return 15n;
case 'H': return 16n;
case 'J': return 17n;
case 'K': return 18n;
case 'L': return 19n;
case 'M': return 20n;
case 'N': return 21n;
case 'P': return 22n;
case 'Q': return 23n;
case 'R': return 24n;
case 'S': return 25n;
case 'T': return 26n;
case 'U': return 27n;
case 'V': return 28n;
case 'W': return 29n;
case 'X': return 30n;
case 'Y': return 31n;
case 'Z': return 32n;
case 'a': return 33n;
case 'b': return 34n;
case 'c': return 35n;
case 'd': return 36n;
case 'e': return 37n;
case 'f': return 38n;
case 'g': return 39n;
case 'h': return 40n;
case 'i': return 41n;
case 'j': return 42n;
case 'k': return 43n;
case 'm': return 44n;
case 'n': return 45n;
case 'o': return 46n;
case 'p': return 47n;
case 'q': return 48n;
case 'r': return 49n;
case 's': return 50n;
case 't': return 51n;
case 'u': return 52n;
case 'v': return 53n;
case 'w': return 54n;
case 'x': return 55n;
case 'y': return 56n;
case 'z': return 57n;
default:
throw new Error('invalid base58 char: ' + s);
}
}
@@ -0,0 +1,655 @@
/**
* Base64 Utility Functions in TypeScript
*/
export {
encode,
decode
}
/**
* Encode an array of bytes as a Uint8Array in base64 notation.
*/
function
encode
(bytes: Uint8Array)
: string
{
// slice the array
// length of head is a multiple of 3
// treat the tail as a special case
let {head, tail, tail_len} = slice3k(bytes);
let head_str : string = encode_head(head);
let tail_str : string = encode_tail(tail, tail_len);
return head_str + tail_str;
}
type slice3k
= {head : Uint8Array,
tail : Uint8Array,
tail_len : number};
/**
* Take a Uint8Array, take the first 3k (k >= 0) bytes, put them in head, and
* the remaining 0,1, or 2 bytes, put them in tail
*
* @internal
*/
function
slice3k
(bytes: Uint8Array)
: slice3k
{
let len : number = bytes.length;
// too lazy to look up how to do integer division in js so this will do
let tail_len : number = len % 3;
let head_len : number = len - tail_len;
// for slice:
// first argument is the 0-index of the start
// second - first is the length of the slice
let head : Uint8Array = bytes.slice(0, head_len);
// empty second argument means go to the end
let tail : Uint8Array = bytes.slice(head_len);
return {head : head,
tail : tail,
tail_len : tail_len};
}
/**
* Encode a Uint8Array whose length is known to be a multiple of 3
*
* @internal
*/
function
encode_head
(head_bytes: Uint8Array)
: string
{
// can assume length of bytes is a multiple of 3
// start index at 0
// increment by 3
let head_bytes_len : number = head_bytes.length;
let max_idx0 : number = head_bytes_len - 1;
let head_str_acc : string = '';
for(let this_3slice_start_idx0 = 0;
this_3slice_start_idx0 <= max_idx0;
this_3slice_start_idx0 += 3)
{
let this_3slice_bytes : Uint8Array = head_bytes.slice(this_3slice_start_idx0, this_3slice_start_idx0 + 3);
let this_3slice_str : string = encode3(this_3slice_bytes);
head_str_acc += this_3slice_str;
}
return head_str_acc;
}
/**
* Encode a 3 bytes into base64 notation
*
* @internal
*/
function
encode3
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
let b1 : number = bytes[1];
let b2 : number = bytes[2];
// ABCDEFGH 12345678 abcdefgh
// b0 b1 b2
// ABCDEF GH1234 5678ab cdefgh
// n0 n1 n2 n3
let n0 : number = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// b2 = abcdefgh
// b2 >> 6 = ______ab
// n2 = __5678ab
let n2 : number = ((b1 % 16) << 2) + (b2 >> 6);
// b2 = abcdefgh
// 64 = _1______
// n3 = __cdefgh
let n3 : number = b2 % 64;
// convert to chars
let s0 : string = int2char(n0);
let s1 : string = int2char(n1);
let s2 : string = int2char(n2);
let s3 : string = int2char(n3);
// retrvn
return s0 + s1 + s2 + s3;
}
/**
* Encode the final 0, 1, or 2 bytes
*
* @internal
*/
function
encode_tail
(tail_bytes : Uint8Array,
tail_len : number)
: string
{
switch(tail_len) {
case 0: return '';
case 1: return encode1(tail_bytes);
case 2: return encode2(tail_bytes);
default:
throw new Error('encode_tail with tail_len = ' + tail_len);
}
}
/**
* Encode a single byte
*
* @internal
*/
function
encode1
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
// n0 = __ABCDEF
// b0 = ABCDEFGH
// b0 >> 2 = __ABCDEF
let n0 : number = b0 >> 2;
// n1 = __GH____
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
let n1 : number = (b0 % 4) << 4;
return int2char(n0) + int2char(n1) + '==';
}
/**
* Encode two bytes
*
* @internal
*/
function
encode2
(bytes: Uint8Array)
: string
{
let b0 : number = bytes[0];
let b1 : number = bytes[1];
// ABCDEFGH 12345678
// b0 b1
// ABCDEF GH1234 5678__
// n0 n1 n2
let n0 : number = b0 >> 2;
// b0 = ABCDEFGH
// 4 = _____1__
// b0 % 4 = ______GH
// (b0 % 4) << 4 = __GH____
// b1 = 12345678
// b1 >> 4 = ____1234
// n1 = __GH1234
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
// b1 = 12345678
// 16 = ___1____
// b1 % 16 = ____5678
// (b1 % 16) << 2 = __5678__
// n2 = __5678__
let n2 : number = (b1 % 16) << 2;
// convert to chars
let s0 : string = int2char(n0);
let s1 : string = int2char(n1);
let s2 : string = int2char(n2);
// retrvn
return s0 + s1 + s2 + '=';
}
/**
* Decode a base64-encoded string
*/
function
decode
(base64_str : string)
: Uint8Array
{
// length of the string is guaranteed to be a multiple of 4
// if the string is empty, return the empty array
let len = base64_str.length;
// this branching contains the implicit assertion that the length is a
// multiple of 4. If this is not true, the bottom branch is triggered.
// general case goes first because speeeeeed
if ( (4 < len)
&& (0 === (len % 4)))
{
// split the head and tail
let tail_start_idx0 : number = len - 4;
let head_s : string = base64_str.slice(0, tail_start_idx0);
let tail_s : string = base64_str.slice(tail_start_idx0);
// Using arrays because Uint8Arrays don't have a concat operation
let head_arr : Array<number> = decode_head(head_s);
let tail_arr : Array<number> = decode_tail(tail_s);
// silly to put these in variables but this is exactly the type of
// situation where JS type insanity shows up
//
// see: i forgot
// > [1,2,3] + [4,5,6]
// '1,2,34,5,6'
//
// Originally, I used + like some sort of moron who codes in a sane
// language
//
// seriously what is this language
//
// this is some clown behavior
let total_arr : Array<number> = head_arr.concat(tail_arr);
return new Uint8Array(total_arr);
}
// special case if the length is exactly 4
else if (4 === len)
{
// it's just a tail
return new Uint8Array(decode_tail(base64_str));
}
// empty string
else if (0 === len)
{
return new Uint8Array([]);
}
else
{
throw new Error('base64 decode: invalid string length: ' + len);
}
}
/**
* Decode a string known to not have any padding
*
* @internal
*/
function
decode_head
(s: string)
: Array<number>
{
// go 4 characters at a time
let max_i0 : number = s.length - 1;
let decoded_acc : Array<number> = [];
for(let i0 = 0;
i0 <= max_i0;
i0 += 4)
{
let this_slice_s : string = s.slice(i0, i0 + 4);
let this_slice_arr : Array<number> = decode3(this_slice_s);
// update accumulator
decoded_acc = decoded_acc.concat(this_slice_arr);
}
return decoded_acc;
}
/**
* Decode 4 characters that correspond to either 3 bytes, 2, bytes, or 1 byte
*
* @internal
*/
function
decode_tail
(s: string)
: Array<number>
{
// all that matters right now is the last 2 chars
// s0, s1, s2, s3
// 0 based indexing is so annoying
let s2 = s[2];
let s3 = s[3];
// braaaaaaaaaaaaaaaaaench
// two equals signs means 1 byte
if (('=' === s3) && ('=' === s2)) {
return decode1(s);
}
// one equals sign means 2 bytes
else if (('=' === s3)) {
return decode2(s);
}
// 0 equals signs means 3 bytes
else {
return decode3(s);
}
}
/**
* Decode a 4-character long base64 string corresponding to 3 bytes
*
* @internal
*/
function
decode3
(s: string)
: Array<number>
{
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
let s2 : string = s[2];
let s3 : string = s[3];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
let n2 : number = char2int(s2);
let n3 : number = char2int(s3);
// abcdef gh1234 5678ab cdefgh
// n0 n1 n2 n3
// abcdefgh 12345678 abcdefgh
// b0 b1 b2
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678ab
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 : number = ((n1 % 16) << 4) + (n2 >> 2);
// n2 = __5678ab
// 4 = _____1__
// n2 % 4 = ______ab
// (n2 % 4) << 6 = ab______
// n3 = __cdefgh
let b2 : number = ((n2 % 4) << 6) + n3;
return [b0, b1, b2];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function
decode2
(s: string)
: Array<number>
{
// xyz=
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
let s2 : string = s[2];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
let n2 : number = char2int(s2);
// abcdef gh1234 5678__
// n0 n1 n2
// abcdefgh 12345678
// b0 b1
// n0 = __abcdef
// n1 = __gh1234
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
// n1 = __gh1234
// 16 = ___1____
// n1 % 16 = ____1234
// (n1 % 16) << 4 = 1234____
// n2 = __5678__
// n2 >> 2 = ____5678
// b1 = 12345678
let b1 : number = ((n1 % 16) << 4) + (n2 >> 2);
return [b0, b1];
}
/**
* Decode a 4-character long base64 string corresponding to 2 bytes
*
* @internal
*/
function
decode1
(s: string)
: Array<number>
{
// xy==
// pull out strings
let s0 : string = s[0];
let s1 : string = s[1];
// convert to numbers
let n0 : number = char2int(s0);
let n1 : number = char2int(s1);
// abcdef gh____
// n0 n1
// abcdefgh
// b0
// n0 = __abcdef
// n1 = __gh____
// n0 << 2 = abcdef__
// n1 >> 4 = ______gh
// b0 = abcdefgh
let b0 : number = (n0 << 2) + (n1 >> 4);
return [b0];
}
// FIXME: these tables would *probably* be faster if they were made into objects
/**
* Conversion table for base64 encode
*
* @internal
*/
function
int2char
(n: number)
: string
{
switch(n) {
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
case 5: return 'F';
case 6: return 'G';
case 7: return 'H';
case 8: return 'I';
case 9: return 'J';
case 10: return 'K';
case 11: return 'L';
case 12: return 'M';
case 13: return 'N';
case 14: return 'O';
case 15: return 'P';
case 16: return 'Q';
case 17: return 'R';
case 18: return 'S';
case 19: return 'T';
case 20: return 'U';
case 21: return 'V';
case 22: return 'W';
case 23: return 'X';
case 24: return 'Y';
case 25: return 'Z';
case 26: return 'a';
case 27: return 'b';
case 28: return 'c';
case 29: return 'd';
case 30: return 'e';
case 31: return 'f';
case 32: return 'g';
case 33: return 'h';
case 34: return 'i';
case 35: return 'j';
case 36: return 'k';
case 37: return 'l';
case 38: return 'm';
case 39: return 'n';
case 40: return 'o';
case 41: return 'p';
case 42: return 'q';
case 43: return 'r';
case 44: return 's';
case 45: return 't';
case 46: return 'u';
case 47: return 'v';
case 48: return 'w';
case 49: return 'x';
case 50: return 'y';
case 51: return 'z';
case 52: return '0';
case 53: return '1';
case 54: return '2';
case 55: return '3';
case 56: return '4';
case 57: return '5';
case 58: return '6';
case 59: return '7';
case 60: return '8';
case 61: return '9';
case 62: return '+';
case 63: return '/';
default: throw new Error("invalid base64 encode byte: " + n);
}
}
/**
* Conversion table for base64 decode
*
* @internal
*/
function
char2int
(s: string)
: number
{
switch(s) {
case 'A': return 0;
case 'B': return 1;
case 'C': return 2;
case 'D': return 3;
case 'E': return 4;
case 'F': return 5;
case 'G': return 6;
case 'H': return 7;
case 'I': return 8;
case 'J': return 9;
case 'K': return 10;
case 'L': return 11;
case 'M': return 12;
case 'N': return 13;
case 'O': return 14;
case 'P': return 15;
case 'Q': return 16;
case 'R': return 17;
case 'S': return 18;
case 'T': return 19;
case 'U': return 20;
case 'V': return 21;
case 'W': return 22;
case 'X': return 23;
case 'Y': return 24;
case 'Z': return 25;
case 'a': return 26;
case 'b': return 27;
case 'c': return 28;
case 'd': return 29;
case 'e': return 30;
case 'f': return 31;
case 'g': return 32;
case 'h': return 33;
case 'i': return 34;
case 'j': return 35;
case 'k': return 36;
case 'l': return 37;
case 'm': return 38;
case 'n': return 39;
case 'o': return 40;
case 'p': return 41;
case 'q': return 42;
case 'r': return 43;
case 's': return 44;
case 't': return 45;
case 'u': return 46;
case 'v': return 47;
case 'w': return 48;
case 'x': return 49;
case 'y': return 50;
case 'z': return 51;
case '0': return 52;
case '1': return 53;
case '2': return 54;
case '3': return 55;
case '4': return 56;
case '5': return 57;
case '6': return 58;
case '7': return 59;
case '8': return 60;
case '9': return 61;
case '+': return 62;
case '/': return 63;
default: throw new Error("invalid base64 character: " + s);
}
}
@@ -0,0 +1,377 @@
/**
* Miscellaneous binary utility functions
*
* @module
*/
export {
bytes_to_bigint,
bigint_to_bytes,
concat,
strong_rand_bytes
};
/**
* Concatenate two arrays
*/
function
concat
(arr1 : Uint8Array,
arr2 : Uint8Array)
: Uint8Array
{
let len1 : number = arr1.length;
let len2 : number = arr2.length;
let arr1_idx0_offset : number = 0;
let arr2_idx0_offset : number = len1;
let result_len : number = len1 + len2;
let result : Uint8Array = new Uint8Array(result_len);
// copy first array into result
for (let arr1_idx0 = 0;
arr1_idx0 < len1;
arr1_idx0++)
{
// no offset here
let result_idx0 : number = arr1_idx0 + arr1_idx0_offset;
result[result_idx0] = arr1[arr1_idx0];
}
// copy second array into result
for (let arr2_idx0 = 0;
arr2_idx0 < len2;
arr2_idx0++)
{
// offset by the length of the first array
let result_idx0 : number = arr2_idx0 + arr2_idx0_offset;
result[result_idx0] = arr2[arr2_idx0];
}
return result;
}
/**
* Cryptographically random bytes
*/
function
strong_rand_bytes
(how_many : number)
: Uint8Array
{
let arr = new Uint8Array(how_many);
(new Crypto()).getRandomValues(arr);
return arr;
}
/**
* Convert a byte array to a bigint
*
* Equivalent to `binary:decode_unsigned/1` from Erlang
*/
function
bytes_to_bigint
(bytes: Uint8Array)
: bigint
{
let n : bigint = 0n;
for (let b of bytes) {
// move first, then add
// otherwise it ends on a move
// imperative languages are for losers
n <<= 8n;
n += BigInt(b);
}
return n;
}
/**
* Convert a bigint to a byte array
*
* Equivalent to `binary:encode_unsigned/1` from Erlang
*
* Requires input to be positive
*/
function
bigint_to_bytes
(q: bigint)
: Uint8Array
{
if (q < 0n) {
throw new Error('q < 0n: ' + q);
}
let arr_reverse = [];
while (q > 0n) {
let r = Number(q % 256n);
q /= 256n;
arr_reverse.push(r);
}
arr_reverse.reverse();
return new Uint8Array(arr_reverse);
}
/**
* Oh no, bitstrings in a language that only has bytestrings
*
* By convention these are `Uint8Array`s with byte length `ceil(bit_length /
* 8)`, and all trailing bits are zero.
*/
type bits =
{bit_length : number,
bytes : Uint8Array};
/**
* Get an uninitialized bitstring
*
* @internal
*/
function
bits_null
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
return {bit_length : bit_length,
bytes : result};
}
/**
* Get a bitstring of a given length where every value is 0.
*/
function
bits_zeros
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
for (let i0 = 0;
i0 < byte_length;
i0++)
{
result[i0] = 0;
}
return {bit_length : bit_length,
bytes : result};
}
/**
* Get a bitstring of a given length where every value is 1.
*/
function
bits_ones
(bit_length : number)
: bits
{
let byte_length : number = Math.ceil(bit_length / 8);
let result : Uint8Array = new Uint8Array(byte_length);
// fill everything except the last byte with 255s
for (let i0 = 0;
i0 < (byte_length - 1);
i0++)
{
result[i0] = 255;
}
// alright so the last byte
// ok so the number of leading 0s is
// 8 - (bit_length % 8)
let num_trailing_zero_bits : number = 8 - (bit_length % 8);
// the trailing byte is 255 << that
// e.g. 3 trailing 0s
// 1111_1111 -> 1111_1000
let last_byte : number = 255 << num_trailing_zero_bits;
let last_byte_idx0 : number = byte_length - 1;
result[last_byte_idx0] = last_byte;
return {bit_length : bit_length,
bytes : result};
}
/**
* Get the bit at a given 0-index
*/
function
bits_i0th
(bit_idx0 : number,
bits : bits)
: number
{
// first task is figuring out what byte we're at
// for instance if we want bit 27
// 3*8 = 24 =< 27 < 4*8
// so it's Math.floor(bit_idx0 / 8)
let byte_idx0 : number = Math.floor(bit_idx0 / 8);
// let's fetch the byte and work with that
let the_byte : number = bits.bytes[byte_idx0];
// ok so let's go with 27 again
// 27 = 3 mod 8
// so we bitshift right by (8 - 3)
// and then take the remainder dividing by 2
// --B-_---- -> ----_---B -> 0000_000B
let bsr : number = 8 - (bit_idx0 % 8);
return (the_byte >> bsr) % 2;
}
/**
* Concatenate two bitstrings
*/
function
bits_concat
(bits1 : bits,
bits2 : bits)
: bits
{
let result_bit_length : number = bits1.bit_length + bits2.bit_length;
let bytes1 : Uint8Array = bits1.bytes;
let bytes2 : Uint8Array = bits2.bytes;
// using zeros here because of our xor trick in a minute
let result_bits : bits = bits_null(result_bit_length);
let result_bytes : Uint8Array = result_bits.bytes;
// go along each byte in result, and compute the byte boundary
for (let i = 0;
i < result_bytes.length;
i++)
{
// ABCD_EFGH _
// 0123_4567 8
// this is the bit index of the leftmost bit in this byte
let start_bit_bi0 : number = i * 8;
let next_start_bit_bi0 : number = start_bit_bi0 + 8;
// does the bit at the beginning of this byte correspond to the first array?
// strict comparison:
// suppose i = 0,
// suppose bit_length1 is 0
// then this says no, go to second array
// suppose bl1 = 1,
// this says start at first array
let start_bit_is_of_first_array : boolean = start_bit_bi0 < bits1.bit_length;
// weak comparison:
// suppose bit_length1 = 8
// ABCD_EFGH _
// 0123_4567 8
// ^
// start_bit_bi0 ^ next_start_bit_bi0
let stop_bit_is_of_first_array : boolean = next_start_bit_bi0 <= bits1.bit_length;
// is this a bytes1 byte
let is_bytes1_byte : boolean = start_bit_is_of_first_array && stop_bit_is_of_first_array;
let is_boundary_byte : boolean = start_bit_is_of_first_array && !stop_bit_is_of_first_array;
// need to work out the ping_pong bs up here because js is dumb and I
// can't put lets between elseifs
// alright, now we're in the case of only copying from the second array
// we have two cases:
// ping-pong:
// ABCD_EFGH 1234_5678
// - ---- ---
// copying these bits
// ping:
// ABCD_EFGH <end>
// - ---- 000
//
// how to distinguish between these two??
//
// we're in the ping case when the start_bit_bi0 corresponds to the
// final byte of the second array
//
// ok
//
// we need to compute the bit address in the second array that
// corresponds to the bit address at the beginning of this byte in the
// result array
let bits2_addr_bi0 : number = start_bit_bi0 - bits1.bit_length;
// I think the variable is
// bits_left_to_copy = bits2.bit_length - bit_addr2_bi0
// no + 1 because the current bit is uncopied,
// so if bit_addr2_bi0 = 7 and bits2.bit_length is 8, it means we
// have the last bit to copy
// cases:
// bits_left_to_copy <= 0 ->
// this would mean we have more bits to copy, but are out of
// source bits. should be impossible if bits_null is correct
// bits_left_to_copy <= 8 ->
// this would mean we are going to fill this last byte in the
// result array with the correct bits from array2, but how we
// do this will depend on how those are arranged in bytes2
// (whether we grab one or two bytes)
//
// this is the tricky case
//
// I think what matters here is the byte address in the second array
// if we're on the last byte
// 8 < bits_left_to_copy ->
// this means we can safely grab two bytes from bytes2, and do
// our bitshifting to make it correct
//
// FIXME
let bits_left_to_copy : number = bits2.bit_length - bits2_addr_bi0;
// no the variable that matters is which byte we're on in the result
let this_bytes2_addr_i0 : number = Math.floor(bits2_addr_bi0 / 8);
let next_bytes2_addr_i0 : number = this_bytes2_addr_i0 + 1;
let bitshift_amt : number = bits1.bit_length % 8;
let ping : boolean = next_bytes2_addr_i0 === bytes2.length;
// simple case: this is a byte from the first array
// just copy it
if (is_bytes1_byte)
result_bytes[i] = bytes1[i];
// this is a boundary byte
// further cases:
// second bit length is 0 ->
// ABCD_EF-- <empty>
// ^ starting here
// just copy first byte and move along
else if (is_boundary_byte && (bits2.bit_length === 0))
result_bytes[i] = bytes1[i];
// boundary byte, and there is at least one byte in the second array
else if (is_boundary_byte)
{
// copy over the first byte
result_bytes[i] = bytes1[i];
// take the first byte from the second array
let first_byte_of_second_array : number = bytes2[0];
// bytes1:
// ABCD_EF00
// 6
// bytes2:
// 1234_5678
// 0000_0012
// and bitshift it right by that amount
let bitshift_amt : number = bits1.bit_length % 8;
result_bytes[i] ^= first_byte_of_second_array >> bitshift_amt;
}
// last byte of second array
else if (ping)
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt);
// ping-pong: not last byte of second array
else
result_bytes[i] = (bytes2[this_bytes2_addr_i0] << bitshift_amt) ^ (bytes2[next_bytes2_addr_i0] << bitshift_amt);
}
return {bit_length : result_bit_length,
bytes : result_bytes};
}
@@ -0,0 +1,399 @@
/**
* FÆRT: Fast Æternity Recovery Text
*
* Reference: https://gitlab.com/zxq9/passgas/-/blob/83607fedb08be5dfd03210e331f9c76125bb3467/fullofbeans
*
* @module
*/
export {
encode,
decode,
byte_of_word,
check_word,
check_byte,
words
}
import * as safe from './safe.js';
/**
* Encode a bytestring into FÆRT
*/
function
encode
(bytes : Uint8Array)
: string
{
// initial accumulator
let words_acc : Array<string> = [];
// go along each byte and look up the word
// add it to the accumulator
for (let this_byte of bytes)
{
let this_word = words[this_byte];
words_acc.push(this_word);
}
// prepend check word to phrase
// yes craig it would be faster to do the check byte inline
// the usage case here is 64 byte strings
// double pass is not a big deal
return check_word(bytes) + ' ' + words_acc.join(' ');
}
/**
* Decode a FAERT string into bytes
*/
function
decode
(faert : string)
: safe.Safe<Uint8Array, string>
{
let all_words : Array<string> = faert.split(' ');
let input_check_word : string = all_words[0];
let input_words : Array<string> = all_words.slice(1)
// accumulator
let computed_bytes : Array<number> = [];
// loop over words and figure out accumulator
for (let this_input_word of input_words)
{
let maybe_this_byte : safe.Safe<number, string> = byte_of_word(this_input_word);
// if the word is an allowable word, add it to the accumulator
if (maybe_this_byte.ok)
{
let this_byte : number = maybe_this_byte.result;
computed_bytes.push(this_byte);
}
// error case, propagate the error up the call chain
else
return maybe_this_byte;
}
// at this point, we can assume we correctly decoded all words
// compute the check byte
let computed_bytes_u8s : Uint8Array = new Uint8Array(computed_bytes);
let computed_check_word : string = check_word(computed_bytes_u8s);
// check if it is correct
// if so, return the computed bytes
if (computed_check_word === input_check_word)
return safe.ok(computed_bytes_u8s);
// otherwise, return an error
else
return safe.error('checksum failure! computed check word: ' + computed_check_word + '; input check word: ' + input_check_word);
}
/**
* given a word, find its index
*/
function
byte_of_word
(word: string)
: safe.Safe<number, string>
{
for (let i=0; i<=255; i++)
{
if (word === words[i])
return safe.ok(i);
}
return safe.error('invalid word: ' + word);
}
/**
* compute the check word of an array
*/
function
check_word
(bytes: Uint8Array)
: string
{
return words[check_byte(bytes)];
}
/**
* given an array, compute the xor of all the bytes in the array
*/
function
check_byte
(bytes: Uint8Array)
: number
{
let check_byte = 0;
for (let this_byte of bytes)
check_byte ^= this_byte;
return check_byte;
}
let words = [
"able",
"abuse",
"acquire",
"adjust",
"agent",
"air",
"alert",
"alpha",
"anger",
"answer",
"any",
"argue",
"around",
"assume",
"asthma",
"aunt",
"awkward",
"balcony",
"barrel",
"because",
"behave",
"bicycle",
"bike",
"blind",
"blouse",
"bonus",
"bottom",
"breeze",
"brother",
"bubble",
"burger",
"butter",
"can",
"cannon",
"cargo",
"catalog",
"caught",
"century",
"chaos",
"chicken",
"churn",
"cinnamon",
"clever",
"clock",
"clown",
"collect",
"conduct",
"convince",
"correct",
"cradle",
"crane",
"crime",
"cross",
"crystal",
"curve",
"daughter",
"debris",
"decrease",
"deny",
"deputy",
"despair",
"diesel",
"dinner",
"distance",
"document",
"donate",
"drama",
"drink",
"dutch",
"earth",
"educate",
"elbow",
"employ",
"endless",
"enlist",
"enter",
"equal",
"eternal",
"example",
"exhibit",
"exotic",
"faculty",
"famous",
"fault",
"feature",
"fiber",
"filter",
"firm",
"flame",
"flush",
"follow",
"forward",
"frame",
"fringe",
"future",
"game",
"gate",
"gift",
"glare",
"glow",
"goat",
"grab",
"grief",
"guilt",
"hand",
"hawk",
"health",
"hen",
"hire",
"honey",
"hover",
"hurry",
"hybrid",
"impose",
"inch",
"inherit",
"injury",
"install",
"iron",
"jazz",
"joke",
"just",
"kit",
"kitchen",
"language",
"laundry",
"leader",
"lend",
"leopard",
"license",
"live",
"lobster",
"lounge",
"magnet",
"mail",
"mansion",
"mass",
"math",
"media",
"message",
"metal",
"misery",
"mix",
"more",
"mountain",
"museum",
"mutual",
"narrow",
"nerve",
"next",
"note",
"obey",
"obtain",
"offer",
"once",
"orange",
"ostrich",
"over",
"owner",
"palace",
"patch",
"pave",
"pen",
"phrase",
"piece",
"pizza",
"plunge",
"polar",
"pool",
"power",
"pretty",
"private",
"protect",
"pulp",
"purity",
"quit",
"quote",
"raise",
"razor",
"recall",
"region",
"relief",
"rent",
"rescue",
"review",
"ride",
"risk",
"roof",
"rough",
"saddle",
"salmon",
"sand",
"scene",
"scrub",
"season",
"seek",
"series",
"shed",
"shoe",
"sick",
"silent",
"situate",
"skill",
"slide",
"slush",
"snack",
"solar",
"soul",
"special",
"sphere",
"spot",
"spy",
"stairs",
"stereo",
"strategy",
"stuff",
"success",
"sunny",
"surge",
"swear",
"symptom",
"tail",
"ten",
"tent",
"theme",
"thumb",
"tiny",
"toe",
"tooth",
"topic",
"trade",
"trash",
"trophy",
"truly",
"tumble",
"typical",
"uncle",
"unfair",
"until",
"upper",
"useless",
"van",
"venue",
"video",
"visa",
"vocal",
"walk",
"waste",
"wedding",
"weekend",
"wide",
"winner",
"wise",
"wood",
"wrist",
"zero"
]
@@ -0,0 +1,521 @@
/**
* Ethereum Recursive-Length Prefix Encoding implementation
*
* Two reference implementations:
*
* 1. Ethereum Python implementation
* 2. My Erlang implementation (agrees with Ethereum Python in randomized
* tests)
*
* This work can be found in ../test/testgen/
*
* FIXME: need to have Safe assertions for "i am decoding a list", "i am
* decoding a binary", "I am decoding something with no remainder", etc
*
* @module
*/
export {
decoded_data,
decode_result,
decode,
encode
}
//=============================================================================
//=============================================================================
// DECODING
//=============================================================================
//=============================================================================
/**
* Data that RLP can encode. Also the result of decoding.
*/
type decoded_data
= Uint8Array
| Array<decoded_data>;
/**
* Decoding can have a remainder
*/
type decode_result
= {decoded_data : decoded_data,
remainder : Uint8Array};
/**
* Decode an RLP-encoded bytestring into a `decode_result` (decoded data +
* whatever wasn't consumed)
*/
function
decode
(bytes: Uint8Array)
: decode_result
{
// check the first byte
let first_byte: number = bytes[0];
let rest : Uint8Array = bytes.slice(1);
// if the first byte is between 0 and 127, that is the data
if
(first_byte <= 127) {
return dr(new Uint8Array([first_byte]), rest);
}
// if the first byte is between 128 and 183 = 128 + 55, it is a bytestring
// and the length is Byte - 128
else if
(first_byte <= 183) {
let payload_byte_length : number = first_byte - 128;
let payload : Uint8Array = rest.slice(0, payload_byte_length);
let rest2 : Uint8Array = rest.slice(payload_byte_length);
return dr(payload, rest2);
}
// if the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
// bytestring. the byte length of bytestring is FirstByte - 183. Then pull
// out the actual data
else if
(first_byte <= 191) {
let byte_length_of_byte_length : number = first_byte - 183;
let bytes_of_byte_length : Uint8Array = rest.slice(0, byte_length_of_byte_length);
let byte_length : number = bytes_to_number(bytes_of_byte_length);
let bytes : Uint8Array = rest.slice(byte_length_of_byte_length,
byte_length + byte_length_of_byte_length);
let rest2 : Uint8Array = rest.slice(byte_length + byte_length_of_byte_length);
return dr(bytes, rest2);
}
// If the first byte is between 192 and 247 = 192 + 55, it is a list. The
// byte length of the list-payload is FirstByte - 192. Then the list
// payload, which needs to be decoded on its own.
else if
(first_byte <= 247) {
let byte_length_of_list : number = first_byte - 192;
let list_payload : Uint8Array = rest.slice(0, byte_length_of_list);
let list : Array<decoded_data> = decode_list(list_payload);
let rest2 : Uint8Array = rest.slice(byte_length_of_list);
return dr(list, rest2);
}
// If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a
// list. The byte length of the byte length of the list-payload is
// FirstByte - 247. Then the byte length of the list. Then the list
// payload, which needs to be decoded on its own.
else {
let byte_length_of_byte_length : number = first_byte - 247;
let bytes_of_byte_length : Uint8Array = rest.slice(0, byte_length_of_byte_length);
let byte_length : number = bytes_to_number(bytes_of_byte_length);
let list_bytes : Uint8Array = rest.slice(byte_length_of_byte_length,
byte_length + byte_length_of_byte_length);
let list : Array<decoded_data> = decode_list(list_bytes);
let rest2 : Uint8Array = rest.slice(byte_length + byte_length_of_byte_length);
return dr(list, rest2);
}
}
/**
* Decode a list payload (non-prefixed) into an `Array<decoded_data>`.
*
* Repeatedly decodes an element off the list until remainder is empty.
*
* @internal
*/
function
decode_list
(bytes: Uint8Array)
: Array<decoded_data>
{
let arr : Array<decoded_data> = [];
while (bytes.length > 0) {
// grab an item off the bytes
let {decoded_data, remainder} = decode(bytes);
// push it
arr.push(decoded_data);
// update bytes
bytes = remainder;
}
return arr;
}
/**
* Convert bytestring to number
*
* @internal
*/
function
bytes_to_number
(bytes: Uint8Array)
: number
{
let n : number = 0;
for (let b of bytes)
{
n <<= 8;
n += b;
}
return n;
}
/**
* Make a `decode_result` containing the two arguments
*
* @internal
*/
function
dr
(x : decoded_data,
y : Uint8Array)
: decode_result
{
return {decoded_data : x,
remainder : y};
}
//=============================================================================
//=============================================================================
// ENCODING
//=============================================================================
//=============================================================================
/**
* Encode some decoded data
*/
function
encode
(data: decoded_data)
: Uint8Array
{
// is it an array or data
if
(is_binary(data)) {
return encode_binary(data as Uint8Array);
}
else if
(is_list(data)) {
return encode_list(data as Array<decoded_data>);
}
else {
throw new Error('encode told to encode something that is not an array or a binary: ' + data);
}
}
/**
* Encode a binary into RLP
*
* @internal
*/
function
encode_binary
(bytes: Uint8Array)
: Uint8Array
{
let len: number = bytes.length;
// single byte case when the byte is between 0..127
// result is the bytestring containing the byte itself
if
((len === 1) &&
(bytes[0] <= 127)){
return bytes;
}
// if the bytestring is 0..55 bytes long, the first byte in the result is
// 128 + Length, the rest of the result bytestring is the input string
else if
(len <= 55) {
// construct the result
// <<128 + Len, Bytes/binary>>
let result : Uint8Array = new Uint8Array(len + 1);
// first byte is 128 + length
result[0] = 128 + len;
// copy input bytes into result
for (let input_idx0 = 0;
input_idx0 < len;
input_idx0++)
{
let result_idx0 : number = input_idx0 + 1;
result[result_idx0] = bytes[input_idx0];
}
return result;
}
// if the bytestring is more than 55 bytes long, the first byte is 183 +
// ByteLengthOfByteLength, followed by the byte length, followed by the
// bytes
else {
let len_bytes : Uint8Array = encode_unsigned(len);
let len_bytes_length : number = len_bytes.length;
// total array is
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
let result : Uint8Array = new Uint8Array(1 + len_bytes_length + len);
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
result[0] = 183 + len_bytes_length;
// copy len_bytes into result
for (let len_bytes_idx0 = 0;
len_bytes_idx0 < len_bytes_length;
len_bytes_idx0++)
{
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0: number = len_bytes_idx0 + 1;
result[result_idx0] = len_bytes[len_bytes_idx0];
}
// copy original byte array into result
for (let input_idx0 = 0;
input_idx0 < len;
input_idx0++)
{
// <<183 + len_bytes_length, len_bytes, Bytes>>
// 1 byte len_bytes_length bytes len bytes
//
// ^ YOU ARE HERE
let result_idx0: number = input_idx0 + (1 + len_bytes_length);
result[result_idx0] = bytes[input_idx0];
}
// finally, return the result
return result;
}
}
/**
* Encode a list
*
* @internal
*/
function
encode_list
(list: Array<decoded_data>)
: Uint8Array
{
// first encode every element in the list, then branch
let payloads : Array<Uint8Array> = list.map(encode);
let payload : Uint8Array = uint8arr_concat(payloads);
let payload_size : number = payload.length;
// if the payload size is in 0..55, then the first byte is 192 + payload
// size, followed by the payload
if
(payload_size <= 55) {
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
let result : Uint8Array = new Uint8Array(1 + payload_size);
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
result[0] = 192 + payload_size;
// copy the rest of the payload into result
for (let payload_idx0 = 0;
payload_idx0 < payload_size;
payload_idx0++)
{
// result: <<(192 + Payload_Size), Payload/binary >>;
// 1 byte payload_size bytes
//
// ^ YOU ARE HERE
let result_idx0: number = payload_idx0 + 1;
result[result_idx0] = payload[payload_idx0];
}
return result;
}
// if the payload size is greater than 55, the first byte is 247 +
// size_of_payload_size, followed by the payload size, followed by the
// payload
else {
// compute the payload size size
let payload_size_bytes : Uint8Array = encode_unsigned(payload_size);
let payload_size_size : number = payload_size_bytes.length;
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
let result: Uint8Array = new Uint8Array(1 + payload_size_size + payload_size);
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// first byte is 247 + payload_size_size
result[0] = 247 + payload_size_size;
// copy the payload_size_bytes into result
for (let psb_idx0 = 0;
psb_idx0 < payload_size_size;
psb_idx0++)
{
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 byte for this
let result_idx0 : number = psb_idx0 + 1;
result[result_idx0] = payload_size_bytes[psb_idx0];
}
// copy the payload into result
for (let pb_idx0 = 0;
pb_idx0 < payload_size;
pb_idx0++)
{
// result = <<(247 + payload_size_size), payload_size_bytes/binary, payload/binary >>
// 1 byte payload_size_size bytes payload_size bytes
//
// ^ YOU ARE HERE
// offset is 1 + payload_size_size bytes for this
let result_idx0 : number = pb_idx0 + (1 + payload_size_size);
result[result_idx0] = payload[pb_idx0];
}
// finally, return result
return result;
}
}
/**
* Encode a number as a bytestring
*
* Not for general use, this assumes the input number is greater than 55
*
* @internal
*/
function
encode_unsigned
(n: number)
: Uint8Array
{
// can assume that n initially is greater than 55
// have to encode it in reverse order
let arr : Array<number> = [];
// repeated division by 256 with remainder
//
// example: suppose bign was 1234 and we were dividing by 10
//
// iteration 0:
// bign = 1234
// arr = []
// ---
// bign / 10 = 123
// bign % 10 = 4
// ---
// bign = 123
// arr = [4]
//
// iteration 1:
// bign = 123
// arr = [4]
// ---
// bign / 10 = 12
// bign % 10 = 3
// ---
// bign = 12
// arr = [4, 3]
//
// iteration 2:
// bign = 12
// arr = [4, 3]
// ---
// bign / 10 = 1
// bign % 10 = 2
// ---
// bign = 1
// arr = [4, 3, 2]
//
// iteration 3:
// bign = 1
// arr = [4, 3, 2]
// ---
// bign / 10 = 0
// bign % 10 = 1
// ---
// bign = 0
// arr = [4, 3, 2, 1]
//
// iteration 4:
// bign = 0
// arr = [4, 3, 2, 1]
// ---
// DONE
while (n > 0) {
arr.push(n % 256);
n >>= 8;
}
// reverse and make into Uint8Array
arr.reverse();
return new Uint8Array(arr);
}
/**
* concatenate an array of `Uint8Array`s into a single Uint8Array
*
* @internal
*/
function
uint8arr_concat
(arrs: Array<Uint8Array>)
: Uint8Array
{
// total length
let total_len = arrs.reduce(// fold
function (acc_len: number, this_uint8array: Uint8Array): number {
return acc_len + this_uint8array.length;
},
// initial accumulator
0);
// start up result
let result : Uint8Array = new Uint8Array(total_len);
let result_idx0 : number = 0;
// concatenate
for (let this_uint8arr of arrs) {
// bytewise copy of this uint8array
for (let this_uint8arr_idx0 = 0;
this_uint8arr_idx0 < this_uint8arr.length;
this_uint8arr_idx0++)
{
// copy byte and increment result idx0
result[result_idx0] = this_uint8arr[this_uint8arr_idx0];
result_idx0++;
}
}
return result;
}
/**
* returns true if input is `instanceof Uint8Array`
*
* @internal
*/
function
is_binary
(x: any)
: boolean
{
return (x instanceof Uint8Array);
}
/**
* returns true if input is `instanceof Array`
*
* @internal
*/
function
is_list
(x: any)
: boolean
{
return (x instanceof Array);
}
@@ -0,0 +1,112 @@
/**
* "Safe" error handling
*
* The idea here is that there are situations where it is known
*
* ```typescript
* type Safe<ok_t, err_t>
* = Ok<ok_t>
* | Error<err_t>;
*
* type Ok<ok_t>
* = {ok : true,
* result : ok_t};
*
* type Error<err_t>
* = {ok : false,
* error : err_t};
* ```
*
* 1. a given function call is likely to fail
* 2. the likely errors can be enumerated
*
* These are called "positive errors". An example would be a page script
* asking a browser wallet extension to sign a transaction. The following
* errors, among others, are likely:
*
* - the user does not have a wallet installed
* - the user has a wallet but does not have the correct signing key
* - the user rejects the transaction
* - the sign request timed out
*
* These errors should not generate exceptions, as these behaviors are to some
* degree "expected".
*/
export {
Safe,
Ok,
Error,
ok,
error,
unsafe
}
/**
* Type that catches positive errors
*/
type Safe<ok_t, err_t>
= Ok<ok_t>
| Error<err_t>;
/**
* Ok type
*/
type Ok<ok_t>
= {ok : true,
result : ok_t};
/**
* Error type
*/
type Error<err_t>
= {ok : false,
error : err_t};
/**
* Constructs an `Ok` value from a pure value
*/
function
ok
<ok_t>
(x : ok_t)
: Ok<ok_t>
{
return {ok: true, result: x};
}
/**
* Constructs an `Error` value from a pure value
*/
function
error
<err_t>
(x: err_t)
: Error<err_t>
{
return {ok: false, error: x};
}
/**
* Takes a `Safe` value, if `ok`, returns the `ok_t`, or if an error throws the
* `err_t`
*/
function
unsafe
<ok_t, err_t>
(x: Safe<ok_t, err_t>)
: ok_t
{
if (x.ok)
return x.result;
else
throw x.error;
}
File diff suppressed because it is too large Load Diff
+2
View File
@@ -0,0 +1,2 @@
b58_cases_2.eterms
b58_cases_3.eterms
+234
View File
@@ -0,0 +1,234 @@
-module(b58).
-export([enc/1, dec/1]).
%-mode(compile).
%-spec enc(binary()) -> string().
%% https://digitalbazaar.github.io/base58-spec/#encode
main([]) ->
{ok, Cases} = file:consult("b58_cases_3.eterms"),
test_cases(Cases).
test_cases([{{encoded, E}, {decoded, D}} | Rest]) ->
EncodeOk = E =:= enc(D),
DecodeOk = D =:= dec(E),
ok =
case EncodeOk of
true -> ok;
false -> io:format("===============================~n"
"YOU ARE A FAILURE TO ENCODE~n"
"===============================~n"
"decoded : ~tw~n"
"expected : ~ts~n"
"actual : ~ts~n~n",
[D, E, enc(D)])
end,
ok =
case DecodeOk of
true -> ok;
false -> io:format("===============================~n"
"YOU ARE A FAILURE TO DECODE~n"
"===============================~n"
"encoded : ~ts~n"
"expected : ~tw~n"
"actual : ~tw~n~n",
[E, D, dec(E)])
end,
test_cases(Rest);
test_cases([]) ->
ok.
% this was much clearer: https://www.youtube.com/watch?v=GedV3S9X89c
-spec enc(Bytes) -> Base58
when Bytes :: binary(),
Base58 :: string().
enc(Bytes) ->
% grab leading 0s
{NumLeadingZeros, Rest} = split_zeros(Bytes, 0),
NBitsInRest = bit_size(Rest),
<<RestBigNum:NBitsInRest>> = Rest,
ZerosBase58 = [$1 || _ <- lists:seq(1, NumLeadingZeros)],
RestBase58 = enc(RestBigNum, []),
ZerosBase58 ++ RestBase58.
-spec split_zeros(Bytes, InitZeros) -> {NumLeadingZeros, Rest}
when Bytes :: binary(),
InitZeros :: integer(),
NumLeadingZeros :: binary(),
Rest :: binary().
split_zeros(<<0:8, Rest/binary>>, NumZerosAcc) ->
NewNumZerosAcc = NumZerosAcc + 1,
split_zeros(Rest, NewNumZerosAcc);
split_zeros(Rest, NumZerosAcc) ->
{NumZerosAcc, Rest}.
-spec enc(BytesBigNum, Base58Acc) -> Base58
when BytesBigNum :: integer(),
Base58Acc :: [0..57],
Base58 :: string().
enc(0, Acc) ->
lists:map(fun int2char/1, Acc);
enc(BitNum, Acc) ->
Q = BitNum div 58,
R = BitNum rem 58,
enc(Q, [R | Acc]).
-spec dec(Base58) -> DecodedBytes
when Base58 :: string(),
DecodedBytes :: binary().
dec(Str) ->
% the number of leading 1s tells us the number of leading zeros
{NumLeadingZeros, RestStr} = split_ones(Str, 0),
LeadingZeros = << <<0>> || _ <- lists:seq(1, NumLeadingZeros) >>,
RestNs = lists:map(fun char2int/1, RestStr),
RestBytes = dec(RestNs, 0),
<<LeadingZeros/binary, RestBytes/binary>>.
split_ones([$1 | Rest], NOnes) ->
split_ones(Rest, NOnes + 1);
split_ones(B58Str, NOnes) ->
{NOnes, B58Str}.
dec([N | Ns], Acc) ->
NewAcc = (Acc*58) + N,
dec(Ns, NewAcc);
dec([], FinalAccN) ->
bignum_to_binary_bige(FinalAccN, <<>>).
bignum_to_binary_bige(0, Acc) ->
Acc;
bignum_to_binary_bige(N, Acc) ->
Q = N div 256,
R = N rem 256,
NewAcc = <<R, Acc/binary>>,
bignum_to_binary_bige(Q, NewAcc).
int2char( 0) -> $1;
int2char( 1) -> $2;
int2char( 2) -> $3;
int2char( 3) -> $4;
int2char( 4) -> $5;
int2char( 5) -> $6;
int2char( 6) -> $7;
int2char( 7) -> $8;
int2char( 8) -> $9;
int2char( 9) -> $A;
int2char(10) -> $B;
int2char(11) -> $C;
int2char(12) -> $D;
int2char(13) -> $E;
int2char(14) -> $F;
int2char(15) -> $G;
int2char(16) -> $H;
int2char(17) -> $J;
int2char(18) -> $K;
int2char(19) -> $L;
int2char(20) -> $M;
int2char(21) -> $N;
int2char(22) -> $P;
int2char(23) -> $Q;
int2char(24) -> $R;
int2char(25) -> $S;
int2char(26) -> $T;
int2char(27) -> $U;
int2char(28) -> $V;
int2char(29) -> $W;
int2char(30) -> $X;
int2char(31) -> $Y;
int2char(32) -> $Z;
int2char(33) -> $a;
int2char(34) -> $b;
int2char(35) -> $c;
int2char(36) -> $d;
int2char(37) -> $e;
int2char(38) -> $f;
int2char(39) -> $g;
int2char(40) -> $h;
int2char(41) -> $i;
int2char(42) -> $j;
int2char(43) -> $k;
int2char(44) -> $m;
int2char(45) -> $n;
int2char(46) -> $o;
int2char(47) -> $p;
int2char(48) -> $q;
int2char(49) -> $r;
int2char(50) -> $s;
int2char(51) -> $t;
int2char(52) -> $u;
int2char(53) -> $v;
int2char(54) -> $w;
int2char(55) -> $x;
int2char(56) -> $y;
int2char(57) -> $z.
char2int($1) -> 0;
char2int($2) -> 1;
char2int($3) -> 2;
char2int($4) -> 3;
char2int($5) -> 4;
char2int($6) -> 5;
char2int($7) -> 6;
char2int($8) -> 7;
char2int($9) -> 8;
char2int($A) -> 9;
char2int($B) -> 10;
char2int($C) -> 11;
char2int($D) -> 12;
char2int($E) -> 13;
char2int($F) -> 14;
char2int($G) -> 15;
char2int($H) -> 16;
char2int($J) -> 17;
char2int($K) -> 18;
char2int($L) -> 19;
char2int($M) -> 20;
char2int($N) -> 21;
char2int($P) -> 22;
char2int($Q) -> 23;
char2int($R) -> 24;
char2int($S) -> 25;
char2int($T) -> 26;
char2int($U) -> 27;
char2int($V) -> 28;
char2int($W) -> 29;
char2int($X) -> 30;
char2int($Y) -> 31;
char2int($Z) -> 32;
char2int($a) -> 33;
char2int($b) -> 34;
char2int($c) -> 35;
char2int($d) -> 36;
char2int($e) -> 37;
char2int($f) -> 38;
char2int($g) -> 39;
char2int($h) -> 40;
char2int($i) -> 41;
char2int($j) -> 42;
char2int($k) -> 43;
char2int($m) -> 44;
char2int($n) -> 45;
char2int($o) -> 46;
char2int($p) -> 47;
char2int($q) -> 48;
char2int($r) -> 49;
char2int($s) -> 50;
char2int($t) -> 51;
char2int($u) -> 52;
char2int($v) -> 53;
char2int($w) -> 54;
char2int($x) -> 55;
char2int($y) -> 56;
char2int($z) -> 57.
+204
View File
@@ -0,0 +1,204 @@
#!/usr/bin/env python3
'''
generate base58 tests
really checking to see if my code matches the python base58 package which has
159 stars on github
'''
import base58 as b
import random as r
###########################
### simple cases (single bytes, two bytes, 10 bytes of same byte)
###########################
## 1 byte cases
def single_byte_case(byte):
'''
return the encode/decode pair corresponding to a single byte
'''
decoded_bytes = bytes([byte])
encoded_bytes = b.b58encode(decoded_bytes)
return {'db': decoded_bytes, 'eb': encoded_bytes}
def single_byte_cases():
'''
return the encode/decode pairs corresponding to every single byte case for
byte between 0 and 255
'''
# range(0, 256) = [0, 256) intersect Z
return [single_byte_case(n) for n in range(0, 256)]
## too many of these
### 2 byte cases
#
#def two_bytes(n):
# '''
# return the two bytes corresponding to <<n // 256, n % 256>>
# '''
# return bytes([n // 256, n % 256])
#
#
#def two_byte_case(n):
# '''
# return the encode/decode pair corresponding to <<n // 256, n % 256>>
# '''
# decoded_bytes = two_bytes(n)
# encoded_bytes = b.b58encode(decoded_bytes)
# return {'db': decoded_bytes, 'eb': encoded_bytes}
#
#
#def two_byte_cases():
# '''
# return the encode/decode pairs for each two bytes <<n:8, m:8>>
# '''
# return [two_byte_case(n) for n in range(0, 256*256)]
## 10 byte cases
def ten_bytes(byte):
'''
return the ten byte string which is byte repeated 10 times
'''
return bytes([byte for _ in range(10)])
def ten_byte_case(n):
'''
return the encode/decode pair corresponding to <<n>> * 10
'''
decoded_bytes = ten_bytes(n)
encoded_bytes = b.b58encode(decoded_bytes)
return {'db': decoded_bytes, 'eb': encoded_bytes}
def ten_byte_cases():
'''
return the encode/decode pairs for each string <<n:8>> * 10
'''
return [ten_byte_case(n) for n in range(0, 256)]
## all simple cases in one function
def simple_cases():
return single_byte_cases() + ten_byte_cases()
###########################
### case generation
###########################
def random_bytes():
'''
return between 0 and 999 random bytes
'''
# randint is between [left, right]
len = r.randint(0, 999)
#len = 10
acc = []
for _ in range(len):
# randint is between [left, right]
randbyte = r.randint(0, 255)
acc.append(randbyte)
return bytes(acc)
def case():
'''
return a random encode/decode pair
'''
decoded_bytes = random_bytes()
encoded_bytes = b.b58encode(decoded_bytes)
return {'db': decoded_bytes, 'eb': encoded_bytes}
def cases(n):
'''
return n randomly generated encode/decode pairs
'''
return [case() for _ in range(n)]
###########################
### js formatting
###########################
def format_decoded_js(decoded_bytes):
'''
format the bytes as a js Uint8Array
'''
return f'new Uint8Array({list(decoded_bytes)})'
def format_encoded_js(encoded_bytes):
s = str(encoded_bytes)[2:-1]
return '"' + s + '"'
def format_case_js(case):
decoded_bytes = case['db']
encoded_bytes = case['eb']
db_js = format_decoded_js(decoded_bytes)
eb_js = format_encoded_js(encoded_bytes)
return '{encoded: ' + eb_js + ',\n ' + 'decoded: ' + db_js + '},\n '
def format_cases_js(cases):
s = '['
for case in cases:
s += format_case_js(case)
# each case adds ",\n " so remove that
# >>> "12345678"[:-3]
# '12345'
s = s[:-3]
s += ']'
return s
###########################
### erlang formatting
###########################
def format_decoded_erl(decoded_bytes):
'''
format the bytes as a erl Uint8Array
'''
bytes_list = list(decoded_bytes)
byteslstr = f'{bytes_list}'
return '<<' + byteslstr[1:-1] + '>>'
def format_encoded_erl(encoded_bytes):
s = str(encoded_bytes)[2:-1]
return '"' + s + '"'
def format_case_erl(case):
decoded_bytes = case['db']
encoded_bytes = case['eb']
db_erl = format_decoded_erl(decoded_bytes)
eb_erl = format_encoded_erl(encoded_bytes)
return '{{encoded, ' + eb_erl + '},\n ' + '{decoded, ' + db_erl + '}}.\n'
def format_cases_erl(cases):
s = ''
for case in cases:
s += format_case_erl(case)
return s
###########################
### main
###########################
def main():
c = simple_cases() + cases(50)
print(format_cases_js(c))
#print(format_cases_erl(c))
if __name__ == '__main__':
main()
+236
View File
@@ -0,0 +1,236 @@
%-module(b58).
%-export([enc/1, dec/1]).
-mode(compile).
%-spec enc(binary()) -> string().
%% https://digitalbazaar.github.io/base58-spec/#encode
main([]) ->
{ok, Cases} = file:consult("b58_cases_3.eterms"),
DoCase =
fun(Case) ->
spawn(fun() -> test_case(Case) end)
end,
lists:foreach(DoCase, Cases).
test_case({{encoded, E}, {decoded, D}}) ->
EncodeOk = E =:= enc(D),
DecodeOk = D =:= dec(E),
ok =
case EncodeOk of
true -> ok;
false -> io:format("===============================~n"
"YOU ARE A FAILURE TO ENCODE~n"
"===============================~n"
"decoded : ~tw~n"
"expected : ~ts~n"
"actual : ~ts~n~n",
[D, E, enc(D)])
end,
ok =
case DecodeOk of
true -> ok;
false -> io:format("===============================~n"
"YOU ARE A FAILURE TO DECODE~n"
"===============================~n"
"encoded : ~ts~n"
"expected : ~tw~n"
"actual : ~tw~n~n",
[E, D, dec(E)])
end,
ok.
% this was much clearer: https://www.youtube.com/watch?v=GedV3S9X89c
-spec enc(Bytes) -> Base58
when Bytes :: binary(),
Base58 :: string().
enc(Bytes) ->
% grab leading 0s
{NumLeadingZeros, Rest} = split_zeros(Bytes, 0),
NBitsInRest = bit_size(Rest),
<<RestBigNum:NBitsInRest>> = Rest,
ZerosBase58 = [$1 || _ <- lists:seq(1, NumLeadingZeros)],
RestBase58 = enc(RestBigNum, []),
ZerosBase58 ++ RestBase58.
-spec split_zeros(Bytes, InitZeros) -> {NumLeadingZeros, Rest}
when Bytes :: binary(),
InitZeros :: integer(),
NumLeadingZeros :: binary(),
Rest :: binary().
split_zeros(<<0:8, Rest/binary>>, NumZerosAcc) ->
NewNumZerosAcc = NumZerosAcc + 1,
split_zeros(Rest, NewNumZerosAcc);
split_zeros(Rest, NumZerosAcc) ->
{NumZerosAcc, Rest}.
-spec enc(BytesBigNum, Base58Acc) -> Base58
when BytesBigNum :: integer(),
Base58Acc :: [0..57],
Base58 :: string().
enc(0, Acc) ->
lists:map(fun int2char/1, Acc);
enc(BitNum, Acc) ->
Q = BitNum div 58,
R = BitNum rem 58,
enc(Q, [R | Acc]).
-spec dec(Base58) -> DecodedBytes
when Base58 :: string(),
DecodedBytes :: binary().
dec(Str) ->
% the number of leading 1s tells us the number of leading zeros
{NumLeadingZeros, RestStr} = split_ones(Str, 0),
LeadingZeros = << <<0>> || _ <- lists:seq(1, NumLeadingZeros) >>,
RestNs = lists:map(fun char2int/1, RestStr),
RestBytes = dec(RestNs, 0),
<<LeadingZeros/binary, RestBytes/binary>>.
split_ones([$1 | Rest], NOnes) ->
split_ones(Rest, NOnes + 1);
split_ones(B58Str, NOnes) ->
{NOnes, B58Str}.
dec([N | Ns], Acc) ->
NewAcc = (Acc*58) + N,
dec(Ns, NewAcc);
dec([], FinalAccN) ->
bignum_to_binary_bige(FinalAccN, <<>>).
bignum_to_binary_bige(0, Acc) ->
Acc;
bignum_to_binary_bige(N, Acc) ->
Q = N div 256,
R = N rem 256,
NewAcc = <<R, Acc/binary>>,
bignum_to_binary_bige(Q, NewAcc).
int2char( 0) -> $1;
int2char( 1) -> $2;
int2char( 2) -> $3;
int2char( 3) -> $4;
int2char( 4) -> $5;
int2char( 5) -> $6;
int2char( 6) -> $7;
int2char( 7) -> $8;
int2char( 8) -> $9;
int2char( 9) -> $A;
int2char(10) -> $B;
int2char(11) -> $C;
int2char(12) -> $D;
int2char(13) -> $E;
int2char(14) -> $F;
int2char(15) -> $G;
int2char(16) -> $H;
int2char(17) -> $J;
int2char(18) -> $K;
int2char(19) -> $L;
int2char(20) -> $M;
int2char(21) -> $N;
int2char(22) -> $P;
int2char(23) -> $Q;
int2char(24) -> $R;
int2char(25) -> $S;
int2char(26) -> $T;
int2char(27) -> $U;
int2char(28) -> $V;
int2char(29) -> $W;
int2char(30) -> $X;
int2char(31) -> $Y;
int2char(32) -> $Z;
int2char(33) -> $a;
int2char(34) -> $b;
int2char(35) -> $c;
int2char(36) -> $d;
int2char(37) -> $e;
int2char(38) -> $f;
int2char(39) -> $g;
int2char(40) -> $h;
int2char(41) -> $i;
int2char(42) -> $j;
int2char(43) -> $k;
int2char(44) -> $m;
int2char(45) -> $n;
int2char(46) -> $o;
int2char(47) -> $p;
int2char(48) -> $q;
int2char(49) -> $r;
int2char(50) -> $s;
int2char(51) -> $t;
int2char(52) -> $u;
int2char(53) -> $v;
int2char(54) -> $w;
int2char(55) -> $x;
int2char(56) -> $y;
int2char(57) -> $z.
char2int($1) -> 0;
char2int($2) -> 1;
char2int($3) -> 2;
char2int($4) -> 3;
char2int($5) -> 4;
char2int($6) -> 5;
char2int($7) -> 6;
char2int($8) -> 7;
char2int($9) -> 8;
char2int($A) -> 9;
char2int($B) -> 10;
char2int($C) -> 11;
char2int($D) -> 12;
char2int($E) -> 13;
char2int($F) -> 14;
char2int($G) -> 15;
char2int($H) -> 16;
char2int($J) -> 17;
char2int($K) -> 18;
char2int($L) -> 19;
char2int($M) -> 20;
char2int($N) -> 21;
char2int($P) -> 22;
char2int($Q) -> 23;
char2int($R) -> 24;
char2int($S) -> 25;
char2int($T) -> 26;
char2int($U) -> 27;
char2int($V) -> 28;
char2int($W) -> 29;
char2int($X) -> 30;
char2int($Y) -> 31;
char2int($Z) -> 32;
char2int($a) -> 33;
char2int($b) -> 34;
char2int($c) -> 35;
char2int($d) -> 36;
char2int($e) -> 37;
char2int($f) -> 38;
char2int($g) -> 39;
char2int($h) -> 40;
char2int($i) -> 41;
char2int($j) -> 42;
char2int($k) -> 43;
char2int($m) -> 44;
char2int($n) -> 45;
char2int($o) -> 46;
char2int($p) -> 47;
char2int($q) -> 48;
char2int($r) -> 49;
char2int($s) -> 50;
char2int($t) -> 51;
char2int($u) -> 52;
char2int($v) -> 53;
char2int($w) -> 54;
char2int($x) -> 55;
char2int($y) -> 56;
char2int($z) -> 57.
+200
View File
@@ -0,0 +1,200 @@
[{encoded: "3rHNek8y9QUCJrDKyLQZep9P8SZp1W41UaccqnjT6VR2Ydn3LbdraAKMsUyvpLvMvdYrQ8s6hLMrJMwpzUyzt6CrAM6Jkk4wkHuNnLQ3wAg9KQTEphUBzULBd39eBdrmDioASsu3PFits2JW36rjvb1fmRYEYRVtmw2A2uqdJJ6b1vaz57XhCUFFSD9f8ALRL3RMqkibs6K2d3kPxmB6xNy8mh9C7ueeBqkntAB7318UVhmipoVTb2539hmbw8wAZdM5i3TVwBftjuMHVw4eLTx2hbrwWvcPMmHiAKMi8yB6LRvuSETb",
decoded: new Uint8Array([240, 174, 25, 146, 178, 1, 65, 114, 78, 167, 214, 199, 238, 215, 66, 181, 153, 16, 248, 83, 206, 238, 116, 78, 12, 151, 170, 44, 25, 232, 152, 58, 207, 90, 76, 167, 186, 226, 13, 74, 164, 39, 238, 215, 144, 27, 91, 22, 166, 121, 78, 103, 201, 14, 18, 69, 67, 11, 65, 107, 243, 98, 174, 139, 4, 99, 146, 130, 22, 158, 204, 209, 50, 167, 201, 83, 251, 65, 11, 49, 116, 156, 140, 55, 242, 205, 134, 235, 79, 240, 125, 88, 248, 1, 242, 212, 7, 26, 86, 45, 169, 93, 24, 169, 209, 232, 159, 218, 242, 114, 167, 192, 245, 12, 41, 211, 174, 233, 210, 226, 200, 162, 89, 57, 31, 17, 51, 43, 98, 216, 20, 14, 19, 99, 167, 138, 90, 69, 19, 58, 0, 90, 226, 117, 26, 30, 223, 173, 147, 212, 39, 90, 174, 93, 239, 59, 125, 120, 187, 36, 84, 22, 24, 91, 240, 156, 199, 238, 207, 47, 63, 24, 187, 221, 18, 99, 117, 59, 219, 52, 191, 224, 21, 140, 224, 55, 216, 201, 146, 93, 43, 14, 111, 23, 246, 231, 232, 145, 54, 81, 87, 43, 197, 210, 122, 56, 155, 69, 153, 98, 171, 30, 180, 131, 90, 241, 236, 175, 105, 172, 83, 183, 98, 142, 162])},
{encoded: "EvQoY1tY3UrAMevLxXbYiURyDmMTtCJWiSSbYGmssizFcF7tU4AD86RLiYYHm8okU5ALUE1uz3DJBDKXeJ2psaBsjWfsuR2tVi9qdtey4jwd6WwNZ9wAkCwNFTyWZA4ZGgemyk84FTGndrSE4t3gEGTBBFLAQQU4bZCdJST125sTYhPYLmXqDyJyK47SHpoCMVNFdTBZG5ryBXZh5wR8jvgXbiZHn5hGiYpypcUM87VFqfFpSo6eqnmYJiiGzADfja5cRKtR8j8FUx9LeELYq6JH14rowwd51XHJgcKnL4RF1TLqZhjucw7yzaoyx8SzQLPN4Pj1YvWsyvAVBuA81iTf1jzbrR12aQQGwUmPcopgDnTMYLUuDFHsHZosTF11X9SDEJyhTPEct6DLkKtrFfvwR54p5Mf66WvSUTKqdFH1TWpd64nSeHRJSGBbXEvCRoxcwMaSHZTXZqFRRLySVZ8Brd1htTm7o7936Am1VjerWtrTahDz97phqVFp9strF1kpGuCukYTEoXSLtT9T8BPrHLSeysR4npPsLwPRGire9KNzmHupAtAunsS5KA895zkqkxmztLTy5JxeoQ5ekSbZQDrU5Y3ifUGMspdN41GWWbyyTa9KcoFQm6oEAvL15FKTDzPJ1CXzGbLCARkapa3hCBgm7JCkE6ifwmpCroQsieHdFXWbgy1icPJEAex5bdtW2P4mbPeRdm3jXw2HW9znw4nQiqWy2oXpHAGPGmKqhnPN6vsJ9s9mCGXujCM3donsyw8wUDVKfag3P1gB1EwPSeHuaAzfrgArAV9vNmqV1jdEVFEPcWgtqM1ZdSPX34XkF2aQBFQMfPpjFhKjTRAPh8YtaWZ1aaUFC8kEbyyYdQYUpZoWMc1uxFgFvwjTzie8SuJh9rgbKpaUYp7Nn3pKEmpwFF3YyxUzkt5JQjKZfiUKuVdQ1yKWQSzNmD5Wfekxo2Hnhuk8QuKuosxTxnmoeVz3dC8Qq4j7UQoHtf3wmMVdNuHrijhYspwEDX1HgJpiUF4QLxWwkHEUxv2HN4QELNgjqMbbdYwmfS1wX6s5F9UfAJkGf1wd2KZ",
decoded: new Uint8Array([70, 66, 87, 43, 39, 149, 226, 198, 195, 32, 101, 145, 214, 2, 43, 224, 171, 114, 154, 127, 192, 232, 253, 174, 181, 49, 174, 61, 240, 86, 203, 65, 78, 244, 255, 30, 161, 156, 93, 165, 169, 147, 219, 103, 139, 29, 254, 81, 224, 90, 104, 29, 129, 75, 252, 182, 38, 203, 235, 87, 206, 51, 116, 191, 55, 35, 104, 231, 6, 50, 28, 205, 60, 145, 195, 158, 231, 176, 35, 136, 138, 154, 139, 173, 160, 176, 48, 111, 3, 86, 120, 240, 83, 242, 254, 250, 106, 203, 71, 219, 165, 190, 138, 0, 93, 230, 222, 120, 97, 166, 195, 182, 125, 81, 86, 230, 90, 86, 219, 114, 176, 201, 9, 115, 36, 62, 143, 20, 88, 253, 36, 215, 108, 9, 12, 191, 73, 48, 227, 238, 197, 110, 243, 185, 188, 115, 175, 135, 140, 10, 113, 39, 48, 2, 9, 60, 239, 151, 143, 93, 9, 215, 119, 227, 106, 254, 82, 172, 116, 181, 31, 105, 75, 37, 64, 181, 215, 92, 5, 96, 170, 93, 112, 11, 212, 7, 10, 86, 106, 104, 120, 195, 190, 125, 148, 209, 37, 224, 167, 248, 64, 84, 111, 54, 252, 128, 108, 244, 98, 14, 17, 205, 161, 217, 123, 14, 2, 91, 148, 171, 45, 196, 236, 41, 10, 80, 190, 148, 238, 72, 65, 15, 63, 42, 174, 72, 190, 100, 250, 249, 183, 17, 69, 63, 55, 62, 245, 101, 13, 240, 200, 183, 203, 86, 94, 71, 103, 23, 115, 91, 121, 136, 21, 85, 34, 70, 213, 167, 108, 50, 19, 8, 230, 224, 196, 107, 125, 209, 140, 92, 86, 253, 131, 70, 139, 164, 160, 38, 222, 108, 89, 20, 85, 35, 94, 102, 159, 140, 199, 232, 13, 91, 86, 148, 171, 149, 179, 42, 70, 1, 101, 184, 116, 127, 252, 71, 201, 175, 122, 216, 98, 1, 216, 41, 228, 251, 0, 87, 252, 210, 155, 16, 115, 212, 188, 66, 43, 214, 195, 138, 203, 69, 143, 225, 185, 1, 91, 141, 210, 127, 127, 4, 179, 211, 31, 86, 60, 109, 54, 106, 32, 244, 178, 239, 80, 206, 19, 250, 86, 219, 133, 86, 132, 42, 232, 158, 252, 154, 220, 132, 238, 86, 118, 225, 134, 181, 11, 234, 141, 253, 107, 188, 161, 58, 132, 156, 105, 225, 88, 102, 36, 129, 168, 117, 126, 171, 150, 53, 136, 118, 121, 239, 239, 228, 233, 67, 216, 242, 108, 148, 134, 165, 172, 85, 97, 37, 183, 120, 62, 22, 45, 188, 128, 117, 28, 159, 94, 232, 54, 137, 187, 55, 86, 16, 234, 19, 247, 37, 188, 71, 47, 136, 86, 238, 153, 25, 14, 44, 25, 159, 219, 102, 96, 183, 237, 145, 252, 82, 141, 220, 150, 71, 47, 238, 86, 35, 193, 2, 222, 246, 244, 245, 189, 25, 248, 99, 246, 66, 222, 39, 123, 19, 84, 178, 5, 2, 120, 152, 232, 207, 1, 232, 102, 40, 40, 100, 183, 220, 135, 153, 245, 49, 50, 152, 214, 69, 47, 215, 150, 150, 80, 31, 57, 121, 49, 235, 236, 34, 237, 211, 23, 188, 116, 35, 120, 185, 94, 69, 138, 199, 179, 96, 220, 176, 67, 142, 13, 185, 198, 139, 3, 161, 203, 193, 163, 92, 250, 166, 162, 71, 243, 95, 112, 174, 13, 86, 12, 237, 44, 94, 0, 183, 175, 120, 123, 52, 215, 238, 36, 28, 208, 164, 237, 242, 163, 93, 40, 232, 233, 79, 145, 124, 59, 13, 7, 216, 190, 105, 178, 165, 176, 230, 185, 250, 9, 101, 255, 18, 30, 247, 11, 240, 206, 176, 86, 38, 63, 95, 169, 187, 247, 154, 119, 162, 247, 115, 56, 237, 201, 94, 220, 84, 59, 118, 223, 84, 184, 27, 44, 145, 38, 65, 188, 66, 83, 230, 44, 105, 123, 140, 44, 34, 219, 214, 41, 6, 247, 156, 36, 21, 235, 199, 128, 28, 47, 0, 61, 173, 99, 2, 98, 138, 67, 24, 83, 110, 111, 60, 220, 60, 164, 110, 16, 149, 249, 134, 124, 110, 44, 3, 77, 204, 63, 177, 229, 147, 138, 221, 248, 172, 114, 216, 253, 86, 252, 28, 246, 45, 225, 64, 4, 206, 133, 26, 212, 138, 137, 113, 53, 47, 178, 116, 171, 236, 28, 193, 204, 254, 57, 193, 206, 200, 28, 194, 136, 149, 92, 232, 234, 144, 83, 199, 193, 80, 202, 200, 167, 45, 38, 245, 175, 167, 86, 96, 232, 166, 55, 110, 241, 199, 41, 161, 180, 213, 37, 222, 28, 183, 63, 187, 194, 27, 201, 231, 224, 22, 108, 169, 169, 27, 100, 220, 41, 173, 131, 104, 179, 212, 216, 153, 110, 116, 88])},
{encoded: "NBhiHSJQg8qyWuzE9FjfMiGAoh2cNDLq3RYhNzcpVwFj3KqQPt7hmPZYBtZ8KDkca3UZMqLkRCYTALaMBiQhamtqyi2XGmnxV1y9QsmK12SE9PjzgJTPYa6ZHXqrC66FVDYVRSz3VUzVaEK8rFfj7B9J9fRDWsRfrS5oi8kMGbqTJm6N1whSifThAhfJNn",
decoded: new Uint8Array([189, 37, 9, 87, 67, 127, 89, 190, 173, 80, 195, 75, 7, 158, 84, 103, 161, 136, 239, 111, 72, 17, 47, 52, 248, 37, 49, 73, 224, 149, 245, 222, 29, 255, 63, 34, 144, 132, 86, 86, 6, 194, 252, 108, 16, 96, 21, 33, 8, 191, 136, 207, 148, 238, 113, 51, 70, 142, 56, 70, 112, 166, 126, 1, 130, 238, 205, 28, 86, 219, 198, 1, 138, 91, 34, 228, 96, 90, 245, 216, 1, 21, 146, 73, 25, 122, 227, 38, 19, 140, 214, 32, 197, 173, 21, 168, 126, 102, 156, 119, 246, 226, 172, 35, 170, 11, 214, 43, 182, 179, 224, 154, 108, 252, 169, 112, 155, 173, 153, 16, 80, 144, 20, 46, 229, 247, 125, 112, 49, 180, 244, 40, 143, 141, 116, 151, 129, 18, 99])},
{encoded: "Fi2PtGTr7x3Sdmd4Q6zgw8jY3cCLDoYPuptoSozGNgG1Jz1tmj9RjgRXgj1Ct4FhYoFFHgN6xgAHzEq8CrRTsucutuw1cZtg7ea1n2JR6PwYix6kCTymGFgsU4xd8482t2q3asvyWxLWTvUheESMjTq1ZdMbEaq3rfTcWqdRYyyQJmnGVGYQapb7NGq8caeJjcN9x7heGCCwhhtEiAoLBF4uf9EErzLvYQG7dCvBfJygCVrBzBozAzvAmC6zNnFg3HYhCcFbgP1cXcd6ot8S4Uzv5bXFSALxGnYJu56tariJyto28JzLTpAVA7Be113XVtAJRFKEEMqk9TEBT4NoGs3pbPeircLUk6rPdLAUBEHmGMtqcaUKKuUGJA8Q3xHs3nwS971QQHMe5HWet9qGup8AD79qBYfMiK5PkUDwF",
decoded: new Uint8Array([202, 150, 122, 132, 16, 90, 75, 54, 250, 150, 167, 221, 128, 141, 62, 211, 245, 12, 5, 235, 213, 108, 237, 171, 206, 98, 21, 195, 224, 193, 6, 80, 125, 197, 79, 45, 162, 213, 45, 119, 3, 77, 49, 18, 191, 202, 12, 65, 26, 222, 15, 234, 219, 114, 152, 127, 173, 8, 150, 151, 106, 214, 235, 55, 13, 54, 87, 22, 230, 198, 79, 218, 113, 31, 115, 56, 72, 24, 174, 220, 239, 121, 190, 224, 99, 4, 142, 10, 183, 29, 11, 219, 8, 212, 98, 106, 177, 216, 187, 21, 203, 235, 27, 226, 31, 27, 132, 218, 94, 92, 23, 231, 226, 105, 140, 75, 178, 55, 225, 229, 16, 111, 33, 189, 103, 67, 59, 70, 224, 129, 29, 46, 105, 20, 186, 109, 148, 93, 35, 129, 244, 117, 74, 176, 37, 174, 222, 92, 14, 95, 9, 176, 7, 119, 99, 49, 33, 126, 222, 232, 38, 24, 165, 157, 60, 173, 246, 159, 71, 63, 184, 76, 145, 74, 26, 221, 152, 68, 123, 194, 164, 90, 168, 61, 100, 51, 35, 3, 134, 102, 63, 255, 71, 199, 1, 146, 64, 97, 55, 122, 44, 72, 205, 169, 94, 104, 247, 37, 196, 151, 187, 239, 126, 223, 191, 194, 89, 251, 221, 32, 109, 128, 166, 83, 156, 186, 86, 198, 100, 215, 51, 77, 173, 234, 241, 91, 24, 231, 162, 117, 29, 72, 145, 130, 23, 154, 104, 62, 180, 80, 185, 179, 133, 252, 249, 94, 133, 68, 231, 21, 110, 222, 89, 37, 60, 5, 194, 197, 209, 187, 253, 48, 138, 105, 204, 110, 206, 179, 217, 111, 128, 156, 90, 75, 174, 131, 156, 35, 87, 227, 9, 245, 140, 254, 92, 64, 45, 124, 65, 177, 67, 231, 251, 46, 176, 106, 10, 33, 106, 112, 162])},
{encoded: "fTAFzVPynQGszGEiH92LLj5kea3PvaZssHo23xrwbAHDM4qYvjeNF9NQRYS4UoPkyhxpDS36HNdh5PUiLe4xNnySyvVoK6wiDWVP6YerY6cxUntnjoHieaC6FM2pngHdCK6XVhWXtrBgoayJZwHPmSypZtk8T4S5yAzczpriXuJrpXVWapiT1JyNGkczotBHkrhRCYq8CKHRDAadxHFdEbGv9WDThxt8mdgFpTJAds2mUoGb5onMjofN3d7fePRUZXRLhwrehBrgUcfM9U5xe12AyNXJsTCEzwi5S37AH2b8FDuB8UcuGPRBVGF2txM3YLRmC1afjJgY1iYSsHjVH64vTq1PcoJwk2drDyJwv3Gt3EUgjRjJmDzLSkExEDsP2CJ2FiVcjtugwVFXpfrHxy8HTivGwe7sMtZL1TU9iS5cuk8ze7ExvVZgKgt2UAJ5yZNX74MJ1FiFaNNxAoLbj7LWaWRtCLr7nvCqQhP4n7bS9fTZL6zGdNorjLPkSs66CRmXb3hHBvPe833VNdtjaDd9jESDHbxDBKLdAwj2wu9ZVrPAqgBCcPbwL9HAmGsz67bX2qYqhzQN7X9HxFKPwiDo4AGCee5DRr4wMwajEM6YdKmXEvfaAJ45bjyQGbL4cjRyRjvcBxnnJ5MenToGAi1EzChk8Q7HDeVGofW616jHsmEKDx1H8yKgk397m127enJnwmaACmF78ZABjFkhZ4waxHsxzsDrQjWReCdxpHw5x4ge",
decoded: new Uint8Array([24, 101, 212, 128, 238, 115, 79, 46, 47, 23, 29, 170, 145, 233, 169, 144, 53, 35, 97, 143, 227, 26, 15, 65, 144, 177, 62, 86, 253, 13, 199, 153, 173, 194, 255, 0, 191, 226, 88, 60, 253, 235, 159, 50, 167, 60, 226, 247, 6, 115, 135, 73, 15, 248, 248, 160, 34, 29, 213, 19, 25, 173, 123, 220, 77, 164, 48, 30, 207, 218, 182, 245, 141, 225, 152, 137, 209, 205, 9, 110, 153, 157, 218, 124, 85, 199, 108, 93, 135, 96, 2, 253, 93, 104, 247, 99, 24, 68, 104, 22, 1, 193, 169, 5, 120, 142, 91, 139, 98, 141, 205, 115, 23, 151, 76, 2, 201, 75, 189, 239, 119, 9, 109, 190, 72, 232, 124, 168, 102, 184, 88, 104, 94, 55, 197, 96, 95, 81, 159, 206, 63, 191, 233, 17, 206, 49, 32, 45, 92, 149, 184, 144, 205, 187, 214, 195, 248, 139, 23, 70, 211, 51, 76, 19, 64, 211, 196, 127, 76, 165, 168, 47, 115, 227, 196, 104, 246, 192, 214, 83, 174, 218, 100, 178, 192, 213, 120, 37, 17, 252, 54, 207, 8, 170, 146, 86, 64, 196, 243, 169, 119, 116, 176, 47, 46, 118, 255, 148, 124, 155, 246, 251, 10, 202, 12, 253, 7, 182, 205, 66, 97, 160, 46, 181, 221, 0, 211, 201, 123, 107, 72, 126, 84, 4, 49, 133, 242, 91, 86, 113, 204, 114, 203, 204, 128, 23, 244, 210, 152, 162, 254, 3, 180, 193, 235, 38, 236, 224, 213, 11, 243, 128, 211, 41, 251, 191, 16, 45, 77, 80, 90, 72, 17, 28, 27, 185, 101, 226, 14, 66, 196, 255, 180, 238, 187, 42, 40, 125, 99, 198, 202, 147, 94, 5, 86, 163, 35, 58, 18, 175, 20, 97, 250, 49, 47, 32, 172, 15, 212, 229, 208, 37, 50, 146, 147, 200, 89, 219, 118, 160, 239, 205, 32, 224, 175, 8, 62, 80, 201, 248, 170, 254, 28, 47, 172, 230, 41, 196, 34, 118, 22, 48, 113, 47, 252, 234, 237, 226, 83, 36, 220, 125, 119, 161, 118, 19, 250, 88, 186, 138, 172, 92, 93, 98, 254, 125, 105, 47, 121, 37, 223, 162, 114, 247, 63, 73, 121, 153, 78, 172, 56, 135, 149, 181, 141, 64, 194, 32, 0, 172, 105, 228, 126, 113, 252, 175, 219, 230, 202, 24, 187, 26, 134, 162, 182, 132, 176, 59, 170, 8, 73, 130, 51, 206, 117, 255, 44, 239, 178, 178, 69, 217, 123, 42, 152, 116, 180, 100, 213, 12, 167, 137, 240, 78, 137, 214, 47, 220, 103, 109, 226, 67, 34, 250, 170, 125, 78, 45, 23, 59, 4, 38, 18, 217, 178, 124, 184, 95, 107, 232, 13, 174, 105, 32, 3, 248, 252, 242, 147, 13, 129, 102, 130, 196, 158, 222, 36, 139, 105, 243, 232, 247, 201, 84, 80, 103, 248, 152, 86, 46, 145, 183, 205, 138, 240, 63, 207, 162, 22, 253, 79, 189, 203, 110, 203, 160, 222, 95, 20, 36, 218, 123, 39, 86, 59, 32, 150, 8, 239, 13, 99, 81, 33, 121, 59, 204, 2, 187, 159, 123, 154, 118, 184, 34, 27, 183, 51, 136, 203, 230, 204, 59, 183, 176, 9, 49, 99, 206, 109, 215, 127])},
{encoded: "V3QuWbhehf7sBYbhJDv4RgkQNwvbGcgAkXPxbXHyQL9tZ9WunMV1Ap3kX9cNVGhptxZo45PTwbrbeZ2dUKpK3zTthP23nim8a6XAe6fXMxHKSTVrfJ68SB5wPVZJen5ZN23ZQK3Q2SnkzDGHLrhyfaHjEXciSPN8LdXRLSEZ4MM7Dtv7wpqdh57zK3QXex7MZ183NRwUiVZLBGQNykf3zMTrTYBaG59KTQcc6WpDTaYBxhhzrGEPju5keNjH96865YCdSbwWoAyWknaWoo8q4BKEgQvsYUUFE4brb4Am9FXf2Z2GhErALd3388qvvcPzurqQqaLGdBWYPWzz5ZnpELFGcV8",
decoded: new Uint8Array([203, 201, 142, 31, 70, 207, 64, 200, 10, 39, 92, 165, 66, 177, 175, 175, 35, 3, 17, 236, 253, 171, 244, 187, 92, 66, 185, 178, 101, 128, 168, 149, 70, 167, 243, 200, 216, 197, 1, 133, 87, 82, 180, 186, 145, 238, 224, 147, 231, 234, 118, 159, 40, 249, 98, 201, 66, 38, 165, 70, 224, 205, 147, 182, 187, 157, 103, 198, 15, 111, 252, 18, 179, 20, 72, 248, 48, 108, 191, 130, 96, 130, 45, 19, 101, 93, 25, 228, 124, 194, 202, 206, 242, 107, 98, 38, 168, 195, 111, 76, 136, 132, 246, 103, 213, 186, 47, 226, 173, 10, 11, 222, 247, 221, 253, 139, 64, 193, 253, 248, 138, 128, 78, 174, 132, 42, 252, 161, 18, 59, 202, 139, 49, 202, 25, 222, 135, 81, 21, 127, 208, 247, 156, 242, 249, 223, 127, 186, 236, 61, 45, 18, 123, 179, 65, 178, 163, 119, 78, 255, 187, 20, 238, 46, 140, 210, 229, 147, 184, 57, 194, 187, 90, 106, 226, 128, 85, 118, 255, 208, 90, 196, 170, 236, 138, 172, 128, 185, 230, 152, 173, 243, 190, 53, 131, 55, 240, 0, 224, 232, 140, 241, 128, 229, 228, 160, 210, 78, 211, 125, 206, 54, 160, 30, 79, 130, 136, 170, 106, 144, 75, 80, 31, 157, 205, 48, 147, 246, 62, 51, 43, 253, 28, 182, 182, 229, 77, 37, 232, 125, 139, 83, 19, 39, 141, 186, 66, 79, 105, 16, 25, 69, 224, 35])},
{encoded: "Epj5YXSMT4bR1TPALM6jbbE83k6bzv26pdSj274g4VQYb1kuuBmsP5vdgFLzd7n2ub3UGVGU5yaXgqgKCaaFDjQMdxG969LPgEoiBp5D4pWR1fq4KuTf1umqVxcPMVRaF9FxWZzbs8YT5fgt2sW1QMKQz2FWzTqKzjDAHebBK6fvZnZNM5nvYjcmL4xsc4WAd546fBCZzdyhiyKwWeen87VQxPV7y2Fr7GjceRRD5XhBAvXWs74RbqQEFdevqVmwuEVPu9vfKfKt5oYfBfHnT6Jn9Np2e2CaR8gvhv7gLHqb5MW1dFfR89Pza59s5C6TMUB3NXPb5PoqgBAWyK7MNM98kSiqCx5aGPDQFKLajTwzVoZTZw3w6dGYkqNBE8dfR1NGFZbyXhbBsqP786Ye7QtrYrxYwXMR3B2Jzgt8wv7BGoU6macien83LHCzZFFLUSBMogxqpkvf5SEmyYFXxgqu3CPXgUimYi454dYLRGzuTYiyuHVkn5gDiHqMVvBFtovBsJEmgHCXa3e3zU4TiwQKzNKxhbkPEZGYYxvQYLU2vrKeb1Qjkn5zW2edv3918rkNkhTAbg437VMyLUSzfzZMkSkg7Fhc8mDKbDdB24ZoTeddKtE5U7Wt38vFcVUKxkzC9wxF8mGVapTi3Ftokn7qEuKuYCHiUtHupCVoFLkGonFv23AUR9FdwryDnmEey8dKfgjGbfJGc7jbbsBYMi3xApFkTnvWNmfwme6qBGApEq6yWxfvQT1xYaf1kciS195LzQEyDEPsFNSAiJkAE4zqqpvrxScVFun4dDWKPfnKmd6RF7Popzj8AbVsgXLyHGAgzMDttE9nWhQR8a2QtcXLy6JxcZZmEvFgxB2iNenLffuEBss44HRK85ZFjbcqR9w8getBUv7EfK9P4FRsDU4XRVjZ1Lpb5ec2j55i1LB8TGuV9ZcvHp7QVaA1YMmbhDUge2Kc6qS7eSjN7ru8xPiaubEsx397nxLewpFw2vYQ5FToSV54HpkfWf35gHwQiMR56bJ5fpvuQcJcXzfgHvP3AnaSw85xG1RKw4v7p7NJ6gyoFcXhbzhnXLuRv1uRkb4w1pr4meWS7aDWjEvqZFCBnjpwU7isBDSLELspcwwXdqpud17K81MuEdRw64kqbeH8Tx1HJan6aM8oLieJMNgUFpXyCT4Lr8Lp48dPZKdxaQKmPtiGB1xtD6smrHcbPrEbrMPdcL7otCuKKGYkjrTUavGB9ytAZ2XNH9U9WKscMNEfGV2HnojP9TKWxPTU4G7qbsUo3N1YV6iEgGaL5NS4UE8rvnRJJxjLXDyRFjsJpFn7cpRAoKsEdgjRz25PHcck6B44n2jjDrX",
decoded: new Uint8Array([121, 178, 249, 125, 231, 133, 160, 158, 177, 231, 58, 168, 78, 108, 170, 219, 66, 91, 214, 228, 179, 47, 212, 22, 180, 166, 141, 34, 68, 88, 168, 245, 241, 150, 249, 6, 72, 42, 253, 80, 131, 123, 77, 198, 129, 14, 14, 179, 217, 238, 143, 8, 199, 66, 227, 125, 20, 149, 201, 24, 253, 119, 199, 245, 32, 47, 75, 145, 165, 153, 191, 21, 18, 181, 32, 61, 195, 162, 210, 107, 82, 33, 219, 112, 45, 136, 155, 5, 115, 136, 76, 73, 174, 197, 85, 101, 103, 199, 217, 232, 143, 78, 86, 230, 195, 169, 196, 156, 56, 139, 227, 120, 182, 221, 131, 137, 90, 23, 64, 28, 162, 164, 14, 223, 72, 51, 237, 48, 215, 86, 63, 134, 5, 148, 212, 47, 129, 52, 27, 97, 193, 64, 167, 233, 243, 196, 207, 130, 50, 5, 240, 56, 16, 182, 16, 189, 7, 132, 91, 172, 175, 182, 162, 85, 195, 205, 193, 29, 41, 115, 202, 153, 168, 254, 187, 136, 31, 164, 254, 40, 50, 112, 59, 132, 33, 248, 251, 198, 29, 216, 91, 95, 167, 31, 152, 57, 36, 250, 125, 234, 125, 163, 244, 146, 183, 74, 227, 195, 151, 36, 192, 122, 1, 207, 137, 118, 32, 208, 158, 176, 117, 235, 68, 215, 154, 134, 222, 23, 131, 136, 103, 47, 240, 208, 211, 165, 45, 212, 173, 74, 157, 199, 74, 87, 38, 253, 54, 248, 105, 159, 100, 24, 82, 68, 156, 216, 156, 61, 130, 70, 154, 31, 179, 90, 48, 118, 18, 150, 174, 157, 5, 2, 110, 78, 85, 7, 254, 72, 15, 31, 128, 184, 73, 95, 143, 213, 244, 46, 81, 173, 81, 17, 124, 143, 65, 85, 169, 240, 10, 24, 204, 172, 203, 107, 251, 77, 61, 212, 203, 28, 214, 12, 153, 64, 236, 101, 20, 160, 53, 150, 164, 230, 64, 151, 197, 54, 132, 75, 15, 53, 131, 210, 115, 188, 228, 174, 189, 226, 235, 236, 9, 175, 68, 162, 111, 209, 208, 230, 2, 94, 137, 245, 10, 69, 3, 228, 133, 150, 209, 181, 55, 94, 29, 236, 25, 108, 205, 107, 19, 52, 239, 209, 21, 228, 43, 74, 22, 153, 183, 75, 12, 251, 64, 10, 222, 32, 179, 44, 10, 79, 146, 80, 236, 44, 93, 132, 39, 172, 178, 41, 42, 132, 168, 61, 178, 137, 57, 46, 102, 29, 32, 39, 207, 25, 68, 72, 16, 41, 32, 234, 88, 197, 7, 139, 97, 22, 126, 168, 9, 65, 183, 40, 30, 228, 228, 215, 113, 75, 37, 143, 107, 174, 195, 190, 193, 131, 141, 225, 194, 29, 164, 255, 117, 242, 126, 46, 193, 198, 40, 2, 210, 34, 221, 137, 165, 158, 12, 171, 155, 25, 108, 86, 25, 241, 182, 66, 205, 228, 108, 170, 251, 162, 103, 166, 70, 78, 211, 12, 147, 117, 35, 178, 152, 242, 84, 137, 179, 17, 1, 191, 53, 4, 247, 185, 240, 171, 181, 15, 252, 106, 112, 97, 30, 155, 110, 84, 23, 209, 110, 244, 71, 28, 249, 63, 190, 68, 24, 184, 148, 40, 54, 51, 197, 50, 18, 58, 217, 140, 47, 85, 196, 107, 252, 69, 62, 211, 92, 99, 39, 85, 185, 145, 54, 98, 52, 69, 119, 31, 37, 6, 176, 249, 236, 108, 125, 48, 5, 184, 69, 80, 125, 59, 240, 141, 6, 124, 213, 54, 234, 111, 138, 130, 174, 118, 26, 25, 186, 82, 193, 200, 106, 133, 244, 146, 10, 118, 24, 212, 16, 56, 104, 83, 72, 122, 2, 46, 224, 245, 233, 116, 77, 245, 118, 13, 79, 38, 183, 219, 117, 214, 198, 79, 241, 131, 195, 116, 163, 226, 221, 131, 41, 186, 176, 130, 89, 6, 89, 61, 197, 209, 108, 241, 176, 38, 28, 109, 182, 27, 138, 210, 137, 58, 58, 224, 53, 244, 36, 116, 245, 12, 254, 25, 82, 164, 59, 79, 147, 237, 236, 164, 60, 208, 121, 147, 71, 20, 177, 202, 116, 69, 0, 25, 213, 39, 144, 168, 27, 82, 43, 64, 10, 58, 78, 169, 246, 104, 216, 175, 157, 117, 124, 173, 96, 10, 51, 176, 154, 141, 144, 143, 238, 15, 180, 117, 132, 148, 144, 141, 158, 146, 21, 113, 111, 212, 40, 96, 123, 152, 94, 247, 37, 44, 61, 128, 130, 83, 255, 55, 170, 25, 112, 73, 190, 210, 51, 12, 93, 158, 142, 49, 240, 24, 180, 223, 212, 195, 3, 232, 24, 212, 65, 191, 223, 221, 183, 191, 91, 117, 199, 81, 224, 188, 141, 67, 45, 28, 147, 250, 158, 131, 205, 207, 81, 7, 159, 62, 202, 6, 205, 53, 44, 56, 144, 144, 223, 216, 76, 30, 70, 123, 209, 101, 144, 123, 193, 29, 108, 213, 173, 25, 37, 143, 189, 60, 20, 182, 102, 247, 4, 141, 78, 198, 253, 110, 209, 57, 214, 252, 98, 104, 56, 33, 177, 168, 156, 30, 236, 150, 223, 211, 124, 89, 198, 16, 79, 1, 101, 163, 149, 101, 179, 237, 27, 83, 248, 146, 206, 218, 49, 86, 16, 191, 105, 185, 104, 237, 238, 57, 124, 145, 84, 170, 116, 228, 154, 2, 45, 204, 156, 115, 241, 134, 19, 62, 37, 225, 164, 186, 1, 84, 185, 207, 136, 16, 52, 113, 92, 69, 191, 53, 236, 93, 37, 159, 227, 108, 149, 116, 201, 73, 30, 106, 65, 134, 188, 163, 111, 20, 203, 83, 58, 108, 26, 156, 160, 126, 233, 150, 235, 70, 22, 153, 97, 27, 138, 65, 209, 174, 201, 175, 247, 185, 7, 131, 194, 99, 216, 157, 146, 181, 168, 42, 250, 33, 179, 201, 197, 50, 23, 169, 174, 72, 199, 8, 177, 43, 96, 75, 137, 140, 3, 166, 208, 35, 46, 193, 243, 148, 231, 164, 36, 99, 93, 110, 111, 203, 98, 242, 34, 143, 163, 213, 223, 169, 120])},
{encoded: "RwovyJvbKKjcrEgvJ1kkocADEpM3urKjn31jhTgko1dcwkqyAsUKCu1As9dCRhB8HkGNAhg7MF5saVr2p7M4x7mbZEdWASbcK1HDGEe9andYRu1EAeqLJzVGcWZeM4mMLj3qHTPwN8132aasCjwSoZRaEjANmDqpS1PQYppjF5ECnh7Assj2eKGufCPeYEzUca34Y2gJHwajP9cH7xGQoHEc3eEXTDh6baPYc2ffHk9AibEQLMjgQbhqAg61o354U7b3hMt2mrGD5fFaFqNu6Xg331mqtVB9E1WkV2hVfcwnEBys2ajKEaw1pSPzGoNRwGCz4tV1miBP9p94sz53AdxXFMuDLT5EB7s4srhsKhi35q8HeGb366pyPuLRXrHAvWHg6r3rhLuAdGhZmCucZSy4tisZCuuAjZHBAaMKsxkXP9wwNPgAedDmPxsdf2YQHAkgJyxhKczdpKfvLDjfJx5KVub13uUfrULbrdQwNfai7SNihXr9nUJHPucxCpoKDdK9oFjvwehn4phAicFwJvjUx7d7AzG1XUueXfzRM6i3ADB3CALD29N5huiLQ6Bs5eyCPH8wu9Tt5ZdZABMPc6dxWJFgm7gn3VkZYaPdWhcyjF9uWBjawhZiVWoD4iQRRDgG4bvKxaKzsJKMh9cHJfNdhHMp3ch6ps1Zvkuk8tPmjaUwiipnGMk4yGHQyWCG3fQSGQxkY9dkZNnaRmQKVh44EDeRboA5p6cy4KjKLmjMZaJfeb1Y8Jrok8XaJYh1LJJvPqqHFwfpfid9dtBGCXMnhmSo5VASCaqiPKDU4vTUVDfgu5cYjhFujaZtj423ynXnRTTuZXEFQuGvJMvQqtRhuWxmGmzMKgZ5HkFcYN6gReaAqEgskMhRqm7m8Kmhb5ZkR6WdkKsLD9XvqxmipoqCo9b7ZPimnAizDzjiy",
decoded: new Uint8Array([209, 131, 21, 37, 220, 196, 43, 196, 53, 121, 161, 90, 188, 147, 134, 104, 54, 173, 119, 30, 94, 22, 130, 177, 96, 70, 115, 12, 203, 57, 166, 8, 217, 150, 16, 206, 30, 160, 189, 0, 243, 121, 234, 166, 225, 37, 15, 17, 149, 35, 251, 127, 69, 232, 255, 204, 71, 162, 25, 182, 17, 135, 130, 244, 58, 222, 91, 153, 170, 39, 192, 229, 147, 212, 234, 22, 212, 59, 198, 84, 15, 218, 127, 33, 75, 85, 234, 112, 60, 172, 4, 9, 15, 162, 153, 186, 126, 219, 104, 21, 150, 186, 172, 79, 60, 90, 122, 71, 0, 22, 118, 131, 238, 100, 22, 31, 164, 14, 181, 25, 250, 153, 144, 48, 115, 45, 251, 13, 58, 180, 226, 14, 104, 61, 72, 152, 45, 84, 42, 220, 120, 87, 54, 188, 14, 176, 122, 165, 110, 205, 94, 198, 8, 116, 9, 129, 156, 207, 205, 202, 186, 121, 96, 57, 214, 16, 237, 81, 243, 15, 157, 155, 154, 251, 204, 224, 117, 59, 162, 255, 105, 186, 99, 49, 167, 6, 86, 14, 197, 138, 188, 23, 14, 25, 183, 95, 118, 219, 219, 73, 62, 32, 58, 188, 141, 166, 94, 46, 150, 203, 31, 252, 33, 216, 112, 53, 93, 178, 1, 253, 47, 167, 175, 153, 139, 10, 220, 231, 96, 137, 47, 95, 10, 49, 224, 165, 93, 155, 212, 154, 77, 146, 80, 252, 190, 87, 102, 170, 205, 63, 195, 76, 9, 254, 232, 56, 72, 135, 197, 222, 226, 73, 234, 247, 236, 29, 0, 0, 211, 53, 228, 3, 181, 87, 133, 26, 61, 86, 85, 89, 167, 179, 63, 162, 190, 210, 105, 2, 207, 5, 15, 71, 100, 128, 199, 150, 126, 40, 24, 99, 88, 233, 139, 243, 19, 223, 210, 66, 18, 198, 198, 128, 247, 114, 117, 98, 239, 35, 101, 83, 254, 197, 105, 81, 220, 241, 82, 7, 56, 28, 112, 149, 91, 15, 201, 235, 241, 72, 103, 28, 224, 209, 7, 203, 91, 255, 53, 183, 174, 176, 135, 156, 10, 250, 62, 31, 7, 5, 167, 126, 28, 60, 221, 35, 204, 101, 201, 108, 177, 52, 162, 183, 75, 253, 239, 83, 236, 181, 28, 86, 201, 233, 150, 244, 169, 55, 95, 82, 174, 40, 48, 12, 224, 186, 104, 132, 251, 23, 96, 174, 251, 245, 106, 200, 136, 82, 184, 0, 146, 209, 80, 170, 5, 45, 244, 226, 137, 215, 173, 230, 40, 251, 108, 162, 226, 158, 7, 242, 140, 169, 199, 215, 37, 51, 120, 96, 163, 203, 68, 58, 42, 35, 102, 169, 35, 169, 232, 196, 9, 158, 145, 224, 24, 182, 216, 125, 27, 11, 227, 146, 160, 187, 74, 39, 62, 1, 129, 117, 3, 221, 171, 238, 99, 132, 194, 75, 93, 244, 6, 179, 58, 50, 175, 241, 209, 54, 165, 131, 156, 43, 251, 182, 145, 0, 18, 242, 64, 72, 146, 10, 116, 79, 232, 212, 113, 114, 101, 206, 182, 158, 158, 225, 215, 103, 214, 197, 227, 238, 206, 100, 51, 17, 223, 17, 31, 68, 147, 13, 154, 63, 220, 202, 197, 147, 52, 198, 231, 127, 177, 48, 95, 0, 225, 11, 241, 1, 178, 49, 14, 111, 128, 111, 41, 28, 46, 222, 101, 82, 64, 96, 95, 210, 83, 35, 188, 0, 179, 88, 140, 233, 186, 103, 118, 37, 221, 182, 231, 42, 223, 104, 58, 182, 204, 96, 66, 171, 235, 231, 121, 52, 208, 0, 40, 61, 227, 63, 194, 242, 60, 206, 141, 75, 29, 3, 167, 251, 185, 97, 242, 27, 79, 149, 122, 21, 194, 116, 14, 166, 85, 253, 127, 161, 170, 180, 50, 211, 185, 90, 219, 182, 88, 190, 94, 45, 107, 245, 187, 157, 202, 150, 209, 19, 227, 250, 9, 83, 170, 214, 120, 188, 44, 26, 53, 151, 234, 108, 131, 229, 62, 230, 74, 150, 111, 246, 142, 137, 83, 182, 89, 44, 193, 235, 94, 235, 27, 37, 149, 69, 182, 208, 58, 163, 98, 235, 73, 114])},
{encoded: "6v3f7x2S1sbAoDEbgVUvo57LuZUC4mhKjKqxWkqzJFcMKDDEcScYfHmNK7uv1A6KnMoa9V2jk9XBjkKPteLdMPX7ArVup7tT3MsXp5mHPz5rVRCrvVLQ8pU7k1WLitvmPJP5Wqg7FRykNdydJ4Y19SxawYYs5Pkzm6FC6c34qRJyHX1hZYNGgYgWAP4EUhurW7qVZvUNQabwhw155HtRBJCzfEp7GARfeYRah22Cwas9iJxuTUZwPQjqZRXYq9irC7yUiv5XBU8vFRRP97zQUCrbU8Z2iHjNHAjTjZZsAGreVx9JGW4LsCq5hkFoPXb5BQyyxVUXZ9JbJApos9gSChPW9g4aUV8QKZZVr6Tp1nXHnG3y8t2UUqkJzTFpSWXzD4ycAW7g72q75Kd6eSr2WYHdMNTfjePoZqTvvJD4CtkukXpCvysNahaPhLgav3UKznqAtxwdMs",
decoded: new Uint8Array([202, 121, 73, 44, 100, 224, 119, 223, 212, 96, 17, 78, 67, 208, 85, 129, 152, 14, 84, 23, 73, 164, 85, 67, 218, 128, 68, 240, 14, 255, 151, 247, 146, 164, 125, 141, 17, 125, 17, 227, 37, 69, 23, 106, 179, 179, 117, 181, 223, 111, 25, 248, 205, 178, 51, 13, 210, 18, 102, 4, 137, 113, 109, 218, 172, 43, 230, 182, 211, 241, 103, 69, 163, 57, 235, 105, 123, 108, 213, 129, 253, 6, 11, 34, 98, 135, 10, 188, 43, 109, 252, 19, 246, 25, 4, 80, 206, 72, 125, 154, 11, 76, 59, 1, 176, 9, 147, 30, 39, 51, 155, 61, 143, 218, 186, 193, 139, 94, 28, 38, 38, 240, 160, 21, 157, 166, 156, 99, 186, 159, 140, 235, 199, 82, 69, 0, 105, 80, 2, 75, 184, 191, 149, 30, 77, 34, 159, 171, 111, 155, 63, 162, 136, 49, 64, 234, 105, 208, 4, 152, 68, 55, 174, 19, 38, 50, 209, 21, 115, 246, 215, 80, 196, 113, 164, 130, 178, 25, 211, 187, 96, 237, 242, 113, 223, 43, 168, 62, 103, 88, 118, 59, 245, 152, 35, 57, 215, 135, 251, 224, 222, 216, 27, 182, 194, 218, 196, 12, 200, 189, 3, 225, 196, 44, 194, 190, 54, 24, 198, 106, 35, 137, 242, 101, 230, 5, 35, 136, 90, 29, 61, 233, 4, 40, 50, 249, 135, 49, 252, 227, 132, 116, 217, 251, 88, 104, 115, 244, 32, 102, 46, 212, 118, 252, 118, 74, 25, 33, 98, 147, 129, 170, 199, 56, 196, 114, 205, 25, 118, 179, 11, 153, 151, 119, 136, 97, 29, 87, 51, 162, 205, 240, 60, 111, 208, 219, 64, 34, 139, 158, 115, 35, 175, 141, 115, 168, 59, 62, 41, 169, 221, 48, 27, 4, 14, 21, 19, 14, 171, 143, 103, 142, 218, 132, 255, 53, 107, 247, 126, 169, 25, 209, 217, 208, 123, 5, 143, 236, 109, 59, 191, 173, 234, 6, 202])},
{encoded: "EopPFQVM9PQLSDoijfH6GnAtDqneTmt6Mfhv22vFSvh1r3DL7ECpV5fbQVUcNzBmUjUWv9uSfhyMS4t4aMCEK51LRtBh7zDzMPNGw9aCWWZkcVYNGPc1QfKbX6LWYSnrqNv2dG8qJWKFZi4KZZxXPaN8gHDygJRYgatBuv8Zn1mC4pmiTDsZykUW2iveuiDntyGukPkH27M9ergvdc4gWAajYzF3oGE9Wyh4ffMym4kfiJRaE3RwkdUwiGffD3tVLgx27y71Dha7GDgPDfVuPBGF829fYqk2XdKNHXYXvzttGn4oeiwFy5FFfL8wjWNE5bBfYBKWXaac36RqKUc8Wye335V9x6hXFCSxvkMmfdAnkzKF9Lz4pYiJPwHWCKcgt1BpEAy3cqMnbzyT4G6j7Z5apgVALwqfeMeagBgsVknAwm9w8N4gmnYktRrqEixjbt1s7jT4byocU4KgXV8nhBz3ginMTznJ3gwqVQ67t5fPF7XdBExqzQRZahBnUvGkNm7wEAQPxUfF533aq1Z3XapE3zfWbb1Mba2ZSjbzfz7QdDpQzt1UVFrYgLgC5qCGnuL1iATQRxmz3eBjTgp5LDA24AfhjRXxQiL15KheEfjfiWSWPhr4dKWgGcT5dZVNBjKb9e4c4gmjU1XkoGwrVGs7AhRdTSceWby3dxDg28xexJQ129GXqFigcvnWThfgMKa1a21ffsCyduPpD7LRCtcwz17vUk6AuNtgNZKNSSVXvhTaxRjKW6hFde1FZDzaDLqLUUV4auaVNuxwNzuF9hWoVa3zmJiewpGENTAVwyAtaacSD6ZeG4WoH47K9c8cUDMnP9M9nCRhvMyS5i3kDKhAYAmQuEqBvmSgggv2V7Sk8qqJ2Kz1Rz4Py13LUDxxZ3zvZjg977xp6topWGVck2hmtNmyHAVMZ9zCkjT19RTuCnt3V6fv4H8UMtUNDfDJdVxPiVsrBuU4MKeuJLef94EMCcRXdUFtrGDrZ1wh",
decoded: new Uint8Array([240, 148, 2, 31, 80, 17, 247, 157, 138, 31, 239, 225, 138, 148, 181, 204, 117, 181, 21, 113, 15, 138, 24, 223, 247, 75, 158, 85, 216, 73, 192, 11, 148, 238, 56, 87, 165, 154, 5, 136, 134, 249, 154, 82, 232, 132, 98, 65, 58, 60, 254, 113, 26, 148, 74, 155, 48, 49, 75, 162, 59, 32, 31, 83, 126, 77, 90, 43, 25, 19, 55, 22, 180, 254, 24, 74, 43, 196, 212, 182, 161, 133, 123, 76, 160, 85, 67, 202, 17, 2, 53, 233, 118, 120, 157, 238, 35, 151, 212, 112, 121, 123, 134, 148, 118, 0, 138, 21, 143, 29, 135, 73, 80, 115, 49, 150, 68, 106, 240, 109, 251, 26, 200, 205, 82, 51, 40, 126, 202, 131, 158, 82, 171, 8, 223, 244, 105, 246, 28, 168, 19, 36, 193, 146, 79, 139, 252, 152, 176, 173, 133, 87, 90, 95, 179, 6, 34, 245, 179, 27, 152, 106, 236, 58, 176, 225, 213, 124, 46, 50, 168, 252, 193, 44, 81, 254, 77, 178, 54, 1, 177, 190, 101, 196, 49, 180, 179, 52, 192, 6, 195, 169, 130, 121, 157, 173, 61, 208, 241, 180, 54, 213, 168, 99, 206, 210, 160, 73, 185, 250, 133, 104, 181, 224, 229, 23, 0, 44, 170, 103, 37, 155, 102, 44, 52, 99, 44, 31, 17, 204, 83, 147, 16, 199, 24, 241, 73, 180, 50, 244, 73, 158, 15, 92, 120, 20, 225, 79, 116, 58, 29, 245, 68, 54, 175, 41, 185, 150, 134, 16, 120, 21, 195, 228, 234, 255, 136, 234, 248, 52, 237, 11, 48, 174, 147, 197, 247, 103, 215, 34, 228, 67, 232, 43, 83, 15, 97, 247, 253, 159, 60, 20, 86, 52, 44, 36, 88, 4, 50, 123, 26, 16, 204, 166, 111, 61, 236, 20, 150, 255, 11, 12, 33, 180, 150, 152, 197, 153, 176, 43, 87, 11, 244, 162, 226, 186, 235, 112, 151, 10, 20, 194, 3, 65, 16, 127, 43, 155, 44, 95, 48, 241, 2, 233, 216, 3, 24, 15, 113, 105, 202, 4, 68, 209, 22, 156, 186, 48, 22, 55, 216, 175, 70, 156, 191, 194, 155, 22, 3, 187, 175, 173, 188, 251, 141, 241, 137, 20, 22, 50, 25, 184, 0, 161, 11, 11, 12, 195, 158, 88, 198, 70, 63, 67, 12, 88, 190, 201, 241, 254, 21, 102, 237, 11, 92, 117, 70, 100, 181, 212, 137, 104, 185, 51, 20, 119, 9, 183, 17, 58, 19, 68, 79, 243, 35, 122, 3, 174, 170, 219, 187, 194, 66, 180, 124, 199, 70, 130, 229, 36, 208, 118, 112, 79, 129, 145, 151, 155, 125, 150, 41, 108, 93, 109, 92, 81, 99, 11, 31, 25, 48, 98, 142, 234, 94, 0, 119, 197, 62, 225, 191, 97, 135, 155, 177, 149, 61, 178, 249, 168, 73, 233, 174, 154, 83, 162, 197, 179, 46, 41, 162, 209, 178, 130, 62, 229, 52, 1, 159, 90, 178, 70, 195, 200, 186, 151, 136, 61, 178, 106, 162, 208, 162, 106, 91, 226, 255, 184, 71, 17, 0, 36, 127, 200, 47, 245, 12, 113, 231, 235, 181, 242, 9, 182, 165, 152, 224, 144, 160, 237, 56, 84, 20, 61, 71, 45, 233, 180, 173, 119, 57, 216, 223, 148, 154, 147, 172, 207, 58, 171, 153, 32, 143, 126, 115, 172, 240, 212, 80, 134, 155, 69, 83, 63, 249, 189, 89, 0, 107, 213, 48, 100, 200, 131, 206, 200, 172, 7, 248, 48, 7, 196, 246, 121, 70, 250, 74, 254, 239, 132, 161, 82, 117, 166, 231, 94, 215, 70, 84, 66, 255, 143, 41, 103, 117, 178, 85, 191, 204, 2, 70, 178, 172, 118, 56, 103, 205, 255, 9, 59, 218, 163, 14, 126, 130, 152, 40, 105, 181, 59, 171, 24, 183, 194, 54, 222, 234, 132, 139, 212, 60, 148, 86, 184, 68, 165, 185, 80, 162, 239, 31, 160, 144, 85, 154, 244, 173, 79, 90, 239, 217, 218, 81, 104, 2, 136, 233, 152, 232, 193, 7, 84, 219, 111, 114, 143, 218, 158, 200, 78, 14, 40, 80, 102, 30, 59, 6, 139, 221, 237, 225, 111, 213, 183, 127, 199, 94, 132, 79, 222, 169, 232, 150, 129, 155, 246, 98, 55, 109, 27, 96, 46, 87, 15, 118, 71, 14, 69, 85, 15, 160, 52])},
{encoded: "5ZbQio1ewLyxHiTbyV5UdAtipTax6x9YYtYbGw5XyDxEVCbKk7YjJ27Vr3YVWwiXUr71NsrdNuhAABsxKYQdEgP573dke7FbS5zKD4FafQopAfdKXN8PXQBAjDnSKV6cTJ1TQHejhV4yhReTfTCcuuwrxh2Ph5pEz7hC3xdn1t5DCxdh9ya1978WkEiZvqQfa4SPxJLYhHZGYQf7D2CDHGK4ti8GiqRzfKnYhTfKmu589z1G9bU7rV2pgM96JmGzzdZLLP6iCjwST1dnXvXnUokenniAizCYsaweYAEfWbpuKaGswtmmbKuYbzgVpG1kHAiRgsQzw9ZEBFySMS56424DddPTKRXC5b6o53ELR5c3RBpnQCp2o2ptAqQEdFNxHBY1RoRuST53aEGWL7Dtf21ejFshg8SWc8yviFkfWC3xy4jErraBweDzEu67qE6ptcKFTuWn41KAT5fAq4UW5uAWSj2fWEsL3rq1FAbykCgfuCfzjuQVT6Qu38A1fSPyuLRrRZmW1xBNJ3P8q9SXFsuJjNQdRf4gxWeEKWiYHSCFCxZqUproEsabj6kbxcwCnWszNxFojUPRiAqGPtBTQErXgy4gHMRCCnHnEKybwPMBo5vea7ELZ29B3pypaZGWzkhEv4K4YXaURrUqJGDE2FUK7p6fVf15oZzP5yZus93JWQ8ATDcLadDeVaJH6GqKTxYficeWsJPmEwUKKUcFE6eGanRMoem3YTGg67aqCXqqimn47nKrA1eZe6vGhVRnK58VGdRsNb7LvPh2Vh697iom4dtrAjFT6XdZJoG99bPRXVY54Qks5r3tDFhfDTTC",
decoded: new Uint8Array([72, 24, 183, 236, 8, 209, 39, 207, 116, 190, 182, 185, 78, 205, 63, 209, 20, 30, 115, 23, 16, 70, 187, 236, 144, 80, 86, 66, 147, 221, 222, 82, 160, 218, 54, 23, 106, 47, 89, 210, 231, 110, 92, 7, 1, 3, 207, 240, 91, 51, 174, 169, 30, 108, 63, 40, 5, 65, 179, 135, 246, 237, 157, 151, 78, 61, 30, 194, 83, 46, 131, 147, 78, 5, 12, 184, 56, 207, 222, 59, 69, 209, 85, 43, 34, 91, 137, 229, 240, 254, 67, 196, 137, 65, 7, 199, 213, 144, 162, 227, 139, 117, 147, 238, 6, 160, 230, 237, 160, 96, 95, 104, 228, 89, 251, 107, 230, 52, 101, 224, 105, 4, 75, 253, 27, 87, 148, 165, 68, 81, 67, 121, 44, 12, 103, 15, 87, 111, 153, 186, 105, 62, 224, 127, 98, 201, 4, 234, 216, 22, 108, 144, 53, 230, 191, 93, 45, 198, 60, 34, 145, 207, 117, 63, 202, 15, 54, 59, 91, 72, 119, 247, 246, 0, 191, 26, 202, 46, 136, 26, 227, 204, 86, 178, 53, 141, 50, 151, 44, 32, 95, 252, 190, 134, 95, 82, 242, 198, 170, 0, 225, 61, 18, 252, 232, 118, 249, 214, 4, 92, 128, 134, 46, 228, 137, 216, 180, 32, 249, 158, 132, 64, 161, 22, 160, 10, 66, 128, 224, 47, 123, 223, 228, 179, 116, 140, 70, 171, 132, 223, 36, 83, 244, 32, 61, 41, 25, 102, 123, 140, 61, 128, 238, 80, 218, 254, 111, 110, 125, 15, 101, 178, 144, 106, 176, 156, 214, 143, 34, 61, 57, 145, 240, 196, 200, 174, 78, 169, 228, 236, 223, 71, 81, 12, 220, 82, 236, 19, 186, 116, 84, 32, 78, 156, 153, 26, 6, 109, 88, 158, 59, 25, 229, 186, 114, 122, 198, 122, 97, 29, 73, 209, 9, 159, 38, 14, 171, 72, 65, 30, 94, 27, 183, 114, 135, 27, 182, 212, 54, 83, 194, 33, 113, 223, 243, 224, 36, 146, 17, 213, 134, 209, 93, 28, 248, 228, 58, 131, 202, 244, 8, 84, 79, 60, 171, 218, 72, 34, 30, 216, 57, 104, 20, 176, 68, 85, 192, 87, 133, 158, 26, 166, 10, 21, 40, 243, 159, 66, 48, 54, 237, 1, 250, 244, 249, 216, 147, 65, 18, 7, 203, 133, 191, 95, 248, 107, 130, 129, 220, 62, 245, 134, 202, 20, 154, 150, 108, 198, 243, 160, 233, 192, 77, 56, 19, 15, 225, 1, 72, 249, 244, 22, 19, 157, 77, 93, 151, 0, 153, 35, 30, 23, 155, 230, 72, 146, 173, 163, 43, 176, 154, 201, 114, 30, 186, 95, 190, 25, 253, 226, 166, 76, 189, 36, 212, 104, 23, 148, 215, 60, 16, 244, 119, 172, 81, 250, 98, 18, 232, 197, 156, 51, 82, 107, 220, 128, 77, 85, 216, 228, 16, 4, 160, 1, 240, 139, 104, 116, 108, 65, 155, 75, 166, 241, 69, 23, 249, 157, 225, 19, 101, 42, 215, 22, 219, 184, 107, 88, 254, 113, 160, 112, 153, 55, 107, 61, 163, 10, 141, 55, 154, 5, 196, 23, 57, 169, 219, 2, 238, 117, 244, 64, 37, 187, 56, 89, 110, 150, 146, 185, 56, 178, 74, 212, 22, 255, 157, 169, 23, 191, 139, 62, 61, 215, 203, 29, 234, 141, 108, 63, 30, 107, 163, 50, 66, 100, 184, 193, 218, 141, 87, 35, 83, 211, 122, 108, 77, 71, 92, 165, 105, 239, 1, 201, 1, 36, 118, 252, 143, 147, 142, 50, 115, 30, 69, 198, 154, 160, 207, 85, 123, 125, 235, 43, 37, 236, 95, 135, 87])},
{encoded: "Am18c3LnmpuEvNPbaJiE44zpkeg54oGMNNAecP6bCJLfkAt98L5qKbZ2RUsfE43V56iwmvfQHvWVWrerwhnWC4gm5eaet2BLpdfKhGbyGAsx6yqszMCexGMjzKzpRSRJFbssQh7dXf9dQ5BFiQbUzfcdwcbVYdeJpUFtC8bKgizgPy3QMiRjL1WuCNcvJeorSeuiRAhdsadXui2xbLfEtrPRYEJQWLD5aBrQj7o77cPQFsDF3vm5KLH7nmtGDKdYePSMhfM3ZNjFnk2BUNoFUbiv1aJ1ah3pw7EhSVqs3xEgG3HCs8PhWjyj2wgPvf8sWa4WJeBtLXVBgrH51XbuXJ4BbJBNv4N5cZTWPRX5PVVbjgRakHJR24mCkr12KLBZZT8jEWkUrzPrpP5sYsvmNXVZXshoRT5SmJx4SUWgqPqV8RLtKPXAix7Lo97yY4Tj5hLjqw7yy88ZZQ8pbTX22TMTsyof83Szbx5FenHSmRmU7jngvJdGjzw7ZxV9Ei4qCrpKWx8cc7mhP6K9aZxJrm4z3CRdNUtYC9LZL6sZbcPj1y35dkGiCDx9FDspWscPVVb864xmF4uf9qd5UgogZkWwATAuc9w87Sq3kqDsjYHV5vigwHJd83MqraANZoN1KqDT3xGbGaE8ZDxZr14q6ZExudmT78Dukqy8rzX1WtZMpaBUsqUW4G9bvfbZYNmbC5rtJTVvdf7gXFzPviNa4HCrA5QJnkM7HzEwzLFvke62qCqJKRV5VLpvevkyQn39zNq9wXZAXc655naf2gHoYkviyR37XhjamKBp7wiUpDnzTx6xZ6sHGKmyTCH6ZTxRjDP7fzH3Pwnmp6hRJsypobHxqTvo4tKUn9amgfVz8obTVQHi2xuPthq57FyqTLH5KD8kTWwSdyPe2xKk8mvctvGY8QR5iMVDVYZUxGTwGzjZSHgPTAQYmcdozRLrTd8qrv2ZzemH7GpNfDbAsNtsBgSAg5St2jptxNboG1Kis5bHpnUba3JTsdmy1jctPfSyk4jdpW6FXHqXFkRCwYiKhUR3tgTCU7scF4XgQZEBQ5wGepK1ULp3EZR4XKNVYkjHQHy54dHiYw7qa3e8DQBJWWYKDbQLKXNC33v6siW5NSBCsn7eHMzLsRLwYVxNMP23FYcVeHu4pHWFeVKLAwFDNX6okam9ZQ7zYzMNG6FrdjiAvfaeBoqMBjyhGtTraXN9ptYmQxgjWHbYqqNZ",
decoded: new Uint8Array([88, 29, 1, 179, 39, 68, 70, 92, 68, 241, 67, 204, 184, 31, 10, 187, 66, 153, 117, 194, 60, 197, 66, 15, 108, 40, 109, 112, 174, 148, 189, 170, 27, 61, 8, 55, 197, 50, 187, 137, 80, 147, 73, 126, 59, 223, 197, 7, 7, 156, 212, 198, 159, 46, 206, 37, 225, 114, 103, 127, 51, 217, 200, 248, 136, 141, 4, 93, 246, 81, 199, 9, 56, 40, 49, 134, 101, 188, 237, 148, 163, 64, 14, 37, 199, 149, 144, 35, 108, 219, 156, 84, 179, 50, 250, 158, 255, 11, 170, 5, 139, 22, 94, 209, 116, 192, 76, 7, 113, 47, 142, 51, 252, 28, 130, 80, 248, 207, 229, 178, 169, 228, 251, 92, 170, 185, 184, 56, 42, 47, 51, 71, 44, 204, 158, 165, 223, 26, 254, 208, 238, 105, 249, 132, 122, 52, 159, 238, 20, 197, 37, 165, 244, 232, 99, 50, 72, 52, 36, 189, 131, 251, 180, 105, 162, 143, 47, 192, 66, 188, 5, 127, 149, 151, 120, 125, 37, 5, 25, 127, 218, 86, 201, 188, 72, 8, 18, 137, 219, 3, 11, 140, 132, 12, 172, 25, 19, 97, 181, 191, 247, 72, 155, 125, 34, 120, 224, 50, 209, 216, 164, 61, 20, 203, 186, 92, 67, 109, 50, 6, 13, 34, 1, 72, 198, 98, 193, 245, 11, 98, 58, 15, 117, 235, 222, 139, 170, 238, 195, 123, 144, 85, 141, 115, 82, 142, 119, 221, 59, 163, 106, 162, 198, 252, 253, 115, 226, 206, 180, 29, 204, 207, 184, 159, 90, 40, 247, 60, 65, 96, 113, 50, 161, 84, 206, 212, 73, 139, 74, 208, 25, 220, 189, 171, 157, 132, 4, 45, 196, 27, 112, 16, 155, 238, 1, 12, 114, 182, 135, 45, 213, 118, 140, 24, 44, 222, 5, 85, 23, 97, 10, 226, 70, 36, 44, 120, 156, 173, 153, 222, 255, 199, 39, 121, 212, 83, 39, 242, 131, 239, 133, 134, 100, 203, 171, 255, 196, 205, 163, 192, 113, 201, 208, 233, 121, 245, 185, 249, 93, 175, 65, 84, 221, 137, 33, 195, 151, 254, 15, 27, 17, 72, 111, 43, 96, 103, 175, 10, 159, 245, 141, 194, 105, 87, 143, 120, 36, 141, 253, 115, 184, 137, 99, 211, 125, 119, 154, 113, 33, 195, 84, 86, 203, 67, 242, 22, 91, 5, 78, 199, 66, 21, 137, 68, 157, 112, 203, 73, 220, 235, 178, 227, 225, 26, 35, 223, 212, 16, 236, 187, 28, 69, 1, 243, 107, 170, 172, 130, 208, 61, 235, 255, 115, 65, 15, 27, 211, 42, 160, 60, 187, 5, 120, 43, 70, 190, 22, 182, 243, 115, 63, 86, 59, 116, 121, 220, 97, 67, 221, 22, 233, 204, 68, 29, 20, 150, 114, 219, 101, 37, 112, 163, 25, 97, 23, 12, 143, 45, 137, 66, 223, 18, 102, 215, 88, 42, 27, 11, 29, 79, 135, 66, 203, 181, 221, 15, 85, 82, 212, 145, 155, 80, 246, 151, 179, 8, 37, 190, 148, 249, 76, 95, 219, 73, 165, 194, 85, 95, 29, 34, 50, 147, 11, 64, 206, 146, 168, 244, 78, 111, 183, 181, 227, 16, 49, 60, 111, 216, 62, 101, 203, 121, 139, 43, 36, 89, 202, 61, 50, 219, 94, 247, 42, 11, 22, 237, 173, 198, 202, 245, 234, 15, 150, 186, 146, 116, 191, 110, 95, 64, 203, 11, 178, 68, 134, 247, 198, 189, 111, 177, 114, 152, 50, 148, 96, 101, 77, 11, 181, 90, 1, 146, 119, 57, 200, 7, 55, 125, 51, 17, 54, 182, 169, 20, 46, 157, 38, 5, 248, 45, 176, 203, 54, 26, 213, 139, 46, 137, 178, 155, 212, 36, 98, 171, 187, 98, 185, 49, 157, 129, 107, 65, 216, 99, 128, 97, 112, 241, 185, 140, 240, 70, 208, 206, 92, 20, 7, 189, 153, 224, 146, 34, 45, 105, 160, 28, 148, 99, 83, 243, 207, 29, 119, 132, 16, 58, 182, 178, 10, 113, 44, 82, 107, 27, 37, 177, 96, 182, 123, 64, 101, 126, 188, 237, 130, 254, 36, 148, 96, 44, 147, 28, 253, 11, 108, 232, 67, 154, 57, 7, 247, 246, 45, 24, 139, 37, 75, 167, 7, 56, 100, 30, 68, 216, 214, 53, 159, 23, 164, 111, 37, 213, 1, 217, 125, 34, 7, 130, 119, 77, 243, 173, 3, 205, 113, 152, 236, 7, 191, 56, 74, 68, 104, 199, 28, 154, 74, 183, 234, 27, 55, 53, 104, 117, 57, 250, 206, 78, 50, 185, 86, 2, 69, 12, 158, 211, 129, 174, 93, 23, 40, 110, 241, 120, 54, 70, 118, 152, 112, 124, 108, 239, 59, 190, 7, 42, 40, 134, 191, 133, 64, 182, 121, 159, 128, 21, 206, 235, 231, 166, 10, 67, 236, 28, 180, 97, 246, 148, 73, 213, 171, 255, 180, 186, 50, 214, 148, 145, 153, 148, 196, 89, 205, 18, 77, 141, 104, 190, 17, 29, 88, 237, 166, 125, 210, 196, 63, 173, 65, 204, 153, 21, 184, 81, 78, 247, 194, 208, 33, 63, 146, 15, 126, 161, 227, 232, 55, 42, 151, 190, 235, 174, 116, 86, 4, 54, 201, 89, 45, 181, 196, 49, 195, 252, 177, 144, 44, 119, 183, 155, 59, 59, 246, 219, 17, 104, 246, 223, 70, 117, 106, 60, 5, 210, 165, 27, 213, 34, 32, 130, 95, 210])},
{encoded: "ZVQYzYgs8jzFFWpcxBCg69Qb7P6u622gaTQaKRS25JB9nvx94ZmfSjDdJUEE4KXp",
decoded: new Uint8Array([67, 102, 222, 87, 174, 82, 136, 101, 156, 51, 240, 219, 31, 112, 69, 138, 78, 240, 174, 230, 184, 163, 72, 1, 240, 154, 176, 212, 83, 109, 121, 7, 108, 173, 88, 64, 78, 180, 3, 220, 45, 49, 181, 5, 231, 76, 43])},
{encoded: "HCdEauWKrumoPyx91tLe7dpnaX2Tfg27syZPLnU7fM9uoDv8pdYcPFh4esZmUSw8QbtsEDEFmiw4tXXSyuLBPQL3FTgENTxfh3VQYbKh6Xic44HTYm7jig9HdWsZapxZDdTAnbXTWd3a2y4pBULyiHvdybS78LbpUsNcTKHvDxTqDc7CxzXrc62BTmCYQvq3pwqzSZtqfBnHQR6vHDi6RWpHMht6xMsuFh7WRPBFRZX5Yt2cGWhwc3aPc4k2e9U9y4qeTgK7dyggqqWmmkqU36xHqjzmupkn9VzrLwij8byGV7V4twBAoJqhywfXozx6GAUfyi4NJVUGJUfzaXtmQkJz9q2oiYZ6riPYUHUj2xkpaRc9BY6EYNuVMwySRbgar3hY9VvGxxF52XL5bS2KSw5JtWRjjpX4zUKEZE3uNSaWPuMQR9YieEkJwqXwfvVfLN9SxUnr3QvkJ7Zwwu6ownMzPkSDf7royaePpR1sj8U6UHiaeBwdfiwzjeMbz2jKwb5w68ar62DjDQTbC6yneD7CDUoY9kiGNpSyNCQHXts7m95qnaXvaNHjyyjhdiwDxDWks4YQLiRprTSr1FPvoskxcDnrzPVH7TApmf58vnR5kCeVZkLLC4EPiAFBfxyb9CmbtYTJqHHvQG9etx4hPr6yMvpgx5UPSCSqhm3qc7gv1iC6uCFJhy87cTdPAeM9ATCFWR7skaKU22YRkRHPS7K2sSwjWh2vjue1i7CCM3e8Q9KygDWtzgPqCKUMoSo3A9uvLSVRBnU7QbcLz4y2YXvxevZLGxYCKUNzozKESCP456JR7bvL4XWAuAStPJk8ubuP76EwwEB5rr1p42DEghfbRxSe5optfNYySaK2V6fJ78fKkW2NpqGZhngnLMUu7LxoGkFvrjED6rpoJGiueG3U8cBjTp6MYjsdAscRarNWGebLsoEP1CrQxWo5JzwUhUTpcPhprrXFYsNeELXzLbJKMWXShx3JDQfT9k27dwZHCaqvzaDrTmdhtdeLsQFNjXQjY4hDNxkpFGeWGoKko2gcNa4eVkuZx9jpYa3yb26jfFsXCLDNkJBCaPK2Q9kMwzJ2ay717vHaN7rQiqsJ8QZKjQLK2yasHvXZ415VZzmfF1oMD5i5PRVewQ9hWeckcKoTT6abCPLJWYNsKHRSWg8h632BbMtbiM9JhmE1iiViupT9k6V8hbocnZAaxbpPVuLjS1AdWfhqjJpVAN7hYC4og4EperGCc6x25fG1gKKqa1ep15dv54qxoTdb1ELtrWua3NWU6gxmDtrx3GJHHvVVRb8fgmfGdM8G3FpJyvwR1QAojUHcsKvXZE",
decoded: new Uint8Array([17, 156, 222, 217, 114, 221, 51, 84, 169, 61, 56, 4, 201, 169, 233, 216, 132, 56, 75, 183, 197, 84, 111, 204, 90, 246, 133, 141, 135, 128, 223, 127, 234, 158, 115, 142, 172, 184, 1, 6, 51, 57, 8, 49, 37, 86, 198, 61, 168, 126, 101, 213, 48, 6, 217, 67, 71, 244, 39, 239, 82, 6, 74, 52, 30, 241, 195, 227, 234, 102, 42, 210, 109, 50, 209, 119, 52, 202, 105, 149, 156, 254, 29, 64, 91, 163, 145, 241, 157, 34, 159, 237, 204, 209, 30, 47, 67, 124, 119, 168, 125, 246, 104, 88, 81, 195, 68, 182, 65, 167, 154, 130, 146, 115, 206, 165, 205, 186, 113, 193, 211, 211, 199, 159, 146, 12, 252, 151, 70, 241, 239, 106, 164, 31, 91, 190, 76, 95, 74, 220, 193, 153, 16, 29, 210, 179, 182, 103, 82, 200, 66, 18, 118, 187, 83, 3, 91, 99, 28, 189, 144, 149, 210, 128, 196, 227, 207, 2, 186, 139, 78, 249, 90, 103, 65, 48, 118, 142, 161, 231, 93, 162, 66, 80, 113, 84, 150, 254, 128, 159, 146, 4, 224, 98, 90, 251, 199, 38, 215, 112, 158, 1, 82, 162, 155, 4, 214, 39, 117, 203, 115, 159, 7, 244, 55, 40, 255, 170, 26, 92, 210, 10, 40, 0, 148, 191, 153, 41, 181, 148, 2, 57, 106, 71, 18, 212, 227, 97, 211, 254, 163, 34, 180, 248, 146, 147, 142, 71, 99, 246, 91, 104, 203, 180, 90, 141, 112, 27, 64, 31, 220, 163, 70, 4, 97, 131, 157, 243, 236, 43, 251, 60, 104, 47, 174, 37, 37, 23, 110, 47, 131, 254, 86, 123, 99, 185, 220, 65, 17, 209, 113, 98, 131, 128, 157, 188, 44, 133, 45, 96, 135, 15, 185, 174, 186, 105, 156, 145, 98, 115, 233, 1, 209, 29, 94, 212, 238, 86, 189, 139, 107, 152, 91, 54, 19, 206, 33, 82, 35, 226, 37, 4, 60, 132, 246, 113, 95, 110, 36, 156, 100, 110, 175, 71, 85, 74, 250, 68, 155, 85, 135, 247, 165, 185, 214, 104, 89, 240, 218, 231, 227, 110, 29, 60, 161, 123, 235, 244, 246, 108, 112, 87, 209, 73, 220, 226, 5, 194, 86, 4, 58, 51, 13, 42, 25, 149, 194, 42, 179, 206, 84, 35, 212, 10, 32, 41, 86, 47, 120, 8, 146, 98, 102, 75, 205, 2, 64, 187, 130, 23, 205, 194, 93, 0, 42, 145, 198, 49, 200, 66, 48, 15, 194, 29, 232, 171, 184, 220, 144, 206, 101, 245, 171, 206, 73, 34, 221, 1, 15, 192, 214, 98, 236, 43, 180, 147, 226, 106, 224, 178, 26, 95, 250, 201, 148, 25, 227, 232, 231, 220, 27, 147, 129, 112, 129, 80, 20, 218, 249, 58, 63, 2, 182, 190, 198, 41, 88, 84, 69, 239, 88, 163, 223, 39, 172, 246, 48, 98, 137, 64, 119, 237, 126, 20, 112, 211, 200, 30, 102, 54, 97, 5, 82, 217, 200, 89, 108, 238, 159, 42, 77, 130, 43, 246, 12, 102, 164, 195, 111, 247, 242, 168, 220, 242, 117, 27, 214, 0, 66, 46, 72, 255, 251, 181, 27, 250, 93, 120, 177, 9, 145, 29, 203, 26, 77, 27, 107, 82, 196, 209, 42, 116, 243, 193, 202, 10, 210, 22, 31, 119, 119, 2, 82, 50, 49, 227, 59, 78, 232, 185, 50, 214, 7, 88, 172, 214, 245, 88, 68, 32, 50, 234, 238, 149, 34, 87, 210, 182, 194, 33, 133, 240, 104, 173, 199, 15, 37, 23, 134, 196, 214, 38, 222, 19, 131, 165, 74, 183, 154, 210, 110, 242, 150, 67, 17, 169, 62, 226, 85, 24, 139, 229, 202, 247, 76, 86, 90, 216, 74, 140, 230, 128, 47, 105, 226, 240, 3, 251, 75, 160, 84, 144, 255, 109, 91, 216, 38, 122, 47, 250, 218, 116, 8, 141, 17, 56, 186, 238, 10, 106, 115, 208, 115, 155, 127, 135, 235, 100, 70, 72, 148, 128, 48, 36, 23, 3, 222, 70, 99, 79, 164, 212, 82, 72, 254, 71, 224, 211, 96, 132, 166, 239, 110, 58, 213, 239, 122, 223, 58, 133, 133, 235, 66, 183, 197, 89, 248, 23, 47, 140, 40, 206, 36, 168, 184, 212, 211, 239, 29, 211, 178, 140, 27, 37, 17, 72, 3, 246, 114, 130, 122, 24, 143, 247, 64, 146, 183, 197, 168, 171, 96, 96, 177, 28, 45, 169, 164, 58, 174, 197, 46, 185, 209, 88, 237, 217, 167, 172, 166, 52, 223, 50, 230, 15, 136, 153, 23, 211, 112, 73, 235, 232, 215, 219, 104, 200, 103, 242, 12, 52, 96, 90, 57, 215, 225, 142, 198, 216, 104, 74, 140, 42, 231, 227, 125, 149, 187, 9, 98, 51, 55, 51, 76, 228, 195, 145, 190, 115, 91, 191, 184, 121, 253, 49, 248, 121, 29, 81, 127, 168, 104, 2, 75, 44, 231, 50, 63, 9, 217, 109, 41, 7, 2, 129, 197, 149, 209, 70, 94, 115, 28, 80, 211, 58, 89, 234, 37, 3, 57, 36, 87, 197, 14, 91, 175, 222, 110, 24, 10, 222, 71, 44, 69, 176, 236, 47, 192, 163, 150, 73, 134, 109, 95, 227, 139, 14, 158, 183, 121, 42, 230, 16, 211, 143, 41, 10, 241, 112, 16, 101, 237, 229, 103, 144, 6, 197, 179, 70, 146, 214, 118, 50, 119, 100, 221, 79, 176, 128, 161, 49, 199, 220, 39, 98, 231, 63, 153, 93, 190, 108, 115, 155, 56, 167, 227, 211, 24, 198, 137, 180, 138, 82, 121, 43, 246, 214, 19, 180, 104, 55, 166, 13, 17, 22, 239, 98, 101, 60, 250, 25, 171, 17, 172, 179, 5, 200, 127, 227, 106, 8, 192, 133, 235, 234, 38, 183, 148, 100, 13, 232, 106, 86, 225, 14, 217, 222, 71, 37, 49, 237])},
{encoded: "2b4UJdip8A5WJbNpKFd1S3vHqE8mLSFM2b6LDYZSweLCbYtgRcLMT8AfJXYMjez2JUeQQ7LCkyVrx42tRBRfJG5o6pQu7ZcP3piwVguuQJPGWgcGwEGSSdbCS2YvQyWJ8EfqzCt48N2Qh4Q8sXJZA4Pf1V5D6cGr2VeFqBqeirbtyCEA7JZ7TR8zq75EZoEtk8iA68AgZ8R21Z9gSmk8CuwKghZmAztYNf3Y3EfTgqQFJYA4DrL6VYjzz7vCeckTFtMV5iDtPDYzUKeZUKsz5t4LUqc75Y1wkoMXtGqrJBRk4jzQKE7zQDkXSH7mGY6xMpwWaEaYnC8NZVZaYiZjrQd7FdMQXmbTSBXK2C6ZBdZRjBgE5HfvW3iopC18m6xBqtL53AF7Kg4LVkXNsXyzX38DLd48HMvdeMo6MDuhYcaf8fhqNjcDBTbVgZ9SBYsEqL4gJ1wB5cFsKXa1CsTZasjhFyhZr5BvA5mTavv3HDjx2W5pEwBDmbs6yNrjy66S85V8sgeFDDaaaTjmM6ZQ6N47an2Y4nBKTN96P7hZGZfV6X31LEofAap7ofaqtAhptBRmJLrDjzaEMD86SxK7ZB2MQvXwBFVUmWtpat6ELwQYVyeajry3Sgr7wZWpF68vhLbhqYr1SdDHHrMihSmb1cmASMo3p4BBX1J4KBSzmVSjYpQ2hGdNBmt5sxHEaBBff34ZD4YW3QwruM8ewJMQg8ZjZHZwuNz2NL9uWntur26ikuG5QxRyj8PfNSDVRAkyCa2Qqf44x7V3NT9pn3t1mm77i3QowCE1LzWns5yqMhZ3FcagdLr6rkp2GSoDjp2yGWqyxfDNa84oHDv9GEKVhJNZHDzMxAoMsQVmGeT8xdyGgqbbqHHSz34eTswTrLSYvgxe4PUcZGmMr6vQ1e41NcbH3gQwCzxr8P1qaGSN86gGMtbYy8CjNFA9QUgka2qpWcL3m8vBDAAC248iNRb4RmChzvgesxdxP9ibyUXxwS1EwZ2WriXKyXGACtV9JTbaw6Ky8T1UW3p4ekSf28swjgNzCNabjbHTLufjNeyaxS2eNnXTHykm44ut6uwcdHyQd4TPFkoZqRDCUZZDt8DrjFAPGjdhvHXpYsd9LT2AHt7zGpbZX6jrdfPSXDEm9QYH3LNngoc4XVXvanMTuAhiJFGsQCgp5uFrVvMnqpYCkUhJMvHEdkb7h9nNMREha3Cvh9SMmZwwpHC4t6WUFUgPBivztF4GC9xEJuUJ6DvJZf5kTo8UX5CBu3r7iNRSbdN",
decoded: new Uint8Array([143, 161, 185, 240, 217, 247, 111, 131, 117, 251, 182, 68, 113, 88, 179, 106, 219, 91, 191, 223, 133, 151, 55, 186, 252, 250, 79, 107, 175, 63, 82, 137, 11, 201, 85, 98, 203, 219, 222, 33, 60, 79, 145, 44, 44, 65, 238, 140, 100, 44, 121, 184, 60, 214, 217, 244, 28, 227, 101, 206, 132, 108, 234, 236, 151, 33, 129, 158, 17, 126, 181, 158, 148, 70, 162, 58, 252, 203, 253, 114, 175, 170, 193, 124, 132, 249, 153, 201, 174, 41, 83, 133, 15, 123, 62, 70, 78, 6, 222, 37, 66, 54, 246, 237, 159, 251, 73, 214, 215, 56, 70, 24, 86, 73, 218, 231, 208, 62, 165, 153, 177, 103, 120, 195, 220, 18, 186, 188, 12, 224, 85, 123, 177, 156, 108, 101, 2, 138, 198, 166, 221, 146, 26, 230, 181, 232, 239, 16, 198, 8, 255, 224, 107, 40, 203, 250, 185, 106, 139, 184, 79, 54, 86, 254, 106, 103, 217, 76, 67, 211, 191, 217, 1, 0, 252, 132, 166, 42, 112, 66, 233, 1, 73, 5, 17, 50, 16, 154, 90, 108, 77, 233, 67, 118, 163, 169, 29, 207, 82, 72, 129, 177, 39, 236, 9, 83, 52, 13, 136, 145, 207, 249, 54, 212, 171, 92, 78, 65, 32, 151, 238, 114, 151, 36, 101, 107, 73, 10, 82, 87, 47, 133, 100, 143, 58, 243, 232, 95, 163, 23, 40, 122, 205, 160, 187, 182, 139, 112, 114, 23, 69, 191, 136, 109, 144, 21, 31, 101, 51, 121, 130, 175, 232, 96, 182, 153, 161, 191, 91, 83, 238, 95, 96, 122, 242, 129, 167, 63, 26, 76, 179, 219, 15, 21, 16, 197, 246, 165, 90, 243, 58, 200, 201, 223, 128, 229, 187, 230, 175, 206, 216, 187, 136, 171, 224, 165, 71, 86, 172, 57, 33, 4, 170, 191, 225, 64, 18, 125, 74, 184, 151, 110, 184, 202, 85, 12, 204, 191, 169, 221, 30, 158, 85, 82, 94, 124, 55, 153, 122, 123, 240, 70, 81, 71, 67, 64, 94, 239, 214, 223, 81, 194, 110, 179, 231, 130, 112, 230, 192, 39, 142, 114, 121, 39, 7, 59, 48, 189, 226, 32, 213, 91, 210, 7, 146, 120, 204, 119, 13, 30, 17, 117, 201, 149, 80, 147, 198, 95, 129, 109, 71, 11, 19, 119, 175, 206, 155, 129, 240, 136, 109, 148, 3, 19, 7, 25, 98, 201, 22, 157, 36, 232, 93, 66, 246, 240, 188, 145, 49, 228, 89, 35, 95, 10, 95, 136, 98, 63, 117, 218, 0, 151, 36, 68, 21, 180, 249, 233, 144, 78, 115, 59, 36, 167, 173, 208, 86, 84, 138, 68, 68, 187, 53, 18, 64, 172, 185, 133, 46, 46, 234, 160, 227, 42, 0, 184, 202, 145, 101, 112, 178, 163, 218, 216, 170, 90, 238, 9, 117, 151, 21, 250, 214, 57, 192, 61, 38, 0, 240, 190, 70, 74, 134, 59, 130, 216, 228, 81, 245, 114, 3, 84, 26, 87, 235, 172, 118, 125, 230, 118, 187, 2, 103, 138, 107, 130, 142, 186, 34, 240, 166, 164, 190, 24, 184, 88, 127, 172, 115, 159, 180, 150, 226, 85, 73, 47, 192, 87, 229, 93, 10, 98, 211, 42, 102, 136, 103, 41, 116, 141, 123, 142, 153, 247, 168, 21, 117, 241, 145, 170, 75, 6, 172, 106, 238, 202, 149, 206, 172, 55, 78, 188, 75, 91, 34, 13, 56, 136, 10, 237, 66, 42, 161, 237, 170, 62, 55, 223, 23, 204, 96, 197, 164, 82, 191, 67, 133, 252, 231, 74, 109, 114, 79, 146, 65, 161, 153, 83, 23, 239, 199, 61, 94, 22, 138, 113, 226, 168, 35, 150, 26, 58, 14, 148, 98, 141, 117, 246, 178, 180, 251, 240, 239, 204, 119, 30, 101, 233, 150, 146, 196, 248, 91, 230, 68, 25, 69, 24, 169, 110, 250, 26, 184, 10, 31, 237, 28, 202, 129, 9, 169, 74, 85, 235, 13, 97, 65, 249, 111, 131, 9, 209, 124, 43, 203, 126, 88, 187, 157, 243, 82, 47, 9, 184, 150, 192, 92, 137, 75, 78, 210, 5, 218, 175, 230, 110, 72, 35, 35, 70, 219, 49, 0, 52, 200, 83, 24, 7, 33, 130, 193, 19, 163, 86, 5, 53, 110, 58, 221, 122, 142, 243, 15, 192, 237, 25, 151, 18, 238, 9, 150, 1, 69, 58, 24, 58, 122, 236, 138, 220, 13, 103, 65, 228, 127, 87, 60, 115, 198, 109, 177, 116, 208, 16, 46, 159, 95, 59, 67, 195, 97, 216, 163, 11, 223, 23, 232, 41, 165, 56, 82, 27, 21, 63, 167, 143, 234, 6, 31, 255, 25, 156, 218, 69, 250, 78, 248, 63, 20, 123, 205, 57, 90, 175, 36, 233, 237, 243, 193, 2, 33, 102, 121, 34, 5, 126, 188, 159, 147, 202, 5, 187, 238, 105, 215, 156, 246, 83, 14, 241, 57, 44, 145, 229, 154, 228, 245, 190, 33, 81, 72, 224, 189, 175, 57, 41, 227, 16, 228, 236, 183, 159, 157, 11, 95, 32, 180, 232, 96, 151, 33, 24, 125, 87, 176, 95, 252, 132, 116, 199, 138, 95, 103, 22, 12, 79, 235, 84, 239, 230, 135, 78, 125, 193, 156, 76, 197, 197, 119, 70, 85, 192, 147, 39, 158, 103, 195, 128, 157, 53, 187, 231, 144, 137, 35, 213, 84, 147, 33, 198, 4, 43, 56, 108, 86, 103, 83, 111, 116, 134, 91, 95, 238, 214, 245, 163, 146, 196, 85, 23, 62, 9, 131, 57, 193, 184, 6, 1, 12, 30, 217, 130, 208, 40, 200, 205])},
{encoded: "ABxm8AvJ54fYUkTPGMERmWRFj6SksQfFsvZYVEctHSiQaPkLhJRVL51WXn3m5HMHTqgRiatSCnUn91aC2JC33fdRP4aRvKDjtub7b3W4wiN77uqnPvhH3ZJ9LPotjePDWq",
decoded: new Uint8Array([117, 189, 79, 220, 178, 161, 157, 17, 243, 242, 173, 184, 28, 115, 246, 225, 80, 7, 37, 196, 255, 167, 22, 40, 15, 73, 229, 238, 32, 114, 96, 190, 155, 198, 216, 123, 235, 129, 24, 237, 31, 243, 190, 100, 160, 187, 35, 162, 161, 184, 46, 152, 77, 64, 162, 204, 116, 181, 178, 180, 41, 214, 95, 110, 149, 206, 145, 108, 83, 151, 109, 33, 165, 207, 244, 88, 10, 74, 77, 209, 222, 198, 200, 206, 136, 159, 251, 116, 30, 26, 151, 213, 74, 33, 50])},
{encoded: "SkreceN7hpEVV5r13tfFwNkK3PMqhsSYLAteDc5HbrJME5dRcxUXxuBXhw5YhUWYdfnorjYHiDaHduygMq9G4MYFKFa9AxX6UXE6usbh7UTnCVHu1Ui2XHmzFbADYcbZPxcfKc6ar22ucy5axUQaWS5eSH5f8Z3F1xjCnmvEqto5F9PbukLNqrr3CD3pa5jY3aUs93R9MBPY84jtbLpkXuiQBskX7q485qwFryvPasi9h69JH7nF5W5GZfiZDoxjCGsiVtzNgkqTmvwZvhV6ZheECmU6CYEjyevSmLVBvrFUn4sQ78c61dzxdvxZV2bSkHKqDsHbs",
decoded: new Uint8Array([68, 208, 37, 157, 54, 219, 81, 238, 246, 70, 238, 86, 28, 6, 223, 6, 29, 82, 162, 127, 144, 118, 18, 38, 190, 62, 74, 219, 64, 171, 110, 229, 1, 81, 176, 242, 224, 221, 109, 158, 65, 217, 72, 56, 10, 72, 127, 215, 30, 244, 178, 168, 19, 126, 119, 252, 220, 149, 101, 198, 59, 208, 255, 64, 31, 16, 105, 42, 237, 92, 245, 0, 48, 175, 182, 39, 95, 130, 229, 153, 86, 135, 78, 66, 50, 75, 212, 197, 165, 98, 186, 203, 10, 25, 114, 215, 141, 39, 118, 223, 138, 230, 188, 163, 29, 2, 182, 149, 251, 107, 129, 194, 238, 54, 81, 30, 153, 210, 156, 93, 101, 69, 255, 64, 65, 142, 169, 242, 109, 251, 232, 126, 157, 228, 3, 245, 112, 193, 198, 183, 18, 70, 86, 18, 68, 144, 86, 115, 177, 8, 72, 236, 173, 102, 23, 49, 119, 113, 142, 186, 168, 202, 255, 98, 162, 243, 218, 180, 227, 182, 92, 204, 31, 174, 186, 225, 213, 103, 161, 11, 189, 212, 188, 34, 200, 17, 81, 195, 58, 230, 161, 229, 134, 38, 198, 218, 168, 199, 92, 75, 39, 188, 238, 252, 55, 154, 251, 58, 169, 85, 103, 185, 84, 52, 189, 163, 185, 6, 213, 150, 67, 216, 216, 188, 183, 43, 38, 195, 82, 81, 34, 162, 107, 97, 119, 156, 89, 74, 141, 30, 54])},
{encoded: "Bo14fRGaTxJMGFHrmxWvPcYDMpag3Gqmw45QBzun5qUvhr7kgfmjyZwPB4oUevp3NCBT9pbMfhXVLmWfj5VEnLWvRTibK3phEHErD7TWQgjEAWm8s5etPoNTQBuAe9E1tw9UHmm58CYvfKRkofWaYkLwRZDQmV9DkzdFaMsAsrbf1rS79GAWSusz4aA6aLjfyRDZUtgxZw49q5agMgTruneAHrTQFraUfjCdL6meQpPP7n3sF3YxYkXtbvSEaGdPsWLLGJqLRkqbwmd5UaNkYrRD7fLNNMU7fHES9zfqZ9jERZ6c5gT9NFxmavi9YgKPwyLSXhukzRu15yDZWM9AJd85kjbgpbPAoDhqn3EoKiVHZ8HWDpFb1aXN9FmqmxEjWiEjYnQqFx1ssTY1JAu1HXnvxWNaJ6RjN7ueuDNZE2vQaBwBwKjoXjfgzFJ6mifFSden1Mxe7n18nH3SYcD5E8ZcXGQCgSYZoiXGEbT2x1HHYpqVnkQK4reqPMW3uDw8ZL54VxUkh4MU8nMYBoxn1cpNADvD4sNctPpE21QkXn2Rv7XnCaoXm1t4HHLQmnE2YjHMwe1hbQv46b5bHXRDL4N11B7Ch48JCJbNnuX5Tjobe6ETgrLBJuqVWSfXXdtRMfg3moso35RUGiwXBEHuLvLfmRb29Su1ibxx5FBM3ux5TwXiLU94sPyX7aCyBS8bwozkcJMYMVvJwYG486su3UDjByCyVSNbkVEqULrgewindAqmYxf3bYF9V5nfZ2VDqB4a8dB4UEXMeH6tqhwyri1VveV1bRJB5G8deKbTdvjHfTGSAgWmgPhPkPi1wH7woF2dRZA9CJkbkhV6T1dALZsZSAa6L1BSAnA9qHd3e2f4uHeAdB4LKv6DukRU3TegZaAveNMECeoFveN84CF3989MVewSbgnsPrCVMspKu16gDqchTWQYSKsknttoHA6zJkHPvgf5LWxZ62TH9dQ9JKoSLbA66fJvBkVntQ2VnNkcXWnfP5g84PmLZGxPGp8Kve4Tmw8PfqMM7jjbLfuKqT4H4yKGxbjWz4eezzLvD7xocVEkabqggKEqKvmhk3ingsYhbPrKg1xjc1wWnr5fUESXtmLLyYkJRoqPKEJ62js",
decoded: new Uint8Array([123, 176, 50, 84, 233, 147, 178, 112, 47, 139, 124, 155, 180, 87, 229, 193, 126, 6, 197, 179, 222, 10, 185, 31, 97, 128, 59, 134, 175, 27, 239, 192, 40, 133, 175, 111, 91, 184, 112, 197, 155, 135, 188, 51, 3, 233, 180, 39, 200, 71, 165, 212, 244, 28, 140, 75, 7, 196, 123, 35, 89, 165, 238, 185, 34, 45, 226, 18, 156, 196, 225, 139, 243, 57, 21, 27, 111, 108, 65, 50, 49, 46, 170, 102, 209, 156, 81, 100, 112, 58, 34, 73, 255, 179, 82, 81, 219, 95, 183, 215, 73, 245, 68, 230, 51, 74, 7, 175, 50, 133, 131, 18, 127, 220, 229, 205, 172, 172, 55, 146, 231, 221, 2, 149, 210, 151, 71, 204, 130, 168, 134, 62, 135, 198, 127, 89, 169, 187, 154, 255, 134, 47, 96, 85, 160, 65, 115, 84, 68, 223, 185, 58, 145, 112, 167, 43, 96, 194, 126, 189, 7, 240, 0, 33, 144, 164, 21, 122, 130, 68, 221, 47, 200, 254, 117, 188, 131, 76, 249, 165, 125, 114, 39, 136, 174, 106, 49, 122, 156, 100, 186, 250, 108, 217, 153, 65, 147, 104, 203, 166, 213, 200, 246, 148, 131, 53, 228, 19, 137, 94, 236, 141, 60, 59, 238, 49, 63, 169, 167, 182, 222, 76, 241, 29, 195, 219, 129, 138, 47, 209, 91, 57, 123, 229, 249, 82, 179, 184, 38, 110, 18, 198, 86, 114, 58, 126, 180, 157, 82, 148, 21, 125, 80, 150, 214, 71, 108, 1, 181, 48, 201, 4, 74, 186, 241, 198, 241, 223, 214, 190, 137, 234, 48, 183, 101, 5, 162, 116, 96, 31, 96, 213, 75, 70, 223, 140, 209, 51, 197, 186, 29, 101, 8, 154, 190, 217, 84, 170, 94, 116, 69, 24, 132, 194, 167, 94, 24, 1, 130, 98, 42, 185, 38, 106, 3, 55, 12, 188, 134, 52, 159, 79, 152, 38, 15, 107, 26, 127, 194, 160, 162, 97, 151, 146, 44, 231, 107, 185, 226, 44, 162, 53, 143, 148, 129, 163, 195, 60, 188, 52, 214, 89, 52, 204, 56, 67, 203, 6, 72, 211, 123, 130, 220, 52, 248, 247, 8, 254, 24, 191, 115, 175, 98, 2, 196, 99, 84, 133, 44, 35, 126, 28, 115, 119, 31, 125, 55, 46, 205, 160, 103, 156, 142, 37, 230, 229, 243, 60, 101, 20, 112, 8, 139, 41, 152, 173, 234, 151, 59, 32, 66, 45, 246, 81, 37, 232, 116, 39, 159, 2, 54, 59, 185, 29, 158, 212, 222, 95, 237, 190, 6, 114, 9, 75, 87, 195, 126, 203, 79, 77, 113, 175, 108, 7, 16, 161, 105, 217, 192, 119, 161, 122, 127, 196, 197, 173, 238, 243, 144, 97, 128, 12, 142, 76, 223, 24, 12, 205, 91, 22, 67, 57, 52, 157, 138, 251, 24, 164, 200, 78, 132, 30, 158, 254, 86, 185, 54, 28, 169, 209, 43, 175, 213, 168, 143, 185, 132, 92, 158, 62, 82, 245, 220, 145, 155, 1, 229, 28, 233, 138, 96, 64, 112, 52, 44, 95, 135, 73, 80, 198, 12, 106, 4, 193, 128, 170, 125, 112, 211, 153, 62, 18, 49, 138, 127, 148, 32, 72, 231, 58, 219, 146, 10, 183, 77, 53, 153, 224, 0, 77, 184, 194, 230, 239, 45, 50, 137, 36, 109, 240, 107, 46, 231, 143, 241, 246, 235, 72, 59, 106, 33, 56, 223, 30, 215, 141, 4, 192, 130, 120, 14, 110, 183, 111, 196, 59, 205, 231, 244, 60, 105, 49, 162, 160, 72, 148, 144, 161, 231, 133, 220, 10, 163, 86, 102, 50, 157, 229, 85, 49, 123, 230, 64, 86, 182, 77, 152, 148, 123, 107, 154, 130, 164, 222, 102, 221, 31, 46, 149, 58, 12, 142, 170, 109, 176, 111, 213, 136, 68, 39, 141, 129, 16, 205, 226, 16, 71, 206, 112, 217, 171, 170, 114, 48, 65, 22, 49, 96, 0, 150, 27, 209, 171, 159, 183, 190, 150, 170, 222, 46, 248, 53, 87, 235, 161, 195, 142, 135, 192, 74, 138, 194, 114, 230, 88, 155, 119, 248, 93, 185, 196, 126, 151, 96, 128, 23, 58, 204, 26, 232, 211, 166, 55, 132, 43, 9, 41, 196, 170, 212, 198, 176, 74, 231, 12, 153, 216, 109, 73, 232, 247, 44, 140, 192, 222, 114, 127, 232, 82, 43, 208, 174, 21, 248, 238, 216, 167, 148, 250, 249, 234, 134, 237, 85, 254, 59, 244, 26, 10, 233, 138, 211, 161, 104, 69, 99, 143, 129, 134, 179, 123, 101, 70, 63, 26, 39, 183, 197, 106, 230, 124, 65, 169, 34, 241, 170, 129, 186, 187, 123, 10, 186, 195, 3, 37, 234, 107, 239, 163, 46, 37, 213, 241, 48, 19, 227, 47, 45, 217, 91, 87, 250, 172, 87, 215, 205, 119, 131, 227, 115, 231, 236, 226, 167, 227, 185, 112, 5, 255, 148, 228, 150, 24, 174, 227, 33, 60, 82])},
{encoded: "mdC8r1jtY64SpdBv3nERX12WHdXHWLzoStHqHDZF9CnFkG2HhbuCxk9FykJJPwt7U8yFeCV8auCaAPikcEr5XgBceGpixuNXkipuuNHnAzN6xFk9ime3EBP4XqsGLvEnc8L2pW21RuLVM953AXtBJ1LeAbhwkm1iCPZRNLH3mPX9wN8C8F3eTmuSQmynwHMtBZhbvHC748KVTnRduywMGLNLER35F1iyhrsNoAfe8b4Q3xr2dtMBMvyM6p15kVnGsV4z3TpSazoM4U5r7YB3Hm3djvotnpx9xqo58c9L9YZNEt3WL9125R1ujN1MfKrK4jjNaXU8SH7t95XcFVZZkmioGRkfpaPZv8kbSkS1XZ5F13ph1V8Upkq8xsuvEnEZaeb8D5SwL6Djkg",
decoded: new Uint8Array([8, 144, 66, 123, 49, 132, 140, 124, 186, 86, 152, 120, 81, 10, 9, 178, 135, 138, 158, 217, 184, 236, 79, 103, 249, 69, 221, 77, 246, 52, 77, 255, 131, 72, 217, 178, 81, 34, 4, 164, 8, 15, 19, 80, 226, 123, 78, 26, 56, 103, 158, 243, 108, 170, 60, 158, 27, 231, 108, 16, 100, 207, 115, 156, 245, 65, 76, 245, 22, 174, 120, 137, 140, 172, 118, 255, 81, 94, 168, 140, 48, 163, 17, 32, 70, 197, 20, 43, 47, 236, 194, 134, 222, 75, 22, 158, 246, 107, 177, 136, 237, 88, 158, 53, 100, 131, 224, 169, 140, 89, 202, 160, 136, 234, 192, 185, 229, 111, 220, 136, 37, 1, 45, 140, 187, 180, 46, 105, 33, 235, 43, 179, 198, 31, 13, 205, 36, 101, 10, 108, 61, 49, 239, 121, 154, 102, 189, 79, 56, 140, 26, 57, 62, 240, 237, 177, 230, 129, 222, 183, 218, 35, 238, 56, 37, 26, 194, 72, 119, 142, 124, 182, 13, 27, 111, 49, 212, 162, 125, 82, 122, 94, 192, 179, 105, 100, 249, 36, 80, 19, 230, 19, 89, 163, 233, 179, 198, 48, 52, 77, 146, 192, 122, 91, 89, 75, 94, 89, 219, 118, 159, 143, 202, 240, 173, 45, 172, 147, 122, 107, 12, 157, 75, 176, 24, 148, 232, 205, 162, 39, 228, 20, 218, 149, 66, 55, 43, 220, 89, 188, 30, 64, 92, 147, 243, 7, 110, 145, 59, 90, 44, 23, 61, 23, 35, 192, 146, 52, 169, 138, 61, 2, 226, 223, 57, 232, 169, 49, 83, 58, 92, 170, 6, 83, 219, 22, 190, 54, 170, 142, 237, 69, 1, 178, 128, 150, 238, 95, 16, 154, 119, 221])},
{encoded: "4JvLRK7oWQkwMqV14P637APn89jutDgJvGNgCi1fbgf7D2ZVbmVA2fcNgjCVvJBUtoor1s7Q2mshWnLed4otH9rx3QMYpEbSsBBHZcxddrgS6GSi1qPfsgcQzi9oje8Sw3v7Sw73DpqG5sRpMgPhxzBEDkBCxR5LuM3b13mNbhSD9fv8CW7NKBBb5ni8bgVcUBr9Kzz1uW5PdWxVmxX1FjGgaFSkSt8QeyQfTni4n65hyCubtjRBzmfHN73a4DtZ6Dmhm5QpfWrNiXKc3frChX1swBqvirUBS2nNe2vT6AckvhUEWRnhyPHZdeadp6sGZzLcfrTR9rkV4M1m6DaD7WhscPPctTRz2rHV6NF68YEjHyet7MYxms8yRCyAdhPzzWmVM19ENJUBn9yTM6qfvx1sahAcBSXfdVSa7SE5w5s8Ajybi6Yoz5dRTeYko3tvJTEkK4EnR6hVN4JPXhnAJaHQegeobX4nm2ci9Z7cPtqm8xjDcVddsomGNEGAGrZWVsbXmxD2zN23Shefmn7VNoH4bA5jkAuNkanxziryEygutgG",
decoded: new Uint8Array([89, 63, 223, 155, 115, 53, 80, 162, 95, 139, 176, 171, 99, 77, 137, 19, 238, 110, 199, 2, 137, 193, 9, 193, 245, 92, 140, 9, 126, 53, 40, 218, 174, 27, 114, 12, 45, 150, 240, 167, 154, 253, 103, 92, 48, 54, 44, 28, 54, 186, 203, 138, 149, 69, 181, 66, 124, 74, 51, 24, 198, 247, 245, 8, 224, 229, 224, 20, 167, 171, 114, 242, 154, 142, 161, 121, 246, 92, 163, 87, 68, 68, 59, 196, 149, 219, 87, 38, 192, 53, 245, 22, 31, 159, 60, 73, 228, 23, 228, 41, 217, 56, 14, 24, 53, 147, 201, 214, 17, 83, 181, 236, 5, 122, 181, 233, 86, 152, 153, 87, 176, 170, 50, 251, 158, 15, 161, 37, 137, 116, 197, 76, 96, 133, 245, 48, 146, 189, 90, 39, 41, 229, 83, 33, 59, 243, 46, 218, 156, 139, 44, 21, 208, 105, 32, 154, 93, 165, 54, 102, 129, 22, 117, 85, 226, 173, 101, 45, 101, 19, 152, 116, 143, 120, 199, 134, 75, 57, 109, 37, 114, 21, 145, 133, 169, 189, 83, 175, 189, 111, 81, 91, 42, 193, 218, 8, 62, 96, 140, 4, 153, 87, 190, 133, 229, 23, 160, 201, 114, 205, 8, 171, 73, 131, 78, 28, 163, 52, 10, 10, 173, 208, 147, 131, 211, 219, 87, 22, 250, 199, 26, 10, 17, 165, 22, 67, 171, 114, 124, 61, 162, 136, 199, 143, 77, 181, 222, 156, 5, 37, 29, 196, 6, 148, 116, 245, 237, 123, 127, 89, 73, 242, 30, 75, 46, 11, 204, 86, 114, 95, 35, 98, 195, 176, 191, 182, 79, 159, 29, 185, 230, 34, 73, 162, 77, 187, 0, 18, 67, 126, 164, 97, 101, 59, 127, 254, 114, 192, 103, 48, 172, 139, 6, 31, 138, 2, 183, 90, 138, 209, 7, 98, 94, 136, 20, 14, 35, 162, 56, 246, 191, 239, 30, 1, 78, 185, 159, 147, 211, 162, 60, 206, 68, 190, 151, 238, 156, 251, 140, 32, 15, 151, 201, 41, 27, 77, 142, 8, 30, 194, 246, 160, 201, 146, 74, 227, 41, 109, 40, 134, 201, 238, 131, 105, 106, 196, 127, 131, 93, 84, 189, 177, 106, 198, 244, 214, 231, 96, 239, 208, 17, 28, 220, 177, 211, 108, 218, 76, 53, 204, 229, 45, 127, 9, 90, 203, 212, 77, 250, 149, 63, 89, 17, 28, 158, 254, 236, 243, 225])},
{encoded: "9hVbuGTZautUQtWX368UTdg9Htsp8o9bnSjQuFHfaua28dFuZMKThfNt6CTJ68Vc9ELjjY11t7BT8vc5SkRdNJrKiKGcq8LXq5Edt3fqQY4uTVmYyPL4NPGi94pmfuParR47Z2ZfspsXHx1gwwk2AXAxBfjAmDbbAdx7hRXRHLbJk4HEWUVLoJianBpeuSv9zLsmDuVKCuse6oApa38dSMz89Dj5XGweiNfUHZ77ngvoysjWYMv1Sdd8vvJo76mjfJSdgF5vRj8nzt458E24inUpGMMyDrCnjwziJs78i2Dj2e8VA3h2sa27QyNURo5oKs2QwfKviWQaFKBp2FNt4oc8vujuf9FfGGoVCpas4kmwFA8p3J2SDcxpjnciYo8szcn8sx8bqAuQ9PCf7vxp6FWnD2MMvAMg7EcbGFU4FqLb4Hpmy25fYJTn8TBHy2L25KSc2qxg73E1K8nzFBoYjuqjGSRmqkUkybVFmf3sSS7Z4arwM294vm3huTomT9jodg2nf1yWAtD5TKbvzMfmFxJ8rZUS9YQDhWwmv7hN1v9HgVxZKocAtiNYWn1pwKxVJgYQmdeMgCBgrAgpGCWsVfGfdFknNN4MWheHne2iggHx5RprFJ5m9rmgdbSmVtMpXoBZtqMWC7n7jbq6tsGGARee6MTr",
decoded: new Uint8Array([84, 25, 152, 99, 97, 119, 239, 225, 46, 52, 32, 22, 145, 225, 45, 236, 179, 116, 11, 0, 162, 108, 182, 105, 63, 223, 161, 118, 31, 80, 201, 225, 8, 41, 121, 48, 1, 208, 38, 16, 34, 145, 26, 231, 145, 185, 117, 156, 24, 201, 198, 198, 249, 36, 16, 39, 104, 26, 148, 121, 6, 134, 50, 107, 92, 166, 209, 252, 107, 219, 165, 118, 43, 199, 143, 143, 15, 106, 174, 237, 216, 96, 108, 167, 123, 219, 252, 82, 121, 26, 245, 69, 186, 221, 30, 22, 140, 103, 246, 110, 103, 186, 170, 94, 175, 229, 71, 167, 31, 143, 164, 54, 62, 65, 41, 106, 226, 162, 47, 24, 228, 196, 104, 169, 83, 182, 149, 166, 42, 169, 55, 201, 50, 133, 93, 161, 49, 193, 100, 39, 70, 85, 3, 222, 205, 109, 87, 227, 189, 217, 206, 235, 245, 216, 219, 218, 153, 147, 126, 42, 85, 215, 249, 58, 117, 70, 13, 130, 5, 199, 119, 10, 6, 187, 160, 141, 197, 191, 254, 0, 38, 169, 148, 141, 199, 122, 115, 103, 37, 204, 47, 242, 95, 181, 134, 183, 78, 18, 4, 2, 29, 6, 88, 27, 196, 133, 185, 94, 29, 230, 127, 162, 86, 18, 186, 163, 164, 22, 27, 190, 164, 140, 22, 7, 227, 186, 26, 132, 224, 128, 126, 237, 138, 9, 191, 184, 65, 165, 16, 137, 240, 147, 21, 197, 105, 103, 192, 45, 79, 178, 135, 63, 118, 101, 145, 137, 242, 56, 127, 46, 63, 49, 255, 241, 113, 37, 72, 12, 21, 111, 207, 185, 54, 61, 47, 105, 56, 12, 184, 147, 121, 131, 111, 32, 192, 215, 1, 2, 149, 31, 212, 87, 62, 174, 21, 8, 93, 147, 15, 83, 179, 99, 18, 121, 14, 19, 171, 26, 127, 231, 191, 246, 109, 163, 11, 209, 155, 214, 13, 173, 78, 58, 75, 13, 24, 113, 14, 83, 251, 224, 121, 137, 235, 38, 49, 180, 181, 227, 48, 186, 23, 87, 150, 169, 177, 103, 118, 41, 46, 241, 20, 81, 32, 186, 199, 140, 165, 139, 174, 236, 139, 25, 249, 112, 243, 56, 208, 234, 139, 223, 169, 174, 79, 112, 111, 92, 234, 136, 85, 8, 195, 78, 214, 21, 67, 238, 3, 47, 132, 77, 249, 21, 143, 208, 252, 175, 43, 14, 247, 57, 73, 21, 108, 150, 161, 58, 155, 55, 182, 127, 223, 81, 26, 76, 49, 12, 131, 148, 47, 107, 247, 96, 104, 73, 235, 63, 160, 38, 39, 216, 94, 227, 172, 146, 155, 33, 148, 101, 7, 66, 99, 205, 139, 139, 120, 252, 37, 184, 116, 26, 255, 22, 180, 66, 130, 59, 173, 101, 1, 83, 122, 250, 30, 127, 248, 101, 2, 43, 27, 71, 45, 18, 156, 102, 103, 128, 107, 134, 162, 253, 14, 38, 255, 137, 245, 226, 61, 172, 157])},
{encoded: "25BoqoZ8cXTghFQMovjsdKnbxUpmp9Go1ck1cuD36XoUL295HNXKkRbBzFd3fdQ8Qn9ayJgTsxiGsjf2nyRRoDpaoqxaq9dDMUugpRQ5TTigynwdSA65YzNr2mrp1s9ioSpLhuyK1sTCnNHwEby6JiH6pbPi3kbUUfvTq8ncciLu2GcS5ensza5QUJbstnTjtjjLBpL1zopj3XGd8x85R3yWj7ZNciPKqaY3Ej6ECEwnanMjVmjRVQ7mLhkFYtmdixBZALjDprobXrRYc5tdYWuod21f4mbSxD9KjMcNbAnfKb2AJ611LDiP4q2JAcSDhRBecbMt5nKwLo7LkT8uyxNW8aHbS6Cpps8VQjuPALGMDhcs7rEWyyrtkrKVEDoinUdBLxZR8iqFPyXZj7owxGXxWbxkekS5yWYRRzmppGscG7Q69fcpj5DfEezxnFgkBMcghnQP64UNjMV1tKDG7QmosGxi5fnTe7mctwkkVv5dfbQ3obCNiH5uDupq493JvL4CdVaG3FXGVFgweH8u8S36tByf1dUdVdobFMe6auVZVCTTAtAExx9SUxLs8WxtMwJeyY8eMKYmYAXxmPr7VpRzUX397pH6WUDpVLorrQ2ChqNoxHSGrhpo7U2Tc8QPaZ63Je6pfmUbxi3uxb6DtbTiCCQxg34vUQ8Zw5HDw89oEykVpVjhUtpEdyTHgh7qBYbi7CLESSULmZpPQf65f4XDVCyUZo5LtveyTY5KMBzb2HTdQ",
decoded: new Uint8Array([39, 117, 76, 88, 219, 110, 120, 139, 76, 127, 108, 254, 51, 96, 81, 212, 173, 249, 164, 123, 176, 205, 126, 70, 222, 217, 184, 85, 91, 85, 191, 104, 179, 211, 3, 188, 53, 248, 141, 185, 13, 221, 187, 33, 149, 109, 237, 146, 162, 130, 138, 229, 164, 151, 66, 117, 129, 244, 58, 28, 168, 61, 235, 174, 180, 197, 220, 231, 192, 25, 211, 44, 189, 16, 68, 219, 190, 139, 172, 194, 66, 12, 104, 76, 116, 230, 24, 4, 107, 212, 231, 152, 253, 200, 135, 167, 6, 108, 160, 81, 139, 151, 71, 105, 23, 197, 127, 253, 203, 102, 196, 180, 105, 167, 76, 86, 191, 148, 17, 225, 169, 201, 15, 22, 68, 146, 25, 5, 125, 159, 157, 196, 52, 106, 247, 133, 15, 32, 212, 228, 27, 241, 221, 219, 235, 207, 146, 97, 72, 221, 226, 77, 188, 156, 73, 32, 102, 109, 92, 216, 161, 223, 183, 212, 211, 58, 115, 91, 97, 165, 28, 100, 138, 164, 174, 157, 77, 186, 20, 194, 143, 127, 157, 162, 249, 92, 174, 67, 135, 49, 145, 252, 155, 70, 206, 123, 177, 102, 90, 118, 204, 98, 27, 224, 193, 140, 207, 116, 52, 102, 108, 129, 95, 234, 39, 6, 30, 145, 198, 255, 153, 179, 218, 160, 112, 89, 53, 32, 173, 68, 236, 9, 228, 22, 78, 113, 164, 227, 135, 233, 100, 30, 24, 9, 53, 224, 12, 208, 122, 126, 187, 183, 73, 64, 154, 36, 234, 120, 207, 200, 168, 90, 245, 129, 197, 64, 104, 14, 142, 0, 79, 223, 117, 164, 195, 92, 109, 34, 23, 90, 15, 40, 91, 167, 186, 9, 16, 142, 16, 60, 252, 68, 65, 39, 200, 48, 16, 222, 171, 196, 102, 59, 107, 70, 212, 105, 69, 121, 19, 183, 193, 220, 152, 102, 145, 113, 205, 136, 5, 197, 216, 173, 118, 46, 172, 26, 193, 15, 5, 231, 159, 194, 144, 69, 207, 20, 227, 45, 132, 117, 216, 96, 214, 136, 47, 187, 193, 7, 209, 81, 253, 177, 148, 175, 253, 2, 174, 161, 164, 211, 179, 43, 212, 213, 133, 251, 17, 122, 92, 128, 4, 196, 22, 144, 97, 2, 162, 180, 6, 186, 113, 68, 130, 60, 251, 150, 48, 37, 161, 220, 24, 60, 31, 187, 120, 76, 239, 166, 35, 67, 146, 5, 250, 252, 32, 21, 144, 88, 200, 86, 196, 197, 217, 103, 47, 175, 51, 63, 234, 95, 158, 221, 6, 39, 126, 110, 149, 211, 156, 98, 90, 204, 14, 230, 135, 115, 103, 38, 196, 87, 220, 84, 249, 142, 228, 242, 68, 22, 239, 108, 156, 149, 172, 249, 108, 50, 120, 60, 147, 184, 72, 163, 160, 165, 9, 3, 14, 194, 11, 42, 90, 60, 104, 136, 9, 99, 79, 55, 102, 83, 102, 199, 108, 197, 118, 8, 69, 246, 121, 28, 95, 137, 61, 201, 181, 169, 199, 211, 85, 143, 45, 168, 186, 101, 189, 24, 102, 179, 12, 216, 125, 63, 38, 252, 72, 98, 169, 53, 199, 183, 216, 69, 156, 98, 174, 190, 148, 84, 141, 224, 75, 250, 234, 201, 149, 134, 38, 16, 200, 180, 230, 177, 22, 222, 158, 215, 51, 58, 136, 233, 247])},
{encoded: "5pzPXLZvWWx6q983z6fNtd5ouqiV2HAcdksiuqZR5g1g8g93VHrtHuh61HhH3xmdgVn5Kwek31TEanoPHgXVNNhWyX5AhMMpxPgdQFyhVHLkKQKARNTJhSXNDfx2M5LKLLoBtQUetYdxstTyGmptYBu3x3J8824huuam5yj4VBLaejA7jGkjwcWapfgEvn54SJJgVk3MtjhEvtbAxGXQrdaAGgQq3emi5PUZJfA622Vj9t4MdnGpQH8o3Uy5tBH98h8jrw857X78fRmungf2mpefxJ8nUbFuPdXYH3uuYymX8ypf1KisdAdtEHciRGdhzRDciF8Yb6Du1PucX5jo1Ewu9bFxovHwDVTFs",
decoded: new Uint8Array([209, 190, 82, 189, 104, 97, 54, 251, 55, 251, 66, 203, 18, 95, 121, 57, 178, 227, 100, 104, 231, 39, 241, 74, 110, 120, 255, 163, 248, 148, 11, 106, 220, 99, 74, 226, 90, 26, 70, 50, 102, 80, 19, 119, 39, 170, 46, 118, 219, 59, 81, 185, 21, 242, 152, 91, 230, 84, 199, 239, 170, 115, 87, 232, 87, 185, 80, 163, 29, 215, 15, 168, 80, 115, 89, 98, 133, 72, 4, 60, 163, 247, 162, 106, 20, 248, 154, 68, 214, 130, 31, 246, 1, 179, 198, 115, 78, 207, 240, 187, 42, 151, 231, 167, 34, 27, 77, 223, 227, 153, 240, 43, 129, 45, 21, 203, 24, 99, 26, 62, 221, 93, 254, 156, 216, 147, 76, 27, 254, 35, 209, 199, 84, 92, 70, 139, 83, 243, 70, 236, 176, 220, 50, 218, 201, 80, 103, 107, 155, 26, 84, 41, 224, 1, 181, 150, 52, 195, 105, 235, 21, 123, 173, 108, 99, 115, 232, 231, 144, 23, 128, 96, 158, 32, 188, 126, 145, 60, 73, 8, 202, 109, 117, 18, 172, 20, 160, 39, 207, 41, 92, 134, 171, 44, 41, 84, 62, 7, 2, 123, 241, 116, 216, 132, 55, 140, 249, 122, 254, 211, 151, 45, 32, 11, 227, 143, 45, 95, 243, 56, 91, 222, 78, 226, 129, 217, 85, 248, 58, 150, 211, 217, 55, 131, 230, 78, 59, 42, 205, 185, 247, 9, 185, 240, 153, 105, 68, 64, 42, 81, 162, 144, 32, 196, 156, 49, 199, 5, 8, 62, 102])},
{encoded: "2UZLgKwFNuffmyEwQcUZiPmGov1H52pDjyyXSLeFaUTidoMFMjJTA8KCopWHCtABHjvCiwA1Fs6CP4iVUacmYQr3PFx1cdRYQpEmaikSwJnjAQTpZecbZLt7JhcKokE3H8VEywVCbZqqwoo7ik8k7DHAcddXW6LDjouWD839ZKU3kfw6eUhEnrvhYRjavh3T4sDQNTZKM1E2hmUxquthRV7MeQY9n1Tf11Wkty82XsJc9u7kRKvYS3qU6oei6EZMGTgsqzVSRmbxGB8YgkqhGPWE7YwiuJMVebb5g8WKY4x4a8o4shEQrwwUmUwc18JsiCkV8kF9d85LZz8oJuevEJ2Hc6Rew6qaqPrws1eTo8Ffiid83M9Gv8XmvGGhyUM3fL8HKRSvGdssDyxwsaWWhNeY6kLM4zVXqtLPaAqJHRCnDobGWj7JL1SV4mVbHZVnNtZfuqXXJAFqGRNQntkhPfYoQmgbJTGTh6GMi2HHkLuRuDqMvxdQwnEvbBqGxqGNXe2pM6Hh94ZEsgWrkFAoCDgX7FgnWTMduKMnFZhox683efdMF26gF4aEms6XB7HYLcRKiCFHRAKiXPxzhJLDT9iKQnH6qKh3ASSxCi",
decoded: new Uint8Array([181, 107, 157, 183, 82, 0, 124, 2, 10, 234, 212, 206, 115, 37, 122, 10, 75, 51, 22, 188, 127, 84, 37, 153, 118, 3, 176, 42, 59, 180, 123, 130, 188, 20, 128, 70, 91, 88, 199, 87, 74, 142, 85, 73, 184, 213, 154, 76, 47, 138, 95, 41, 226, 253, 101, 5, 165, 60, 22, 242, 247, 16, 124, 91, 102, 96, 14, 242, 125, 126, 204, 207, 235, 19, 230, 187, 58, 248, 144, 135, 177, 126, 14, 201, 44, 4, 10, 186, 70, 126, 221, 177, 125, 35, 211, 245, 42, 93, 171, 244, 24, 20, 232, 248, 253, 196, 232, 47, 246, 79, 188, 30, 81, 231, 1, 199, 229, 33, 92, 91, 170, 180, 234, 62, 245, 210, 145, 166, 193, 0, 140, 80, 33, 103, 219, 243, 93, 19, 106, 199, 243, 197, 137, 231, 59, 208, 171, 124, 205, 163, 155, 74, 82, 86, 54, 124, 234, 227, 134, 36, 224, 46, 54, 192, 232, 47, 162, 50, 0, 193, 106, 44, 45, 124, 98, 191, 163, 203, 114, 10, 105, 138, 244, 152, 99, 86, 172, 3, 20, 131, 226, 224, 98, 185, 142, 89, 165, 214, 6, 151, 38, 131, 230, 255, 150, 212, 79, 173, 35, 153, 235, 154, 58, 88, 16, 41, 250, 176, 140, 161, 128, 202, 142, 82, 56, 44, 88, 17, 195, 235, 62, 22, 126, 21, 221, 9, 28, 49, 166, 35, 73, 44, 113, 220, 245, 21, 53, 187, 45, 10, 108, 191, 229, 19, 62, 206, 201, 27, 159, 219, 231, 7, 99, 146, 211, 10, 115, 38, 148, 10, 156, 234, 204, 209, 150, 200, 212, 23, 81, 133, 178, 218, 39, 177, 24, 163, 153, 137, 46, 249, 186, 97, 130, 120, 201, 16, 102, 171, 67, 159, 54, 51, 25, 19, 114, 55, 123, 141, 188, 93, 144, 64, 254, 140, 99, 148, 26, 49, 120, 72, 164, 166, 129, 50, 122, 233, 92, 228, 238, 151, 181, 221, 40, 215, 172, 26, 64, 63, 38, 74, 185, 27, 135, 195, 116, 82, 138, 163, 9, 111, 123, 53, 234, 180, 192, 44, 131, 82, 223, 22, 171, 85, 183, 68, 198, 249, 236, 133, 127, 85, 5, 196, 71, 200, 38, 85, 3, 242, 128, 99, 174, 9, 108, 220, 202, 170, 247, 128, 27, 117, 66, 128, 226, 38, 7, 14, 167, 155, 188, 32, 199, 17, 25, 91, 236, 3, 5, 97, 46, 233, 65, 156, 5, 147, 235, 0, 12, 47, 77, 91, 68, 108, 255, 9, 79, 34, 219, 188, 31, 25, 252, 109, 84, 26, 236, 227, 17, 199, 188, 83, 158, 156, 29, 241, 234, 109, 219, 18, 251])},
{encoded: "Xcm3TjyHjFXZJ6eFBkTKRx16eV4bhYC67NWra2XrcidXirngUNJZmSaM3k1PqLvwMWiD8Vmp9qys4iqckFw3aKRxPgb3zMW9z1WrvN4DjDkPBhdELGM3e8ihKWXhRmvgdskSkYpecfEVe5koaUmDeWtxRbcauNeRwbPnnaMgNfcJPs76RSomfY1PLWNMkXb9NDWTi7gSJaaAU",
decoded: new Uint8Array([249, 192, 244, 12, 243, 54, 241, 32, 41, 103, 141, 208, 145, 110, 188, 199, 108, 76, 67, 108, 159, 73, 179, 54, 97, 243, 86, 66, 57, 203, 53, 163, 201, 137, 42, 220, 29, 90, 172, 171, 198, 74, 114, 213, 75, 92, 60, 128, 82, 226, 174, 21, 44, 12, 100, 34, 17, 59, 94, 248, 128, 99, 170, 101, 241, 151, 41, 127, 74, 3, 60, 182, 65, 54, 249, 253, 93, 70, 29, 20, 216, 181, 227, 128, 176, 154, 178, 169, 238, 252, 125, 136, 102, 42, 81, 194, 28, 109, 164, 22, 21, 200, 93, 97, 221, 192, 55, 1, 171, 35, 195, 198, 173, 131, 246, 33, 95, 94, 218, 252, 191, 196, 73, 147, 173, 63, 64, 154, 197, 111, 17, 200, 12, 99, 193, 19, 254, 130, 102, 89, 32, 47, 236, 82, 224, 236, 122, 34, 241, 97])},
{encoded: "DJx9PrFU7ZMkrz",
decoded: new Uint8Array([219, 25, 223, 214, 111, 135, 61, 215, 159, 255])},
{encoded: "U2KcLKzMmKKibFV2ZLheNFPtTL9sJRERAwSrYUsoWRWosHRPCHjRH1oGDC4w2GvE8YXUvkPLcSKdJzKszBNoh6u1ohqfYvZpRxZns2vYJJseRYHPaJv6dDYWTtoHMxDNQ8wbovyhravTYVLr2pY4X7CmXLNbMX9ARy6q941gZzr2MXiSs3AFWy1J1E8ADPnL536Tioz5RteTMHgD7oJ87zB4yW7yN9grrCdyKaibFsMLMnz8yEjWu1DCNEaYJqYzwpbhsLDZShWC65t5ACVEgdkgCjfJyeQRQyqrYWsXpbe22cWAL1XWLSYCXkDAhqv4p3afSnmgTdDWruWyippmEV99PrT3eMZstFxiUUiwms4c82FvaSue2XtMcAF5tWsMudi6XQRUwJsbK8y7sY2QfbwLkJVqgJkw2CQ953ToXT4ny8vtg6T1owrYRzs4pi411Jpym38XaurhwBapN7so9hDYc5w6p1FYn9vobYwKgR3iDVZevPP4Rt9GGEiqh2QycVyH648qVVNgTtRpSRSDS3hakqJKhHtHYgPr67ZKFH6K2nUvyP8FPvMyNd82R3SQps6cR6Jusdhs4scsJwdGa6GiUtcDn2aPoqCT1KCFELKTuLz8qMRuZppEBiEoFZqoZcZ5NzVTE1nwahbmM6RdrRogtxHL2aDKY3mD5q7jMVKqWjWtjwwh1rbV6CgqWPhYtMcBGuyHJNYCHGSDBAm3yyDsZRcj8YkDcH8dGR1L6d6g8CBV2jm45Eg4ExZJEPXENRXjx7M9kUpYYPRn3a6radFkM9hYEGtqSWpXz4GuPrPyU5WyjsCpHMX15bjTmgNAx6TZFV91TMCJtHwC7cUvnpZbVQFQugp4RD7w7Fyh9XLPd1s4pmHaqUqGpywfxmLyr4RzSRUhwinu",
decoded: new Uint8Array([61, 153, 175, 231, 46, 152, 50, 143, 89, 173, 232, 215, 0, 11, 191, 87, 24, 111, 203, 111, 164, 239, 174, 23, 54, 17, 24, 101, 154, 106, 108, 80, 164, 63, 79, 42, 128, 248, 182, 172, 188, 153, 151, 113, 246, 55, 178, 5, 214, 225, 186, 73, 71, 63, 220, 102, 0, 122, 123, 81, 183, 255, 9, 172, 9, 32, 122, 141, 123, 163, 81, 201, 127, 10, 61, 159, 237, 30, 91, 210, 115, 117, 6, 243, 106, 67, 61, 124, 217, 0, 5, 29, 153, 208, 255, 69, 21, 120, 17, 188, 110, 16, 8, 220, 192, 48, 120, 238, 24, 150, 19, 228, 111, 126, 82, 128, 160, 244, 144, 173, 106, 178, 189, 76, 190, 88, 93, 217, 157, 79, 160, 187, 66, 114, 159, 141, 164, 106, 72, 64, 206, 105, 220, 70, 18, 21, 115, 28, 243, 102, 63, 12, 92, 86, 98, 186, 83, 57, 86, 203, 155, 120, 192, 103, 252, 0, 25, 75, 124, 30, 10, 125, 255, 243, 114, 74, 190, 13, 180, 9, 156, 5, 119, 144, 156, 232, 213, 38, 96, 122, 208, 169, 68, 227, 238, 214, 145, 37, 155, 169, 14, 219, 109, 158, 156, 67, 82, 20, 240, 148, 217, 221, 110, 249, 244, 102, 77, 252, 34, 250, 75, 75, 202, 206, 195, 180, 50, 143, 159, 197, 137, 0, 90, 47, 168, 25, 190, 6, 122, 68, 96, 10, 251, 224, 190, 186, 88, 85, 5, 68, 30, 57, 34, 214, 138, 37, 231, 127, 178, 237, 234, 111, 194, 4, 49, 46, 193, 147, 184, 239, 220, 191, 194, 4, 33, 85, 186, 139, 27, 3, 230, 15, 26, 117, 5, 84, 144, 150, 78, 76, 6, 53, 218, 121, 98, 189, 71, 218, 210, 145, 161, 58, 2, 191, 195, 79, 74, 52, 126, 136, 228, 193, 78, 97, 200, 139, 77, 185, 48, 1, 78, 135, 175, 244, 64, 58, 20, 234, 123, 22, 87, 39, 151, 25, 1, 25, 24, 194, 177, 74, 109, 148, 197, 207, 124, 183, 171, 25, 170, 77, 11, 157, 96, 190, 72, 219, 172, 114, 226, 107, 1, 7, 25, 3, 167, 6, 231, 244, 206, 63, 49, 166, 84, 186, 198, 152, 35, 159, 170, 234, 154, 75, 43, 86, 195, 141, 27, 144, 241, 12, 10, 206, 143, 25, 205, 191, 106, 62, 169, 35, 61, 110, 15, 161, 123, 198, 252, 22, 236, 246, 145, 61, 89, 210, 204, 136, 163, 70, 155, 199, 113, 95, 66, 59, 199, 159, 86, 20, 36, 233, 154, 225, 19, 204, 252, 192, 213, 171, 105, 247, 34, 49, 73, 142, 124, 54, 243, 20, 234, 46, 128, 17, 11, 49, 138, 83, 23, 171, 183, 156, 123, 36, 126, 242, 147, 194, 248, 101, 99, 28, 42, 27, 190, 187, 73, 142, 65, 72, 113, 140, 136, 23, 65, 161, 35, 45, 84, 152, 106, 50, 247, 164, 147, 227, 235, 58, 238, 243, 224, 253, 49, 100, 191, 9, 15, 95, 110, 117, 125, 163, 206, 81, 132, 8, 220, 28, 161, 43, 119, 56, 129, 213, 182, 137, 163, 102, 205, 239, 173, 57, 29, 229, 254, 145, 127, 92, 247, 206, 6, 0, 203, 115, 130, 83, 58, 200, 203, 220, 115, 28, 211, 243, 185, 140, 0, 252, 39, 175, 226, 16, 15, 224, 18, 88, 32, 222, 195, 17, 244, 18, 162, 229, 7, 113, 139, 210, 142, 177, 112, 199, 122, 203, 184, 18, 202, 73, 192, 191, 113, 198, 172, 66, 167, 135, 23, 73, 199, 85, 43, 37, 207, 251, 197, 191, 199, 29, 24, 200, 61, 112, 156, 164, 158, 237, 223, 250, 246, 39, 66, 118, 140, 211, 15, 230, 153, 106, 189, 85, 235, 8, 248, 243, 224, 157, 61, 27, 178, 254, 224, 109, 151, 65, 172, 23, 170, 249, 190, 21, 91, 20, 74, 124, 9, 225, 225, 116, 41, 236, 213, 99, 156, 181, 148, 149, 122])},
{encoded: "5q4y6TYJ3DNQCECC1VWiFKcgCy5SupVSBGRzw7T2NkaS5N1wFaf163mzGoJKGo7HkShsxRoegszQjCzYiu114LqbRnxJVXTTYQDu4yckk3UAhdaKjMbhxRtSHM49xoxAoxjsgyPktqdxEom2vD9xcCLg9vBBqjvuwumssVn7oJN6xm7S9WD95TFH2sW6w2t3eb4dmfQdHomvxjY2m1maTHduyFoRygrYV9RiDBBtBEDeE8psT8enDwME2kWmgvMEg92FYEkVqqcErByf3i9UPjbov4KA39KESKNDhMM5vKvamTGx4JYdUAZJHNdXieZZhcPSBj9U847VBV7rYqDgv31D3FMsVWLGmz5wBdnFnuVesEEmENYxvw3pFERj4zkqm7mTvbvScBaegUkjjEsQMLqzbHBEryU377VqbYYQqhdmPWw3VE2BddCPb8kRTrmhR6PS8TYaBHfsQEAUDdJU4bpKLN2W5A8KJ22zNDWU2Yu1LyErxVTDLAd1SDRQpoKtvi8HSQZhm2rGfPVesxphDobyseVHqoWXhJLnd6jWfhbPqAa3ZqCUNuD3MQQSepzr3Up8YqDVTUtWUU243DmnrbiWQf8bprf7PTU9R9SMAfKSDq5byLx4DJsopVhcRfdAD",
decoded: new Uint8Array([166, 131, 86, 20, 172, 232, 163, 110, 202, 176, 12, 75, 208, 150, 186, 185, 163, 236, 105, 85, 79, 155, 208, 54, 18, 12, 203, 218, 75, 21, 251, 34, 131, 140, 209, 241, 179, 233, 254, 254, 106, 89, 47, 39, 234, 212, 80, 50, 237, 124, 62, 252, 232, 8, 50, 60, 141, 155, 137, 247, 182, 216, 214, 28, 122, 154, 24, 215, 105, 101, 179, 117, 163, 86, 212, 123, 77, 53, 40, 19, 68, 74, 192, 57, 232, 112, 22, 45, 148, 230, 18, 202, 5, 126, 127, 224, 27, 16, 142, 202, 233, 88, 41, 26, 197, 109, 11, 88, 248, 125, 199, 235, 216, 74, 29, 106, 221, 136, 73, 90, 53, 50, 211, 205, 214, 59, 135, 152, 22, 69, 215, 183, 82, 196, 155, 136, 233, 246, 162, 14, 210, 136, 127, 140, 194, 83, 224, 252, 32, 174, 198, 146, 71, 111, 183, 182, 88, 115, 152, 176, 42, 212, 226, 163, 238, 193, 141, 29, 12, 186, 166, 150, 235, 103, 170, 119, 110, 175, 208, 164, 130, 154, 163, 23, 65, 237, 202, 11, 212, 179, 0, 37, 184, 95, 190, 125, 18, 129, 78, 174, 190, 203, 104, 36, 239, 98, 119, 166, 22, 129, 239, 247, 163, 245, 113, 179, 163, 199, 196, 102, 91, 76, 124, 153, 178, 119, 10, 241, 7, 161, 151, 237, 46, 107, 239, 63, 7, 25, 35, 184, 241, 250, 19, 83, 115, 153, 185, 186, 42, 91, 118, 231, 28, 64, 22, 123, 30, 199, 205, 137, 136, 83, 93, 223, 72, 198, 75, 161, 50, 172, 165, 192, 166, 255, 255, 191, 34, 239, 100, 31, 130, 83, 4, 177, 198, 104, 33, 8, 15, 166, 56, 227, 146, 186, 4, 172, 18, 121, 39, 147, 178, 136, 43, 45, 113, 90, 58, 36, 209, 74, 134, 248, 224, 246, 172, 171, 37, 22, 135, 202, 175, 109, 212, 207, 47, 34, 196, 20, 205, 139, 202, 80, 39, 232, 222, 185, 18, 55, 98, 203, 99, 198, 232, 252, 150, 34, 132, 55, 202, 65, 5, 206, 248, 252, 36, 138, 160, 147, 27, 45, 232, 220, 57, 237, 231, 64, 73, 42, 93, 164, 120, 169, 19, 23, 38, 137, 6, 109, 236, 54, 128, 121, 196, 18, 153, 129, 62, 107, 56, 116, 144, 56, 187, 59, 119, 98, 208, 211, 24, 187, 92, 178, 117, 39, 74, 152, 96, 7, 96, 108, 1, 147, 95, 207, 181, 71, 156, 152, 221, 123, 45, 110, 236, 245, 28, 34, 180, 212, 69, 59, 73, 41, 135, 124, 171, 111, 161, 245, 210, 117, 198, 62, 80, 182, 188, 166, 42, 220, 180, 183, 226, 217, 90, 91, 143, 253, 181, 138, 21, 131, 163, 67, 182, 44, 108, 124, 246, 54, 118])},
{encoded: "5Q7sgDtQxi3vSB15QWaqSXFgfMwszezRRDgpgam2JTbmC1XwepTroKzG3uNbPJcQLWefCBmks4GVjDXuXhTA34AP1KpsnsnL1Q4kqqBBr81NZ1S4aopyDRpaKtHYk1ZWfXt77RPBSdHp1qsJXPReDDny6Bitn2ZNp5edodo1hf9p7eH8dFsPhMNZL7dVsUbVTwQH7QB8qyAUQTwZibrjgm4ParqCfZKjFnV16tjrnQkvuyXa9wFQqfMHBR6JxyWWwzMygS2YN48n2LXYbBDvoZat7pbxhf6vQofKcLWYoo9uqVmsifQtqbS9iytBxVHU19zEK1gnWFNDreZEvgdo5tDCw7p4qGZ5sAQyB51oqDjiLRoBm7hjYq3tjxbSsxXTaEx6ToL6NwnQQ5dAtySdCAxWXh91fedNj3ZMDfroeq3YsekHPmouXjVnAA37JW43uKLhB5bRSa5aM2Cyz4VbdxA4Y4DqVJQnJPMu2RBQaycsQEXuKb2gKXpn1QcHUKywsow3PPgdDxshHb2rM3iKToFqdQRjXKoBwaykCnD6vC88Ap25ahCC8hryeeEMiPJNxpgaVRbsc2LZwBwMA84xRdz4Y5RKVDFJjHiXwT4RPwdxqLRBYbXbN9m3h5vH64H8ndkbk4GFxditfxv2v4yPpfPVxnJKL8XsapuakcWw6sChP7kcozuw6rYdoCzRLrxpUFwtmLSYLF69zqVR1mrQAkHqrhDUPFVS8qGcTfVjttFnZBr6mXxd99J8bG6pYKTjA8X8b1vqFqV1VYyjv4oRrDP8QMkX62PvpT9c2DQrHezLEcgB79J32qtdTs9GiwQZBJHP3e1RMti7VbpC1CWMezCrnx8kmiRxkiTTntLYVkQ2TJJXJ7X9Mgjn4uYXXfv7PuF49axTy6mKfkNQSFTeSiLgWjhjjf8pYJFPb7SQx2cZqoBGPXUHHqbHXdrtVF9UK6os6XB4JPJQrB4q89iw1enp9hjzH43iubvKwzNSPbYcW8vhJkbo7CTx3URogAcHBjSawxGuUhQobjRgC8zUjzKXDsCebEP7Bsrx61DSka5h9cSPC4RiygkWQNQiTD",
decoded: new Uint8Array([66, 23, 197, 155, 164, 202, 245, 122, 194, 28, 234, 253, 17, 156, 142, 99, 113, 98, 157, 73, 228, 100, 198, 96, 194, 206, 188, 79, 47, 211, 43, 45, 244, 22, 5, 112, 77, 113, 235, 175, 195, 250, 43, 33, 164, 251, 117, 33, 197, 239, 166, 194, 165, 251, 8, 39, 158, 73, 35, 53, 80, 107, 109, 64, 42, 67, 136, 229, 98, 17, 173, 41, 98, 77, 42, 255, 57, 84, 83, 108, 94, 197, 222, 126, 227, 139, 51, 65, 199, 71, 248, 41, 249, 154, 75, 94, 58, 51, 195, 140, 58, 119, 131, 11, 236, 131, 34, 189, 133, 11, 91, 106, 168, 50, 235, 93, 25, 19, 247, 159, 119, 192, 233, 105, 26, 218, 240, 134, 168, 187, 38, 210, 130, 254, 58, 70, 240, 14, 10, 133, 19, 12, 185, 47, 99, 197, 165, 148, 238, 66, 223, 221, 98, 248, 244, 140, 240, 197, 121, 237, 70, 67, 122, 231, 195, 33, 202, 128, 105, 131, 112, 216, 235, 214, 126, 34, 203, 255, 208, 82, 93, 119, 255, 172, 131, 189, 214, 43, 90, 7, 181, 142, 83, 44, 18, 204, 178, 67, 34, 116, 109, 172, 166, 246, 162, 166, 105, 148, 148, 115, 155, 35, 72, 16, 83, 58, 9, 97, 0, 165, 120, 137, 185, 106, 46, 118, 97, 205, 70, 128, 142, 97, 129, 89, 28, 104, 111, 188, 128, 91, 131, 226, 78, 219, 10, 118, 159, 127, 240, 106, 222, 115, 116, 186, 253, 187, 240, 34, 230, 42, 189, 224, 104, 20, 224, 195, 138, 130, 56, 140, 25, 79, 242, 84, 251, 117, 102, 87, 121, 136, 212, 38, 34, 244, 135, 6, 75, 25, 201, 33, 187, 87, 246, 58, 78, 41, 29, 26, 65, 124, 155, 165, 34, 110, 193, 92, 252, 213, 175, 190, 160, 132, 116, 84, 91, 83, 189, 132, 164, 107, 214, 117, 119, 224, 133, 64, 86, 186, 119, 74, 182, 89, 183, 199, 40, 127, 186, 114, 139, 60, 119, 101, 228, 25, 225, 122, 185, 217, 51, 171, 209, 73, 37, 115, 97, 88, 87, 22, 199, 71, 223, 1, 129, 31, 179, 132, 41, 70, 25, 91, 46, 169, 30, 138, 30, 34, 63, 120, 208, 200, 186, 227, 161, 151, 110, 191, 120, 86, 228, 104, 236, 208, 207, 122, 67, 0, 52, 86, 169, 181, 210, 84, 105, 209, 143, 206, 178, 216, 41, 139, 20, 39, 238, 219, 176, 198, 236, 179, 54, 92, 104, 91, 172, 55, 212, 36, 120, 85, 93, 129, 54, 238, 67, 157, 165, 168, 10, 32, 40, 173, 144, 203, 193, 199, 57, 200, 28, 225, 132, 36, 177, 17, 173, 88, 141, 233, 182, 215, 156, 86, 179, 110, 230, 137, 71, 191, 91, 117, 26, 98, 99, 147, 221, 225, 140, 71, 61, 136, 47, 164, 54, 202, 33, 251, 23, 82, 24, 218, 243, 0, 151, 57, 68, 66, 119, 196, 106, 80, 33, 162, 59, 244, 222, 245, 36, 135, 201, 47, 222, 122, 246, 67, 12, 31, 42, 165, 93, 99, 129, 101, 221, 218, 18, 144, 208, 81, 161, 230, 170, 108, 165, 119, 66, 122, 116, 232, 232, 136, 68, 210, 9, 206, 9, 190, 236, 148, 202, 227, 247, 153, 179, 118, 10, 81, 217, 137, 193, 247, 230, 163, 242, 168, 105, 0, 166, 111, 100, 152, 23, 120, 139, 38, 148, 243, 77, 53, 153, 75, 5, 214, 43, 208, 24, 148, 121, 160, 112, 59, 179, 161, 80, 180, 252, 188, 118, 18, 174, 4, 248, 56, 168, 242, 248, 176, 112, 208, 193, 212, 192, 246, 81, 173, 87, 250, 220, 56, 52, 80, 1, 195, 4, 150, 121, 145, 215, 148, 127, 166, 210, 237, 53, 155, 224, 227, 25, 103, 30, 35, 193, 103, 226, 148, 47, 90, 184, 190, 225, 226, 93, 39, 86, 104, 70, 70, 5, 17, 167, 55, 22, 171, 225, 121, 31, 221, 117, 85, 191, 187, 171, 242, 238, 124, 162, 218, 245, 65, 171, 141, 163, 232, 232, 35, 235, 52, 229, 246, 118, 36, 119, 63, 50, 208, 141, 73, 221, 242, 221, 8, 173, 14, 60, 140, 254, 105, 249, 165, 15, 95, 136, 177, 202, 212, 157, 43, 235, 107, 86, 216, 191, 159, 215, 229, 181, 155, 215, 125, 192, 17, 233, 247, 6, 37, 1, 237, 85, 153, 192, 52, 176, 16, 240, 192, 184, 201, 23, 83, 39, 115, 228, 45, 243, 202, 136, 43, 25, 203, 29, 124, 163, 120, 155, 171, 165, 58, 74, 198, 245, 85, 56, 177, 201, 191, 10, 240, 134, 91, 39, 63, 171, 255, 144, 137, 40, 252, 255, 165, 223, 17, 180, 250, 103, 243, 13, 225, 188])},
{encoded: "2MSD77UXYYLe8sjdEbigYj8Xx8YxogCM5ZRcmQtanAwBZ6b1V9BgzvwawZDmqhBaDKERAACFYSrydvSrkEo9cdvY1XYxHtHLmyTbdn4jjkP3NCRLoyRC8Ypi7MccKTmiwdhMtaXWgsiRYvvpAph39MNWdAXtzDsmCMa55pqAL9gugYXeLmQpgtu7pkbTtquoE2dD2WvshMLxRxNtSZMYQvyQFtoFjW2DfWBFJTe16Y9H9PyksfjGPzLDi7xudxRTBjs5sYTCxghL87SSzfS4i6px3FYSiJ4jsJKGj6QuJHkdJCDW3yaTrdCMkisywbFs5kPxdtscBRzRXNMG6X3YBr7VM",
decoded: new Uint8Array([191, 117, 203, 154, 52, 136, 146, 195, 30, 226, 0, 116, 80, 252, 253, 145, 218, 8, 198, 187, 148, 249, 214, 149, 44, 107, 97, 54, 193, 238, 220, 119, 141, 32, 13, 238, 96, 131, 123, 105, 201, 220, 36, 176, 93, 48, 163, 236, 220, 191, 40, 217, 236, 142, 240, 161, 229, 106, 159, 210, 104, 99, 8, 37, 129, 85, 62, 58, 207, 206, 211, 125, 227, 139, 22, 166, 120, 191, 37, 156, 136, 201, 210, 164, 191, 37, 139, 173, 91, 174, 235, 212, 116, 186, 133, 166, 100, 131, 149, 155, 63, 104, 217, 230, 101, 155, 97, 31, 44, 255, 24, 249, 222, 255, 83, 187, 154, 39, 153, 95, 183, 159, 179, 204, 73, 180, 88, 30, 248, 38, 34, 132, 147, 183, 160, 112, 71, 129, 222, 96, 91, 253, 139, 81, 21, 5, 205, 226, 87, 181, 36, 248, 140, 103, 72, 208, 198, 24, 44, 171, 109, 75, 133, 38, 178, 239, 42, 194, 127, 180, 207, 44, 191, 72, 31, 27, 154, 225, 136, 100, 224, 78, 29, 16, 37, 169, 58, 34, 185, 241, 230, 71, 9, 253, 132, 116, 237, 75, 155, 65, 18, 82, 49, 245, 181, 60, 152, 156, 174, 69, 34, 59, 83, 84, 107, 22, 240, 112, 53, 173, 88, 154, 150, 106, 54, 145, 96, 115, 113, 53, 254, 158, 227, 118, 160, 70, 206, 176, 205, 11, 33, 20, 29, 124, 179, 193, 122, 167, 227, 239, 66, 108])},
{encoded: "C7pVMzbUnGxH7Q9Vnk6DgZ3",
decoded: new Uint8Array([20, 101, 222, 187, 158, 254, 32, 36, 97, 134, 182, 6, 156, 134, 76, 106, 14])},
{encoded: "3b4ECa5H72AJFCAQHsnDtDVSTTtwF7JMaywgqxvjwcjypu1KsqnLrRnNWzZcpR9Wm9bqQLDSKU95zZ3GJ28f1B1ErPu2VK5P5ixSkywGsfmVGsvsXdiew3qQR2QRfWbarhbCf6EZtrCMEDX1MMH1EX5cgbyxr2STP3xCDvYDqyxpSMoqGrVfuAV683WwgKvYBg4q9Tgj3URYg4eyr632VpEno2tqe4sK1XJtU6WnBDSxLyGv71GxxcS7XVsTgWqgqzfpmL146gZYdYE95FbsKjKDYhVfAZciWYs61UXzhygQQjVYWiTCiczeES3E43Z23eHpSuXSP8ymBwGHRpouCjUWphwMVYC2b7VaSQxc9QWKVBfwUtcUBZi8ERtFx8yRC62eERyJgVUWZz5zhVNw6bE2XxvJ9ETCfLMrSGCUd6d5KJgKJ6cYwTJEpZ1Pwzw4qgLj9vcrZEw2Ai1pgJ6LNhUkeZCKW3sSCpiQaJjmRZBrs16zbvUTEjTSCQZaKCTP4NJquiarzKFxBcNKgp4F",
decoded: new Uint8Array([248, 224, 42, 22, 20, 103, 111, 45, 98, 45, 14, 176, 249, 118, 100, 32, 25, 196, 151, 230, 211, 147, 209, 96, 188, 249, 208, 118, 134, 202, 248, 217, 187, 136, 6, 62, 215, 57, 171, 252, 232, 77, 18, 33, 154, 159, 147, 22, 13, 6, 9, 179, 134, 149, 121, 241, 50, 6, 205, 165, 143, 43, 223, 27, 166, 233, 144, 227, 247, 51, 141, 202, 15, 148, 217, 86, 243, 104, 153, 203, 92, 241, 183, 221, 152, 140, 160, 150, 8, 48, 216, 234, 8, 153, 157, 180, 170, 201, 67, 148, 220, 86, 244, 217, 40, 64, 246, 16, 96, 10, 6, 83, 29, 252, 230, 117, 195, 161, 152, 230, 41, 31, 176, 244, 233, 40, 150, 238, 86, 198, 163, 65, 30, 124, 230, 59, 15, 106, 198, 135, 15, 241, 134, 125, 72, 149, 121, 14, 239, 125, 157, 182, 99, 54, 150, 152, 117, 87, 129, 233, 34, 77, 10, 76, 218, 184, 205, 53, 199, 34, 55, 51, 7, 185, 175, 54, 248, 165, 108, 224, 41, 244, 187, 45, 221, 209, 96, 50, 169, 166, 50, 164, 17, 236, 85, 83, 112, 130, 12, 242, 210, 34, 174, 237, 150, 126, 70, 186, 98, 19, 105, 115, 161, 189, 150, 51, 5, 77, 227, 121, 82, 187, 133, 70, 11, 134, 254, 121, 114, 213, 244, 113, 254, 79, 46, 191, 141, 155, 123, 206, 190, 33, 170, 189, 135, 51, 15, 50, 155, 251, 93, 231, 86, 142, 193, 36, 69, 179, 153, 231, 254, 23, 241, 134, 20, 242, 65, 62, 164, 76, 134, 98, 120, 51, 67, 212, 192, 198, 37, 133, 35, 112, 77, 62, 122, 164, 122, 135, 13, 52, 163, 213, 249, 220, 229, 99, 194, 57, 223, 51, 234, 52, 0, 37, 238, 153, 148, 194, 52, 103, 241, 212, 74, 225, 158, 189, 171, 118, 11, 148, 200, 138, 195, 69, 126, 236, 159, 55, 131, 74, 211, 23, 90, 159, 186, 102, 6, 16, 59, 201, 238, 58, 251, 23, 20, 101, 118, 67, 200, 141, 84, 9, 30, 65, 115, 53, 17, 54, 177, 217, 171, 251, 2, 168, 190, 101, 208, 97, 102, 236, 50, 132, 101, 179, 240, 204, 156, 3, 170, 213, 19, 239, 226, 175, 247, 42, 188, 158, 112])},
{encoded: "5E64RMTbZP97EuZbsxjKUcZCnM5HGzkq5YrJUwC4JrVJiDut9D2FdQk48Ffm9JtkbXBtds6Mi4cbG3KLqhjC4Xc2KdFo6MFQfX4rVXosxfra98GuQWpBeTkD17qYCag19v2fdwek5tmkEPLvgjZCJJn1PmfhTSW",
decoded: new Uint8Array([199, 125, 68, 22, 236, 231, 190, 119, 188, 226, 161, 13, 84, 239, 151, 164, 169, 222, 31, 234, 120, 117, 131, 27, 68, 149, 233, 239, 149, 156, 42, 198, 158, 120, 140, 10, 246, 211, 217, 193, 182, 225, 235, 152, 99, 83, 162, 149, 198, 125, 169, 18, 11, 158, 29, 208, 208, 117, 226, 142, 120, 12, 143, 58, 18, 126, 247, 160, 178, 243, 170, 23, 39, 28, 58, 201, 177, 15, 217, 16, 42, 146, 221, 83, 159, 206, 79, 152, 159, 184, 230, 25, 105, 50, 20, 207, 247, 100, 81, 245, 184, 24, 127, 146, 80, 188, 200, 184, 98, 80, 74, 205, 168, 243, 38, 15])},
{encoded: "75YdtMXFvZztpDaikBdwnUvwkas1Ck7yjQTG8HfBnX65uvGxynx2cqJ6PLvad2sk2gaBRAgv9z18NZBXb2RjbydHGUnKWiWDAgoNtpdYdjGL134Yt51KvuuZXH5DQSYjtwmyXQAYvyn6NEx3c2PRZFgsfKBd3EMXw88ARbZhTPs7iVowUf23bdfwGwprcaHMiUSzF93wJNGf6jPYPQ9AAEawWxMaf8BtRisc9oYyoGamtrCnS63xkjtjaZFjipRTMBCgtuF1JJRhZsspqVF7b9T67YGFbS9DcfZ59PecYoeFVHLaZsqjcWkLXaViu9tQDjTMxaMNDhEJz6wp1RFPr2wmR165MzSEvm4YhcYXxCZHpT275YgkdhnzhCTf2KyEa1L1XX5cPsy7wTeavQJcGSGnsuvuPSw5QETdp4msDViJu2faE8prqdHEwAWbTNsPPYeA4r4DZmbMvc91fgBjJ1ATacWnX9zfBQGyuZFp8y2wXCigB37GrEXAZADeU71mfJxWkvMVYd4rA32ioPwV2pf3Et4iicb7P1Y8bSHzbZWX3p5xBYKC13jyJtfmUSu1HbG2Gcfc4m7sxqfbBtG9swvtJyyCfJfoAJNa3zAZCUbbsozxWWD236Ui1SRXHseNG6Z87sDj9tjSgt8nWwTLSm",
decoded: new Uint8Array([6, 161, 105, 210, 37, 212, 110, 216, 156, 105, 110, 254, 233, 97, 108, 223, 90, 220, 130, 21, 160, 2, 196, 16, 207, 135, 217, 244, 190, 162, 174, 64, 17, 41, 221, 76, 71, 65, 101, 9, 29, 129, 167, 33, 249, 76, 206, 36, 103, 187, 41, 112, 162, 86, 137, 103, 154, 13, 77, 245, 73, 92, 8, 145, 74, 11, 16, 213, 182, 137, 108, 41, 137, 211, 62, 61, 49, 57, 85, 27, 82, 188, 95, 100, 115, 203, 128, 222, 47, 160, 143, 210, 93, 176, 68, 160, 90, 91, 154, 237, 39, 115, 169, 117, 214, 118, 172, 95, 71, 167, 167, 98, 27, 175, 84, 81, 70, 134, 93, 240, 172, 17, 149, 25, 80, 145, 143, 155, 157, 103, 23, 62, 77, 248, 207, 95, 223, 214, 201, 168, 133, 103, 114, 173, 34, 121, 22, 30, 94, 155, 191, 15, 53, 248, 31, 122, 226, 151, 73, 190, 28, 145, 206, 130, 2, 118, 24, 43, 163, 20, 6, 148, 202, 123, 28, 215, 30, 36, 6, 85, 157, 235, 91, 131, 206, 13, 100, 247, 59, 126, 255, 130, 13, 97, 228, 225, 207, 241, 129, 191, 222, 74, 149, 37, 230, 111, 92, 84, 22, 241, 172, 120, 171, 252, 239, 226, 184, 211, 178, 243, 161, 27, 83, 219, 251, 80, 61, 232, 213, 197, 128, 6, 142, 216, 234, 6, 159, 32, 29, 240, 93, 175, 92, 194, 241, 234, 80, 191, 57, 187, 8, 119, 250, 10, 145, 23, 77, 148, 180, 62, 224, 214, 132, 44, 113, 79, 181, 234, 164, 125, 150, 72, 13, 73, 197, 71, 151, 176, 7, 24, 89, 49, 140, 160, 47, 251, 186, 43, 160, 85, 115, 141, 105, 58, 99, 124, 167, 152, 229, 221, 8, 172, 115, 87, 238, 183, 191, 214, 42, 213, 65, 140, 53, 215, 34, 61, 219, 30, 220, 25, 241, 217, 187, 252, 192, 221, 180, 179, 119, 128, 244, 177, 185, 248, 227, 38, 81, 6, 101, 233, 36, 255, 111, 141, 147, 16, 138, 105, 46, 122, 149, 6, 139, 114, 0, 34, 184, 5, 123, 33, 95, 205, 93, 135, 48, 228, 164, 92, 23, 177, 188, 163, 253, 76, 84, 178, 244, 24, 255, 111, 139, 247, 7, 150, 38, 231, 242, 251, 106, 186, 149, 80, 161, 150, 255, 241, 138, 50, 92, 58, 170, 131, 48, 187, 203, 186, 9, 85, 79, 78, 77, 211, 166, 169, 67, 141, 143, 216, 243, 10, 19, 123, 87, 159, 74, 236, 60, 166, 174, 28, 128, 157, 178, 215, 241, 233, 231, 58, 106, 109, 113, 174, 100, 227, 30, 202, 241, 93, 188, 163, 179, 178, 224, 4, 9, 107, 130, 126, 4, 98, 186, 166, 175, 167, 142, 243, 29, 83, 85, 28, 99, 168, 130, 233, 38, 72, 152, 252, 152, 215, 87, 43, 69, 75, 210])},
{encoded: "JPwKAzPVkTwG9C2gRVyNCWpq4NJQqBXauS9a1WG2EkWcERrT1fDpNAaWVTTeRauokLVvg8wkm2sjPQuS9cgrpkEaTbqy8M9WXJLo4kFRMuepPANvpqHAbjJmDVFo7KvhnHTxPZpCfyeMHvyPJtdzYuqcXS9b8WPkmYFYLEdq4T3DBBTKXkSCtpkn6YZq1joyrR3NBkGpLT7hj8GNs28UMKfKLreAUXuaU9MnuAzbeuECK2Ktaks4y5yMesgkAVhxkFooURgbdy9KhsyFu79Qk8iyHcg5KuQhnw6Vn31gfy7xFUkdW4oKzKnSV7fVFZ2w5BFonXs9TFSkVW6ThixGRQ5uH42TZheAQERvdtTCovRVkwZjT2Lvtv4zWF1uB1BoBnu1fsK6E5DAZpNsDDAN3qw2ow9EQRJ5AXefeKekSTfjbPzJo49AFznYc5CU51c72B5fBRijq5TRJ1PeMXAqrVPgF8dFJj",
decoded: new Uint8Array([83, 37, 89, 211, 78, 177, 15, 123, 191, 199, 81, 10, 255, 240, 192, 233, 216, 33, 151, 236, 125, 129, 7, 237, 190, 172, 11, 70, 42, 36, 134, 45, 193, 165, 113, 28, 97, 242, 161, 217, 203, 35, 139, 147, 191, 195, 103, 61, 241, 135, 215, 9, 49, 190, 0, 79, 73, 136, 219, 198, 4, 71, 250, 245, 229, 225, 141, 83, 208, 112, 154, 151, 77, 123, 23, 170, 234, 88, 118, 127, 254, 207, 209, 205, 32, 227, 64, 97, 116, 191, 52, 7, 207, 11, 171, 97, 196, 253, 197, 247, 2, 176, 131, 77, 53, 145, 79, 192, 120, 246, 148, 222, 12, 27, 43, 34, 103, 247, 68, 177, 50, 169, 55, 190, 84, 58, 222, 209, 25, 200, 219, 5, 194, 140, 175, 219, 208, 163, 173, 63, 116, 36, 154, 158, 159, 42, 92, 225, 38, 115, 252, 16, 58, 178, 222, 140, 75, 250, 84, 163, 36, 47, 232, 99, 222, 71, 58, 182, 224, 129, 196, 205, 141, 188, 183, 85, 215, 139, 76, 205, 189, 0, 198, 181, 121, 32, 158, 143, 197, 122, 113, 16, 244, 156, 65, 29, 71, 96, 163, 237, 238, 99, 173, 238, 149, 114, 249, 248, 64, 87, 240, 63, 142, 47, 185, 26, 207, 177, 55, 54, 36, 170, 16, 41, 86, 213, 226, 133, 140, 11, 240, 252, 175, 205, 63, 145, 199, 8, 100, 182, 34, 218, 26, 62, 121, 49, 138, 202, 239, 243, 177, 184, 135, 4, 58, 245, 85, 135, 249, 19, 93, 29, 92, 106, 43, 117, 103, 109, 247, 81, 220, 201, 7, 237, 35, 214, 205, 61, 57, 173, 166, 208, 29, 172, 202, 108, 30, 107, 112, 128, 154, 243, 135, 138, 127, 249, 171, 54, 192, 102, 25, 177, 240, 112, 187, 100, 42, 56, 12, 55, 226, 125, 233, 242, 20, 38, 114, 166, 243, 105, 60, 174, 243, 153, 51, 254, 226, 33, 253, 94, 71, 243, 73, 141, 28, 76, 131, 109, 76, 225, 190, 192, 97, 208, 1, 39, 167, 148, 204, 140])},
{encoded: "9Dhf8UhXT9xSREH9BZ4sPGwN3jeGWhuKw6JkQiGQtFNgRdxbFkUL1n1gYVCrB9q3dbqZbmTjnpvXRzKBRez1jzZBoBJsuaVos1G5KJ4qVEkkNYwB3o4FQF5xdyQUM8UxW6MojXc8LK4tL3bbvA9oYhfjGzo46ZxXmx3bi73DnABkog8ia8NgPC5aoxkJnpbd8ZZ1522rvTFVWMgKpazZTLysQ4xT3dDYejG3nupUxygUaqTsi5Tqtx8CJY8xSYseSfBjGh4GmvXZYrun5PuvWieweT7stZarmobQkFK6zVms9B1ou3ejkxH567KH1uDdT3GqdkSsqSubdg5hxWEkSQTTf4a7dAdSDJp7pLuYKSoGF74ykKSLd4dpkaPWWsd8bD2dXg6YH6p66Y5K26MhB1yJ5dvEqufwzjtwANeFntMS3Bq3nhdD53HwcSeV7aLdchTnfE4hwwusZMNkMy485WADsJYWWEgh8E1Bgp2FgnZZi4ufTmQKBV7JiefkxHov46mQjRdM9ACYbrgmRG3RQFcWHjJ2TaEsRUaVNtyq6PNMUNL6CMqzXLSXzoWFKRQVjYyJTBKC3GG1arFeuYz8qQ3ktzzfSMrawhZiyEuDHVS938AMr5h5eqxVcZbNMsuS9D9F6W2bcYqTiQdhXgLc6k7Y2VjWRZnq7xCTvehxyU1akpdMbQ1AnT2BjNbUdbdm3YdaeEZQ2aCg9t2tHayqDk3L3GquVbJNdodAxwWuQFdQnKa9H8o3BZVfJJSYCkMS989ABpMqohEYhhU5teUJoi1Wsi5mB4b6qb8iswc2oThCNd6VN5KE79zphUeq8UZ7CXDKLjQAWDMWiSnZ7ExNWfJGf1XYSCpS9efV7JYvMXBJ3KpdhZiAr1jb5wwoh8B8BfyhFb8eTf3reTy6MsjGDDkuPU3NE2KN6HAVwJrV1nLmBrjf18P74fbhCcrt1MZUqrfaxK5XCCVeYMPhQKvBcGjR4efvhqmyPoviHRUHkuHVEAPkubfv83FMF2wy8QwKrqZdULKVvv9FgkfPWSts3",
decoded: new Uint8Array([109, 56, 208, 82, 25, 175, 111, 53, 188, 87, 233, 236, 55, 222, 97, 118, 219, 31, 206, 117, 145, 208, 2, 58, 169, 26, 141, 200, 146, 73, 181, 23, 48, 254, 161, 65, 137, 39, 64, 226, 80, 229, 65, 138, 61, 105, 162, 253, 88, 189, 163, 58, 77, 96, 92, 25, 36, 26, 92, 43, 50, 136, 138, 48, 183, 151, 48, 15, 199, 76, 13, 17, 107, 98, 167, 16, 190, 173, 39, 110, 170, 71, 250, 90, 126, 38, 243, 244, 61, 238, 135, 252, 87, 201, 89, 71, 213, 248, 18, 154, 67, 199, 199, 40, 34, 216, 155, 9, 205, 118, 101, 39, 56, 44, 108, 245, 164, 193, 93, 156, 69, 38, 161, 169, 0, 19, 193, 227, 167, 45, 114, 230, 224, 115, 188, 235, 27, 146, 202, 37, 133, 62, 36, 127, 86, 132, 201, 147, 208, 214, 41, 4, 112, 160, 81, 12, 151, 220, 202, 41, 26, 109, 206, 28, 166, 100, 90, 178, 144, 27, 155, 53, 154, 80, 34, 149, 198, 158, 229, 246, 158, 31, 89, 177, 23, 70, 185, 171, 54, 122, 198, 156, 107, 145, 23, 148, 8, 106, 82, 2, 16, 206, 89, 231, 244, 26, 73, 18, 182, 150, 150, 89, 210, 187, 11, 41, 6, 62, 178, 164, 176, 189, 79, 232, 218, 241, 224, 232, 78, 179, 234, 132, 7, 236, 249, 214, 130, 132, 236, 241, 136, 179, 106, 53, 65, 15, 204, 129, 100, 15, 172, 118, 246, 220, 25, 152, 63, 131, 87, 63, 28, 136, 113, 99, 55, 108, 14, 16, 43, 23, 149, 191, 205, 4, 144, 119, 187, 164, 214, 98, 102, 118, 77, 121, 231, 254, 220, 195, 248, 197, 85, 173, 208, 168, 215, 39, 95, 239, 104, 1, 73, 60, 236, 18, 183, 236, 131, 75, 195, 138, 206, 146, 45, 83, 166, 131, 246, 21, 7, 34, 20, 51, 246, 150, 56, 35, 25, 208, 59, 133, 9, 143, 140, 201, 57, 42, 207, 82, 148, 226, 61, 1, 157, 251, 112, 220, 137, 73, 218, 7, 249, 236, 90, 118, 44, 195, 233, 6, 81, 122, 23, 213, 238, 130, 233, 241, 156, 199, 9, 212, 34, 133, 80, 68, 187, 106, 118, 230, 195, 219, 9, 120, 44, 78, 243, 161, 24, 64, 150, 227, 192, 92, 192, 216, 131, 207, 117, 109, 11, 124, 168, 74, 184, 148, 254, 252, 89, 54, 69, 217, 148, 250, 230, 126, 152, 93, 14, 249, 94, 250, 173, 129, 208, 196, 136, 247, 136, 38, 119, 224, 254, 187, 121, 167, 80, 200, 250, 189, 61, 166, 138, 1, 144, 208, 148, 77, 21, 6, 147, 113, 3, 36, 202, 216, 194, 157, 221, 17, 97, 232, 123, 78, 101, 197, 229, 62, 133, 55, 57, 221, 98, 6, 205, 89, 198, 238, 222, 36, 252, 248, 196, 91, 97, 93, 218, 179, 66, 12, 49, 181, 125, 114, 97, 164, 115, 74, 130, 9, 212, 135, 87, 252, 142, 65, 174, 95, 120, 255, 174, 191, 107, 180, 188, 231, 47, 93, 128, 200, 82, 240, 62, 24, 128, 32, 125, 0, 171, 146, 180, 126, 70, 233, 237, 14, 48, 77, 177, 21, 252, 102, 181, 18, 46, 23, 248, 52, 129, 1, 212, 106, 138, 180, 243, 106, 44, 27, 181, 4, 122, 67, 29, 139, 97, 70, 54, 219, 249, 223, 23, 28, 114, 226, 62, 175, 17, 208, 237, 42, 105, 126, 232, 105, 180, 35, 186, 129, 48, 235, 106, 16, 129, 141, 140, 3, 7, 28, 117, 95, 135, 76, 248, 176, 155, 30, 100, 117, 30, 197, 125, 38, 168, 166, 46, 233, 202, 102, 219, 47, 88, 56, 246, 108, 244, 115, 172, 27, 59, 195, 80, 71, 95, 22, 34, 36, 146, 233, 85, 3, 22, 44, 180, 143, 106, 146, 32, 210, 123, 85, 29, 145, 3, 43, 204, 105, 80, 152, 66, 1, 175, 121, 135, 1, 93, 9, 161, 49, 209, 57, 24, 209, 167, 202, 85, 191, 31, 118, 98, 55, 125, 172, 108, 211, 39, 220, 180, 243, 99, 219, 162, 71, 223, 4, 241, 164, 228, 213, 235, 19, 139, 107, 159, 254, 143, 171, 87, 145, 28, 16, 200, 233, 17, 238, 61, 94, 155, 116, 123, 157, 117, 213, 88, 47, 140, 80, 132, 35, 175, 16, 239, 69, 45, 107, 216, 201, 21, 50, 146, 202, 107, 232, 121, 186, 223, 58, 166, 136, 139, 174, 188, 33, 131, 51, 66, 121, 47, 199, 76, 48, 196, 32, 152, 53, 98, 9, 250])},
{encoded: "5kVoHmhB32pMQSw9kaJjhscKmbf9snni9wvqCWTaibS4FizKARB9nm7oaMYSH6heWHD4U3pCotMmdUESzZidxc9L6zcpAgkbaw2i8TyD8BtnZZukxyUzdq9yK69R4z9g4pk4zachCD3TdbWQmjE3Uhary1DYFTMej64EkVrGwbQ92UBSkRuXFf2DxqLFSmjgNdh7T7J87Rvk9F1NCpXUbxu1X32UVDNVr3xinmVkuq5hfXNjQXqv8ok",
decoded: new Uint8Array([9, 237, 24, 22, 206, 62, 177, 69, 6, 16, 206, 63, 211, 22, 58, 244, 97, 100, 229, 241, 12, 84, 140, 90, 168, 39, 140, 193, 143, 58, 69, 52, 55, 177, 164, 208, 124, 36, 80, 33, 180, 25, 80, 109, 9, 163, 90, 31, 131, 75, 180, 105, 29, 70, 116, 152, 67, 197, 136, 46, 217, 40, 76, 42, 191, 162, 147, 216, 233, 123, 81, 89, 243, 23, 149, 153, 46, 29, 188, 186, 23, 236, 83, 142, 38, 140, 117, 246, 177, 65, 155, 206, 103, 155, 204, 189, 159, 112, 70, 112, 243, 122, 106, 220, 92, 180, 28, 176, 119, 29, 163, 78, 94, 251, 234, 11, 119, 158, 90, 152, 40, 32, 122, 150, 35, 184, 120, 114, 232, 25, 220, 85, 1, 253, 44, 84, 128, 167, 207, 172, 105, 223, 223, 112, 235, 227, 66, 66, 217, 125, 253, 160, 29, 27, 97, 178, 105, 40, 182, 196, 165, 139, 37, 139, 176, 53, 246, 207, 58, 10, 51, 240, 14, 255, 57, 163, 65, 8, 9, 46, 91])},
{encoded: "2aZtRYNywVPxF2MrbduiMCCjRPEfFQMAyvQRPYZ7F97myZW3pLXA17WttDHEDNs5QirghhaTGDa3qKEEFey2qeKDstshPHv6SCmw38xGzYWijQZHFkqRF8EhDHjcJVDbze7dDcn9ZKLAVPvTtqGvLW6VHoFDujkqE3XKNHFu85CQ6YkF23CdE3RYBg1oeGhh6Cu6n94K9QbdNtAZT79xTh17s9NL7enZjegatSghhxUk78sun16zjnumPGbEjSyRPzm6wuMxtrX795KbmWADR3RhC8JoVakNZUkJcTA4FxjCtWYkELAw2X7eWjcHSKZan7gErMJJQQtPGjTRrpeWCKQSQ7hAGANy2h4spMNWru27nMUiN5L3xwEEBmsND7LAtWXmQ2qwwA6x7vSQ7wdWB7skqMh3qQEj9MjWhsA4fWUBPSJ7yPT1FEdtPi4xWKcbh3Q6wZWBuCjynnK5QEzLBRqAJTXxExVsxzSFCK4cg2QndQgWE7ZmUkGrM6BznLKhC7AygLdkpESMzgnWaxkmbH5KuY43ewsd1sX246e8fL9TM4go58ahNcenQLA3ZqQH5cDD5vzfTg5MXSjSBMADhntGNjiZFwTENLp3B8DnkkQPeQtv3KGuh8bgcAvYSuhgm7LB6kAJdT9DY2FJ6nsspbNYmSwYyHcohftnvrzijtM79p4aEekjitMxet8KFscViaMkm3RdFeYE9AQsyf3KSeHnBmMxzW8UrzGLbdfvWrtaTV7cfxZwUgiortmrLuyvjz7yGcnuRwZqw9Jqf1rQCtawkVBc1gLhAiKNPormLgp7bpXFq9sLHEFxL5nndZEy7wpYzEdd2Q4HuiUY6NfTnW1ShmCfSaeKjcSW6E8ENYGeeBzu9cbXTB9tuE12jSRpKKgdMAxQErMLpb4Ud1AgVQawieM5FWrTAHLhF5cHGi9NB9uC52A7r5yXrwqeL42DKvTt5bBwpxinUKn4Fx3xb2jbP6fR5UNFCXaFt3UXaruRWrq3KhBWMTy8oBvK8VKQvMQG1E5XrRLYk11ZiduYktWwpNdCK4BhWnmCACrFSQ5XxURqmLQvUQA29XZFXCYhHYvgvfp4",
decoded: new Uint8Array([141, 211, 29, 127, 195, 79, 27, 19, 224, 229, 248, 52, 32, 158, 147, 35, 8, 28, 97, 210, 120, 56, 215, 225, 243, 90, 57, 12, 109, 151, 211, 15, 186, 43, 245, 4, 187, 14, 228, 248, 51, 39, 243, 144, 18, 219, 246, 130, 53, 77, 106, 119, 231, 162, 33, 68, 225, 15, 29, 101, 157, 165, 219, 125, 26, 161, 210, 205, 3, 191, 186, 156, 161, 33, 198, 205, 46, 176, 3, 239, 133, 183, 130, 125, 130, 145, 70, 188, 82, 1, 180, 149, 238, 240, 219, 106, 19, 134, 250, 199, 3, 183, 26, 208, 168, 82, 220, 118, 252, 158, 255, 232, 128, 224, 187, 9, 95, 150, 117, 55, 3, 237, 173, 101, 228, 125, 165, 200, 242, 147, 13, 240, 249, 150, 32, 117, 245, 102, 50, 240, 175, 156, 88, 51, 87, 206, 101, 130, 113, 209, 2, 103, 8, 48, 137, 37, 249, 67, 212, 8, 169, 105, 71, 243, 78, 104, 249, 131, 47, 195, 69, 239, 5, 92, 70, 118, 146, 239, 93, 228, 209, 183, 159, 82, 217, 102, 3, 223, 113, 138, 138, 101, 82, 78, 9, 118, 92, 129, 30, 124, 253, 144, 204, 115, 152, 156, 3, 236, 146, 37, 41, 58, 113, 93, 16, 157, 234, 230, 148, 55, 5, 45, 226, 204, 81, 243, 159, 155, 84, 228, 0, 204, 234, 29, 26, 172, 91, 74, 124, 100, 0, 241, 97, 200, 53, 51, 249, 71, 66, 4, 109, 22, 84, 252, 235, 95, 1, 185, 208, 85, 134, 102, 172, 128, 25, 246, 42, 46, 54, 91, 32, 57, 185, 46, 170, 22, 112, 171, 14, 160, 97, 243, 240, 255, 153, 47, 1, 206, 134, 130, 183, 203, 234, 252, 225, 244, 207, 174, 171, 101, 101, 40, 145, 27, 163, 134, 86, 141, 111, 100, 131, 204, 152, 3, 41, 64, 79, 156, 103, 141, 149, 56, 90, 158, 1, 254, 235, 177, 14, 4, 173, 201, 43, 25, 25, 55, 77, 227, 236, 42, 58, 230, 235, 39, 120, 0, 121, 45, 164, 182, 216, 72, 200, 107, 20, 180, 102, 223, 167, 109, 122, 106, 83, 102, 5, 72, 154, 229, 154, 70, 163, 87, 136, 103, 97, 136, 169, 21, 122, 97, 88, 63, 79, 133, 196, 206, 154, 203, 93, 101, 12, 7, 37, 131, 115, 202, 38, 197, 104, 105, 135, 251, 78, 17, 18, 52, 32, 120, 148, 167, 30, 89, 3, 152, 111, 42, 59, 97, 51, 254, 40, 185, 237, 151, 167, 16, 53, 63, 65, 30, 19, 109, 29, 21, 156, 24, 112, 201, 226, 9, 33, 176, 115, 219, 215, 226, 225, 41, 3, 248, 49, 141, 249, 114, 184, 200, 41, 220, 49, 203, 6, 5, 246, 16, 176, 216, 149, 121, 195, 25, 198, 29, 190, 214, 148, 115, 120, 97, 67, 144, 190, 204, 199, 11, 28, 134, 206, 71, 196, 125, 195, 58, 25, 74, 201, 249, 210, 10, 167, 97, 106, 171, 226, 112, 96, 167, 231, 122, 192, 110, 228, 247, 182, 189, 50, 142, 169, 77, 39, 8, 214, 193, 171, 105, 117, 34, 15, 95, 134, 84, 71, 230, 250, 17, 129, 100, 109, 71, 233, 77, 218, 175, 29, 26, 169, 44, 86, 137, 18, 158, 33, 206, 245, 48, 156, 232, 180, 219, 207, 61, 49, 120, 116, 242, 63, 47, 112, 126, 155, 162, 254, 146, 15, 224, 56, 67, 82, 64, 47, 250, 94, 227, 171, 3, 207, 200, 139, 89, 211, 245, 109, 190, 249, 233, 144, 190, 224, 228, 126, 207, 33, 144, 208, 150, 205, 190, 204, 136, 120, 129, 155, 210, 61, 214, 4, 248, 17, 48, 96, 38, 74, 218, 94, 56, 170, 232, 145, 159, 116, 105, 104, 55, 44, 41, 184, 187, 84, 161, 128, 41, 127, 12, 95, 174, 16, 83, 192, 105, 215, 219, 39, 165, 166, 201, 155, 246, 73, 243, 134, 104, 0, 192, 55, 125, 178, 51, 20, 29, 20, 123, 155, 189, 84, 158, 155, 54, 229, 205, 217, 168, 130, 8, 141, 18, 28, 243, 192, 100, 92, 35, 105, 25, 225, 100, 230, 34, 95, 166, 153, 87, 249, 218, 196, 2, 199, 199, 81, 117, 161, 127, 83, 164, 6, 171, 51, 217, 245, 63, 72, 189, 54, 148, 110, 221, 255, 83, 111, 45, 23, 227, 134, 45, 187, 252, 224, 135, 34, 47, 0, 234, 138, 62, 141, 194, 5, 1, 139, 249, 57, 196, 83, 34, 177, 99, 189, 241, 203, 164, 203, 176, 191, 20, 53, 235, 1, 89, 234, 212, 151, 109, 43, 41, 204, 93, 79, 112, 96, 125, 36, 174, 220, 225, 197, 146, 172, 112, 119, 112, 50, 178, 73, 166, 201, 178, 103, 3, 56, 239, 0, 29, 147, 153])},
{encoded: "SG3uKsrxn9T3KBvN6aTq27NAb3AsiLctuGJrZGLgdy4dQGYzG4wWBtF4qeXZ5BhcpJajkPg73gu1M4MSEybKchiYVfdpAhyQ8fVaoy9Aakp8VbQXQeimnn75SMZ1DgzD9pBA6qA1Bv9a65dxJ8ph4RWvx2qxPXeApmyZT6DE92k6atvtHRSxommXB2VfaBBmT3BajcsYqHYZEDe7K8np2nGCo3oZbqcYhwb9UW2GHJAhytbiCuBMwTiqVrhry7pwN3wEmUqxbqBKTYQMJwCf9JEu8hx29kYcpfQCixqFnStJ9bNF3mZmfKaHBCKdpPPX71VfGUVYe3BhBdUNqfxXeuABodShoCW3wCypivLJKrZrrFRWFgfaBqTCj5qoj7gLiNRG6NuRD1toH5UnPVFRxaFCjsyKui9u7Ta3LXCh9XzmzLrWhUBo2YxW9vVpiqcrcyNk18Swpuj82nHaHP7YQyjqC2WSL52knUwv4SCymZ9x8GouPmckKphzcodg4SFFZNQKcH4GSR2YX5ggmsykdobq5BYWfVBZBW4EbrCzQvHNLSDe6xncQXkxnS3VoPQ8dV8mTYj9XjgbQJ47d788JzQWxd4mGfjYnuuVx6Kkx75GgVMELdGfmSWVxqC1tdBTJKzTrepoTmSyWpFu1p4XEzCyWCbfPENRGrJxRABxCF4dUpYAbwjTtCmcBFrbAyMg9EySawU6QdhmMv2ij5ydYWocC172J2KQgDfCz8geJfF6m35Q7THMLqP7jFMqRU7TvYjssqyxhejRbKXXoCoytAWutjHoLLKfP7fdqtCV5Q7AkfiSDHg7yELDpPbXwLmFxFENCxt79TzHKvx9nHxQbtzvtzBbqsE9W26ZxkCnYjY1fHUxoJjs1cvnzfitYDGo3RKR1rV4KyX4hgcXWmmW4oENommDfo73XKhget9V8NDHN4kZjnkdLKTrVGnSZm5F",
decoded: new Uint8Array([88, 48, 101, 73, 130, 15, 115, 100, 244, 167, 163, 114, 199, 99, 253, 128, 204, 35, 146, 17, 207, 138, 253, 142, 0, 162, 193, 109, 245, 42, 217, 63, 142, 150, 6, 123, 241, 26, 61, 133, 61, 57, 88, 121, 73, 23, 24, 97, 137, 171, 32, 50, 56, 223, 167, 111, 230, 15, 167, 231, 43, 236, 124, 213, 197, 208, 104, 26, 178, 4, 136, 9, 140, 203, 43, 174, 99, 15, 55, 248, 91, 67, 94, 10, 216, 136, 100, 226, 23, 116, 37, 193, 106, 194, 177, 26, 90, 17, 125, 250, 25, 237, 173, 228, 184, 9, 66, 255, 185, 190, 70, 16, 21, 209, 114, 181, 216, 61, 194, 250, 17, 54, 226, 28, 19, 140, 10, 157, 211, 117, 11, 204, 92, 142, 68, 188, 65, 11, 251, 177, 238, 105, 100, 195, 34, 245, 70, 149, 45, 49, 89, 62, 148, 218, 24, 226, 245, 230, 37, 161, 159, 76, 119, 198, 188, 242, 246, 92, 92, 8, 5, 180, 150, 172, 95, 104, 60, 116, 22, 128, 165, 101, 36, 212, 92, 203, 144, 234, 180, 222, 43, 190, 94, 56, 240, 189, 118, 21, 29, 23, 110, 38, 226, 1, 224, 44, 68, 26, 29, 104, 126, 227, 30, 157, 139, 178, 224, 143, 137, 164, 49, 113, 177, 22, 120, 39, 78, 147, 193, 107, 88, 189, 247, 125, 174, 86, 174, 248, 25, 83, 90, 181, 229, 57, 179, 60, 194, 157, 138, 186, 43, 240, 85, 230, 18, 60, 221, 142, 243, 138, 95, 250, 151, 81, 242, 124, 255, 211, 231, 216, 120, 255, 96, 22, 113, 138, 254, 131, 159, 159, 84, 246, 100, 157, 13, 213, 136, 154, 242, 159, 213, 167, 19, 213, 143, 233, 108, 238, 117, 39, 115, 173, 38, 231, 212, 38, 102, 180, 151, 55, 88, 39, 44, 76, 154, 127, 244, 95, 76, 209, 49, 92, 67, 68, 144, 69, 158, 23, 157, 57, 166, 6, 176, 123, 93, 108, 41, 99, 121, 61, 255, 173, 26, 253, 192, 131, 161, 191, 162, 38, 142, 238, 178, 235, 177, 162, 54, 62, 205, 151, 193, 128, 164, 197, 216, 166, 105, 254, 169, 245, 8, 213, 219, 254, 182, 8, 75, 253, 208, 179, 13, 98, 114, 193, 169, 48, 132, 44, 142, 250, 200, 120, 80, 181, 99, 89, 184, 13, 57, 219, 134, 231, 229, 47, 102, 176, 60, 211, 77, 138, 162, 110, 254, 129, 205, 56, 155, 76, 123, 27, 155, 60, 128, 43, 71, 59, 140, 36, 119, 168, 97, 27, 27, 194, 209, 120, 173, 139, 248, 146, 200, 19, 88, 194, 4, 216, 241, 243, 93, 94, 166, 78, 152, 144, 54, 218, 222, 101, 108, 180, 197, 129, 21, 48, 81, 230, 93, 219, 172, 159, 86, 46, 47, 149, 30, 185, 95, 21, 153, 213, 131, 151, 194, 196, 173, 191, 99, 65, 55, 101, 180, 216, 39, 233, 98, 113, 209, 22, 245, 93, 89, 250, 69, 159, 173, 130, 125, 19, 120, 77, 148, 98, 202, 84, 61, 132, 49, 183, 162, 21, 121, 252, 178, 214, 91, 107, 27, 145, 239, 254, 195, 120, 63, 109, 59, 249, 212, 116, 147, 180, 136, 94, 109, 249, 159, 232, 39, 5, 201, 77, 104, 85, 21, 115, 28, 25, 164, 198, 203, 97, 93, 33, 137, 42, 102, 209, 174, 245, 249, 24, 83, 175, 136, 157, 45, 171, 159, 63, 4, 225, 183, 121, 84, 33, 237, 233, 204, 205, 97, 39, 99, 129, 241, 126, 102, 69, 190, 58, 254, 184, 52, 208, 251, 19, 148, 209, 150, 75, 67, 170, 114, 179, 174, 220, 201, 217, 90, 131, 218, 230, 114, 95, 27, 41, 138, 49, 205, 171, 142, 127, 110, 87, 74, 199, 145, 72, 25, 53, 113, 114, 110, 149, 37, 186, 144, 119, 175, 170, 232, 164, 253, 148, 150, 255, 109, 126, 160, 191, 168, 107, 8, 20, 234, 230, 22, 108, 151, 56, 137, 156, 82, 81, 124, 249, 81, 37, 168, 217, 61, 33, 230, 28, 95, 178, 33, 31, 167, 91, 241, 155, 193, 117, 144, 182, 18, 40, 32, 197, 48, 197, 28, 212, 150])},
{encoded: "2SrauXMdgiYuzJ5vJdRws3x3fAibHeDDhsuKWc4477JvYoKY6xm7gJk4PNwvE93qHUcQmRtM1WZwoq5hjG51rwpajoQt5zGLeCa3pU1fiAinoAjUctXz7PUvo1rVizCN53zZK1qw1EA7wXvrcjCxNuWQrUrzfxGQD5pmjEawpesaiMcFSGggUPSjvob3KU1Ae4SzPZRmULrjut3jkovzZMipzZgP4S5hJASJdDVcyuZqd5nfFbgBBiYz7mmeanjy5g97i2jfLW9BfHvwzbELcECbcb87qqiraLnT52YYh6D6aAryFCVB5WWV267uHnPjeARPiGPamYt1mHvjYyPtSb5RDDChNE5fvpbCgjtfihFZ5jP7bz3VjzPQERiJ18tsJWDmvuLicJFXKGEE65Tz2rp9EEm9B2JeQoox8kP4pBEFxNAP8XEwcyHNdPoVVUp4qfKEAUiQ5LRUB2iLS9jM2Tpts9vJ4k6sYNwFRBzAvT9igqYTow7F2Waoo3y67HjimmLrXBaugfjegq3shVUQGyJkDK9fBpbDzkh1wukgzDamg1szke2WKo1upHCcG2mPw38HTt4KMeiLhxV1dAwcjY215LkLdrd69vBYmf4FjSuyqqeyrFeMKujFiby5NbcqzVHSR57GqD8r6aU6UgoaZfdYfqD6vTXGW4C6a46zMKq7HSCH8SfFYy39z652kEZ9oCrfCvHMY9eNkvqkMW2VPWwwrfeJC9iE3sDpQSYgo3GNhzx67GtjormCWdQbaMxwH3Dn9hpySMuU648UNrfhHqfdjC9E6Aw8fCXhYZEwRN4pLy664DdYFrR6otmRKcDsyLHypmJB1jSQCy3bLnVs89xJFkEF3ujyW9Q4LHdrjS1bx6hLLSPBUcbDYVX3vLhAm9QySPCPZ9rZMvW818Xy2tT7WzYzk6ap2AXsArx6Ccwg8dZa2zpQ7oWNmCiwH9qcZVj5PJW9zHpmMS28YPRHWBM4c1bvtB2W3N44rmHYJhpUU3aLumAokeCiEcAcW",
decoded: new Uint8Array([204, 1, 40, 114, 77, 27, 117, 157, 10, 72, 84, 44, 252, 251, 102, 251, 226, 2, 42, 188, 95, 168, 174, 24, 105, 6, 38, 70, 245, 68, 35, 117, 182, 61, 112, 65, 119, 41, 60, 109, 54, 48, 167, 45, 83, 14, 70, 16, 67, 13, 62, 219, 107, 225, 16, 194, 141, 142, 105, 75, 213, 156, 126, 190, 13, 225, 168, 151, 213, 43, 197, 239, 7, 155, 72, 49, 18, 14, 86, 118, 78, 234, 54, 127, 254, 255, 178, 157, 65, 32, 70, 155, 195, 149, 27, 79, 67, 38, 7, 108, 199, 27, 249, 158, 143, 42, 100, 248, 63, 205, 104, 77, 7, 176, 53, 255, 164, 251, 204, 67, 3, 14, 107, 44, 34, 151, 1, 205, 216, 214, 133, 58, 156, 110, 26, 71, 162, 177, 238, 117, 121, 206, 86, 238, 116, 47, 177, 46, 173, 240, 253, 205, 115, 245, 251, 83, 61, 37, 22, 190, 60, 10, 228, 159, 223, 49, 106, 166, 53, 84, 186, 54, 68, 218, 199, 86, 105, 118, 254, 14, 198, 23, 73, 202, 16, 149, 97, 181, 190, 227, 206, 159, 90, 102, 193, 38, 171, 160, 62, 47, 11, 216, 162, 76, 34, 102, 132, 243, 188, 66, 65, 200, 231, 45, 66, 0, 94, 16, 208, 133, 118, 60, 142, 247, 237, 251, 237, 98, 159, 104, 46, 17, 26, 86, 186, 253, 48, 101, 181, 186, 163, 118, 183, 18, 151, 146, 103, 54, 177, 164, 249, 54, 104, 5, 77, 45, 43, 138, 54, 65, 31, 194, 213, 0, 177, 68, 102, 239, 47, 197, 116, 182, 25, 255, 238, 101, 188, 222, 112, 231, 70, 178, 236, 112, 138, 190, 19, 151, 79, 189, 44, 176, 5, 18, 203, 130, 33, 217, 251, 169, 95, 61, 246, 97, 36, 30, 93, 44, 122, 217, 153, 189, 12, 182, 130, 212, 55, 127, 104, 38, 184, 42, 108, 108, 169, 33, 180, 55, 148, 234, 15, 141, 85, 71, 70, 39, 86, 25, 155, 116, 97, 123, 15, 134, 5, 234, 171, 13, 245, 240, 57, 123, 65, 121, 42, 146, 182, 182, 122, 234, 180, 64, 37, 5, 236, 63, 245, 49, 171, 111, 125, 37, 0, 168, 213, 69, 173, 23, 72, 245, 223, 99, 81, 61, 51, 35, 196, 148, 125, 180, 67, 42, 197, 128, 38, 90, 123, 10, 28, 204, 207, 12, 38, 106, 54, 211, 170, 127, 56, 250, 161, 183, 218, 126, 240, 182, 180, 233, 47, 42, 230, 157, 23, 29, 197, 95, 106, 161, 163, 14, 71, 212, 91, 234, 170, 120, 34, 0, 236, 219, 173, 194, 152, 116, 33, 227, 216, 137, 68, 57, 116, 51, 133, 186, 220, 158, 108, 63, 21, 174, 8, 124, 71, 182, 117, 90, 79, 216, 70, 214, 61, 167, 125, 233, 119, 122, 20, 59, 165, 79, 74, 29, 246, 198, 72, 63, 32, 164, 40, 45, 35, 51, 221, 203, 239, 90, 181, 187, 83, 191, 32, 35, 3, 38, 40, 37, 182, 122, 250, 73, 166, 143, 187, 160, 69, 138, 248, 169, 170, 2, 234, 222, 247, 42, 17, 216, 129, 58, 16, 218, 108, 200, 223, 19, 243, 140, 50, 56, 76, 244, 119, 78, 50, 129, 74, 22, 218, 244, 4, 17, 190, 2, 81, 233, 180, 176, 196, 49, 118, 137, 27, 69, 230, 70, 230, 110, 129, 204, 5, 191, 253, 56, 66, 69, 193, 218, 99, 113, 135, 118, 254, 100, 142, 246, 152, 217, 32, 79, 110, 203, 179, 136, 212, 5, 115, 251, 56, 249, 39, 227, 215, 103, 46, 254, 248, 49, 218, 201, 164, 174, 70, 175, 248, 156, 228, 101, 108, 151, 151, 29, 201, 151, 42, 183, 29, 143, 145, 97, 26, 112, 7, 169, 236, 242, 27, 81, 37, 169, 227, 71, 199, 75, 10, 239, 167, 125, 164, 246, 181, 230, 29, 151, 170, 208, 194, 152, 23, 142, 145, 226, 59, 233, 57, 44, 107, 57, 235, 158, 42, 179, 45, 137, 62, 199, 33, 173, 102, 227, 78, 76, 50, 133, 87, 221, 142, 205, 36, 153, 240, 249, 246, 41, 77, 182, 73, 132, 96, 167, 169, 212, 82, 207, 190, 113, 117, 179, 142, 19, 247, 90, 62, 104, 132, 97, 52, 109, 107, 190, 107, 230, 245, 66, 121, 52, 129, 52, 190, 128, 252, 171, 134, 112, 202, 241, 103, 6, 59, 84, 188, 153, 34, 129, 111, 77, 62, 86, 119])},
{encoded: "4bFdGK87dyPL5SLCG9jPNddsA1WTC2bhrhc3TSxGL9sLo3sEhU7QzR1632Y862B1NBVEENEcSnFqJesxm5QQaDXsbpvHcbUJwe7TZ5N6kbAVv4LEGRNXZAEx5pmYRRsvFvoxGJTHCWxzZ44b9sTLzcH2L5ckrgQ6PcBF2oYVKMF1ENiLPwQtrb4BAQAyShngcV8tT",
decoded: new Uint8Array([64, 96, 155, 51, 219, 107, 125, 73, 43, 240, 252, 113, 172, 174, 156, 195, 222, 170, 198, 140, 74, 145, 248, 82, 61, 217, 199, 39, 65, 51, 225, 7, 210, 200, 217, 240, 1, 236, 86, 12, 48, 218, 79, 233, 219, 252, 236, 88, 47, 212, 34, 12, 45, 205, 243, 100, 82, 23, 13, 158, 233, 255, 121, 28, 105, 180, 182, 127, 162, 144, 188, 250, 104, 158, 206, 9, 218, 135, 101, 138, 248, 34, 243, 165, 126, 85, 83, 33, 119, 201, 161, 42, 206, 21, 45, 112, 79, 166, 193, 42, 123, 167, 204, 248, 88, 53, 11, 137, 77, 147, 196, 99, 83, 56, 165, 36, 58, 243, 234, 51, 147, 83, 225, 52, 249, 87, 236, 147, 177, 174, 165, 50, 78, 57, 89, 254, 118, 208, 72, 22, 220, 64, 74, 212])},
{encoded: "mq1wKWbiXpYp91NWKHQWVGyT5v3uyBuJxNg39YUajFguM4FttUFgCfRpVY9yJgytt5ZWs8jwXgDrZYuvUAM9R7STyT8ETaoPo5H3BYMJ5NvVBTVGK6NUAtXcRSQGGsAwyi4h9S8mWQQHJ5ZgbbRENj6eB5qkuLYgMDw5uVEzzCAtUkf8JCWwkqH37x8awQpL1m6nSQdN3KEjo9xmkFMbR7Lg7TQ7wj55B6mdsVNBpgsNFU73DbeKwr6SBV2cGStQoGE36gHUWHXGoBm7oNAVMxsbELEpEPyW4yJ35SBMnGvJ8RaPSvHeTkQ",
decoded: new Uint8Array([44, 7, 208, 237, 147, 23, 135, 172, 95, 220, 176, 126, 31, 240, 244, 243, 80, 136, 131, 136, 24, 179, 72, 182, 33, 210, 164, 25, 233, 59, 171, 159, 199, 125, 200, 98, 125, 43, 1, 197, 243, 104, 61, 176, 217, 63, 35, 70, 237, 151, 184, 107, 189, 78, 90, 61, 153, 191, 67, 182, 205, 185, 135, 128, 199, 95, 209, 165, 51, 168, 73, 6, 146, 245, 49, 99, 155, 238, 142, 47, 20, 86, 60, 7, 142, 100, 253, 240, 138, 255, 122, 243, 92, 148, 173, 133, 102, 225, 123, 16, 13, 164, 231, 227, 7, 159, 25, 200, 105, 11, 23, 226, 26, 129, 186, 188, 254, 27, 121, 6, 166, 237, 144, 215, 121, 165, 72, 61, 252, 19, 120, 13, 239, 234, 252, 45, 3, 35, 209, 165, 40, 157, 117, 166, 225, 225, 101, 193, 86, 45, 254, 43, 244, 174, 64, 57, 193, 157, 219, 227, 51, 230, 216, 253, 170, 249, 115, 183, 39, 151, 107, 51, 43, 90, 237, 162, 106, 193, 171, 137, 196, 187, 186, 155, 31, 5, 200, 149, 15, 52, 44, 225, 177, 174, 233, 246, 141, 134, 222, 204, 179, 90, 160, 98, 144, 77, 36, 214, 196, 86, 26, 201, 253, 137, 240, 157, 123, 38, 151, 5, 12, 3, 136, 132, 232, 96, 26, 165])},
{encoded: "5SFtYzGZjjNM1PSdbgsepTrPDawm2oCMojgSW97PovLwfPaD8HBTRfdFLYYM4tG1mbUeVEEHSVNTreS5CJkyWkdk4TyQPb2WmNX36WGx6NATLD3d5V5PgzKnq1JgegGEmhNWNEoR3nvfEem4YdXY9hoifNqEvmzUQtjNSznT4f3wJ9Giuvzc6XHxbaCmd99HiMsBHMDFUWsWhg7Xb5w47LkjhSCqRQRqQbYBhQ4YHervRx4Md8dV61Zzgb5hvvwtYiFEQnksvFem9pNXk42YJfBqzeTsnZuhxG4CmGoif7stkywPzJpKa2Dm9as8YM1qq2SU1R3zdn2YY2c2TqfFksQKDXzj3r8JTDZxGm7trqjFa2ZysKUgJCPTjoYZYqpxatiWP7rFtN1nhWTKPcEQgLThWxVuwDfyCeeut3heihHvx5F2EWoY4CtQTbcKgJMERvgMqh8oESMSHjtToZr3HuUN6RrXjyJi9XiXeTGqe83iLrTLZ2WkiowNiPAZxApTJ6a7fTGg2W3M7fpkY2hc7HzzGMRJGuy59wUUpfsW5fMmS8rTHcDgWp1FGp389vd4sBhfzkXSLeh3p5dPxBHXJeGWjSygZvu8YXQHu6TWQYtxkDroq8ZBRsMHvWQCXaiMdGGMxALgqVHHWJmA5fNLeDJGYAhUSiRabSzVYsGSayacdWCS6u8ganCyuMF1XZ79nSENaT6wCKFN28xLmRz3G5NbYb3SAGb8HAryH8gUoW2Ndsde1BUo8o1x2SMmHGff68rWvBkaRRGk5gNFjDgSF49XhBbNe4bogX1rPfV2tZjvKNkqWehVynbjUPMfczLEasXYLT8fWyeXw3prQwEkgLmVR1uFkLtYuuXYFXM9ih4ULdNsNXBUVppobzz8x3ew84WD6y5a1oHFwnupTvpKYbsYqRJYPQiPfnfAjJNSFYYcfxtpoc11bYcEVzzxSxU3nWuVwfT1bXknpDtFM53P562rmkWtSNv3GkmCL3eVsnos6eaMWD3pGGuMtYFXtjSZPEJXMLCM18bzMhRYkFvmY6zH4HejZdnU6PMDpjZEAzJnsWUoMadZzeZRmnYNK4tPmGAK9qs8ekj79nUof1tsn6rtSpP4p9hdeZbHGCkPo6Nu3WcyQfuDxVNrqmFYre739Y5XTvQApxombcVdY4BizsMWUrTmAJttp14UmYakAkmAuDs8PUGAnDwo6mQYeunxQY5HbRQbN1JGQ84VppeY85haBxgv8sdE1r2rxPjyXVdjELggmocLk3AMkbmUGCZwLmgBhCp7JP1bEFraVENAFbd3YGHye4wB88YKtqaWMmTmV5L3sfvDGwMcRji6ERwT56U",
decoded: new Uint8Array([127, 63, 148, 216, 157, 49, 55, 20, 26, 150, 170, 139, 109, 58, 63, 224, 6, 128, 6, 43, 149, 130, 238, 124, 172, 14, 189, 149, 219, 173, 77, 29, 141, 145, 218, 203, 213, 224, 42, 117, 244, 66, 223, 251, 115, 179, 96, 63, 139, 40, 149, 109, 253, 140, 163, 141, 15, 217, 67, 88, 244, 53, 15, 117, 83, 111, 226, 215, 48, 232, 181, 147, 232, 10, 192, 200, 50, 64, 50, 132, 15, 45, 104, 67, 227, 41, 65, 177, 138, 40, 163, 86, 178, 85, 130, 179, 238, 34, 191, 251, 10, 230, 13, 37, 168, 74, 125, 16, 120, 74, 248, 96, 44, 255, 94, 161, 91, 193, 4, 24, 69, 115, 183, 161, 80, 73, 199, 173, 92, 243, 10, 99, 28, 229, 225, 204, 147, 186, 209, 192, 102, 42, 193, 171, 151, 230, 224, 118, 185, 242, 103, 239, 96, 213, 178, 251, 227, 153, 222, 123, 207, 15, 187, 162, 223, 91, 101, 146, 26, 117, 12, 154, 242, 94, 62, 225, 177, 36, 46, 205, 44, 41, 17, 168, 252, 105, 160, 227, 52, 94, 236, 181, 65, 120, 200, 9, 219, 102, 97, 160, 0, 72, 226, 66, 2, 92, 70, 71, 40, 123, 173, 71, 247, 83, 201, 188, 191, 228, 174, 209, 140, 185, 58, 22, 206, 186, 188, 169, 248, 56, 120, 52, 182, 157, 43, 236, 91, 90, 154, 62, 113, 198, 10, 58, 195, 156, 146, 62, 214, 244, 117, 242, 24, 136, 81, 189, 207, 102, 149, 71, 29, 110, 196, 144, 0, 183, 225, 6, 97, 214, 98, 162, 45, 13, 213, 1, 247, 175, 18, 51, 14, 42, 144, 52, 35, 251, 175, 76, 146, 185, 202, 41, 175, 75, 230, 207, 17, 213, 105, 226, 94, 119, 37, 206, 187, 186, 194, 121, 61, 126, 185, 213, 120, 156, 110, 74, 19, 154, 209, 36, 162, 84, 101, 207, 7, 30, 232, 42, 16, 65, 161, 28, 220, 128, 100, 33, 88, 246, 111, 41, 49, 150, 145, 46, 5, 107, 19, 88, 19, 35, 180, 146, 157, 84, 85, 46, 16, 208, 129, 159, 91, 146, 210, 115, 230, 71, 211, 205, 113, 15, 206, 93, 82, 204, 77, 119, 232, 75, 18, 242, 105, 88, 241, 130, 244, 165, 111, 63, 26, 14, 156, 231, 157, 39, 47, 93, 1, 78, 180, 132, 215, 146, 105, 69, 147, 70, 198, 114, 161, 49, 120, 21, 72, 86, 127, 234, 172, 190, 213, 58, 93, 136, 206, 31, 189, 42, 138, 168, 184, 53, 71, 220, 70, 63, 85, 19, 150, 70, 2, 48, 135, 52, 218, 164, 227, 178, 49, 90, 179, 73, 143, 150, 190, 126, 222, 2, 17, 194, 41, 230, 183, 13, 29, 112, 37, 136, 49, 71, 238, 148, 127, 224, 148, 142, 252, 121, 54, 216, 71, 21, 24, 107, 250, 153, 131, 102, 48, 190, 44, 156, 62, 199, 248, 31, 138, 42, 10, 231, 46, 170, 195, 81, 10, 145, 209, 179, 223, 173, 130, 96, 47, 73, 69, 160, 37, 8, 133, 232, 188, 192, 253, 119, 207, 26, 156, 46, 91, 17, 146, 175, 14, 184, 241, 148, 67, 210, 34, 222, 172, 79, 40, 170, 78, 164, 183, 148, 85, 184, 112, 74, 122, 26, 234, 27, 156, 39, 45, 43, 17, 143, 115, 11, 159, 53, 190, 9, 176, 150, 197, 85, 90, 212, 121, 180, 219, 198, 10, 195, 10, 236, 70, 89, 144, 6, 34, 61, 95, 164, 34, 65, 68, 183, 65, 43, 197, 51, 230, 201, 93, 165, 151, 181, 204, 25, 122, 40, 226, 231, 142, 241, 233, 247, 18, 173, 248, 167, 89, 144, 226, 224, 96, 100, 121, 30, 246, 155, 14, 111, 242, 29, 8, 66, 38, 57, 38, 63, 170, 130, 254, 113, 150, 192, 189, 250, 1, 159, 157, 253, 209, 63, 55, 227, 109, 95, 134, 52, 96, 230, 59, 31, 33, 83, 95, 5, 171, 151, 71, 175, 56, 112, 162, 46, 216, 5, 246, 165, 13, 232, 133, 30, 48, 104, 57, 59, 194, 115, 178, 175, 220, 67, 222, 27, 209, 68, 131, 137, 250, 63, 91, 237, 19, 252, 1, 64, 44, 115, 238, 225, 128, 31, 209, 219, 205, 115, 29, 75, 40, 94, 81, 243, 230, 254, 234, 179, 131, 128, 142, 130, 12, 73, 210, 113, 208, 160, 83, 213, 57, 63, 123, 147, 198, 105, 211, 107, 165, 124, 140, 89, 95, 197, 179, 146, 234, 17, 156, 16, 196, 245, 19, 76, 194, 235, 11, 62, 237, 211, 114, 246, 88, 179, 109, 199, 214, 83, 165, 229, 254, 242, 29, 0, 209, 150, 123, 178, 65, 134, 168, 163, 25, 208, 236, 117, 96, 51, 182, 78, 4, 152, 153, 58, 233, 6, 0, 115, 54, 163, 52, 14, 35, 174, 94, 24, 180, 119, 153, 150, 42, 57, 246, 227, 120, 12, 239, 69, 79, 214, 26, 73, 142, 78, 71, 179, 167, 206, 105, 151, 185, 116, 47, 5, 246, 199, 219, 219, 56, 238, 85, 213, 69, 203, 207, 203, 200, 181, 154, 83, 39, 182, 91, 215, 102, 32, 73, 188, 141, 214, 101, 228, 74, 244, 126, 255, 255, 14, 5, 179, 115, 94, 47, 176, 29, 140, 101, 122, 234, 42, 175, 148, 191, 200, 205, 8, 5, 54, 88, 174, 225, 71, 84, 85, 4, 83, 235, 25, 197, 53, 118, 53, 37, 70, 69, 15, 209, 157, 247, 162, 28, 236, 202, 147, 115, 246, 68, 214, 174, 100, 25, 214, 138, 231, 245, 227, 205, 249, 45, 35, 107, 23, 45, 11, 53, 172, 207, 234, 148, 26, 59, 103, 85, 91, 215, 6, 86, 4, 20, 135, 70, 116, 116, 56, 79, 249, 159, 149, 20, 252, 184, 73, 28, 14, 67, 187, 243, 251, 30, 119, 125, 112, 213, 178, 115, 205, 47, 133, 208, 253])},
{encoded: "2PRuM7VmM65iHtys9ycCc4ZZqYAAZSuNaG8ZXJZPU6hmqdP5weJfyyqjW8FGAP6mjLzZWS2S4mW6BUL6WyVbhh19L6Se4GVuWnDsz6NnFAMpb5PiFVtw7SvSJXV82yy6eiaZgE7po9BxsAjKpLTgnJhP49SksvJwtPxxbe9gGC58ApbYfLwKyaQ5Cp7noWpwLhjv8fxFeqjLoHcwJBfuVF8Kz2rHz7YPb2nRDVqJTeGZzxd6hEs7yLMzbop7cZpYQw76RXQXJ5WGSPPKw49fLnND9UhpUrrKTJ64TFsgVcVnxTG22xFYHXtaLM838UNgBK9CbjNYgNMn7Kkja4y1SeENyHZoNjPw3WNe3N4v7PRhkS7ciAep7Ht84kdazkQacN25iMzgT84rpsxrYRQXXYCvo8Tg5UM71fGznC5fAFxNfLatUEcZ5oVS1GPD2b1LZN8evrsbD5RQizZtTXYiszLfJDPSargnmQvM2jFWv1HiynyNUb7m1UiKyvLfeSvEcS2UjMWK69mBRLitCHfau7wFsN441F62vnvdeb9dGHstp7DcXfN41qnfYhJnSBuZxLJPyY5HXLSV6nsd91sUvC8DCct1HPzWArCZzpN9bTqSMx8cCruVVzfSjdBt2NjVLQKBHqfLQCsCPGiMLiemZBuY2SNgBvwHQ2SM8XHvkgpYg9fbvvbVX4jVNTqTKy1SzXntYQAej996F1w3L2TWwrxbnyDZQewaJBhnTMcJQkA3X7ZCUqne27BSSQMYqvtiVjg7wvvtwsTbJh3i28uKficabceB8UTDRXvAZpM5sUUGwU7HE4VfweqXHs13wBgeWHn7y9BRnkgdMYVrFEMJn8PrHrhTFwKV",
decoded: new Uint8Array([240, 101, 84, 191, 94, 202, 70, 196, 44, 62, 149, 96, 225, 163, 31, 75, 4, 12, 28, 234, 162, 76, 235, 89, 247, 135, 152, 190, 115, 117, 167, 43, 108, 12, 94, 217, 128, 91, 126, 67, 81, 85, 1, 201, 90, 243, 128, 140, 187, 249, 157, 60, 100, 75, 166, 201, 157, 201, 151, 153, 69, 123, 18, 69, 157, 143, 166, 241, 180, 170, 89, 240, 101, 244, 106, 142, 137, 239, 191, 5, 2, 224, 28, 183, 31, 213, 118, 137, 81, 144, 252, 211, 78, 82, 59, 126, 25, 51, 62, 118, 53, 195, 208, 98, 221, 156, 155, 32, 52, 90, 220, 254, 145, 195, 84, 153, 218, 176, 189, 54, 3, 149, 140, 141, 126, 34, 207, 31, 34, 67, 48, 145, 58, 202, 178, 246, 201, 105, 35, 54, 63, 29, 201, 208, 37, 96, 252, 36, 198, 99, 151, 35, 141, 119, 73, 235, 171, 159, 244, 186, 202, 245, 241, 28, 195, 190, 75, 218, 36, 55, 186, 66, 235, 10, 108, 2, 32, 160, 57, 98, 9, 13, 167, 17, 242, 244, 120, 210, 49, 245, 83, 16, 77, 132, 117, 103, 111, 197, 181, 160, 154, 11, 86, 25, 85, 47, 16, 202, 59, 66, 53, 75, 135, 165, 245, 130, 187, 187, 180, 97, 22, 136, 145, 180, 158, 132, 164, 131, 242, 88, 131, 74, 80, 37, 253, 96, 107, 68, 72, 196, 172, 253, 80, 154, 219, 220, 140, 151, 88, 230, 226, 2, 154, 215, 230, 7, 178, 126, 115, 98, 46, 10, 141, 224, 234, 136, 1, 214, 73, 74, 133, 32, 144, 132, 80, 220, 79, 217, 46, 26, 216, 138, 145, 130, 194, 12, 92, 138, 106, 68, 193, 50, 176, 87, 125, 156, 116, 17, 146, 100, 118, 83, 177, 190, 198, 27, 201, 168, 25, 217, 70, 47, 113, 152, 63, 70, 247, 174, 192, 12, 70, 177, 207, 118, 234, 157, 51, 201, 118, 122, 140, 104, 243, 125, 214, 80, 141, 244, 182, 20, 186, 167, 95, 251, 31, 172, 24, 69, 122, 118, 177, 121, 203, 131, 106, 209, 221, 30, 204, 24, 23, 83, 51, 15, 130, 204, 80, 30, 47, 27, 110, 26, 232, 86, 95, 162, 155, 154, 204, 41, 154, 2, 159, 33, 189, 255, 243, 21, 212, 92, 203, 107, 116, 136, 80, 186, 157, 234, 169, 2, 71, 197, 44, 130, 125, 209, 139, 206, 158, 125, 215, 251, 68, 179, 39, 214, 8, 124, 85, 13, 99, 48, 1, 11, 244, 168, 0, 222, 65, 196, 120, 81, 209, 107, 176, 153, 98, 25, 61, 13, 8, 184, 14, 96, 150, 193, 19, 87, 220, 175, 49, 31, 255, 153, 25, 103, 65, 80, 91, 48, 241, 171, 230, 39, 19, 172, 227, 233, 178, 207, 79, 241, 30, 20, 253, 141, 13, 36, 10, 13, 187, 220, 77, 106, 180, 144, 76, 69, 247, 235, 251, 121, 223, 188, 97, 144, 168, 72, 55, 216, 165, 157, 82, 222, 170, 137, 9, 49, 153, 104, 166, 138, 139, 99, 236, 132, 6, 210, 222, 12, 64, 76, 224, 255, 21, 231, 209, 248, 90, 93, 248, 222, 96, 124, 111, 183, 174, 56, 139, 85, 42, 58, 192, 251, 75, 99, 92, 236, 172, 248, 223, 145, 91, 70, 39, 15, 238, 36, 217, 158, 189, 140, 2, 88, 72, 14, 38, 108, 179, 89, 184, 109, 231, 208, 195, 143, 154, 181, 9, 228, 189, 118, 66, 220, 125, 134, 152, 249, 175, 69, 65, 41, 213, 184, 109, 7, 89, 53, 85, 55, 212, 47, 133, 118, 194, 170, 136, 58, 95, 89, 163, 19, 19, 253, 11, 7, 225, 29, 242, 62, 103, 28, 166, 25, 221, 125, 197, 48, 206, 235, 7, 216])},
{encoded: "1qfmmXsKrjgoaQQXBKzu4wkWvhiQMLh1eARhJv3no5y5birw967J4jRkoxhoYq8S6QpiqzxgSAMCmEwgz6Dpaj1qucCsGg7sYMaw2wcteSyNCa9yf5RH78EH4uyrooAkQVQkAqFLnkwYcZPPn5PhsxkbL4Lwzy9fHdW9DyBzgebE1FyuULALDWLkERwrSZPTSQNzq7XYkxEi2RhofVzougSucXJzWAnHvaSP175iBGwMcWbjePFdNTPn6kZKJMsgf4ZUe7bvcsVdeJumhVMfGpgKRHBfs178FNnvA9TznuA9AHZGyUsGtraUU8pMtVLdaPvJJFeBikg8iEK3dtCzN8LrqRyZDusVEX4rYW8vibQ8kTyGJs4QoQXiEbQnAK9GT5vjKGNKbUwHF1aEi3M1xTJ6rjEL2ApX5HhM4C72g9EeKaUpgiCT4PU4jDMTkBaLF8hzQ99PdkHn5rxJxBXehWdyCFZyn466E4storEdG1xwAVxooQ5eNSJDTT4LB4GTy2YZRwm19aFNP13jpjZ25HA8oTuQAK9J1LUUqBECHBVsMrP5oxxfjMaNcadW22jBoPvag63DYgyiXyH71npXrtLeW2z46B3jcs1MFZRf2y1tXdnjyYhrazNJ2zXihetkJeZzoERa88kmR9vcYdae8bhx3JHPRrKc3WgHpdxRard3Qfyxqdb1aUKprwx2kxY6efyMffHbL4nop3ni48qsTZUfipvHS3tVGLpJpwjacuHgq7gF5VtWPBCbBdPXve2RNWQLxY4huwNUBAYneeGJxuKHQ7xfPVX3AYpKy2r7VNg65W5qkDn4WQbuvDjaXm2QXDWzxLRM2nGzpt1MfHReYKhdPndhda5AR2gtUcRqntGa8VSJuX9gZxVJ8jeRLjCdxq6mCgVoaWUUKijVUsq5c7N7Hx9MVXJyoSKMP1KKLsM9wqN5hFWmpToCobaEvtkrpM3dtHyksUdMYC9XShg95JEBPJkTtp279G8jxu98MnA79ESdLnyza4zt2h97cLSe9uDPQS1f4gM1VSpd7rFaH9TN5xPQcZoou6nZUeuH6j6JtgYR2DEfybPQkHLGNBADyuhVbZ1ZxGZ6W8D9izWrdYUHAhUFwixi1a14FpT85JqGFhXQQCg6KcyRPHrZpff1VP2kocQQsWe2rM2dEjMys3Q",
decoded: new Uint8Array([0, 32, 94, 239, 173, 86, 121, 67, 136, 220, 118, 17, 49, 246, 5, 98, 81, 55, 76, 134, 76, 138, 79, 186, 217, 216, 134, 56, 47, 74, 176, 194, 159, 124, 231, 158, 169, 117, 244, 112, 63, 210, 195, 78, 118, 72, 36, 168, 248, 17, 68, 51, 108, 10, 251, 105, 31, 151, 147, 170, 163, 64, 11, 76, 86, 43, 97, 63, 48, 40, 81, 142, 125, 110, 53, 89, 115, 153, 190, 19, 175, 37, 102, 109, 248, 109, 27, 6, 158, 203, 72, 209, 171, 63, 132, 65, 168, 99, 245, 83, 160, 32, 53, 110, 175, 54, 22, 69, 178, 13, 186, 89, 236, 33, 50, 21, 248, 247, 113, 65, 0, 42, 127, 229, 151, 143, 6, 83, 67, 156, 213, 157, 35, 75, 188, 165, 251, 56, 185, 103, 16, 99, 93, 122, 22, 220, 90, 98, 177, 78, 158, 173, 143, 118, 117, 57, 194, 33, 153, 47, 54, 85, 11, 23, 97, 109, 144, 96, 118, 209, 150, 78, 248, 105, 85, 72, 41, 116, 215, 165, 186, 46, 123, 30, 236, 156, 90, 145, 224, 158, 179, 153, 126, 142, 89, 151, 100, 25, 98, 180, 248, 102, 198, 115, 236, 199, 11, 11, 202, 155, 18, 162, 196, 132, 183, 107, 199, 180, 5, 30, 135, 35, 133, 155, 133, 12, 138, 208, 57, 68, 253, 245, 203, 200, 106, 236, 252, 24, 25, 157, 139, 254, 91, 59, 163, 113, 254, 122, 206, 86, 25, 159, 112, 198, 223, 9, 34, 35, 170, 66, 119, 125, 199, 127, 97, 98, 202, 86, 101, 49, 4, 32, 239, 178, 98, 171, 33, 195, 109, 183, 43, 14, 78, 96, 180, 163, 113, 199, 214, 2, 80, 44, 98, 46, 149, 223, 248, 114, 41, 97, 219, 228, 239, 252, 222, 190, 232, 11, 144, 39, 112, 77, 22, 25, 98, 168, 208, 113, 28, 164, 114, 64, 238, 230, 65, 87, 109, 112, 63, 227, 219, 109, 197, 128, 191, 248, 227, 82, 84, 86, 233, 24, 100, 242, 89, 159, 5, 117, 157, 2, 223, 0, 179, 111, 15, 237, 87, 156, 149, 105, 222, 165, 203, 122, 243, 96, 68, 28, 64, 69, 98, 96, 246, 170, 203, 11, 61, 188, 223, 201, 154, 176, 116, 66, 45, 224, 134, 5, 199, 29, 129, 34, 78, 160, 160, 122, 187, 133, 138, 118, 194, 38, 10, 30, 38, 233, 134, 40, 99, 28, 97, 90, 24, 117, 200, 99, 85, 76, 92, 195, 180, 160, 242, 76, 47, 50, 238, 230, 143, 54, 84, 247, 217, 75, 214, 100, 196, 180, 199, 151, 227, 89, 108, 199, 159, 57, 170, 54, 101, 2, 32, 14, 75, 194, 204, 41, 77, 6, 221, 29, 108, 139, 55, 156, 86, 46, 93, 0, 218, 143, 58, 157, 244, 220, 33, 143, 216, 179, 123, 166, 225, 176, 183, 187, 187, 136, 123, 139, 124, 48, 94, 93, 134, 108, 29, 70, 34, 244, 231, 196, 11, 99, 104, 27, 136, 164, 210, 242, 109, 21, 169, 213, 47, 245, 31, 158, 42, 114, 38, 105, 72, 127, 87, 108, 214, 220, 67, 131, 113, 85, 107, 207, 166, 157, 78, 187, 153, 70, 129, 18, 19, 20, 80, 50, 166, 41, 224, 21, 43, 224, 108, 211, 122, 210, 46, 47, 137, 9, 115, 140, 141, 161, 66, 5, 216, 253, 84, 23, 197, 2, 145, 148, 23, 203, 221, 90, 54, 189, 174, 46, 70, 227, 210, 135, 56, 60, 198, 96, 184, 73, 143, 133, 45, 45, 52, 245, 110, 204, 80, 67, 47, 39, 136, 136, 248, 109, 154, 177, 219, 110, 91, 232, 192, 2, 20, 232, 27, 60, 148, 239, 154, 119, 177, 177, 51, 244, 58, 144, 228, 251, 90, 192, 17, 215, 216, 244, 199, 12, 215, 202, 130, 208, 73, 40, 99, 58, 17, 147, 140, 17, 88, 255, 236, 198, 201, 22, 146, 42, 147, 80, 117, 207, 72, 53, 221, 81, 215, 219, 101, 200, 124, 254, 145, 200, 251, 104, 100, 61, 126, 254, 175, 28, 66, 183, 128, 253, 41, 59, 81, 35, 166, 1, 88, 86, 0, 1, 20, 224, 182, 145, 241, 56, 81, 219, 115, 217, 11, 15, 210, 21, 63, 29, 185, 128, 250, 39, 101, 165, 205, 68, 192, 177, 51, 189, 194, 16, 35, 233, 87, 244, 125, 224, 247, 176, 98, 198, 49, 208, 28, 215, 200, 9, 163, 34, 148, 191, 158, 229, 16, 129, 14, 146, 140, 66, 23, 97, 25, 90, 2, 149, 239, 9, 219, 18, 216, 131, 31, 171, 188, 71, 55, 36, 5, 131, 57, 6, 255, 51, 46, 222, 251, 105, 141, 102, 39, 144, 75, 4, 10, 113, 23, 67, 26, 156, 80, 35, 200, 66, 99, 156, 69, 168, 101, 212, 200, 106, 84, 115, 45, 119, 234, 126, 165, 160, 219, 227, 22, 18, 233, 177, 51, 54, 191, 114, 144, 232, 109, 185, 191, 9, 227, 42, 110, 22, 138, 174, 196, 244, 169, 74, 173, 92, 115, 223, 231, 48, 210, 214, 88, 131, 181, 242, 52, 233, 213, 132, 48, 107, 58, 172, 19])},
{encoded: "1jCu2MB8j92xaWnqVL1TMZzyQAcSKHnBAsG1osFLdaoz9BLYt4d72n44F8oxySyNVkZ4heYZoAiLE2a82JhTiJzPJM7HNu2o2ugkgVhEHtY1nXjvMEmafhjpDeQKgnjxygQi6Tzivux3jbDeWV8d9tLZRxyN8HCCRGj331PafNKsLR8USBdFwEeRpmP64fErcHag7GJDXXv2de1ScWLkZUJiBtGvWLiCYkHmEwXVVCVZAdGs4YAsvHFUYtAMRyouNeFQMuXfCAZdbgFvfqwZGLGfFo28pjW1rPj4CKFE1R4zSYotPBpSwC7o6DeGZsBgzWaTMHe46G4gn7yasTz7sCxpWnvwPTbp2AnLphSHzUHRTdkKDVpx5RXQaoQXg5NSVnv9eVKZSVtqo7FwQK4VpkSkSdd6LsaAro3QZDDG3X3Vf43VUzN11XUAMky2ustG5MTL62dH24DK5RBWxhiHAgwM8qNyXhApwUSgRu8HKs2ZSCYXrxkX24SNvahQDCzTcLEwwEeZqCQZPq46V1SqxrF15AEp4hiwnTzpzgK4bsGqLchngMdtbBxm76Gk3NatPNcqA6T8zL8V1GtbPr8oxjLmaMtq25qbiuaJo24N78To3V58JRuJLhdbVjYVu63YZtMUJrDFpjkSf2Lv3MtNfq47oMPEoymVoYgPa2YGLTuhWrT1evPh9aALjzTdPti29AMaQUmcXvcrUZ1wYwbfwwR1TK8XnF5dTHCBAYTSzGrocJVJXXYTKtsHPyTf93NCsPVd9heKhrSqFQvRporc12XKCcmeTUgA9B65g2kfQwDJTZX7y23aTrfgSHkJhqieTUPcF5hWT6kY3ZXCD7tVi2pvn2MtjS8PCgtJqKWBviz1Ly8uwt7ga9h362nFJGXPUdT36u4Z1xVKrRWd6QHYuqr4VHDSnv9dqK5xLKEZiUWZjYaqkmqYBXMd14dRUrq9R7hv4vB1ndy2z6FCcMwRv2EqVBQMWx621GphnaTDvjJLXZVyWY36dC8f8yvANPUJUwAPdQePoLRXC8bMf5d5BEYwBb4j8cR77QRay4VNbGFAG9ah9ofYoavUPA3v3ePsmVuCQR6nquZc5RwiCdd2Mo9xtmZcDNhji8bLfNcvRaAWJ8r98K",
decoded: new Uint8Array([0, 16, 191, 2, 243, 138, 127, 126, 122, 115, 136, 85, 147, 38, 209, 130, 246, 140, 233, 213, 161, 249, 7, 48, 103, 190, 118, 59, 159, 215, 1, 69, 9, 207, 11, 235, 181, 3, 252, 231, 3, 130, 57, 11, 92, 211, 117, 145, 182, 21, 113, 9, 73, 206, 253, 237, 56, 45, 238, 208, 38, 62, 129, 147, 195, 16, 148, 242, 187, 198, 109, 51, 30, 151, 218, 130, 82, 67, 39, 217, 125, 175, 139, 186, 23, 220, 4, 39, 120, 103, 138, 192, 184, 124, 0, 156, 68, 206, 117, 139, 121, 29, 148, 165, 127, 145, 86, 156, 39, 135, 28, 65, 17, 71, 166, 248, 14, 140, 177, 155, 253, 37, 41, 20, 135, 0, 135, 157, 169, 19, 102, 120, 141, 109, 142, 253, 77, 80, 214, 217, 29, 96, 42, 54, 11, 130, 197, 51, 240, 68, 207, 175, 254, 221, 146, 233, 151, 252, 65, 90, 251, 181, 152, 239, 49, 104, 74, 18, 233, 97, 171, 186, 201, 71, 143, 225, 12, 253, 178, 200, 63, 15, 74, 89, 188, 28, 109, 159, 17, 113, 56, 52, 101, 59, 63, 248, 124, 232, 84, 177, 40, 178, 188, 174, 141, 48, 201, 125, 230, 188, 43, 209, 14, 183, 192, 238, 211, 148, 173, 117, 231, 108, 38, 42, 112, 165, 222, 134, 180, 186, 172, 16, 213, 79, 223, 175, 101, 34, 162, 2, 160, 76, 242, 120, 215, 15, 83, 184, 65, 214, 142, 37, 120, 207, 93, 255, 8, 208, 67, 212, 63, 214, 138, 250, 91, 52, 120, 250, 87, 92, 125, 40, 117, 57, 241, 152, 172, 103, 46, 48, 79, 55, 88, 34, 33, 121, 241, 130, 203, 40, 171, 255, 73, 115, 19, 186, 47, 254, 231, 249, 157, 221, 98, 61, 133, 48, 17, 197, 55, 167, 197, 221, 69, 94, 117, 254, 72, 185, 53, 218, 202, 241, 230, 53, 84, 206, 121, 145, 215, 50, 179, 54, 151, 60, 122, 77, 27, 52, 167, 14, 37, 88, 199, 41, 0, 188, 31, 89, 113, 183, 231, 102, 107, 4, 247, 250, 209, 97, 71, 214, 145, 99, 94, 144, 184, 146, 99, 1, 170, 244, 161, 154, 104, 173, 207, 219, 180, 39, 75, 249, 211, 102, 115, 217, 87, 129, 116, 12, 253, 220, 6, 203, 198, 36, 191, 173, 141, 171, 14, 82, 195, 170, 57, 70, 153, 147, 128, 34, 135, 111, 12, 108, 73, 94, 68, 132, 160, 205, 251, 135, 7, 24, 18, 224, 85, 160, 43, 196, 107, 190, 141, 206, 107, 115, 165, 174, 144, 75, 151, 177, 235, 214, 193, 114, 128, 180, 20, 163, 251, 54, 179, 105, 150, 166, 221, 174, 41, 138, 251, 206, 192, 243, 178, 252, 47, 229, 205, 200, 165, 162, 115, 203, 238, 203, 33, 51, 98, 100, 118, 145, 171, 165, 239, 141, 75, 37, 38, 53, 134, 107, 90, 149, 148, 18, 132, 205, 156, 74, 179, 170, 6, 64, 134, 170, 204, 155, 129, 61, 167, 128, 3, 131, 128, 140, 179, 201, 163, 214, 124, 174, 49, 146, 15, 11, 229, 171, 11, 194, 232, 46, 11, 158, 123, 166, 255, 67, 7, 230, 69, 129, 188, 15, 8, 206, 136, 18, 94, 181, 36, 112, 88, 223, 74, 229, 131, 220, 181, 202, 89, 80, 191, 223, 5, 157, 228, 58, 155, 192, 172, 36, 54, 192, 66, 202, 153, 166, 87, 9, 214, 248, 162, 223, 132, 239, 146, 108, 124, 194, 175, 89, 131, 227, 240, 86, 234, 113, 64, 171, 69, 164, 244, 208, 99, 19, 27, 45, 26, 51, 146, 242, 145, 28, 173, 117, 179, 157, 139, 226, 59, 102, 178, 191, 104, 121, 152, 51, 18, 83, 49, 231, 229, 23, 184, 140, 217, 80, 215, 132, 248, 176, 125, 18, 206, 3, 198, 182, 206, 220, 155, 229, 14, 132, 186, 199, 52, 38, 125, 150, 74, 81, 96, 38, 49, 205, 97, 165, 105, 118, 186, 105, 246, 222, 198, 20, 63, 234, 105, 101, 30, 217, 52, 148, 196, 24, 33, 12, 219, 188, 147, 180, 109, 189, 10, 34, 180, 230, 195, 71, 139, 85, 25, 215, 53, 64, 108, 102, 137, 168, 79, 72, 17, 69, 51, 148, 238, 74, 69, 123, 116, 6, 149, 232, 45, 170, 94, 158, 117, 81, 71, 220, 99, 17, 37, 213, 167, 34, 176, 69, 13, 199, 22, 45, 8, 204, 36, 110, 216, 150, 193, 72, 174, 76, 15, 148, 112, 162, 170, 38, 73, 150, 112, 137, 37, 148, 193, 249, 150, 17, 73, 239, 183, 161, 0, 228, 109, 2, 96, 211, 205, 243, 174, 116, 23, 28, 194, 172, 227, 132, 42, 200, 142, 234, 161, 248, 90, 203, 197, 83, 169, 20, 102, 143, 108, 47, 238, 182, 191, 115, 110, 236, 251, 97, 88, 128, 111, 167, 137, 32, 205, 1, 71, 237, 193, 204, 170, 210, 125, 203, 145, 107, 11, 130, 88, 64])},
{encoded: "7H7UMhiq9rLG8sxwfijNLu2VkJRSLFZe5NRQaZxM6NYpGRhgX1uCJiB83m2zyKwkza4fuddCNCdMGp28QtHRPDu1dC3CohDVT95qZbf2TEnMsePberXvXEQ3uJESSkH5QpdQQnb5m98haamRHLzmo7QhP1cPjZ1cTDiJt7Fm9jYYaUhKwrNeqsxjRoPnpg3ivWeLB8f2vyEyhcbX4Smcb5rWip1hEVgZs8RcasMB8gakDd1pDUgWU7r8wHdGCuTQ2KYzP8xCJyUGtrBJ4hvDf7Ypf7suMBG5Lq4KUDk9eMijgPZBy7FL2En3nNbM6U4dCsbx8Bmc2qg3ZbjaECu155MJxPAyfoYBL397bzkgcL6VxzV4GSSkK5XDnncah2Ci68zsoD6vT1wakThYkUz5xpuz2FiQH4d9Y1VxZNXLkVtNiZT25yWAmuw8Tvxj1UeydoQ51RTaayEgj4K3Zp5jAwKTPapoo9S2bbXHMDXmNHamWahV4mZqjAGRZ5jzfy9Q7JHadjfHgUKcezNbnk7EzJpDXfgZivB6ccRLkM8hp62Y3PyBWxgXK5pqZqSZgYS8Xcro5ToHSGBLJTo6QLWkb2z8cwpfTtpvMG3Eksngeh2UMkZrzFekc6etoE4TF9k4VxtKnckjyhbeHoHJXTmyqxECU9SPyhQjYKMEFAFimjntH1BB7Jp7AQDC71YyYqJ2zwk7rhP2hxYMNhk874m1jHHxQUpjkLc52uPQfr4skyHyjuLKii3V8ckYdEK8y9YkthrezA6Bmy2CB3dhPV7xKq8D4fuDR5iq4pLKYiZefycqqtU9KWe8exrBSqgbrdep4L1T5nJBBjiUiJwY9ftAa2EV5YNkXRVWPZtNvuDvSEvbyzeqY9aMyAWAnQLjZeAsBAWqTbUb2qsGHq8wNN",
decoded: new Uint8Array([126, 215, 231, 127, 151, 13, 121, 252, 20, 244, 193, 35, 18, 187, 51, 147, 170, 3, 150, 88, 211, 170, 192, 133, 109, 114, 255, 127, 127, 188, 81, 141, 39, 17, 187, 203, 64, 83, 220, 246, 88, 215, 45, 175, 64, 43, 194, 143, 79, 181, 39, 248, 72, 252, 34, 120, 123, 154, 86, 237, 2, 105, 233, 3, 77, 95, 125, 165, 33, 133, 236, 19, 14, 247, 43, 151, 166, 46, 195, 107, 102, 187, 193, 230, 157, 68, 4, 225, 2, 243, 232, 103, 100, 190, 146, 116, 114, 153, 70, 159, 247, 8, 136, 47, 186, 144, 128, 131, 204, 250, 108, 68, 194, 103, 81, 211, 238, 157, 138, 146, 181, 251, 44, 102, 149, 32, 85, 76, 245, 9, 3, 151, 181, 167, 101, 194, 36, 6, 252, 229, 105, 232, 185, 19, 105, 60, 168, 196, 39, 144, 228, 71, 128, 174, 153, 26, 89, 213, 94, 188, 75, 4, 28, 45, 9, 70, 176, 218, 217, 179, 228, 140, 197, 48, 225, 150, 98, 120, 163, 253, 19, 99, 243, 213, 235, 183, 251, 78, 153, 196, 131, 91, 209, 177, 59, 36, 110, 191, 48, 161, 26, 102, 4, 100, 42, 105, 10, 22, 87, 165, 111, 145, 167, 172, 167, 226, 186, 139, 227, 240, 130, 231, 73, 232, 54, 1, 146, 74, 180, 214, 176, 10, 205, 165, 231, 179, 209, 88, 8, 246, 79, 253, 244, 63, 131, 85, 151, 3, 100, 95, 63, 142, 159, 182, 213, 68, 3, 219, 234, 186, 62, 126, 19, 244, 235, 155, 150, 211, 67, 128, 160, 114, 245, 96, 151, 49, 196, 176, 107, 251, 248, 228, 183, 209, 110, 2, 186, 242, 56, 10, 130, 132, 104, 215, 9, 251, 111, 217, 90, 108, 14, 221, 249, 135, 24, 167, 130, 196, 255, 82, 228, 82, 191, 126, 82, 144, 131, 190, 75, 58, 75, 215, 12, 17, 153, 11, 155, 208, 183, 159, 185, 74, 125, 185, 225, 10, 212, 61, 57, 221, 106, 164, 255, 244, 137, 180, 218, 164, 189, 28, 116, 34, 8, 245, 154, 134, 17, 154, 41, 99, 71, 250, 170, 223, 157, 90, 152, 155, 51, 214, 109, 255, 107, 245, 81, 202, 35, 83, 244, 134, 156, 125, 59, 255, 140, 0, 30, 220, 31, 194, 132, 182, 217, 153, 85, 99, 162, 61, 40, 140, 36, 20, 245, 85, 2, 163, 208, 221, 27, 145, 10, 46, 133, 47, 137, 176, 196, 248, 142, 197, 56, 53, 186, 213, 182, 113, 149, 42, 194, 57, 30, 144, 14, 50, 22, 61, 175, 20, 111, 158, 84, 224, 217, 231, 53, 4, 236, 65, 220, 177, 110, 77, 52, 154, 39, 9, 129, 165, 174, 61, 11, 246, 158, 174, 118, 63, 137, 183, 176, 196, 66, 219, 119, 106, 235, 199, 164, 201, 14, 194, 38, 155, 92, 158, 184, 41, 202, 230, 131, 27, 4, 238, 3, 186, 38, 184, 221, 113, 223, 145, 117, 79, 178, 180, 46, 72, 191, 126, 249, 41, 224, 77, 69, 83, 10, 194, 105, 213, 59, 182, 71, 58, 231, 155, 122, 161, 140, 18, 161, 76, 220, 247, 55, 170, 22, 185, 20, 207, 163, 65, 110, 28, 193, 61, 130, 207, 131, 23, 160, 104, 126, 95, 66, 101, 9, 210, 19, 228, 70, 170, 172, 2, 167, 205, 4, 203, 80, 221, 152, 128, 217, 86, 123, 188, 149, 17, 104, 247, 210, 214, 101, 71, 202, 70, 155, 4, 67, 12, 99, 13, 64, 91, 185, 140, 110, 182, 101, 221, 123, 135, 43, 14, 230, 64, 110, 154, 254, 76, 60, 17, 169, 100, 157, 162, 234, 191, 32, 35, 167, 135, 15, 126, 205, 49, 200, 103, 181, 32, 9, 246, 95, 180, 102, 50, 190, 200, 239, 87, 121, 26, 88, 241, 38, 195, 213, 166, 144, 85, 245, 127, 237, 152, 154, 56, 27, 18, 15, 115, 21, 28, 31, 247, 188, 195, 78, 108, 136, 131, 71])},
{encoded: "EPg2h5neFdKP9dCQzt9qTudat9Zt6U2a9SdotjXbaqTVH61veUKxARJPAtHa6HYCGGfPHgm1T31VSQXMN3sXkoAtzFgMnNVepBzcNkUrjawudeXT864QKz8kWrMRExjNBCz32zK7aRc4bLxoZX7geCpxhrfS8A9DUrb4wqSh4hkKmopa6GBSqZDNS6jUvAtHTZg61TxYiMNNYuMD6nLPF2zmJv6bcPMbG7vSNCxoxFtvnfLs7KVta79c9Gx5Xmpg3XEAiP9iQDodinpgyLnFTuUGsNqJsRRB6FYx73B9DJ8tfoQfEZATXT1GwUKyHMh2hgBptmnty67KouZLbx3kHwirjFTwiAujKHKK6W2Rm5oD1y8Deyst9x1qC21scrbJ612aSW2kTMvSX4U8X75Cd7ypqPP1UT4w3KdmLPWre3VWV2qt7i8YbaMzndJxsmhUCgHYJP3qKa3f9CJZVxcSWMo2qTHNAUfRipMfSuQnJuTtL58h88cpVHVMsp3vU4cKDc3jDgSudtHP9Lp2dTMMmmWxL5CcmznHkFiyix9TNartoHzHdboyxcfsWgDogaYJeWi",
decoded: new Uint8Array([50, 109, 247, 49, 255, 183, 91, 105, 123, 189, 117, 225, 133, 215, 231, 53, 200, 90, 143, 118, 233, 9, 20, 161, 134, 86, 18, 148, 148, 144, 115, 249, 80, 173, 215, 8, 109, 8, 36, 37, 155, 134, 185, 154, 161, 57, 101, 135, 42, 254, 83, 4, 249, 64, 209, 214, 172, 24, 87, 90, 106, 19, 16, 137, 47, 91, 32, 238, 228, 188, 28, 204, 118, 30, 140, 83, 230, 36, 84, 70, 237, 95, 166, 56, 187, 196, 73, 125, 208, 133, 5, 182, 3, 237, 6, 33, 239, 145, 222, 72, 34, 62, 9, 76, 2, 182, 220, 242, 37, 220, 242, 17, 109, 214, 11, 144, 38, 190, 8, 207, 152, 133, 153, 4, 164, 53, 54, 39, 23, 242, 227, 50, 36, 130, 71, 34, 142, 217, 171, 179, 60, 17, 167, 84, 84, 210, 220, 221, 195, 26, 121, 119, 236, 159, 20, 222, 244, 244, 51, 172, 172, 19, 170, 63, 84, 3, 198, 69, 230, 176, 187, 83, 69, 97, 24, 86, 86, 222, 3, 70, 36, 51, 120, 198, 82, 185, 154, 212, 160, 25, 34, 239, 91, 109, 197, 100, 78, 230, 25, 224, 125, 39, 177, 6, 37, 236, 42, 164, 80, 157, 223, 87, 76, 216, 194, 166, 170, 7, 99, 20, 118, 209, 253, 253, 64, 218, 194, 144, 156, 8, 72, 216, 87, 254, 71, 253, 144, 43, 41, 235, 149, 78, 82, 225, 179, 204, 248, 232, 55, 27, 60, 74, 243, 149, 210, 238, 59, 54, 212, 245, 134, 49, 35, 159, 225, 21, 241, 95, 78, 45, 87, 105, 46, 41, 107, 168, 136, 91, 14, 125, 230, 80, 70, 17, 187, 204, 152, 52, 33, 70, 1, 104, 201, 77, 123, 199, 28, 109, 153, 166, 13, 123, 34, 246, 205, 236, 97, 208, 167, 97, 232, 165, 181, 229, 12, 129, 254, 62, 208, 71, 53, 232, 10, 63, 205, 8, 96, 157, 224, 72, 94, 138, 250, 170, 242, 5, 168, 100, 120, 13, 233, 238, 7, 139, 84, 176, 85, 51, 38, 47, 124, 31, 102, 83, 251, 41, 87, 196, 107, 157, 134, 244, 49, 66, 56, 115, 17, 240, 45, 58, 16, 207, 181, 133, 189, 135, 89, 193, 106, 250, 224, 53, 138, 246, 249, 78, 238, 253, 52, 151, 218, 101, 51, 53, 231, 152, 122, 151, 145, 71, 57, 1, 119, 224, 62, 137, 34, 153, 249, 164, 143, 16, 157, 138, 115, 110, 246, 190, 200, 216, 169, 170, 100, 231])},
{encoded: "2ejXMHpjgFWg35FMKwkv5UbAtVQjCVvjyEhDx1w1QpRhb67tNRmUmcGhRe85umVYJTprHeBHgwEzhyBAgFH4",
decoded: new Uint8Array([122, 100, 217, 215, 167, 233, 119, 72, 193, 133, 91, 105, 202, 167, 250, 208, 226, 74, 7, 149, 186, 35, 92, 215, 97, 32, 100, 198, 63, 99, 212, 93, 108, 230, 115, 97, 218, 255, 13, 84, 105, 21, 24, 157, 198, 108, 7, 167, 81, 181, 75, 124, 9, 97, 22, 4, 132, 120, 169, 66, 131])},
{encoded: "29uvpMHx3nJJrb6YWJo8LxQ78UzpUX9RZ4zGmykXP16dVayoJLTx4sWb7hnXcBSHyDgsT9z1jPNKg9iySazXguFKiUqLguvvYG8PKCVc7fZojEYhFfCtqGDpVtPuJqYNnFgqamDSrwtGNdac6iKFo7pGA61frdAaKgyeupdiVM9wVMcVqMr4NcsTaG6ZSLtd1VU25e3iv2x1evCDNrfALVjdARha4BQF9PhQvb1CqtjqHm7saVZEEguj9ZUcU7pnPcbhp74k4HJGoJjyWuSwLCgLDe5KubuFr2H6WJv3Uovq6css1uVhaqt8bdGpoqtVFSPAzhTzAFQTSs6aFp8U61cBjksRZ2sFRspoWi6B8CZbG4mmqdr9thp1gTsDzAhPKLpy7G4zNAwuThbDAHZ3FAsgmgo3w3D4GPmj7g36KdW67R3yxwb4d6uU2t9jxVD6gu6LGyAveCiHxZTEpCuA6habfAku8EDkFnY4keyspFauRJYvoHJ427kyWHQgs7xuPGgGBwJ4r5CzqKg5ewkDkjZN7jpyT2k9jqXZi8JiwURYtapusWhS8sxSmnDi9B42sMTzes9S9yEUFcRj1wd2iWvS1X197Av3gZDhNsZLJo4vLBp83WE7QLKD1vCNhdBvu1FfGewcfGL4Eyi5cVjErM4yqsZVys2g7GnAY1bdLKNsHJZDLereeMtap357qZV6JKi8tW7kGMdPdbytkpR85yEL5A5XcBjbCTf7WoVP1wunD8VtrVbxnakW4uE2xjKYAKXnupdmosvJCtLxxrGjNzYwGMe2sQKEZN3BT5iH7D61eacrtSQE4oNG9gjJsf5x5ejPzwCYb93ptppPP6UZNtcjAMRCgiVjXRN8uSotXqN2ShY2ym4CBPeE1DqKeE76kzVPiXyeEcgoDxJoy1xF2htTjCheqmtgiUoXDZdB1LWYWSi61SR2wNUqr6XXsmGHx4Kmtr3smjLP5gSNfNZBjUHtGHW7kg3r7qns2GaiDJEY8eMqhxipwY3hg4rAZ",
decoded: new Uint8Array([162, 201, 100, 149, 166, 238, 175, 111, 43, 106, 149, 183, 202, 46, 125, 81, 4, 156, 189, 192, 106, 7, 59, 131, 83, 68, 86, 186, 154, 222, 92, 51, 238, 111, 50, 221, 16, 177, 234, 1, 153, 204, 30, 207, 157, 87, 155, 133, 239, 142, 146, 120, 103, 57, 184, 172, 159, 30, 176, 115, 185, 128, 173, 248, 59, 22, 70, 22, 80, 137, 185, 25, 31, 250, 46, 53, 159, 161, 222, 192, 213, 114, 27, 144, 32, 232, 12, 19, 159, 74, 75, 191, 78, 232, 141, 222, 18, 75, 54, 106, 229, 178, 140, 240, 77, 37, 88, 35, 96, 108, 134, 123, 5, 71, 63, 186, 229, 145, 237, 115, 87, 158, 6, 79, 200, 242, 252, 116, 135, 146, 27, 5, 137, 233, 220, 239, 121, 196, 68, 136, 45, 113, 178, 66, 8, 80, 97, 3, 124, 156, 244, 110, 237, 2, 4, 48, 193, 227, 172, 71, 119, 247, 81, 229, 110, 3, 76, 68, 110, 165, 84, 76, 160, 129, 83, 102, 101, 7, 116, 141, 166, 164, 11, 29, 20, 51, 16, 236, 234, 170, 144, 95, 181, 167, 84, 71, 140, 127, 49, 253, 28, 125, 11, 209, 177, 3, 106, 135, 228, 77, 27, 194, 194, 229, 237, 47, 42, 87, 24, 251, 49, 244, 153, 129, 221, 133, 114, 242, 91, 44, 127, 158, 253, 101, 6, 24, 238, 88, 200, 10, 244, 105, 27, 106, 205, 65, 120, 49, 12, 126, 73, 220, 82, 107, 38, 143, 207, 90, 15, 72, 5, 254, 146, 102, 92, 185, 198, 242, 225, 195, 51, 24, 22, 117, 140, 190, 244, 4, 227, 77, 177, 223, 148, 99, 128, 254, 231, 161, 100, 168, 50, 45, 114, 214, 252, 176, 195, 129, 156, 159, 178, 61, 104, 80, 128, 218, 238, 226, 160, 148, 226, 45, 150, 47, 25, 37, 81, 171, 54, 103, 7, 215, 226, 205, 198, 35, 34, 150, 231, 191, 231, 118, 76, 201, 198, 40, 79, 122, 255, 11, 246, 208, 195, 174, 237, 222, 127, 10, 155, 185, 162, 34, 23, 120, 73, 168, 90, 186, 114, 35, 30, 242, 6, 161, 29, 75, 16, 77, 73, 216, 79, 40, 43, 39, 235, 52, 21, 50, 198, 185, 48, 157, 215, 182, 121, 247, 57, 176, 92, 243, 133, 137, 41, 98, 202, 7, 1, 57, 88, 102, 141, 34, 113, 244, 29, 79, 149, 79, 131, 26, 0, 151, 131, 176, 206, 3, 197, 240, 202, 243, 179, 9, 40, 137, 158, 222, 238, 199, 247, 72, 98, 134, 12, 253, 112, 12, 225, 139, 247, 30, 17, 197, 207, 251, 73, 122, 99, 62, 156, 91, 170, 28, 217, 61, 79, 12, 253, 45, 166, 0, 184, 236, 169, 190, 152, 159, 191, 203, 110, 24, 171, 85, 30, 63, 219, 236, 52, 27, 255, 107, 247, 134, 118, 200, 204, 198, 49, 248, 140, 192, 89, 6, 170, 164, 66, 62, 147, 51, 83, 195, 231, 161, 91, 172, 4, 189, 217, 238, 53, 29, 125, 29, 242, 172, 206, 233, 115, 245, 203, 155, 124, 189, 150, 76, 213, 195, 187, 12, 99, 44, 87, 106, 167, 182, 185, 219, 185, 128, 74, 57, 77, 201, 189, 64, 164, 113, 111, 155, 109, 107, 128, 40, 206, 132, 149, 90, 145, 54, 202, 150, 74, 178, 12, 39, 179, 137, 25, 230, 64, 168, 71, 150, 26, 31, 4, 236, 41, 101, 230, 10, 219, 167, 75, 108, 242, 215, 187, 94, 111, 138, 1, 218, 120, 144, 173, 112, 240, 121, 232, 243, 47, 94, 83, 56, 165, 125, 247, 60, 223, 188, 64, 224, 198, 97, 28, 137, 219, 54, 68, 90, 233, 110, 124, 226, 129, 213, 128, 137, 190, 6, 109, 223, 97, 182, 126, 139, 243, 203, 47, 149, 2, 13, 34, 214, 209, 243, 22, 248, 192, 160, 144, 223, 137, 180, 115, 208, 64, 153, 118, 123, 149, 253, 110, 14, 124, 54, 192, 77, 220, 184, 157, 88, 143, 22, 169, 116, 232, 142, 235, 208, 92, 235, 168, 151, 199, 186, 159, 88, 226, 205, 216, 247, 231, 196, 102, 185, 152, 57, 112, 227, 81, 248, 39, 92, 163, 40, 60, 228, 114, 129, 179, 221, 133, 164, 235, 31, 100, 64, 28, 18, 162, 168, 13, 247, 92, 153, 143, 2, 236, 90, 245, 125, 153, 73, 168, 41, 192, 26, 109, 171, 208, 116, 129, 133, 209, 92, 246])},
{encoded: "4ABD9Nm5oWBu3KmCvN8w9Pobxb5qXD5m9EEFHGXMgDftS8dfmGTDqNnJ39nJD2QtMzX6nEgLcChWV2Wxm4f62Ewpe5Fqj7R2pCE1e4RA8vEFuGt8FYpfDc6YY7FdGBTAxXRCHcGdPuporViaSvZ4CSfP51KjpBdMgrHvHx824DgSsFLY3pAzrD9XRgUao8LT6dwqNjtECdED8VdRUBsGamvoyzu24r36zoUn9774iTa8irDD3Z42iWbP6bwxqn3QryrihmEXsKF587ntVWD",
decoded: new Uint8Array([107, 84, 69, 22, 140, 230, 117, 160, 83, 115, 104, 5, 8, 119, 59, 233, 131, 195, 180, 158, 90, 77, 122, 209, 68, 53, 104, 153, 118, 69, 238, 52, 20, 241, 96, 188, 236, 224, 35, 167, 223, 177, 177, 166, 4, 62, 181, 5, 83, 9, 221, 173, 42, 69, 99, 206, 236, 69, 186, 244, 18, 62, 111, 192, 255, 12, 130, 37, 178, 173, 85, 158, 50, 15, 245, 82, 111, 74, 17, 250, 59, 173, 175, 0, 84, 47, 50, 217, 167, 62, 116, 38, 240, 106, 238, 93, 240, 92, 7, 84, 25, 164, 55, 105, 180, 83, 21, 75, 163, 208, 6, 190, 24, 110, 127, 165, 46, 76, 10, 115, 142, 66, 92, 192, 13, 61, 215, 231, 58, 92, 193, 235, 20, 83, 205, 1, 69, 32, 218, 173, 88, 102, 151, 176, 12, 208, 217, 11, 230, 53, 76, 121, 122, 87, 160, 101, 102, 31, 207, 59, 43, 237, 152, 164, 251, 94, 119, 144, 110, 76, 242, 132, 1, 102, 139, 26, 29, 202, 112, 179, 52, 235, 204, 11, 115, 167, 103, 66, 194, 87, 50, 141, 40, 219, 211, 119, 4, 81, 163, 153, 214])},
{encoded: "BWrnkZcq4RcNQJqUA2Hci6J7sB",
decoded: new Uint8Array([57, 111, 134, 103, 255, 164, 201, 97, 217, 156, 210, 133, 142, 75, 81, 143, 138, 184, 142])},
{encoded: "B8yKot3w4B6T91M5aenkED1FsBSPgQxAowNZTJEyk2pXNiwd2m96LDzTeGrE4hm8GewKCbmuBzmisMVwatdDN9WyKhi9QcjKNVjTPi4Qpd7vSHg5nb2CtLcDrvuqRwRugaMUbWsbY9rQhQqUBa2RobhEDz2P8cR9e4LBVk2H8BYkrYVqwj3pcWU7HBvgZj5snnMP1vQgutqo2gkcHtDMxaggNKkTLf9TQjj5vkw21pPYo3Tba6z3D6CZvtjWt997TBfLkgtdhvkZ4yZfdatad5MfUUchSE8NLg8mC6Zqyo2VpBAd7gcZehzurxGSjf7q2x2puyPMgACTfgiJV9pg44xZUripTTHrTmD6s8MxcKeW99PQP9ikvf4AgEZKXHWJ77fnsNL3zv21AgrX5eN2LAJvmfi8AMMYG8g6b9w1H6Vz7zPFDyFnzvpMauUnB41DoFy5cqzigZLjfavNULLNZjj3pX1kX5eTomsR2dE4yn8T4G6NAqyMaNTCzxwGRf4jjL1Q3V7RDy4NrUgjD16XApLGUrRggSo19k9sPtwBnE5PcFW1uvAaNDBUaHh8s8puYV4bcgofWyNgBD25ZeqJ6QpiXmhEbFfdb9QMPC6PBLyGbMitFpmdS8wo83eDLJzGzUKnWbkY3CnKchFyzBbDAo6A7s2tHptV7f7wQLDQP4ebxnvkRjkHZi3ZKvEBQFr1kArxKtukK2PPX8Anu5mtjChZh4DgXFX8U5Sirzwe4JmU9ijkorzzvDuG71wL2C5Eq",
decoded: new Uint8Array([77, 57, 254, 33, 242, 26, 14, 0, 108, 196, 1, 91, 247, 177, 76, 103, 46, 224, 32, 236, 71, 142, 119, 194, 91, 60, 90, 130, 185, 119, 213, 78, 203, 158, 92, 8, 125, 188, 26, 98, 71, 211, 110, 219, 97, 85, 7, 154, 148, 194, 57, 75, 18, 180, 48, 112, 223, 133, 149, 127, 20, 35, 7, 248, 195, 193, 207, 58, 231, 109, 184, 178, 239, 168, 151, 161, 220, 147, 35, 139, 101, 221, 116, 132, 170, 59, 148, 121, 193, 126, 250, 59, 71, 202, 55, 56, 20, 96, 46, 174, 44, 55, 160, 245, 9, 86, 177, 3, 177, 195, 93, 181, 214, 210, 4, 61, 163, 119, 222, 165, 119, 4, 67, 142, 182, 129, 38, 252, 114, 232, 98, 54, 138, 223, 26, 137, 5, 17, 245, 39, 181, 189, 250, 243, 146, 52, 150, 108, 18, 247, 173, 129, 193, 160, 56, 252, 237, 111, 53, 213, 125, 106, 224, 187, 246, 245, 241, 35, 205, 59, 2, 84, 186, 8, 254, 163, 136, 6, 134, 131, 177, 20, 222, 211, 129, 173, 39, 175, 224, 110, 38, 4, 162, 116, 254, 38, 3, 165, 255, 173, 227, 46, 238, 43, 63, 183, 70, 81, 117, 98, 244, 79, 214, 121, 10, 113, 228, 123, 202, 1, 65, 93, 22, 223, 66, 247, 7, 185, 120, 69, 248, 94, 11, 199, 214, 85, 180, 118, 232, 143, 103, 44, 202, 31, 81, 173, 56, 222, 36, 140, 33, 39, 252, 140, 114, 48, 80, 168, 14, 4, 173, 114, 38, 61, 201, 120, 178, 44, 72, 163, 41, 156, 79, 120, 240, 104, 69, 40, 34, 238, 91, 26, 254, 45, 141, 255, 184, 245, 72, 229, 15, 77, 246, 54, 113, 42, 41, 170, 40, 41, 204, 19, 248, 245, 92, 208, 105, 236, 63, 91, 227, 70, 106, 58, 251, 83, 26, 35, 73, 74, 181, 215, 22, 175, 132, 244, 181, 129, 154, 215, 20, 28, 47, 84, 237, 66, 138, 176, 101, 48, 168, 101, 160, 230, 240, 3, 74, 36, 43, 104, 71, 164, 117, 225, 37, 148, 14, 81, 240, 135, 70, 164, 227, 103, 180, 58, 214, 166, 204, 199, 205, 9, 20, 128, 9, 25, 224, 33, 27, 56, 109, 4, 193, 76, 222, 217, 221, 180, 109, 20, 142, 65, 17, 248, 178, 162, 127, 249, 139, 50, 164, 253, 51, 184, 18, 202, 16, 241, 241, 70, 96, 159, 35, 126, 100, 116, 223, 210, 244, 32, 94, 187, 245, 58, 132, 15, 143, 25, 147, 82, 22, 241, 52, 3, 85, 129, 42, 49, 226, 213, 115, 16, 141, 250, 107, 243, 146, 248, 219, 116, 181, 222, 51, 150, 202, 124, 239, 87, 167, 113, 231, 213, 43, 83, 244, 244, 58, 107, 101, 130, 125, 135, 120, 59, 78, 200, 131, 9, 207, 243, 8, 28, 94, 139, 155, 88, 51, 143, 194, 49, 1, 212, 247, 67, 182, 20, 194, 29, 132, 193, 160, 129, 85, 8, 148, 22, 123, 133, 182, 200, 168, 22, 68, 159, 108, 148, 190, 28, 11, 66, 28, 62, 135, 97, 153, 122, 29, 6, 115, 172, 190, 63, 121, 243, 155, 50, 102, 105, 7, 170, 130, 200, 27, 44, 43, 18, 15, 103, 39, 66, 18, 48, 93, 225, 109, 31, 113, 83, 103, 68, 122, 124, 218])},
{encoded: "2QrSzs9WtE5o8Bz3QhFLmUwx1AiSb8jCXK8GyGKjviUyd8FVXL1p9fDJ9zhaGdB4ZDiJBrPceugmi8tZnCshA118RU36HZCxFvSJhaMBmZjoskkYgtXLHxx1pPViswspNPwXogyXsid2PfM8yUEABEUBdhaX8EF8esayotu1zcPK46vUM3xMra7SpKSHy9BkSrwzjxPZaFT2e95NJ57azhY3cDBTHooghoLGHHXTTJnpoTfgXV5uUnELCW13MZ9z6AmYEKCRbmBdYiG3bxELjSHmTJn296u4hfo8dEyT25pyxQCEs3hcWa19e1a8qgtNpCqURKgqsTpGoP8M5fV6RVwacMRCxrb7KV7J92VN775K2Ysk5sedFQv2WKoaZGm3JD89HEJfGU9gw16u2PKKELJBZCECKooept1SDQBJaDsgEWW5njSx1HTEUmnYwjNPqXEkzKpBdNzCqnX51KieTna6BqE5fZy3xTakub4334ozfP9Ef98cBFGV5w3yXyqPHJuF3nauugxV85Y7hTtwnsLWQjPazKqxbyCnDSBsZhTXaMdZMu3nJ2c2J",
decoded: new Uint8Array([227, 146, 116, 57, 2, 166, 127, 254, 73, 179, 70, 232, 72, 126, 129, 97, 108, 123, 121, 83, 198, 32, 19, 62, 141, 31, 173, 24, 108, 252, 221, 62, 39, 48, 252, 101, 174, 59, 89, 173, 1, 252, 155, 151, 60, 122, 142, 106, 228, 11, 141, 78, 51, 254, 206, 112, 210, 241, 3, 225, 230, 182, 34, 42, 204, 73, 29, 242, 192, 121, 86, 36, 237, 235, 62, 173, 50, 146, 85, 150, 21, 198, 178, 53, 232, 60, 30, 120, 176, 1, 41, 76, 18, 213, 134, 119, 120, 194, 93, 224, 137, 20, 207, 40, 102, 88, 150, 20, 136, 216, 134, 233, 155, 187, 178, 120, 183, 218, 208, 69, 102, 157, 91, 39, 36, 157, 90, 245, 31, 152, 87, 108, 194, 221, 192, 168, 117, 252, 110, 117, 18, 213, 48, 59, 62, 251, 136, 11, 47, 252, 124, 186, 91, 29, 115, 128, 160, 13, 2, 64, 218, 149, 152, 111, 146, 100, 0, 180, 197, 112, 220, 99, 24, 9, 243, 132, 145, 255, 15, 5, 84, 168, 205, 142, 38, 224, 24, 106, 85, 182, 42, 70, 202, 58, 21, 44, 221, 69, 32, 69, 10, 155, 211, 166, 246, 185, 206, 201, 182, 65, 164, 196, 3, 214, 134, 90, 90, 108, 179, 255, 232, 152, 198, 254, 227, 202, 188, 88, 60, 253, 71, 88, 1, 124, 149, 56, 77, 14, 192, 159, 208, 24, 137, 60, 173, 41, 242, 130, 148, 193, 66, 248, 120, 169, 126, 183, 87, 97, 219, 55, 26, 63, 141, 187, 158, 119, 174, 235, 65, 50, 120, 22, 37, 98, 185, 154, 225, 175, 189, 128, 98, 190, 71, 216, 75, 200, 40, 112, 234, 33, 253, 225, 17, 67, 181, 185, 211, 148, 227, 82, 185, 7, 142, 167, 56, 53, 63, 219, 23, 250, 49, 255, 162, 57, 80, 53, 153, 46, 146, 183, 54, 80, 146, 113, 26, 252, 169, 179, 31, 213, 152, 79, 166, 229, 144, 201, 89, 16, 215, 172, 117, 140, 54, 196, 9, 238, 144, 235, 120, 141, 251, 36, 28, 175, 221, 194, 23, 66, 193, 94, 74, 6, 158, 188, 195, 111, 39, 6, 207, 14, 98, 183, 34, 97, 15, 198, 152, 114, 147, 100, 104, 17, 183, 40, 207, 112, 229, 14, 71, 20, 146, 204, 52, 203, 207, 176, 51, 164, 90, 29, 98, 159, 10, 94, 135, 204, 212, 40, 5, 81, 1, 247, 191, 89, 244, 15])},
{encoded: "8kT2fq4yJVdf5hYwwfnwYWD66XnUvokM94b7URHetGiZgzxdjsPnbxJP5Ds1SvCRLgqdyTNnebvb57fRUgd3CQUTx22MmifyjoYnCRWAgz9kRifQNVnpfoymvV9gSYxZVzRkvAVWTegpriT9NgPCwt77oni34PSgqxkPA5yGgy9EzqRaEhazGdEZL7RmHhR2Edz2uebk5CvthVk7KSPPNaGwap64RQRNTJ4afXK6KBquqGF1CLdDgAWzdN9YTajYczDoETUUMTpkQL7ofQxpVGokB2QnfhhGCVPHDxAFKWriVLZy7",
decoded: new Uint8Array([219, 212, 222, 6, 113, 40, 170, 36, 148, 88, 22, 206, 218, 213, 168, 81, 207, 25, 207, 140, 153, 13, 239, 190, 245, 197, 184, 159, 199, 147, 240, 97, 33, 113, 169, 74, 66, 149, 172, 207, 69, 95, 32, 19, 129, 7, 102, 43, 208, 31, 217, 99, 189, 136, 151, 206, 211, 176, 206, 172, 238, 133, 144, 32, 96, 62, 191, 194, 11, 222, 56, 19, 24, 80, 126, 188, 190, 229, 85, 66, 130, 45, 181, 68, 252, 58, 23, 130, 5, 254, 217, 246, 252, 106, 84, 128, 109, 47, 229, 77, 40, 27, 101, 254, 121, 119, 239, 42, 161, 173, 155, 196, 230, 248, 198, 250, 82, 134, 130, 22, 212, 177, 120, 106, 252, 167, 71, 134, 95, 22, 100, 72, 62, 6, 217, 228, 245, 39, 241, 143, 218, 89, 36, 124, 113, 35, 135, 240, 231, 144, 63, 202, 89, 20, 150, 249, 52, 157, 223, 36, 224, 117, 83, 21, 132, 69, 60, 94, 233, 152, 201, 70, 87, 168, 243, 138, 50, 86, 32, 83, 32, 175, 44, 183, 224, 84, 127, 209, 134, 207, 76, 58, 109, 241, 181, 59, 149, 71, 99, 202, 168, 199, 73, 253, 152, 19, 99, 1, 64, 73, 23, 211, 30, 83, 155, 168, 86, 111, 156, 62, 9, 3, 78])},
{encoded: "48GZsJWGdHpBLTetjWyeQj94f56rVzXMW2FVZ6vzDDLCa1iVPET41DTpQK654yGcUPqS2bycq2TfMzbij1riY43DdUEHYsbPA5hrBgM7Zjkag3fzKCFUVzXKhV3MDTGqRvmPRiiwg35GL7rBHY1bMkjkqxG9e7LX7LzRWm1ZRCBGpi9hQjCRuppcxKnU86C6qPbm5xVpPwqJ9nxHtnYXJf5jyAdrsGHh4KfDiYpSSW5TC16R6XT59aEqMdU4j4ASkDougcEBRuRj9L5jJ38sF8d9Bdp74Gn2jkYSeY3juaWZm3JuwbC7fivBk9aRRSd7bZhnJLEcvz5ZH2mW6dJFJeoqxv8mxKjdzSA4LVdn7SaF45NNDfmKSQVxHFEQcFb9ofy9pkZ24zBqQeqwxxP2HKj97x4HaZoCGLWZk4tpEtH2jmej8DpPwvp9AwbtQTneQZJ79MhxNFGQ8okzzwzH5Jr7MDKXFxfTbMjREtqTujXQyj5aDkavWviKhLSDnjdEzUhjczj1aer7bFD9bvXA8auUQbJvC4o5uREfb4VcbUSfcfbrhRN3Eva3zB3eaZViPhzqfpeGhtnP9h1XjFAZpT99QSV2zpJ1WbdF8pCC7mDizPmtP9LYoBXRtMLo4k8aog5tVviXzXbeb1XFr5Tqz8C3DP8N5vqnSfK4JWVgq8hw5LVpJ5WUFkhEHn6xdgPrymgP6Dc2JHHgTx2FUxCvbwxQZLPNEAYi48zrcmKpGDog6aKEhBanVmBjVWgRDwpjbzp8vkj6oKjcFhypNXbCVZBeu4Husm3bxPVLstkJ7kPM6b3UaV6HSACKeHr38udYSNDNKbTLLB72H8UDZumidjW2EhpjYMjSsziRwF2r6piGy5R4sjUP34oZXp46eqfUCywtNegqu1Rck9Zb1kdQS9ZBDMKUaF8mKpY1qWTEa82yrSMgTdLpYsHd1fEQpBHKVQLbobhdzdv7rvqk3cr2YzvvWv6EAezUYgTWi2nw9BmUdaWWQDt2uZmYnzvGQXLPrR9EJr5buYskBMGmUzJyjjEdbfPfp9NzH4YNi2n1zPAoGav2sDNwyg51SFzYhjuSRFUJSLsGVzPZ2GYwNvDGeXpf7WECEgciEd48bGizTp1N1sStt9sY9fa8rqL6vf9KDcFC4WZTtLMQdBAxijLUGHLN3oY6B54c9hHVNDRSfxE1ZkJVvPJsekBWgCgzp5kromUAFddum5e7ghhDMQMCnkq4LRcC9UC9S9jafGKJDHqGxmghxBqbbeu7om58KRkoYf7NxqvSAixqoUgMRhi8YCTYmjs3XVWLVVDPb869DeBZocfyqTTYsiyQM23",
decoded: new Uint8Array([197, 18, 66, 64, 216, 231, 110, 87, 17, 24, 46, 145, 70, 6, 217, 87, 240, 5, 195, 155, 83, 68, 157, 213, 190, 127, 49, 136, 95, 1, 144, 27, 187, 100, 127, 15, 74, 230, 252, 29, 44, 213, 99, 193, 251, 75, 138, 140, 207, 232, 36, 81, 251, 71, 151, 117, 2, 186, 251, 166, 224, 143, 151, 214, 197, 101, 45, 2, 242, 78, 84, 183, 101, 217, 237, 191, 201, 176, 129, 205, 163, 228, 162, 200, 103, 130, 60, 254, 54, 44, 189, 43, 132, 198, 229, 56, 146, 42, 72, 33, 255, 33, 69, 180, 148, 253, 1, 56, 111, 146, 37, 165, 81, 5, 74, 110, 114, 184, 191, 76, 166, 168, 123, 132, 96, 233, 57, 20, 255, 111, 10, 132, 161, 183, 75, 187, 115, 11, 80, 144, 12, 46, 182, 217, 87, 215, 158, 71, 116, 110, 39, 255, 74, 3, 75, 220, 108, 53, 212, 181, 133, 87, 249, 48, 59, 113, 140, 76, 216, 56, 245, 76, 133, 254, 13, 188, 142, 64, 7, 252, 10, 132, 142, 6, 124, 188, 82, 236, 181, 158, 34, 76, 204, 238, 208, 250, 235, 255, 193, 206, 10, 111, 151, 15, 201, 110, 79, 60, 158, 213, 215, 143, 21, 177, 168, 44, 228, 16, 20, 88, 27, 12, 244, 118, 193, 134, 96, 226, 85, 195, 179, 236, 211, 254, 169, 249, 191, 215, 170, 156, 75, 224, 188, 151, 113, 233, 249, 217, 197, 38, 200, 226, 162, 223, 215, 87, 187, 189, 150, 117, 181, 194, 127, 251, 163, 37, 73, 7, 186, 134, 88, 216, 69, 11, 226, 173, 144, 83, 98, 26, 245, 81, 69, 134, 233, 253, 211, 7, 97, 160, 73, 64, 82, 3, 188, 110, 103, 129, 243, 243, 246, 28, 76, 60, 107, 247, 32, 125, 37, 204, 93, 97, 156, 153, 202, 224, 135, 124, 172, 131, 52, 97, 26, 253, 112, 204, 142, 125, 86, 63, 23, 181, 46, 58, 42, 245, 155, 177, 195, 136, 123, 255, 157, 74, 93, 227, 193, 191, 135, 87, 172, 49, 92, 156, 91, 195, 111, 105, 142, 231, 104, 93, 95, 116, 168, 32, 229, 214, 213, 169, 214, 218, 234, 173, 88, 130, 78, 8, 28, 117, 206, 133, 68, 177, 21, 103, 241, 125, 125, 129, 186, 198, 194, 190, 129, 61, 50, 42, 8, 151, 222, 174, 239, 195, 18, 35, 17, 19, 135, 88, 192, 4, 21, 85, 53, 249, 4, 121, 159, 217, 51, 57, 142, 41, 50, 180, 125, 3, 209, 31, 96, 117, 86, 144, 168, 224, 145, 130, 33, 18, 225, 63, 100, 252, 99, 127, 15, 61, 244, 57, 184, 12, 152, 124, 121, 111, 53, 196, 216, 139, 159, 53, 186, 117, 246, 209, 218, 224, 161, 113, 135, 133, 104, 178, 158, 24, 124, 152, 36, 153, 147, 157, 103, 146, 64, 124, 121, 226, 68, 52, 223, 207, 102, 46, 26, 17, 163, 253, 189, 248, 210, 5, 132, 103, 255, 43, 85, 70, 176, 49, 121, 135, 61, 119, 241, 169, 19, 87, 169, 135, 152, 149, 107, 35, 240, 224, 139, 67, 118, 94, 10, 50, 179, 108, 174, 69, 67, 65, 118, 255, 232, 230, 209, 128, 96, 223, 153, 7, 10, 249, 119, 197, 72, 242, 180, 8, 192, 95, 90, 174, 253, 239, 44, 38, 158, 114, 23, 82, 169, 15, 79, 122, 145, 144, 85, 123, 120, 52, 73, 253, 155, 134, 136, 100, 6, 62, 92, 69, 36, 252, 127, 208, 228, 30, 72, 61, 166, 202, 26, 58, 45, 219, 128, 96, 7, 221, 150, 239, 23, 229, 187, 89, 119, 151, 232, 146, 210, 159, 38, 104, 112, 95, 204, 196, 44, 67, 4, 80, 0, 41, 73, 253, 81, 144, 6, 178, 94, 179, 123, 16, 12, 101, 190, 149, 147, 215, 186, 166, 204, 131, 60, 115, 217, 94, 39, 86, 177, 249, 215, 161, 147, 179, 57, 24, 138, 5, 45, 47, 58, 38, 146, 155, 212, 109, 195, 212, 128, 206, 232, 213, 35, 5, 224, 106, 61, 250, 152, 131, 192, 207, 94, 171, 11, 46, 228, 56, 36, 90, 159, 85, 215, 154, 194, 128, 79, 201, 50, 209, 46, 126, 247, 76, 172, 88, 176, 196, 112, 199, 84, 187, 114, 6, 28, 64, 215, 188, 250, 27, 143, 92, 187, 156, 196, 84, 242, 169, 238, 198, 30, 235, 203, 17, 193, 138, 186, 62, 116, 121, 232, 157, 17, 192, 138, 183, 150, 55, 160, 65, 161, 118, 18, 62, 50, 97, 166, 221, 106, 62, 230, 112, 204, 108, 157, 13, 12, 242, 195, 245, 244, 88, 251, 224, 105, 254, 233, 197, 8, 181, 192, 81, 237, 142, 18, 14, 160, 114, 19, 150, 97, 60, 160, 38, 236, 91, 61, 211, 103, 74, 78, 142, 201, 204, 208, 32, 241, 122, 118, 95, 197, 16, 240, 161, 139, 25, 160, 170, 123, 44, 126, 201, 54, 87, 176, 92, 160, 39, 213, 31, 80, 253, 176, 207, 148, 45, 11, 216, 20, 195, 132, 159, 81, 50, 143, 42, 80, 112, 23, 20, 196, 100, 74, 59, 251, 142, 249, 237, 200, 194, 189, 157, 182, 254, 239, 23, 168, 131, 24, 194, 214, 70, 89, 15, 126, 145, 90, 200, 73, 67, 109, 213, 53, 6, 119, 10, 201, 192, 181, 200, 143, 176, 69, 29, 77, 143, 6, 158, 34, 220, 118, 112, 151, 105, 92, 205, 181, 75, 131, 107, 220, 176, 69, 146, 241, 74, 52, 232, 83, 38, 135, 202, 88, 181, 117, 14, 237, 224, 158, 208, 213, 94, 131, 95, 81, 227, 6, 40, 104, 32, 250, 203, 138, 70, 57, 250, 251, 227, 71, 55, 155, 93, 106, 58, 251, 190, 183, 75, 145, 6, 76, 8, 46, 72, 74, 154, 52, 9, 171, 240, 14, 196])},
{encoded: "9jHYGtp82mkEy7Hni9yzHwxpg2npDUW8nUE8LXQzGdHpbEaco7bJ6YP9oaF7s8sV77YoScEuZHCBi7Hg21YuJDjbrxGfkSCrd38s2QL1yRfz4LsPYkPVHtmbg9SpdVR1JM5py7MfzP2VU4nwSdrptmb8WAa4oWbJcbanwZ9yYcdsStgDXj5iEGVBHEbBh4eYGM7CuX2SGm8DLutTJWCq27byLRetbeCcyBRzWrGLHUnHMpHinWsKiJfxRatAVQR6WYwHHsmPTEXP72HUc3PeuEaDdyEHSL6cSyemYMKhAWpNr6MBYDU65FQVxmmxqGTH7Cr7YxEqUBvQ1UA6J7d3xSYfAveHaKd4uvu7xzYeY6TnDFwEp5NZ7zgfQiAvxdRkaTfwM9LpLcKasXNrjaaQzJ4rt5nzYDk5YDHwauaFFQtuuCWMtPXNvF2i5L3RtkjxoMpSHdYm2hMm8qM4uMt4g3SSA27Gm2wK3Uw3nNrZ4zBoGXy36bw9oAmLWgjfEQhHVKu98BvGk9b6ptzJ5Zz5oQRnSv7Mmr2dAXpaqUN4DQnJaAdN1tVC1sBFUpaHUjdEvJFm4VfR5wtZM53spMAC9FGwggVYqz5Ab56pNkFs2sdVg2cwyUoAWe8PkWtBfBkSJaZzErkHBNtbL5YUsGNAG41t9jsTcBuUsgwPZdP6h9oakk3WTjv2D4iKw2Z1AxcuHg8gVHFPW63UHSPaBsJAfg4vY4TpNCYseFGmXyxqy6w94edY4Ad9rD3jTtoCZQooai1LUiZ5Ty1xcsuCY1owdqm9y8YmJkUthXsdac62a7thErv67vCLnXpRRbA2nRhwt9eobqLyGhZ5CKS9B3Doxhv2QPNNoX",
decoded: new Uint8Array([115, 40, 69, 132, 111, 163, 223, 157, 45, 1, 173, 44, 76, 164, 128, 240, 216, 177, 23, 102, 124, 168, 246, 22, 15, 167, 96, 195, 181, 145, 235, 166, 126, 136, 225, 68, 232, 60, 172, 177, 188, 23, 225, 143, 169, 49, 83, 57, 156, 230, 188, 253, 50, 89, 246, 40, 71, 130, 146, 49, 220, 45, 124, 2, 140, 212, 42, 87, 211, 76, 207, 185, 41, 117, 86, 136, 98, 79, 253, 55, 133, 174, 251, 47, 241, 163, 217, 133, 229, 155, 44, 113, 143, 226, 211, 103, 79, 46, 152, 233, 21, 121, 21, 123, 117, 38, 243, 25, 209, 77, 63, 75, 87, 89, 74, 56, 64, 84, 79, 124, 31, 220, 171, 90, 16, 125, 248, 22, 58, 130, 40, 85, 133, 79, 234, 17, 91, 255, 146, 249, 241, 216, 172, 149, 222, 87, 211, 142, 5, 15, 2, 2, 55, 76, 150, 148, 172, 52, 212, 85, 237, 160, 101, 248, 145, 198, 131, 190, 143, 91, 99, 54, 89, 176, 51, 65, 122, 5, 12, 82, 5, 15, 1, 132, 2, 19, 234, 158, 96, 172, 202, 196, 209, 27, 244, 145, 23, 173, 255, 186, 228, 78, 187, 5, 191, 95, 211, 69, 71, 223, 19, 74, 221, 182, 227, 228, 217, 18, 65, 157, 122, 86, 193, 255, 3, 84, 20, 176, 65, 236, 190, 79, 114, 167, 170, 171, 5, 3, 211, 16, 180, 161, 64, 209, 151, 178, 208, 201, 124, 135, 47, 126, 104, 189, 137, 27, 66, 67, 94, 236, 191, 148, 236, 139, 59, 103, 162, 145, 73, 30, 248, 87, 183, 9, 252, 97, 166, 40, 180, 179, 114, 45, 50, 173, 136, 57, 26, 27, 241, 222, 59, 119, 134, 187, 254, 15, 36, 94, 242, 153, 77, 31, 34, 239, 118, 229, 189, 190, 193, 91, 25, 100, 117, 251, 229, 238, 6, 54, 238, 220, 111, 32, 173, 116, 148, 156, 82, 112, 201, 31, 231, 194, 10, 185, 85, 174, 0, 132, 26, 198, 128, 224, 241, 16, 2, 28, 22, 254, 75, 254, 156, 24, 146, 50, 141, 238, 150, 243, 88, 189, 105, 149, 60, 162, 39, 50, 185, 170, 53, 244, 0, 245, 125, 182, 145, 178, 74, 186, 117, 31, 104, 248, 19, 218, 198, 158, 132, 33, 106, 237, 36, 8, 74, 148, 21, 90, 160, 106, 167, 90, 101, 167, 54, 60, 62, 193, 122, 148, 68, 88, 69, 125, 126, 190, 178, 15, 162, 21, 25, 6, 208, 233, 36, 88, 165, 78, 151, 248, 176, 248, 82, 183, 132, 125, 146, 61, 120, 137, 97, 79, 129, 175, 90, 217, 240, 190, 139, 55, 183, 51, 129, 83, 153, 231, 185, 51, 135, 222, 214, 220, 176, 246, 238, 128, 218, 90, 33, 70, 117, 13, 156, 97, 66, 116, 185, 116, 95, 195, 25, 166, 195, 184, 211, 196, 54, 200, 188, 24, 233, 148, 233, 41, 28, 160, 106, 161, 53, 147, 158, 105, 130, 126, 6, 244, 35, 242, 110, 231, 103, 115, 219, 83, 162, 107, 192, 100, 160, 211, 228, 87, 72, 211, 157, 138, 46, 191, 41, 243, 114, 118, 227, 110, 151, 162, 64, 161, 223, 39, 80, 98, 148, 54, 123, 1, 33, 4, 20, 161, 144, 47, 216, 65, 16, 229, 176, 202, 116, 28, 36, 128, 6, 246, 215, 5, 28, 51, 117, 179, 110, 255, 36, 84, 93, 123, 74, 87, 110, 193, 228, 21, 59, 139, 189, 4, 4, 65, 19, 255, 85, 224, 203, 244, 150, 246, 23, 248, 251, 57, 176, 227, 227, 113, 1, 51, 164, 169, 90, 177, 129, 245, 6, 173, 255, 10, 196, 161, 146, 161, 217, 253, 67, 250, 162, 11, 99, 52, 147, 13, 205, 93, 70])},
{encoded: "b1hmbBQgKSTPtfyUE3LaXSMHmJoqEbjkUsdPHorUNu97apvr8E3qbo2mAz1SUuEp93XWYCMUL9HwboJU8UJNvR9be4ecXgerkq9oW6pb4GMcHivDfQRSg9rVrbtYTD1CKKgXMbbYoJ6ASUiAMGow7Vg8n3A2VnTE2NANXJ8t3t5K87LZsPXFMrtyYNnjAK4giCCtweFMPumhVJwpN1vewsXZ4syF6Aph8y64taYVFq7bC9GEbbTLm82qzaacMPho8bsZ5Bpfh8sJP33SibC4pCxzPWj1AEwgnrXyrJs3x9ATbhZvX8p8ufE3hZNhASS1HqEHNA5v7ZzeGkRQxEeiS1yfj9T9oBoqZo4AuprrxVVZ7imcxXp6V5rUgQyJ45s9VAfQzXtZjCRYwKBjKE6iakeVQx6D9rZoVFp9Xi67qAUjAacSu4KdUh4gYvBc7kdYjKrXZEmiHmUQLXy8h2MdvSpYyP14XotmNfgY2zfZmVX8FbVa9BvHANUoCk2TD4tSBuEyrqZL3Emp5qnGm9hU1chHrCH4Ag1eG9t5GdByRK7v8FJ4J3GhBuRSQuNLAdFpeA96YSK1iZcV1tgTTr8AQYcM8VW4AJGwodWYTnCseXmfJhdPPQszBRKMbxJ61EFpzW1EazaZHFa6EgoYhPsV6orvVDtEs2YCQ1f5FiRbHmZTM9B9e2gd8S62oNfrVVzuz9eGfNzW1pU9cw27KsEK6mxZDdZEdD4QzbNE3hxMctGTpFyfU8gHiwkXSYwHb93cgQJKy8PKcwXsQjZdPDzSXbK7Jvgj3wDLp9Xd7w1T1452r2jVhAnh4yRRPUJLF6bAp3nYqV9P1SvsZgxvnDNgpG1eprFJLEt6tqoLq1dEkU1bSth5bT4eoEQZ1rgrcTNiqpekQ9gPPZhFsdRHEt6Fx1D1jrZmJM",
decoded: new Uint8Array([210, 229, 187, 221, 167, 129, 130, 58, 135, 110, 72, 250, 76, 18, 158, 179, 157, 212, 199, 92, 227, 120, 149, 248, 201, 158, 233, 212, 121, 93, 79, 216, 1, 141, 39, 38, 32, 88, 40, 82, 17, 59, 159, 225, 96, 77, 143, 58, 209, 46, 93, 82, 238, 223, 183, 155, 50, 44, 73, 10, 191, 235, 106, 191, 130, 143, 183, 74, 123, 49, 182, 40, 86, 213, 92, 95, 51, 211, 149, 36, 38, 37, 183, 242, 127, 150, 105, 170, 119, 14, 170, 222, 219, 222, 55, 80, 58, 132, 83, 89, 248, 219, 110, 16, 55, 2, 193, 249, 152, 82, 183, 202, 233, 32, 68, 206, 156, 134, 231, 228, 73, 97, 143, 43, 82, 245, 88, 69, 231, 167, 35, 254, 203, 138, 143, 164, 23, 142, 169, 52, 57, 173, 12, 43, 6, 143, 20, 229, 15, 167, 217, 98, 149, 214, 153, 47, 252, 173, 159, 139, 95, 11, 199, 21, 8, 221, 238, 88, 149, 80, 72, 242, 95, 168, 112, 128, 15, 45, 45, 194, 59, 184, 145, 149, 239, 228, 68, 40, 26, 242, 21, 68, 103, 116, 161, 253, 226, 82, 102, 141, 189, 240, 26, 64, 236, 49, 221, 123, 122, 85, 34, 119, 230, 229, 132, 222, 251, 208, 36, 5, 11, 250, 252, 117, 154, 136, 157, 7, 14, 6, 227, 242, 99, 115, 50, 249, 44, 94, 225, 72, 50, 206, 112, 115, 129, 134, 73, 135, 124, 159, 12, 110, 22, 64, 233, 45, 35, 139, 13, 209, 5, 226, 68, 165, 137, 245, 18, 168, 99, 118, 178, 173, 127, 116, 138, 242, 237, 113, 115, 202, 42, 153, 23, 121, 179, 246, 116, 52, 139, 192, 165, 112, 243, 98, 167, 228, 44, 4, 207, 128, 240, 130, 198, 10, 199, 126, 38, 197, 32, 86, 198, 116, 73, 7, 195, 211, 54, 93, 202, 204, 28, 142, 118, 189, 185, 10, 38, 119, 101, 248, 244, 192, 72, 252, 235, 190, 56, 86, 250, 215, 19, 194, 22, 62, 214, 121, 165, 46, 238, 155, 223, 92, 19, 247, 77, 230, 135, 87, 255, 71, 7, 77, 229, 174, 74, 29, 174, 87, 11, 85, 247, 232, 143, 116, 223, 16, 91, 178, 178, 7, 127, 206, 45, 105, 180, 247, 41, 14, 254, 90, 29, 137, 56, 109, 103, 214, 83, 204, 74, 233, 114, 44, 114, 248, 249, 111, 178, 242, 203, 22, 71, 190, 223, 136, 20, 241, 42, 231, 107, 120, 73, 141, 67, 166, 50, 89, 175, 82, 60, 243, 139, 235, 31, 142, 213, 39, 82, 25, 168, 208, 8, 112, 232, 109, 201, 87, 130, 209, 52, 30, 163, 224, 87, 240, 214, 31, 49, 100, 128, 121, 169, 245, 53, 42, 42, 31, 21, 146, 244, 16, 159, 109, 150, 182, 222, 90, 152, 145, 150, 238, 37, 16, 52, 33, 201, 15, 131, 32, 110, 64, 115, 175, 107, 193, 18, 240, 14, 4, 20, 57, 37, 54, 38, 192, 183, 212, 127, 7, 177, 10, 196, 139, 23, 0, 227, 27, 146, 69, 130, 221, 175, 6, 27, 179, 141, 203, 29, 8, 238, 189, 79, 138, 237, 175, 24, 183, 59, 177, 97, 232, 70, 202, 65, 199, 246, 174, 224, 40, 133, 40, 18, 57, 51, 248, 92, 88, 145, 92, 76, 14, 125, 14, 166, 189, 20, 34, 100, 18, 245, 246, 154, 166, 226, 252, 115, 5, 192, 239, 92, 119, 122, 57, 165, 252, 23, 121, 62, 91, 14, 237, 4, 122, 31, 183, 36, 32, 151, 143, 176, 88, 170, 186, 203, 41, 248, 181, 203, 39, 198, 74, 245, 103, 214, 157, 251, 88, 12, 223, 47, 65, 181, 240, 143, 50, 4, 28, 223, 245, 129, 163, 55, 174, 29, 127, 94, 193, 207, 252, 89, 215, 250, 50, 78, 120, 40, 239, 130, 2, 141, 214, 69, 138, 218, 70, 218, 141, 28, 241, 223, 225, 12, 6, 196, 255, 241, 94, 227, 96, 132, 15, 255, 212, 215, 20, 27, 23, 187, 110])},
{encoded: "AsnbYLmAWhqZfRXzYaY942QU13FqCXG8u5RaNrs8eEumC5dnuiYnHwLsSNaQbTvtXchdX1ftS7jDr74DTaABX5QDbJGnbVPJiMCDRxUmP2P2EerPgVP96GmR3YoDR8wsLa4szG761iVMcpbXhmosrJ5B8hmqiqpQzJxfuvAa4YwZPSC3RyQ3mFPrAcgyq3jVqEUE6wj3oMkGS4osdiW5N42nSZibJcwjTaod8zZHxeNVnwnuG7XJv7d4MZbr2XV1ScYqBCz7BAMhhYo4oaW8xRmdyEG5HCmmTwL8egmUCTpSoXbCL2xpECPPWq8CoenQaUWMQwX4FP74Nxv6qDqwzL6U2WhxpDTzDWBG3MmMmik6P1b1zgUyaaEvYi226mzjR8p4tXdiAhF8wVnd8jL1SFeTJLjUZh5cDkYm4HPSmWsfV9oEzcq8LzyTPX77Kxnqng4s9rAajNW1i59nSu9apsKCToWNaP1oTo7rP8C5gEUcsXj55c8XrmzQT1CDFxrP4PWy51h2fwr26tmHPtSyBGMfD39PZk4xksvFigQTuXkLMANdr1X5SZX3pZML4R5xNBp2Hu4euufhxePT6omtPzaqwqZoWT3ExpYiQxHHDSik763i1jAcDSmeGrSddBjhuuytjNKEUGYnFpPhVHKQaj22Tmpy5ymHYZUbEYvLxpqaQs58UNNc61hJvPCfHC6EfU6mpYgybkpAcvDppbQpiUgafVPRkRkvKqo93GsiwYEDPgWDoK2Eyk1YSu22CKsSkMRGSMBtzsVYcwu5PuehANG4NF7i4XMgPg6Q89nuV9cVKwUN1VNoQoMQEL1j2Kmp6N64h8Q45DvCbkMBMeXJw2fkZg9igJAH7BEkBcyJNK8RvpE9SogDUKY4oJa3NwT2bFMmXQYqco1vej7cvdfdncdA2zQy1YAhS7AGtU5UQHDhDpgKEgexf9J9nLewtq1oyA62jLkCwvjdKN2oH5dhWUgKpxeHwPY374PUC5K3mPpjP6MY6gHeAtcHLCUR94m5M6rYRLwtz2tVuwC5iLEmEG2vnBQFQovFZWMSMa5Pm8mNvExaS1FFtxxbr4P2Xc2DLY21ssUgra6dGCekf3d1Rj8Jm4SLeEZp1oAQQ4rChorKt2ZXr3fnW9wDMv1nME5xB3XJ5yYAgLr1Jf6eTn4oZpSQUG2QR23XuTw2vArEexLSL5JFthf9TFVSQ3wweGYdKX6TDxGNbAz7jNbZ8Vc1R8ghE5CKK8xwLmikbEJL1sKUf6UBPeF8h8WCVWsgBPajYspr",
decoded: new Uint8Array([136, 145, 184, 16, 160, 255, 26, 166, 105, 91, 34, 12, 11, 57, 183, 31, 244, 101, 140, 208, 188, 148, 101, 26, 191, 212, 241, 23, 3, 221, 203, 207, 37, 111, 64, 148, 19, 194, 86, 0, 209, 252, 219, 49, 168, 197, 82, 2, 133, 77, 253, 150, 8, 3, 209, 23, 15, 161, 95, 209, 105, 161, 170, 45, 140, 107, 114, 27, 6, 59, 90, 15, 172, 216, 131, 181, 31, 97, 136, 175, 177, 49, 208, 224, 14, 62, 239, 118, 212, 43, 30, 76, 181, 194, 131, 155, 36, 227, 251, 19, 89, 12, 114, 27, 113, 11, 74, 43, 153, 30, 176, 189, 82, 148, 192, 61, 51, 115, 27, 233, 217, 90, 6, 25, 31, 114, 134, 205, 239, 128, 188, 22, 142, 83, 194, 54, 47, 22, 185, 44, 218, 166, 225, 217, 76, 210, 221, 217, 56, 178, 209, 85, 215, 172, 194, 38, 99, 253, 124, 2, 145, 26, 227, 13, 109, 42, 210, 52, 145, 51, 89, 76, 237, 210, 37, 13, 205, 185, 63, 202, 144, 47, 19, 235, 104, 83, 111, 44, 208, 95, 254, 19, 116, 55, 154, 15, 34, 175, 221, 49, 84, 82, 71, 179, 222, 34, 149, 9, 41, 75, 60, 57, 212, 219, 255, 134, 244, 183, 75, 96, 111, 172, 7, 4, 98, 208, 8, 224, 122, 187, 189, 243, 40, 250, 109, 14, 53, 191, 89, 98, 5, 112, 9, 3, 232, 220, 218, 124, 202, 32, 180, 5, 201, 61, 114, 226, 245, 143, 18, 100, 249, 90, 69, 86, 205, 128, 159, 179, 43, 169, 248, 88, 226, 173, 17, 197, 255, 62, 225, 101, 97, 57, 26, 237, 8, 16, 241, 90, 198, 17, 85, 190, 88, 133, 89, 26, 155, 90, 57, 63, 99, 27, 54, 178, 249, 83, 15, 107, 69, 12, 73, 47, 225, 164, 13, 172, 128, 234, 107, 119, 217, 99, 202, 100, 31, 182, 196, 58, 197, 124, 164, 181, 10, 192, 38, 191, 227, 89, 239, 253, 124, 32, 95, 53, 81, 182, 129, 179, 192, 167, 223, 99, 101, 12, 16, 152, 126, 60, 222, 90, 106, 90, 12, 207, 99, 198, 13, 193, 26, 144, 112, 19, 179, 217, 89, 216, 66, 121, 149, 81, 198, 3, 48, 87, 165, 69, 233, 96, 32, 222, 24, 195, 16, 62, 53, 194, 228, 83, 212, 193, 90, 94, 225, 247, 90, 44, 242, 200, 235, 37, 170, 124, 208, 23, 218, 219, 233, 111, 53, 174, 85, 110, 171, 6, 117, 44, 82, 9, 16, 19, 39, 242, 226, 162, 52, 203, 63, 25, 175, 116, 213, 59, 191, 221, 223, 21, 54, 129, 2, 222, 189, 5, 144, 70, 192, 132, 2, 113, 118, 211, 185, 223, 31, 10, 207, 169, 174, 177, 101, 91, 18, 53, 114, 133, 49, 69, 200, 6, 136, 200, 6, 135, 108, 38, 177, 21, 8, 167, 34, 221, 85, 73, 236, 251, 151, 155, 67, 14, 216, 48, 192, 228, 243, 81, 247, 125, 118, 10, 84, 28, 132, 9, 2, 124, 3, 223, 82, 172, 78, 159, 21, 116, 36, 171, 41, 63, 37, 167, 112, 66, 113, 200, 22, 27, 44, 114, 211, 173, 231, 9, 148, 157, 122, 172, 95, 224, 111, 53, 201, 186, 21, 19, 15, 127, 216, 219, 206, 137, 255, 9, 172, 147, 157, 41, 100, 41, 37, 113, 125, 242, 137, 133, 246, 87, 29, 102, 35, 36, 103, 154, 29, 114, 207, 60, 61, 68, 228, 70, 214, 142, 26, 12, 218, 47, 62, 45, 246, 148, 54, 162, 122, 136, 9, 180, 112, 183, 17, 130, 71, 15, 170, 154, 4, 17, 70, 207, 5, 39, 109, 22, 221, 220, 143, 6, 202, 43, 153, 160, 241, 37, 55, 17, 51, 23, 204, 23, 221, 142, 102, 51, 219, 130, 253, 132, 99, 155, 37, 225, 3, 252, 203, 45, 216, 68, 239, 174, 162, 141, 168, 157, 180, 115, 82, 243, 184, 203, 125, 0, 127, 35, 163, 107, 134, 104, 86, 109, 190, 105, 117, 14, 174, 142, 155, 5, 188, 200, 150, 154, 95, 156, 31, 5, 59, 139, 64, 100, 109, 34, 105, 162, 222, 121, 126, 50, 196, 133, 190, 31, 121, 129, 47, 130, 37, 137, 28, 25, 165, 133, 109, 57, 221, 100, 107, 190, 50, 182, 24, 189, 114, 215, 197, 68, 176, 214, 209, 183, 219, 101, 140, 41, 98, 129, 155, 182, 5, 98, 170, 113, 142, 64, 37, 114, 6, 28, 160, 211, 76, 95, 68, 23, 205, 110, 103, 146, 136, 51, 175, 240, 68, 250, 182, 118, 193, 122, 145, 208, 73, 94, 119, 211, 203, 161, 69, 239, 233, 254, 68, 244, 197, 103, 71, 41, 158, 4, 19, 60, 140, 64, 135, 200, 13, 64, 220, 81, 193, 82, 135, 31, 208, 241, 214, 240, 4, 26, 45, 207, 52, 177, 118, 217, 197, 232, 52, 183, 22, 233, 195, 224, 161, 41, 148, 8, 234, 243, 109, 140, 13, 220, 237, 73, 194, 187, 50, 252, 159, 207, 167, 27, 102, 25, 135, 50, 136, 60, 112, 233, 135, 18, 41, 101, 244, 74, 136, 245, 120, 52, 85, 115, 70, 20, 152, 94, 107, 13, 213, 202, 177, 70, 169, 85, 241, 219, 57, 37, 255, 157, 241, 190, 163, 9, 124, 170, 17, 147, 229, 162, 239, 132, 201, 21, 106, 109, 221, 131, 145, 161, 210, 99, 37, 190, 55, 205, 97, 19, 69, 36, 20, 234, 166, 58, 134, 79, 108, 38, 79, 127, 3, 96, 162, 216, 11, 170, 8, 107, 208, 41, 42, 7, 6, 119])},
{encoded: "7GLXzGa7ivpFNiFAuGfQgsFfPzbytdtE8ukQHbV7m6EVnr4j77xmynkmvVMaWoajwxouNDesjLc6QoDX7njj9sQyX2bKpXYkwgo2RgLefS2ewVhGj9E4aXirtDNR9v18d9ifiksXXQABfXV3A8SKMssXpK794qbe2gbF5NswBS5xTHYgFz7GPeTkWbeHHga5vWRQQqHuBdzbMzh15TfpciPx7ye5nDma8r43Dgd1eiEFJRnLFNGd4NwULwSNxnFfVheYwQJ95mLyqYwyV7RWPSx2L8i8TUTjpF8x5kAhgKRkeNRZLrv1x96hUHT1zrJwkZjjA6oxFtbRB9K8aFU5DtS4ggB6bCQuobUSS2j6SwPcPU8GeY9s8Wfnk4hYgC7AhXXvqcm3CMYW4UMku5tLHEZ64uYM7tbyK84JQrQG8YdLLhPxJ41WePz5brZn7ZKKzwsxT93hSQepjRfj9kGY1VEgexBaohmzrDeMoKQ6dxAqin1CECfxn6yiv8yHhDyjH4uDLyf6Hj4vWFxeDSzUPniDN6mWdHrPXp3m9jdugsJU3iqdwhwdK5HHDyHgDVKQtAdG5pk28YQg7B4kb97JpZtXiBQe9vfnCZWsFi9XW4eCDVtq2u8nzfYpKKdLJLGDjgSLQsSwtM9p9xsEL2s1RZj9qWovX86hpNaftmidxbXZdtvDV1z3ruq1v5HRw3vWtU8jW6CMXENr8Pm6j5uhrpMMGvCEXEW9cNxbMxJ6b7CxaxFMNGsWi5UddXhpigRFxbGmhsjqyUYTC9b4owSGhHJpbZ82Tkw2aute5VeHDWx31XqUEpk6TNzAaSbGc1zq7LcZUAA3SS2J4eDT156Kou4pQsiDft8gBtBofPLBSkJtx5fGXBFwf1P1UfaJcYGN8RmsKLa2gi8SwJUesn5qT8VB95pn7o8PEqcGBwXHzMU4PdZmRRQnVySMQqb3FVzRkD25fAmcWgJaqnhbXV6dsDVgtvGsqtA9bH7aHfcaRjWa85njkpuVE81YobEckMi5cpox8WuLnz57G5kezUWV2bFUV1acpMaakwJchz6GuCkRptqaXGhWTjuDcBYU3SawmN5pUrKCGciQGxG9Whx9A4J7B5315tJTSrrgS933BT3UWTVSCZpp8cvJL9Wy1YdwCKrmpvRFLXHaJrJVNAoxza8MUM5rk38PPSBpHuJVmbLjxn1JsGDCNkffYM",
decoded: new Uint8Array([30, 212, 42, 199, 186, 236, 113, 249, 79, 77, 121, 248, 15, 37, 193, 176, 205, 108, 102, 223, 66, 145, 195, 244, 8, 193, 213, 13, 54, 107, 105, 94, 70, 225, 88, 181, 77, 131, 15, 242, 230, 131, 117, 42, 60, 53, 61, 66, 72, 34, 226, 209, 105, 75, 251, 117, 183, 62, 180, 97, 215, 55, 174, 43, 18, 242, 164, 15, 184, 114, 151, 222, 77, 35, 253, 33, 161, 87, 211, 121, 191, 19, 38, 79, 214, 81, 173, 229, 229, 63, 225, 31, 92, 48, 154, 205, 0, 165, 247, 117, 243, 209, 144, 2, 212, 252, 12, 25, 124, 128, 130, 244, 33, 82, 229, 129, 175, 126, 166, 4, 169, 43, 34, 27, 14, 139, 129, 174, 114, 88, 168, 169, 27, 188, 94, 153, 61, 62, 254, 153, 33, 221, 221, 73, 171, 63, 186, 228, 165, 51, 70, 91, 238, 109, 239, 218, 238, 173, 69, 129, 2, 72, 100, 4, 174, 245, 9, 213, 2, 93, 87, 22, 99, 186, 16, 63, 43, 94, 221, 41, 76, 155, 189, 100, 107, 10, 79, 208, 70, 167, 145, 221, 68, 44, 123, 35, 39, 94, 76, 85, 10, 88, 38, 126, 30, 173, 152, 151, 42, 237, 136, 5, 18, 52, 77, 162, 71, 160, 4, 46, 123, 185, 96, 184, 219, 99, 68, 37, 178, 171, 102, 164, 184, 243, 50, 203, 24, 98, 106, 44, 6, 190, 57, 122, 117, 72, 250, 21, 201, 127, 236, 217, 18, 211, 91, 255, 151, 1, 191, 40, 151, 6, 142, 57, 244, 220, 3, 143, 198, 219, 34, 61, 148, 238, 122, 152, 173, 17, 99, 152, 180, 27, 197, 189, 16, 157, 153, 245, 105, 134, 155, 234, 58, 207, 148, 75, 151, 119, 243, 226, 70, 235, 172, 196, 225, 59, 114, 118, 13, 218, 104, 106, 108, 228, 162, 99, 157, 88, 246, 2, 127, 156, 205, 154, 253, 238, 112, 33, 132, 44, 53, 98, 85, 221, 31, 66, 139, 125, 218, 236, 219, 23, 167, 100, 177, 186, 180, 83, 167, 46, 104, 134, 9, 99, 195, 162, 52, 16, 229, 129, 199, 98, 230, 75, 131, 8, 131, 226, 171, 21, 43, 192, 53, 15, 227, 188, 235, 111, 148, 233, 65, 117, 38, 57, 192, 169, 214, 255, 224, 5, 180, 133, 125, 158, 142, 148, 51, 139, 66, 120, 79, 81, 136, 14, 151, 17, 92, 90, 105, 51, 116, 2, 62, 3, 204, 225, 174, 134, 154, 221, 178, 185, 16, 65, 221, 67, 48, 232, 148, 124, 117, 149, 131, 207, 177, 87, 21, 33, 13, 219, 93, 145, 72, 61, 3, 190, 67, 147, 115, 101, 184, 176, 91, 126, 198, 72, 155, 1, 163, 109, 60, 41, 182, 227, 253, 130, 237, 199, 207, 238, 100, 10, 244, 25, 154, 118, 46, 71, 191, 3, 81, 69, 92, 161, 146, 97, 16, 71, 135, 177, 22, 232, 96, 167, 139, 87, 163, 77, 237, 173, 32, 74, 42, 186, 108, 2, 89, 5, 144, 121, 53, 10, 32, 222, 26, 3, 252, 87, 62, 129, 230, 80, 233, 50, 186, 240, 28, 109, 57, 14, 85, 91, 241, 205, 46, 162, 49, 208, 169, 212, 230, 64, 49, 21, 249, 166, 12, 206, 94, 152, 115, 205, 165, 77, 166, 0, 110, 62, 249, 99, 89, 13, 233, 128, 164, 161, 74, 173, 207, 176, 204, 252, 186, 133, 6, 112, 91, 110, 235, 209, 53, 193, 248, 3, 239, 129, 202, 237, 210, 194, 189, 150, 42, 136, 197, 48, 75, 147, 203, 18, 77, 116, 61, 121, 108, 51, 216, 48, 238, 7, 235, 19, 227, 120, 72, 186, 166, 235, 227, 183, 109, 230, 91, 38, 6, 53, 151, 249, 40, 14, 150, 66, 151, 114, 216, 221, 74, 247, 131, 165, 190, 108, 198, 249, 163, 34, 4, 154, 108, 66, 157, 10, 82, 89, 253, 88, 34, 183, 132, 207, 248, 116, 188, 209, 72, 159, 14, 181, 226, 188, 249, 102, 165, 154, 123, 42, 56, 152, 164, 102, 94, 181, 240, 174, 197, 111, 45, 241, 78, 38, 136, 89, 63, 118, 229, 84, 133, 4, 104, 147, 105, 195, 231, 178, 188, 24, 227, 223, 58, 32, 10, 165, 112, 107, 193, 28, 146, 0, 25, 69, 136, 127, 21, 52, 26, 30, 243, 140, 43, 123, 220, 126, 6, 112, 97, 210, 171, 80, 187, 73, 167, 217, 60, 100, 69, 47, 192, 12, 107, 158, 20, 37, 215, 67, 184, 82, 35, 73, 41, 0, 66, 38, 215, 81, 1, 187, 62, 37, 134, 55, 85, 121, 162, 168, 159, 11, 211, 191, 64, 67, 91, 102, 189, 8, 169, 103, 198, 166, 222, 148, 24, 24, 9, 173, 172, 246, 106, 75, 201, 165, 14, 241, 215, 7, 21, 178, 235, 109, 168, 4, 203, 35, 11, 157, 123, 239, 216, 205, 27, 97, 118, 218, 31, 251, 141, 2, 14, 8, 165, 30, 122, 251, 35, 106, 23, 141, 1, 174, 175, 115, 89, 244, 127, 130, 59, 141, 3, 160, 75, 157, 16, 15, 192, 224, 49, 5, 216, 29, 30, 179, 152, 247, 241, 181, 193, 125, 98, 21, 201, 216, 47, 42, 230, 44, 255, 25, 142, 44, 128, 140, 141, 15, 100, 235, 141, 242])},
{encoded: "2qnai1WmtAgHv34zqTZGs7iRNBoSTvF9EUcEcPfuiC9SGJvgEwNTrbgJZ7aYiaQQTJqiNPPti3vm6VsperoLMv93RKY8FZqEFk4V3oXCMKRMEQpouDtnXwm7xEEXeBRboQL1K5PiEgkRh3XfvVajuxWRkWawu3c3XEdUYimZqjB23zoJnWamwY62VXn6nhyNYcViktintybNbZR4tnPvkNwWAG9gP4zEDze6iahQaPFqzc5ewC1wxqrzJgANjEE4rH6TqQWukZSoKJLQTXXi5xxjTWjGsissYakmzrr2mmafR7x5eRkG1rsiJXKQvVQxTk9uLqZ3jexPCgFxetXfCdqLfd",
decoded: new Uint8Array([59, 14, 160, 83, 41, 138, 139, 201, 128, 188, 103, 158, 163, 225, 111, 64, 159, 203, 211, 25, 167, 240, 95, 100, 173, 252, 114, 116, 157, 70, 33, 159, 126, 142, 59, 27, 5, 51, 254, 112, 135, 24, 69, 171, 74, 245, 65, 177, 55, 226, 36, 25, 44, 119, 58, 37, 149, 128, 37, 32, 207, 96, 41, 96, 197, 44, 28, 36, 56, 139, 186, 248, 248, 144, 125, 173, 203, 186, 129, 71, 12, 109, 45, 70, 56, 85, 140, 85, 110, 75, 234, 163, 224, 203, 110, 148, 239, 18, 95, 54, 218, 144, 60, 228, 138, 82, 9, 221, 25, 130, 88, 252, 36, 185, 152, 151, 64, 162, 127, 43, 125, 215, 140, 23, 248, 18, 192, 173, 162, 71, 95, 229, 40, 15, 33, 126, 219, 15, 129, 232, 92, 105, 234, 213, 132, 20, 119, 85, 172, 68, 192, 88, 57, 160, 108, 12, 111, 22, 238, 33, 230, 13, 17, 43, 221, 92, 154, 107, 149, 240, 58, 156, 226, 120, 17, 199, 207, 81, 179, 76, 135, 164, 253, 182, 150, 187, 138, 82, 53, 197, 232, 95, 41, 37, 22, 3, 139, 155, 14, 77, 34, 246, 97, 241, 145, 150, 25, 34, 96, 70, 112, 244, 25, 247, 115, 243, 63, 35, 48, 143, 107, 59, 238, 150, 18, 41, 58, 198, 85, 144, 7, 153, 197, 105, 55, 146, 84, 44, 24, 240, 135, 238, 123, 14, 44, 157, 121, 10, 29, 144, 46, 167, 140])},
{encoded: "3ncghomeUqxGbPzkBSm2NdyiKBSib3rNqmDpwgS2gDAkrmtuYZD7n7U8Y2H9hdHaTYZt6HVuJyq42MjfXfAP8jbbXGp2oCi3PVm9mnDeDipeKc6QQ7jwJnknm127DdAYNfnjrYSXtqKXD2o84dThNwzLHJEC838LQXqn2r5BAVnsLjz6WnBVDE6MaW9MAKsuTTm5ohu646PSRT3e6tG7EkSN3wGiAFdq1DAzafBgekegzvedHHEHwbiiPvXVfsBinVSuro3td5f3S7Q4fjWRove14kuvGQiAZnSDGMGaSjZDdBLmcEAwwjSaKjcZ6eTHHEZdBCPH9ueWsYbn1xdW4T9MaXHR2cmNgSdWekf7eky8jQZjfdN7q3Sonucy2cxRRS1DJJ8byucTXuaZ3MjBRtoGQ3xBK5QDeJRPkSCYXQ57X6esa4bWAa3n1QrzN9MxjnBYdoBxRWiNHaMisWErEZ7tS3gTUmwNQfH3oYhNSpqCz3wJhdZEMQiXziL1y8UqxdDdcMcy2KVkfTLpKYduVENg6V1kJpFKpnPSitWTbS8VvZiiZ9vPKJdZoXW8FbufXerWVHRCrvotdfuDU2ksoVCLrrneqSsjuDaJNPRvxJn7M5rT7DUBaT6JE1VRpms4sZP4h1747kt3sfwt1fkEysk31Kkn6CEJcoAJ4QzvAeNmqMTDnmRbiNogyzqv9tmLiJGYydp1SVgzYjd3ZAxFjJHFgrj7bcKa5dHTsz3Qw4gpftR5xmUTFrZHECfMUABmJi6QtCmiYLTazPy2WLrRTVMBuNNWjaG2CKQcgZiqLA4uG8MqVqvkWHESzWE2oNPMfd2rxpuStN3KeAdPquhBZPfvGXW96PXYgK7e1sHwcQSJKL1ZmRhQ3p36GPRJZadcZrU7tLDjcDHGmj7yZYykbomXJdVwvRAYCuBsVvBpTzysaa9Kinvg8y9uuNKpS8DHKuCfQHAdrummb2g9LCuhBxarhAC1aMP7QaEjYrr5ZuBqCfuqDCFFYFnfn4turF9adNQUB8gXJPifaCUUTnvyWrXwqCpteQQQdXtRippn9fKRpU7pSnFwWcgkK48rsnFVY6kECQgLVh9yHQV4s85iACdo7TX7fofHftB44QxqMB5PuzBwb5JerWpc9HLMy24kcxWFJdDqDywqmnhZSdNSiAXCdxXaccZ3aVc6z6u",
decoded: new Uint8Array([22, 64, 90, 69, 63, 103, 5, 2, 113, 213, 122, 194, 131, 24, 168, 51, 167, 111, 173, 3, 199, 98, 252, 176, 117, 30, 179, 103, 92, 93, 116, 220, 36, 218, 194, 119, 177, 162, 102, 37, 71, 93, 164, 110, 183, 4, 140, 170, 143, 62, 29, 29, 22, 191, 249, 27, 52, 194, 39, 141, 239, 82, 242, 97, 202, 221, 196, 32, 110, 196, 64, 246, 80, 137, 200, 247, 145, 67, 172, 193, 98, 214, 117, 119, 5, 189, 174, 126, 165, 34, 152, 55, 178, 225, 122, 93, 13, 133, 119, 248, 133, 127, 52, 59, 25, 254, 231, 79, 221, 186, 140, 80, 81, 69, 246, 117, 8, 75, 159, 13, 67, 36, 174, 159, 49, 202, 94, 165, 123, 30, 132, 41, 215, 158, 3, 206, 147, 24, 24, 18, 188, 244, 199, 47, 146, 192, 5, 24, 62, 70, 173, 158, 222, 46, 193, 56, 194, 181, 254, 154, 241, 243, 216, 3, 134, 128, 170, 218, 160, 206, 109, 251, 165, 154, 225, 205, 40, 6, 50, 14, 95, 190, 205, 155, 123, 124, 194, 9, 77, 88, 171, 181, 208, 232, 14, 87, 89, 98, 237, 45, 170, 47, 230, 57, 164, 106, 122, 114, 251, 229, 124, 23, 135, 163, 65, 97, 144, 189, 160, 194, 125, 226, 6, 36, 35, 10, 159, 8, 175, 180, 213, 116, 200, 125, 140, 177, 27, 200, 21, 99, 36, 135, 249, 82, 206, 198, 126, 52, 32, 217, 123, 102, 118, 244, 25, 151, 21, 51, 26, 160, 48, 166, 81, 152, 108, 149, 242, 174, 16, 146, 149, 101, 207, 195, 181, 197, 137, 22, 118, 174, 191, 208, 180, 143, 123, 85, 183, 236, 81, 171, 155, 148, 203, 159, 44, 247, 119, 123, 87, 250, 243, 120, 9, 29, 153, 235, 206, 225, 7, 119, 17, 112, 192, 148, 61, 58, 189, 250, 7, 177, 108, 13, 39, 229, 234, 231, 205, 121, 158, 219, 253, 58, 193, 159, 118, 106, 214, 162, 197, 223, 123, 7, 189, 85, 85, 47, 171, 152, 178, 112, 233, 53, 68, 216, 34, 58, 107, 13, 144, 103, 204, 117, 146, 185, 158, 142, 198, 30, 210, 146, 26, 48, 181, 218, 118, 40, 132, 219, 85, 156, 81, 185, 49, 244, 254, 2, 74, 32, 58, 114, 189, 255, 163, 97, 60, 112, 141, 160, 69, 57, 234, 51, 60, 126, 136, 230, 97, 52, 173, 53, 44, 66, 116, 97, 100, 245, 100, 217, 234, 181, 223, 58, 205, 195, 92, 133, 228, 70, 49, 106, 207, 224, 24, 161, 249, 211, 29, 170, 144, 247, 116, 179, 11, 222, 101, 142, 53, 2, 167, 59, 62, 197, 201, 110, 49, 48, 79, 107, 48, 173, 141, 92, 238, 132, 93, 190, 14, 38, 67, 15, 100, 71, 116, 223, 136, 40, 78, 237, 216, 171, 79, 110, 22, 63, 61, 255, 180, 79, 251, 91, 87, 201, 126, 227, 171, 3, 8, 5, 167, 138, 111, 83, 123, 114, 40, 40, 177, 13, 76, 25, 196, 226, 85, 155, 56, 101, 253, 202, 177, 75, 85, 82, 9, 146, 221, 221, 34, 27, 32, 108, 76, 191, 229, 0, 160, 46, 232, 88, 222, 229, 65, 159, 67, 8, 97, 152, 36, 60, 141, 87, 78, 81, 35, 162, 126, 66, 218, 133, 10, 176, 23, 174, 25, 222, 172, 36, 64, 119, 1, 173, 125, 69, 142, 32, 92, 48, 83, 177, 176, 104, 240, 198, 68, 193, 232, 202, 12, 230, 2, 114, 125, 222, 175, 10, 157, 241, 92, 112, 41, 40, 147, 144, 101, 98, 117, 170, 113, 80, 230, 37, 37, 21, 16, 172, 241, 55, 87, 70, 157, 202, 185, 105, 85, 47, 165, 119, 63, 123, 118, 207, 98, 77, 158, 8, 203, 29, 82, 24, 13, 22, 248, 35, 211, 170, 38, 75, 125, 176, 36, 125, 176, 104, 209, 237, 12, 117, 143, 104, 196, 208, 149, 13, 226, 30, 181, 191, 109, 167, 109, 202, 223, 98, 133, 171, 218, 235, 25, 233, 157, 90, 101, 83, 224, 90, 167, 22, 237, 99, 165, 7, 184, 158, 90, 170, 92, 145, 181, 67, 152, 97, 223, 131, 211, 246, 231, 250, 138, 16, 97, 137, 126, 11, 43, 221, 60, 4, 230, 126, 21, 25, 47, 3, 6, 84, 70, 143, 160, 50, 172, 216, 119, 207, 131, 56, 30, 74, 113, 180, 153, 246, 88, 171, 28, 65, 218, 148, 210, 108, 44, 85, 235, 46, 191, 20, 2, 142, 252, 203, 32, 53, 92, 106, 181, 63, 9, 163, 22, 78, 16, 102, 225, 112, 138, 148, 196, 33, 117, 17, 202, 212, 151, 107, 101, 203, 196, 106, 251, 94, 121, 153, 134, 2, 219, 227, 98, 127, 229, 51, 246, 32, 156, 144, 117, 105, 40, 94, 17, 53, 40, 150, 88, 246, 53, 18, 21, 223, 181, 185, 109, 46, 141, 59, 105, 177, 170, 67, 61, 254, 19, 143, 134, 125, 120, 9, 148, 10, 205, 151, 219, 35, 179, 92, 48, 237, 106, 129, 34, 168, 199, 111, 87, 225, 216, 71, 148, 213, 155, 162, 76, 247, 113, 65, 69, 178, 231, 119, 62, 188, 139, 105, 189, 18])},
{encoded: "3FcF7RgiMwq2Rs4qs2azC4kFgbQjG52s4KXnsWii5Xpb1Wg21c9PvxpAc17wC2HRYe1bPwQ8SRjKTaiMC7dtdZVZMTcbJAm38EWYu8A3nn8fPj71SaQxnAv687sv3ZdEQz8PcMpDRP36HEmWdMWyzYGifa9DGzejzhLdSLrYTdnXt7QVP1wcKr1vVC2KV2AVQoaA5b4r3Hinqpx267FTuwuFM7F4bsEo9qUQ9dUMoPxQbV4DFtjk3VxDpfvDzVAY6AJdj8nCWiovgYfBqGqcFzsWiGAm3oetDy9nEHLsdnBeMwy9vQVbiqckVFT263n95GqXatwW7bG1LS3DxQxEAFxvJZSanirrZcb94c5L72NggzKB8pmgQiiTU9ronSnPDWNNES35XwPR8Jm6hz85gPpm8vqFiSjeziXW8S5g8HQ97TMtX1iGw4Bfuk1hEPgLfDVcZhvUHuG98VDXSaVmSSNbYhtEPnkFUkaqBLZY7L5xgKwgK4wRQAr7uhmt9wyba3t6ABdJ6nqYUMEd8hUPxvtZuvo6d6YAXSFDqrLuidmJxwJdCGVRAGk1V5jxD63W5kbm4Fp6H7GDHaUood6jjxt8WUPR8eGzMgPUUhSpCowDxpUb49KiXhmsAYWhezDQ6cMLSDd1rW6UWvt8cqy6in1Lgyk8UXBCmZUBfG5bUJQdupj9KeCQ7yThQRg8uYuSZn3ju8iMMEgmkShqAAK5bYZ9qC9M4St5CvjRUznPjrwgCzivZM4UqRm7p31GZmyACaKLWChVjWgKnshGNznDrhFHRkBwsDBicvmJuYdrHopywG2Qtphzm8UoMbCcubgJaCr37mWXfxZJZTXw4gCwV6SzMVwbbqn242pJKZ4kTopDCJBcR4747BgpCib3wbPahczb5bgbJop9MfpiNeEwL7RAGJSf4RdjMJFmz5QPnoSV34EAtXpcvAw4RTbYxRecHPqCvW18MEHru1UUsB98iy83xEqZ6jvGk9WTM4DPPbE5kcBbq7sQdR7B3KNjvUmhuncoA9Rqp1Z6ZtWnCnqtt3mzgeSXEV9C4HkYL1RAHGWRB7jxC6vpy7a2D2pup5rTcmZD3ou8sKNKeG44GMyMxfkGymDn6SmALfqUNHB6tBhcxH1joHSVMYrph2rrfTfqwxQQ6PhQxsdexqYxDoxZn1LLFsYYUyRhbnZE6xS8yaU6v6BjVWWFD5Sws",
decoded: new Uint8Array([48, 233, 209, 226, 189, 237, 214, 157, 127, 137, 59, 107, 137, 163, 110, 185, 247, 173, 53, 52, 51, 214, 65, 210, 192, 200, 112, 3, 240, 190, 64, 160, 252, 150, 62, 144, 32, 156, 253, 158, 222, 133, 182, 155, 56, 194, 67, 69, 123, 3, 186, 169, 60, 37, 107, 57, 95, 112, 219, 235, 187, 48, 15, 61, 231, 83, 25, 146, 145, 114, 10, 235, 195, 111, 48, 187, 152, 247, 206, 85, 94, 237, 63, 209, 72, 8, 125, 85, 118, 115, 237, 119, 118, 143, 222, 182, 138, 126, 37, 14, 57, 177, 186, 71, 233, 5, 142, 58, 162, 206, 254, 149, 234, 111, 216, 81, 227, 114, 54, 220, 255, 28, 121, 234, 249, 136, 221, 202, 116, 218, 14, 167, 211, 11, 190, 33, 39, 35, 130, 6, 233, 57, 217, 196, 207, 118, 212, 193, 158, 255, 149, 93, 220, 10, 61, 171, 100, 217, 167, 35, 238, 243, 91, 138, 54, 152, 252, 164, 208, 49, 18, 21, 157, 217, 255, 169, 179, 35, 5, 234, 249, 194, 249, 208, 250, 154, 226, 72, 224, 15, 99, 146, 86, 212, 72, 209, 127, 156, 23, 163, 7, 49, 168, 3, 13, 123, 64, 196, 181, 112, 5, 182, 131, 109, 87, 114, 24, 192, 226, 250, 34, 181, 9, 123, 57, 24, 161, 171, 225, 147, 150, 186, 144, 215, 66, 200, 86, 156, 100, 210, 66, 12, 119, 24, 97, 128, 115, 43, 48, 67, 201, 92, 118, 98, 70, 129, 174, 185, 131, 139, 219, 153, 144, 235, 108, 2, 144, 167, 115, 179, 68, 72, 56, 242, 4, 224, 95, 157, 56, 130, 92, 243, 197, 98, 88, 57, 94, 169, 173, 156, 27, 31, 186, 217, 141, 232, 2, 130, 248, 73, 255, 68, 91, 107, 90, 14, 144, 25, 149, 81, 72, 91, 159, 177, 8, 238, 213, 160, 140, 132, 207, 71, 60, 214, 39, 140, 83, 194, 52, 183, 223, 106, 79, 187, 210, 31, 182, 187, 242, 50, 109, 176, 92, 97, 180, 96, 153, 200, 140, 26, 253, 14, 208, 112, 6, 196, 143, 183, 233, 220, 201, 12, 76, 213, 188, 15, 34, 172, 35, 209, 191, 151, 61, 30, 23, 125, 245, 86, 47, 228, 141, 209, 187, 104, 84, 191, 28, 248, 35, 247, 116, 205, 203, 81, 242, 251, 102, 158, 42, 116, 4, 115, 61, 3, 4, 27, 67, 230, 240, 157, 89, 216, 181, 49, 235, 99, 191, 228, 135, 206, 250, 104, 245, 88, 186, 235, 68, 46, 174, 188, 32, 51, 25, 170, 10, 41, 52, 31, 100, 120, 113, 73, 31, 171, 149, 64, 195, 77, 9, 163, 13, 6, 101, 135, 94, 17, 102, 110, 252, 153, 174, 12, 80, 240, 117, 169, 51, 86, 57, 59, 80, 91, 73, 156, 156, 224, 67, 112, 219, 81, 9, 55, 128, 255, 12, 117, 227, 244, 247, 198, 245, 208, 160, 50, 158, 111, 113, 239, 217, 18, 140, 251, 33, 201, 67, 30, 87, 169, 85, 156, 122, 197, 108, 185, 189, 9, 254, 202, 6, 86, 91, 129, 143, 48, 187, 7, 182, 161, 225, 126, 220, 148, 137, 252, 250, 181, 126, 244, 63, 56, 105, 236, 11, 216, 156, 24, 51, 17, 5, 219, 5, 124, 58, 8, 246, 28, 38, 179, 145, 51, 17, 116, 227, 49, 98, 253, 86, 101, 17, 139, 79, 24, 86, 33, 37, 24, 147, 255, 105, 155, 243, 4, 200, 50, 184, 252, 101, 44, 37, 54, 191, 13, 201, 44, 144, 35, 10, 90, 115, 8, 87, 213, 54, 185, 150, 191, 193, 98, 83, 129, 217, 207, 34, 126, 183, 78, 117, 103, 213, 142, 123, 1, 236, 206, 131, 134, 71, 115, 55, 246, 126, 14, 112, 81, 86, 127, 216, 250, 95, 208, 209, 216, 5, 243, 11, 94, 226, 255, 183, 180, 122, 112, 17, 120, 80, 80, 175, 145, 96, 0, 51, 24, 162, 91, 229, 127, 9, 97, 5, 144, 132, 61, 40, 156, 96, 27, 202, 200, 108, 137, 132, 149, 95, 207, 132, 99, 229, 191, 79, 219, 121, 55, 72, 31, 241, 252, 136, 211, 45, 174, 130, 56, 136, 195, 136, 17, 224, 51, 140, 8, 68, 180, 220, 146, 120, 3, 241, 166, 84, 222, 185, 226, 132, 37, 18, 8, 165, 67, 152, 12, 225, 226, 1, 238, 68, 105, 225, 249, 35, 221, 240, 213, 195, 197, 79, 129, 154, 53, 93, 125, 248, 120, 200, 249, 255, 56, 114, 96, 177, 26, 57, 126, 204, 36, 198, 28, 235, 238, 94, 14, 25, 158, 102, 35, 23, 244, 3, 216, 9, 223, 2, 227, 254, 115, 65, 145, 248, 179, 42, 113, 41, 231, 95, 162, 84, 66, 76, 149, 92, 74, 254, 56, 108, 239, 115, 89, 232, 32, 204, 39, 6, 90, 81, 68, 1, 87, 200, 33, 36, 189, 32, 219, 166, 83, 136, 188, 37, 79, 14, 69, 31, 239, 118, 148, 102, 145, 227, 167, 144, 23, 24, 114, 38, 56, 164, 56, 64, 12, 93, 18, 247, 99, 233, 122, 206, 13, 89, 185, 193, 89, 189, 209, 36, 41, 96, 244, 98, 215, 67, 62, 242, 174, 1, 24, 107, 224, 190, 116, 216, 213, 71, 195, 5, 110, 210])},
{encoded: "",
decoded: new Uint8Array([])},
{encoded: "JvUNGGTqL3x4Lvw3HbnFfR2pqPvea55aY2TCCQxaaADjP6q4DBXVc36K3hT4HSmAqZDGYgoAkRuq2s9VZMeEMpNAvs3zLHfvVVykGiXgeGhVvyLNJz8v6i3RBj8FYZ7qs5Xq3wvUWuijSZ9BSGmDvHMWiMz6p7MvWmD3kVXRJXuESSKB8WmntLoFpjbf6GznEcMF3xmoo9zQSfiWSC8kZxDf2gUsHnBnRu1gxdH9oXrXkTGDV5mr9DQsN8vX4kzsMv8o18RLotgA36smaM1YJpuP7WxGzHrXsGqiPfXUDzosKqAi1s5CBR7T3KzgxLdypkpeDGPSuGcJk5kkf7uVksgbP6bzWkn8aBDRikDs8U8XeeCav3tnRyo1p7rvbooBzMuYYSAFug4mHhC3QR2GjLZGuNMmhUJKMzwV6TJopSSLtQcCsEiApdj4PC7SdB2qB1Mo8veXcV3SCvdbqFux8FB4tL5sWQj7W5oidg2Q858MQQ8C1s3mX6FgbTeLF3GPUuWeap5qTB477jrVKyZAY9Am13KkrLzvJviqKBrpV4MpBmM6jnTx93F5rwPELsCtH5oSbsbegtRHvZ6578K1wEEJ9H5QF3bKug815QqV4cLNTDceUEb3gxS1QFRfSY2codJqZYJDzqbwfmrP44NNB7yWN4YM9M7nxvMXwtwoixjwks7B5qd4UaHMePvGZ86Bfa4f6JatsMoeXJggxvWC77uoHL3skxpXNKjeg37eqzpamphmFeJmM2bbu46vC28i2Fh8g18F6vT2yFWqSXFUU4pPfLyyM9NL3R31QWhPmKB6kNQUPQhJDr8tJqLamrUqc8kwW7zSnUo9WaiG24UtPAM4HwfKjKKekJ9QankmtbEM31nMg4GwV4oJQW4VthJhPjANfjba6B1dt5S1YjiiTWtfEucsJ4gq9XsvBnjqy5rrLbQLB99pNUBu9jMiBsTWy8W6TX2xNETVWrd4BAPQCygdx2zGtPDqHQdsC7uUEwQJjy56XLj9BAx5N4XgMQBripEw9nzN4urfLNyFxTbe2tPxBbEF3z6hUXQQvwDa37zwXzxt1hdinLy3bQnyd6io9jHQyHbqBh1oRmU49PKPNMRvMoq3fD8x8JUe6jYs8yMa6EMJ7z2GXmNkbf",
decoded: new Uint8Array([187, 166, 41, 231, 121, 127, 78, 177, 86, 1, 194, 159, 26, 53, 192, 127, 255, 180, 123, 70, 236, 210, 180, 86, 155, 116, 115, 242, 249, 142, 122, 118, 133, 138, 48, 38, 209, 130, 79, 244, 65, 30, 117, 155, 28, 247, 131, 211, 172, 77, 129, 12, 171, 13, 56, 203, 180, 156, 136, 10, 84, 24, 250, 78, 134, 42, 27, 39, 106, 43, 158, 100, 243, 155, 16, 19, 251, 144, 13, 138, 6, 127, 132, 219, 204, 235, 174, 9, 65, 180, 119, 246, 215, 38, 5, 79, 67, 2, 209, 154, 161, 150, 177, 74, 29, 50, 247, 168, 89, 37, 104, 140, 171, 74, 229, 132, 65, 123, 123, 82, 119, 159, 38, 219, 139, 178, 29, 240, 58, 56, 104, 198, 251, 85, 137, 41, 82, 66, 124, 202, 218, 55, 84, 49, 202, 22, 168, 234, 203, 226, 15, 55, 68, 54, 124, 93, 57, 215, 214, 241, 170, 153, 188, 67, 4, 223, 238, 90, 163, 69, 126, 64, 55, 168, 161, 161, 76, 177, 214, 59, 114, 29, 78, 232, 193, 200, 100, 76, 66, 0, 129, 139, 57, 90, 109, 208, 110, 17, 188, 169, 134, 167, 249, 179, 240, 4, 31, 203, 174, 167, 200, 168, 85, 3, 128, 247, 17, 64, 247, 65, 108, 221, 58, 74, 160, 72, 34, 76, 141, 28, 178, 154, 115, 253, 175, 159, 84, 196, 124, 62, 26, 176, 223, 21, 244, 22, 94, 231, 93, 183, 235, 80, 25, 178, 105, 243, 153, 250, 132, 185, 4, 223, 2, 170, 101, 0, 48, 54, 39, 194, 12, 85, 143, 168, 190, 97, 6, 64, 133, 91, 185, 186, 238, 116, 82, 58, 28, 229, 22, 162, 35, 151, 183, 66, 140, 121, 65, 200, 224, 92, 60, 221, 160, 132, 118, 223, 247, 22, 22, 56, 19, 163, 121, 216, 3, 42, 147, 248, 54, 255, 245, 122, 22, 216, 157, 42, 16, 95, 53, 156, 95, 48, 99, 99, 162, 18, 65, 0, 188, 4, 201, 83, 241, 100, 92, 26, 3, 188, 247, 138, 246, 155, 177, 155, 15, 161, 207, 51, 194, 128, 165, 15, 208, 221, 235, 5, 18, 156, 188, 162, 191, 196, 132, 225, 225, 112, 170, 220, 46, 70, 127, 227, 9, 187, 75, 92, 80, 204, 174, 199, 74, 57, 102, 130, 166, 23, 198, 115, 18, 4, 123, 112, 72, 128, 21, 252, 17, 119, 197, 242, 230, 171, 5, 16, 69, 215, 71, 64, 222, 32, 75, 180, 45, 28, 67, 22, 27, 137, 57, 137, 225, 50, 173, 178, 173, 50, 96, 28, 127, 203, 120, 133, 55, 60, 11, 137, 120, 70, 123, 86, 167, 185, 176, 109, 58, 104, 98, 223, 8, 61, 182, 240, 128, 203, 125, 242, 124, 93, 129, 175, 85, 11, 203, 75, 183, 74, 88, 57, 100, 152, 98, 38, 55, 96, 63, 139, 188, 183, 213, 83, 36, 197, 232, 49, 15, 226, 243, 61, 44, 32, 24, 89, 198, 110, 230, 92, 204, 84, 63, 209, 177, 28, 31, 170, 180, 70, 31, 202, 180, 94, 132, 196, 41, 26, 195, 7, 186, 235, 20, 8, 26, 184, 177, 38, 200, 223, 195, 61, 187, 118, 165, 137, 31, 221, 12, 133, 46, 25, 40, 66, 114, 141, 119, 140, 129, 103, 151, 194, 13, 131, 162, 151, 2, 230, 187, 77, 12, 209, 177, 89, 117, 59, 233, 238, 29, 19, 159, 85, 51, 40, 80, 214, 187, 35, 98, 203, 54, 109, 95, 63, 19, 171, 96, 50, 91, 220, 48, 69, 146, 171, 9, 238, 34, 202, 150, 50, 30, 103, 192, 41, 155, 77, 180, 234, 26, 153, 35, 237, 113, 120, 103, 34, 205, 247, 147, 24, 133, 233, 12, 48, 116, 114, 201, 247, 43, 46, 38, 164, 218, 190, 212, 151, 132, 96, 122, 193, 234, 8, 216, 63, 103, 111, 51, 202, 60, 63, 113, 35, 216, 255, 62, 43, 88, 110, 73, 218, 39, 161, 194, 135, 20, 228, 55, 141, 166, 89, 135, 41, 136, 241, 43, 132, 180, 210, 34, 75, 79, 219, 177, 199, 231, 229, 247, 92, 156, 69, 231, 9, 107, 181, 217, 229, 254, 124, 45, 26, 37, 55, 26, 229, 139, 29, 130, 169, 225, 17, 241, 37, 225, 229, 234, 16, 254, 75, 166, 58, 162, 102, 152, 130, 190, 38, 216, 163, 251, 251, 113, 221, 168, 116, 233, 170, 0, 97, 41, 244, 50, 60, 221, 25, 126, 19, 7, 216, 18, 94, 90, 104, 174, 6, 226, 110, 210, 219, 244, 187, 12, 50, 176, 226, 128, 189, 29, 243, 25, 84, 61, 149, 232, 186, 164, 152, 11, 60, 60, 7, 56, 204, 84, 136, 165, 48, 106, 203, 106, 113, 35, 154, 190, 66, 180, 120, 203, 169, 18, 246, 148, 197, 153, 32, 204, 61, 29, 87, 251, 114, 192, 204, 81, 196, 243, 33, 88, 116, 56, 97, 182, 114, 26, 107, 210, 38, 241, 195, 96, 56, 79, 154, 238])},
{encoded: "26PNWuPHHRNj7MHejjD9vy4Cn4TFWUuaW49ev1SHEd6tHFsoQ9CMbE7jGxQ2oZ7YMBhJ56m3PA3McjMP4bFQxH573vAza2Ca4X3WffBXMz4uLZ7wT8ogvvdJfJWxybXpwicgMx9rrwJwcyBJXWwkj1WQdhi1QtaPzeV6nSFNC7V5hHgCQH8FrU9eqosAJzASR7Eea4wmouf",
decoded: new Uint8Array([173, 173, 101, 157, 223, 166, 110, 131, 68, 248, 220, 75, 93, 172, 229, 96, 56, 135, 139, 179, 246, 238, 221, 246, 184, 1, 118, 186, 254, 225, 147, 194, 25, 210, 48, 198, 221, 152, 250, 158, 237, 219, 56, 14, 138, 244, 162, 255, 249, 230, 106, 66, 147, 118, 143, 229, 101, 93, 57, 109, 102, 164, 76, 60, 51, 124, 245, 67, 55, 97, 237, 244, 43, 230, 179, 134, 171, 41, 125, 212, 37, 215, 200, 90, 183, 182, 219, 21, 40, 37, 130, 105, 224, 80, 70, 118, 80, 245, 66, 221, 65, 230, 87, 248, 139, 158, 136, 202, 232, 147, 122, 154, 159, 47, 221, 65, 165, 247, 81, 24, 51, 220, 216, 163, 133, 227, 20, 121, 24, 54, 10, 254, 56, 238, 5, 98, 159, 118, 129, 216, 19, 38, 64, 213, 183, 141, 93, 70])},
{encoded: "8NMaqaXF9QRLPG3Sp9Zjg1RTT73Pu39rXy7qyfo1RvvXDqtwq8v9aR1AduTCvoB5gKJTKbGNudWoQ7nsrVhVSj1njDx99wrkkniWu18jruVexUaADQHUYV4Puk4GDkZojFeMZrzMwi2ij5SfinTVjXkrktD8m82WCTP876BVPgVmzuzRWNPVxdzSHpKUSCnwmkDfcuaGrRAa9nP66NHYJVY8jHvS1cJYodNu37MpzHo4cJzTVz3qBhWNo5dfRK1YtGk6u1RVn7KwEpk4yfz3ZN4aUDDNNjjCG8Z2JsS9g8BTX2Uc2Vdz357DiabjVB5ETbRSDwuBdysAQkuxwA7D3KBqGuTXShtXyaLdY4F58eiw1GJAsqiFWmXU5DPVvB2tySF8TXwNTGsq8MeYFBKApd3CThUmaUPpmQXmweJzSxdj9YKtQhn6EawQ1uEX9n8sBRZiSnE5tV2pEW3t8zfXXQh1SARpNWRYcGuZpag4jc5wwyHYBoqfJVLkv2zGjTrGBXrPEjYMrmXKMa5epHg8xjzSBXYtPGG79HbQCwyYTehw2uYYUtRV",
decoded: new Uint8Array([30, 94, 232, 178, 140, 215, 87, 124, 36, 29, 153, 242, 172, 38, 70, 6, 90, 233, 222, 67, 186, 79, 245, 137, 162, 185, 91, 9, 73, 173, 47, 45, 6, 40, 122, 252, 46, 136, 200, 213, 142, 171, 114, 157, 70, 168, 236, 59, 39, 23, 4, 60, 99, 9, 23, 174, 44, 175, 68, 72, 26, 104, 92, 135, 210, 82, 246, 104, 173, 237, 176, 210, 240, 108, 35, 146, 238, 249, 181, 190, 80, 10, 63, 252, 244, 139, 230, 96, 144, 115, 237, 74, 149, 239, 35, 242, 88, 29, 227, 133, 15, 145, 9, 148, 138, 116, 212, 12, 137, 62, 69, 15, 59, 15, 109, 160, 102, 42, 103, 147, 204, 94, 248, 109, 209, 73, 181, 33, 188, 4, 212, 172, 209, 43, 54, 113, 53, 9, 196, 210, 37, 55, 192, 1, 132, 254, 94, 22, 182, 243, 68, 70, 136, 232, 12, 11, 76, 7, 96, 150, 92, 152, 191, 157, 63, 59, 253, 213, 67, 239, 23, 103, 159, 149, 7, 51, 34, 44, 73, 182, 245, 214, 233, 24, 96, 92, 6, 64, 228, 199, 199, 89, 114, 82, 18, 244, 204, 119, 133, 199, 89, 177, 94, 219, 181, 94, 30, 202, 181, 242, 189, 44, 173, 135, 138, 252, 22, 144, 213, 245, 66, 96, 85, 139, 62, 20, 130, 28, 84, 82, 2, 189, 89, 179, 65, 118, 37, 105, 60, 146, 2, 152, 146, 234, 4, 31, 192, 253, 46, 183, 242, 62, 105, 44, 106, 72, 47, 156, 108, 255, 191, 215, 29, 71, 54, 79, 140, 79, 122, 56, 162, 34, 83, 147, 17, 146, 136, 213, 112, 237, 140, 214, 238, 150, 30, 134, 28, 156, 182, 246, 71, 114, 212, 80, 197, 136, 120, 61, 107, 155, 138, 87, 68, 193, 89, 20, 94, 20, 123, 169, 166, 237, 77, 16, 236, 251, 13, 130, 11, 151, 28, 253, 232, 124, 44, 225, 224, 181, 147, 3, 187, 178, 50, 54, 97, 23, 237, 205, 42, 216, 146, 62, 8, 169, 158, 58, 204, 71, 94, 239, 202, 25, 2, 122, 104, 83, 128, 90, 129, 59, 71, 109, 62, 4, 107, 154, 154, 223, 39, 113, 219, 174, 2, 211, 240, 235, 115, 85, 41, 18, 71, 166, 6, 118, 113, 62, 1, 29, 103, 28, 10, 49, 109, 59, 60, 55, 194, 94, 128, 70, 68, 20, 91, 97, 101, 15, 174, 244, 4, 88, 159, 162, 192])},
{encoded: "LQHD2hjDMqQX7uc7SxfRuLjAc8ALeYmZDeRk8BRsc8494QMFjH5daZGygAgDX53dcM2ZbnD2rZq6DAkXcL5fQNqfr4zxa42AEVFAUSqfzaKxKQ9Du2oFSN64YsVgnjhFwRSsWdiREeAkjCTP6kR9WaY6aoQyzKrS8KMYjUmLzVJUz5KdCPJZSHFYhYRPzF1RgTnMREfGfHq1xE5QvW37HhsEX4PyNsq7vLgSVYU4a9iwrihxjUQo7Np3pAeT6P2hwAr324QRUEBfLUEqjiuPToFHaU1UQ3ee9z8B2VK6MA2WPZd5oW8yFtrx3sqfy3cnsc25fC6d8gDoirwN4PmjNRuQPBXqhXJj3d8To47iGZ5AcN94hLs1Ww6KLxXgkyQYyuk2Gw33E4pJZgPSL9M9FYth4p5qW14JsZ1vTwpv3GzA5HrEdAAjLu63f2WHBJB8dpWq1BvecqCz4WwC7o1VhxaFyukwdG4Gg6desb9Qb9Y8e2XVFeLumGPdRdkbokeumeRx1eZQKFq6vTjtPbRmk9iVkBh",
decoded: new Uint8Array([14, 163, 227, 58, 93, 35, 26, 196, 32, 7, 49, 232, 194, 236, 17, 162, 172, 105, 246, 40, 76, 84, 109, 111, 145, 138, 151, 121, 176, 165, 60, 134, 219, 240, 104, 114, 130, 59, 167, 242, 116, 186, 34, 128, 207, 232, 229, 118, 153, 122, 241, 73, 19, 146, 60, 209, 153, 80, 12, 152, 24, 33, 108, 72, 14, 235, 97, 236, 0, 41, 13, 172, 194, 152, 12, 120, 99, 157, 216, 161, 145, 41, 251, 33, 20, 17, 129, 94, 94, 115, 16, 65, 140, 108, 66, 28, 40, 233, 202, 26, 91, 125, 102, 2, 142, 250, 10, 47, 73, 247, 74, 206, 203, 142, 233, 249, 191, 79, 141, 48, 180, 211, 140, 112, 25, 93, 224, 239, 206, 43, 11, 246, 25, 83, 12, 194, 242, 20, 207, 211, 252, 185, 167, 20, 40, 131, 242, 113, 127, 112, 143, 154, 223, 18, 233, 185, 248, 163, 231, 232, 133, 44, 209, 101, 54, 236, 153, 37, 28, 21, 248, 139, 252, 110, 30, 162, 174, 78, 213, 100, 27, 13, 127, 217, 35, 63, 105, 231, 174, 28, 85, 49, 251, 124, 130, 70, 40, 236, 12, 36, 22, 125, 110, 164, 206, 92, 29, 48, 117, 106, 248, 148, 120, 50, 156, 92, 225, 3, 239, 67, 17, 114, 136, 194, 114, 136, 23, 131, 28, 43, 79, 231, 98, 0, 166, 83, 138, 158, 213, 114, 137, 110, 124, 71, 216, 124, 44, 45, 251, 221, 253, 52, 56, 153, 184, 127, 170, 196, 227, 66, 250, 2, 82, 54, 232, 85, 108, 42, 114, 248, 127, 130, 115, 237, 248, 166, 134, 255, 120, 228, 58, 214, 116, 209, 171, 247, 85, 87, 89, 99, 246, 15, 157, 178, 93, 110, 231, 237, 42, 205, 60, 69, 25, 82, 195, 237, 176, 224, 138, 110, 204, 174, 110, 89, 106, 139, 208, 231, 40, 90, 148, 17, 219, 43, 122, 153, 175, 161, 115, 57, 253, 83, 193, 54, 110, 132, 192, 238, 137, 102, 243, 35, 207, 70, 227, 111, 252, 32, 222, 124, 138, 89, 253, 99, 180, 74, 238, 243, 223, 51, 101, 114, 74, 68, 185, 68, 216, 17, 46, 232, 153, 5, 245, 12, 194, 247, 151, 34, 136, 157, 110, 255, 28, 68, 163, 163, 118, 214, 0, 198, 235, 16, 151, 175, 40])},
{encoded: "2Kme567P4pLTWWiF3RgrvbT7cFSgLEM3NqgAbyVpqVXad9yHiMpxrfptDygD9TJ8TtAzQNhiKMrQTtpzKcbtEt1xGTepdaG5i3agEEx1WEXMmRe8czGVemhofmvGZqRfLeXF5p3nFCRBknpugKnEhfNJZfSHftaBt2fpLEggBAWqrVp2pn1BUDGpVf1RDRGpYCeAgBrMAif6MbkmKBcfDR5WZ2QL2AqwAzjXBBc2vYPhUEPfbFTDA8Vyqd6hEqgNoXgaouqnP9DBzMuavr4XXKxwTqZAw9zWWHHUzZwvP4U7co5YiL2HBQA7i3H7FNCfQyidr9AGA4qBtZmCKtSqt5zTN75vHvRnmWVjhsyeovtjVqJXG9HmC89wwgacVbPPQaZZtbyAj777hVYGwNia3pqeWzs34XL9HBDQ7PamftEEH8t6mD7sBPSgRuW4JmyDoaf8wurooJYwQJNTE349mLucTW737XSU8wbmQLLEPefb7Ycck8ttnWDzT4PdNdZnZjgMsMsrxhWjgvb5McbeSLWYFYK368veETmjfqG4svennhkn2sERskscNai7sfa9M4G2DR2XLqubyETLg2Hi6apMtoSGvWW74XkwDnfYNr6V5k7AjLDTfGmWhgb5tokpx9xgkptkcvQ7BZdpXfHvWbz5C8LcxJqiRAB8givgGTvoSQRDsKg9XnEK6WJqnk2XQn8rofA1juYEXhwtLrEJ9jJJixqeuahWm8g2RAooLffEW7jNU7NZj5pxJBRzS8a1bzpXQ9EVRHEJKjqGVxDvVW2gBahJ2n47C6VBR1ePq9A2WCQKi9wRyLWZiJ4JSJ5ERMh6EkFzMvg1SayLxJViUF7dS2oodJgpemSzgDqDLpdCSWrUsqC8JevDvCtwFgj8XFwMZmEt4SL3LmonUPVroNjgWDpPKkDWoTiKwGmepgYgRHTk9w1GEfGT8mPCv4jRXmtivrf2sPi35NMitMy836fgcADm2gdtn2dYFuJPv2HsnSYB23pBgXZx6k9Q5xsSoeXdyMqdmRjQF5ooEANVT8Tc3PyHJpJh3U2FjSjhHXTVWgFH5YaTXJPuVNuY58Xa7eXNcEJuZqUT3TRQvAUDWLoGLQWmzbSrEN9omEoUrV6YmSVQkFK2wm7KfSh86vq9ofbTjG2",
decoded: new Uint8Array([246, 173, 34, 134, 21, 55, 48, 64, 173, 163, 199, 91, 211, 63, 38, 214, 70, 35, 162, 171, 75, 6, 108, 95, 160, 6, 26, 69, 79, 5, 254, 51, 195, 255, 225, 202, 227, 102, 181, 142, 66, 11, 254, 46, 89, 31, 222, 169, 99, 134, 159, 252, 220, 48, 32, 168, 207, 218, 120, 252, 62, 251, 24, 3, 62, 108, 5, 136, 78, 147, 244, 112, 26, 91, 170, 14, 58, 245, 215, 44, 164, 1, 90, 199, 220, 252, 248, 59, 65, 120, 196, 155, 61, 36, 147, 236, 69, 40, 175, 155, 35, 188, 11, 161, 170, 219, 0, 169, 157, 214, 231, 213, 104, 160, 180, 19, 58, 129, 163, 17, 78, 75, 40, 221, 116, 221, 61, 198, 80, 233, 96, 87, 27, 28, 104, 14, 210, 110, 229, 253, 32, 96, 61, 166, 155, 95, 167, 72, 202, 102, 19, 52, 27, 176, 45, 146, 193, 207, 125, 120, 228, 155, 124, 75, 157, 49, 0, 219, 245, 1, 128, 221, 237, 183, 220, 94, 195, 30, 123, 59, 170, 66, 175, 253, 34, 205, 140, 191, 44, 71, 117, 190, 93, 15, 172, 198, 34, 253, 212, 132, 46, 114, 21, 7, 119, 122, 218, 57, 180, 94, 232, 132, 161, 114, 198, 217, 45, 247, 37, 42, 190, 216, 24, 77, 63, 196, 114, 124, 255, 42, 176, 206, 71, 126, 240, 10, 144, 61, 112, 134, 71, 210, 42, 200, 61, 52, 213, 104, 93, 80, 5, 181, 223, 60, 186, 222, 47, 102, 142, 108, 41, 25, 43, 50, 172, 204, 140, 173, 59, 196, 107, 225, 124, 62, 128, 237, 192, 62, 17, 158, 173, 166, 156, 84, 249, 174, 175, 156, 220, 63, 165, 201, 65, 130, 4, 66, 43, 106, 18, 101, 186, 33, 35, 46, 112, 210, 116, 238, 85, 186, 150, 62, 5, 162, 188, 41, 209, 51, 221, 26, 239, 78, 120, 174, 94, 106, 150, 237, 15, 219, 34, 253, 82, 250, 127, 128, 179, 126, 208, 196, 43, 246, 26, 248, 240, 30, 228, 101, 171, 129, 93, 253, 6, 71, 51, 26, 62, 36, 47, 97, 14, 1, 144, 237, 209, 175, 136, 74, 114, 39, 125, 105, 37, 159, 234, 52, 97, 87, 191, 213, 155, 41, 156, 68, 169, 218, 14, 96, 93, 44, 128, 93, 215, 227, 50, 50, 98, 206, 28, 170, 191, 124, 79, 255, 205, 168, 42, 73, 163, 239, 205, 196, 127, 53, 39, 2, 35, 15, 85, 66, 43, 64, 186, 186, 23, 149, 34, 172, 121, 94, 107, 9, 99, 69, 234, 25, 142, 219, 226, 150, 216, 12, 34, 84, 111, 49, 1, 40, 182, 147, 67, 216, 213, 62, 160, 94, 160, 174, 4, 245, 227, 112, 162, 68, 131, 171, 119, 81, 144, 206, 103, 1, 166, 152, 77, 119, 161, 213, 246, 120, 147, 95, 233, 149, 215, 47, 213, 245, 63, 73, 126, 140, 120, 225, 32, 74, 223, 137, 194, 204, 23, 174, 193, 165, 50, 217, 71, 82, 81, 140, 36, 119, 130, 192, 149, 187, 231, 114, 195, 176, 95, 212, 175, 211, 201, 91, 154, 158, 165, 10, 51, 213, 188, 199, 188, 33, 225, 230, 22, 158, 86, 68, 13, 215, 62, 226, 71, 81, 159, 72, 85, 113, 125, 7, 81, 162, 162, 245, 213, 20, 237, 167, 149, 175, 92, 231, 208, 77, 18, 62, 37, 163, 99, 195, 97, 188, 253, 51, 24, 121, 241, 41, 96, 205, 208, 43, 164, 158, 142, 108, 225, 216, 167, 149, 134, 148, 116, 102, 91, 250, 250, 159, 203, 68, 140, 106, 156, 96, 89, 98, 175, 220, 32, 75, 133, 28, 158, 229, 237, 164, 191, 134, 93, 237, 7, 10, 126, 96, 64, 156, 192, 28, 252, 137, 97, 174, 49, 242, 206, 196, 76, 72, 11, 60, 95, 28, 138, 192, 249, 1, 15, 136, 196, 197, 149, 129, 56, 217, 111, 201, 148, 43, 171, 172, 236, 51, 17, 1, 118, 198, 75, 245, 177, 13, 239, 63, 129, 186, 4, 125, 190, 39, 133, 119, 1, 238, 25, 68, 238, 50, 249, 249, 162, 135, 61, 244, 66, 56, 158, 79, 21, 110, 214, 117, 121, 10, 2, 230, 25, 161, 250, 24, 235, 17, 161, 119, 103, 31, 178, 108, 53, 162, 168, 50, 140, 85, 192, 66, 158, 70, 233, 213, 173, 176, 123, 11, 7, 19, 9, 102, 218, 216, 228, 144, 199, 167, 178, 170, 71, 192, 28, 148, 0, 71, 218, 188, 84, 141, 179, 241, 108, 1, 44, 155, 144, 95, 7, 54, 66, 253, 253, 27, 190, 226, 254, 77, 72, 60, 19, 123, 211, 122, 81, 81, 81, 25, 17, 117, 181, 63, 18, 0, 242, 38, 177, 128, 94, 74, 238, 152, 90, 72, 241, 96, 9, 41, 35, 184, 9, 60, 234, 48, 198, 118, 132, 87, 230, 10, 94, 200, 60, 33, 160, 41, 78, 30, 13, 203, 58, 123, 64, 153, 6, 31, 84, 224, 93, 69, 52, 53, 0, 195, 35, 194, 163, 100, 22, 191])},
{encoded: "b5wy2KdoecV91xeYpGGj9yRPiPu8HF1L3MzS3S5bKRzyD5Vd91vUxWyenS9E9hHBFyBpUbZa6ab2Qvv8KLSibdsksvWCYhNMuDCmyTXZ4dJFecpyX8EfE6jRfeZxEDx7xbTR98p6HsZ3WGj5NrpisrMhryPz5man2bBpSJ2HDJa4BUGpeWj4zrFJL6JiNxWPc3pSd9TygVWK2WJCyXwMZr1o5sQZe2c4gM7Uss2rj2RKDxs48xKHJ3MgtdBTvVMfGVbJFLLBFtFavCwGf7bWBVYZMumiK9m58BgZ9mNNo6Ef8jBQH4iu5U7eMRUGmDxx599VtzMLzEuPJMzAHDiRYnmoX844B88LagM79QmkrZQo2a12SNwbZuPj4JuSFVKFHjcdXEbUyATivUBscRYARbwV945kY75wAX7A8FKt4BzyMdC9YPGYxsoMqMxKTsKZhTwfSBMzAakHhj1jLjU5cuFbiLPDetCGhNANLL7EoEEvDhqHjRw9aSrEhpG6VMMqnoCguPxYyKjF3qao5Aw8RCx1w2DfdTivdm4qvAmWNSYKYGVF2d1nATvarbNJYajjXKaneEnKwjZubVpoeHhCFJyU8Eu6r2VxWt7wundgBJ3gbMDEA3rzf9whLxK8yroa486teiLuLwVkRVn3iDFQbLULYNKykkAV1WwtPVUuAjmXzxWGj5PrJvSN6usqzhNUDi8cQgVFnjvxkeKaWP16QfygQensMyWoenfYKdvg7SsX5HyWwbrvL1XvKMkjcvXsyvf9JzsXC71hQQ2ah7bEPPY2hMU41aNe3kQJZmMSKRnt5byXkxuPZvLYgWL9AoWLqYs1cfXVnsRiYh6dpL39",
decoded: new Uint8Array([75, 54, 117, 17, 86, 233, 214, 117, 111, 50, 198, 71, 81, 196, 63, 201, 242, 50, 204, 106, 59, 4, 177, 31, 38, 199, 176, 91, 201, 171, 188, 69, 179, 129, 43, 77, 160, 214, 84, 253, 255, 53, 251, 11, 11, 255, 23, 66, 93, 43, 136, 67, 61, 234, 192, 30, 246, 211, 40, 23, 226, 253, 206, 204, 86, 107, 127, 141, 34, 243, 178, 135, 253, 106, 240, 175, 44, 54, 134, 121, 46, 129, 43, 103, 125, 198, 191, 237, 20, 55, 210, 253, 194, 102, 107, 84, 177, 16, 111, 23, 104, 248, 241, 207, 213, 231, 31, 158, 164, 82, 72, 196, 217, 47, 202, 185, 205, 138, 181, 168, 73, 19, 172, 66, 126, 195, 70, 118, 16, 103, 175, 254, 34, 249, 74, 40, 35, 202, 158, 79, 25, 82, 23, 65, 27, 209, 199, 76, 115, 200, 133, 244, 11, 77, 49, 95, 125, 84, 78, 64, 1, 222, 89, 21, 71, 212, 71, 31, 194, 22, 155, 146, 40, 28, 140, 52, 209, 108, 222, 182, 168, 56, 24, 55, 147, 152, 193, 235, 254, 40, 166, 189, 2, 20, 137, 218, 62, 233, 25, 220, 4, 28, 128, 137, 56, 210, 19, 106, 159, 97, 228, 165, 228, 186, 149, 74, 143, 58, 30, 135, 93, 57, 11, 251, 46, 235, 67, 156, 127, 0, 170, 90, 218, 167, 9, 145, 104, 39, 147, 80, 85, 77, 155, 35, 234, 216, 235, 9, 222, 107, 90, 147, 42, 213, 182, 235, 32, 87, 92, 11, 128, 233, 233, 106, 52, 169, 83, 228, 143, 80, 47, 29, 126, 72, 132, 70, 89, 112, 102, 43, 140, 234, 161, 3, 98, 252, 237, 1, 46, 25, 216, 15, 210, 107, 250, 230, 113, 109, 252, 169, 80, 55, 81, 38, 143, 181, 142, 81, 48, 105, 238, 165, 75, 86, 15, 221, 250, 72, 33, 128, 168, 192, 82, 42, 193, 197, 89, 163, 128, 206, 25, 102, 124, 153, 240, 92, 165, 201, 107, 6, 86, 138, 208, 128, 6, 175, 52, 193, 199, 170, 197, 9, 116, 211, 126, 188, 122, 221, 155, 27, 139, 226, 80, 60, 79, 181, 110, 115, 151, 245, 251, 4, 123, 105, 59, 21, 59, 217, 238, 233, 231, 224, 222, 186, 70, 185, 59, 7, 30, 230, 75, 186, 70, 6, 73, 194, 209, 247, 45, 175, 70, 188, 215, 243, 182, 241, 158, 73, 9, 36, 48, 175, 14, 224, 32, 200, 115, 238, 5, 74, 63, 222, 244, 6, 23, 225, 201, 201, 7, 25, 103, 77, 232, 233, 191, 12, 54, 166, 125, 68, 86, 248, 100, 69, 27, 36, 253, 33, 152, 79, 244, 136, 129, 17, 204, 180, 85, 237, 169, 185, 225, 59, 146, 139, 111, 145, 130, 10, 211, 231, 235, 160, 200, 65, 3, 82, 142, 35, 125, 212, 219, 120, 103, 36, 255, 206, 136, 51, 189, 81, 144, 63, 215, 7, 35, 76, 82, 0, 84, 197, 174, 1, 135, 113, 199, 180, 194, 222, 236, 40, 251, 227, 233, 171, 8, 209, 108, 242, 224, 92, 70, 205, 211, 135, 44, 161, 217, 214, 140, 36, 155, 161, 17, 144, 131, 8, 149, 155, 109, 129, 164, 245, 198, 156, 22, 44, 40, 112, 11, 21, 210, 200, 233, 105, 91, 189, 222, 60, 250, 70, 229, 51, 126, 25, 225, 48, 146, 227, 123, 178, 182, 202, 37, 144, 252, 166, 179, 212, 127, 200, 25, 172, 144, 249, 231, 163, 21, 157, 189, 196, 216, 181, 254, 10, 139, 61, 214, 126, 232, 115, 204, 193, 177, 243, 103, 8, 7, 238, 43, 7, 18, 117, 167, 30, 28, 76, 165, 213, 234, 121, 165, 42, 178, 96])},
{encoded: "29YqcvwnXFVjy5M17gxFJfaZ6vPSxa5MipKiKoXgkRDBfYkQx7qbgvKXpqUKY4LPRJBhSoqjuWkvM1tqGnriGUJgPZAkZ4oQjiVF6T7uWpb1FhXAsctQCosg6Zm2ft1iMna3B4zSBh6v51R3euEABFP2kuui6UerqPFFp2m2RUDUDaK4hLCa8UTq4BrDt7oXkyTf2ve8xagVVfHrywigqscZtEPteRg84D2Mw7ZfBybkEyyU2kQLNFDhSGq1ok2L5Z1mQHWJ5iHgNqe9Q4rR5A9j7Uowsdsg7gjeiGrFhhvP5Luy4F9FT52dUzbpPufy3faifsVwC4Ldkfq7kWPBJSHk4R5qbQ3hBhfA6Yy5FcfT9ZUEkJzF3FTJMjE5S1awWBMgKA8p5x4YGUNgAz1BoHZzG2FvUTVrPXrtpAwn5xvspipXDh3K96xJ6tRr3p8bL1da4BmTNR3siwNabELYBjD72SaXLhH6Rs5VcQ2JaaPh8k2sc9dXg9VPdvyadRf2WPpJRwcddM3Y18eCiEmiAvDj1fosfftdsECEQe9UU9dm27RJC2dq4gew7FAvBs2wBfbAk147kg1GPxR3XUnX4aS2PaXPYe5shMJNNuC7KiCoxN7TxLxATFxkwbHUqiRM63DrZ5k3xeQUP2VfRLDYmL46roMg8pqyExt9xc5bAFYeqY52ij67n1ZHGmyMu7Ydv811De8c4ZCu5MNs4cWy1GLyhHCbruyY1tfMQcAyP6p68EHSBWvmg9JGfMZfsqu72edFjUriz3DCHrkeaNJ9zWgDw2WjLubwepnfRvjR5RKV3L4v6oFa6XdLmtFXNWgCk2hqWcchNvWFe2HrzAFxmCXjVfwe89gYgSYQEvKhPq6NUmbtGQMmeggJ9KxVVqaT91jEHf7",
decoded: new Uint8Array([17, 29, 136, 171, 245, 37, 10, 143, 234, 21, 46, 28, 247, 150, 35, 212, 175, 205, 140, 4, 164, 10, 224, 142, 244, 112, 48, 121, 240, 35, 37, 34, 87, 1, 206, 68, 32, 105, 251, 98, 152, 178, 57, 148, 17, 252, 40, 105, 31, 72, 85, 18, 2, 73, 233, 167, 162, 255, 56, 211, 86, 183, 217, 220, 94, 249, 197, 128, 84, 113, 122, 18, 113, 116, 254, 212, 97, 192, 253, 44, 245, 195, 64, 13, 228, 165, 42, 180, 111, 182, 110, 124, 108, 244, 1, 112, 32, 19, 215, 47, 166, 172, 19, 121, 255, 75, 93, 234, 130, 224, 178, 16, 130, 132, 22, 199, 129, 246, 212, 37, 227, 237, 150, 146, 98, 176, 120, 135, 16, 169, 44, 62, 157, 239, 142, 232, 160, 217, 58, 216, 39, 131, 156, 228, 82, 3, 98, 5, 105, 106, 187, 26, 236, 215, 212, 153, 11, 13, 196, 9, 237, 194, 73, 10, 45, 33, 239, 174, 181, 95, 239, 41, 119, 203, 178, 182, 105, 68, 248, 109, 51, 117, 31, 17, 237, 172, 67, 172, 78, 54, 247, 39, 180, 198, 130, 119, 122, 75, 239, 210, 193, 214, 196, 251, 171, 251, 122, 119, 151, 69, 121, 149, 1, 13, 232, 133, 215, 119, 129, 173, 27, 254, 207, 88, 253, 171, 147, 168, 161, 213, 97, 70, 125, 76, 231, 98, 59, 84, 102, 170, 220, 33, 150, 8, 50, 184, 99, 112, 216, 9, 141, 211, 96, 216, 194, 253, 49, 198, 31, 138, 51, 197, 155, 103, 187, 165, 176, 82, 63, 235, 244, 150, 119, 156, 140, 76, 11, 219, 98, 39, 93, 249, 108, 120, 210, 110, 221, 188, 179, 175, 59, 144, 117, 31, 93, 233, 21, 53, 113, 224, 168, 184, 247, 195, 141, 27, 202, 109, 152, 241, 0, 190, 83, 225, 115, 97, 206, 137, 187, 222, 245, 197, 57, 9, 213, 181, 78, 90, 66, 245, 141, 8, 102, 128, 68, 110, 64, 255, 232, 154, 203, 71, 226, 35, 237, 70, 230, 85, 241, 95, 230, 37, 38, 80, 81, 72, 68, 192, 91, 208, 215, 24, 146, 237, 105, 10, 245, 127, 20, 140, 217, 230, 129, 150, 112, 201, 103, 173, 152, 106, 118, 25, 162, 61, 101, 19, 133, 155, 250, 76, 115, 227, 124, 96, 35, 107, 192, 129, 226, 169, 152, 44, 204, 192, 85, 239, 77, 141, 211, 95, 114, 186, 160, 117, 184, 253, 245, 101, 225, 100, 218, 159, 113, 8, 243, 249, 218, 249, 20, 157, 255, 197, 39, 209, 60, 93, 39, 197, 69, 65, 105, 215, 46, 222, 120, 138, 2, 28, 38, 255, 48, 158, 151, 42, 21, 7, 119, 41, 182, 36, 1, 209, 59, 170, 204, 177, 14, 1, 190, 141, 215, 65, 240, 121, 90, 11, 26, 167, 49, 147, 86, 130, 60, 160, 7, 36, 165, 115, 213, 17, 52, 174, 199, 178, 31, 68, 158, 106, 121, 200, 238, 8, 153, 192, 121, 111, 141, 3, 250, 212, 10, 161, 105, 2, 219, 234, 145, 206, 199, 130, 136, 107, 26, 255, 96, 186, 218, 84, 10, 111, 137, 38, 96, 99, 105, 132, 166, 162, 105, 154, 223, 238, 97, 70, 153, 167, 59, 162, 147, 27, 88, 92, 221, 117, 180, 167, 113, 149, 113, 247, 239, 237, 168, 42, 103, 124, 232, 128, 215, 56, 6, 185, 128, 18, 115, 14, 138, 182, 253, 5, 34, 117, 18, 111, 84, 187, 22, 125, 101, 235, 81, 73, 124, 96, 37, 184, 226, 32, 21, 7, 20, 164, 255, 76, 88, 135, 122, 38, 226, 170, 102, 188, 220, 89, 228, 215, 114, 250, 244, 106, 113, 95, 244, 115, 216, 167, 49, 232, 232, 91, 100, 156, 68, 68, 24, 88, 141, 162, 124, 181, 238, 80, 157, 56, 136, 97, 125, 136, 176, 184, 102, 198, 99, 144, 100, 183, 184, 182, 165, 151, 138])},
{encoded: "DMmK5aWpmtqDUjnmUhGi9oA5PNoGNayrt3B2LyVKA5FRy58ToTQiUpbcFR4cVrSG3pBXUdt8crJkXAiGmW83hyc9YYedpXYFzkXhdfJcmKsfaEN6Q4VRVESQ5BUfZLeaPKr2c8oUYAXKHfh6HwuE4jtRBE46XRCgLk1cEdwq24xZHeY8JjwEXxj1qgdsRSUsheSqUoc3yrs44XPqCotzo2wjNkWBTGJcXruhF5J3vSpjQp3zvVi2EQ4DwfmkvebQpD88wXzCMAf9JRECvNFAXhKG8t1fJ1ZDkD28mqsdoE1wto17x3cfFYQtHvPayHFCQKWh8vkLBgcmZ83iybQu4bL4LJNXnrNdY4CDgX3W35hKBZWiP6ELDozdBYhsQVk6v1DEBqYvu1MSgfxkumdjUmivSxZnJpmzLqzNfm5XACJx7oHRJCX5UEKBCEwPdaWVMtRhzi3sRyAz9yVXSn8sEfUiG4VyxRGkt39FAi1XevXFCWnwrxNgvX5pBJSbdRFtFC6c84zcuAwZRc8sWVVkq3jiR2d9dPkdTT9LBG8zT6rhpFGFHnAifxTHvAEKCrNf5gTGyQW9hyQ2JHo6eTs2VGmKgUTSxGDDf9scZCX4xNPyP2kUBWLGfhs2YeZGnbPudvhp6Nq3oaHXDndaJjdTDwvbdjVDZ21xKhBet1pyBbkXfTcuScVuzxUxAmWZBm9skd87dXvEkQeFCHeAN8sCksRjPAxHSZt9FnHhXwP",
decoded: new Uint8Array([76, 18, 34, 249, 153, 212, 65, 24, 167, 59, 70, 108, 93, 218, 123, 61, 130, 10, 63, 47, 216, 20, 129, 30, 192, 84, 202, 214, 76, 79, 240, 4, 178, 243, 71, 186, 37, 29, 222, 195, 204, 250, 120, 228, 11, 63, 80, 83, 136, 128, 100, 79, 162, 158, 29, 7, 92, 255, 99, 238, 49, 3, 95, 54, 137, 170, 117, 213, 169, 112, 122, 243, 30, 171, 224, 238, 70, 142, 65, 167, 248, 121, 249, 220, 239, 138, 169, 248, 167, 67, 94, 20, 64, 10, 161, 210, 4, 130, 248, 52, 87, 31, 0, 119, 146, 95, 32, 196, 65, 151, 196, 184, 177, 54, 88, 213, 211, 206, 216, 21, 203, 136, 99, 95, 64, 231, 27, 167, 162, 254, 91, 108, 191, 159, 114, 42, 216, 254, 254, 72, 163, 96, 212, 123, 96, 135, 128, 171, 221, 129, 179, 73, 112, 104, 30, 16, 152, 104, 163, 154, 246, 94, 150, 239, 230, 3, 52, 66, 241, 207, 39, 199, 63, 101, 87, 217, 158, 113, 233, 3, 29, 236, 8, 119, 228, 41, 88, 49, 86, 38, 214, 116, 152, 178, 201, 72, 128, 42, 255, 118, 123, 158, 200, 15, 198, 202, 33, 191, 11, 104, 206, 182, 184, 163, 44, 195, 75, 77, 153, 10, 69, 142, 146, 254, 40, 107, 80, 86, 217, 115, 40, 41, 139, 7, 14, 217, 244, 126, 97, 195, 103, 194, 129, 16, 78, 48, 209, 151, 63, 251, 171, 107, 230, 122, 129, 74, 146, 192, 242, 95, 145, 111, 63, 254, 182, 133, 87, 216, 37, 170, 100, 125, 141, 211, 119, 182, 195, 33, 51, 90, 76, 30, 100, 101, 144, 165, 156, 53, 237, 144, 207, 30, 86, 158, 123, 81, 189, 184, 246, 20, 154, 56, 67, 49, 148, 100, 34, 194, 118, 220, 77, 81, 196, 218, 15, 182, 48, 134, 39, 134, 145, 68, 83, 89, 115, 118, 149, 164, 147, 253, 213, 127, 188, 23, 132, 239, 182, 85, 115, 223, 186, 30, 57, 49, 67, 69, 220, 194, 215, 57, 82, 21, 44, 50, 181, 223, 71, 195, 186, 113, 127, 31, 157, 169, 226, 199, 48, 61, 145, 236, 15, 162, 156, 237, 174, 16, 133, 7, 12, 197, 135, 95, 151, 249, 238, 188, 202, 115, 248, 241, 229, 202, 246, 128, 152, 29, 39, 55, 239, 78, 180, 4, 37, 52, 126, 93, 89, 165, 241, 61, 240, 174, 136, 121, 10, 55, 1, 146, 196, 101, 202, 125, 74, 253, 136, 185, 123, 1, 182, 159, 34, 18, 42, 51, 121, 236, 162, 112, 240, 107, 25, 71, 170, 189, 109, 207, 123, 165, 201, 169, 189, 153, 255, 49, 190, 36, 131, 223, 42, 200, 28, 148, 94, 237, 221, 65, 65, 39, 249, 132, 138, 117, 217, 38, 168, 75, 12, 176, 90, 134, 12, 102, 244, 36, 31, 234, 117, 239, 120, 182, 189, 104, 141, 48, 61, 60, 176, 139, 186, 116, 165, 86, 239, 236, 40, 17, 22, 204, 236, 60, 2, 240, 195, 60, 159, 123, 87, 35, 136, 208, 233, 54, 159, 246, 240, 153, 74, 165, 167, 176, 95, 148, 109, 12, 122, 220, 233, 99, 82, 98, 142, 143, 189, 106])},
{encoded: "5JK6Cug6X7aAubKtc14iszWwZqEzdqYeugxaah87VHBgxtgAWDCrBuKCTLTPYY62Bmh4ta9x7DS4NC6JaQGfrEbf6NVzP75Y2HWhmULR8LuJgQATq47HZZPizLKfAn6P1",
decoded: new Uint8Array([243, 25, 23, 43, 111, 180, 176, 70, 216, 176, 34, 247, 122, 70, 95, 93, 124, 238, 32, 216, 41, 144, 243, 180, 88, 219, 122, 238, 173, 59, 48, 4, 219, 67, 1, 220, 104, 191, 196, 165, 188, 202, 124, 211, 220, 76, 191, 73, 70, 6, 238, 37, 32, 27, 203, 181, 46, 54, 8, 181, 104, 88, 105, 141, 250, 46, 229, 41, 83, 189, 203, 163, 75, 218, 176, 47, 152, 146, 253, 238, 208, 218, 187, 203, 228, 191, 202, 59, 36, 192, 240, 29, 30, 8])},
{encoded: "5r7C7eSy28DKKxvDUzZe3BLW9a61n5BgWQFCnEGQy3zRvsmQw2PW9unodPrwNFhC52jSxth8Vs4DuR6Lahpsinuk1KGshxUvysiT6514tdh8VsGgc7NrKuYs8sPtLGXXj2YPKcP4zPJgHHe5rRDGpKRrtqYy1rGpx97DiZRsXs7DNBbi4UYSsd9HAPJps4vyR4UV4Yx2L5GPCTD4aXKVAUow9JAdw7kpGemvfvCy2Yc2Qeip3TpUrqVSit59TjRj39u6MkeGCA32Wy51p7H4JfahN4oGyjdkbMvQuD3PmqLBVpiwJkwXYSfj2hqzBceyqi8oV1dLShTfYbzpC2DSDT5xot3FPF8MYbUY8LESi8J38KRh1cDkMV7EdRXMD4jEhCyKukK9A93YMKGW9P9YvmyBmsMgod8TsRVafqoF7gdDp4eVcJMnCBrWuMkKg7M8cKcvLAGXz8VxPYn1wztUcQKoH17PiWPBPQUHy3mAc85fiD9RB8ygzjKd1GpfLccsY15ozMjQvMtR7AjnkwNypCxytmqiusRZZwAzmcSM19addf9DppvfqkMtUdZn2CdZDy6PgtfNkDo24535Bm7MekBjeY5ViSkiyrcLjSuMAjmwNknbddaemB7c6fsJLHt77Vgti8w3vqryyPqWvi8L9m4HqfKUePYU4g9wqvxUPH",
decoded: new Uint8Array([188, 249, 148, 127, 102, 227, 30, 56, 213, 89, 239, 7, 137, 151, 69, 57, 104, 47, 114, 84, 1, 38, 185, 182, 225, 155, 147, 130, 78, 65, 3, 32, 207, 136, 79, 128, 206, 224, 170, 117, 154, 216, 93, 135, 13, 39, 184, 14, 224, 109, 14, 175, 53, 246, 154, 61, 79, 50, 193, 206, 119, 2, 173, 55, 137, 93, 208, 213, 206, 10, 235, 77, 24, 170, 208, 223, 63, 39, 181, 138, 118, 12, 156, 147, 197, 172, 32, 151, 160, 72, 62, 9, 79, 186, 102, 120, 215, 49, 189, 27, 122, 110, 68, 45, 49, 51, 162, 118, 115, 159, 72, 232, 81, 206, 120, 181, 197, 92, 93, 216, 120, 245, 75, 18, 60, 201, 189, 14, 165, 69, 52, 82, 68, 67, 233, 208, 25, 152, 140, 91, 111, 93, 71, 102, 16, 139, 142, 186, 232, 88, 183, 217, 219, 37, 58, 162, 142, 119, 33, 60, 182, 138, 196, 54, 174, 219, 150, 223, 229, 37, 243, 188, 83, 91, 52, 71, 219, 23, 87, 101, 85, 135, 110, 168, 68, 195, 31, 59, 224, 25, 43, 18, 3, 249, 101, 120, 240, 63, 137, 218, 29, 40, 232, 89, 107, 231, 161, 148, 213, 215, 41, 129, 26, 214, 56, 47, 69, 41, 27, 64, 195, 37, 237, 243, 176, 203, 21, 199, 150, 251, 248, 239, 125, 16, 255, 1, 5, 161, 16, 117, 32, 133, 199, 86, 213, 210, 53, 139, 250, 51, 26, 161, 38, 128, 156, 39, 140, 143, 156, 196, 215, 201, 106, 180, 149, 233, 198, 217, 76, 98, 162, 113, 123, 88, 124, 193, 169, 236, 190, 133, 122, 244, 110, 144, 227, 176, 32, 237, 37, 110, 152, 118, 120, 149, 244, 46, 18, 112, 109, 67, 111, 124, 230, 165, 7, 133, 225, 234, 221, 0, 143, 231, 32, 41, 163, 116, 75, 148, 170, 115, 208, 109, 107, 142, 101, 226, 128, 193, 210, 192, 252, 10, 193, 93, 80, 230, 34, 199, 49, 209, 213, 138, 36, 107, 109, 94, 75, 51, 86, 41, 212, 141, 205, 92, 46, 110, 111, 91, 76, 184, 225, 251, 94, 251, 206, 198, 61, 181, 255, 11, 134, 174, 224, 93, 169, 254, 239, 125, 102, 5, 82, 48, 5, 52, 196, 64, 80, 131, 62, 96, 175, 136, 251, 149, 105, 149, 85, 211, 164, 136, 157, 185, 168, 18, 221, 61, 193, 13, 179, 160, 181, 155, 239, 199, 177, 46, 29, 36, 13, 131, 136, 225, 204, 128, 182, 144, 191, 241, 12, 220, 43, 234, 169, 225, 41, 167, 12, 207, 158, 208, 48, 251, 178, 117, 40, 19, 136, 195, 81, 69, 165, 142, 151, 149, 87, 190, 229, 80, 101, 40, 82, 149, 64, 209, 251, 198, 221, 188, 151, 102, 164, 71, 48, 34, 131, 214, 70, 11, 247, 167, 252, 244, 12, 192, 247, 132, 241, 118, 186, 9, 66, 133, 42, 158, 231, 209, 235, 199, 64])},
{encoded: "DVSztL8UP8ykPeyjypaxZwR3Us953Kp6jAi8BQTkhz9uqzQsYW6r6hnXR57qg28bG2xfqY4bfjNj4RR7HErwgf6E2FHYvdvejwHG1MXWyNC4CrrGD18KWb7mDE2jZ9MCmf24fUze4Hb8wn1hsdZVheX9wGweD8KMQs7XcB6T1Q9sFWkqKm8RtZEPyqyUGSmCsxegSArYgbfesAvvTMzMD8kjVkKXM8tFnPibyxdtB1XtXtxURbXwCanDT6sjidjywWbx8ZSfzPLJUsX4hdt8DWX2DLV6S8e3iXj1tB7pKHSMeb247LBiZMdJ1ra7YyvKwnwhbJtFXbeDVkpdt98cuRSKpnWM8YgQhRsdbEmYmA7PdS7BKsXPy8BKGvkhCo1WTATeM3ussCnsjrgLwSPHG1gQkkmUnwj5gVcEBgLpVRxsAVdcAdnvfyVTf5LPxRTrqSnTRxej6j6EAvs9sk48uRodBz1e6bCQiGvRQcf6WisujuavteScj3BEVH4xsMgyPC4hrerspgktmFMiDPS1JvP6d7qLfe98MQVkogtqXKxYUBytMm2uVjKPYM57LPhAWAfNj8mNVtSiWgK7SfDaVGm8AbfoEnzpbVEYuGVutNx151ps5nzZ5NGWje3oS69vJQmobNMkyBShg9UNQh8oGE4ePDN5Gq6pnv35NrYuMpBJiDBhcpm3tBjqaYSpK4cebRTjY8PhrAn5bEDKm7hqKpjT6G9eDFYbPDP2kiKaVLYWUzJeDHhPs4uTnBektus4ZMTJad9zSCK9KhvRwUpPUAxVTs6ae2zGpGKpoHGAE7b3kbFrL9Bqqh7eXcqNzrXpgdno5F3eNsQedNFyWUacFqcLgA9apYv4w5SVjxRBJn42b5HsUfeuU936AC6LSPrNgYKKgRnnwidwe5Z5e34mVnJGGVaC7zvGQPcKkmxw4RHdtusevZjPmbHMwcuXnvEdJP5wiQ6gA2zkqLqUeBrvoguQzJ6iELrZHP3qZDi7z4RQKWqTn4kFmTff6KvEkQaj3zCtCZPrigbkAP8k2joZLxLi2dSBaKD6VcKCE4wKP2ySucSZMdYRpHtu5FWTXe5JBGCzZc1RfWUjYbApyy16sKWYY2vUbkZ8JJiRZczvWRPgNqnUZr5A3SQMhjRaiQCHbQ7uMnEAqnHYfi51zCw6aESWmbfqz5EbbM9WEpgAFzK4JGaDoE8cdNKiah1LxiZra2ut9EUy4BXiHsG9vW26qFy1q2jMipDZukUpRSfmY4uGykzGGf2ciDSMUvfL27jHMPMDKx5T",
decoded: new Uint8Array([116, 130, 82, 218, 205, 236, 33, 146, 168, 241, 198, 51, 42, 229, 213, 1, 150, 118, 57, 132, 145, 236, 16, 92, 51, 189, 190, 164, 57, 201, 136, 76, 139, 169, 0, 254, 108, 230, 143, 254, 228, 178, 123, 189, 210, 215, 157, 215, 220, 230, 96, 252, 29, 4, 37, 50, 208, 248, 86, 127, 103, 153, 16, 165, 157, 222, 241, 128, 38, 249, 252, 85, 226, 218, 205, 211, 229, 196, 144, 88, 189, 120, 161, 18, 32, 188, 19, 212, 45, 196, 9, 219, 169, 230, 132, 207, 126, 205, 191, 103, 239, 108, 76, 21, 39, 212, 31, 125, 131, 217, 55, 43, 111, 213, 24, 173, 249, 24, 45, 70, 79, 0, 46, 67, 33, 244, 118, 208, 54, 118, 152, 137, 253, 121, 98, 218, 208, 12, 72, 45, 252, 42, 42, 230, 78, 99, 81, 192, 180, 126, 84, 104, 118, 19, 189, 126, 244, 176, 108, 85, 155, 199, 193, 162, 4, 61, 231, 106, 232, 175, 147, 201, 217, 0, 135, 139, 254, 164, 239, 84, 50, 50, 127, 187, 235, 71, 44, 53, 11, 100, 235, 26, 69, 4, 173, 156, 25, 212, 128, 33, 34, 18, 81, 174, 173, 145, 119, 38, 145, 8, 15, 230, 126, 215, 79, 190, 22, 108, 45, 240, 225, 80, 147, 123, 42, 101, 62, 15, 55, 90, 47, 110, 155, 97, 251, 2, 64, 204, 243, 172, 227, 198, 161, 95, 33, 195, 144, 69, 89, 99, 242, 56, 69, 131, 137, 201, 138, 74, 189, 165, 133, 114, 151, 222, 55, 195, 193, 23, 10, 209, 178, 121, 36, 226, 11, 220, 83, 221, 8, 11, 195, 181, 209, 7, 106, 16, 156, 131, 38, 154, 97, 119, 148, 113, 94, 115, 119, 83, 170, 87, 31, 65, 62, 160, 169, 134, 138, 250, 129, 187, 179, 41, 177, 26, 54, 252, 78, 184, 136, 44, 221, 12, 200, 222, 244, 26, 244, 155, 231, 96, 70, 107, 236, 155, 222, 155, 107, 10, 82, 103, 125, 1, 4, 69, 227, 34, 182, 240, 243, 175, 208, 167, 234, 21, 238, 126, 67, 236, 143, 200, 84, 184, 76, 40, 253, 178, 63, 236, 231, 37, 239, 155, 191, 22, 220, 244, 218, 159, 157, 108, 175, 41, 216, 94, 144, 178, 204, 227, 250, 87, 135, 116, 210, 60, 71, 91, 1, 13, 104, 135, 95, 53, 39, 242, 128, 29, 95, 108, 253, 78, 88, 12, 16, 91, 110, 216, 119, 87, 136, 101, 136, 161, 112, 183, 114, 115, 75, 87, 209, 53, 210, 83, 169, 140, 226, 251, 230, 2, 111, 103, 42, 236, 98, 175, 12, 173, 11, 9, 148, 15, 10, 186, 88, 14, 172, 70, 3, 168, 128, 145, 80, 220, 153, 233, 167, 103, 120, 148, 219, 165, 42, 7, 196, 197, 199, 237, 70, 104, 16, 173, 60, 43, 84, 15, 37, 237, 146, 110, 55, 28, 250, 149, 60, 42, 105, 50, 143, 237, 134, 220, 229, 250, 93, 126, 54, 105, 29, 202, 28, 253, 66, 101, 113, 117, 230, 181, 119, 236, 165, 136, 191, 233, 184, 71, 232, 244, 38, 89, 160, 165, 96, 145, 254, 233, 62, 134, 38, 45, 167, 159, 237, 197, 14, 57, 255, 46, 48, 148, 212, 241, 159, 53, 147, 6, 96, 83, 81, 171, 131, 65, 239, 243, 91, 152, 31, 187, 8, 206, 121, 251, 194, 201, 4, 231, 45, 116, 123, 253, 133, 18, 5, 233, 148, 38, 31, 129, 216, 163, 86, 251, 189, 129, 227, 233, 109, 121, 44, 142, 248, 133, 18, 130, 196, 199, 195, 57, 32, 164, 112, 62, 159, 119, 7, 111, 138, 164, 132, 233, 189, 26, 108, 194, 237, 136, 55, 179, 101, 145, 130, 47, 236, 190, 14, 249, 241, 98, 170, 193, 112, 244, 128, 110, 95, 6, 23, 189, 237, 80, 109, 77, 9, 76, 133, 23, 48, 164, 165, 80, 171, 237, 187, 27, 119, 23, 128, 213, 136, 24, 170, 145, 185, 88, 240, 194, 32, 154, 56, 246, 44, 1, 0, 103, 123, 249, 113, 35, 88, 179, 50, 130, 152, 61, 135, 58, 84, 26, 204, 105, 66, 134, 131, 250, 201, 97, 65, 28, 63, 0, 127, 83, 98, 238, 129, 117, 81, 30, 80, 136, 85, 2, 161, 252, 19, 12, 205, 175, 67, 164, 73, 100, 121, 203, 116, 21, 217, 87, 250, 211, 98, 168, 128, 182, 85, 4, 36, 68, 23, 97, 1, 41, 173, 231, 234, 127, 25, 28, 122, 189, 81, 136, 164, 241, 233, 94, 41, 218, 53, 107, 70, 84, 22, 182, 92, 6, 255, 212, 20, 182, 214, 121, 19, 201, 220, 191, 19, 239, 110, 8, 55, 195, 163, 198, 56, 101, 213, 210, 59, 0, 36, 200, 52, 97, 27, 142, 129, 124, 2, 193, 184, 201, 92, 155, 34, 203, 17, 41, 26, 113, 102, 116, 249, 223, 203, 103, 119, 122, 53, 87, 161, 253, 109, 185, 170, 74, 230, 1, 209, 119, 129, 229, 20, 148, 223, 102, 126, 78, 168, 218, 34, 91, 13, 171, 91, 184, 130, 222, 252, 139, 110, 35, 116, 175, 93, 241, 172, 250, 169, 78, 84, 129, 1, 176, 163, 112, 125, 106, 153, 38, 252, 121, 228, 3, 207, 242, 37, 98, 117, 59, 107, 207, 181, 207, 49, 228, 202, 227, 7, 7, 161, 201, 111, 36, 220, 32, 73, 183, 46, 133, 214, 80, 25, 19, 211, 134, 157, 228, 200, 28, 8, 230, 169, 130, 55, 174, 253, 41, 91, 126, 253, 126, 140, 213, 40, 40, 73, 40, 118, 219, 174, 80, 189, 23, 78])},
{encoded: "49Y7gcgckzrKL3SJVnDgKpcMEQnhALf4P3riBYH6EMcP6qjHuVe4PswpKEc6vddDFQ51Se5ms1sNcm1NyXuznJ2uVfmk5G8Szt4Ze5iyJLHuYNKS1uTeP2LMbZME4ruWAWFcZBCjqyX48NN8pYj4PGbZeCiG1Ka4pS59L6riYL9xr5YA9bZtH7qQGo5tHXQCzStZec4VVm3fDdhbSQYZDMXtExtuucLiMxhdwy7D1jMNUckV7W9JmseXp3Ah8GPX181kyAuqLiUnWcP7BvzWecfbNi1x92aJKN2uwzPPpLKbf8FYfgHXaJFD5DXJN1iubXjbQFvJ5XBEzKr7MWzqyKFkzqxjAN51pvHrYg62aqTNSm2Axqn2BdPcGqvLAzqxwjaFuLKCxUYY8gVLbLdJGAdpfQ8VQVTs3bobdgs8VkgJU2y2MmGp4YJ1pP2EVtmLcxRMUzaCxBoNn3bxVY3vreGwvoJ7yeZfXtFZxHK9XrVuQyDAe4zi1J9JxtGbx8PqyEf6ZhAQxQHco67kTbgy3MBnUt8xsXorhFM3bDKmXwFxDfBZ2sptx2Sqz6ze5fRq8G84wz47FEZ2wwdUze7PraFzYXghcqCqTXmH1vy63PebQNSapRQe2cZpchtBwnse4UBMmnzxdE3kpxKBkPzUuza8UoejHLYDjx7RBvpJnAjCEmqie8c8KyfPiW13haR8TxFbxtFYSTJWKrD8Ys1kJSi3NMbSkQETEP2Q9p1Rw8txsbm3FoBhJNeHbtryWX8Jt7FhBNaUjyt3s5a3GcgAcEu3vz2KujnJhnwPn2sGaHhBAxArtsoRzqUqgNRkQCyEcZPe6r4TV5z1vqMpv7SrZUfgEYxbe9MmdURsybrTMVjLjFBdjrs9McKxUT446fhW85bEpiwJv72uDdYFgy5vbVcrVZ998wa23Y7DZQRVT5fm4eiYpab9m9y8vMYfkS8LWrd91kqjEh2rBKSHjDvBtBcDKqb4kbCk8GgZqpDCKnLxbUxXsvFgMe6636aZVpEMK5EFWmbPBJU5fKWKg7VU9ps6HZ6fTm66GYQ2mz6bKT2q1dQYAwHZYzA1i3XENrVvt1vZVBV9DpGXEKJWDVjRZiy7oQwciGjwzQquBabw5g",
decoded: new Uint8Array([159, 48, 145, 240, 137, 128, 207, 32, 154, 205, 59, 160, 156, 251, 130, 173, 37, 104, 3, 85, 161, 86, 90, 77, 139, 55, 242, 96, 100, 88, 177, 211, 123, 158, 109, 58, 189, 112, 32, 106, 64, 176, 37, 93, 123, 110, 181, 212, 15, 137, 19, 75, 121, 123, 253, 137, 58, 82, 129, 106, 169, 190, 94, 195, 247, 140, 26, 236, 133, 56, 63, 73, 253, 100, 183, 17, 227, 130, 30, 142, 23, 43, 48, 153, 30, 185, 167, 153, 28, 216, 18, 5, 217, 247, 29, 84, 94, 57, 241, 208, 184, 6, 65, 104, 118, 95, 246, 194, 16, 142, 33, 93, 115, 196, 76, 138, 63, 187, 24, 138, 133, 175, 91, 181, 91, 133, 240, 201, 167, 181, 129, 106, 207, 50, 27, 98, 32, 229, 84, 59, 111, 118, 107, 6, 12, 191, 120, 108, 79, 177, 139, 151, 1, 65, 90, 10, 21, 63, 23, 86, 101, 129, 237, 150, 255, 172, 200, 166, 255, 38, 192, 229, 120, 111, 131, 61, 40, 245, 89, 180, 229, 160, 207, 30, 22, 242, 46, 41, 202, 183, 165, 84, 87, 120, 253, 142, 20, 135, 54, 59, 160, 102, 253, 114, 207, 90, 139, 2, 222, 42, 93, 189, 46, 239, 9, 202, 28, 14, 153, 228, 55, 244, 68, 87, 143, 10, 126, 106, 103, 235, 107, 116, 141, 198, 70, 108, 204, 160, 239, 111, 54, 103, 151, 222, 95, 246, 92, 121, 207, 193, 29, 180, 75, 216, 211, 180, 122, 250, 47, 201, 220, 244, 98, 108, 165, 212, 219, 6, 128, 184, 44, 169, 154, 195, 133, 45, 165, 118, 124, 184, 40, 252, 142, 2, 207, 227, 245, 113, 153, 129, 215, 130, 61, 190, 191, 80, 249, 248, 162, 208, 178, 54, 155, 183, 77, 107, 101, 186, 131, 242, 170, 89, 159, 85, 196, 239, 5, 162, 145, 130, 200, 189, 6, 204, 154, 143, 17, 101, 83, 228, 76, 26, 62, 73, 248, 55, 86, 133, 159, 102, 43, 169, 129, 88, 38, 56, 13, 114, 46, 133, 111, 242, 11, 216, 221, 161, 6, 114, 255, 160, 74, 199, 148, 37, 84, 138, 77, 158, 128, 4, 36, 196, 162, 75, 190, 24, 21, 181, 174, 159, 28, 147, 69, 235, 212, 100, 23, 207, 162, 56, 44, 135, 184, 236, 225, 31, 76, 185, 22, 203, 57, 81, 41, 183, 100, 157, 251, 113, 43, 18, 16, 33, 197, 135, 239, 170, 255, 116, 171, 85, 150, 66, 92, 24, 236, 26, 176, 11, 234, 9, 144, 134, 184, 111, 201, 132, 6, 90, 78, 62, 252, 134, 83, 193, 110, 118, 111, 84, 55, 139, 144, 89, 119, 76, 11, 154, 31, 203, 207, 150, 104, 183, 98, 92, 27, 210, 29, 75, 22, 90, 119, 159, 228, 67, 170, 130, 38, 209, 51, 102, 48, 45, 30, 68, 112, 10, 165, 143, 233, 245, 214, 7, 59, 229, 226, 3, 228, 114, 143, 93, 229, 248, 69, 230, 166, 27, 4, 27, 40, 254, 52, 126, 23, 247, 38, 26, 165, 59, 9, 151, 144, 105, 138, 212, 114, 22, 242, 14, 163, 146, 123, 139, 16, 199, 115, 194, 75, 23, 139, 189, 213, 193, 92, 53, 102, 96, 99, 85, 173, 100, 45, 74, 238, 224, 53, 116, 18, 17, 249, 203, 212, 87, 71, 158, 22, 191, 176, 103, 161, 146, 150, 144, 56, 172, 136, 250, 34, 250, 11, 53, 222, 169, 11, 75, 101, 132, 148, 191, 61, 166, 193, 110, 139, 94, 218, 46, 199, 99, 208, 40, 66, 15, 184, 175, 53, 46, 41, 30, 232, 143, 180, 246, 70, 120, 123, 33, 37, 179, 168, 22, 187, 156, 38, 77, 129, 239, 210, 122, 147, 215, 224, 43, 52, 185, 117, 147, 155, 143, 39, 193, 213, 106, 173, 219, 86, 146, 216, 63, 6, 27, 81, 4, 199, 248, 9, 185, 193, 53, 23, 177, 4, 106, 9, 183, 43, 54, 199, 43, 117, 49, 236, 240, 111, 101, 147, 2, 174, 190, 133, 240, 18, 128, 93, 140, 231, 214, 107, 98, 48, 21, 17, 195, 55, 38, 14, 138, 97, 5, 73, 191, 235, 201, 137, 45, 145, 184, 17, 238, 11, 151, 195, 244, 167, 212, 213, 194, 88, 38, 50, 218, 93, 208, 174, 174, 169, 144, 99, 124, 186, 227, 82, 117, 132, 198, 9, 172, 116, 50, 160, 148, 238, 50, 186, 112, 190, 48, 173, 57, 128, 248, 227, 77, 168, 127, 211, 79, 17, 113, 48, 220, 18, 142, 94, 154, 248, 232, 95, 4, 194, 153, 68, 227, 43, 98, 212, 228, 220, 55, 12, 136, 33, 83, 66, 94, 151, 196, 151, 154, 255, 1, 95, 132, 219, 32, 31, 174, 226, 202, 158, 96, 49, 246, 135, 93, 22, 117, 90, 36, 103, 146, 48, 0, 254, 0, 218, 251, 8, 200, 82, 37, 107, 151, 70, 59, 160, 61, 71])},
{encoded: "23bVp8R5KMMwFaZc9PTP17RDSXqGQwrLsvqa67C28LT1iGvoD5E717zbGdcjLro9h5dHNVXt2oTaHDXsvXbGe6vM6uYGoVUP25rgraBkgncj1kRoS9aw7D2Emp7st2MXzNxj8X7WArTK8PnxAuGtXQ7s6kpKFSaEhUmLPrPPPwPcxSZDe8iNY7ReFAp9EJTfr51wpfZP5XAMnwnXLGxmEtNBXq1SgvXE1vsntQ2i5QZQoks5qEsxdYHX6HC9kWgiXeiGEmEMXQE1ByFmwHp4GaxVHBZT8D91m5e8uC45ayYe",
decoded: new Uint8Array([193, 240, 87, 245, 180, 95, 223, 195, 134, 163, 169, 151, 123, 185, 83, 121, 118, 118, 42, 122, 131, 103, 113, 150, 39, 200, 58, 124, 15, 254, 24, 91, 198, 179, 249, 176, 254, 114, 204, 224, 98, 207, 140, 112, 222, 214, 169, 124, 171, 178, 123, 215, 238, 134, 37, 39, 220, 232, 128, 14, 121, 60, 101, 203, 213, 219, 30, 3, 49, 179, 205, 233, 169, 60, 242, 213, 242, 194, 124, 246, 83, 48, 99, 19, 165, 131, 220, 203, 185, 114, 89, 13, 4, 158, 185, 115, 194, 48, 141, 191, 234, 47, 25, 252, 204, 32, 236, 30, 250, 108, 42, 249, 94, 232, 112, 173, 214, 110, 157, 32, 190, 123, 75, 127, 56, 43, 65, 108, 195, 255, 31, 138, 170, 93, 89, 250, 1, 182, 179, 235, 76, 94, 162, 111, 203, 216, 67, 3, 252, 89, 9, 29, 191, 19, 138, 47, 224, 87, 224, 72, 125, 87, 175, 45, 55, 127, 170, 179, 74, 198, 214, 125, 118, 74, 122, 218, 156, 31, 34, 136, 186, 169, 26, 193, 252, 137, 49, 125, 37, 249, 56, 43, 167, 140, 164, 99, 161, 88, 109, 92, 37, 55, 108, 240, 206, 117, 72, 114, 239, 149, 190, 153, 5, 201, 213, 3, 52, 187, 19])},
{encoded: "48r4AaUNSuKDtDsqFW64UYNLi4ytsiQcGfHuKB4m8mrKfJPQmmiVLuvk8Tsex7YwABsc7BvGQJ84tJyBKKemGeasbWHpAwQsB5Z87mCC8zPJUM6apJSyMGUyJm59Fy7SMxbszvz4HPgvtCACeKkkvsWrhtZ9K41Ng4M9p6pH8q75AhNz1r1k9JPypcqiQZFNFTbSEFbz6rJnnMKpcEqV3Uzqtoqoj16TCmJ4xubHRAGqNzGo1HRCNiZePL1DEs6gWZcBSYmnFiX5BorxcRkZ5eKW5p4z5eT5JfEqdpkWXnAd2RPB3Xs7Sq9X52mAbY2NcZtBKvmN6zccfA3jyDTvt1C6AfZvtEco31nyTSvmBAnV557bUMxopZ4c1WH1",
decoded: new Uint8Array([56, 160, 52, 162, 193, 172, 184, 146, 87, 223, 181, 236, 229, 150, 14, 99, 59, 7, 70, 102, 186, 106, 239, 208, 192, 30, 73, 57, 213, 153, 206, 234, 108, 31, 144, 69, 48, 7, 251, 4, 117, 177, 59, 144, 203, 182, 149, 85, 122, 59, 102, 138, 89, 74, 209, 38, 79, 137, 18, 203, 212, 220, 24, 71, 145, 252, 50, 190, 61, 113, 76, 125, 159, 16, 80, 65, 78, 129, 100, 65, 148, 15, 58, 162, 145, 10, 106, 120, 109, 49, 104, 166, 37, 173, 176, 205, 40, 69, 188, 101, 204, 157, 71, 122, 170, 168, 223, 87, 26, 59, 89, 201, 231, 7, 227, 242, 157, 180, 194, 65, 52, 145, 99, 75, 93, 45, 226, 223, 150, 58, 165, 61, 81, 165, 199, 162, 230, 219, 209, 235, 230, 222, 194, 77, 34, 10, 230, 53, 163, 89, 168, 17, 187, 66, 29, 124, 41, 21, 144, 187, 208, 104, 253, 70, 117, 171, 164, 246, 100, 134, 206, 48, 82, 213, 158, 86, 149, 185, 182, 34, 71, 201, 218, 123, 155, 246, 181, 59, 142, 234, 114, 224, 70, 103, 177, 147, 190, 17, 130, 116, 131, 199, 225, 205, 199, 131, 16, 163, 82, 165, 136, 44, 156, 247, 135, 165, 94, 47, 91, 37, 204, 240, 70, 251, 53, 206, 129, 54, 2, 219, 160, 206, 164, 248, 252, 174, 120, 52, 89, 135, 186, 129, 164, 22, 117, 55, 177, 121, 152, 223, 111, 223, 64, 105, 184, 134, 236, 167, 187, 194, 109, 173, 58, 123, 136, 222, 242, 65, 162, 193, 156, 80, 97, 182, 249, 58, 236, 68])},
{encoded: "9teRixf8iKudu8A11pX964w5HXWacNvZP57g1jtV96Z8BtU4cGXmSKgCnjYpW4GF2UtdTg49crn6U4vBroKZJ5HddQaMXN55WXNR3DAQChDpqR4ND7CPpio2MU7yUHgVnVtLV38T9JCKyBPvFtKtQevtGw6Q45McaMYweSc9qV28aJUcCs4eKLDQ6zrks6YAriuW4BXkZ6FpshGpARLLANfSzaTUHbG1UaCui2qaLd8xkupiawtvgM2aGhnyYhJuZS5SXz6op1TNoxukcoxZbGBksq5HYY81D857Q4i2vTWeSqYx7YkJG1igxPxyb5X7aE5D9aPrtNVZgZtiJgDnLsc6x2nVnAnUCwVaVrr7us8wd8hRet4o3Ls6djqe5KnWJ8SLgcssdE1kbo7NEk4aXjpKCS6pWKgi8DWPWwEEHZnJZT7uSXKYYJWyYNWqa62cW4gS689YYoxcRgfgb7CvrbnDojdwK1e5hCudEMadmXDxpQU9uucNtgarsZmBC3bZaQfAAGLe9NJ5TKXzujZPXNUsGjnUaA7rjoMcCqfG8SbzNcnXYkAv9gMFVbKKRa8PYRqCPrFJ4pEJCxHk1r7fGUt95imE7SozZnMQMN49GUd1hxBj7VHCpeoVUdxVyYR2y89hHEEzkP7pobGQaPZAJf7jKe2g6krmxrbAWiyFR5GVipyKAD5CsV3i8vsTj74WCb5XkA7cRJyvQejjk1G8UtM4wSLBNWXvfoAW7bJbm4E4ABAVTyUBNkAzKnhttA3gYFzKFfyKcwUy1LcMKj2Bs8mmLP2oKNMhcwPwedAnRMF5c2Ug7ZcpSU5WGuHisCGrGDbnDLchC3EcUGdNQ8r3MK7VG7vUW3BKWYTw7ZedRYyJtehHqfFD9C3YsP6QgVnysGnk76tUz2VEoRK9VSW2ceun7beSVysYvQrrsBTouFrqchKiDABdoMxGMj1cC8nSNhXFMTtqZt61VjBn1iNbjSyugrJq35ncj21VTFicScXBVJ3ggUd5mrbhXvPxxuyo9dGsX5RV6LAStJMF4cqpZ6rWRqDWLHMjsFnwfBGFEiwq7TWebGzBYSydiJJvFFN4dveuXRudaH6P7DYoJEwF5TC1EpRa",
decoded: new Uint8Array([111, 131, 61, 202, 143, 49, 251, 188, 189, 178, 210, 20, 231, 134, 139, 217, 253, 207, 46, 172, 37, 214, 94, 213, 52, 55, 126, 63, 90, 122, 220, 8, 125, 177, 22, 65, 54, 126, 64, 77, 44, 36, 204, 125, 6, 24, 215, 201, 180, 63, 57, 81, 205, 229, 60, 124, 248, 179, 40, 151, 130, 18, 180, 75, 127, 186, 81, 221, 202, 68, 163, 203, 218, 138, 120, 48, 21, 134, 216, 16, 159, 197, 146, 82, 224, 82, 158, 128, 43, 61, 6, 100, 196, 152, 60, 31, 83, 206, 132, 253, 235, 59, 205, 46, 205, 245, 230, 10, 18, 143, 233, 43, 58, 20, 131, 222, 182, 21, 151, 214, 136, 84, 46, 36, 191, 155, 17, 82, 134, 156, 160, 142, 216, 141, 233, 191, 39, 24, 123, 122, 15, 191, 17, 4, 159, 194, 217, 82, 65, 125, 114, 232, 224, 201, 35, 96, 166, 107, 81, 234, 177, 117, 40, 91, 53, 141, 9, 129, 131, 90, 207, 109, 180, 130, 66, 65, 144, 166, 212, 236, 18, 53, 110, 24, 159, 12, 118, 177, 170, 58, 151, 42, 131, 171, 247, 43, 45, 16, 155, 152, 123, 114, 146, 243, 132, 178, 128, 172, 188, 99, 91, 127, 222, 68, 219, 136, 175, 173, 70, 231, 22, 233, 154, 190, 100, 233, 252, 241, 1, 84, 151, 172, 87, 146, 2, 102, 146, 120, 113, 219, 253, 103, 30, 112, 29, 48, 217, 80, 237, 183, 123, 129, 196, 132, 128, 66, 112, 18, 117, 7, 150, 64, 232, 161, 22, 21, 174, 140, 29, 114, 119, 0, 237, 212, 43, 24, 34, 97, 236, 49, 227, 54, 154, 251, 3, 50, 191, 97, 216, 121, 64, 97, 210, 66, 17, 136, 161, 149, 59, 231, 154, 14, 42, 45, 113, 27, 211, 30, 4, 47, 251, 205, 17, 118, 45, 34, 253, 226, 72, 72, 203, 153, 73, 15, 86, 203, 183, 68, 215, 249, 201, 254, 157, 133, 220, 33, 33, 86, 242, 14, 33, 191, 59, 188, 246, 26, 220, 109, 53, 233, 33, 62, 30, 66, 71, 93, 154, 93, 122, 212, 23, 133, 239, 45, 112, 4, 1, 151, 226, 160, 202, 16, 179, 34, 206, 139, 169, 133, 71, 154, 38, 27, 176, 208, 244, 129, 57, 2, 79, 208, 152, 198, 93, 148, 27, 219, 27, 52, 167, 232, 211, 101, 137, 251, 30, 171, 33, 92, 163, 208, 243, 155, 128, 93, 150, 226, 120, 221, 39, 98, 193, 19, 18, 163, 247, 45, 173, 219, 107, 121, 195, 238, 179, 96, 160, 245, 228, 241, 186, 18, 56, 48, 208, 188, 66, 34, 205, 206, 206, 213, 8, 112, 227, 120, 5, 93, 86, 234, 139, 149, 113, 158, 76, 158, 137, 143, 217, 85, 234, 116, 174, 32, 72, 75, 1, 124, 38, 176, 175, 197, 249, 101, 138, 183, 171, 180, 128, 64, 189, 236, 205, 196, 136, 220, 87, 62, 82, 142, 130, 172, 236, 4, 148, 39, 155, 45, 88, 85, 108, 33, 53, 49, 51, 138, 208, 211, 246, 191, 78, 124, 124, 27, 182, 167, 180, 196, 67, 187, 110, 32, 128, 28, 106, 5, 68, 22, 59, 203, 85, 246, 60, 171, 49, 235, 53, 198, 216, 56, 90, 66, 42, 184, 30, 227, 71, 200, 74, 99, 48, 150, 112, 33, 197, 24, 73, 203, 52, 121, 93, 78, 142, 90, 151, 156, 141, 216, 45, 220, 220, 68, 177, 64, 192, 240, 122, 177, 189, 79, 185, 2, 138, 212, 238, 194, 157, 62, 29, 77, 129, 46, 236, 36, 135, 9, 80, 40, 68, 232, 112, 82, 47, 144, 86, 49, 142, 86, 171, 95, 155, 113, 161, 63, 190, 210, 178, 234, 104, 172, 8, 115, 11, 237, 71, 30, 141, 3, 166, 32, 254, 91, 246, 226, 6, 68, 226, 152, 203, 104, 65, 190, 170, 185, 248, 100, 59, 177, 141, 192, 200, 110, 6, 95, 169, 193, 5, 195, 166, 79, 178, 230, 240, 106, 132, 11, 147, 24, 147, 213, 113, 5, 18, 42, 23, 136, 95, 77, 178, 204, 89, 38, 130, 173, 88, 26, 98, 73, 123, 225, 71, 192, 22, 116, 50, 24, 31, 221, 134, 57, 243, 228, 20, 14, 42, 235, 153, 145, 252, 238, 107, 58, 112, 57, 185, 130, 76, 20, 0, 213, 145, 249, 218, 122, 214, 23, 122, 157, 63, 35, 169, 3, 236, 226, 184, 156, 176, 37, 212, 240, 95, 252, 132, 204, 239, 96, 99, 208, 227, 33, 146, 203, 151, 87, 172, 72, 136, 182, 19, 212, 84, 158, 76, 73, 84, 132, 131, 99, 188, 243, 66, 113, 224, 139, 34, 177, 198, 140, 83, 215, 49, 123, 70, 146, 212, 13, 127, 169, 141, 202, 52, 118, 222, 168, 102, 183, 140, 80, 184, 128, 117, 183, 201, 4, 204, 8, 247, 195, 149])},
{encoded: "RfMW5U1bUrhii5iwfk8yJTvNdkKvtuhVk8or7tHPzL3s72UGdAUfUvQmGTeBCPfu1J5gGwD6kHTkK5SqxjGRDGLSRxY4gR14JAwJbDoE5sLvve5kVzU5Uxsk57KKuvyAgJDP9TzgkdDZtppodvX1gmKwWjzPppGrxRmd2Yro7bq1AAar3ewvR7zZnVCX6bxFs7LKa11TqRLDHVUie",
decoded: new Uint8Array([135, 177, 224, 165, 184, 120, 153, 73, 210, 102, 3, 101, 200, 195, 249, 80, 152, 230, 18, 27, 172, 223, 136, 21, 170, 6, 131, 238, 59, 221, 156, 43, 188, 31, 37, 161, 140, 117, 178, 188, 237, 155, 114, 125, 131, 93, 238, 96, 91, 113, 227, 87, 43, 91, 70, 97, 82, 80, 117, 217, 91, 244, 103, 205, 217, 243, 139, 43, 52, 196, 191, 226, 218, 149, 38, 246, 116, 25, 33, 194, 90, 214, 229, 31, 136, 150, 218, 25, 206, 168, 73, 3, 165, 158, 255, 65, 212, 201, 240, 66, 31, 82, 198, 152, 199, 201, 174, 43, 123, 102, 207, 17, 54, 135, 92, 255, 246, 133, 223, 241, 226, 37, 42, 168, 19, 201, 184, 238, 64, 61, 61, 199, 189, 100, 34, 38, 13, 0, 146, 244, 229, 23, 236, 240, 105, 100, 19, 79, 62, 210, 23, 147, 219])},
{encoded: "3MxBmyJJWGL1jpLKNvf6Y7XnGTAGDSKm3LSSJ6DVJxfv8HNsiddpjp5DMGg1BByeTqGQd8hXk3Fy3aW7NNmCqnuZzLAKjqBmNmd6WVhsf2hMXfFJhThnCBsF8RKAWQodaqZCRFwEgqhLMuURg3XouMxHsLmS6B6h1v4sdyNBv5hJL4fp1Wi3GeL1prEihvqjrmR4oawgeuiKGop7AH9RnT96qo3bcZKV5BiP3Gj81geUbTXUM3hZ4EXjZAdCVxtMys122EoiuAde8Fh5GK32zoaPPywD4gYTpsNsZqbaQkryE8y8c1zKNCPcGPFVBCpic4cvBMjK9wEWQY5TnRBA5oo1LTPqpyEHZForWJHHL9PNnGDcVeY9384CUfXCJZLFNHKcW6GBNSKHfwB7wbMrkUDARsAjZMHT7ajVivmGdhiaBBMQzAgL3xdZAuVJVLciGsoHVdRcMHazdfX6qfdNpAZfC5evMA6bVsVSHcSZp2qqnRLYbJ6E6B5Y9q5YRSprSTmtMMS7CSKHv27wqRuAaU6Qt3QRt2NQAq7L1KuF5aq2fTc878j7LqsGJLM8wJfank97FFY2Evxr7dCpDrnqh4ptHxMXQPu62bayjRBPj8tPjvcUHho6kwKaZBLP6U6xWr4RKU67fJsXykf2Hg83RRCK1PmJqqK1ApFfqyAFM7pcrGnaj9ABtfQ7iSmob9QzWuFPvjdYLeY3gCz2wH8sbf64kb9nqkLEPLQ6cHb3o5WCcv6TRtAGLPB1PvAVyis3ff6R8vPAjsVkCwjBHLUHeiQ3aED9QfSkQ58EPPnsRnC9574F6LHB3YYibz3R2LppkaLkdUUGELUBQFCT5u2FRiziy25kY6GnHCVDCD6Sj8naAsMRgynumDEJwYASBmS8yCiG9eh1GTRS2yXV7MVBe2msiFFWGiP6LiJmhmGaEwy9WyjAQSCpidAUv4mHKS4L63tK3LpCbuUPNmcrSYQRrrAiuSKojAKpuLNYXUpku67L6G6QtZ2TD5t8AWCeVtttDLA4pbCCDwdiqVKUesm6br3mxjB7QTXjn9vr6cY6n48BKHqfwLeKnBDC5sVTaVWPwpw7evth5xwNpSwCKtEhMbNwjqVysEPNGKTu2Htm29RE8jBmYQMDU",
decoded: new Uint8Array([161, 199, 64, 18, 2, 26, 112, 182, 56, 120, 88, 119, 130, 31, 176, 244, 121, 171, 231, 156, 68, 175, 137, 228, 193, 168, 85, 152, 162, 21, 135, 182, 103, 223, 94, 223, 159, 149, 49, 196, 10, 87, 243, 113, 163, 239, 252, 150, 75, 157, 250, 147, 163, 43, 42, 81, 90, 174, 125, 76, 34, 96, 121, 226, 77, 128, 5, 120, 66, 39, 55, 26, 147, 110, 195, 119, 10, 46, 193, 194, 73, 145, 15, 211, 46, 4, 124, 205, 215, 252, 6, 187, 15, 62, 112, 116, 174, 30, 154, 163, 97, 127, 154, 202, 13, 159, 160, 13, 58, 169, 16, 240, 3, 49, 82, 217, 76, 76, 87, 33, 255, 200, 30, 181, 120, 183, 238, 109, 231, 128, 230, 151, 131, 220, 254, 178, 7, 45, 93, 32, 211, 185, 25, 206, 250, 18, 233, 161, 144, 140, 103, 189, 253, 9, 106, 139, 85, 195, 114, 32, 223, 133, 19, 139, 121, 61, 138, 13, 85, 12, 106, 161, 106, 149, 25, 147, 179, 53, 104, 151, 183, 73, 89, 195, 92, 56, 190, 27, 80, 229, 79, 188, 51, 10, 252, 220, 96, 242, 202, 143, 138, 90, 122, 100, 126, 155, 111, 24, 160, 37, 82, 14, 13, 56, 247, 141, 214, 221, 142, 100, 234, 109, 151, 23, 153, 42, 15, 169, 92, 132, 87, 120, 206, 79, 123, 146, 133, 222, 66, 192, 83, 36, 73, 244, 239, 80, 87, 248, 115, 106, 7, 172, 253, 158, 84, 0, 101, 75, 196, 132, 167, 56, 3, 122, 130, 92, 243, 173, 165, 39, 225, 148, 73, 189, 55, 220, 194, 101, 172, 206, 160, 11, 111, 76, 237, 252, 61, 15, 125, 220, 84, 246, 128, 207, 146, 49, 78, 196, 96, 98, 243, 123, 86, 126, 34, 57, 38, 151, 233, 251, 137, 189, 225, 147, 92, 125, 24, 231, 237, 59, 74, 177, 221, 208, 27, 123, 243, 190, 155, 4, 140, 234, 31, 55, 24, 183, 151, 10, 4, 123, 112, 17, 178, 107, 122, 1, 146, 217, 126, 206, 223, 59, 206, 213, 138, 251, 6, 147, 227, 219, 15, 229, 254, 187, 14, 142, 128, 231, 103, 221, 107, 0, 213, 240, 22, 140, 97, 3, 24, 196, 16, 104, 62, 131, 49, 218, 227, 58, 228, 170, 158, 246, 194, 157, 243, 13, 151, 87, 137, 204, 172, 71, 102, 179, 228, 198, 136, 94, 129, 4, 235, 150, 99, 203, 192, 130, 213, 252, 154, 30, 131, 187, 118, 178, 163, 39, 80, 38, 156, 1, 234, 137, 248, 120, 71, 251, 26, 136, 156, 0, 207, 174, 159, 192, 253, 47, 213, 62, 105, 156, 93, 16, 186, 149, 238, 19, 18, 93, 203, 157, 120, 215, 59, 32, 187, 240, 252, 47, 251, 30, 181, 140, 46, 217, 36, 62, 120, 40, 67, 210, 48, 126, 202, 209, 189, 55, 40, 3, 4, 43, 188, 21, 168, 195, 119, 224, 51, 4, 246, 51, 110, 83, 76, 252, 145, 160, 238, 229, 115, 190, 35, 216, 113, 49, 176, 65, 208, 30, 83, 255, 254, 46, 23, 50, 164, 158, 20, 177, 84, 228, 237, 186, 178, 152, 200, 4, 254, 228, 125, 185, 62, 209, 190, 129, 155, 28, 142, 103, 69, 7, 252, 38, 118, 197, 100, 72, 193, 49, 205, 149, 110, 100, 193, 196, 114, 164, 57, 17, 14, 30, 225, 255, 118, 0, 237, 113, 164, 165, 205, 91, 251, 127, 119, 115, 128, 58, 156, 50, 14, 29, 111, 164, 18, 36, 129, 11, 0, 236, 179, 97, 40, 162, 162, 64, 96, 167, 74, 3, 59, 176, 64, 233, 77, 53, 207, 237, 180, 66, 162, 132, 234, 223, 228, 243, 140, 80, 6, 201, 201, 10, 136, 25, 184, 175, 88, 215, 220, 78, 226, 9, 121, 170, 97, 27, 40, 100, 238, 10, 75, 189, 118, 124, 147, 210, 234, 168, 233, 59, 189, 121, 118, 92, 12, 36, 143, 131, 46, 19, 2, 159, 243, 67, 147, 15, 130, 215, 148, 223, 207, 235, 237, 113, 95, 86, 169, 224, 68, 205, 188, 145, 91, 71, 130, 218, 253, 36, 15, 38, 153, 68, 80, 217, 219, 14, 144, 131, 165, 137, 242, 180, 183, 61, 46, 12, 167, 177, 194, 14, 106, 189, 166, 1, 140, 90, 18, 94, 209, 51, 70, 157, 7, 216, 198, 57, 66, 44, 206, 65, 81, 0, 191, 189, 3, 138, 249, 85, 207, 69, 232, 118, 232, 249, 72, 182, 114, 87, 120, 123, 254, 105, 158, 84, 30, 14, 171, 46, 68, 66, 47, 203, 105, 181, 255, 223, 61, 33, 39, 7, 202, 84, 182, 19, 139, 137, 147, 138, 82, 12, 179, 224, 84, 191, 140, 224, 218, 225, 72, 9, 42, 231, 41, 165, 23, 136, 21, 56, 220, 81, 118, 222, 63, 34, 139, 185, 35, 6, 116, 198, 103, 77, 11, 65, 34, 207, 173, 63, 209, 52, 97, 204, 219, 222, 64, 176, 43])},
{encoded: "MXN62HeXDetfUzJqp9RmReyxuH3mcti8cMQmDRoLF2WLara6e1eiH8qnAcCr9LTVTJjrA9Tjpf8v8DFo1LUBTKwNP8CUgd2BhCXoXPQJ9xBueQnR7Vv79u3T6GbUdLkE7JEwAexhaxAbCCAThcQRUR1XYyhSWJ4uJJ3GiS9EG6py4B3VukUi3LdC1wuoJgkgZL49tTm4YQPVyzDDnA4cePJLnb7NzxxtcapVSUEpFG97ABN",
decoded: new Uint8Array([94, 68, 96, 125, 66, 160, 30, 69, 125, 248, 117, 50, 136, 191, 104, 106, 103, 78, 145, 68, 146, 44, 156, 124, 33, 149, 5, 183, 231, 15, 214, 152, 41, 97, 81, 38, 249, 215, 4, 233, 79, 218, 45, 33, 222, 226, 68, 66, 206, 33, 133, 15, 67, 76, 195, 128, 9, 247, 6, 77, 11, 208, 170, 14, 62, 151, 179, 51, 168, 92, 92, 212, 179, 151, 171, 53, 223, 119, 64, 160, 231, 245, 221, 226, 205, 111, 77, 140, 201, 154, 194, 9, 251, 86, 156, 116, 15, 197, 11, 82, 187, 97, 160, 0, 238, 138, 5, 134, 157, 233, 217, 151, 191, 127, 207, 169, 5, 83, 1, 211, 85, 216, 62, 85, 218, 85, 25, 26, 217, 124, 60, 28, 19, 84, 41, 32, 219, 157, 252, 140, 41, 244, 80, 126, 197, 218, 226, 42, 12, 123, 194, 11, 45, 13, 255, 154, 20, 74, 162, 189, 31, 24, 36, 186, 194, 60, 173, 160, 226, 160, 185, 199, 128, 134, 109])},
{encoded: "2jyazz67zp1hpPZV1jXYeBjGacbpFjsPTVRU46RSYUZCeJeHtzdddM732rSMrwo9yM52oTRnFrShF2d1fzCrVxYAb6Dwusxnh2MHQDzqXF8YdUbaaiQBg6ZoSsAn8h2DKgqccBVxQhak4LvgSSVCq3SSP18qPHYUgHp35vMKH8jdHP9NTa5J2jNjwppWG2zwCjtRuvJGEJHWMYMirio9jp67LnX6y2soo1Ht9WtQokCisrJxdSq6Q7L3b3Y2s7U8jTCqADESFXMyJuKaaRZBrY4T6khdb2BYBWKe13RUiEKqpsVpR24oMpgyYuRfiLsVS1X7X5W2n9jqPLkmnFXFP7fw4nwan4vUifiy7UghFBQFdVv7jsGMEUnU8EANAMmTZz88AjiSNvHmM9McjmfTfSZcbKGchyZmvon5A8z2Pzge6uduhXdNJCQ138rPUQU48j3SVgX7tssj3HaExjkTZRmveuRvEVApA2AHHs2EXGcMGxUe6i1QCck6QkK1F7DQ6zk1eRRgLfNs592GpCdh9kyHqmGLMrNUW4ftHxFxWYTgT1zmSVYzAouLnHkQqmEQnrMgKDrk7DDu8HUCovuaQurq5rXseVTZX5vBT77eJntyKHam7tLAK1T39reMmX6XLyAx48XEfwTomuPD5HHUoF6xZFAyvsJUSYpLuZ3oSvYS7XbY3jrVYAYPVpSpNPLdtLfWqtYz5xxYCgMUZ84WRpq2HJzunEtpPV4GdmNBkhhg6hkVdbaZQVGS9J6Daq2swsyKBgiUUjb4vzw8zH2G1isNZDL1cQFcKhyvYJrJ3rRps4RooZJJtz3daWa5uNMdvJwfCnKyBAsJayQuUxvy2dR2AK5gSaxPgsRiqcW3uKFer6L9kcpgvuZmzJgcLikj4SX6TBVAgar2psS6atfczV8rTiDfnQPLRkJkuWS54BsHnUCUPErqrAcFy1ipWpo9JEVuTtNSaiByw7pXJZivPjScq81iYidimiEugnY5qdD9W9z6Y2Vz4snQcBDZiR3QrAwEpJzKvoYWUdMSRvLZ43NnHdQg1WxK7GNDbaumPVbSPNftS24FE",
decoded: new Uint8Array([253, 199, 156, 51, 44, 236, 192, 68, 107, 80, 194, 210, 124, 67, 137, 104, 59, 112, 158, 224, 177, 54, 87, 53, 242, 213, 171, 250, 185, 52, 52, 242, 16, 85, 5, 239, 196, 234, 54, 10, 204, 60, 133, 125, 89, 177, 114, 74, 158, 30, 239, 144, 31, 193, 121, 0, 83, 157, 48, 220, 207, 31, 3, 129, 177, 173, 119, 217, 209, 250, 10, 187, 88, 208, 245, 204, 87, 252, 38, 125, 221, 109, 39, 134, 199, 20, 178, 174, 255, 104, 198, 238, 154, 242, 54, 66, 118, 72, 77, 64, 211, 114, 79, 117, 84, 180, 191, 57, 220, 222, 164, 86, 5, 252, 90, 214, 17, 163, 168, 110, 203, 226, 167, 232, 222, 123, 23, 187, 28, 176, 198, 199, 21, 172, 216, 202, 153, 186, 25, 13, 121, 55, 91, 204, 60, 203, 237, 199, 13, 22, 89, 131, 35, 16, 53, 135, 201, 208, 207, 120, 27, 193, 144, 225, 214, 245, 61, 40, 222, 176, 127, 137, 6, 112, 220, 29, 78, 176, 10, 109, 192, 139, 154, 94, 216, 204, 177, 79, 105, 206, 214, 60, 188, 58, 165, 176, 106, 153, 48, 146, 236, 217, 54, 198, 113, 36, 162, 227, 201, 99, 17, 17, 226, 140, 148, 140, 179, 71, 11, 0, 255, 226, 135, 142, 149, 252, 21, 60, 116, 241, 229, 166, 2, 217, 85, 191, 141, 64, 247, 185, 73, 32, 115, 51, 139, 205, 126, 132, 76, 137, 40, 154, 169, 121, 203, 170, 157, 65, 73, 50, 34, 178, 197, 156, 46, 55, 240, 23, 243, 131, 115, 102, 59, 51, 105, 245, 222, 26, 118, 91, 173, 249, 133, 211, 83, 127, 117, 135, 217, 83, 249, 42, 21, 168, 158, 166, 201, 10, 142, 231, 168, 246, 222, 247, 24, 97, 69, 103, 209, 216, 91, 47, 137, 170, 87, 118, 214, 234, 220, 149, 103, 38, 252, 45, 186, 236, 144, 223, 212, 254, 22, 30, 24, 131, 6, 174, 52, 189, 73, 2, 202, 242, 146, 140, 159, 236, 207, 133, 123, 249, 96, 58, 176, 70, 209, 206, 255, 190, 55, 119, 238, 247, 41, 59, 212, 1, 70, 102, 203, 159, 240, 95, 75, 126, 2, 166, 130, 226, 6, 97, 91, 250, 159, 160, 203, 21, 80, 202, 97, 52, 55, 217, 224, 186, 243, 231, 159, 32, 121, 85, 102, 120, 233, 53, 130, 213, 250, 211, 132, 8, 96, 186, 160, 0, 17, 233, 245, 150, 115, 65, 93, 196, 42, 238, 161, 36, 43, 162, 221, 186, 86, 93, 148, 19, 131, 213, 219, 111, 211, 228, 70, 25, 111, 81, 196, 125, 188, 161, 237, 126, 180, 170, 209, 207, 127, 134, 45, 154, 143, 144, 103, 193, 132, 47, 182, 216, 149, 123, 145, 136, 16, 229, 110, 27, 108, 78, 53, 115, 210, 166, 82, 210, 75, 105, 230, 108, 67, 245, 9, 246, 193, 84, 122, 34, 134, 94, 233, 181, 202, 5, 62, 199, 242, 217, 82, 249, 202, 25, 249, 99, 121, 143, 120, 53, 19, 133, 201, 147, 80, 194, 220, 93, 78, 38, 222, 253, 43, 243, 213, 51, 62, 92, 23, 168, 115, 21, 92, 53, 68, 83, 22, 147, 54, 39, 23, 33, 109, 156, 181, 52, 133, 80, 249, 243, 219, 17, 173, 54, 125, 53, 244, 50, 29, 198, 215, 163, 250, 250, 106, 81, 58, 146, 241, 172, 126, 226, 145, 52, 11, 31, 241, 45, 225, 74, 79, 78, 87, 136, 241, 114, 114, 192, 91, 253, 110, 176, 69, 32, 15, 118, 46, 11, 54, 59, 122, 141, 194, 84, 98, 249, 123, 152, 246, 187, 126, 42, 74, 80, 211, 197, 149, 216, 184, 232, 244, 241, 96, 10, 101, 209, 144, 101, 239, 59, 173, 18, 155, 38, 161, 36, 122, 143, 35, 153, 133, 43, 8, 210, 65, 86, 34, 192, 163, 190, 168, 5, 248, 51, 33, 123, 103, 87, 87, 120, 157, 124, 14, 197, 241, 237, 201, 23, 13, 90, 102, 231, 177, 40, 104, 73, 241, 68, 33, 220, 162, 254, 123, 46, 213, 172, 247, 10, 252, 160, 77, 254, 33, 81, 103, 59, 238, 189, 51, 49, 63, 107, 123, 87, 116, 62, 116, 231, 253, 1, 30, 81, 172, 85, 1, 121, 37, 18, 114, 176, 117, 251, 64, 207, 239, 30, 54, 50, 35, 74, 136, 29, 177, 150, 26, 118, 49, 114, 211, 77, 24, 207, 138, 145, 66, 184, 118, 156, 246, 25, 209, 91, 89, 112, 238, 246, 23, 19, 88, 20, 252, 228, 67, 140, 37, 20, 252, 201, 99, 112, 180, 84, 30, 125, 204, 13, 218, 208, 116, 185, 124, 157, 172, 61])},
{encoded: "XeWaFFJEmfhSK58oLjrco5zLVPLrJ6LHwVXFQD3SEKQGDbc5xavfwAPJjMvrmLSkBUb2BbRnQUkf2XDSddLRD5CXFqJeEAgtcHTVB8JKTV15tXy2yjnEsyXjpsSx4PdHqejsZytV3fVEexzvTAvjKJzPYjP1sDCH7YPUsPQs7ruLRBC9Z8sAFGhkRb85sXibvYsJiAwMEp2PndA1w9VYDcHU1P4RsMbS8RzwoigEbB6yhQcVmR82JutDJAMDMzrXnHgdPeYrehmvEQmBiEXK7KNWBpTdeWxQHGsxequTjLZkc9cTt7dVwMUBrfdSPZcFY1TpEsvgLdEfCZLFCcAoSkzyN4NsvSYhr45ToXPZszminG5cjWAv9FLUidfsftw4SRyCocbG81heCBaRz6F7WqwAeFsZCS9yrwAU5QDrxNM3sakmyL1FYRDLFSsGnHhZAWkP4dvCCp18Do3j6yVDmpiNMSGHcSzXcmAehPDCbtYEHsQtXhKvtg77xVBYFGDJem4ri6gshB2xq89J4PivwErpYAz37HzUjhaHptzSnKiJaZxsfc2AQUvZiE7UfZWDi2eNRWyGjVoALy1iqVkEETMTBQShNZmuN16SaB2mRDib2Kow8XUNpLmxzErYge9Tidji3kHUqw2xHmRrpSqyu6MPUWxSEnEJjgD8SRPCANzV7eXnbvs9qKhgozbyE4cXfSuUtGNUsmWnrafz6tD2vXZGGD772TvCxfiLCwSgJW7PsGbJFN8wWTZQERdrncRECnnrscDLP55UwsLyfRhuSPz5XRV9DqZTvGC9SWSK9j9JNKX15eSmkXrgsJcc8jL9ntquStZvMoBWZuZi28Vj7PDoVFaM6BX1zg1yHMsESrPaCwcGRBFzMdkaivB3nGLEUGV25jyAJTZDkxptVGNcUfng1uPYjThnUdhKg8hP2bZFrQtoQ54ayptznhNCyH4fQf3f7D1JGvCqfLUVKr5aNj1qa4r8GGfWHPzmHidiHgQ3Wh43pSLUTrXEdoiajhVHJ67fahxSfLR7A7qLGPwhZmiLbReRq1iqFoSH8qhxjx6JAYx7qDaidrLrvseD92whFacNsxLtG3nkrwP2AQ",
decoded: new Uint8Array([64, 75, 208, 153, 164, 226, 105, 101, 6, 190, 69, 254, 5, 6, 117, 155, 120, 221, 137, 117, 176, 24, 45, 203, 255, 193, 151, 132, 249, 76, 148, 199, 237, 209, 120, 155, 119, 190, 239, 16, 64, 149, 44, 27, 225, 228, 222, 158, 90, 191, 242, 184, 189, 199, 36, 15, 120, 18, 97, 49, 170, 18, 72, 112, 185, 19, 34, 178, 68, 198, 33, 80, 62, 142, 86, 230, 53, 156, 210, 95, 230, 97, 199, 113, 65, 228, 112, 119, 163, 117, 161, 226, 242, 197, 54, 229, 216, 117, 93, 185, 245, 147, 115, 130, 55, 88, 178, 229, 230, 222, 208, 28, 91, 218, 69, 88, 221, 138, 170, 210, 124, 19, 96, 184, 237, 255, 136, 239, 150, 24, 199, 238, 53, 139, 230, 206, 212, 177, 235, 42, 150, 0, 169, 49, 104, 132, 231, 188, 72, 14, 147, 114, 145, 222, 132, 216, 83, 121, 102, 17, 64, 93, 19, 167, 166, 112, 249, 92, 178, 149, 202, 156, 189, 125, 147, 4, 150, 56, 224, 159, 225, 203, 94, 139, 171, 48, 39, 86, 185, 123, 191, 197, 110, 92, 63, 78, 19, 168, 115, 56, 109, 118, 130, 113, 67, 1, 234, 73, 3, 25, 200, 203, 115, 182, 187, 74, 37, 55, 120, 16, 151, 111, 107, 121, 210, 139, 51, 121, 165, 214, 48, 182, 7, 200, 165, 176, 202, 7, 82, 30, 58, 150, 11, 208, 98, 220, 154, 63, 30, 134, 213, 18, 200, 144, 188, 46, 142, 159, 26, 177, 24, 220, 71, 77, 159, 22, 170, 17, 123, 189, 126, 187, 182, 86, 189, 217, 2, 15, 217, 120, 21, 107, 122, 123, 66, 141, 170, 47, 77, 139, 126, 48, 127, 229, 197, 21, 77, 155, 85, 196, 50, 10, 110, 158, 62, 197, 154, 141, 244, 204, 128, 75, 31, 46, 113, 93, 19, 137, 177, 182, 84, 209, 247, 128, 152, 59, 206, 237, 117, 37, 58, 204, 26, 143, 213, 33, 67, 178, 61, 194, 77, 94, 217, 66, 36, 243, 191, 98, 232, 124, 92, 157, 50, 138, 135, 77, 70, 71, 215, 239, 61, 165, 246, 230, 232, 18, 118, 81, 248, 86, 139, 170, 64, 208, 13, 126, 165, 238, 242, 70, 151, 160, 232, 38, 17, 241, 18, 150, 79, 43, 191, 96, 115, 14, 67, 243, 134, 195, 108, 75, 124, 29, 197, 188, 32, 193, 128, 63, 204, 109, 42, 21, 88, 88, 213, 170, 58, 167, 172, 139, 151, 63, 184, 218, 235, 174, 25, 180, 225, 190, 89, 251, 247, 21, 188, 221, 10, 32, 80, 52, 173, 201, 125, 89, 124, 214, 136, 77, 42, 50, 92, 168, 3, 230, 100, 178, 148, 198, 169, 227, 45, 14, 24, 47, 79, 9, 11, 151, 54, 248, 198, 208, 102, 213, 40, 210, 43, 23, 7, 214, 139, 127, 59, 71, 144, 222, 27, 50, 79, 120, 22, 103, 235, 176, 55, 21, 141, 52, 242, 15, 63, 13, 14, 161, 81, 81, 241, 146, 204, 28, 4, 47, 98, 78, 74, 20, 116, 153, 250, 59, 173, 28, 212, 11, 144, 234, 51, 121, 149, 201, 188, 104, 0, 1, 154, 23, 136, 114, 251, 45, 173, 2, 155, 148, 185, 116, 49, 70, 26, 160, 211, 187, 173, 2, 206, 180, 106, 150, 9, 94, 228, 97, 184, 60, 196, 170, 177, 171, 70, 141, 165, 11, 49, 44, 21, 122, 111, 4, 213, 119, 158, 113, 162, 159, 65, 121, 166, 88, 107, 100, 58, 108, 243, 129, 179, 147, 32, 240, 18, 84, 122, 24, 71, 185, 62, 14, 17, 95, 91, 62, 212, 6, 89, 135, 135, 18, 99, 11, 214, 7, 254, 210, 113, 52, 28, 253, 132, 127, 51, 148, 173, 205, 117, 41, 75, 107, 36, 2, 153, 98, 134, 99, 254, 161, 0, 176, 250, 176, 61, 110, 186, 226, 98, 51, 176, 25, 59, 123, 84, 101, 37, 101, 182, 222, 89, 140, 37, 226, 8, 225, 14, 68, 46, 64, 78, 51, 157, 150, 233, 208, 215, 84, 82, 33, 45, 57, 245, 186, 252, 54, 135, 150, 56, 68, 42, 147, 145, 225, 12, 180, 12, 133, 203, 109, 2, 222, 125, 244, 10, 94, 189, 209, 59, 163, 7, 210, 38, 44, 248, 154, 197, 84, 10, 29, 24, 112, 214, 2, 17, 245, 166, 38, 239, 51, 111, 208, 185, 234, 221, 233, 139, 103, 19, 64, 145, 88, 226, 209, 218, 109, 178, 46, 191, 214, 207, 160, 110, 78, 105, 111, 212, 123, 135, 187, 145, 51, 158, 117, 20, 198, 48, 51, 147, 55, 21, 115, 60, 50, 62, 35, 249, 114, 26, 158, 249, 91, 237, 127, 20, 137, 54, 62, 22, 110, 82, 115, 121, 105, 129, 116, 30, 63, 208, 138, 194, 125, 175, 93, 52, 245])},
{encoded: "5iuH66GXgbDBEJkBZwzJnHwqr8fKW4tEceu9jkD8qoCKrgrM2NTw6uz8n17esbbWHgWgmDoLsqCcLV3MuaJJ3yrrFqDUpxRBatkGzcJueKRzwiH5NSpxVTdMg8VHUm8jVAehbueEPXZ8e7TAwwMyzmri9HitL9DsVDoVLJH9GxGv3qSsQ4ab5ijW1JVL31PLg4e437C1rLtjeK7kNiT7nQB5cxffFXqyzNqYFMxjJimKyzD721y1GA1jWuf1iZq9b3gJik7ykLjrAo9R8Ac8QP1jHfZPpgfidwpycaidkhptdhfcfL65F2Jk6wbJhhp4moXeSQmMsBsa2abosQYJe3q3AVsQxKR6pw1przFCPqqCA9a9ux1NVQe548AwKbDaRdLSJEgRtBMEBuPDpUKvgtSfvUKExPpJy9W9oLEKfQwGB7JKfC1AMwXKfzELTDYWkEQE2TSKCGA5DkisZG9rv8Sn4p7zxyGefxKinuuuu37zKWD1bE5eBvXbrQBFXHEwFtudZbgMaU7GXvWgiLRtUz7gK5ra6SgP4ZLYZqqBdatrpU8o2Ug6t8zyJproBMwotkwv6kJbCevaVZtusU9Uk5LKyFM5XeAzP2BhcBY3X6fbgjRMbmoDq7RU7dn6sXCkDY4VAzqVW4CgyT8E6dyHBuvzXSDguCrViZqNjKTucGAnG6zqeYCv9KU1hH9QVrfoTB32rPHfvRvPRydFXb45cVg862zRtRUC7nn2izqy7KEapzXYfH4sV9JghQKRwfD57keP293MNgYmG39sHTnPUQ5mqoENQBDzMuthZ4fGtEPkYYwU1NM1oHo4pbMissLZtwSQDwu4BrFqzVMdkCvyPAGvJL2sWx6ZstS6eEg9gTKmrrKNsLHwjHcGPExKt9KTP3brJeqncDpy2Ey12razfCaFV7C2ki3tt5Lg11txYx1uSeyKsHDSbw2NarLaPwJaExQuMmAUGaYHxyHogyZEQuGzwFwDdQZkK6RjgW3yq1f2tu5Tg2npLnYdpq7kwrNmD76EWX2a3rKThsHTNGCYAaqcz4QmB1MPDSd4PGWTNsBSUfrWEgxTUNexfckYkzCvnvYtLzcXdadrZ6FehVrmmWSd6DvgdojNLHViuzMaTGjZQaLLnM2PzdVPzNLytmtJBb8cXP4oCbJDoYqwXwYw8iPaU8dZht5KbPhtZYn6XQFXfwVsygTL783LdjCP95AadD9mdWW2YmsJwykiE2vx5hciPmzjAyrb7kfd9i7A92zKwMvMakoPKC5aaxShpnexoV8R3KEwxBsZTTsTrBNGzKev6wtseCKZ5mshzXBawyD",
decoded: new Uint8Array([5, 158, 142, 176, 19, 132, 253, 213, 61, 168, 144, 185, 105, 190, 69, 189, 207, 56, 107, 116, 17, 220, 3, 181, 85, 22, 41, 217, 251, 166, 33, 92, 4, 13, 217, 131, 120, 37, 134, 178, 52, 56, 165, 110, 65, 233, 215, 122, 243, 61, 118, 206, 38, 60, 207, 39, 9, 254, 70, 233, 16, 232, 171, 28, 199, 70, 222, 204, 178, 130, 134, 85, 182, 54, 241, 16, 182, 131, 143, 172, 55, 121, 101, 216, 111, 221, 158, 248, 16, 79, 90, 109, 127, 78, 22, 92, 74, 9, 65, 215, 80, 86, 193, 206, 3, 146, 141, 23, 62, 221, 137, 146, 51, 250, 153, 193, 196, 181, 89, 133, 100, 205, 190, 10, 139, 11, 226, 105, 23, 225, 49, 217, 41, 132, 43, 101, 203, 76, 236, 50, 28, 8, 33, 253, 234, 47, 36, 219, 15, 106, 194, 12, 120, 187, 254, 145, 249, 153, 158, 192, 230, 244, 95, 227, 1, 242, 199, 159, 30, 83, 245, 35, 67, 137, 33, 214, 108, 218, 76, 112, 21, 194, 24, 205, 31, 149, 195, 62, 203, 177, 153, 56, 62, 149, 193, 35, 148, 182, 41, 235, 111, 173, 145, 247, 19, 102, 110, 184, 248, 65, 249, 51, 88, 70, 19, 97, 41, 66, 131, 249, 53, 50, 209, 111, 50, 146, 91, 64, 84, 216, 164, 228, 174, 195, 178, 1, 212, 110, 90, 202, 97, 82, 208, 149, 80, 20, 243, 130, 251, 227, 204, 243, 216, 196, 172, 206, 31, 41, 34, 19, 213, 167, 41, 74, 185, 8, 58, 2, 240, 86, 10, 23, 123, 5, 115, 34, 15, 192, 217, 111, 43, 118, 164, 169, 122, 66, 34, 8, 197, 29, 31, 196, 87, 80, 73, 187, 6, 85, 56, 31, 46, 215, 88, 32, 63, 35, 71, 177, 249, 111, 10, 198, 195, 135, 251, 45, 94, 47, 15, 148, 145, 71, 210, 101, 172, 165, 136, 57, 65, 48, 68, 75, 177, 101, 117, 242, 35, 56, 76, 203, 28, 162, 42, 195, 138, 246, 33, 42, 232, 73, 185, 134, 202, 209, 242, 110, 105, 163, 238, 185, 168, 115, 138, 163, 6, 188, 65, 46, 226, 73, 86, 59, 21, 121, 115, 97, 175, 191, 108, 180, 136, 146, 137, 223, 177, 207, 13, 171, 51, 21, 208, 82, 129, 72, 154, 69, 220, 183, 229, 214, 117, 1, 73, 212, 78, 57, 41, 223, 134, 52, 197, 111, 75, 81, 128, 233, 184, 122, 128, 253, 107, 161, 121, 224, 13, 182, 44, 193, 161, 43, 142, 170, 223, 84, 240, 145, 58, 2, 96, 135, 233, 12, 12, 67, 69, 187, 254, 106, 212, 9, 237, 235, 136, 50, 222, 114, 160, 17, 229, 140, 4, 46, 27, 126, 66, 126, 88, 65, 69, 4, 236, 69, 156, 142, 121, 102, 196, 234, 132, 124, 125, 32, 246, 203, 174, 95, 115, 117, 7, 156, 174, 117, 137, 177, 26, 163, 11, 195, 168, 197, 223, 102, 238, 246, 251, 205, 66, 121, 254, 41, 255, 136, 225, 96, 205, 223, 102, 163, 151, 14, 255, 73, 112, 196, 193, 187, 39, 37, 96, 12, 113, 57, 151, 31, 65, 42, 231, 47, 67, 96, 244, 65, 164, 36, 144, 82, 6, 196, 140, 91, 90, 183, 198, 182, 143, 202, 147, 215, 163, 160, 186, 94, 235, 244, 151, 170, 106, 229, 230, 84, 101, 2, 171, 144, 250, 159, 79, 228, 113, 145, 187, 202, 184, 113, 218, 171, 187, 28, 172, 96, 186, 45, 219, 191, 196, 238, 220, 190, 87, 198, 48, 40, 142, 46, 33, 116, 86, 13, 51, 158, 179, 208, 250, 152, 83, 194, 205, 36, 195, 189, 245, 159, 220, 108, 188, 23, 223, 118, 95, 212, 215, 170, 71, 61, 80, 204, 52, 111, 234, 166, 96, 231, 84, 0, 202, 9, 71, 131, 10, 199, 52, 224, 92, 181, 36, 59, 237, 190, 69, 164, 174, 56, 11, 152, 44, 233, 153, 21, 189, 184, 90, 114, 192, 170, 253, 58, 133, 165, 90, 49, 33, 50, 152, 105, 7, 178, 248, 11, 54, 143, 197, 40, 94, 204, 185, 128, 33, 140, 103, 116, 156, 102, 129, 180, 228, 123, 172, 118, 57, 0, 57, 213, 21, 250, 116, 156, 4, 25, 234, 16, 12, 70, 40, 222, 227, 136, 136, 113, 73, 10, 42, 27, 186, 168, 113, 83, 67, 64, 251, 157, 249, 203, 54, 117, 188, 103, 0, 107, 194, 52, 172, 55, 11, 199, 129, 114, 209, 154, 234, 23, 213, 243, 132, 17, 7, 206, 46, 53, 224, 232, 88, 14, 245, 81, 221, 63, 229, 118, 185, 50, 239, 95, 160, 59, 19, 198, 86, 48, 152, 246, 108, 103, 91, 228, 211, 47, 230, 202, 231, 234, 124, 159, 85, 177, 79, 182, 139, 182, 145, 255, 4, 18, 161, 134, 68, 55, 132, 247, 226, 156, 0, 169, 241, 20, 170, 100, 16, 163, 100, 28, 33, 248, 55, 52, 38, 202, 19, 141, 100, 208, 129, 8, 51, 105, 213, 132, 139, 242, 178, 142, 80, 37, 33, 125, 28, 120, 72, 145, 164, 50, 157, 32, 152, 122, 110, 220, 4, 107, 60, 56, 62, 184, 254, 60, 187, 42, 251, 49, 59, 137, 211, 77, 148, 216, 250, 37, 32, 236, 53, 238, 4, 127, 237, 76, 67, 118, 71, 148, 204, 63, 213, 86, 189, 220, 121, 20, 111, 149, 136, 35, 139, 237, 16, 167, 42, 242, 69, 231, 0, 197, 27, 105, 85, 147, 191, 25, 183, 2, 213, 101, 64, 240, 147, 62, 55, 195, 43, 247, 145, 20, 216, 169, 19, 239, 3, 33, 225, 90, 102, 42, 126, 87, 216, 238, 129, 233, 53, 253, 175, 108, 236, 231, 182, 158, 93, 137, 69, 127, 28])},
{encoded: "ZbHW1DLqYmTKdm6ZWm2eKVmqtAPMy1BUwzxK7tFTxoFyNwnfoVX6xUEJFuw71jWEUcSWs44N1XfNmjV7MQDESYPYo3nUyDX1zb7tzueU9n6RSEms663Te4QMwexCk11c8KmwUr9BTFEp5ijaqtJ81wukCyNsvJrhy427bm5ZagX1gGjJaV2TjN9nFyCMJMU77khcmffEYx",
decoded: new Uint8Array([89, 76, 198, 93, 14, 78, 7, 139, 226, 200, 36, 197, 163, 241, 70, 205, 173, 36, 222, 204, 213, 104, 239, 152, 39, 195, 244, 116, 58, 211, 187, 88, 22, 214, 69, 22, 115, 110, 74, 123, 213, 75, 29, 243, 248, 139, 146, 248, 26, 171, 249, 104, 26, 108, 149, 95, 67, 47, 23, 8, 255, 213, 67, 108, 83, 51, 17, 31, 37, 83, 180, 90, 46, 155, 211, 73, 129, 161, 113, 149, 242, 214, 152, 163, 114, 85, 108, 153, 159, 140, 235, 163, 50, 53, 77, 65, 67, 219, 20, 91, 223, 102, 124, 130, 52, 180, 76, 179, 40, 180, 50, 151, 219, 3, 93, 17, 247, 2, 234, 234, 188, 77, 35, 211, 250, 240, 30, 30, 73, 174, 95, 162, 223, 104, 60, 48, 232, 32, 240, 42, 189, 157, 82, 92, 228, 146, 241, 161])},
{encoded: "7cT2cYZLNSz1PDnuZETST9Xa8FBJmqtdBnaMW6LxMbVPPfGwj11bvKFpmw3PAJrEHRcAcHpgkTeW49RdcyukrvAdXK73N9RwzirQmFR7eJ6sN7FMKxfCaMjpsGoqJkWHqoKpfPiWGPKuqsM9nVGonNGGthBvEWDnf4kadsWMCsCyKuDyWuJ7hpm1M52kEgxAm8pLsfFQHVwwzsW7nMoUbCq8LPXW5pvc8tqEH5fpR3UCCzJj2yzqh4TVdE4uHq8eqtFkQUw8ijDmK7zUJrASSWhgqQ1Jt6VbByPMMnU9iewmTTNCpaF798L4q1fpJPCYnrYmtJYC7DorZCrsZhyDAuAgAatz8HpWn3mVfdz8JRRcSD5pgcP214gpyzELjboYKsVFvZdXXyxFwNWoKEkogGNFmUGXUrggDGesYisbbQZBtDiBDskTk3RenqLadAbfWNwLQwAzn6BBSTZsSTJZTNystuakhLbpJzhVRst4FQ7qhyUNemg5KYvTcU3Ne59r6tzrEo1",
decoded: new Uint8Array([35, 186, 226, 2, 6, 79, 157, 251, 225, 131, 98, 6, 198, 233, 222, 118, 169, 8, 129, 140, 240, 17, 51, 140, 182, 244, 54, 183, 208, 76, 198, 74, 111, 3, 138, 203, 99, 156, 102, 154, 172, 128, 115, 68, 121, 18, 239, 156, 15, 255, 174, 118, 25, 142, 201, 116, 162, 50, 21, 251, 182, 143, 244, 156, 105, 40, 147, 12, 124, 4, 102, 159, 176, 53, 214, 81, 46, 13, 52, 36, 2, 164, 221, 227, 201, 155, 236, 234, 194, 34, 17, 116, 167, 9, 37, 218, 253, 36, 101, 153, 106, 247, 105, 184, 69, 46, 14, 184, 87, 47, 23, 210, 28, 34, 106, 171, 107, 210, 21, 121, 44, 251, 129, 155, 32, 99, 124, 4, 27, 252, 121, 95, 28, 169, 231, 181, 192, 9, 134, 186, 251, 142, 175, 169, 71, 49, 73, 134, 16, 100, 120, 95, 60, 14, 147, 89, 233, 19, 163, 134, 15, 56, 214, 3, 183, 245, 105, 218, 5, 9, 82, 127, 173, 143, 160, 89, 28, 28, 114, 144, 105, 211, 101, 2, 220, 21, 126, 106, 185, 38, 194, 237, 27, 146, 229, 66, 177, 125, 50, 22, 79, 59, 132, 221, 241, 242, 194, 47, 138, 223, 234, 38, 222, 23, 20, 70, 79, 17, 212, 103, 210, 55, 77, 177, 98, 220, 152, 123, 151, 151, 93, 152, 249, 194, 159, 110, 163, 173, 26, 31, 53, 119, 115, 234, 4, 132, 112, 141, 197, 236, 0, 78, 166, 72, 165, 200, 50, 194, 229, 179, 4, 252, 192, 37, 167, 104, 88, 6, 249, 220, 60, 58, 155, 155, 14, 169, 228, 161, 208, 130, 59, 177, 132, 236, 254, 215, 205, 2, 45, 245, 36, 198, 34, 135, 247, 52, 217, 254, 162, 124, 151, 118, 182, 251, 79, 172, 74, 5, 154, 120, 217, 239, 153, 75, 86, 145, 234, 246, 34, 201, 49, 207, 103, 250, 240, 93, 110, 1, 232, 10, 180, 32, 33, 239, 177, 20, 248, 75, 76, 192, 180, 101, 210, 201, 151, 27, 71, 206, 140, 126, 72, 237, 233, 135, 90, 183, 189, 5, 205, 140, 30, 12, 64, 44, 210, 61, 19, 217, 78, 247, 136, 245, 161, 241, 67, 119, 21, 228, 220, 24])},
{encoded: "KjaXDuaCNmidmiYkvo3MiuLJhCtinzQtMRr3X1UeJR4CA7wjqjxfQvrtEgvdDDqVMby7ob3coXBgUtySQroJgnuExLDSb2FJjHJhg9y6mzZQbezdJShjak9oUXbKwYUQwoQHLq3kApjzw93Q7nbYWWdMMPwYf1yUtDWCk1YYFJWmPUmBEcSnCko3FpsvoUq21PZRYqdoYVNTC8BwDA7k9GyFQ9XSQeL7d6bWfX3NwAZE68UaKx8tM9RjMNggJvY5crJH8eSgXH8Tvgme7CxzbFXJAfQyaQmsde2HZWwj7WUrx89GxV2vyXsijg5GMdWMrmXVeC1dXr18uYNm5R8TJGMjhKuH8rV6XBVLD4FxTgBa6EmE5AYt99GhQrzHRUtaZ4GEHzNW",
decoded: new Uint8Array([103, 214, 9, 140, 192, 194, 108, 115, 195, 4, 4, 208, 41, 126, 240, 245, 55, 243, 228, 31, 98, 230, 47, 172, 119, 201, 176, 200, 190, 72, 231, 236, 218, 154, 153, 239, 7, 202, 23, 86, 252, 52, 155, 173, 47, 126, 153, 6, 235, 200, 212, 146, 164, 30, 69, 70, 218, 233, 119, 104, 237, 78, 18, 189, 6, 215, 161, 73, 63, 169, 157, 253, 32, 228, 27, 156, 188, 3, 215, 173, 87, 214, 142, 173, 239, 24, 143, 219, 94, 130, 131, 58, 113, 127, 154, 91, 248, 212, 227, 228, 232, 101, 154, 236, 125, 174, 97, 93, 153, 86, 108, 226, 38, 115, 148, 116, 170, 229, 103, 13, 121, 81, 157, 176, 74, 41, 98, 151, 172, 13, 58, 6, 37, 30, 58, 137, 1, 115, 28, 99, 23, 43, 61, 9, 128, 224, 201, 221, 73, 37, 237, 123, 156, 171, 135, 162, 3, 10, 173, 94, 35, 15, 186, 143, 190, 236, 48, 93, 187, 61, 101, 104, 97, 127, 250, 209, 234, 138, 4, 49, 181, 78, 118, 238, 4, 190, 54, 172, 180, 180, 223, 34, 151, 105, 169, 11, 100, 117, 39, 33, 214, 26, 184, 124, 217, 162, 87, 240, 192, 35, 32, 86, 72, 231, 163, 147, 188, 63, 134, 101, 62, 152, 27, 40, 217, 55, 157, 177, 245, 162, 53, 207, 27, 77, 116, 219, 127, 37, 6, 153, 247, 166, 30, 224, 213, 176, 226, 165, 252, 170, 204, 219, 133, 155, 94, 218, 103, 117, 46, 140, 70, 29, 97, 115, 30, 144, 21, 253, 208, 66, 121, 235, 76, 175, 189, 237, 44, 145, 215, 155, 250, 1, 59, 58, 39, 192, 83])},
{encoded: "347hDAmJSjRFbm7rGfcZ38avhKBihp9LgNMP6UqvRu11BS2buMGamLRanvZqGZDyZgcSNc47wcjvc85SwpmsrKsUgotTQJ5UnbGwahnujaFv2Ur5REPAaBLSChfzRwrx2E4X2sruQrLHx7Prw8ZQAuhuD5bCc7mmH7UJcxVPmPMyLtUUYZc9GMx4F3MZHFUr4wkZzZdHB9Ys2mCi4h9pmE1sPfDtDr9yc2JXq4o51QjrurRMZsi5itqJAtAafDPUSUZtLkwq6tBXQ9diCLjStouFSKNEcQJmAWhmziJg3PNPNcs836u5zb47FdUskFAPFAzoBA7t4gNgTe6PzSsNYndbdt1JXZWzYgkMwJnbfVhg9NZMXC6eu6QKFbe1JAhPh8QxTmELbjxEngeACp3wxoWP61LnAmaimHUHWaoaXWdVC7QbyLX9bmPb64GmNMcDETHESNvvucS5vpFJbM58ZsArDA4wm67gDocZhWbLfXwYcBUMjyqFZRm2CAuRWnxkebXRQu5rE",
decoded: new Uint8Array([145, 217, 226, 201, 30, 251, 22, 152, 86, 91, 227, 182, 224, 223, 130, 9, 44, 172, 141, 254, 54, 121, 27, 160, 177, 46, 178, 108, 92, 5, 122, 123, 136, 215, 212, 146, 37, 227, 87, 217, 153, 45, 208, 42, 43, 131, 115, 141, 110, 190, 149, 216, 210, 225, 36, 103, 144, 68, 23, 155, 247, 102, 201, 42, 14, 77, 100, 210, 34, 250, 234, 248, 98, 137, 200, 158, 224, 91, 60, 228, 6, 35, 176, 14, 138, 210, 155, 88, 69, 245, 183, 108, 92, 118, 45, 172, 159, 93, 226, 136, 184, 124, 64, 160, 55, 52, 242, 243, 121, 64, 0, 211, 55, 67, 46, 171, 202, 73, 86, 246, 129, 46, 172, 144, 96, 80, 191, 210, 165, 182, 141, 204, 165, 46, 123, 22, 94, 190, 142, 52, 117, 77, 169, 137, 160, 38, 162, 24, 75, 136, 17, 201, 87, 136, 69, 180, 61, 227, 48, 13, 76, 96, 38, 123, 205, 183, 108, 32, 223, 165, 103, 10, 245, 30, 116, 102, 72, 241, 40, 207, 188, 12, 5, 202, 90, 103, 75, 166, 113, 224, 114, 74, 115, 81, 163, 173, 1, 171, 180, 110, 147, 232, 105, 43, 102, 188, 70, 41, 149, 15, 73, 64, 119, 161, 93, 48, 188, 124, 83, 113, 217, 135, 47, 48, 120, 137, 87, 243, 221, 165, 202, 87, 55, 62, 19, 214, 132, 126, 245, 87, 29, 240, 236, 103, 53, 214, 105, 54, 33, 175, 41, 92, 224, 90, 218, 242, 191, 206, 144, 91, 54, 87, 44, 248, 162, 73, 115, 3, 67, 46, 142, 51, 94, 50, 47, 161, 125, 2, 104, 88, 75, 247, 143, 239, 96, 163, 247, 102, 221, 233, 222, 122, 221, 230, 189, 91, 223, 120, 184, 110, 91, 64, 184, 139, 77, 243, 253, 141, 224, 247, 6, 153, 191, 95, 40, 148, 145, 145, 130, 8, 21, 126, 98, 113, 98, 173, 104, 193, 210, 154, 219, 228, 196, 217, 124, 22, 32, 155, 155, 124, 1, 171, 71, 0, 204, 9, 36, 219, 93, 63, 243, 171, 81, 224, 37, 156, 232, 15, 81, 53, 1, 183, 107, 176, 243, 203, 82, 213, 59, 230, 193, 148, 73, 41, 99, 223, 77, 241, 215, 26, 199])},
{encoded: "2CAzekfGJ3byRsvogJW9irtmpc9btzJnQZSozz5m4KSnok5d3f1BCKrBpwGW4o4V4z39myYz89RkLNPZTEoKxKcszZG9a4pQQ9PmuV1bim9Wyfv3fG5pcnmiwSe1211iV2ha7Ab37H7vFuZKneZ949aeUbKAkJeGVzcEmeiedM9E8ZxfA5MKhFWitR1LKokNHMKbNwfoNpnzqNhx5F9v2VXa7t2RWhhuWLJUFWYqzAhc8tPtWKh9qZ8JjswU6vQrwzzqqoJoTJ1HT1BM7MmBZ66qhBwNSUGMxfNR23Nve7zNKTNcZQg4zdMETcDSdciigEWo1a1sGiiPwzCdrx6UuVteNdACWfrXKMJuqeZWsKhhxXm2Gsp5fKDfGYiimiCWh1NdYSi1rHdeKtwNHbYd9itGNQnzsrjuptjAnjBnRmt4Pzw5Zrom8Y4kyqxWjYnYXrisTxxf4h5C87i5yHHFYafmozH3kG9CVVGJ5b2fLDk7GWAhGLRANeo2QcPqZT2RhdNZogZSokTKo6tJ9VNwi4c2pTVsuw7LcPACEoL1ZdWQ7s9GiY66fsQrvCYBhtEK1qXQU5WF4fosxbEAxL4Bc2wAAky8rNg75oippdxiZHCRT3d5xPM9g5t6WrERDt9xywh9SSC2szYABhTmPFRQzeH4hwUp5e6Y2PTF9WHTpMdfXE9V8qaRAMqiiMGwDBF6sNhynBFn8EHHKAzftSia2iQbCspmcf9TFYgoAJYoBy9uE2s2HAxmAfPy7f5jNtmFsMymJiwcZK21rVWCR2tVue5TpU5vN9DwrnYNRzoiqXGJsVJvWxqzN9NVgGiPb3Qdyused1WTKbNc6Jh3yUGJt34wzKrXEACMSXVcFbc8p6npoZmffXgLyhn7B9x8fbQSAhyjZx5cXfn2rmGAqmxaEAtu8YYbGVqQ4j3G67mxjLLVLzRA792T7JCFHGbEZhb8gVRCH79DgBR4c1x9aZWpCi3TLs91bpR67QHmQctAsmie1XVhmwzM9PRArwd4hW8AkxsytcvU2rwdtMvGv1Fq96fMc1C2WxVZqA2nnE8gYvRd3DEa9JykbGRQRCivgp9NA242M1F36Y69gLDYi9yC9yFDVw1wpke9Wu85dXm5cntccfooxM33rYcDzREBj1PJszW8QZBhhoduc2HV7d9WxoPdkC6ZiKg3rv6fnpRKPyBuw26KNg4WfMjs9q5Nv3XB3YLsTMNGTSBNvNDGsznKybgwjz",
decoded: new Uint8Array([64, 97, 118, 134, 60, 51, 117, 34, 104, 53, 199, 217, 149, 104, 134, 216, 232, 235, 170, 222, 235, 248, 97, 184, 185, 101, 12, 212, 46, 27, 133, 49, 106, 93, 60, 111, 186, 98, 66, 156, 96, 61, 233, 215, 26, 118, 254, 194, 70, 62, 160, 181, 237, 80, 214, 85, 188, 4, 14, 222, 2, 79, 81, 7, 202, 50, 121, 31, 50, 179, 91, 92, 224, 206, 84, 21, 207, 128, 169, 196, 235, 199, 149, 133, 147, 163, 15, 192, 148, 179, 104, 157, 107, 185, 153, 246, 216, 164, 42, 167, 119, 161, 206, 160, 42, 159, 122, 252, 233, 108, 174, 225, 170, 182, 179, 166, 88, 129, 59, 161, 242, 61, 105, 231, 191, 8, 56, 75, 202, 170, 33, 167, 89, 95, 66, 149, 252, 100, 231, 110, 146, 162, 227, 28, 217, 33, 198, 11, 37, 76, 136, 6, 251, 32, 203, 33, 168, 223, 116, 197, 6, 253, 143, 113, 215, 173, 105, 201, 174, 95, 103, 104, 25, 207, 81, 145, 150, 204, 6, 225, 217, 245, 236, 201, 98, 218, 228, 198, 245, 167, 40, 123, 12, 201, 148, 175, 60, 225, 66, 218, 135, 71, 22, 161, 35, 255, 146, 200, 200, 78, 20, 245, 159, 247, 100, 13, 238, 246, 64, 219, 241, 28, 174, 160, 148, 208, 67, 99, 38, 89, 1, 95, 217, 22, 204, 114, 5, 228, 9, 85, 102, 29, 136, 58, 52, 15, 244, 177, 139, 8, 214, 91, 5, 48, 67, 125, 241, 146, 84, 70, 245, 35, 217, 105, 216, 180, 227, 131, 176, 16, 167, 202, 166, 17, 152, 64, 174, 38, 46, 25, 86, 42, 233, 62, 177, 138, 164, 111, 63, 127, 237, 214, 14, 82, 225, 254, 221, 63, 24, 25, 197, 46, 145, 149, 229, 110, 215, 58, 103, 155, 156, 138, 241, 161, 238, 138, 87, 168, 39, 45, 203, 82, 231, 226, 228, 219, 23, 235, 135, 102, 250, 129, 56, 157, 145, 157, 91, 231, 177, 3, 233, 179, 214, 24, 3, 74, 72, 2, 15, 251, 175, 137, 131, 205, 139, 211, 251, 235, 70, 110, 119, 141, 241, 252, 150, 71, 102, 39, 146, 249, 152, 97, 120, 97, 19, 40, 208, 134, 173, 12, 33, 16, 168, 125, 139, 122, 166, 103, 76, 130, 54, 153, 123, 213, 234, 186, 88, 35, 238, 119, 252, 222, 216, 204, 23, 23, 87, 50, 47, 157, 156, 45, 106, 28, 106, 140, 222, 96, 84, 70, 251, 33, 121, 216, 98, 53, 90, 171, 193, 104, 244, 196, 85, 193, 240, 101, 235, 193, 213, 37, 172, 82, 123, 240, 135, 224, 65, 73, 47, 106, 172, 116, 114, 162, 38, 241, 136, 102, 165, 209, 170, 87, 89, 165, 128, 43, 40, 170, 48, 114, 134, 21, 209, 209, 157, 108, 15, 73, 148, 132, 195, 179, 4, 31, 201, 2, 66, 111, 32, 194, 144, 37, 165, 85, 19, 195, 233, 47, 97, 112, 75, 143, 134, 169, 137, 248, 128, 118, 159, 39, 19, 214, 190, 90, 240, 64, 9, 72, 153, 5, 122, 6, 190, 79, 16, 237, 239, 152, 224, 81, 195, 221, 199, 147, 8, 178, 92, 98, 22, 137, 67, 37, 181, 150, 39, 108, 243, 18, 125, 212, 166, 126, 123, 40, 70, 50, 36, 184, 230, 207, 108, 6, 131, 160, 48, 228, 205, 62, 7, 219, 190, 202, 151, 212, 214, 7, 174, 253, 132, 27, 56, 1, 243, 42, 180, 166, 253, 173, 203, 240, 73, 69, 85, 148, 123, 104, 140, 63, 106, 75, 216, 221, 47, 33, 40, 205, 79, 90, 39, 149, 230, 71, 116, 238, 21, 174, 126, 99, 222, 211, 40, 83, 137, 13, 98, 21, 49, 117, 44, 255, 8, 96, 37, 215, 136, 136, 211, 237, 208, 129, 103, 200, 10, 85, 48, 42, 60, 26, 243, 104, 98, 125, 169, 200, 110, 61, 26, 49, 245, 73, 180, 58, 254, 163, 24, 10, 114, 103, 98, 171, 61, 60, 211, 212, 146, 109, 159, 169, 116, 171, 79, 127, 220, 0, 129, 108, 82, 181, 199, 244, 44, 32, 214, 17, 113, 240, 113, 33, 133, 117, 196, 97, 75, 178, 246, 152, 221, 70, 154, 184, 208, 66, 182, 67, 19, 61, 51, 210, 243, 120, 48, 226, 80, 45, 191, 71, 135, 81, 157, 170, 186, 0, 35, 168, 185, 207, 192, 217, 46, 153, 136, 77, 163, 235, 146, 125, 43, 14, 36, 29, 166, 21, 191, 188, 107, 227, 117, 47, 201, 107, 223, 156, 206, 198, 255, 174, 231, 109, 129, 38, 88, 64, 195, 120, 8, 93, 239, 124, 45, 104, 35, 183, 157, 9, 181, 11, 190, 115, 38, 43, 199, 172, 54, 255, 112, 158, 106, 61, 136, 167, 5, 8, 46, 47, 51, 16, 171, 83, 233, 121, 196, 165, 250, 186, 117, 221, 32, 20, 217, 144, 165, 86, 135, 19, 22, 196, 127, 57, 48, 222, 216, 151, 104, 79, 121, 82, 240, 18, 147, 178, 68, 224, 201, 241, 20, 75, 58, 153, 217, 146, 233, 214, 245, 62, 73, 40, 125, 230, 17, 179, 18, 98, 13, 236, 94, 173, 164, 115, 82, 68, 122, 14, 204, 33, 235, 81, 175, 47, 100, 61, 79, 63, 67, 116, 160, 141, 147, 3, 43, 38, 218, 67, 253, 168, 131, 106, 154, 55, 244, 160, 98, 188, 246, 16, 211, 143, 96, 36, 141])},
{encoded: "LQGNYFw5MLtvtHizJkC1zbLx27Kkbk4GBvfs2ajAzyojMd4rH19GG8MwUGCnTxVTRHoSBdm1qNeC95CE9U7PidVH7Y19G7LzxWVwbY1NTi34NfXJaUW1vZgVC5knAEbzZ97HW5eTnbiakqXfZDtwK3q4HjZuBmXXgnx91BWRHWkDgV24g9mnnTmNsmBEWcDhJBcy4oYLCHrttQRrwLMtBWMUQZ4BaRH8mhtivJBv3HEVGr5D7Mi3uSYDjESRdzJMFW5bhq26qbnoRRwSCxU8QDTmFn1EuePa5PY881HeU1W2WK6LHjVjapmN9s1jzo9iFUR25cTqST2YtM5GyrNfK8GYk87pQtRhjzMfHPM9cNuGVpERmLpTXKs4kVW3gyDoRC2FNMKLv8BvHHE759zYNVaXdCPr1KWLS3hNL9ssqBmcyjaQ4Ycmgx8VC6h8mmR3Q71Fzk769MyEa5aatZSqeHw4x6crzRxDJF6H4ENMgYiRJji8fpSFxHw4qkHBKfYGzG8mqRJLdMhkfAotTGMY6yeePdnh5ep2e7SNTaVmbDAU88a3oqsCC326DcrMS1ThSiMnFKxgPVn9VhBfKf4GhtjHt1PqHPyzFQB1mm1LPSwXHv9Wd5cY7qiXkt1niyRgZZa7h3TwHPFJhHaqT8MqGgAoWeQq5b6vTR9WvbMHRHm3Jv66Ve2cjRupW89prvsFr639myJ4XzN4498JhJXjLEb9GKMBxuriuExZz97SyiJUvss8FMceVSRUw5pcCfX1bEymwUssMiCLjcLpTKrCV59y3ppwzhsmBK4QqWaCTQdm3nQhaeK2CW98msrKo9TfiTPWcXJr4b8baUcpGiAv2j8k2wcFh611TNYNZCHjZgDXGMcer7CQJJ8AUK9sSV5D4ruYBsW4zwgXJWfRXM7iQqoQfzf8Swap7HdT9hN9TBRVvxo5gctm3aM2LjoS7CULX4aEkUa3B76",
decoded: new Uint8Array([91, 191, 244, 17, 7, 75, 47, 175, 8, 118, 195, 93, 48, 169, 253, 109, 208, 229, 60, 164, 48, 193, 194, 161, 40, 118, 153, 137, 200, 219, 121, 231, 136, 88, 101, 80, 87, 93, 90, 78, 80, 206, 61, 230, 253, 54, 103, 83, 234, 16, 207, 88, 155, 155, 193, 225, 75, 184, 77, 248, 230, 4, 192, 238, 22, 170, 4, 127, 52, 146, 27, 16, 46, 193, 56, 124, 5, 19, 120, 199, 130, 30, 108, 222, 10, 252, 26, 199, 199, 167, 219, 0, 240, 44, 173, 178, 230, 122, 136, 49, 162, 65, 61, 73, 14, 137, 142, 151, 69, 105, 56, 35, 226, 120, 158, 91, 98, 147, 174, 77, 197, 1, 227, 66, 71, 207, 228, 116, 181, 142, 198, 23, 80, 14, 107, 216, 169, 30, 152, 13, 227, 103, 142, 177, 40, 169, 5, 74, 164, 112, 27, 83, 248, 96, 199, 175, 247, 8, 209, 206, 86, 132, 96, 113, 130, 36, 196, 156, 14, 136, 141, 32, 35, 146, 233, 126, 15, 131, 28, 42, 232, 0, 23, 167, 242, 35, 24, 175, 79, 166, 151, 236, 184, 60, 174, 131, 215, 66, 205, 217, 172, 19, 17, 224, 163, 166, 241, 248, 252, 159, 108, 102, 238, 155, 82, 4, 115, 252, 2, 108, 58, 165, 138, 20, 60, 83, 155, 8, 253, 68, 210, 121, 225, 127, 206, 132, 189, 95, 181, 55, 152, 226, 64, 246, 224, 179, 189, 220, 92, 230, 14, 163, 123, 120, 221, 228, 90, 30, 64, 102, 249, 176, 177, 211, 27, 66, 99, 59, 196, 6, 24, 15, 89, 0, 162, 228, 220, 221, 21, 134, 246, 132, 151, 46, 5, 70, 18, 66, 1, 62, 202, 246, 253, 180, 44, 154, 73, 109, 237, 175, 253, 218, 154, 35, 101, 119, 239, 176, 51, 221, 127, 118, 38, 223, 49, 79, 63, 173, 85, 175, 174, 72, 239, 40, 78, 40, 52, 222, 39, 5, 229, 170, 64, 213, 5, 234, 122, 148, 126, 94, 18, 231, 63, 45, 180, 7, 87, 85, 39, 119, 202, 8, 206, 193, 223, 115, 127, 7, 236, 134, 101, 155, 20, 164, 161, 173, 110, 176, 10, 59, 31, 39, 49, 117, 141, 216, 216, 213, 3, 87, 232, 39, 189, 179, 181, 9, 100, 107, 32, 64, 104, 194, 43, 253, 118, 230, 75, 73, 137, 195, 9, 234, 199, 124, 61, 251, 161, 64, 199, 242, 74, 106, 105, 155, 83, 207, 140, 224, 33, 28, 209, 121, 9, 147, 12, 44, 118, 2, 113, 5, 181, 8, 216, 219, 99, 103, 240, 160, 100, 237, 184, 65, 97, 116, 244, 130, 142, 239, 13, 248, 34, 2, 224, 129, 216, 179, 97, 233, 141, 254, 223, 71, 151, 192, 82, 234, 175, 61, 14, 230, 196, 124, 193, 63, 165, 193, 122, 174, 17, 38, 219, 181, 29, 100, 173, 105, 36, 109, 225, 100, 132, 53, 49, 209, 112, 92, 238, 96, 104, 224, 47, 40, 226, 114, 237, 152, 21, 102, 106, 100, 79, 198, 158, 184, 123, 234, 182, 78, 34, 194, 188, 250, 120, 77, 73, 112, 190, 76, 50, 0, 192, 2, 198, 121, 179, 161, 152, 244, 104, 227, 200, 176, 61, 183, 181, 108, 32, 217, 62, 203, 204, 94, 249, 251, 223, 210, 155, 43, 232, 162, 41, 146, 11, 158, 68, 221, 237, 165, 23, 203, 107, 53, 138, 91, 90, 113, 204, 64, 195, 60, 138, 133, 178, 76, 84, 250, 77, 119, 212, 91, 220, 248, 136, 131, 208, 50, 208, 72, 176, 160, 56, 45, 90, 188, 237, 199, 32, 136, 202, 191, 2, 114, 174, 18, 47, 187, 81, 110, 58, 110, 146, 212, 247, 143, 150, 245, 99, 202, 108, 216, 160, 240, 23, 242, 127, 146, 74, 112, 129, 5, 6, 67, 88, 86, 169, 248, 93, 65, 157, 45, 12, 23, 252, 186, 69, 35, 29, 172, 19, 41, 199, 204, 193, 182, 58, 244, 61, 17, 10, 83, 97, 144, 116, 86, 31, 136, 28, 210, 151, 174, 0, 120, 25, 63, 218, 152, 71, 80, 76, 125, 2, 108, 244, 46, 43, 225, 32, 154, 98, 12, 79, 79, 202, 173, 203, 174, 6, 55, 44, 116, 73])},
{encoded: "khUs8oEeTJZmNdd2tU1xrLTBH3jTabPK8mDmCW8fEDLNiaBxfK6673eTPVxHA9Z7hmArTdB3PzmdEXaEJrZqXTTFegqERgHNrzd47u1se3H85aNkSEF9XQ2oSYjpcoPFFQuZQLrYeVC1GxL9Kwqv9LxF2QnX7E4uigwxpHoxKHyqZEgMsbKxxfb9fP2gFf3T1coALgEnZBDcsKo2zs1j9fmmqiCoApDcGJKGw6d9iVTfRAB3VKxApW9XQdusgm6JegWDqah93M6kDqyAVdJ25n6i9pENXe4JmgfDcpwj1yiwCfEzsdzYd3EN8VtvNQqpYyr5moZXPBxJ2qV4gsMEiou3P25kvz2GeVbEgFjGw4ieTFfgJvqRnytGQ4gVCcsdFx1jWQL7S8RFPNEb6qV38GoKke1KWcvqBsUE8LQ8yAM4NansjF767ECDx19P4QUmL25jfUUFHUgvGpSWUJbtuR6csTfHoiDMnzpNGA8DrKyUb81qBMxdQUhLrvqhhBz6fgVTFR7iDMUdqKekRt2BbzWmRTmGvsyMi5n7LjjaKWuaDPQHbCKzRce2oW47Nvkj9MTsnE8TbgwhN5wwD58gje7joSLfQCAgr431LX5RcKEnUNzgf5JQauNNZHaLmztQPs3WeK1V2bxfn3obxspeVZ6gT95sjCLRqz32wchhppGQxtnbpndkg8nGjsCdmAdECHrUVomzvxXqFKktC3AgWniVpD5p3LEEfrKnfetAniWGQkfYCfUamYiL9LymR5wYc7L6e1EdivYAp3gdUstVB86U13B5vXvqXTxY5BpC7FvjjLzAuSpeoVtwWmpK5j7xisjjhJ68UCpvBn57WrrKV1YwV4Z1D6Le4MFZKEEYFQPv5fFofWegrzaFax6rRPu8gndrJnSTZ2rfk8Vy3a4xt9ALAx1LNHC9RiKiuAXwY3wcDJ2kJ",
decoded: new Uint8Array([166, 251, 130, 31, 73, 232, 113, 147, 207, 83, 157, 31, 29, 218, 252, 66, 250, 84, 151, 81, 155, 7, 178, 80, 161, 226, 252, 52, 139, 119, 82, 43, 232, 65, 241, 235, 145, 114, 193, 1, 250, 235, 138, 104, 60, 194, 162, 230, 243, 225, 128, 91, 27, 63, 90, 132, 109, 109, 64, 41, 198, 127, 149, 112, 17, 200, 168, 199, 124, 151, 39, 134, 207, 7, 102, 40, 13, 4, 167, 1, 74, 232, 233, 69, 172, 157, 144, 155, 164, 66, 179, 162, 114, 22, 33, 81, 195, 196, 11, 110, 57, 79, 14, 37, 165, 117, 215, 2, 47, 122, 221, 30, 144, 47, 37, 111, 179, 245, 118, 63, 175, 236, 160, 74, 119, 214, 216, 148, 125, 90, 5, 26, 201, 230, 152, 41, 6, 3, 144, 135, 135, 74, 243, 1, 129, 4, 93, 17, 24, 168, 222, 240, 235, 110, 78, 69, 48, 209, 118, 215, 19, 92, 67, 15, 226, 176, 254, 47, 255, 168, 45, 250, 239, 78, 17, 45, 13, 126, 77, 49, 252, 240, 69, 58, 129, 29, 137, 176, 15, 123, 177, 61, 30, 249, 88, 17, 123, 185, 253, 18, 229, 58, 118, 17, 120, 129, 10, 227, 91, 194, 138, 37, 161, 30, 103, 26, 175, 191, 207, 245, 224, 44, 94, 98, 0, 208, 210, 247, 52, 161, 179, 171, 124, 115, 129, 107, 39, 35, 46, 111, 142, 196, 223, 240, 157, 2, 163, 167, 104, 60, 143, 252, 200, 187, 208, 25, 222, 49, 31, 193, 241, 27, 215, 139, 228, 82, 178, 247, 3, 247, 179, 138, 33, 160, 7, 192, 116, 241, 215, 39, 28, 159, 56, 127, 114, 55, 224, 207, 235, 195, 81, 97, 235, 170, 255, 19, 75, 114, 246, 230, 92, 25, 0, 174, 203, 200, 61, 186, 159, 86, 64, 203, 55, 182, 255, 30, 9, 145, 125, 229, 118, 116, 199, 46, 11, 86, 17, 43, 14, 101, 179, 200, 199, 99, 162, 217, 186, 119, 175, 45, 93, 191, 10, 139, 207, 120, 104, 49, 79, 228, 222, 71, 108, 48, 5, 12, 117, 46, 165, 137, 51, 67, 97, 36, 223, 55, 186, 218, 152, 122, 156, 135, 189, 98, 27, 214, 148, 164, 124, 148, 74, 134, 202, 244, 81, 28, 240, 151, 176, 89, 165, 41, 103, 242, 249, 120, 127, 1, 63, 155, 90, 96, 90, 232, 15, 160, 226, 27, 103, 25, 177, 234, 184, 242, 6, 3, 153, 230, 187, 247, 87, 216, 236, 68, 138, 220, 37, 210, 13, 158, 154, 4, 224, 238, 39, 250, 150, 20, 188, 183, 31, 48, 78, 228, 29, 185, 138, 62, 133, 119, 170, 131, 37, 5, 224, 239, 102, 152, 53, 96, 121, 12, 214, 47, 72, 50, 25, 24, 228, 119, 42, 131, 204, 72, 115, 100, 72, 46, 229, 250, 210, 191, 19, 53, 128, 164, 106, 108, 194, 39, 49, 169, 82, 94, 23, 251, 220, 188, 70, 47, 247, 28, 51, 240, 51, 70, 78, 194, 117, 222, 1, 169, 90, 46, 122, 119, 44, 119, 163, 152, 103, 129, 6, 229, 46, 204, 56, 205, 140, 76, 34, 31, 8, 136, 100, 240, 20, 58, 210, 64, 54, 202, 195, 96, 103, 128, 22, 113, 160, 61, 254, 144, 140, 143, 210, 198, 55, 94, 224, 194, 82, 82, 197, 28, 9, 17, 136, 144, 160, 6, 35, 158, 52, 166, 185, 118, 134, 27, 169, 140, 27, 187, 122, 226, 52, 131, 30, 207, 101, 49, 30, 97, 80, 125, 140, 44, 132, 180, 141, 66, 29, 244, 90, 212, 150, 166, 153, 241, 249, 111, 144, 8, 63, 96, 72, 33, 194, 87, 136, 55, 241, 255, 138, 214, 67, 59, 146, 62, 77, 188, 251, 79, 12, 154, 199, 99, 251, 112, 198, 64, 76, 230, 65, 127, 162, 225, 46, 30, 91, 27, 72, 5, 179, 151, 173, 19, 160, 177, 196, 203, 190, 163, 82, 136, 146, 90, 216, 6, 226, 23, 92, 213, 18, 170, 55, 30, 61, 119, 231, 123, 123, 193, 21, 252, 188, 20, 6, 232, 177, 114, 70, 187])},
{encoded: "8uw89RswoHa3Jct8g1jrdyYEfZBc6hGwcqAxFp5ZbR9VmzZxV1Viy2RLBmCYp9pbhxg91e9zxkT6h4AUcoLFQTW3UNfh2RZwnWERQykxiYhNNjQuRrcuqC49QyhAGsbHnB7jpC8qMgU1UGX1xumVoc3xDvGmn59oCj6ExhmdGsMDVwU3Cj36dHZQXyUHGC1peeCchVzAkbNc7EnFS343ZLoxarmSW5ushM2vP1K715tdEaXaTxpJYb2VhBf6o9CcJZbhUPzexB7LjvxZH33rTP8S3eqpJALbA83y8xsDW6DZ4XbwLfsDxTLP3cWz4UcRBaS2rfSbk82WiowkbNYAaHHgXUQKPrsHVi1ZHMBp8wich9jRJe7cXULDAHabY3KTryxVbMKfcNBsaf8MKFh6uyiBDGdFAgy5itr8xVZMroTxorNtUJ12He8LiU1YemxELSr5RL8UV7cVdVxujtHKnRHudpfu6ULCX8uSzrsZ1zYYoSf2DPmKU3s16XmZ5MVacKhtdKBADLUCB7VGtvN5surpfFtvcq1rFEv5QqMM9CMp199voAj5TECXdTmAv5XyL587ERTKJLRgkNrYmfSmY6Lsq9UBoKm11S5HP4Hgp2iNmfHstsij8xEwBraZ2tUxwyMsqzQVGDa2kvmRoLontomDCnpKb9ggE9L2UCf4PCs2iCGr9uVrGVCWodUk1161F1o9HD9B539RPpnLc2ZC6bDdnQGb1S9q6qTvx6DEVTCDUxBDnsWYocEYfsuPF8GgszqeEhsFeEH48HnrSESVP2gDL8oQEGNXD7qPeWmJhdCXvkH88CYFkoP1DmbDLmaeBhoSkNec6bRHuqoBTpazocLnhE92MCSLQPDKctAVEkQDqofBcLn75Q8SvSSZ",
decoded: new Uint8Array([87, 35, 67, 92, 185, 37, 198, 39, 2, 85, 117, 35, 80, 244, 101, 219, 224, 83, 243, 2, 204, 61, 95, 70, 25, 40, 101, 67, 248, 126, 227, 186, 62, 13, 64, 16, 27, 200, 9, 253, 153, 231, 172, 72, 211, 46, 99, 124, 252, 48, 18, 105, 42, 2, 84, 81, 13, 175, 73, 48, 174, 23, 245, 84, 208, 116, 255, 17, 76, 17, 179, 174, 63, 213, 234, 33, 194, 100, 1, 254, 175, 70, 255, 5, 196, 112, 22, 184, 207, 71, 168, 199, 66, 241, 205, 10, 243, 154, 124, 112, 209, 249, 212, 20, 71, 190, 50, 166, 221, 0, 215, 151, 91, 78, 3, 161, 206, 197, 187, 88, 5, 178, 123, 49, 132, 58, 182, 183, 243, 225, 95, 244, 135, 105, 28, 29, 178, 185, 105, 75, 13, 247, 222, 46, 30, 102, 213, 187, 89, 86, 155, 33, 112, 205, 23, 163, 246, 23, 31, 190, 106, 80, 45, 208, 126, 154, 199, 226, 179, 59, 54, 250, 124, 143, 160, 96, 201, 210, 14, 242, 150, 205, 138, 86, 103, 125, 58, 173, 52, 183, 165, 255, 83, 102, 67, 41, 218, 242, 1, 128, 249, 144, 3, 248, 0, 164, 137, 64, 154, 16, 92, 58, 75, 249, 74, 94, 182, 206, 132, 230, 103, 205, 203, 49, 179, 90, 49, 41, 11, 171, 255, 158, 127, 151, 136, 230, 67, 86, 176, 176, 86, 86, 213, 242, 77, 176, 195, 113, 109, 125, 42, 66, 122, 210, 213, 140, 54, 137, 138, 104, 9, 177, 13, 111, 253, 56, 67, 43, 253, 228, 91, 30, 174, 251, 27, 21, 19, 20, 144, 246, 212, 128, 8, 68, 250, 37, 144, 197, 176, 117, 202, 222, 121, 113, 52, 136, 171, 119, 42, 47, 81, 179, 45, 115, 0, 148, 65, 111, 210, 12, 70, 99, 227, 22, 55, 186, 40, 1, 83, 83, 114, 185, 44, 110, 213, 18, 213, 97, 210, 13, 50, 82, 23, 236, 50, 151, 97, 87, 62, 39, 182, 42, 204, 249, 139, 218, 131, 224, 2, 230, 184, 193, 35, 72, 182, 200, 214, 90, 28, 45, 194, 151, 155, 57, 38, 181, 25, 40, 124, 165, 143, 33, 189, 81, 90, 253, 189, 84, 7, 59, 47, 199, 253, 56, 182, 89, 210, 140, 118, 20, 55, 233, 130, 254, 56, 172, 40, 114, 10, 47, 185, 72, 58, 22, 236, 134, 91, 150, 178, 75, 127, 240, 214, 231, 105, 129, 32, 57, 10, 208, 91, 79, 47, 199, 248, 30, 47, 63, 209, 158, 110, 221, 178, 214, 136, 121, 9, 20, 39, 9, 31, 136, 26, 153, 12, 2, 114, 167, 197, 73, 232, 109, 145, 121, 101, 3, 190, 33, 235, 200, 239, 62, 43, 139, 163, 16, 250, 76, 192, 192, 60, 90, 141, 191, 3, 132, 26, 62, 160, 219, 88, 73, 138, 238, 216, 107, 80, 119, 125, 248, 130, 23, 38, 193, 148, 42, 76, 248, 62, 93, 16, 237, 101, 169, 6, 248, 241, 68, 189, 211, 12, 47, 229, 109, 220, 145, 138, 51, 240, 239, 131, 201, 69, 121, 110, 16, 133, 37, 229, 116, 119, 4, 61, 12, 139, 64, 34, 171, 191, 28, 108, 57, 84, 124, 129, 52, 240, 108, 23, 53, 205, 206, 160, 138, 155, 169, 42, 217, 39, 225, 188, 200, 90, 175, 64, 84, 62, 34, 228, 94, 31, 175, 197, 56, 41, 71, 198, 148, 35, 140, 238, 47, 225, 173, 32, 72, 234, 159, 48, 24, 4, 3, 162, 144, 137, 231, 129, 208, 155, 224, 129, 33, 238, 119, 56, 25, 152, 181, 88, 98, 70, 133, 34, 101, 114, 65, 7, 65, 241, 47, 2, 239, 56, 194, 235, 251, 74, 169, 244, 66, 167, 160, 20, 145, 211, 229, 106, 105, 115, 177, 171, 91, 98, 173, 86, 1, 6, 154, 80, 51, 181, 76, 70])},
{encoded: "Rqj31r35D8sMaNf7Jf4FgRVmMzZV8Pcq5xZJxvZ5vwKUSNo1PeP5EuJ2LDs1JTVJvZMqBFn2nqBNxibh77Var62fNvusM6PP5G256LWwYhbcLQq2CPA8h4EzUZvdwmUMrdxVKcvJUQqA8yNcqiDduwczJ373pepiKX3YR1qGZ7ogp5fdLNBCN64Bppywzws2HvkdTDggMsaX5wHSWFCzMnkRgVu8TaX6icuEuXHQYZEuLucTokxVcTdUtELsWUoaspazpWFyTbPk9KB8DWG5YfMsisjYhwayGeYNY8Wcs6uwCGL349RUL5gVPnieWVC6bZifncrspsPfXaiixZY6jpaWANiz2UaBtPaZDGDH9U4mtWUk7jyZC6RRaHdXrwPnbdFhxvUfx2gJXVQaXZaJWuSzjrg6wsePPdh7SGYKUhyRNhUg91GCny8xMZzWiBdXVgtLAn4NK6KdhnyB7MqvzjpfoRGpVGVLRAeT6q1gm1g8BwwDBTZaF45LREggYWMKTouSqreX94yrGyJtZxKyiToT23ddqcRUqDVSB64BfuHAPhtH8LCtDdri5bZ",
decoded: new Uint8Array([205, 156, 27, 254, 158, 35, 116, 207, 41, 70, 11, 209, 181, 111, 144, 105, 197, 167, 242, 132, 139, 60, 137, 38, 120, 14, 37, 254, 213, 76, 224, 216, 188, 7, 141, 164, 197, 163, 211, 139, 104, 142, 183, 192, 140, 68, 105, 46, 121, 108, 40, 4, 7, 144, 91, 39, 154, 83, 173, 34, 118, 147, 52, 143, 75, 146, 88, 238, 142, 255, 233, 50, 13, 184, 197, 119, 12, 7, 45, 99, 255, 16, 44, 220, 41, 143, 37, 252, 117, 20, 58, 33, 204, 202, 205, 40, 223, 239, 238, 198, 22, 188, 70, 154, 128, 70, 183, 161, 223, 105, 137, 186, 157, 129, 119, 42, 117, 19, 157, 94, 80, 110, 253, 114, 176, 131, 184, 122, 105, 107, 110, 118, 228, 84, 48, 12, 82, 222, 37, 108, 234, 154, 222, 76, 86, 92, 170, 45, 127, 168, 67, 232, 45, 49, 56, 188, 16, 184, 124, 67, 168, 171, 6, 238, 216, 140, 70, 25, 132, 64, 157, 56, 27, 71, 216, 46, 110, 186, 156, 233, 110, 93, 242, 140, 197, 149, 136, 29, 97, 162, 15, 152, 165, 42, 25, 179, 73, 165, 118, 87, 100, 213, 40, 6, 202, 243, 179, 179, 131, 67, 115, 9, 70, 15, 160, 178, 85, 177, 83, 59, 32, 35, 226, 178, 217, 67, 2, 83, 166, 224, 33, 176, 10, 236, 77, 222, 223, 149, 197, 237, 179, 228, 60, 112, 101, 52, 77, 215, 60, 43, 152, 172, 225, 57, 148, 62, 227, 210, 165, 29, 181, 95, 58, 99, 139, 201, 134, 35, 221, 104, 37, 3, 82, 16, 210, 194, 206, 9, 243, 204, 224, 32, 176, 224, 188, 36, 48, 208, 95, 122, 189, 99, 16, 84, 165, 67, 240, 55, 237, 153, 49, 92, 12, 44, 55, 108, 78, 142, 110, 243, 121, 9, 178, 141, 84, 170, 46, 30, 39, 228, 46, 87, 200, 211, 133, 157, 227, 74, 164, 139, 54, 73, 252, 240, 177, 245, 222, 11, 225, 160, 146, 134, 114, 172, 247, 224, 253, 249, 53, 6, 132, 205, 72, 89, 180, 152, 131, 119, 100, 107, 254, 147, 34, 132, 25, 190, 253, 13, 168, 166, 95, 91, 233, 67, 209, 137, 189, 8, 251, 246, 129, 130, 98, 190, 165, 171, 78, 5, 120, 121, 62, 97, 173, 126, 6, 2, 17, 207, 154, 101, 15, 20, 155, 97, 100, 241, 141, 43, 190, 196, 78, 85, 159, 246, 67, 233, 222, 220])},
{encoded: "jxqaVX7r9dgXKAsKYYFSrPH7z6QXTNdVeXpb2QhKnsB76cTZ3G3AV9PZKdSvusqVxfQd5RsSZXGGpj5yKEWaT9Ti86wNpqaJUvcotn9SfnrVK1tiNkQx6FhwNvisuiGBWh7DX8s7Bq2Xz2FeWnandMTeHMeJnLVyNPYchoXf2s3GxWEM5YrB6KN2ytbL5W8zeXG3ucwBznWoo8yAT3zchoK7g",
decoded: new Uint8Array([107, 141, 166, 99, 49, 63, 138, 34, 212, 252, 77, 103, 15, 91, 3, 184, 135, 246, 38, 120, 210, 234, 98, 23, 37, 136, 105, 103, 106, 240, 183, 116, 64, 235, 13, 204, 81, 124, 28, 7, 205, 87, 51, 81, 205, 185, 98, 23, 133, 97, 103, 243, 91, 64, 114, 125, 8, 158, 243, 250, 157, 89, 197, 231, 10, 229, 219, 176, 6, 135, 62, 210, 84, 233, 49, 168, 216, 152, 184, 108, 243, 161, 154, 0, 16, 231, 81, 20, 120, 232, 226, 10, 88, 173, 57, 150, 16, 141, 195, 60, 154, 212, 179, 53, 228, 206, 131, 156, 111, 100, 215, 128, 142, 91, 14, 249, 56, 229, 231, 139, 11, 105, 173, 199, 177, 207, 194, 124, 52, 231, 237, 207, 19, 5, 22, 159, 154, 45, 219, 63, 183, 228, 128, 129, 62, 165, 127, 238, 109, 79, 125, 41, 242, 102, 157, 17, 114, 21, 219])},
{encoded: "QmpnHUS2nnt77Utphqta7QR5wHbA3iWMABD6tY5K1hosKjR1mQwpog5R1VmWgpK4q8sDmb3y8MZrrQDcojtLJZCYP6rz4rHhHBedAvPDJwEN1KLX2VBTuvB2DNAFSVEpJajEdM8YygVEMpnKryzAEcuiCmG6mwy7wrNgQ996zr3jFq3H21x4CnJMJSkqkdUJwGPSNcnoGGY64M4L3jgnb18R8HgaVmJPk41fxinLaRxiEy1Rp1Uaf9dLxHW6Fm2ToVJESboWVATUFnC4TJPYyPYAhx3B3kM6BZyum1rrDu1dr6sR5tGRt8DNpxNGV4vDiGsQC3x9QS9uDWwNWCtiyGL7u4AdrBSSvFjGU7mHiBnh4PT2NYWAB9Qg7vxVzQ3FanFhSPYegE1wNcjFKxezAdjAt5ETL6CJrqwncQt8pHKfjQZeKCtKMSMhGcoxtNUQsGUcGmmvZkVH7CsGoes7pbi4MuCQWJB4aukeGEpVuqpT94rivvo1wb38BrWGQsBr6cMqs2rveG1BfjVdbyNgN6pux8guKC6rSuGy5QMBWD6ADKAyMyFLbotNYvkcLDcCXdBLnYyXBKjdHyu4qjx6zScTRMwr85WRqXqVE4xxrqGbcrdRLotUEzePp7zk7KdchnahumfancijdQJRVndELZvL9EjCUXDkjhnnb1ZNGq2JArfw3qPurcoYGkQmoRdEruo4GAjCz3TNH6UQMvZ5ujf5q863y8b6DWFassrTVoaSA1Ltek9KVBaiNbSYyNXcXj5pz5NtHo9hVAJNsRV1m19BWuNPpq8XXob89a8sK4UcT5JDvcgXwpXt67CjD2btEpQ2ZYYSRhMvTCa8vwWCDK5GHAv9S3pt7TtceZLnJNnUFcsTpKwdbz9pGvFKU4B831FYni7M3c6ScaPgCRfcMUZoMkds3cUu1g1rr9rH2NaFujXUXH1NiNsEwKmXxQAxWsoQmEhKG6utd8ZiiipVmuFeoUVSoY4iDgjGXN6rH7JLPJFh8tagydjSTasvZmsmdSJksYfQyYH3VdqhJunwRWvFDu1LUcvikjoQ4tR5H4eqBTyEHoJKX4Y4zWzkdArb227HLBSftWNDVJLwEmpi7viuj3gdRvuHiC84SDxaniY8G9fYjSU",
decoded: new Uint8Array([123, 243, 47, 205, 79, 113, 161, 142, 240, 146, 146, 99, 109, 207, 206, 185, 187, 122, 241, 201, 156, 163, 178, 74, 52, 253, 210, 57, 21, 37, 106, 67, 16, 169, 87, 212, 96, 252, 61, 194, 71, 99, 74, 168, 251, 100, 198, 140, 210, 192, 155, 48, 38, 119, 81, 192, 242, 25, 112, 178, 224, 200, 35, 150, 159, 190, 20, 75, 103, 174, 166, 238, 152, 18, 58, 213, 102, 224, 167, 111, 216, 213, 171, 158, 154, 213, 43, 173, 149, 44, 0, 191, 3, 254, 182, 254, 197, 6, 239, 108, 56, 7, 244, 59, 236, 26, 11, 113, 212, 206, 75, 186, 68, 153, 78, 128, 162, 218, 157, 211, 5, 122, 132, 93, 243, 212, 113, 166, 108, 170, 228, 84, 217, 156, 58, 179, 8, 44, 11, 138, 216, 249, 148, 55, 79, 233, 86, 77, 253, 13, 32, 10, 203, 185, 55, 177, 83, 61, 184, 101, 97, 234, 2, 94, 82, 116, 10, 150, 226, 239, 25, 219, 109, 171, 133, 77, 215, 146, 66, 200, 153, 184, 183, 73, 72, 50, 186, 175, 182, 158, 37, 210, 242, 155, 95, 183, 60, 244, 229, 43, 115, 238, 198, 81, 61, 65, 104, 109, 36, 103, 87, 18, 192, 110, 44, 250, 221, 71, 70, 55, 120, 210, 59, 232, 49, 105, 237, 33, 167, 83, 6, 48, 183, 213, 10, 207, 159, 68, 204, 14, 207, 217, 28, 196, 239, 91, 188, 66, 131, 169, 33, 141, 26, 204, 114, 242, 191, 26, 118, 81, 243, 171, 173, 222, 16, 69, 132, 61, 40, 71, 36, 222, 145, 27, 151, 54, 221, 46, 94, 9, 94, 87, 240, 68, 20, 213, 232, 160, 195, 10, 206, 16, 0, 124, 26, 225, 126, 212, 187, 226, 95, 30, 33, 79, 253, 30, 187, 241, 44, 107, 15, 56, 46, 106, 16, 161, 255, 8, 82, 82, 110, 44, 122, 61, 41, 228, 154, 222, 175, 79, 232, 113, 188, 69, 190, 204, 88, 9, 13, 75, 50, 207, 131, 213, 150, 216, 191, 141, 20, 249, 167, 111, 219, 38, 180, 221, 59, 157, 123, 27, 183, 20, 32, 22, 175, 213, 41, 65, 129, 250, 127, 32, 182, 151, 194, 145, 136, 116, 44, 51, 184, 5, 175, 147, 105, 171, 203, 174, 142, 223, 184, 7, 249, 48, 224, 126, 191, 5, 236, 76, 167, 170, 179, 104, 172, 111, 62, 203, 14, 243, 134, 152, 236, 70, 6, 160, 140, 7, 206, 9, 177, 56, 254, 251, 243, 180, 242, 226, 86, 142, 176, 255, 152, 143, 71, 63, 106, 150, 245, 16, 124, 122, 214, 164, 7, 63, 37, 104, 124, 53, 234, 228, 197, 242, 218, 146, 79, 137, 162, 102, 38, 244, 79, 246, 152, 97, 59, 33, 50, 16, 200, 135, 90, 136, 233, 141, 59, 103, 101, 162, 33, 55, 35, 73, 22, 231, 42, 39, 246, 212, 228, 156, 235, 18, 251, 111, 143, 67, 138, 38, 219, 234, 31, 167, 1, 93, 23, 151, 167, 57, 200, 232, 236, 238, 171, 40, 165, 242, 8, 213, 34, 111, 78, 126, 238, 22, 17, 60, 213, 114, 134, 62, 117, 224, 123, 213, 52, 33, 121, 33, 172, 178, 157, 166, 113, 233, 12, 11, 69, 245, 216, 159, 25, 216, 157, 105, 232, 214, 116, 87, 208, 86, 91, 215, 231, 15, 55, 114, 184, 203, 57, 85, 227, 150, 222, 243, 114, 177, 12, 43, 127, 141, 187, 81, 109, 242, 174, 22, 219, 102, 19, 30, 204, 106, 124, 112, 57, 241, 245, 247, 175, 155, 250, 118, 148, 102, 233, 64, 181, 145, 230, 200, 56, 219, 159, 186, 237, 191, 24, 115, 128, 209, 49, 173, 132, 165, 79, 146, 68, 119, 43, 125, 134, 71, 88, 39, 78, 231, 5, 142, 158, 72, 242, 41, 224, 26, 40, 45, 44, 54, 201, 105, 224, 50, 125, 245, 46, 111, 5, 14, 235, 71, 219, 90, 39, 37, 93, 199, 213, 0, 89, 66, 1, 181, 97, 220, 138, 119, 71, 89, 12, 197, 158, 71, 45, 63, 150, 140, 41, 89, 172, 216, 48, 31, 165, 18, 19, 30, 169, 194, 128, 95, 12, 3, 74, 227, 251, 131, 196, 215, 210, 70, 159, 122, 243, 234, 171, 185, 47, 173, 193, 117, 201, 127, 147, 236, 151, 91, 201, 75, 162, 228, 175, 224, 222, 246, 35, 3, 64, 156, 178, 217, 108, 190, 209, 67, 155, 99, 152, 54, 243, 49, 107, 150, 111, 60, 7, 228, 14, 65, 193, 91, 115, 88, 48, 131, 124, 107, 221, 246, 210, 253, 231, 42, 160, 6, 63, 251, 191, 126, 195, 53, 198, 240, 78, 112, 144, 164, 82, 37, 134, 196, 56, 135, 102, 43, 17, 202, 138, 219, 154, 254, 50, 203, 92, 248, 221, 197, 57, 82, 202, 72, 176, 205, 31, 59, 134, 62, 203, 147, 231, 25, 160, 128, 87, 152, 233, 142, 200, 122, 182, 20, 114, 37])},
{encoded: "H8iQxFgcAv3DWm9yX9FDYVnh5YFjXyB18LzfyYcx7YPwBTXzmrENHJor4ciX71K3caf6euSeQnZUjzpAVUwxHGW2Z1xD99ryEqXRtwpZ7mP8i8QdhYwDAUrKydFaW5RLDTD55o3V3dzARcT3TAnthAG9F5vZodUyt666LGUED8rRGKT53Cg7Z38CpEusaANUxw2EdsnefpirYzSkHdLksZbw5rsUBRTTiYJMfDKAvTGAKXqFrxPubA2vemqSnHwo6ZkJaExu5HRu9YjurqTk3zW9eabondH7jtvDKwHMjqTiwFCJ6BN8P3QPvh4nc8hSr5cYM5xJjY858GhgJknC6KYBPhY5UHgST6nAwTMPoss1EYZGbYEvLfqiTsAmbizWYLEmkjiEiF5LFdKXCH5VH9X3amWMbEk3UZWWp4igeWJWaiDGMwPvVP9sq3hp5L4ka48BaTo",
decoded: new Uint8Array([185, 129, 74, 236, 11, 6, 70, 154, 231, 231, 60, 249, 7, 37, 23, 81, 43, 71, 9, 175, 47, 16, 91, 224, 242, 239, 128, 38, 19, 37, 51, 90, 117, 34, 66, 119, 144, 101, 135, 123, 15, 86, 148, 235, 32, 168, 178, 168, 154, 37, 250, 187, 164, 142, 209, 36, 4, 252, 58, 166, 115, 44, 212, 179, 27, 145, 222, 123, 62, 195, 165, 194, 241, 14, 32, 129, 18, 66, 29, 254, 24, 31, 240, 197, 92, 33, 247, 201, 228, 66, 125, 142, 94, 64, 77, 237, 32, 101, 205, 69, 96, 175, 179, 225, 234, 235, 55, 101, 153, 200, 59, 73, 63, 162, 115, 193, 125, 90, 183, 184, 64, 175, 0, 26, 212, 129, 255, 45, 31, 245, 241, 13, 40, 12, 99, 73, 151, 50, 37, 215, 46, 153, 81, 211, 30, 72, 253, 214, 136, 155, 208, 21, 143, 98, 105, 128, 23, 223, 206, 186, 81, 251, 21, 207, 187, 82, 16, 10, 165, 199, 133, 65, 108, 207, 171, 111, 125, 218, 246, 8, 121, 73, 48, 104, 124, 32, 88, 90, 130, 52, 75, 140, 3, 156, 12, 14, 20, 90, 80, 188, 218, 87, 29, 61, 41, 90, 57, 16, 121, 115, 210, 201, 155, 248, 23, 32, 228, 5, 214, 251, 83, 134, 36, 174, 55, 178, 164, 221, 94, 79, 39, 96, 81, 154, 107, 240, 51, 199, 7, 101, 119, 188, 193, 170, 35, 141, 39, 225, 235, 118, 197, 83, 218, 1, 80, 45, 78, 19, 223, 37, 229, 247, 36, 179, 79, 15, 209, 230, 184, 19, 149, 237, 17, 26, 85, 0, 18, 204, 228, 23, 93, 138, 142, 48, 211, 150, 81, 44, 165, 121, 209, 142, 10, 225, 112, 221, 189, 228, 150, 168, 149, 235, 241, 102, 22, 142, 127, 152, 176, 140, 145, 156, 208, 138, 143, 76, 92, 19, 220, 212, 43, 218, 164, 219, 105, 247, 231, 125, 226, 181, 248, 4, 86])},
{encoded: "8Ea2RjV3RKZuGnnHbQYEEb52jxUNexuPz1VtVj2N3uAhiZWbfC5u4nMfvP1mnJLXHt46qaYuuJGyJJQ39n2R34eEan1qtaRnhTxs5dWuRYCok7Z98rMkrV5ENVmzB8qCoUPfaZfFQtMD97ghwRoX1Pi5iXcN3afnRBNfmJJMSotxNX6xYtcAtzsPC2rBgTCRLLA5FwHpurSHaiyLWK8Bo9SNUFjL3ukoECGtFvGUt2hWLphwiBBHgaAifJodfZ3AHiovj9CMiq9Ko9V7URm1D8eK86W9KFskjmwpwaaBfEAkGj4Bmxi3fMTDFd1ZquBTefoE1cEV4WABkjgRJYv7TPLQ8Gd92SFFhFFASN6n57tPY37pTnEA9W1y4rFByzzkneDPBENJ5GTJWZxj5VcfVha6km4DevpTYZ4U5sD6rDZv8Zz4wE8hpg2XrejfLmhStfpJAkA2ydpzqkSaJkhRkDjRz6BkBLSfVx6gF1vgE1JndNDB6tRzQQtEhDw",
decoded: new Uint8Array([127, 101, 49, 225, 99, 246, 10, 101, 149, 66, 41, 6, 131, 81, 3, 117, 111, 174, 237, 86, 99, 149, 166, 171, 150, 197, 254, 19, 72, 46, 161, 163, 229, 175, 239, 56, 243, 58, 245, 114, 240, 193, 1, 152, 39, 97, 181, 63, 234, 81, 163, 146, 32, 161, 38, 38, 99, 31, 7, 75, 124, 254, 142, 241, 34, 12, 153, 149, 42, 95, 195, 154, 156, 34, 3, 120, 10, 236, 91, 88, 86, 34, 242, 224, 72, 125, 19, 104, 94, 93, 179, 178, 245, 103, 122, 127, 86, 227, 82, 238, 58, 150, 110, 28, 139, 115, 135, 40, 121, 195, 121, 201, 13, 206, 26, 202, 184, 254, 146, 248, 187, 66, 82, 46, 238, 74, 7, 122, 187, 161, 201, 135, 37, 255, 33, 229, 254, 175, 13, 125, 8, 192, 104, 38, 138, 65, 74, 41, 171, 134, 109, 101, 64, 79, 109, 159, 6, 6, 57, 235, 35, 241, 66, 53, 182, 133, 6, 170, 145, 53, 102, 227, 189, 25, 62, 77, 219, 111, 93, 172, 255, 223, 105, 151, 177, 95, 245, 140, 140, 148, 37, 44, 184, 196, 226, 18, 149, 2, 13, 70, 166, 245, 212, 160, 180, 37, 126, 229, 236, 37, 44, 121, 127, 92, 10, 119, 157, 84, 202, 238, 199, 47, 229, 76, 64, 67, 210, 21, 177, 153, 137, 212, 47, 248, 61, 2, 124, 85, 42, 214, 36, 69, 183, 52, 119, 214, 22, 242, 58, 75, 172, 92, 142, 229, 85, 254, 90, 167, 95, 193, 117, 83, 228, 25, 195, 189, 131, 114, 167, 19, 154, 95, 153, 6, 62, 25, 158, 172, 57, 184, 167, 207, 226, 147, 164, 37, 199, 107, 145, 225, 234, 64, 215, 221, 59, 190, 83, 140, 132, 128, 235, 185, 3, 183, 29, 1, 18, 168, 145, 112, 53, 90, 117, 12, 43, 205, 97, 128, 124, 80, 144, 85, 211, 119, 120, 80, 15, 156, 20, 197, 138, 109, 139, 218, 167, 98, 150, 128, 232, 126, 11, 234, 240, 193, 134, 41, 198, 156, 76, 120, 92, 208, 125, 251, 51, 237, 175, 106, 108, 90, 183, 255, 117, 72, 231, 230, 184, 19, 215, 0, 102])},
{encoded: "xSQ1tW619PyF414sLgbAo4X7reRAMSSoMutRsUuHkvwb2cbtod9VNFiZQSRH3kuvT7Wksg5MzBgarfRjq7RXE7oKgq3ECbBvZzRi1TUjBpd1scHSqZFF4GpS6vZnwxEeTgGt77bgYBm7ZdMsezjEuAqQGq9BQzBV88aud3ppkYZYbHCEFJhch6BAHY4cZgoo99XqRb2P78S4dr5tvi8umFMNtusUAEM3kzDAH19b4V1s5ra8LVV2ArEX7qrVdSfAd9RhuXNAqynQ7MpC9p4tm2LmAjgSDGuPg3Fsi7MS3mWP8b1t16H88yEytkAh2s95bUmaNBmsnEdPzHVqoafdKyjuTUWvugaj2ptm1XoK8bSqa8peEPkRVkreuqn9afhn1YrBbCwZsKPu3zRhDiV2eL47uaewxW1mpdoZjix8xTHtuH2AAgaXYg3AUfXiynKHNEC6kLjo5JNHt8Fsn4RVWH8DKfoFZGY19wE1JJZF5x6yJr2JhUYewY5PpkEhkZBrCA8RJCxFQgmnVFdFYjXPVMdEXhBycvCYz69GUbhTxtgsDyTDp7T2VjdPfLLUBybgR1iwNXCTciaFUyHbLkw5WnrexG6Uk1cBJjmzwPqDuwoKN51ZcZgAvg6bSzBjevF4FUY7VKeCGdiTMVgxi5JgxCMCDgZDczAY2wZXSpHR8NhQv89S1GMaGS4FkAVe1Q2kmXwT8DUiHs7C4ac4YUKyRLnBkjCVyD4xv43V6vhruwKPCme7gsgjLsBk2yEy81r8biZDcaUe9kXJMLvshGsXKLTM8ad42YzWBvNHRRX5i5UJ8zUY8dEujmEzhK2SrZpNCMcoz8EBtKMkWNeAXdYpERu1kXtto6pbo3A3Zc6eBgYrVdWgQUo3Fu4K2SHY7A7yttJTVLF2Zh5vEnQgk6Rw8dj8RHektebhn1DDAMC3TRPz99ajqv3iV",
decoded: new Uint8Array([142, 228, 103, 234, 9, 158, 79, 20, 8, 65, 214, 36, 211, 33, 9, 208, 236, 216, 239, 190, 198, 228, 79, 81, 186, 197, 98, 219, 240, 75, 161, 51, 42, 159, 1, 255, 43, 245, 2, 87, 132, 148, 65, 23, 44, 160, 206, 101, 230, 1, 221, 180, 195, 10, 116, 84, 212, 37, 164, 87, 239, 163, 147, 206, 109, 38, 82, 122, 54, 213, 135, 233, 254, 43, 102, 67, 189, 3, 239, 100, 107, 22, 156, 28, 6, 245, 52, 144, 254, 88, 60, 154, 158, 170, 140, 6, 117, 93, 184, 245, 205, 78, 210, 213, 48, 166, 242, 49, 98, 225, 195, 20, 15, 57, 199, 98, 47, 229, 233, 112, 190, 244, 227, 103, 194, 134, 237, 19, 112, 219, 24, 98, 121, 226, 85, 152, 97, 247, 77, 50, 19, 21, 185, 6, 96, 76, 234, 253, 14, 235, 183, 115, 18, 72, 101, 146, 52, 178, 27, 71, 172, 32, 121, 217, 196, 3, 195, 226, 94, 157, 211, 215, 26, 69, 83, 126, 1, 22, 10, 125, 2, 43, 38, 78, 11, 195, 89, 140, 103, 66, 92, 185, 136, 131, 153, 142, 148, 216, 111, 14, 184, 183, 180, 151, 109, 209, 59, 143, 197, 232, 31, 188, 163, 8, 105, 176, 199, 116, 48, 64, 36, 223, 77, 35, 79, 47, 73, 221, 23, 71, 101, 112, 190, 88, 47, 136, 164, 60, 42, 98, 107, 195, 67, 80, 42, 181, 156, 77, 162, 9, 192, 126, 94, 131, 87, 13, 80, 243, 23, 222, 108, 130, 14, 161, 31, 192, 235, 221, 219, 255, 119, 171, 136, 95, 198, 215, 122, 60, 254, 102, 73, 0, 50, 78, 61, 63, 253, 243, 226, 27, 165, 34, 14, 237, 17, 104, 182, 96, 130, 190, 210, 88, 138, 222, 209, 238, 103, 133, 10, 3, 44, 221, 93, 114, 8, 233, 92, 254, 167, 226, 182, 208, 235, 163, 48, 81, 19, 46, 96, 36, 138, 209, 84, 92, 200, 178, 190, 119, 164, 223, 212, 30, 71, 245, 175, 10, 171, 112, 67, 151, 83, 72, 21, 80, 29, 239, 195, 98, 190, 13, 0, 221, 125, 37, 72, 227, 220, 93, 169, 143, 208, 135, 17, 251, 163, 148, 223, 206, 48, 120, 50, 153, 80, 173, 85, 6, 70, 231, 48, 219, 175, 250, 238, 252, 234, 46, 133, 48, 66, 17, 251, 179, 200, 18, 154, 251, 46, 69, 0, 70, 248, 15, 94, 94, 182, 12, 113, 185, 237, 101, 107, 195, 36, 212, 253, 192, 241, 89, 123, 1, 207, 135, 77, 111, 242, 238, 89, 170, 254, 86, 176, 167, 65, 101, 58, 81, 193, 71, 189, 12, 65, 39, 236, 250, 41, 227, 37, 170, 22, 87, 38, 80, 61, 30, 248, 155, 14, 219, 9, 227, 129, 28, 130, 187, 106, 80, 43, 252, 173, 164, 35, 217, 39, 172, 245, 45, 131, 192, 135, 8, 114, 84, 164, 39, 70, 12, 29, 214, 41, 129, 116, 147, 6, 3, 250, 233, 209, 249, 126, 199, 57, 77, 36, 237, 149, 92, 209, 18, 52, 184, 120, 251, 26, 61, 205, 195, 137, 161, 224, 133, 130, 81, 236, 251, 215, 225, 161, 158, 23, 53, 24, 31, 88, 170, 64, 8, 238, 154, 157, 122, 18, 62, 13, 241, 243, 229, 36, 35, 49, 171, 154, 159, 100, 73, 85, 97, 33, 119, 12, 22, 74, 141, 137, 55, 2, 197, 253, 247, 114, 237, 234, 184, 29, 142, 23, 255, 86, 235, 24, 112, 112, 71, 99, 200, 6, 80, 34, 77, 222, 216, 110, 112, 57, 173, 170, 28, 221, 29, 64, 221, 195, 128, 149, 49, 13, 198, 27, 57, 14, 125, 165, 90, 162, 185, 77, 157, 169, 249, 205, 56, 232, 190, 155, 142, 143, 159, 80, 80, 117, 252, 40, 86, 218, 180, 147, 233, 213, 4, 106, 154, 139, 241, 18, 78, 115, 92, 50, 125, 202, 95, 60, 108, 38, 122, 32, 175, 240, 161, 72, 101, 215, 76, 200, 185, 149, 99, 18, 236, 231, 152, 104, 203, 238, 159, 83, 40, 247, 64, 54, 121, 234, 231, 64, 25, 118])},
{encoded: "eFnT4283PLRMGnaUv3BYEuYHKFFxxHGu9Xk7vZznrfCRdrwjhwmS3TZM3ydTRNVQsZMSp7hkFG91wbVerfMM8xUSdhoKJDEnHrLhzLtWCQmiY632MpEdjHg7h3JcfQPGiDQ7Ac4SB6p4QuBL672ghVf7RjpwckaNAfXznVAv6VZ5gtR4LYA87wCGQyKa7457ZrwJKN2tmufSAYVQF6UDTFH3amyudSRiTWCRitbKUK5Kz99S83zeHiuTaAb3KUJqzBssy3g9GSDse1LuGHVVgERs5dB842D2APYSyAM1aERpZVgLrqb2xZtskrvGzTuz77vYTTouj7QEiECUDKwzHSYxqpkZ5rorHiwApUWskHhuEeabQXJbf9kkECNUrUe5G8G9uZmvwcWsuLjnzMedAFUgv38HNXUd8WUHVMFkmoU2KDg6yMAjbVPoVWkzYV69Tq1kLiL6sx2yaHtP32fFgULAgX6jkzSN7FdMeTD9DJwfNTmYvfbCyAF7QiSvQr3mjgfCTkkY7GcGgWxz21vWTeKvCYUu3TEAbveEukxeBEjLPGUboZx9ka1JeN2BSPPw5nSy4k7qzufKfpftRLNhdgQxn886vJhVnrcnYCmy5KeYJB8kLgnLpqqDnE3toRydg5Qr64M8X2rZhXbXRTBtzHmZjsUw5MA1g7EZ3Hx8nB7FjKHUWhF59pUG4sNwjB2LaU5TM2o1THx7gJGxRHjoRoC1XdGD8GSFdnh78A3Kj34wYdExSfiNu2gQgqYeR71LFC4xmRpVH",
decoded: new Uint8Array([129, 31, 171, 90, 168, 247, 200, 189, 137, 142, 116, 53, 148, 76, 151, 68, 65, 74, 181, 133, 57, 181, 255, 82, 221, 96, 216, 102, 147, 190, 235, 79, 155, 30, 200, 4, 252, 173, 76, 252, 243, 214, 169, 18, 161, 158, 73, 143, 182, 110, 183, 110, 50, 161, 107, 9, 224, 232, 107, 90, 163, 14, 65, 237, 12, 187, 27, 35, 136, 129, 124, 90, 213, 174, 189, 253, 28, 23, 167, 84, 130, 157, 206, 105, 158, 17, 38, 151, 17, 236, 211, 64, 21, 224, 163, 120, 176, 40, 111, 72, 43, 126, 88, 200, 186, 175, 249, 63, 194, 20, 92, 72, 176, 155, 149, 234, 21, 155, 103, 178, 90, 108, 172, 150, 177, 216, 89, 97, 85, 50, 146, 137, 81, 93, 95, 159, 50, 249, 125, 204, 3, 63, 60, 163, 192, 233, 248, 143, 197, 48, 173, 84, 102, 93, 170, 176, 141, 193, 150, 47, 101, 77, 89, 100, 10, 80, 67, 239, 199, 3, 59, 133, 103, 166, 107, 116, 208, 167, 106, 131, 105, 138, 174, 172, 230, 104, 189, 53, 19, 70, 104, 7, 180, 161, 138, 123, 179, 17, 148, 19, 114, 52, 136, 131, 199, 201, 101, 20, 209, 0, 23, 196, 229, 81, 225, 67, 165, 60, 201, 64, 112, 65, 147, 190, 110, 239, 253, 250, 48, 66, 221, 162, 170, 174, 56, 126, 34, 202, 197, 249, 239, 63, 162, 87, 225, 204, 140, 103, 149, 173, 207, 57, 28, 118, 189, 107, 190, 139, 242, 158, 195, 42, 245, 227, 79, 208, 30, 144, 170, 242, 212, 91, 85, 124, 248, 204, 47, 58, 72, 225, 173, 32, 201, 145, 96, 157, 42, 54, 241, 4, 211, 121, 236, 200, 68, 27, 121, 241, 3, 55, 240, 85, 59, 62, 114, 16, 194, 201, 154, 126, 155, 13, 99, 83, 82, 199, 145, 104, 142, 212, 47, 33, 185, 175, 105, 196, 219, 41, 186, 147, 52, 91, 169, 111, 59, 71, 164, 178, 221, 64, 30, 219, 57, 132, 47, 252, 192, 76, 26, 79, 161, 66, 98, 176, 21, 169, 169, 95, 149, 203, 5, 164, 50, 83, 228, 107, 82, 231, 80, 133, 38, 171, 6, 85, 138, 72, 95, 51, 122, 21, 119, 101, 7, 196, 67, 144, 21, 12, 110, 88, 85, 32, 95, 209, 180, 81, 200, 35, 205, 163, 91, 105, 244, 187, 53, 146, 88, 64, 8, 201, 2, 214, 227, 128, 50, 56, 213, 195, 104, 85, 98, 29, 165, 137, 189, 70, 235, 123, 131, 38, 9, 19, 90, 205, 102, 21, 145, 178, 106, 189, 139, 39, 183, 176, 57, 54, 137, 55, 190, 160, 118, 81, 213, 83, 146, 196, 31, 5, 162, 128, 1, 180, 79, 117, 32, 232, 0, 174, 112, 167, 186, 113, 91, 237, 57, 1, 123, 252, 197, 124, 167, 33, 127, 36, 248, 79, 158, 221, 14, 145, 189, 150, 66, 0, 85, 68, 104, 60, 11, 205, 10, 216, 182, 147, 72, 18, 53, 49, 208, 74, 61, 218, 67, 225, 164, 255, 206, 5, 38, 52, 85, 58, 126, 62, 146, 175, 91, 0, 32, 220, 232, 104, 196, 163, 76, 64, 248, 228, 25, 51, 27, 147, 193, 42, 98, 41, 125, 52, 208, 23, 87, 118, 118, 100, 151, 84, 173, 58, 210, 223, 148, 43, 54, 210, 108, 142, 7, 26, 36])}]
@@ -0,0 +1,201 @@
{{encoded, "2GUA8CWvpaGkFEBNVm8FKKsrZd1qN4Laa7JHzGJoYa8Sg6wZZCuGsdEZfhK97TVrDi"},
{decoded, <<34, 136, 2, 145, 89, 38, 72, 227, 61, 255, 244, 206, 3, 235, 31, 205, 46, 163, 204, 97, 85, 233, 11, 183, 111, 64, 90, 246, 220, 247, 91, 84, 38, 228, 112, 142, 146, 253, 252, 229, 196, 106, 153, 197, 117, 234, 243, 133>>}}.
{{encoded, "3W8Ait1VzN1DMKkBWDBVSqKQkiYYJmnHS822x9nJAebJCT14Mn67eBqYhENegxLL7j7TR9oWPZeHbcmrdq3iqQkkQ3uYFWNxKcXwzMpq2Ni7CDTjmtngtPjbHkJeo7DukojHeGPJBkEknLokWDw4QHW2R8ySH4dtryB6XHzCXYUo38wVeFvuqVmbo9pyf7g57PYXrhGTh9kuQNh7Brmh9esCfrmudNsQ4QApAX74aTHQf2HZgRSQthYRTrkv6ZYwVUjP"},
{decoded, <<93, 17, 195, 175, 181, 241, 27, 96, 45, 143, 174, 12, 245, 149, 58, 236, 34, 184, 130, 74, 194, 250, 219, 229, 153, 115, 141, 93, 207, 154, 222, 31, 7, 88, 136, 246, 82, 119, 117, 220, 208, 170, 203, 216, 231, 2, 41, 155, 96, 150, 227, 210, 212, 219, 89, 157, 30, 143, 135, 60, 81, 221, 179, 158, 104, 233, 4, 71, 17, 53, 253, 107, 15, 162, 172, 36, 219, 217, 125, 199, 228, 6, 226, 200, 88, 208, 205, 191, 144, 163, 229, 5, 191, 120, 148, 80, 43, 7, 111, 226, 101, 212, 230, 167, 141, 233, 17, 64, 172, 132, 236, 251, 184, 167, 219, 129, 62, 20, 129, 251, 17, 35, 43, 17, 79, 128, 109, 168, 250, 197, 202, 249, 25, 161, 203, 222, 132, 106, 132, 205, 67, 57, 187, 65, 87, 180, 122, 171, 26, 222, 233, 14, 149, 55, 9, 185, 94, 104, 107, 236, 245, 186, 235, 255, 212, 9, 130, 64, 166, 205, 128, 107, 188, 220, 44, 192, 205, 99, 41, 191, 238, 44, 80, 191, 61, 90, 89, 51, 140, 6>>}}.
{{encoded, "5ZmtKiPAz8ZcBbgZckN5L61GpAnUo85k5BouVHiCDUzUgepkAp8mw6mgEpKzGJouyTbfzED6CojqoEFvmvWmTSAprfE122zK8NqB4Z28U3xoQGjhxYpf1sZzc3gdeSYw5C5PBmxr8ajXgihVSQtXefqvZKn7Twz5Ka2FcCR6dPBhnwrtFaYzoCLRduh37rdcV8B6Di16ssHhd2TmbpLPf59BM9m4EdhKANwcB6jSkshkopEr7J7Z5HHoQHgBfFubxyNEJsUy12efvfLGwhtzQ9L4rddAMFcAJE4SHPDWHLJTMCtBABYwxeLJQsVVap9edJWissNssw7iwcf8VLRDxKmAu4iKGWujoH5Hzq6BV817fX3ovAWSo9Vx1sKVh8eQVHSkdQ3jXzMxCZHqqykcX7q5WMWwcenNd4nwXsArvpyTNVTnzNPZ3MwPszT5HN6gDGfCWWtVJ7wkrEGaBevt3vvELpiUf2jgS9FNm5v2JyFzNDHS9cbjRVfARQZzgt4gigFwjqtSCdWGmzpXj89FU4BCNgExpFkQVhpq5vmTWpvEZhRhJgLtdXeq6urYyaQfRo7cAWqzMUKrhgc1Ct48snrwGnvLucH1YLs"},
{decoded, <<188, 148, 209, 203, 191, 196, 146, 43, 54, 223, 36, 54, 17, 218, 194, 177, 60, 35, 28, 166, 73, 208, 9, 66, 131, 112, 221, 118, 111, 133, 147, 254, 94, 71, 2, 180, 108, 50, 215, 100, 206, 25, 201, 238, 25, 119, 49, 215, 2, 218, 228, 177, 116, 26, 193, 59, 159, 11, 24, 231, 36, 153, 168, 186, 64, 51, 93, 136, 9, 144, 234, 35, 167, 177, 207, 136, 105, 18, 255, 205, 182, 240, 28, 78, 114, 4, 232, 43, 246, 86, 62, 235, 235, 67, 210, 179, 53, 174, 123, 24, 65, 222, 189, 208, 53, 81, 162, 187, 219, 244, 168, 198, 178, 107, 104, 21, 181, 215, 135, 137, 33, 16, 134, 65, 17, 16, 162, 70, 164, 121, 104, 107, 104, 123, 2, 4, 202, 136, 159, 123, 190, 205, 243, 151, 120, 116, 28, 181, 81, 90, 40, 140, 107, 58, 123, 76, 108, 40, 175, 227, 162, 241, 243, 94, 81, 39, 103, 76, 157, 121, 93, 179, 104, 192, 67, 166, 249, 193, 214, 110, 206, 118, 15, 173, 141, 26, 37, 147, 42, 1, 62, 154, 231, 73, 94, 204, 11, 121, 192, 95, 241, 136, 166, 141, 78, 52, 97, 173, 152, 254, 243, 22, 190, 169, 181, 253, 94, 97, 180, 0, 26, 192, 224, 126, 179, 109, 151, 63, 235, 67, 117, 174, 255, 31, 235, 199, 115, 167, 111, 31, 139, 52, 252, 219, 127, 205, 3, 113, 4, 248, 141, 172, 51, 242, 19, 100, 0, 97, 83, 112, 229, 183, 164, 5, 255, 193, 177, 214, 21, 26, 244, 75, 59, 67, 118, 15, 245, 238, 175, 37, 203, 76, 74, 74, 131, 62, 74, 189, 247, 25, 66, 99, 57, 126, 112, 100, 55, 194, 103, 158, 255, 34, 148, 93, 134, 172, 254, 23, 123, 22, 34, 176, 224, 36, 26, 154, 178, 170, 229, 142, 95, 81, 75, 198, 127, 222, 214, 173, 71, 251, 11, 39, 63, 31, 63, 59, 239, 114, 6, 98, 145, 166, 101, 163, 4, 178, 204, 168, 41, 181, 195, 226, 166, 2, 245, 121, 51, 168, 209, 27, 225, 182, 201, 43, 178, 31, 45, 167, 51, 65, 168, 53, 9, 206, 252, 118, 82, 157, 54, 37, 161, 101, 138, 246, 202, 53, 92, 81, 118, 207, 44, 1, 162, 234, 206, 142, 72, 228, 221, 76, 197, 45, 237, 113, 64, 23, 72, 63, 237, 54, 58, 187, 193, 195, 245, 205, 13, 70, 110, 115, 28, 57, 154, 240, 166, 212, 123, 158, 27, 154, 226, 99, 2, 88, 146, 37, 244, 27, 194, 107, 230, 202, 196, 247, 193, 49, 60>>}}.
{{encoded, "e1iSFKy8FkpqhEVEJhXuVpnsSbvfDd8nD46AvFdapaWa3NgexRhnvCicifs4FRRsRqZRPPoJyNpRSDWXxoaC7Rctrua4YgmyiSKpW6Xjh4sKPAXAX4j1RrxqY3NKicPAUN8v6fAXDhTBimMDBM2BnPoHJ1LdgYmsrcswgToAisbW51aq2MbsnpbN9uFfUpLBxirfJPKy61a4KmenBWLN3c17K7U5Wk2iLQHvBk6fj7SRPm3QfCFPQ57tCSheBK7CJh9S17MaRs8zc9TWPrGiFFob2VZ6b6FZqAWYyBx6hymvmMYq1HvAvVZs7w9DwbimFHnPubP9d4K65iFfHQoF"},
{decoded, <<133, 241, 198, 240, 120, 51, 68, 0, 100, 158, 16, 181, 134, 235, 87, 212, 87, 173, 24, 234, 193, 47, 214, 235, 1, 177, 159, 179, 252, 19, 251, 119, 22, 213, 25, 96, 116, 137, 246, 67, 106, 231, 239, 31, 61, 135, 175, 68, 30, 56, 75, 52, 166, 245, 33, 164, 1, 101, 174, 229, 140, 19, 9, 111, 180, 188, 217, 48, 106, 63, 239, 142, 117, 191, 133, 77, 147, 149, 71, 154, 28, 18, 201, 112, 196, 25, 5, 26, 251, 179, 211, 173, 233, 146, 233, 38, 155, 226, 19, 71, 28, 84, 63, 178, 21, 25, 18, 251, 187, 175, 252, 220, 131, 254, 73, 76, 92, 178, 97, 249, 14, 193, 192, 162, 182, 54, 13, 130, 109, 90, 21, 18, 150, 182, 33, 115, 121, 24, 92, 182, 104, 62, 43, 198, 106, 56, 125, 46, 83, 39, 143, 96, 221, 111, 203, 168, 43, 14, 93, 116, 112, 9, 206, 60, 113, 58, 0, 209, 33, 81, 59, 182, 246, 153, 232, 18, 216, 163, 144, 203, 25, 36, 148, 24, 171, 69, 50, 234, 211, 83, 219, 6, 112, 169, 196, 86, 25, 188, 128, 148, 136, 229, 143, 38, 0, 21, 12, 127, 151, 238, 253, 93, 27, 176, 33, 230, 122, 175, 27, 13, 94, 108, 177, 84, 74, 7, 218, 30, 246, 194, 81, 90, 182, 153, 9, 253, 101, 123, 200, 232, 48, 93, 15, 223, 148, 39, 179, 73, 150>>}}.
{{encoded, "7HL7mGhEzkMr5WqF1zBtNJz7aomVAjCyxeP8hgvrH4QNWAbZQQB4t8pqnfy7jVBUECegcwca9D5TLgaxzSBPU2Fyda2h4v9qqyZfGrjYXFVftDZYywjyGswupvA6MbSzZ7TLsSMZkw2XfZ7YK8aA6PWeL6DbJDAGLS1i5CmqE1SQZys41XTU6oauqNVLmjfDSQa1btzXrTQq73U7SEtr3xzKxYWVxoE3oWuzBHai7XWg8weYJAnCNp9yK1mQFxf9j42j96YdEbN6CETaztTEnVbtbUSmreYuNTgLwsvtHRqd3ebyESdeLTaLBc2JF7jq9twrJyF3RcMQJv2KsSeUXundFeYajU96xdRYCmB3WCp5Ljg6aAELULeStWzm1KUL1zwWdxNe1UcavXKyVSVbFkNMdRKxK2QBoEACmDkzM7a3iweuSZYGcXZoov99Q2M"},
{decoded, <<158, 192, 219, 129, 187, 213, 226, 30, 188, 148, 52, 86, 46, 239, 236, 33, 223, 177, 123, 180, 142, 190, 195, 206, 183, 108, 67, 97, 21, 91, 219, 53, 223, 181, 151, 243, 194, 113, 201, 169, 11, 52, 241, 28, 38, 109, 92, 61, 178, 105, 146, 137, 138, 60, 235, 135, 251, 131, 88, 189, 224, 23, 240, 10, 64, 103, 243, 221, 179, 147, 75, 115, 14, 132, 179, 8, 170, 152, 248, 61, 86, 218, 191, 81, 132, 46, 111, 120, 161, 81, 208, 142, 118, 171, 76, 8, 7, 9, 61, 228, 195, 98, 207, 126, 111, 43, 225, 112, 118, 63, 47, 130, 35, 255, 15, 217, 1, 61, 162, 6, 224, 136, 59, 71, 138, 137, 105, 203, 115, 209, 129, 69, 35, 242, 29, 10, 102, 21, 162, 57, 16, 7, 146, 18, 81, 229, 185, 111, 234, 56, 185, 247, 126, 122, 49, 3, 21, 81, 247, 161, 246, 103, 112, 14, 113, 56, 7, 183, 81, 197, 122, 79, 56, 20, 117, 74, 76, 139, 210, 200, 243, 20, 178, 29, 237, 75, 61, 68, 220, 50, 148, 247, 138, 201, 34, 32, 171, 242, 215, 100, 54, 49, 59, 234, 23, 105, 67, 206, 36, 123, 218, 214, 194, 149, 4, 79, 104, 141, 226, 113, 17, 87, 82, 214, 19, 213, 79, 35, 159, 252, 36, 138, 88, 237, 183, 75, 229, 189, 14, 86, 255, 81, 123, 121, 245, 101, 226, 86, 19, 59, 57, 174, 100, 130, 57, 48, 243, 228, 80, 191, 233, 113, 122, 153, 210, 168, 69, 28, 153, 25, 56, 31, 116, 199, 93, 234, 191, 79, 160, 2, 227, 205, 51, 211, 162, 197, 169, 94, 205, 6, 18, 188, 237, 113, 75, 195, 100, 157, 189, 103, 68, 61, 236, 161, 1, 161, 38, 149, 100, 114, 125, 34, 155, 34, 147, 107, 222, 151, 196, 39, 130, 42, 206, 181, 161, 100, 234>>}}.
{{encoded, "F93UT2FQNg3JZ316QsQn8BTrgNZHpQQN2DNgY1J2AaspUcy5LHWQHC5VMzfaQ3WtX7iYpivBiMwD9RkXgETwC3WCj"},
{decoded, <<160, 56, 18, 78, 185, 73, 31, 30, 127, 64, 89, 205, 117, 119, 3, 13, 86, 48, 233, 179, 146, 27, 194, 198, 151, 179, 34, 204, 204, 247, 167, 79, 53, 20, 145, 184, 124, 168, 10, 169, 244, 99, 9, 15, 42, 75, 18, 13, 237, 27, 85, 23, 154, 18, 198, 217, 248, 0, 77, 106, 156, 78, 246, 93, 124>>}}.
{{encoded, "3DpSDhhLXujeMMsevVjwCoaXWvWc5hy9VzqfasRm3kbZfe8tuiJYgiUh8Jj6A3RkL8JQF46E548vdUeEAwZ2opidmYdfGhV1xrjN76peJV3AbAE8SvGJeSQaHvbjuspaBgM1Lg7DpW2uDbJgQGtMo1noBMFD2fHrv81xayP8DExxqSDw3BFhi92iyDZu59x51k7tqxDrevaos3Uh19n8kjdmkYAu3Avdh4Lm4G4DtRisvn7cYhbksYtDmxr9vrj7JbM3FCVCq2upQijqSHziteFR8t4ubCRTcCvptkD6poMPDvqqDqyKZtmJa8EyaEXq5Cxhkq6XdinhxkoQncsBa56Z3pZF2hxLXYuRdsb1sQPPXgzhRoM25zfEqsbKZieKLxsyVbbtNxczcPeSJp9hsctHkAn1uoHqCHthKUZZc1T9v5nVEd3MifVd8v5DYUWz7EYzsoDyR71ALsdC8XMzymFmh2wZS3E2Q3Ti9KQVXrEGJ1nqLX97E7BQaZ6H8eaQeNMjWn6j2nUSzCryS5eBrAmiJkzBUgeF9sfA9rxohvfGCG21VqZuU5cDhuH5m6oLmLRHeyrLrC1d6ATyckbtGKdDafQJ4GRDYecG2422GEBZaqSF1uQ7Ah19WSZGzwVENui6W3XBgsRxKNUgy1ELLUHxjycvHVcFZSuKyyPoEaQUKaqZM3Eot7A7Kxo3PyYfC4KqrAgu3KnihdkDQK2otEVPsJdmX9n9Mt4irYj3aM11hdJBuhzrMZZZJpNYBswcrzLTe7p8V7dqMXPiy9aKzVTFYoHz3ZADq64CT6HDzc9B3fWx4UUM4HA55vvyGs4KGPDuVKpBAbGC6221pnrQAzgLQ9D5xERt3dyKEKv6Myv7WsWzVhF9V6r71kW2twScTShVGkzw9vcSj7uHV"},
{decoded, <<198, 18, 56, 232, 178, 123, 114, 208, 94, 48, 209, 135, 34, 81, 146, 238, 106, 43, 31, 194, 2, 53, 148, 87, 33, 56, 33, 85, 183, 193, 4, 208, 133, 70, 172, 164, 211, 131, 100, 66, 2, 253, 86, 46, 31, 12, 207, 209, 58, 102, 58, 2, 21, 91, 171, 251, 58, 47, 120, 18, 160, 194, 129, 209, 235, 173, 12, 151, 73, 23, 195, 126, 247, 21, 114, 101, 15, 14, 196, 0, 30, 24, 55, 94, 106, 6, 208, 82, 66, 105, 169, 82, 134, 191, 80, 103, 183, 68, 231, 176, 149, 255, 190, 29, 251, 163, 6, 254, 119, 41, 38, 55, 229, 60, 6, 195, 231, 74, 234, 35, 180, 241, 37, 243, 160, 169, 5, 254, 21, 175, 188, 106, 65, 70, 248, 136, 174, 124, 17, 161, 27, 87, 150, 159, 248, 137, 151, 168, 25, 185, 1, 253, 205, 90, 146, 118, 74, 154, 244, 160, 150, 212, 70, 231, 45, 128, 157, 197, 126, 108, 48, 185, 44, 150, 47, 176, 181, 62, 40, 151, 108, 148, 166, 242, 216, 213, 247, 86, 221, 187, 102, 62, 88, 241, 113, 232, 59, 175, 10, 39, 123, 208, 98, 88, 225, 54, 232, 9, 225, 204, 69, 175, 220, 234, 4, 91, 175, 34, 33, 32, 128, 195, 66, 196, 110, 38, 3, 192, 137, 108, 239, 150, 202, 56, 26, 188, 97, 155, 220, 136, 73, 79, 18, 197, 79, 229, 59, 89, 178, 128, 56, 145, 195, 243, 249, 73, 220, 59, 116, 62, 192, 92, 90, 204, 123, 236, 214, 78, 154, 44, 116, 194, 60, 4, 18, 122, 209, 54, 109, 88, 247, 174, 1, 218, 200, 121, 199, 198, 240, 26, 144, 25, 228, 182, 19, 214, 201, 103, 220, 252, 8, 227, 75, 156, 153, 99, 140, 250, 9, 122, 109, 104, 20, 120, 186, 145, 145, 6, 71, 204, 37, 92, 55, 11, 75, 183, 17, 73, 58, 118, 25, 14, 242, 141, 157, 194, 134, 28, 141, 116, 63, 238, 106, 0, 122, 28, 231, 61, 156, 209, 37, 99, 125, 106, 31, 40, 4, 249, 236, 145, 65, 31, 211, 47, 168, 203, 164, 101, 137, 231, 71, 126, 180, 48, 58, 234, 223, 107, 0, 170, 21, 2, 23, 31, 15, 156, 57, 89, 211, 153, 130, 250, 205, 160, 138, 120, 140, 237, 233, 235, 229, 135, 115, 120, 102, 252, 35, 39, 61, 139, 230, 6, 40, 217, 134, 186, 176, 239, 249, 92, 213, 168, 71, 209, 196, 243, 10, 27, 5, 9, 99, 133, 26, 189, 214, 202, 160, 202, 31, 159, 168, 29, 108, 158, 104, 131, 51, 113, 49, 61, 218, 161, 193, 174, 24, 142, 183, 8, 80, 18, 110, 162, 207, 209, 174, 2, 224, 55, 62, 250, 99, 82, 70, 45, 16, 10, 116, 1, 246, 222, 49, 24, 93, 239, 19, 104, 1, 103, 237, 14, 51, 214, 91, 225, 114, 31, 237, 188, 75, 24, 105, 176, 129, 4, 61, 66, 61, 92, 227, 60, 240, 51, 114, 163, 203, 12, 179, 208, 84, 74, 32, 177, 235, 181, 230, 68, 192, 174, 83, 143, 166, 143, 181, 169, 231, 140, 226, 80, 169, 235, 88, 202, 94, 118, 171, 127, 83, 31, 166, 53, 73, 176, 28, 192, 42, 206, 241, 174, 218, 11, 21, 237, 193, 254, 201, 71, 98, 115, 60, 211, 94, 103, 242, 90, 17, 128, 99, 247, 160, 98, 189, 78, 41, 53, 128, 125, 11, 150, 171, 221, 27, 9, 0, 182, 181, 143, 34, 81, 145, 227, 219, 204, 38, 69, 103, 147, 90, 241, 7, 103, 241, 238, 156, 209, 124, 191, 205, 217, 134, 165, 1, 195, 19, 201, 234, 88, 52, 191, 173, 167, 226, 224, 13, 87, 222, 136, 223, 251, 51, 222, 148, 183, 137, 169, 195, 215, 59, 21, 172, 21, 5, 56, 49, 24, 242, 210, 195, 32, 149, 200, 57, 16, 133, 100, 250, 33, 164, 124>>}}.
{{encoded, "5nC5dXh8s2y24F3gHBjZX4QFcP"},
{decoded, <<26, 27, 0, 149, 222, 73, 165, 65, 93, 70, 121, 11, 103, 176, 172, 91, 189, 128, 132>>}}.
{{encoded, "2gDTnPzteJxeLpULun1aggMPBQAhgUbf8XsgMJJDQHxGP4yRbTSrtJzUaFzo1y9cEWXKhi9sz8FC2dzwmSNCXwgNg3i"},
{decoded, <<249, 150, 234, 33, 48, 245, 126, 83, 86, 105, 184, 13, 0, 55, 213, 159, 60, 195, 22, 164, 118, 67, 68, 170, 39, 136, 208, 5, 118, 164, 162, 29, 154, 159, 101, 162, 53, 155, 17, 71, 71, 59, 112, 50, 59, 156, 89, 21, 234, 234, 132, 41, 170, 178, 42, 57, 148, 200, 113, 182, 66, 207, 90, 144, 145, 145>>}}.
{{encoded, "3vfiKMajgUaeroy3GGFCgcW3LxXHySKvf77jKUMyB1BsfTYMWsKezZWAvCmyt4k8CTEKuqMVhpJnvBcw2bjD2EXfGPJ8LjXbYzCMEPLe7mq2SbjrtdfzqM5KHTEPf6YgDS5ZfS94o2u1DtPjYmSYTuhX4MtJADuaZjLx1YZTp3eJ4eJDQSPKs929K657TXwNoyP9sUa5KYtVbEgRaMw5YXD4K7oBqtB8fp6wSKsNPA4UDQLMj58jwsmvM1sqaZoeAQmWXDcdhLL9tWYTbY2xKrNHrv4ugNM4JidtPZsXVECHRf9uyDNByWXqmzDLGQ6mzhmbjJqcK8QcqSEFNkmVcpRuBHajX4Tri63CUpJjLxj4ha74rAxM46LHtsPBpKVGPHeRaw1BCw16YFsfUQSYsd5orEo5zSkPQrqnTiDaMyaJrq2FGnFaqQsPdZkWt8sdZEeso6juwoo1nL7Fx2VbL3nBv98GLm9ejcr81yGKTVZReCEtYCt2bkvwaa16Mh7qheb72Ar3KU68RCZ5LZWotYLrEPkaQjEyj44ZL38yAxV8XTAuQpb8LBV5itTzzD1sqc7KUGFpqRcZBcTRJ72uffC1Wuz15iVX7xAycvERq4h6GFz9VPfjC4ma86J7rrdxqMhfp2mWgMmLGHLtHf8UXH9vo451rxRn7WckqmKhUMFe4bFi2a9teXasay123UV9t1CsdfEXgJ8C5E7sCRR7xgT43jMytPsCtuJJ7rT93K2R5YirJEBZVh1wtGFaaeN1imJQRP7RwWxvQE9VbnE7Jr7ZiyCaUomXrAXMt6XtVs1jpgLWuM6Z6q2B5uRtRTbmjYSpyL2UB47bAFQjdjvkL7b46LT2egc5vMNX7UAoFCmjWQ2DY9BdPYxEXrWC4jD5B78Tvj1pApRgUUZXx2cYCkkZhA1p8UPFe12L9bMH1MTYc6hgYwW1JQH5T4AWTqXBJLvhoXvEjeeczNjPbGLn5rLdngqAYDpJmTnSW2p5kB3xQbioYCJ9Dzp1e4w4Y6u67v1A62LUXXPVKS3LauieepxK3Bfc99BETjtgESGfhB6vbj8rwekT9Xxq6ns2xk1AvEXtgepFLkT6Vc5fNgwNx4ewNqJi2MGrkHwFfs17AGxwqfgNFXbqQREXRzfVEcm5jkv27YdkboMQScA5uoPwWMqvvSUh9VdBbtVDCjKD9gfrtAZXHouZMvGCd78JxtG97QXjrY5MAPx3L9DV5Gazzig9apf"},
{decoded, <<35, 199, 10, 194, 245, 90, 181, 134, 21, 119, 149, 177, 251, 166, 8, 156, 178, 39, 13, 180, 21, 234, 23, 140, 166, 23, 28, 12, 96, 228, 252, 51, 133, 213, 109, 217, 97, 237, 33, 83, 164, 45, 151, 208, 180, 29, 138, 57, 168, 13, 136, 79, 92, 141, 195, 242, 3, 41, 123, 78, 197, 225, 216, 202, 28, 145, 226, 55, 26, 216, 250, 107, 225, 159, 41, 209, 136, 165, 222, 247, 0, 167, 82, 171, 133, 28, 149, 44, 31, 41, 164, 168, 15, 239, 30, 27, 4, 203, 208, 109, 65, 215, 215, 134, 139, 128, 75, 162, 211, 136, 227, 83, 217, 171, 182, 44, 88, 27, 230, 170, 139, 90, 180, 55, 19, 127, 8, 197, 55, 227, 112, 222, 164, 120, 100, 50, 54, 32, 1, 15, 51, 121, 248, 180, 83, 100, 238, 14, 56, 181, 41, 207, 254, 92, 60, 124, 159, 167, 184, 146, 123, 214, 154, 107, 91, 138, 103, 140, 26, 51, 203, 171, 121, 213, 48, 231, 220, 23, 51, 169, 105, 182, 70, 83, 157, 189, 141, 102, 54, 38, 165, 187, 137, 77, 52, 147, 105, 107, 51, 159, 163, 206, 106, 248, 39, 173, 200, 33, 36, 190, 127, 219, 148, 186, 84, 18, 172, 231, 83, 252, 16, 123, 41, 84, 216, 198, 230, 42, 222, 91, 179, 66, 223, 117, 139, 162, 149, 211, 191, 140, 156, 223, 187, 128, 11, 48, 10, 178, 251, 41, 221, 166, 12, 215, 99, 8, 214, 105, 75, 28, 55, 167, 248, 120, 140, 42, 160, 193, 22, 225, 127, 171, 212, 238, 243, 145, 78, 102, 145, 224, 117, 213, 37, 147, 9, 250, 227, 214, 125, 121, 55, 118, 209, 244, 169, 92, 73, 102, 76, 198, 237, 101, 141, 66, 149, 152, 0, 102, 47, 175, 140, 7, 159, 78, 143, 200, 181, 22, 101, 139, 239, 183, 47, 188, 227, 52, 180, 246, 129, 173, 40, 233, 68, 127, 185, 81, 239, 22, 252, 94, 5, 88, 41, 153, 26, 111, 44, 233, 118, 216, 18, 216, 222, 113, 135, 200, 59, 239, 52, 17, 20, 129, 6, 242, 73, 121, 115, 233, 211, 197, 27, 87, 175, 105, 175, 0, 249, 22, 180, 16, 172, 25, 170, 97, 35, 164, 166, 18, 224, 58, 88, 183, 189, 176, 177, 62, 133, 188, 145, 229, 26, 247, 89, 132, 224, 121, 108, 36, 11, 189, 222, 234, 99, 145, 187, 223, 40, 79, 232, 29, 255, 92, 4, 0, 60, 217, 102, 169, 203, 112, 6, 28, 187, 110, 110, 73, 6, 140, 78, 137, 93, 192, 87, 53, 166, 100, 59, 115, 152, 91, 198, 13, 229, 34, 124, 58, 247, 247, 101, 173, 162, 48, 53, 222, 16, 239, 185, 192, 61, 45, 236, 176, 59, 208, 148, 76, 104, 142, 163, 30, 142, 48, 43, 6, 83, 85, 191, 63, 21, 141, 63, 156, 156, 50, 91, 61, 254, 43, 137, 105, 15, 162, 78, 175, 164, 201, 66, 78, 227, 9, 126, 240, 246, 54, 198, 53, 54, 153, 224, 235, 2, 206, 221, 187, 76, 176, 60, 3, 80, 156, 25, 185, 200, 184, 84, 125, 115, 90, 169, 160, 132, 28, 48, 103, 188, 29, 252, 195, 21, 39, 144, 66, 110, 20, 16, 210, 59, 53, 110, 176, 187, 14, 79, 192, 176, 127, 145, 115, 22, 35, 10, 172, 152, 28, 171, 42, 75, 160, 251, 30, 72, 114, 123, 4, 102, 147, 76, 253, 53, 199, 3, 150, 80, 118, 90, 33, 232, 147, 16, 150, 80, 38, 214, 190, 43, 194, 85, 43, 207, 40, 195, 191, 12, 245, 191, 63, 20, 238, 189, 157, 235, 109, 199, 31, 61, 253, 92, 240, 75, 52, 246, 33, 124, 126, 2, 74, 188, 212, 129, 23, 144, 244, 28, 237, 192, 118, 31, 84, 71, 167, 144, 112, 183, 2, 63, 80, 187, 197, 94, 119, 183, 99, 253, 213, 13, 82, 122, 0, 40, 29, 193, 4, 120, 251, 165, 103, 237, 42, 89, 77, 198, 237, 0, 192, 236, 180, 128, 160, 91, 233, 141, 243, 30, 93, 139, 52, 98, 149, 127, 4, 41, 225, 117, 202, 126, 170, 107, 190, 33, 179, 110, 225, 74, 206, 168, 17, 181, 55, 225, 126, 5, 50, 101, 251, 117, 116, 245, 114, 53, 246, 14, 161, 213, 51, 177, 118, 247, 158, 49, 137, 5, 204, 156, 66, 247, 212, 81, 64, 137, 1, 63, 229, 78, 141, 163, 179, 240, 28, 62, 208, 244, 77, 82, 56, 230, 23, 141, 178, 240, 81, 195, 11, 157, 238, 46, 76, 235, 85, 29, 43, 71, 6, 50, 149, 149, 218, 207, 133, 6, 71, 184, 161, 135, 45, 115, 34, 61, 27, 47, 69, 191, 4, 11, 132, 131, 227, 40, 170, 40, 53, 63, 228, 186, 11, 220, 53, 45, 1, 224, 36, 245, 230, 184, 190, 228, 183, 148, 8, 69, 237, 148, 14, 46, 37, 40, 249, 218, 193, 96, 160, 3, 55, 60, 254, 139, 216, 110, 174, 245, 162, 254, 108, 92, 221, 165, 15, 119, 234, 231, 172, 177, 142, 125, 186, 116, 130, 147, 179, 129, 253, 166, 5, 224, 206, 192, 37, 181, 167, 155, 99, 79, 241, 178, 44, 182, 224, 251, 137, 221, 222, 91, 129, 27, 165, 39, 182, 205, 108, 26, 194, 26, 103, 119, 25, 41, 217, 60, 97, 83, 128>>}}.
{{encoded, "4hwMxphPWYfYCP7N7awfdXKtPUSNNNe85athmifoea9zA9r2cvcow5hrxDwUPSzt79rEJRS6gFGPtUTHRRZAUcHEsJ1NgsxQddSmCt5aRxD47QGQ5esiAtxiZHugJqW6wEowAGTfQiuDsYCNZz1t3QuvLEC6kFVrjSGV48dNrUovQoz9oEa5gmZUUdrdJAfURe8XDRVUu6z69zKpdVo9TZaWRTwFS1U2vqXmNsHCPMNwSLdBYn7UBJsnXYmtA98uWgoU2d9mNwnPgjhYowgXFJBvEwacXRwGFUTtJAqNhUsvRKyf8ndon1inKPNGAwYq1RFn6iGsLo8WNgR23UuostmqT9FQhJ5eBfwevHjca9jbkUxRDg17N18aMydQ1w143RhccDRDjFcbdAcVgxnxZTPLJR98rBJyyMMMzoAnQ7SfKspWivq6mPNNGE7KvrebxoJsdh7fgBEeAKtxvPM2myc6a91GoFADnortBcEaT1ikdpRrKJZtKFtWMthgv2L1Q9xk6uJut6vxKdWVqP5q8353oLv7Zx6DeuQXwQrogWikHpSETRzBUPCMTq6mMCHDhhCE1BJJF8fiHWGouTVf92h4mj1ALwopAxwdyLBDNjUg7nPwkopy7WEFjRna2Wne4Afb4cxSYkEofP8TJUrNuPWfCPpzi8Y79WPCEHBM2CKSUkDsaH57PR37ArEv225wBEQ85CH6ppa3PZ7EZ9CJ2GY9b4BWmfmuQJMaPmKHwTY5dbFXbLJiR8vjEn3kdjz8iu4wuoHWTQLeXg8FBgcnzfxLYjdXbvZY2FRrMyvxc9he4KXn7dY96wtDhJ62n5FKsNDNz2r4QzGQ7usErkASxwQYuDVYyQw8drFicoyMKYBiPCeDdYiiVidRemxyHA5v5gZcioWWwAZ8G4mayL35gtzuoxCENYd1WSj6JJpG1JTM3sERmV5uKHqrnVtPNBkpNeyjFZDx1v92PtBP1PQVprLDF9TMktpKsuBojeoUQ2Fh"},
{decoded, <<43, 141, 202, 76, 80, 63, 120, 100, 145, 42, 168, 3, 140, 116, 200, 201, 8, 110, 105, 142, 33, 20, 34, 218, 56, 88, 31, 8, 35, 69, 174, 230, 193, 167, 222, 239, 115, 96, 155, 18, 172, 114, 222, 215, 198, 94, 52, 96, 106, 119, 218, 106, 220, 74, 86, 196, 0, 33, 134, 221, 146, 128, 153, 72, 216, 56, 205, 119, 158, 144, 66, 128, 228, 159, 82, 149, 85, 198, 147, 171, 179, 76, 18, 60, 11, 120, 149, 104, 75, 61, 168, 91, 134, 98, 148, 42, 122, 77, 188, 229, 139, 108, 222, 35, 243, 105, 218, 123, 100, 240, 20, 221, 42, 111, 36, 90, 9, 161, 248, 22, 137, 227, 93, 249, 203, 232, 180, 236, 1, 130, 148, 231, 160, 42, 242, 154, 182, 13, 187, 149, 173, 96, 59, 218, 57, 117, 49, 171, 193, 11, 141, 247, 198, 70, 29, 103, 187, 229, 82, 194, 40, 243, 49, 9, 241, 25, 138, 44, 154, 25, 97, 144, 122, 223, 213, 47, 206, 3, 161, 34, 130, 169, 6, 50, 88, 89, 192, 121, 75, 63, 235, 204, 231, 44, 188, 228, 102, 88, 219, 126, 143, 238, 54, 132, 138, 199, 167, 112, 186, 14, 81, 58, 16, 150, 6, 247, 132, 128, 85, 59, 59, 37, 161, 108, 32, 9, 109, 142, 56, 114, 112, 50, 206, 101, 163, 26, 249, 104, 215, 17, 112, 115, 113, 146, 197, 23, 43, 60, 43, 211, 150, 102, 213, 6, 207, 34, 48, 52, 99, 41, 110, 154, 104, 137, 3, 118, 66, 233, 253, 50, 1, 37, 160, 62, 233, 48, 12, 56, 98, 162, 230, 168, 240, 30, 182, 226, 126, 170, 169, 142, 155, 95, 143, 4, 15, 7, 63, 182, 45, 106, 112, 136, 159, 33, 117, 170, 127, 248, 161, 144, 197, 110, 99, 75, 150, 238, 150, 94, 1, 195, 111, 162, 190, 2, 236, 233, 39, 255, 246, 8, 18, 237, 229, 149, 184, 65, 241, 190, 140, 119, 234, 54, 69, 136, 23, 103, 22, 104, 43, 164, 135, 222, 135, 58, 81, 45, 232, 221, 107, 6, 23, 163, 155, 81, 170, 246, 254, 105, 110, 119, 105, 229, 146, 226, 128, 131, 214, 169, 208, 124, 194, 32, 242, 176, 135, 37, 181, 35, 160, 90, 206, 19, 149, 170, 225, 49, 148, 145, 33, 124, 52, 211, 237, 103, 99, 12, 193, 151, 155, 13, 197, 182, 1, 87, 233, 37, 17, 10, 145, 87, 183, 72, 246, 154, 107, 248, 65, 144, 54, 184, 72, 158, 180, 234, 144, 3, 213, 162, 163, 188, 238, 83, 151, 173, 108, 255, 116, 140, 220, 44, 243, 17, 106, 229, 42, 226, 94, 117, 201, 37, 242, 227, 231, 26, 108, 204, 147, 165, 249, 120, 136, 116, 114, 42, 166, 91, 119, 220, 214, 67, 162, 60, 252, 42, 139, 247, 181, 124, 216, 232, 77, 88, 101, 198, 164, 234, 15, 223, 48, 136, 0, 12, 220, 40, 84, 185, 121, 206, 107, 9, 90, 118, 136, 54, 124, 98, 223, 72, 232, 164, 204, 39, 36, 197, 41, 210, 252, 62, 218, 235, 120, 118, 136, 235, 91, 19, 107, 44, 29, 115, 182, 99, 14, 150, 5, 211, 47, 73, 190, 237, 14, 59, 23, 6, 223, 156, 243, 139, 199, 6, 206, 74, 7, 71, 17, 79, 62, 60, 13, 27, 105, 130, 108, 15, 37, 50, 46, 198, 46, 243, 107, 42, 25, 209, 152, 21, 127, 217, 189, 71, 70, 64, 88, 235, 147, 98, 81, 253, 250, 236, 238, 34, 121, 229, 240, 239, 249, 189, 107, 90, 10, 42, 254, 178, 226, 127, 72, 137, 12, 198, 241, 145, 40, 216, 52, 181, 150, 154, 31, 140, 233, 169, 143, 40, 51, 223, 173, 141, 210, 103, 214, 167, 55, 59, 6, 127, 61, 136, 143, 115, 253, 222, 96, 215, 218, 236, 188, 5, 182, 238, 171, 141, 96, 210, 183, 247, 197, 105, 215, 103, 228, 23, 42, 86, 218, 192, 116, 84, 42, 81, 62, 235, 41, 232, 59, 178, 139, 39, 148, 221, 165, 153, 14, 73, 74, 227, 250, 92, 186, 185, 103, 19, 131, 70, 55, 35, 180, 144, 204, 24, 213, 236, 162, 20, 125, 32, 120, 236, 45, 173, 235, 156, 116, 22, 253, 73, 20, 138, 102, 170, 253, 115, 208, 127, 192>>}}.
{{encoded, "mTVEwa3Gu8ypUUMPXtoVxcHVe8V4nKA8jbL8KkNyUSjRSRpZwXhhJqjq5346MPUmnLkL4dUQWBDJHoZsmYTzjZyZfJmVHuJFecxUvWxFQeciLQpYpc3Lbdk49Tm4yGgogHniySiyGg13XA8XzMECCLuFD9v5eaCSmAaPrvr8NDAMcW7ibbhZnEwCeZkRxvpP6tVnV341TxNSmQaz7UGBkrJciaCFhmzsqfD9f4HEE1977Atw3iiPhSbzmPwcxKMyxhVfHBhLHsAHQ7b35USSYQMaS9j5dAm9sJ2pQYMEXEex2L9x5axZs7YxpHcxwRNVbSe2e6iuWbWxpSV1VCG432RsfAXMHQsXwqFbrEbavcoFW4f7nF3sfz7eZhwzS"},
{decoded, <<181, 233, 197, 70, 229, 76, 201, 12, 58, 81, 234, 188, 150, 74, 87, 137, 58, 139, 141, 159, 121, 54, 97, 101, 9, 95, 129, 58, 152, 226, 246, 81, 65, 136, 30, 59, 135, 176, 204, 75, 67, 30, 145, 24, 204, 165, 13, 214, 119, 96, 47, 24, 147, 3, 80, 55, 96, 222, 191, 11, 45, 74, 110, 132, 142, 180, 186, 73, 96, 226, 49, 124, 207, 107, 159, 116, 188, 37, 111, 50, 53, 86, 193, 61, 161, 64, 89, 223, 214, 7, 144, 243, 200, 243, 117, 11, 242, 234, 22, 193, 217, 95, 166, 122, 217, 250, 7, 127, 92, 6, 144, 30, 216, 198, 96, 196, 232, 16, 113, 112, 206, 234, 174, 42, 2, 214, 253, 68, 240, 162, 215, 73, 95, 25, 51, 252, 231, 248, 162, 225, 172, 124, 178, 91, 94, 202, 77, 130, 25, 190, 159, 246, 145, 120, 30, 216, 253, 190, 156, 94, 45, 40, 176, 164, 196, 172, 242, 105, 227, 190, 92, 7, 125, 170, 91, 138, 152, 123, 22, 57, 31, 117, 54, 228, 77, 77, 16, 225, 164, 1, 65, 152, 110, 50, 64, 174, 154, 226, 96, 89, 252, 218, 245, 102, 213, 142, 77, 121, 60, 118, 53, 54, 71, 46, 254, 233, 227, 192, 56, 224, 177, 250, 19, 254, 166, 200, 1, 155, 20, 249, 5, 248, 90, 222, 197, 243, 163, 171, 70, 180, 134, 103, 4, 63, 67, 36, 168, 190, 84, 225, 45, 42, 188, 216, 89, 24, 80, 255, 174, 157, 72, 81, 23, 30, 151, 78, 229, 164, 156, 245, 70, 202, 244, 16, 152, 3, 5, 232, 251>>}}.
{{encoded, "7UF4LDWRF8AiLaKM62183rzbK73e23vkPeZYAvTEBsgzRNvEqtwx1abEuzUwc61LfA1DwG4KfM5WgVGfR2VkbuQ44BYUzthv2HZTB7LvLW9MQ9RB7gENHtDcXBCFuK7vBnsbQL9qADXLKPmD7fJzyUsQ4vpLtbBsRfVY6NbZWw15u3db9kdx66cvJLjoHKqqi3oJ2e5xJgDZT7q95fovEzqEef2zvXMMxgsVqdwfbnXhAaiwnxsq8Utz2RXcWrobzUGy3XEDf2XrYyYpsbVUTQVtDqFtEw9fzF8n7C9h4ocU5kptaa7fgnmpk9fqiSKVSZA6RognFaySksQM1DU4m9R4KWRbJvMCQS7ynqhu1LwuD7az4UgPHtTUFBqNrAhHUvqXQx3fkkkkLeuG1jD44YTZVkpovPV1H5FfdJkbMM1reNzBjJRiZTvjVHKXMnUovP8KNWfeU7D5cP85xVD6Tm8XE9H3rX2WiCCweUeJQDx2YLmRUVjkhyKSA3NPoUSK2x8jdQkdAZdN4qwZZfToFruXLefjYGvvoTJebwyhJxA1NXgi1WpwhJzaNAT43wQSS5ZeB6m783q5oozL4XNqwvoJktYn29kp7y7XDMA5DaSjqVYQLZAG6qugwY9VnkxopiFCUHk9f9jUtvZfzxHuj5ESnNkQUTrwghnDRf22DyqmvhbEz4CcxLHh93nqDMZCdfNMLBEwaJBTPKCXMSpVGY6ydNds4KZZKgWgAoWCYCiF1ShWL53xEznDyhianZxiaMKFkeC9BfvWFGsX1EAPTNvrHvWG8cbMsiCntA95dCguTtWC9xaZj3UVnRQNvYRXDpDtSJgvKFjDRqw3oJk2G9hpRUpxahDnn84zAY6PJAHH7AUdDichXPxbMVtmiicuc1XxZvrEFjC3mtAWtUw9BPjkd1ZUSyVks8sSCQUAmU7K3JE2nhLm1SPDd778F9dqVcz3GoQcLGz8evpeAuXTkx4nLYbYjGygPEhR2d22LWA4dh94V5jwxF6Hqf4XXJAbhmi7Ba6Wqs2LxNBYfapjEEDTCquMZCgC7jHHCzYUg96RRUxuyEsaseawP8ivbRhtyiFoeNHrc4wR8vPx8ZoSB1B6qoGzHZsWfRzcNMFMREm8paAXZo6kZGrkHTHGAPjYiSaakCLHoWKUKbcps8ADkrfLTTUMqg5tmvcc1XTdmhY9DUtUKnU4pfcdvhhk48bQoP9o1ymJcE3LhuxU9EgaNkLjVC4EEwTZM2oMEeS8cmaJX9Qz2H19cTY3zU5v12u71LF5rJRBNf8"},
{decoded, <<179, 170, 192, 143, 192, 106, 87, 83, 233, 1, 172, 179, 24, 194, 207, 111, 159, 97, 88, 42, 242, 143, 217, 56, 79, 78, 129, 155, 54, 48, 36, 229, 36, 49, 84, 151, 132, 237, 170, 58, 213, 8, 48, 247, 114, 33, 220, 112, 67, 63, 232, 208, 137, 143, 240, 69, 100, 218, 30, 122, 228, 55, 138, 2, 135, 176, 164, 184, 197, 65, 105, 232, 224, 141, 244, 152, 39, 182, 103, 8, 214, 9, 197, 3, 203, 80, 243, 110, 77, 156, 136, 141, 162, 248, 31, 130, 118, 96, 60, 229, 133, 91, 17, 147, 39, 153, 12, 132, 175, 93, 42, 139, 146, 140, 28, 244, 209, 43, 22, 59, 194, 34, 117, 252, 1, 243, 209, 160, 242, 207, 36, 23, 60, 166, 213, 191, 136, 123, 200, 107, 144, 184, 71, 42, 54, 70, 119, 83, 21, 150, 66, 21, 69, 240, 32, 159, 200, 37, 194, 142, 49, 217, 42, 174, 60, 109, 119, 228, 155, 27, 203, 170, 125, 131, 47, 109, 154, 156, 164, 29, 159, 217, 228, 243, 217, 245, 239, 156, 185, 35, 190, 207, 131, 58, 77, 154, 146, 22, 51, 52, 116, 90, 25, 48, 56, 133, 206, 113, 179, 198, 193, 249, 253, 97, 171, 239, 52, 27, 190, 110, 10, 145, 83, 27, 129, 196, 233, 136, 17, 155, 245, 17, 78, 237, 235, 12, 238, 115, 101, 58, 122, 27, 27, 105, 233, 88, 127, 14, 218, 96, 12, 250, 232, 109, 53, 35, 46, 85, 15, 233, 69, 154, 39, 107, 109, 252, 127, 243, 195, 29, 9, 51, 195, 37, 246, 162, 200, 234, 75, 94, 59, 229, 235, 7, 53, 67, 123, 150, 21, 26, 51, 84, 214, 44, 243, 182, 39, 17, 72, 171, 248, 105, 253, 100, 200, 96, 216, 220, 222, 4, 171, 90, 68, 79, 230, 123, 235, 204, 217, 254, 93, 167, 230, 4, 175, 234, 66, 153, 93, 157, 191, 121, 122, 42, 200, 124, 251, 123, 251, 83, 14, 210, 154, 97, 50, 161, 197, 34, 43, 183, 8, 47, 119, 25, 113, 102, 43, 142, 177, 151, 105, 49, 103, 190, 205, 240, 244, 60, 64, 207, 38, 205, 157, 137, 23, 8, 223, 153, 213, 28, 97, 53, 109, 203, 65, 215, 135, 168, 129, 200, 28, 68, 81, 12, 220, 219, 181, 13, 52, 245, 135, 15, 230, 195, 127, 236, 51, 4, 66, 78, 9, 197, 190, 59, 76, 125, 44, 74, 62, 234, 62, 176, 14, 80, 254, 83, 111, 34, 7, 32, 212, 91, 2, 238, 95, 239, 133, 136, 205, 150, 12, 9, 194, 238, 16, 170, 221, 204, 23, 183, 109, 216, 82, 25, 146, 235, 9, 199, 60, 129, 219, 146, 1, 182, 235, 226, 219, 120, 89, 253, 78, 24, 234, 57, 245, 221, 43, 63, 168, 192, 133, 155, 40, 168, 233, 92, 47, 58, 218, 229, 188, 165, 221, 243, 113, 159, 36, 252, 3, 66, 227, 109, 2, 31, 211, 109, 185, 3, 143, 213, 196, 170, 123, 0, 42, 67, 40, 235, 248, 40, 112, 110, 19, 177, 213, 38, 27, 121, 98, 215, 148, 114, 177, 192, 217, 143, 84, 52, 106, 68, 123, 5, 138, 17, 74, 126, 145, 188, 184, 159, 166, 179, 174, 211, 49, 3, 192, 182, 144, 153, 190, 147, 122, 31, 246, 44, 93, 105, 250, 91, 212, 25, 197, 250, 61, 73, 75, 230, 45, 150, 89, 147, 128, 63, 209, 91, 3, 191, 233, 235, 184, 82, 234, 194, 208, 57, 65, 152, 51, 211, 218, 163, 147, 225, 187, 182, 8, 138, 12, 181, 72, 106, 4, 215, 246, 237, 116, 78, 172, 120, 78, 3, 11, 220, 139, 5, 55, 35, 85, 154, 13, 224, 8, 180, 88, 223, 106, 169, 228, 149, 168, 143, 252, 255, 83, 169, 33, 69, 138, 182, 205, 104, 180, 180, 45, 16, 5, 228, 221, 4, 102, 33, 84, 191, 59, 190, 219, 171, 95, 175, 110, 169, 21, 121, 176, 7, 229, 43, 215, 136, 202, 109, 33, 233, 106, 134, 98, 200, 219, 101, 220, 245, 112, 138, 106, 31, 13, 210, 155, 132, 241, 232, 9, 91, 210, 187, 185, 76, 2, 120, 60, 255, 40, 186, 134, 31, 55, 148, 65, 115, 132, 198, 184, 201, 121, 34, 182, 111, 63, 118, 249, 104, 222, 244, 245, 190, 9, 127, 28, 28, 231, 89, 90, 185, 118, 14, 234, 152, 255, 215, 239, 87, 178, 86, 14, 121, 215, 222, 241, 115, 190, 18, 49, 179, 169, 78, 94, 163, 32, 49, 152, 177, 96, 70, 127, 226, 9, 23, 63, 255, 232, 171, 152, 211, 227, 24, 87, 105, 61, 64, 255, 245, 142, 222, 119, 40, 195, 119, 165, 120, 156, 221, 92, 56, 25, 243, 129, 44, 112, 187, 155, 62, 44, 82, 147, 142, 4, 78, 235, 226, 79, 255, 220, 56, 142, 249, 149, 97, 94, 12, 228, 123, 158, 10, 195, 227, 55, 59, 229, 180, 205, 21, 15, 214, 220, 221, 4, 219, 69, 189, 121, 35, 156, 28, 12, 111, 228, 255, 220, 31, 96, 108, 12, 26, 164, 63, 38, 210, 30, 187, 143, 201, 243, 255, 47, 71, 44, 230, 77, 103, 217, 17, 246, 221, 23, 34, 159, 54, 148, 5, 101, 157, 147, 44, 244, 132, 175, 75, 242, 157, 0, 227, 199, 35, 166, 69, 225, 170, 199, 235, 244, 209, 215, 188, 54, 99, 247, 73, 146, 81, 33, 153, 132, 85, 46, 96, 159, 205, 16, 49, 190, 184, 87, 104, 142, 177, 157, 162, 126, 141, 63, 206, 17, 211, 135>>}}.
{{encoded, "46J4FTyPt8Xt3nso7cafRvsqsthxfXpJTrfwZkWgDqZdS63wdhACH7H9XQpumoTh8NzpEwtYWS1Hbca7NmXgRfsbDoAARKbSLNKk5vkW41AvymNmMrocus2Zai5W2Usry3AeGjfrTL8RLycdJNZsAbWwmVPrYwRsWQ1Jx5KLBZhimi1EsPkjAKNYG84xbTmG6Yy33mFjMdkqa9QwkJBgDi3NVhx2sLxG1USRy4LmsHkvZUz2NXSRwhRbHfT4izF48PWXaEHMdaXYPpFUgkrGDPsMegKQXGexgT4k3Y5NDQJgKNZ6p7zTmdypMEH1Y6pVJyVr5xVED6pywnt6XXNzNTjBaxJPgWezHR9rhjYjqHCKmTE8Rnzs9n27W2D3s8JLfxUsAydTBt316e2KH3vELGZoEeuYJyhM6Lh4wyGyXa6RsNN4WBJP3C1JYFEa67GuWqnEGtTMa9dxXC4CP8v3WL437hRjZPVjBLd6JUWGLR1wnhPtG1byd4dokmTHrgMDahteGnK8pBw8DsM7fNkgXrng61aycxjTaCJqqQbiRy6ANo8EU6D9LZBTJiAzYURkRJs4AJRGSot33a75dv3yabTBYyJnpneCscTLHZyq5GsXtqDGvpBAWm2k3CfUPcEpQ4vxSmKYXyqJxxtb4mdiqyTDgcJSfrasfhg1z1Af2EM1aVt3j8bH1RFidf72jturoCPyzgDFJkqWiGZ9EJExsHC2dgGRBw5cP1hupRBP33XEDgKqCH8GQbMTx18YZL2E5QJbnZbA2EXs4tTqWTkH6"},
{decoded, <<3, 73, 188, 225, 130, 186, 60, 213, 25, 28, 18, 34, 241, 128, 233, 122, 231, 251, 237, 83, 62, 39, 25, 69, 48, 3, 66, 118, 178, 163, 37, 46, 35, 210, 208, 244, 238, 4, 212, 7, 2, 248, 232, 7, 178, 24, 74, 167, 246, 39, 248, 41, 85, 210, 96, 220, 196, 37, 209, 45, 101, 36, 46, 213, 26, 72, 175, 55, 133, 128, 6, 244, 92, 183, 150, 4, 137, 32, 19, 194, 81, 203, 83, 140, 63, 95, 59, 31, 192, 52, 98, 181, 168, 244, 99, 51, 111, 115, 186, 55, 160, 136, 100, 55, 109, 132, 182, 31, 101, 231, 28, 57, 255, 172, 211, 187, 118, 58, 213, 35, 44, 188, 135, 178, 240, 238, 231, 188, 39, 154, 204, 196, 123, 161, 117, 171, 152, 218, 181, 76, 164, 16, 142, 50, 229, 254, 41, 166, 205, 76, 223, 118, 168, 71, 165, 100, 65, 174, 182, 235, 164, 232, 10, 254, 125, 240, 33, 83, 87, 53, 255, 116, 46, 56, 201, 118, 140, 208, 235, 108, 170, 196, 201, 95, 180, 242, 110, 9, 59, 162, 27, 28, 226, 87, 135, 174, 48, 25, 76, 168, 80, 184, 239, 67, 214, 62, 114, 100, 226, 242, 178, 107, 38, 193, 122, 29, 97, 240, 162, 22, 184, 48, 113, 25, 138, 84, 59, 135, 72, 186, 206, 207, 30, 66, 23, 41, 65, 47, 196, 31, 189, 126, 217, 41, 178, 98, 136, 0, 242, 62, 67, 211, 206, 40, 100, 219, 83, 175, 49, 122, 225, 236, 52, 101, 128, 20, 132, 195, 214, 165, 225, 46, 34, 102, 189, 129, 138, 116, 117, 171, 19, 15, 181, 62, 63, 59, 167, 53, 179, 143, 242, 223, 94, 29, 53, 234, 109, 20, 3, 246, 194, 164, 14, 23, 156, 169, 27, 244, 216, 250, 85, 89, 30, 143, 78, 61, 20, 92, 30, 32, 203, 153, 162, 36, 39, 153, 139, 57, 170, 184, 216, 6, 201, 173, 124, 76, 191, 75, 218, 151, 176, 179, 52, 103, 127, 224, 164, 117, 88, 162, 126, 88, 106, 149, 178, 247, 179, 176, 25, 196, 41, 84, 171, 49, 66, 44, 187, 225, 117, 48, 218, 200, 101, 78, 64, 116, 116, 125, 29, 209, 132, 254, 220, 171, 0, 88, 113, 203, 105, 130, 104, 107, 115, 15, 65, 40, 79, 201, 68, 135, 33, 53, 154, 56, 104, 146, 186, 209, 213, 252, 212, 15, 16, 89, 38, 20, 90, 125, 168, 225, 246, 101, 80, 233, 92, 92, 48, 204, 99, 235, 79, 2, 114, 76, 235, 102, 21, 73, 96, 195, 235, 69, 144, 128, 121, 172, 81, 126, 20, 87, 21, 111, 28, 215, 108, 3, 175, 77, 126, 4, 109, 59, 26, 218, 58, 121, 253, 50, 73, 185, 242, 38, 121, 187, 16, 160, 204, 237, 129, 233, 82, 234, 49, 201, 124, 196, 63, 149, 206, 56, 53, 138, 128, 229, 113, 34, 86, 48, 179, 153, 134, 134, 40, 247, 205, 252, 177, 242, 162, 67, 47, 118, 73, 255, 43, 30, 0, 165, 103, 106, 162, 32, 184, 61, 181, 17, 241, 2, 84, 70, 100, 150, 64, 127, 103, 105, 22, 16, 4, 133, 77, 203, 20, 65, 133, 134, 219, 18, 53, 28, 133, 53, 219, 236, 161, 166, 1, 212, 132, 61, 18, 191, 163, 83, 234, 171, 34, 241, 212, 166, 126, 215, 173, 177, 88, 80, 74, 145>>}}.
{{encoded, "K5VTvFmvTyt38rDqXyVVKJXR1E9Ubf8BqrZ"},
{decoded, <<10, 45, 186, 152, 110, 210, 194, 236, 55, 27, 205, 27, 91, 207, 227, 102, 226, 25, 4, 96, 201, 15, 82, 179, 2, 186>>}}.
{{encoded, "66JbWnjEmDAP6BbAet3EiVq4tPKHRiVEsnhh8Sb894U2yej6UtTa2oijaKu8yczwaHtGAP7zj15fCyvxhuCRU5KURPWwM5WFdaXY1ULwhUKpFyYYPUgRhVYHrGEAzcQsf3zpiR3YVn1cSaGJVtpnWBwyYRHAZS5E8zRscWBBj2aQtBkB2NYvAnf3j3Sc9zjCG6FEMyTKVPm2zBWyVopowRbG5eLdeksY2osmwKN27REr36bdFTn1Wz3ab3gjAir6hn9M4awSiNVSzMZFNuEMd6bDJV2jCs2oUyYfXfDGKTtP4fVfrJQgcDj7dSvoz4wrhANFdFaTsM7K6VfwEL8o5XRo5E6JvbAwsGAmsaPgp7LXt4R7wfZGt9sjWYNY89j5Cd4nm6bC7nc4fZwWnRAwgjKXDM9EquGGEGDx6XWWxukHSu4NsjrcwvZrxw1aZ783x2wog5nGfAPsVAPk7n84wzBZNaDH2sZSQAYVJiZw9TVcngjd49raRRLzSQQjyvaRSTyCtSzjPeTxinD9JD7NP9DjkVC1Lzk1BytNTT2BZcgrRZi5kFEjVs5nnGZwtMYpCsn6JPAi451wuzuKwBD5oy1b9G65PUE65j8VhweadA1q1fpW8HN1KoKsD7DBP1Zr1ZVJ2Ld2pXg1ZSdRd7tfg3geUF5o1DZMaCSDBvZjr6EzMAR565yK4bu6yzL3MwhbaiDkeYAn7UTh8y4U8wTooNJrNasNdqBpM59ib5EWRH3TEhZe561voLzs3K9a2DdrfztRDfEYxyk3yyAVcSpBYy4MScVioSWDGNNDpy2nR4hpJBnvneT2Hg8UBQTaVADKMXkAmo42ukxaJodHf9787RXqNK3SsYnZHakU2NvUkAXpeYKNtL7frqSY119k7CVZxxzrBjopvPEQassfKZUdTJbCjiXtaTyEoh5aPPJugUZ6xs5cqMLSxfb2q18sqYZ5bwVoKqwAv5yUwxGyXBYcGxucB6REpMdPUCdKgEERubkxuiErr48U2ZX9eNFWvMDL9J1aLW2q4CdEg6qDHxRgD3iZDDsmqkaEEqGXfwWuDaxVc6kuT4FTTJCUfzNtbpXFwzCwCF1pF1PSE6bhFoTcpTBEPWxpdQDauAMU9SGe7ekKQsMCLdbEZpbhRpaQvavzuzuUvC3edAG1mEC7ZdfMDxJusYuZ4rSW29rZNYteHgejiCASeEY285DB7mVMP68mQzuCw4EELc54hjYAS9Tu2rwW3eGF6Lqv3i9hfLywqFHGBoqQsVJ1XsPXAGasxayVwA6tHVpsin1HuSfm568nCzXJMSVeNDwN9jEzMe8pQwZpBaqR4z6B"},
{decoded, <<159, 223, 88, 149, 100, 0, 22, 203, 197, 53, 223, 132, 22, 240, 130, 23, 31, 187, 31, 54, 213, 56, 153, 144, 80, 200, 234, 100, 187, 154, 74, 122, 199, 55, 236, 252, 44, 28, 56, 158, 105, 186, 155, 80, 51, 135, 199, 82, 221, 48, 0, 60, 215, 100, 186, 44, 254, 205, 210, 50, 81, 180, 111, 112, 188, 141, 57, 49, 146, 74, 82, 29, 142, 200, 93, 243, 236, 202, 154, 146, 14, 104, 240, 164, 251, 252, 237, 148, 55, 21, 222, 84, 42, 162, 228, 38, 168, 193, 86, 252, 40, 5, 169, 130, 235, 194, 95, 138, 234, 97, 177, 172, 30, 79, 47, 126, 224, 24, 198, 244, 134, 159, 12, 2, 40, 105, 17, 236, 51, 121, 33, 73, 168, 220, 155, 150, 155, 162, 183, 208, 191, 81, 135, 53, 237, 43, 223, 187, 80, 110, 77, 13, 246, 112, 171, 182, 101, 60, 135, 178, 128, 164, 40, 1, 243, 47, 218, 67, 228, 128, 241, 249, 146, 48, 224, 87, 127, 9, 119, 60, 39, 204, 111, 40, 75, 242, 69, 84, 59, 254, 175, 26, 239, 87, 25, 136, 97, 207, 151, 165, 154, 52, 58, 238, 17, 168, 152, 213, 220, 224, 42, 232, 225, 160, 107, 1, 142, 245, 229, 224, 147, 170, 139, 117, 204, 98, 58, 189, 22, 12, 227, 123, 177, 144, 94, 90, 141, 234, 59, 122, 141, 139, 150, 186, 237, 100, 216, 127, 237, 140, 103, 177, 57, 115, 252, 172, 22, 134, 209, 209, 163, 138, 58, 41, 59, 49, 251, 18, 0, 229, 149, 216, 206, 202, 206, 8, 214, 142, 101, 239, 66, 149, 2, 141, 123, 27, 61, 155, 133, 6, 209, 158, 113, 206, 157, 25, 95, 185, 29, 229, 38, 32, 136, 236, 242, 35, 35, 8, 255, 121, 45, 59, 177, 9, 228, 87, 119, 191, 117, 244, 35, 132, 204, 139, 36, 200, 65, 156, 16, 223, 33, 231, 16, 163, 35, 154, 55, 214, 23, 187, 67, 134, 68, 87, 21, 239, 85, 184, 126, 33, 19, 139, 26, 197, 13, 209, 60, 33, 49, 27, 34, 164, 134, 229, 80, 87, 247, 75, 25, 206, 186, 28, 183, 240, 91, 111, 223, 1, 204, 24, 16, 245, 47, 58, 47, 202, 185, 121, 90, 49, 14, 128, 3, 237, 226, 222, 226, 7, 21, 180, 24, 46, 63, 238, 120, 67, 84, 76, 32, 13, 19, 150, 218, 217, 48, 172, 175, 28, 218, 245, 240, 190, 238, 150, 23, 181, 107, 87, 236, 242, 145, 83, 47, 22, 250, 52, 203, 46, 94, 62, 237, 40, 82, 246, 195, 54, 63, 113, 230, 183, 8, 76, 111, 14, 166, 34, 4, 6, 189, 160, 92, 89, 168, 57, 219, 163, 234, 97, 214, 70, 206, 234, 36, 95, 94, 155, 27, 180, 227, 209, 208, 64, 125, 42, 190, 33, 86, 150, 165, 228, 3, 185, 99, 70, 9, 20, 38, 75, 0, 162, 208, 51, 119, 98, 44, 53, 195, 207, 103, 149, 6, 254, 228, 92, 202, 208, 39, 91, 159, 90, 177, 127, 224, 217, 143, 112, 230, 246, 24, 204, 27, 240, 225, 10, 219, 70, 167, 164, 160, 220, 87, 210, 35, 199, 68, 249, 195, 150, 91, 68, 82, 27, 165, 234, 174, 240, 128, 80, 205, 150, 201, 79, 88, 107, 38, 170, 152, 171, 131, 171, 27, 152, 4, 50, 104, 178, 166, 171, 231, 77, 86, 217, 156, 118, 121, 48, 247, 115, 9, 38, 209, 42, 101, 47, 131, 56, 162, 197, 121, 208, 156, 74, 105, 235, 102, 100, 242, 40, 88, 170, 79, 188, 201, 28, 189, 184, 86, 129, 14, 55, 220, 106, 151, 239, 88, 93, 251, 21, 16, 210, 36, 162, 30, 232, 157, 207, 187, 108, 196, 21, 0, 162, 52, 56, 127, 229, 31, 227, 211, 43, 171, 61, 167, 98, 194, 86, 210, 137, 0, 186, 15, 98, 152, 27, 0, 222, 85, 198, 224, 112, 127, 226, 122, 86, 213, 26, 208, 86, 84, 213, 59, 137, 174, 100, 33, 150, 131, 79, 27, 215, 53, 115, 209, 95, 65, 75, 229, 133, 217, 122, 99, 70, 207, 109, 95, 214, 226, 111, 130, 112, 191, 207, 211, 171, 252, 163, 67, 85, 47, 115, 130, 108, 128, 170, 239, 253, 173, 140, 217, 34, 71, 44, 60, 176, 204, 193, 106, 163, 148, 200, 57, 95, 80, 12, 174, 104, 22, 31, 250, 169, 124, 172, 102, 213, 46, 52, 230, 96, 115, 50, 115, 53, 252, 203, 253, 175, 107, 232, 25, 115, 31, 39, 29, 92, 23, 53, 63, 52, 176, 159, 230, 0, 89, 66, 92, 199, 36, 19, 159, 166, 156, 14, 62, 254, 34, 123, 14, 181, 193, 136, 254, 161, 45, 85, 212, 60, 112, 85, 131, 32, 137, 143, 236, 194, 17, 192, 43, 185, 94, 66, 165, 207, 145, 78, 44, 45, 107, 69, 161, 66, 16, 26, 26, 75, 225, 10, 229, 160, 111, 139, 235, 105, 116, 221, 181, 231, 205, 172, 38, 166, 201, 93, 95, 179, 110, 75, 127, 223, 125, 171, 119, 181, 174, 101, 72, 185, 167, 208, 30, 106, 78, 144, 136, 49, 227, 74, 73, 100, 52, 28, 236, 155, 214, 59, 146, 254, 118, 70, 49, 185, 21, 110, 128, 103, 105, 87, 5, 252, 248, 47, 10, 51, 55, 88, 40, 251, 40, 250, 213, 156, 109, 57, 15, 1, 112, 41, 19, 116, 124, 21, 74, 174, 30, 45, 106, 109, 49, 163, 147, 155, 170, 202, 141, 211, 127, 118, 168, 227, 216, 251, 80, 162, 84, 174, 206, 32, 45, 137, 206, 177, 179, 2, 69, 205, 26, 252, 105, 195, 157, 208, 136, 104, 133, 82, 187, 90, 147, 215, 55, 83, 9, 252, 235, 74, 104>>}}.
{{encoded, "qkM1o64KTtt9jr3G5fS3mk1u486sWuEDTb2ZvwdJvrE7YBk111mhg241QFseHC7hkBGY8NLq1gjKsGBnJ7fATGXerQDcd4AigjobRkkmxnq4EKgGrF1FJ5C9PJUNPLXpdU8RytMYCHSiNES6X9panLSfbLYeD3JcUtDrzsJNpMNe1rkQijeYaFMFyUvag8ARjkuG8HvLigKPtC1dw2FuucVrM3qvNUUcWRT3D2gw2Lurapev5AGvbPC9mbMJKhkDsx6L4iAFR31jhf8msYb6WXm9s8AFkoFqYCHUHJJyrSyBsHwvkNkD1yXBH3oGUoRiVEpFYNgQUM1JE7q5jyw7afHZ4zUombxwvxuTxre9ZTZRMuAuBVCQgdskVkaPVKve95KsiYWr9YKmUbsapbXn3mZJZVEzqDG3ANxqi9cXsJr2iRUC6MeuvXjepGZVye6XMsg4FmFAHN4DuAhLeTqUQCNSpHCM7rwyujskAxZqu7BtdFGxu1PrBVqewE326JLee31HXNrNhURzgQ49XQrqZ4M3pbwVzAs3gzMX1w7UPGrLUvsaghiYEcTmyJ4PgiZeaJeYNvR9rUbjYcbjyHW1mkanqpuifyhca8o2sZSe2uPMESyW"},
{decoded, <<140, 3, 47, 96, 9, 170, 223, 58, 113, 244, 221, 34, 196, 179, 236, 95, 29, 143, 152, 147, 189, 167, 100, 236, 121, 131, 98, 230, 2, 148, 86, 220, 247, 28, 161, 251, 112, 155, 247, 122, 137, 5, 173, 73, 148, 117, 96, 106, 254, 226, 230, 215, 122, 201, 39, 255, 188, 186, 174, 54, 178, 121, 80, 244, 248, 186, 250, 119, 159, 101, 146, 201, 146, 22, 187, 158, 177, 88, 2, 87, 91, 133, 81, 55, 168, 224, 146, 90, 206, 158, 212, 80, 127, 145, 132, 174, 32, 136, 185, 107, 113, 235, 246, 194, 71, 130, 62, 244, 92, 220, 168, 211, 240, 70, 223, 58, 247, 190, 32, 17, 245, 235, 79, 61, 39, 165, 131, 26, 77, 16, 70, 194, 111, 228, 118, 226, 92, 226, 110, 166, 129, 189, 12, 59, 232, 54, 148, 159, 246, 248, 201, 68, 113, 254, 151, 186, 147, 103, 160, 224, 139, 246, 254, 215, 54, 194, 91, 220, 76, 228, 123, 116, 189, 151, 81, 250, 91, 107, 112, 247, 59, 7, 227, 104, 255, 215, 204, 2, 145, 154, 147, 251, 254, 195, 203, 92, 92, 46, 175, 60, 72, 70, 167, 162, 101, 185, 214, 199, 131, 54, 70, 75, 64, 128, 98, 12, 138, 24, 131, 88, 103, 157, 87, 127, 183, 198, 77, 179, 113, 238, 12, 46, 238, 132, 234, 179, 110, 5, 43, 49, 182, 12, 45, 35, 117, 65, 53, 89, 201, 237, 158, 90, 96, 181, 92, 207, 156, 163, 134, 39, 215, 63, 61, 142, 228, 116, 70, 253, 174, 193, 91, 210, 78, 87, 154, 121, 91, 236, 206, 16, 231, 11, 119, 229, 57, 64, 79, 229, 135, 31, 9, 173, 250, 15, 126, 18, 247, 196, 234, 174, 108, 123, 161, 151, 85, 228, 134, 158, 98, 211, 42, 184, 66, 167, 5, 15, 89, 116, 86, 221, 58, 52, 39, 167, 50, 14, 53, 181, 187, 39, 98, 64, 32, 121, 187, 242, 106, 79, 188, 64, 27, 118, 165, 43, 68, 82, 114, 96, 74, 129, 148, 5, 149, 215, 25, 159, 164, 216, 129, 250, 14, 25, 48, 113, 127, 251, 100, 6, 180, 187, 11, 22, 69, 8, 126, 97, 22, 185, 20, 44, 14, 130, 55, 194, 243, 230, 240, 25, 234, 72, 240, 72, 29, 96, 81, 153, 142, 101, 103, 13, 230, 124, 129, 19, 139, 118, 79, 34, 45, 146, 207, 199, 208, 71, 42, 36, 138, 117, 194, 176, 146, 142, 87, 117, 116, 164, 80, 236, 83, 180, 254, 144, 144, 47, 224, 183, 130, 239, 71, 84, 162, 96, 135, 173, 26, 62, 82, 173, 68, 250, 26, 123, 234, 190, 79, 40, 217>>}}.
{{encoded, "MHmBTWVWm7AB9HensMxH32pSsR1gHCiaG8fQF3VUbZuG5YpDaPyqeqfZXNMgsZJwyT3JghMhEJrqnwqPv7Bdo1FEiUkbcs5cwh7h7Qf6CtGq3esHYcFuQ32iRZjiowmGtf8qSUG9PV3sMcJYXojeeqBuhNsGqevSqksNnfNkUDj2EzbJUCwD8PkxVVtc9SXnEeqCg9oCryrfTcctMqFSwcSyRa6WgKKL8Cbv34y3WZ3MB2zyzkQ96HTM2mjL3qtt9c4RywmZzdkMFTRgNs855g2QkcyAk7QQm8CZTUJNJVP51T7ZmGkgXGHTCm4hbhwG3cHdBfu1utRrh6EehgHTnA5H7phpRRTp3WYJSUAEfMdeLG8pFmJdi5TeEXPeQpM9Y3bKUyWjC6BNUKSvQH1ekF1CPRjEbgUyxWKHrobr8wGVseRTBTDMPXtKxVc39LCb"},
{decoded, <<116, 44, 70, 71, 192, 251, 134, 202, 181, 169, 101, 168, 165, 58, 57, 191, 186, 126, 39, 82, 128, 245, 144, 218, 105, 232, 177, 163, 26, 203, 2, 241, 26, 143, 171, 161, 52, 209, 16, 147, 181, 217, 176, 123, 203, 89, 1, 135, 116, 161, 93, 3, 162, 112, 6, 150, 166, 189, 138, 66, 114, 221, 3, 135, 99, 92, 143, 232, 70, 235, 139, 105, 216, 31, 137, 238, 24, 125, 193, 148, 7, 161, 134, 113, 234, 123, 158, 207, 75, 226, 166, 12, 105, 9, 150, 137, 10, 90, 125, 214, 211, 106, 56, 229, 202, 133, 178, 115, 143, 3, 174, 65, 75, 166, 43, 107, 216, 77, 61, 8, 46, 176, 47, 95, 56, 193, 183, 160, 69, 22, 35, 154, 93, 195, 82, 156, 109, 4, 6, 130, 195, 239, 48, 4, 39, 17, 51, 213, 130, 250, 244, 55, 24, 42, 133, 203, 9, 80, 231, 239, 231, 180, 231, 235, 198, 20, 152, 90, 166, 205, 41, 171, 179, 20, 177, 20, 131, 125, 246, 65, 214, 254, 2, 121, 112, 106, 18, 242, 98, 193, 23, 57, 64, 47, 106, 108, 66, 153, 255, 99, 157, 105, 18, 65, 253, 183, 5, 40, 46, 114, 235, 143, 46, 49, 196, 245, 110, 0, 65, 132, 43, 24, 159, 153, 21, 96, 127, 146, 44, 163, 105, 152, 195, 25, 33, 120, 73, 111, 27, 5, 175, 30, 182, 217, 251, 82, 166, 150, 95, 247, 153, 82, 72, 213, 167, 227, 207, 225, 74, 192, 183, 65, 153, 246, 90, 66, 157, 32, 191, 189, 14, 170, 58, 74, 165, 139, 159, 80, 104, 213, 194, 215, 245, 203, 224, 73, 242, 21, 16, 148, 246, 194, 97, 5, 165, 76, 251, 251, 112, 21, 78, 62, 240, 152, 37, 230, 217, 157, 220, 209, 18, 31, 242, 23, 165, 20, 158, 189, 112, 47, 62, 121, 201, 82, 148, 151, 213, 12>>}}.
{{encoded, "MLSiUGQNzymCMHG5Z7hvAwZ5v4xmSuvjieJkoiN2vEzqnxhh5iRhadcSg3Uq7rKFAhJZTuvzFerG4fjLxv7o4BgsMCNweuMKz6uT9L1Z5uoAZLNzesAyywXtVzZQaHqgpMEod6zYt7L85qbsx4vbY5rjXDSgTUWpES66zirNvq3xZbmPfqVvDzSjHysgVVdFUyMzWQvdcDkTVnMfiLbVm38Vq71mMwjc1xL3ZHsreFWcRHds49UePJs71cfQ8DpX6JEZkFr6EoQGDS18JyafYEKZhJ36Bm8wSAJzYbgahnDVSYtM4xumhVsDp5Vij6PRPXjduobSTErCtd3habnFnELCzCCqw7fpLrX9S4UDtiG28TNWM23qPtH3FUQL2Za7PRujA7SYvibnj6KabXHSEkoLQK61YTDtdr2DCBQALyssKuSNmKxDDan8akk13SDndb3VhXDWfJyUhVkAbaS4EGoA"},
{decoded, <<10, 247, 72, 30, 218, 2, 66, 29, 98, 167, 13, 77, 220, 115, 77, 166, 118, 170, 169, 22, 79, 179, 146, 62, 59, 174, 206, 169, 7, 76, 235, 20, 221, 72, 122, 98, 33, 47, 3, 137, 92, 14, 121, 213, 221, 179, 243, 2, 142, 96, 11, 87, 77, 177, 49, 33, 78, 117, 217, 144, 205, 72, 13, 47, 200, 208, 101, 112, 152, 126, 15, 175, 72, 203, 183, 138, 218, 194, 199, 72, 64, 128, 181, 73, 110, 43, 60, 164, 53, 46, 181, 57, 111, 46, 221, 131, 69, 204, 108, 34, 28, 214, 23, 179, 162, 152, 93, 184, 74, 160, 15, 20, 232, 102, 193, 249, 0, 190, 98, 198, 69, 202, 117, 183, 211, 101, 164, 164, 162, 109, 8, 12, 253, 58, 97, 55, 127, 183, 241, 94, 2, 99, 14, 206, 105, 53, 71, 168, 73, 162, 82, 238, 121, 237, 206, 132, 127, 72, 159, 14, 173, 244, 243, 214, 67, 96, 212, 178, 49, 7, 135, 105, 40, 7, 245, 141, 124, 13, 80, 152, 121, 111, 99, 45, 43, 80, 83, 196, 107, 229, 44, 106, 156, 92, 14, 219, 16, 50, 154, 156, 28, 129, 245, 120, 109, 187, 157, 39, 168, 201, 135, 105, 130, 135, 207, 112, 236, 81, 241, 228, 117, 15, 126, 83, 190, 231, 58, 51, 31, 237, 125, 132, 34, 251, 151, 79, 12, 184, 84, 5, 109, 109, 86, 15, 180, 54, 43, 251, 243, 5, 62, 178, 30, 249, 24, 245, 179, 187, 252, 245, 163, 144, 36, 209, 161, 98, 122, 53, 31, 65, 245, 25, 26, 252, 217, 227, 38, 20, 57, 218, 154, 213, 104, 138, 91, 67, 125, 180, 138, 197, 156, 17, 102, 30, 44, 52, 211, 134, 54, 77, 172, 204, 133, 87, 96, 95, 39, 41, 109, 90, 203, 122, 0, 111, 227, 57, 65, 110, 92, 111, 140, 201, 229, 82, 45, 79, 66, 3, 221, 82, 193, 157, 93, 27, 254, 158, 129, 24, 61, 181, 173, 201, 150, 147, 161, 169>>}}.
{{encoded, "5cvR9UCJPPieAowPDWVvZjVHnJLd6Ua99mwcunF4CC1FeaF1cXEPjdFEZyHijN2aFUoTiyfPwR4anYEbQ8d8sXfLTGGDagEby8F4SDhKi5ZHKjxyEuCybGF4Wu5xAXjGC6dgTrsLgGZQWUvsytSAkHyDFo1fb1pkCSh3fxuvtEaWwpGED4TNQaq4Hvr8cwE1u1ZgNrAiPUm8J31kxwBWi6eFA8bW6Crcjig7kBXSNtGmiGyS81mRbt2Ss3xjcrzy3cbV4iuNPGLVdjYh8BqttWnFJNC2GHdSB3ZvUYDpNrEJV5HQVhZDFXHMuJqvp6amRSCw2KH39KdZ7ZMy2mDiqXkWrr2AEHMjGawHwVYBdsAK8GvLvjNL35WSkma6YcYkbk3VjADSWNnqT1YtopgyaKfBbQjiKHQKfBmiuupkP7fupuNExNigXs71SYW2fA6SJT1StyBbEjqDAmCHD1K68zjCNbmuxWEdQvTnt2cnRyQajfMrqtFwsxJV64Ls4y6ifTGjbsUN5e24R5WVLLHqAuHAmUWMYjSy6pAdAD7cN6XNAAVubYse2XJ68hfDYU1LcwkvJYg9AUBEXjYkLYQMDiyAF8Y7aSaXqbbFqJqb8DnkJyjbtPhxChKGSWkUS8LS9F8YhcnbzZCZqbbRNDamz1QH8LpTsfXW5ABAWU4yLRZmYiRM8qion2w3g6y9vu54G5rdkduKJKAvqzjVBEM3o7RCGKoJYYznbqTxwKeCVhy4fQfkhTc8tLcdLp2LK5i8kGNKji7wxdiTVZBsRQDMDf4Q2nmAyZ8L1DTLCj3bmz"},
{decoded, <<39, 202, 14, 6, 170, 152, 1, 129, 118, 24, 203, 42, 98, 168, 201, 144, 150, 90, 92, 208, 50, 134, 68, 19, 85, 69, 83, 176, 10, 141, 146, 232, 118, 47, 55, 9, 9, 228, 220, 191, 16, 129, 117, 74, 166, 214, 92, 180, 126, 122, 219, 108, 125, 117, 132, 75, 25, 169, 4, 166, 248, 251, 26, 53, 158, 213, 52, 193, 219, 11, 84, 67, 171, 156, 3, 122, 130, 236, 27, 132, 5, 174, 242, 145, 83, 80, 113, 171, 238, 61, 123, 182, 203, 20, 207, 189, 104, 89, 11, 55, 159, 226, 44, 186, 230, 10, 84, 180, 17, 228, 25, 178, 239, 173, 32, 131, 233, 213, 176, 22, 41, 250, 91, 45, 93, 103, 157, 132, 9, 94, 180, 162, 39, 238, 49, 125, 132, 53, 39, 205, 198, 9, 2, 245, 15, 249, 115, 98, 48, 86, 122, 172, 55, 146, 84, 132, 158, 42, 0, 33, 72, 234, 47, 29, 36, 82, 85, 29, 97, 178, 6, 13, 38, 162, 220, 255, 56, 91, 27, 220, 236, 174, 111, 236, 130, 142, 69, 234, 55, 15, 200, 151, 7, 164, 171, 185, 138, 237, 16, 194, 140, 184, 137, 61, 149, 130, 130, 167, 48, 62, 66, 117, 160, 120, 245, 178, 114, 146, 121, 209, 55, 17, 65, 222, 152, 213, 68, 159, 226, 14, 28, 235, 174, 75, 235, 86, 222, 56, 248, 69, 214, 68, 88, 219, 28, 33, 76, 91, 187, 81, 66, 124, 213, 229, 241, 112, 154, 220, 233, 153, 1, 228, 218, 50, 10, 252, 28, 82, 173, 243, 14, 146, 209, 137, 100, 181, 240, 50, 118, 171, 222, 127, 77, 122, 141, 101, 11, 160, 219, 141, 233, 231, 88, 141, 178, 137, 201, 248, 22, 100, 193, 127, 252, 46, 173, 186, 128, 132, 207, 17, 36, 254, 155, 7, 96, 130, 107, 119, 131, 102, 226, 190, 150, 189, 107, 202, 219, 123, 243, 133, 155, 178, 139, 69, 88, 135, 190, 72, 232, 70, 226, 109, 163, 195, 119, 84, 230, 66, 139, 186, 227, 44, 255, 1, 217, 73, 217, 16, 236, 103, 143, 203, 44, 64, 21, 236, 138, 172, 100, 128, 188, 58, 173, 17, 35, 123, 175, 226, 187, 64, 187, 2, 219, 4, 23, 164, 176, 241, 126, 249, 34, 199, 164, 82, 237, 200, 26, 43, 176, 120, 134, 228, 53, 248, 31, 68, 71, 152, 211, 14, 123, 58, 250, 219, 170, 250, 211, 46, 161, 2, 78, 13, 253, 129, 245, 98, 97, 36, 145, 73, 187, 179, 218, 255, 134, 239, 142, 246, 205, 87, 209, 193, 237, 175, 85, 55, 12, 191, 187, 74, 166, 68, 42, 239, 10, 237, 109, 222, 8, 92, 234, 230, 152, 181, 94, 188, 209, 237, 124, 140, 206, 165, 27, 84, 184, 252, 86, 197, 125, 96, 249, 16, 206, 88, 83, 9, 4, 124, 164, 35, 131, 75, 153, 165, 235, 32, 120, 86, 35, 174, 181, 247, 225, 100, 148, 175, 180, 158, 236, 94, 158, 161, 232, 84, 230, 157, 72, 48, 85, 61, 67, 226, 165, 92, 212, 77, 250, 12, 173, 175, 181, 165, 96, 103, 236, 47, 230, 248, 16, 76, 198, 175, 224, 145, 220, 189, 213, 21, 11, 113, 98, 125, 43, 173, 145, 169, 66, 203, 192, 140, 93, 7, 35, 50, 140, 28, 96, 216, 215, 103, 72, 179, 248, 30, 22, 212, 251, 239, 137, 215, 239, 29, 64, 240, 227, 218, 91, 32, 136, 138, 238, 167, 137>>}}.
{{encoded, "yB9PJLqTPKHtqwgrGZNjSG7ip8rcu9W2aakshoLG5Lc7v7fuEmACmgWoK6uy2ZXafHhJDrSnMZNGBHoMDSskTbMo3ySZYWTg27RZ2QmZg3ZhR8aeiGJk5VTEU654cfNdFKVwBqx88hXiy5okH7G6yBfHPJTkCopUAHqryAjdzfobZRq9GQbF2L3FBJd8g22Ryn9XyTEgutiFJr18FCP5tAnurZUaHKA1u8PChbwj9WU4eRp53EwmQ7Xf6fVSRtZ6hNyupMk4itWNAQXPEKDSBbmmVFSzcxvEFsivdiwHwwHGo9sBZL2nJ9oGK9WNmQSBEw8GQPCyEfhhJGewSvTY27Ef3MMTQea5tTkNCTUadEfeU1MK5jT5JHsguGHKZjLhekwCMC34Aq12sH9kq6oXDvaq5KCkEsnw5yntjJRR4hwS1fSgEgxmRyERYL1ZYhQWQ76fssF1ba6nYBDVjwH5M9E3PnV5dA1YL56LU3HZNb32EMmz1viyZxmSjrMWtS4avQXf1RsB6strEFtCDaHHjAkgk9uYk7ZtZsyzwufGeHBsWtBwAoPYyGdyFaGoeAccxsHryf6QJjtrNV4cyEGawgKML6VU3i4RiTdjH9Ur73puexjUsb8y8AC8Qf1vbUKt69xR9Cw5nNSwRrmGNkKxwBjLcvk7CcLdXvnRGVCijNHH5mL5FBhFEGNFPmFFYRnZcf3XFRPeKrc35Ty4NbXoWPHtT2v3mE1rSpisGdqoijC"},
{decoded, <<233, 61, 164, 14, 174, 186, 245, 28, 254, 109, 36, 157, 147, 148, 240, 234, 177, 106, 54, 3, 86, 123, 210, 210, 149, 174, 146, 111, 124, 206, 78, 71, 37, 68, 137, 91, 54, 236, 253, 215, 119, 35, 183, 42, 240, 85, 232, 175, 165, 183, 178, 148, 196, 40, 179, 40, 131, 85, 204, 199, 153, 165, 102, 85, 116, 131, 157, 74, 37, 204, 178, 95, 255, 152, 128, 90, 229, 116, 109, 184, 218, 119, 148, 145, 44, 214, 38, 197, 38, 148, 50, 54, 20, 12, 161, 202, 130, 192, 77, 164, 88, 6, 84, 83, 169, 176, 32, 162, 146, 75, 114, 233, 192, 163, 56, 234, 211, 31, 176, 92, 6, 142, 18, 127, 3, 41, 199, 119, 11, 105, 171, 104, 162, 27, 68, 31, 238, 100, 120, 39, 138, 225, 168, 30, 31, 33, 233, 215, 204, 90, 211, 106, 173, 216, 201, 61, 131, 248, 159, 239, 174, 89, 14, 12, 94, 53, 176, 127, 179, 244, 243, 189, 33, 246, 7, 67, 217, 38, 207, 131, 106, 99, 166, 248, 14, 136, 18, 240, 89, 8, 108, 229, 81, 9, 177, 136, 163, 172, 39, 126, 243, 144, 93, 126, 178, 166, 167, 23, 143, 220, 19, 251, 23, 121, 40, 221, 125, 114, 235, 192, 111, 72, 248, 191, 79, 206, 173, 37, 106, 188, 251, 237, 149, 139, 4, 104, 141, 37, 110, 87, 42, 162, 74, 108, 136, 30, 119, 125, 128, 159, 4, 4, 240, 11, 230, 124, 122, 96, 79, 46, 193, 72, 69, 168, 214, 76, 216, 152, 29, 216, 142, 128, 152, 214, 162, 161, 165, 10, 71, 250, 2, 207, 160, 175, 161, 247, 215, 11, 90, 133, 41, 228, 183, 187, 173, 33, 112, 164, 181, 41, 72, 160, 232, 207, 19, 85, 8, 127, 67, 176, 96, 204, 164, 145, 63, 29, 88, 86, 245, 157, 118, 208, 242, 18, 180, 255, 254, 8, 90, 143, 234, 230, 11, 8, 123, 174, 155, 103, 211, 185, 113, 69, 53, 30, 182, 114, 21, 72, 168, 235, 5, 185, 73, 206, 73, 248, 54, 159, 239, 12, 201, 159, 6, 101, 110, 35, 203, 242, 49, 189, 15, 25, 91, 80, 168, 141, 151, 16, 133, 92, 38, 171, 118, 241, 143, 211, 182, 102, 140, 228, 117, 91, 62, 35, 134, 93, 209, 228, 253, 15, 60, 75, 165, 136, 6, 142, 254, 155, 155, 221, 85, 205, 93, 64, 22, 35, 137, 124, 66, 196, 139, 214, 70, 157, 203, 245, 81, 120, 30, 17, 56, 209, 215, 185, 50, 55, 228, 190, 252, 251, 125, 109, 146, 132, 213, 139, 187, 205, 156, 165, 225, 147, 113, 6, 196, 48, 94, 72, 36, 19, 216, 246, 187, 20, 255, 33, 186, 233, 137, 153, 27, 159, 43, 130, 182, 103, 222, 15, 5, 147, 188, 102, 144, 116, 251, 6, 191, 136, 90, 244, 190, 83, 222, 201, 221, 32, 231, 81, 7, 119, 132, 239, 40, 201, 106, 183, 171, 21, 212, 222, 46, 136, 177, 3, 145, 189, 71, 182, 104, 164, 13, 37, 136, 126, 87, 152, 26, 40, 204, 159, 0, 11, 235, 234, 29, 50, 48, 21, 103, 20, 12, 204, 75, 198, 184, 154, 195>>}}.
{{encoded, "UG5qM3YgZNyYPuy5ssQfCUWp6w68jSqcHLU6Y5U6RWkDRzUfwujhoGj7umivy9PG4bo3zoLXi7v8VbkpqQK4tZobHtDCZyBb9Fo8kiiCcxUs9Ei6988HUbNUKkEeTUaRzXEoMF"},
{decoded, <<235, 153, 82, 41, 71, 237, 102, 45, 19, 104, 237, 40, 229, 70, 236, 239, 9, 205, 156, 177, 253, 16, 215, 67, 13, 63, 224, 232, 20, 76, 83, 191, 131, 181, 241, 63, 21, 205, 173, 58, 26, 133, 91, 49, 53, 186, 71, 158, 242, 165, 201, 92, 231, 17, 206, 245, 88, 126, 198, 45, 226, 240, 231, 252, 236, 16, 144, 65, 39, 106, 234, 30, 138, 248, 3, 169, 146, 231, 157, 253, 216, 159, 154, 31, 172, 173, 39, 42, 138, 23, 166, 147, 19, 233, 42, 111, 41, 22>>}}.
{{encoded, "WDuASF3p8QBkhSBHt3R3hHaPvoA7rKdFpDwJXDLzF21asxEut6S9EdzM2DTK5jWwdJ9FfpCEAbJ8xxuXLUz2UHwEWV2aXN4ATxipPRuYyDTXWH5e6ZoKwe37WmiVXg32AciuDaiaU44ixnFo5AZgwSwgBuNXVUkNmgKAMH8oZQ4csn6d1VkXnSgNSQhMj6R8YBhjiXd3cigpYprRKh9KubmVPAteKnX66HovJabr6EusNHLxkQkePvfKjKHCxDXZccPXEitBuLXBWCjEFsRaa8PijBrL6Y1U4wNyoCTr13NJ9phYWtrd61HL2WVRLgc6Ju1gMR4SqEdJCHnYGUiZd63vNiBzwgVmBLGoLdbpp6N13SqpfRLBpkLTV8734xiwkVbQo4mLNwy8j7rxzZbTKTxJTwTKBeQZ98gd6UcnQ211afAmriecDrAaSXS3hwHqSdUtsXxK3SkgGoFNBTWzvy3xMxnEFEx"},
{decoded, <<31, 165, 49, 69, 220, 107, 137, 8, 122, 71, 223, 148, 152, 3, 237, 230, 237, 202, 168, 242, 59, 222, 72, 88, 235, 183, 243, 14, 63, 64, 3, 9, 126, 49, 70, 82, 37, 113, 252, 235, 44, 175, 133, 132, 70, 122, 226, 23, 112, 60, 237, 73, 142, 36, 167, 81, 108, 12, 72, 94, 226, 40, 253, 6, 228, 28, 158, 140, 134, 220, 193, 95, 104, 215, 94, 141, 239, 94, 72, 23, 238, 121, 85, 43, 125, 127, 115, 19, 81, 11, 173, 36, 144, 142, 204, 31, 174, 2, 211, 53, 138, 146, 25, 100, 226, 17, 132, 3, 116, 42, 94, 34, 50, 198, 64, 164, 194, 207, 233, 142, 7, 45, 98, 38, 95, 212, 71, 167, 124, 21, 239, 217, 157, 151, 37, 116, 216, 245, 175, 38, 4, 24, 171, 66, 212, 23, 45, 163, 218, 196, 150, 93, 240, 35, 224, 113, 64, 255, 19, 64, 222, 251, 142, 22, 172, 254, 237, 149, 199, 184, 244, 11, 230, 121, 235, 91, 43, 24, 187, 2, 65, 7, 36, 165, 47, 59, 238, 29, 69, 199, 208, 31, 225, 138, 196, 64, 152, 9, 215, 49, 93, 232, 126, 43, 187, 137, 27, 132, 117, 212, 56, 180, 133, 208, 28, 125, 253, 157, 159, 133, 226, 42, 222, 39, 126, 68, 190, 78, 139, 7, 131, 149, 4, 138, 114, 226, 191, 196, 220, 247, 68, 80, 219, 172, 197, 60, 33, 96, 154, 189, 161, 134, 215, 123, 121, 3, 166, 163, 217, 12, 17, 198, 170, 72, 162, 32, 50, 112, 147, 233, 137, 115, 65, 49, 254, 142, 254, 77, 246, 133, 48, 88, 113, 64, 214, 219, 5, 15, 0, 253, 157, 38, 181, 81, 63, 67, 81, 138, 98, 80, 5, 188, 201, 212, 123, 188, 92, 167, 237, 93, 11, 170, 68, 171, 123, 26, 65, 2, 72, 209, 202, 232, 61, 98, 232, 203, 161, 164, 168, 187, 11, 232, 157, 248, 246, 64, 192, 71, 169, 12, 162, 221, 124, 90, 162, 75, 75, 225, 158, 220, 217>>}}.
{{encoded, "3oCqupt224pKvmwrJq2Zc66HypL7wbUFG9jGKeMoLvbxEXBGeAvBQD2PaZEicdxZFoMLgXEEAxXPjmr2FLhWZkRQ1rH6vXmQAPiPVpBsbuxbSjGAqFkbguUJKiNnmohB4boF8KoZJ7pyowC7PkUyu4NUMRqxMP7bsQiM9Lz98muwVkuaSmdgxVsoBKHMpx3jprQ142NywMLFZZHpquS7KvobTGqG7a3Ym7ouirWqoCgw7hDBRkqVVonBERq4djXYGMETWfN8ZBCHT6AHHcWE13Z92mDD8gkXKp6xujBWS43NWywg55FjnRBfCu8a2BGcUC4r5Vvdz7UYNquhsARqrtcwPPBuonxVqy5p4ceAYZoqyoH3wDXRC7xq1QAUMrhPEv1dNsqZAD3pSLCXwDd24YFzBHGmvv23WX3nbVT53SczTUPwcdU9iUJqZUwyRfLR9KR5L8gbSECXJnoKFR6Xx5LNnDzoPdqStbnDg8TQi2rn2i1AXecpQ8SFx4wNVCFDx2w8WVbaWwskX4VkVjoQLtMYLbujpvbFZAs4vBKp2q5nhqkipJLXxvo3hU4EnNvdDEjWFLqCmK3x5NzNSYuyfcjHhJKYUu5tKSkM3BacFdmzVTF2kTQ2xuFRaGKKrhkWqEioFLok92Nhs6XkY8fKdmvGFeaY9Gm5cPmvrZer5vYsw8bYJez76JEnYDjyF4r9KHxHwaAJmz5oNZkJcKoEbGjRwEgRxUfgqo3nnUFQu2HCBjKY2bNGbV6ussCHqEZrZZEEDUddTmiF1kLbXqsvisVcQTDzpkBvPWoz1ZgCmN6RBRzRFJuKBgUth65C77NSQ1G5FNVAtU5NsryYqMgJM4sPS8n7mErhYPto9LfTFJqjfn2dcbH1GQsdVMEVSNkKp6RV4UKgAiUXHFgk23HPWrF2Q7fE53GnyVV2K1KNZyDyFmu"},
{decoded, <<208, 49, 161, 4, 28, 72, 79, 188, 61, 39, 75, 241, 80, 38, 117, 52, 140, 137, 201, 225, 134, 247, 247, 195, 35, 0, 194, 107, 114, 135, 108, 153, 255, 25, 76, 190, 59, 201, 215, 26, 122, 8, 241, 165, 184, 26, 152, 17, 207, 0, 221, 229, 231, 223, 89, 198, 187, 98, 54, 63, 18, 157, 32, 171, 220, 61, 172, 102, 169, 95, 20, 54, 3, 211, 228, 133, 137, 114, 41, 169, 31, 250, 125, 251, 83, 48, 238, 252, 194, 134, 198, 36, 93, 6, 123, 47, 98, 95, 125, 114, 214, 30, 196, 87, 128, 176, 95, 164, 80, 104, 238, 33, 96, 103, 3, 206, 18, 121, 107, 37, 81, 143, 240, 104, 125, 219, 126, 146, 254, 55, 220, 53, 143, 154, 209, 49, 133, 125, 255, 70, 248, 18, 152, 106, 188, 40, 37, 122, 142, 28, 24, 160, 111, 171, 223, 149, 59, 136, 162, 75, 33, 211, 233, 28, 224, 158, 63, 20, 152, 149, 107, 247, 217, 137, 84, 70, 87, 119, 212, 112, 221, 210, 240, 66, 12, 99, 58, 89, 176, 203, 252, 40, 172, 176, 134, 123, 3, 201, 124, 158, 3, 179, 48, 119, 40, 146, 221, 180, 249, 112, 236, 183, 207, 200, 144, 244, 153, 113, 105, 42, 173, 108, 31, 245, 117, 19, 100, 232, 54, 33, 174, 92, 166, 153, 79, 222, 206, 75, 48, 28, 55, 217, 143, 99, 158, 8, 61, 226, 30, 151, 38, 201, 52, 150, 178, 119, 12, 62, 88, 233, 110, 83, 23, 152, 157, 211, 126, 102, 45, 20, 48, 126, 95, 56, 237, 204, 4, 198, 2, 6, 106, 131, 188, 137, 208, 126, 53, 164, 205, 94, 0, 150, 16, 129, 96, 72, 120, 21, 170, 169, 75, 194, 80, 136, 1, 96, 217, 228, 58, 63, 61, 54, 153, 62, 102, 45, 156, 224, 98, 47, 177, 15, 203, 36, 33, 87, 182, 68, 173, 44, 245, 179, 235, 59, 171, 201, 160, 194, 105, 201, 36, 159, 244, 136, 13, 45, 244, 35, 83, 21, 219, 175, 188, 145, 1, 248, 110, 154, 199, 249, 26, 253, 238, 246, 222, 36, 35, 239, 236, 213, 200, 0, 2, 225, 150, 31, 172, 26, 142, 97, 26, 23, 55, 80, 30, 11, 52, 48, 77, 45, 134, 218, 84, 87, 54, 48, 244, 39, 139, 21, 204, 243, 135, 92, 200, 216, 146, 86, 61, 219, 128, 124, 20, 91, 188, 239, 89, 109, 192, 22, 77, 51, 124, 224, 49, 151, 97, 132, 207, 238, 82, 227, 232, 152, 243, 167, 105, 78, 48, 87, 3, 36, 29, 243, 191, 76, 114, 186, 86, 64, 25, 55, 226, 135, 77, 147, 241, 160, 197, 19, 25, 110, 113, 110, 47, 70, 44, 58, 73, 114, 253, 215, 184, 83, 196, 34, 95, 31, 254, 164, 230, 205, 205, 98, 200, 147, 111, 140, 39, 147, 82, 139, 61, 159, 175, 71, 125, 11, 45, 94, 50, 239, 9, 9, 111, 88, 250, 22, 81, 71, 213, 255, 161, 36, 203, 147, 11, 191, 33, 238, 145, 221, 30, 17, 7, 36, 193, 185, 156, 199, 203, 169, 238, 135, 218, 215, 147, 73, 71, 151, 7, 76, 246, 156, 26, 235, 97, 46, 48, 74, 175, 181, 209, 52, 49, 240, 144, 77, 16, 231, 233, 190, 217, 117, 251, 25, 68, 58, 242, 46, 86, 59, 238, 219, 179, 168, 56, 121, 214, 188, 61, 111, 115, 38, 182, 92, 179, 135, 239, 202, 18, 205, 139, 193, 217, 251, 121, 214, 186, 16, 132, 97, 96, 217, 123, 177, 170, 48, 181, 47, 68, 190, 222, 7, 17, 176, 53, 178, 118, 156, 99, 162, 105, 14, 22, 186, 247, 78, 152, 209, 108, 225, 160, 55, 92, 89, 69, 88, 101, 8, 110, 75, 101, 82, 3, 70, 64, 122, 21, 141, 80, 47, 128, 59, 137, 115, 156, 59, 146, 19, 213, 200, 85, 160, 171, 140, 22, 109, 239, 160, 169, 94, 9, 185, 157, 12, 16, 97, 206, 211, 71, 41, 210, 223, 54, 236, 17, 194, 217, 36>>}}.
{{encoded, "3679GLrzDZTjAxDEssoD7FGxWYZhAcQQcj8hnPCuaiaZBKkChLCChLvMUxMMx1Ura6ukU7t54c6eSoSPDdQNzr1uMwM1Twp4eTuy33w4BkFMZtB5aVHGtpod93vDX6dXeTn7F6PHqhmW6G6yDRS2AoDm8SV3WgbH99qaVM6HkhhaKPGk4iSQFU2BxZiHuURYLBiEUtgvyqjmuAxHUW2z79V89mvMPBx5MchSGVhARkso52yyqGN83nhmBqz4d8bAXkGbUFrsGTcvSepjnfkHmnrtCNyXMcey1wvqHnY7Masa7WHpBTb2AwUiSsYAM2xvAUTC5qnsnNUcukwG7bUpTNfvwQvUhsGuwxJjAtyw6eNgDvjJwdJTPhCeUcbVqsA6PPJSt4C3U2KKAtgH6HMDvamxDT27Uckb5oCFkJR833noop3epo1qsazp9hjekpkAfTCEyCszbVKGo1BJd4bKe8TGvjJozgASaABtJgJT6Nsd79cmgoSkHbwQmVEnDf3vYiKe857xLNgNX2MgeGNaBbm61McaFLyQhJEcqKFqqtnFogscDCXaWGcAvWGZTZZx6Usm6sLuNg5t3eCRYKJjwF7VPSFNMGEnTjgZcwyZpdxYuYZNYkzhSxfWWAUkBt5hZNJcwJJH6bbu96z1SXzBy4xgeLfCBMjjc7ahQeocQSMR8"},
{decoded, <<242, 98, 16, 85, 101, 229, 253, 58, 189, 75, 209, 60, 98, 45, 152, 149, 140, 114, 67, 30, 171, 6, 198, 193, 189, 190, 127, 27, 74, 117, 226, 53, 114, 66, 138, 147, 21, 63, 51, 176, 97, 144, 179, 76, 96, 27, 251, 160, 42, 99, 98, 238, 194, 71, 185, 130, 90, 69, 126, 89, 62, 73, 10, 97, 5, 89, 228, 102, 137, 6, 151, 7, 243, 246, 170, 199, 88, 81, 178, 239, 25, 229, 168, 53, 50, 222, 5, 248, 131, 203, 171, 253, 175, 45, 140, 90, 231, 49, 6, 194, 138, 127, 214, 39, 89, 129, 66, 224, 160, 87, 123, 215, 6, 209, 232, 235, 239, 123, 97, 239, 202, 78, 16, 84, 184, 135, 231, 166, 148, 224, 220, 198, 238, 168, 54, 61, 248, 39, 65, 136, 114, 26, 54, 105, 29, 255, 232, 231, 129, 9, 64, 101, 199, 147, 65, 25, 192, 237, 212, 86, 50, 229, 80, 92, 108, 152, 103, 217, 48, 10, 84, 161, 123, 46, 54, 185, 50, 129, 249, 226, 164, 46, 135, 171, 30, 216, 99, 194, 35, 165, 210, 4, 206, 202, 216, 156, 7, 160, 162, 246, 9, 250, 155, 110, 154, 109, 173, 105, 88, 73, 185, 104, 54, 9, 130, 204, 88, 79, 68, 105, 107, 198, 153, 42, 185, 88, 8, 133, 33, 26, 62, 60, 109, 22, 96, 225, 142, 154, 148, 176, 13, 84, 215, 238, 65, 214, 231, 83, 227, 68, 231, 185, 208, 178, 38, 228, 78, 38, 76, 166, 138, 152, 180, 14, 254, 3, 125, 93, 91, 235, 143, 18, 230, 16, 56, 168, 27, 102, 174, 10, 204, 46, 55, 13, 124, 62, 228, 161, 147, 197, 100, 150, 136, 152, 203, 72, 18, 27, 203, 68, 52, 225, 204, 154, 9, 230, 30, 43, 86, 158, 146, 157, 201, 46, 64, 96, 223, 96, 239, 178, 145, 117, 108, 211, 31, 199, 10, 121, 136, 211, 4, 235, 16, 151, 78, 174, 10, 89, 250, 16, 84, 13, 163, 79, 121, 36, 86, 145, 16, 109, 139, 135, 135, 115, 205, 87, 244, 51, 103, 216, 146, 2, 20, 1, 23, 221, 35, 100, 84, 182, 186, 224, 169, 85, 207, 120, 170, 123, 255, 83, 246, 220, 195, 169, 191, 38, 118, 71, 13, 12, 67, 50, 18, 174, 33, 29, 105, 83, 234, 245, 72, 5, 68, 180, 198, 190, 37, 254, 144, 207, 69, 57, 12, 72, 2, 181, 175, 118, 184, 62, 40, 222, 171, 163, 215, 0, 133, 67, 237, 37, 161, 235, 21, 124, 149, 122, 141, 175, 146, 4, 224, 25, 210, 203, 149, 144, 151, 181, 131, 61, 78, 48, 14, 180, 166, 65, 134, 67, 140, 153, 24, 154, 104, 245, 167, 118, 136, 148, 201, 139, 148, 47, 150, 92, 219, 216, 48, 153, 22, 124, 37, 202, 17, 29, 54, 89, 159, 1, 184, 130, 18, 37, 83, 172, 15, 161, 209, 40, 157, 106, 127>>}}.
{{encoded, "3rrPAhHVGU3ttUsBRUhiQ3y5Bsr3n6ddibSMLJ1XCyxnEUEQXww6xBEHWRyKT5R3h1g3wasPDaKkUikfkv7K1s9QZcuTSw2MoYfgCiGgZRC9vWj4CCqyuP5LkVJsCKV1Grsg4NMRQMyN3M1LFGjK"},
{decoded, <<99, 169, 126, 63, 222, 91, 210, 252, 91, 97, 225, 185, 207, 110, 5, 170, 74, 117, 168, 181, 174, 164, 29, 252, 45, 77, 69, 106, 3, 61, 245, 193, 207, 203, 136, 214, 117, 83, 175, 169, 35, 137, 29, 141, 92, 133, 253, 58, 227, 44, 37, 120, 144, 3, 185, 161, 100, 5, 127, 14, 131, 137, 90, 57, 116, 7, 82, 55, 91, 51, 102, 143, 161, 140, 204, 241, 9, 86, 113, 111, 251, 81, 179, 15, 17, 32, 113, 98, 88, 126, 92, 56, 68, 93, 117, 186, 249, 128, 122, 28, 242, 172, 68, 247, 166, 138, 180, 18>>}}.
{{encoded, "A9sHFFC3uVXFWhbu81iYL6zgTyXdSsZhXbUfd3TDtnpLisP1jrTuGXB6PqVMn4b9B83sJyMumNfh5oiiAe5P3vJWWSRHpErmwbLu99AeSxXV3vh74L7GY7N3wwoAYS59KiFa4fEN7"},
{decoded, <<235, 130, 102, 205, 69, 113, 237, 155, 141, 239, 198, 103, 129, 225, 215, 81, 152, 130, 251, 87, 56, 76, 130, 47, 17, 114, 156, 9, 178, 197, 87, 215, 119, 56, 72, 219, 219, 86, 221, 6, 232, 185, 199, 223, 41, 43, 40, 24, 186, 17, 163, 227, 15, 169, 237, 7, 193, 108, 185, 152, 70, 33, 189, 36, 204, 39, 136, 167, 230, 225, 146, 104, 68, 157, 248, 211, 13, 125, 3, 81, 78, 92, 202, 246, 58, 63, 49, 43, 98, 251, 127, 97, 70, 172, 207, 187, 118, 113, 210, 92>>}}.
{{encoded, "4R7JtGn3ZzN9pxQDUNRFn1paehg9BstnbRWkfn6QNXCVBcGj57XSnKtzR7qvNUQT7PQ9AgnPWDMheHx8aHmbDsvXpnjznZjHrUzcyq7yaTSQ3E9gxEH25PvXmY1Qcdpsc3qtaJ4S7Si3PRpwsanyYhSV6wqk1m2uZBnnTRRa57t3zCLf72yoX2vAxJbAgJvUUTR6tgVJPYQTMptuCZtf1VxqnLdbP2q5FDz9x6DAc3PMdjbNEAi2WVh97Ut7A5bS4jTpgYrz1XK9pBYHh3p3gSLytvid7rqEvsp8v4TdKReVUJspytaeh7sj8WKSNkSSqqXKK5mnyDA6qSXVunorwTd2aFowGtWx6td8sS58qRYePx51gD2GV8rVD9nSP18kaiSZbS7AB7TTgzTpSaKcVCNbwc8iewBP4QgHqTFpuW68kLaLVAEMYvtPDXAogFHxJBmZvHkCbTiyKDBxn4y2tiF7vRHEzFwt3e1QcNKNC8TAE3rSoYmqAjhAtA7LiPgv6sdvBHz52epS6btiG8KMU65k4r1eE9fy5ogepThaT5W9XXtCwrb4VLddsszGX6s5K6cgZ5bgJQgJobXgYxxeMbS9CwGRw6Zw"},
{decoded, <<47, 100, 219, 240, 199, 36, 157, 172, 132, 229, 54, 183, 95, 175, 188, 185, 212, 81, 128, 43, 61, 100, 46, 229, 238, 73, 6, 52, 60, 126, 112, 202, 200, 16, 251, 51, 75, 109, 2, 86, 23, 1, 66, 85, 97, 144, 103, 234, 42, 72, 152, 23, 145, 172, 167, 89, 195, 248, 204, 138, 1, 132, 0, 233, 93, 174, 112, 13, 21, 59, 227, 130, 147, 172, 99, 20, 103, 250, 219, 254, 247, 153, 251, 136, 192, 219, 22, 66, 43, 175, 143, 140, 70, 249, 219, 36, 55, 240, 37, 198, 223, 155, 220, 94, 188, 25, 198, 0, 75, 63, 194, 36, 236, 51, 94, 209, 63, 103, 213, 128, 136, 160, 75, 13, 168, 223, 226, 73, 71, 199, 153, 54, 143, 159, 121, 122, 220, 26, 12, 127, 29, 2, 118, 189, 224, 55, 244, 228, 13, 83, 192, 157, 205, 114, 212, 165, 139, 35, 189, 126, 228, 14, 38, 16, 26, 30, 133, 205, 0, 230, 55, 206, 223, 248, 192, 238, 91, 236, 94, 168, 82, 184, 129, 190, 211, 74, 111, 21, 52, 247, 111, 120, 210, 109, 197, 219, 147, 185, 152, 167, 115, 36, 109, 27, 125, 36, 144, 170, 146, 86, 174, 155, 143, 210, 169, 23, 54, 161, 230, 156, 119, 232, 88, 247, 6, 246, 28, 246, 131, 42, 95, 197, 212, 123, 58, 190, 162, 61, 184, 86, 110, 0, 111, 236, 119, 198, 66, 23, 33, 32, 95, 18, 172, 90, 247, 127, 34, 161, 61, 206, 152, 239, 22, 125, 221, 138, 57, 172, 240, 222, 10, 253, 9, 53, 159, 149, 67, 61, 16, 91, 115, 255, 116, 60, 247, 212, 56, 237, 136, 239, 181, 220, 111, 89, 86, 182, 1, 221, 80, 203, 69, 124, 107, 196, 73, 244, 242, 78, 213, 34, 168, 187, 189, 173, 45, 210, 183, 41, 8, 160, 204, 56, 16, 69, 6, 74, 168, 226, 188, 93, 74, 32, 198, 20, 215, 123, 183, 169, 73, 35, 62, 86, 207, 110, 153, 58, 170, 230, 75, 123, 48, 243, 53, 109, 96, 3, 166, 207, 230, 146, 102, 167, 9, 122, 14, 167, 15, 210, 102, 190, 136, 63, 22, 237, 47, 188, 39, 182, 118, 70, 83, 89, 66, 62, 29, 232, 105, 213, 77, 217, 101, 222, 100, 94, 31, 108, 227, 232, 241, 249, 125, 201, 110, 110, 150, 234, 53, 63, 173, 30, 215, 121, 96, 118, 232, 158, 72, 193, 107, 68, 98, 214, 8, 106, 200, 195, 150, 142, 205, 168, 10, 8, 251, 158, 30, 247, 159, 36, 220, 58, 221, 87, 39, 154, 122>>}}.
{{encoded, "ad3a6NqNGKctGJfok2594DL37FeZFd8o4rbg8E5S2g7v5uxG7MRSRobBjSAar41HwfS5B182keuAfRLeFNBfnCz9dqjuVJw79CAiX7HHmEb4ZaUz4FpVmYXjqrF6Bt69rWPRxTkgtdBAmyCecf2zk7pGdN93GHedbKByg2e65BVLNDdmzK4qGVbZ2UKizN91P8SgAfduJk829xuGwokvMETCHi29vt9GBb2gW5PqWsJfvWkixyRj741cEEJnP51GL3dHE5JnehNLL3drux3Pak1psBbpSWUDjhWCDaZGYBPnPxFPBqhwXAgdoFdbXvybMpdpvmvN5FZep1PzaiLyUCuHkiLb39trtTTd6QP9hKEE4xUsaZ5tRJnSWUKUQAMjqJsnWz9qr7eBtUUKDzbGJCQAFkoYD4skmwBedoy1xMk7Q1uedRTq7RwfGshj6yRXKUn3hoG5CspMzGroEqjaZkS2ikPtqnTqyx5ir8RSQh1fbZjpoZLPKvmUy9tTYC3rvtZQzFg1T2ZMirFdTwUhmtXnf4dx8H7VNQPWeoPp36ab3ECkZ2Pxkjo6JRNPryno4h5RNF6awLLtP5JSBaTZZZi7FVqRGDipFxpUP8rmQK9qLpDMVYmZBP8aMqnsHFE8Ddi4HhJKCTX3JYtAzxe14YcnkNd1eU288vQnrC4oLaPoga1W9yhoULBTFKHSpb3xsq7fSHt7sf6ac9gRT7de8g8fZWkipftWr7zq5MGmcfTVkJjg5JH84VWEEHsioV9NAiaigfpSKfndQxyro6JGZiheQqshEJJzcguv8RveRqnJEaZynudTDPYRWU87pKnkm15wvvokLK5JnG5gcv8GfXkA66vPqMuakv33kNbCmotKhcADaWk9fikyfXiAAJN4a4t2SzoN1YVbnAXmNFPh8JwLLJeCTJR2EyGuVjy8qBXfR2Z9mnhxrJthj3S5WyonfbXYLo5ojusqTwfQ2Wri5e4v5VxWyDD61r5LCAw58XPppACvsbuPWNnQs7uKWoRykxeM75xW4GwnTXPayYuHhAwSbjzYqiGVfVJx4hox8QEhUtyrn6mTns1cWYi1SapvJPrCYTuEq9DQZaP2Etmixtxbk5gRYev8cMMHcLXHuA7ZvfmHpsSU5rAxoAX3dfZWYQBM4LPFCFdrRvZj4coyJhdGjRoJVdPsDQ1zqWmx1424wfG3rhWGGEeCxDNinBJ2j8fP26rNJghaHK1h1UmFUxs3dMnf2ytH6Uc6HGYoN7fZCQLQU5"},
{decoded, <<170, 238, 76, 143, 65, 5, 254, 10, 139, 179, 230, 254, 136, 35, 217, 153, 38, 61, 24, 152, 186, 27, 11, 0, 27, 219, 221, 201, 194, 203, 27, 114, 194, 166, 101, 185, 247, 46, 93, 233, 112, 124, 22, 173, 90, 168, 141, 133, 156, 117, 144, 34, 240, 15, 2, 45, 40, 58, 182, 13, 74, 231, 126, 178, 10, 124, 97, 168, 248, 180, 74, 0, 34, 117, 195, 170, 70, 36, 25, 182, 231, 15, 161, 125, 98, 244, 129, 222, 35, 220, 191, 200, 70, 2, 117, 141, 90, 160, 255, 69, 245, 228, 202, 12, 15, 63, 115, 244, 4, 157, 139, 48, 175, 51, 226, 129, 157, 244, 187, 194, 178, 210, 17, 0, 19, 169, 138, 226, 207, 66, 180, 213, 216, 227, 134, 189, 45, 28, 244, 229, 116, 239, 103, 201, 161, 92, 70, 239, 217, 132, 188, 3, 117, 54, 84, 16, 152, 186, 110, 34, 86, 110, 206, 187, 202, 212, 0, 218, 117, 247, 52, 36, 12, 216, 221, 50, 139, 140, 22, 13, 106, 3, 69, 23, 221, 230, 40, 18, 50, 206, 57, 166, 30, 232, 210, 179, 29, 72, 148, 145, 57, 175, 2, 74, 85, 230, 126, 171, 148, 147, 46, 162, 112, 136, 123, 163, 11, 80, 12, 186, 103, 19, 28, 121, 89, 97, 245, 161, 108, 165, 192, 28, 112, 147, 10, 151, 113, 116, 48, 64, 28, 176, 129, 53, 130, 57, 93, 241, 78, 171, 234, 189, 235, 113, 146, 199, 8, 140, 167, 247, 189, 174, 254, 167, 130, 250, 178, 226, 186, 104, 233, 14, 180, 89, 15, 213, 231, 103, 189, 117, 157, 34, 123, 185, 56, 40, 70, 107, 198, 60, 41, 12, 143, 52, 29, 249, 25, 112, 152, 100, 204, 16, 56, 223, 189, 105, 221, 181, 152, 86, 41, 229, 29, 223, 91, 44, 73, 90, 165, 247, 252, 18, 124, 191, 125, 110, 250, 51, 150, 90, 107, 232, 65, 52, 41, 155, 195, 67, 102, 63, 114, 69, 107, 52, 66, 169, 255, 100, 83, 2, 48, 236, 210, 208, 193, 12, 119, 7, 237, 34, 71, 75, 28, 177, 241, 14, 54, 164, 152, 38, 27, 27, 27, 215, 167, 81, 2, 232, 52, 227, 88, 160, 170, 133, 245, 113, 215, 152, 34, 72, 55, 56, 87, 123, 27, 196, 159, 35, 118, 160, 242, 29, 102, 255, 214, 230, 36, 197, 21, 228, 60, 107, 210, 173, 40, 240, 133, 96, 237, 224, 179, 203, 169, 160, 140, 113, 177, 46, 61, 196, 42, 30, 149, 66, 199, 245, 12, 190, 246, 43, 81, 235, 42, 214, 6, 227, 250, 173, 90, 56, 207, 203, 195, 78, 9, 60, 70, 224, 224, 99, 56, 54, 120, 174, 60, 131, 65, 191, 133, 213, 232, 56, 176, 159, 92, 125, 224, 221, 50, 168, 111, 6, 166, 135, 193, 230, 202, 221, 131, 25, 110, 165, 157, 48, 208, 130, 67, 10, 145, 8, 30, 104, 152, 160, 55, 194, 35, 175, 121, 175, 182, 226, 190, 180, 216, 136, 223, 235, 52, 133, 6, 141, 8, 222, 31, 125, 86, 159, 249, 143, 255, 158, 105, 54, 239, 247, 144, 242, 80, 52, 167, 205, 148, 83, 60, 127, 202, 75, 189, 89, 140, 108, 123, 108, 87, 73, 98, 207, 247, 41, 80, 31, 50, 183, 197, 233, 168, 123, 239, 158, 225, 172, 247, 201, 71, 78, 248, 204, 1, 213, 50, 142, 176, 104, 251, 241, 52, 78, 71, 160, 153, 241, 153, 120, 187, 196, 74, 40, 15, 197, 186, 2, 239, 97, 191, 3, 151, 161, 147, 1, 225, 145, 86, 44, 49, 68, 25, 197, 193, 211, 160, 69, 234, 58, 2, 223, 82, 48, 179, 1, 35, 236, 67, 31, 194, 57, 119, 198, 47, 74, 161, 52, 116, 233, 80, 68, 4, 124, 219, 5, 170, 178, 109, 59, 237, 8, 52, 241, 25, 188, 227, 178, 111, 208, 87, 9, 172, 149, 133, 143, 9, 76, 119, 94, 100, 146, 9, 122, 57, 199, 107, 93, 156, 125, 242, 247, 126, 116, 204, 187, 119, 239, 218, 36, 140, 201, 84, 194, 193, 233, 24, 79, 99, 183, 81, 76, 182, 115, 233, 238, 93, 133, 135, 21, 64, 109, 94, 121, 33, 16, 2, 181, 78, 130, 222, 106, 103, 48, 232, 173, 85, 213, 73, 165, 37, 20, 217, 80, 7, 79, 19, 122, 29, 211, 136, 247, 253, 66, 50, 148, 29, 79, 75, 225, 5, 219, 160, 45, 40, 149, 79, 115, 145, 187, 8, 103, 85, 151, 118, 230, 110, 74, 170, 245, 161, 134, 35, 238, 98, 193, 26, 47, 236, 33, 175, 30, 247, 138, 156, 44, 184, 83, 142, 75, 173, 12, 58, 238, 66, 129, 164, 155, 166, 66, 251, 214, 71, 64, 180, 79, 149, 220, 148, 247, 100, 44, 104, 101, 37, 34, 197, 229, 200, 180, 45, 213, 158, 206, 19, 158, 128, 196, 85, 22, 237, 230, 174, 243, 189, 209, 6, 186, 39, 221, 178, 230, 95, 78, 188, 165, 192, 168, 126, 123, 219, 195, 19, 14, 106, 249, 42, 62, 73, 138, 70, 230, 155, 95, 154, 211, 215, 22, 226, 228, 133, 215, 149, 179, 117, 165, 45, 245, 166, 19, 113, 174, 1, 241, 121, 136, 222, 208, 63, 235, 227, 202, 30, 85, 122, 84, 185, 222, 181, 154, 69, 210, 217, 103, 51, 158, 239, 175, 249, 2, 193, 241, 0, 216, 183, 37, 85, 80, 254, 227, 149, 126, 166>>}}.
{{encoded, "76itnx2RA8PgPy5DMwXYpvGL7ixEce8DAcho3kR9794yVjheqLLRpCx2f8sTu4zjk4bz9s9gdMWHScqdfa53VjNbAchzCcvPfexe1eM1ge4nZ7F11UTZZMABBgavPcXLagUSXN2thDkHYNWnZ7NYPcXvyRjahjdegrHmYDEjWyTWsHWpjmq5toGMuMgpdf2eNUqLb2R3mbXVLp8Aw32VfBcUJFEakRmntojhtCXXXamoV64HPpkw5aAzr7FtpRZZst3nrczsuNiDyAdu8oZ4s3esoh1pi4cKgcvNCRrpFijPdQWWbSXWfAtBZDtV9zfeyFDWGNi6rZAGfsUmAvdmWu3nc8m4LKPQ7uNyGbibEPSuMd8PQCMbBvPk77hJ93VGT3ixDfgTfcYXsXG4vPi5MfeewVmWizzYfkgCUURUvtPUN1eCJaxuQbcrRj6pYY2bXaRossVaD1BSYK4fcaia5s1fGd5PqByXUo8XHjvw24UT5Lds5RhqeMEtqgefW54gnURQgSPApw3SU3SpJSYKvAUHjEL2HUMcvkKFhEF9cLLPHacnBh2ahuDRUDEp7pzoPkwEbT9vwwTpaKpCj6Cd7gN1fdqHfir3g6oaYVNK1KtBGpZnS5fnYvkPypg4fTGrFKpJX7gmjQHaHbYLhFuRGtSjTf4yVYtKAk3zjZEPoekLHi6RHfanvpZfuHt3xpvfrnjJRTDgdMchMXy6EZ6TU77ZfdWhmbz3PDs2UHrTBbPGDBG9MxkaRgKrGyzwqRA9Hcnz682d9CiZE6Rxz8NZePSC6NQGdDUBw5CReQRuhw9jFvszvYN6wPxAX98gP6JjrtEcACpvMLEX3nEWF3jAkfXsEqcV6sSjNqEWtaeYqPFAWe3BN7fs"},
{decoded, <<147, 157, 216, 178, 75, 56, 241, 216, 249, 100, 189, 212, 234, 73, 154, 175, 139, 138, 177, 60, 221, 70, 244, 91, 206, 186, 73, 208, 217, 102, 134, 67, 207, 65, 154, 58, 248, 191, 140, 16, 151, 225, 106, 106, 251, 118, 4, 238, 244, 192, 206, 112, 152, 32, 89, 96, 183, 160, 233, 143, 133, 10, 143, 84, 4, 184, 174, 58, 196, 132, 250, 0, 62, 243, 202, 88, 19, 74, 89, 89, 20, 5, 241, 246, 215, 124, 155, 216, 129, 247, 52, 39, 126, 56, 145, 65, 36, 94, 3, 16, 0, 78, 42, 181, 238, 158, 167, 247, 143, 104, 38, 59, 175, 253, 47, 191, 52, 118, 96, 161, 32, 45, 115, 216, 83, 8, 137, 201, 182, 64, 125, 165, 177, 10, 2, 214, 107, 53, 93, 146, 54, 165, 104, 247, 220, 227, 180, 80, 115, 178, 104, 249, 88, 153, 247, 219, 121, 127, 185, 17, 225, 228, 211, 55, 192, 208, 62, 154, 245, 186, 135, 213, 82, 0, 203, 188, 248, 188, 197, 131, 105, 189, 202, 41, 132, 123, 67, 190, 225, 227, 143, 11, 149, 11, 81, 80, 192, 35, 91, 175, 179, 140, 24, 83, 113, 237, 1, 60, 253, 100, 122, 2, 216, 50, 117, 131, 168, 10, 134, 185, 70, 78, 162, 26, 224, 251, 62, 12, 177, 15, 143, 159, 211, 241, 194, 253, 240, 206, 11, 96, 183, 133, 198, 25, 194, 124, 17, 123, 155, 117, 40, 76, 155, 170, 53, 171, 59, 48, 253, 156, 143, 77, 240, 217, 76, 254, 212, 225, 160, 226, 117, 132, 211, 145, 197, 175, 110, 144, 205, 49, 74, 214, 163, 115, 159, 201, 187, 144, 115, 131, 218, 18, 59, 229, 173, 100, 49, 222, 32, 220, 87, 216, 247, 114, 171, 102, 219, 211, 236, 109, 21, 44, 189, 5, 98, 119, 228, 137, 61, 21, 151, 244, 104, 166, 233, 93, 119, 66, 244, 232, 221, 148, 214, 194, 129, 92, 171, 62, 106, 237, 225, 244, 112, 203, 210, 190, 97, 107, 32, 117, 75, 172, 4, 122, 157, 96, 163, 144, 113, 133, 246, 83, 182, 241, 117, 101, 15, 64, 170, 111, 51, 213, 20, 206, 161, 91, 122, 34, 74, 15, 43, 164, 55, 19, 131, 8, 87, 84, 203, 181, 108, 136, 87, 7, 153, 58, 232, 80, 194, 122, 137, 14, 116, 59, 41, 3, 249, 116, 205, 204, 134, 229, 222, 84, 207, 71, 6, 253, 217, 124, 227, 146, 187, 249, 54, 20, 168, 249, 140, 201, 23, 13, 85, 4, 147, 96, 134, 126, 53, 202, 15, 166, 139, 142, 103, 197, 87, 209, 85, 16, 166, 254, 211, 208, 198, 132, 99, 97, 223, 236, 22, 8, 250, 78, 236, 215, 219, 248, 253, 4, 235, 74, 172, 223, 93, 67, 136, 16, 162, 163, 155, 76, 148, 170, 161, 171, 166, 133, 175, 202, 207, 203, 202, 89, 225, 212, 181, 69, 109, 126, 40, 245, 128, 27, 188, 119, 201, 108, 124, 168, 216, 145, 179, 170, 72, 81, 216, 2, 10, 9, 200, 1, 42, 190, 116, 51, 6, 9, 239, 32, 228, 22, 81, 100, 241, 74, 67, 180, 157, 215, 54, 131, 41, 215, 46, 58, 0, 160, 33, 83, 72, 213, 217, 72, 94, 61, 238, 215, 84, 213, 161, 219, 111, 210, 219, 10, 143, 217, 138, 0, 130, 0, 34, 39, 118, 89, 242, 254, 38, 108, 69, 91, 254, 164, 163, 169, 74, 53, 199, 184, 1, 142, 236, 115, 8, 109, 231, 147, 68, 252, 119, 170, 241, 16, 37, 95, 124, 4, 30, 251, 91, 127, 181, 196, 218, 203, 118, 25, 99, 230, 3, 177, 113, 71, 168, 110, 220, 27, 129, 31, 233, 231, 171, 32, 178, 2, 117, 8, 216, 233, 72, 88, 54, 34, 64, 159, 142>>}}.
{{encoded, "2NBHrmiNZMYzzSPz4DDU4sPXdJCgMgFsV4AZtbtTTsJG8aAEXPcm7BDSh6AFLkFzB7YsS5QEhaA5bQZHJESjHMpGiwfX7SaW44hGBsEdgqAJ9pfLgDg3wG44uioVq3tFMXdfqiqt5dU8mQsptEAXBYSTTS7RLYiAGdBHMGhcfRw4tgFdrN4JceRny5iNcuA5h2epMaKZwRR454X6GvDd3PyzU2RuihTrbyGTm1onEffeHqsG7CC46Vu8yJok3rpJjRtHNWmpbHsc3FHzyPbaXcHPhCCCsSXgr2SFua2T7KBJMq2Eq9nmQwVkQ4JQNGG3ZBk7GaTUhwLhqJLVGWNK1566qhQ6XNRCG41nY6S86qB5yRKpJvzrK43ymaCMPeNhYa89tjgPQ2besWjcuSFkD84i5MuqEt5FJQcefZD52PLZJHGefUDvPwVEM76M4S1LpYUPGrJBkrVrhdzLkwtRUWxWmv1UJYjHSXHjBwPXmazHvAXEuq44MwU2J9UVvCNdSEz5DEq3VxcoQ7WnAzCVip37XugNSDVQiiP6axmw5X9onGrkEoUagYkUUFSc1Qh7ZGcFyYgpqPWy8iorGsh7nsV7rCW53BmzoeiFECQUzSVUD456nkzoWNmx79SaEvYcZ1qc"},
{decoded, <<140, 38, 27, 44, 92, 153, 246, 9, 44, 81, 177, 70, 70, 161, 171, 112, 41, 46, 194, 182, 225, 146, 166, 63, 54, 104, 86, 194, 132, 128, 117, 152, 13, 1, 201, 232, 1, 147, 77, 74, 110, 109, 207, 173, 245, 232, 144, 51, 66, 58, 142, 208, 92, 190, 236, 142, 222, 49, 195, 120, 232, 169, 236, 32, 19, 208, 108, 52, 98, 152, 250, 248, 104, 89, 26, 232, 108, 141, 13, 95, 26, 168, 49, 31, 93, 99, 151, 142, 220, 60, 67, 84, 148, 202, 92, 96, 4, 235, 95, 72, 216, 141, 182, 90, 225, 248, 106, 187, 76, 65, 189, 94, 243, 117, 21, 188, 124, 251, 173, 56, 149, 33, 253, 155, 46, 3, 133, 113, 126, 244, 200, 18, 108, 86, 94, 123, 206, 182, 200, 194, 153, 80, 155, 57, 63, 209, 131, 247, 148, 73, 246, 244, 51, 108, 208, 1, 215, 209, 54, 76, 211, 48, 220, 76, 6, 2, 248, 171, 138, 201, 21, 100, 151, 86, 13, 78, 33, 13, 144, 72, 68, 16, 101, 183, 205, 16, 131, 151, 255, 61, 24, 81, 27, 3, 121, 56, 88, 39, 227, 32, 134, 197, 122, 93, 247, 241, 9, 144, 60, 72, 50, 107, 194, 114, 0, 191, 3, 37, 161, 171, 44, 63, 64, 67, 143, 84, 235, 228, 30, 207, 5, 179, 126, 172, 161, 15, 12, 46, 27, 81, 163, 220, 179, 49, 217, 52, 31, 66, 64, 163, 130, 246, 209, 157, 141, 162, 66, 175, 107, 147, 126, 122, 79, 224, 23, 167, 88, 52, 10, 16, 59, 246, 126, 2, 129, 150, 22, 113, 242, 44, 30, 132, 223, 68, 181, 88, 170, 91, 131, 59, 193, 77, 110, 112, 93, 62, 224, 187, 201, 192, 176, 154, 176, 108, 216, 105, 129, 8, 238, 126, 164, 178, 8, 167, 156, 21, 98, 122, 39, 40, 177, 134, 0, 112, 212, 164, 92, 91, 18, 60, 10, 136, 44, 25, 60, 6, 218, 196, 80, 229, 91, 157, 247, 50, 136, 227, 192, 162, 34, 216, 233, 112, 6, 45, 199, 180, 75, 16, 42, 20, 111, 155, 69, 106, 220, 142, 178, 152, 52, 240, 201, 133, 215, 73, 186, 70, 30, 49, 58, 140, 185, 219, 67, 92, 133, 65, 7, 17, 105, 221, 222, 218, 245, 209, 232, 11, 250, 136, 225, 144, 165, 156, 98, 44, 86, 213, 30, 254, 253, 1, 199, 198, 110, 112, 177, 8, 218, 147, 109, 13, 249, 11, 166, 37, 34, 108, 70, 15, 111, 129, 81, 78, 223, 27, 106, 235, 210, 131, 176, 47, 33, 114, 88, 48, 228, 19, 89, 237, 43, 85, 58, 38, 99, 170, 198, 210, 145, 194, 45, 174, 87, 85, 178, 140, 118, 41, 5, 35, 187, 118, 83>>}}.
{{encoded, "3RkqBKCBAgJdYGrZseeSTnLLCos7FekQ3yNZH2QUPkfzxf9vcFsfSMbEbWtQr9YWGC1QCKKm38a6srVwQ7kK1tuDCPdYG4ySLpzfu8TYrxjsWmLpgAbZstR2BScZKKUDkPKnz7gCZDwtTg3TxveQwSJZtKuy5zauxT8kDuXZzg3cHpny5LhW4vmyEgzS4PjRfCjjstZFS6zBpUMAHsekGEQXPbcgDiit6sWVfKqZYLF1FUk1cfq7GH1mpamUWJHmH3gJBP7oJBXKtSd9vnbDKWbhvELs8YEb2QmgvM5Yv2TWXVMU8okuGYzGPRPDpQCx6BvdzMC6ShXLoZEMEoc3oYWUArhjMVu53DxaUMRkqbqyCowPRHxmye8kTL6S9URaWjVW88n2p6cvep"},
{decoded, <<119, 57, 48, 196, 83, 230, 169, 179, 20, 38, 56, 135, 234, 15, 80, 125, 137, 226, 94, 118, 81, 35, 213, 249, 20, 145, 71, 69, 50, 21, 123, 26, 46, 195, 118, 181, 146, 86, 176, 222, 141, 35, 30, 114, 124, 236, 46, 6, 178, 248, 64, 137, 226, 202, 249, 103, 175, 68, 97, 131, 81, 188, 215, 152, 66, 139, 142, 6, 36, 102, 188, 3, 218, 119, 38, 215, 212, 220, 3, 157, 242, 34, 250, 250, 30, 216, 5, 126, 207, 204, 244, 27, 155, 181, 230, 196, 25, 142, 152, 18, 10, 197, 55, 129, 75, 169, 254, 191, 90, 246, 65, 208, 47, 19, 117, 34, 43, 155, 191, 30, 38, 133, 106, 84, 59, 140, 136, 99, 178, 38, 169, 184, 175, 212, 75, 253, 167, 38, 167, 55, 191, 171, 189, 22, 241, 1, 10, 43, 11, 54, 27, 214, 117, 0, 168, 78, 14, 27, 249, 253, 134, 22, 134, 64, 94, 63, 209, 244, 7, 22, 119, 255, 23, 219, 26, 14, 38, 109, 137, 197, 78, 39, 102, 52, 80, 239, 235, 73, 85, 146, 237, 142, 113, 205, 241, 212, 226, 22, 38, 6, 142, 126, 74, 152, 50, 171, 204, 130, 132, 139, 139, 231, 79, 72, 5, 94, 46, 16, 23, 202, 62, 181, 237, 121, 240, 165, 53, 96, 49, 122, 217, 164, 251, 151, 102, 164, 148, 108, 133, 244, 6, 239, 163, 105, 239, 88, 14, 89, 40, 220, 4, 132, 101, 137, 133, 101, 77, 114, 158, 141, 18, 37, 235, 185, 72, 62, 66, 69, 226, 120, 53, 211, 240, 225, 89, 82, 253, 162, 100, 5, 79, 64, 179, 244, 31, 155, 27, 174, 13, 253, 237>>}}.
{{encoded, "3eCb7uguNTeArscFuVg212uB7SqasPVMz7VUQ7j1e6WkF536CwX2hiyq7Gv3cu2QMW6SiTfLrYwd9FuAdv7wLJR26aH68mtXd7bU65MXquekbrnFEKJmAAQ4bBHt92QsSnVkXfwMDAtwnLD69ad1LPqTo28zXCE3z8rjSfW6N8bVuFwQDgm1LuPHabfMChqCXGtYQy4WGPHTeRrYMGJpo8DYo5b43L1qFeii9W2uz8Jp8hUNQ9GjjUSiXwA1FuvZCqxivL6yVJEpdwsUukWZGVFUkZykk7JHES6YtqY18fdqW9ioYqEHAQhsszdE3b9gHsC84wxpuRh1F497942Nfjq9og5j79pGn5stKV8o4yM9Z9z7z5vQ7zgkMzJkcdaKoK99Ftjj1dF6oAT4SevU3PATSC8NysFKrQiZP8oYo9NEKgi5CSguSstMkEiCCBq8U6dS3Wa9MvzkFBufz4PkZqr12ZRoFAr33J8dByoiATVpocF8BWpra1wZJiBmeBTXVWtWFer8c5AMRuDRdGurvDBUj8kaVGEFoznfyXLmtCBZ26tCKbUEgXqXCGW1zwaj8wdu9FiPNBApoiAgDovjq34kSocxyBJ2N5YprJ7mBZJgpy79dZCjRWMunc1sg2dLymTaoTEntUfJeaov34kKuJzMsB1gaRhcKzbifgFzxj65Yhc2GCyV29pU7ubuL4bfxo1xdcd4pSMTeK9GUKqauRTqU5RaKX9e9AyrhkKgmJYW1cH4nf53Bg6J6svKtm21SrTNtcBbB5DZxSzq4uMtxe8nShE4QXQk1AJctZcjhMAfpgeyQtoSYHfhF2iKBfLy2Cm6juNjqf"},
{decoded, <<249, 146, 44, 255, 2, 133, 54, 202, 222, 122, 117, 241, 51, 9, 193, 173, 126, 150, 100, 227, 225, 210, 144, 214, 144, 181, 22, 11, 204, 73, 166, 174, 240, 3, 244, 226, 9, 91, 45, 202, 171, 115, 17, 181, 30, 228, 178, 19, 172, 76, 8, 189, 16, 4, 167, 39, 10, 226, 173, 73, 243, 201, 201, 2, 153, 159, 166, 107, 21, 241, 160, 2, 252, 191, 18, 170, 33, 189, 146, 125, 144, 217, 55, 104, 27, 231, 186, 219, 207, 184, 40, 44, 135, 6, 74, 76, 157, 173, 215, 45, 68, 116, 56, 27, 240, 168, 245, 42, 166, 82, 64, 83, 45, 15, 237, 87, 255, 108, 91, 253, 243, 236, 251, 29, 149, 10, 109, 210, 189, 42, 16, 81, 39, 153, 162, 194, 193, 134, 154, 231, 236, 77, 47, 142, 191, 134, 121, 39, 183, 175, 19, 197, 3, 62, 35, 60, 19, 73, 240, 80, 152, 218, 2, 78, 58, 60, 34, 57, 31, 237, 161, 128, 142, 38, 120, 253, 113, 81, 23, 212, 172, 106, 68, 169, 132, 186, 97, 229, 98, 125, 96, 115, 74, 203, 101, 94, 222, 99, 184, 125, 177, 252, 50, 216, 72, 35, 164, 154, 244, 13, 79, 178, 145, 154, 158, 18, 114, 78, 65, 96, 68, 228, 107, 25, 220, 246, 233, 59, 64, 154, 50, 157, 199, 219, 67, 115, 202, 72, 31, 249, 66, 249, 57, 238, 137, 168, 223, 205, 241, 3, 158, 76, 70, 199, 53, 193, 123, 148, 105, 227, 162, 254, 82, 87, 124, 206, 10, 229, 237, 172, 4, 43, 239, 139, 155, 125, 148, 94, 115, 47, 224, 26, 219, 129, 194, 132, 161, 221, 237, 182, 144, 226, 146, 76, 91, 174, 92, 166, 44, 43, 92, 252, 199, 215, 130, 136, 76, 207, 178, 112, 16, 170, 74, 222, 113, 56, 68, 100, 123, 53, 64, 36, 189, 104, 38, 235, 128, 79, 205, 211, 233, 146, 68, 171, 9, 231, 130, 9, 42, 155, 28, 210, 153, 164, 214, 63, 145, 42, 37, 64, 135, 82, 206, 50, 247, 131, 82, 2, 154, 34, 79, 205, 31, 133, 8, 73, 82, 49, 228, 80, 74, 164, 29, 188, 214, 167, 228, 41, 156, 105, 43, 239, 186, 172, 162, 229, 38, 152, 153, 89, 8, 157, 110, 43, 15, 135, 115, 240, 164, 1, 61, 44, 200, 83, 19, 9, 60, 207, 30, 189, 136, 38, 166, 209, 238, 7, 222, 109, 156, 37, 62, 79, 165, 223, 42, 197, 164, 154, 86, 109, 206, 244, 46, 57, 7, 251, 217, 29, 33, 237, 117, 234, 226, 0, 56, 78, 66, 103, 112, 94, 117, 129, 4, 16, 93, 95, 102, 211, 133, 176, 64, 192, 151, 75, 9, 101, 176, 204, 234, 20, 126, 147, 76, 44, 85, 221, 52, 1, 187, 13, 55, 58, 184, 212, 251, 64, 87, 237, 149, 126, 88, 172, 89, 44, 105, 92, 129, 12, 213, 235, 20, 60, 29, 46, 3, 53, 25, 116, 119, 15, 214, 144, 190, 214, 200, 112, 154, 33, 100, 124, 246, 121, 11, 211, 71, 162, 115, 200, 91, 99, 113, 126, 171, 75, 240, 131, 179, 20, 134, 13, 169, 81, 38, 36, 82, 248, 123, 135, 74, 216, 100, 142, 228, 97, 240, 144, 106, 35, 120, 64, 70, 243, 210, 107, 106, 204, 64, 196, 12, 179, 159, 27, 165, 93, 63, 201, 19, 82, 220, 121, 84, 115, 223, 99, 93, 244, 117, 64, 95, 36, 30, 62, 246, 172, 191, 34, 128, 25, 22, 88, 206, 157, 52, 86, 111, 74, 222, 194, 88, 100, 183, 195, 193, 12, 149, 246>>}}.
{{encoded, "6911yawrPFFg61ityYtqhiuJUUKicEobTGbjfd296LKTmAvwTcaWBWpevSVLEmc168cKeGfUD35x91ekZdjqxCDD2b8asRN6CGm51EAwQe2JGZECCPUY3hpGfbrMzQ4WgBbgVcmBWuF9tDbsCAbzQFdyX5f5QDispVEK6HGFRKxm81wapsnPuVnNcsFvFNba3VcN7udju43HNUAupoXPoDif6PiVpciqXqf8JxZnQGz3q5JfqG4R3RLtBgccTszxWipv5SXry2CxaTfg1ozBUeFdARRKRL1Fhm1nCCf2NdY8bRsZCk1ZcXBhcfmAEjA71PHNKg3TTcuDbCq9fBCbUxBcEGJDpoaYdJSYC9CmhzofKp4ziknb6TxcaRhHBmS7UzUG9h3scSuoBpHt5re7hvv2LKDreXBpx8N3DkoGU7s5tQMMgauKXfgVQA3dXkRksVs9h8gVaa4FkKFwQ4z1723QGaUr4XZevPPvCCQ6dhGwXg85tFcZR7yH9dSTjVYnwqeT2MkmkeLFTvG5RwYMXEFUyTJ5tQxmZEvkBnjdReY5xLCemvhFzbpdpU7iHMnx3f2rUyi6g4tsaJiMDFfCTW7amQUmaGd8rtNfW6LgdE4GtpNg49msxXmukC3vg1RJQkCMP5LcpsYWmEsvCCQfBeANxLRjZqcYe6zPEjo1tbrMdbWJ6Sm5osH9YVVxwGLwcfiF"},
{decoded, <<247, 236, 120, 197, 239, 135, 180, 85, 153, 9, 15, 93, 243, 255, 134, 103, 144, 200, 110, 233, 32, 172, 159, 3, 114, 227, 36, 220, 228, 245, 83, 215, 57, 170, 188, 8, 185, 207, 165, 57, 252, 219, 102, 53, 167, 53, 129, 179, 49, 4, 254, 115, 248, 25, 119, 65, 62, 166, 165, 22, 153, 138, 109, 116, 239, 28, 92, 251, 234, 174, 209, 57, 40, 165, 55, 25, 182, 109, 42, 113, 197, 217, 98, 15, 183, 36, 252, 64, 163, 134, 3, 31, 189, 89, 227, 75, 216, 67, 199, 176, 164, 233, 46, 71, 74, 187, 111, 14, 129, 148, 156, 16, 207, 243, 35, 180, 64, 103, 161, 49, 186, 233, 81, 130, 12, 239, 11, 232, 239, 110, 78, 71, 77, 66, 196, 119, 77, 154, 239, 246, 0, 209, 77, 9, 30, 162, 61, 243, 54, 13, 118, 77, 184, 39, 0, 94, 110, 18, 102, 115, 236, 14, 174, 106, 125, 245, 124, 192, 21, 62, 35, 149, 153, 139, 14, 41, 94, 183, 158, 108, 154, 64, 206, 178, 132, 109, 148, 198, 83, 58, 3, 220, 184, 140, 167, 40, 254, 14, 173, 78, 195, 41, 139, 152, 37, 167, 126, 193, 44, 45, 200, 236, 107, 164, 33, 37, 132, 114, 189, 45, 139, 130, 12, 254, 13, 65, 246, 177, 82, 84, 100, 60, 216, 64, 226, 234, 156, 70, 39, 182, 125, 244, 126, 198, 249, 116, 109, 94, 136, 5, 2, 68, 115, 41, 10, 12, 60, 119, 145, 170, 158, 132, 75, 72, 246, 246, 244, 235, 175, 53, 239, 196, 14, 80, 169, 133, 114, 63, 0, 59, 231, 244, 77, 65, 135, 123, 34, 82, 123, 91, 85, 41, 244, 249, 243, 148, 153, 164, 149, 39, 54, 34, 211, 154, 165, 45, 54, 180, 224, 13, 76, 242, 58, 80, 117, 100, 126, 4, 249, 154, 170, 242, 141, 124, 145, 207, 53, 201, 191, 214, 91, 207, 243, 235, 141, 207, 165, 110, 106, 251, 33, 139, 196, 238, 51, 95, 66, 179, 96, 249, 46, 108, 147, 42, 246, 73, 232, 58, 137, 84, 180, 122, 16, 232, 146, 4, 21, 187, 41, 203, 14, 234, 249, 135, 5, 34, 33, 104, 243, 114, 189, 6, 30, 201, 56, 96, 245, 26, 126, 146, 251, 251, 184, 224, 123, 135, 67, 132, 222, 253, 251, 1, 37, 186, 210, 20, 99, 46, 5, 174, 139, 115, 6, 131, 0, 9, 238, 63, 30, 45, 198, 4, 96, 134, 178, 186, 82, 36, 122, 254, 173, 216, 184, 46, 46, 233, 155, 87, 82, 108, 237, 143, 224, 248, 184, 252, 78, 46, 122, 48, 58, 87, 150, 212, 103, 52, 191, 55, 102, 96, 19, 127, 8, 243, 165, 15, 8, 84, 82, 30, 92, 23, 73, 37, 124, 236, 94, 12, 225, 30, 12, 137, 27, 232, 203, 221, 160, 44, 181, 62, 22, 70, 159, 31, 52, 180, 103, 96, 245, 249, 83, 61, 196, 227, 194, 129, 231, 132, 135, 37, 216, 214, 48, 225, 138, 67, 152, 40>>}}.
{{encoded, "makX5SgPRwZVPzAxxfnjk815FTLsdMQpVvWEnvhgLVQa6g4YMVNsL122JgzW4JNJ83Hj6o3hHnMXiDbhjqSKGzAkP9DTHAyPBfS9yoEZ57DEQBCeULYrQhquLYLu61Qhk3q84eWLQnwS7hH1JTzmLCR1qBcCabURUgqMr3yrQPHMtBsHjWJysy7poBMCRFVCQEPvVHu43njcCVVug4nPHM9ToVxycVicefwehVYmDCbXnnGW7N8U9pgrR1onZFZkU3e5jL6HijM3LXrKZhFgRcakyoSZc1jeYUAiZ4JNU3FpS3ybg6XPvavpndUNCfRpSk8V4DiuDqw95dKXUv46tmMdRYBPTV2FKpw12koCx4aTbJUaBNmCEJk2aaodbuwsiMkvGWkfwxuutq3K93cngSPNrkiBYM6wxRc75SCLetUXhG6ofNkNTM7f5GKu4Y8dK5orc3McT65R52CkapqsvdSxBXHCoFQSf7tmMU56Ej8Er6oJ9h5rg66EtneJp5FekDtdG3zej3XkUiBWHjNkJ8WrvBMY6AUVUTjw1RkRqbSQxwNU7ge9xcrVy1KAVtt2Ysk8Lk1nhFksuXxCKG7wVK9ED9e6vGmBY1A4MMno8zFzHJrvxxvFZebUA67ujXR8YUVt7gpNev9GTtm7ofPvEYJNxNkTwBF8xgu8bwMWbtPV6fy5qJX7iodsgDjj7rvuSUNsmJGFCUqRRSMb6WB3vHDew4qZ2XxT9HqZ2e7jCgmmm5e49YmQrvoUaMPu1grrtcmy2sKWFoaiJCBqJfYRV5aNg693kc11ZwM8B6z7pX9shfwQgiNxqgtudBbXbVFkgZYeb9CSLWAYcVcxFBBEc7Gse8D4SPtkLNcwQGk3cXW1Z9SgS9sYbw9N5mDvhqt6dunmZhkGUneDGAeexEYy5LU5vdpdrJeJq2sMShrw7y"},
{decoded, <<84, 213, 159, 234, 214, 35, 220, 54, 46, 44, 51, 209, 89, 221, 55, 172, 208, 27, 251, 248, 79, 229, 88, 63, 37, 59, 155, 101, 83, 201, 94, 246, 22, 28, 221, 67, 128, 197, 20, 56, 244, 170, 113, 65, 115, 156, 167, 216, 0, 120, 141, 217, 173, 210, 56, 89, 243, 129, 39, 235, 47, 93, 181, 220, 231, 48, 205, 56, 165, 126, 226, 233, 49, 91, 42, 92, 148, 94, 123, 166, 210, 138, 31, 120, 231, 71, 212, 156, 206, 169, 244, 24, 123, 114, 96, 177, 48, 58, 188, 150, 116, 182, 118, 62, 48, 67, 176, 111, 188, 126, 255, 138, 131, 184, 132, 121, 127, 119, 186, 230, 112, 210, 68, 106, 192, 33, 81, 133, 239, 167, 176, 5, 147, 58, 214, 37, 90, 221, 84, 146, 49, 40, 129, 234, 15, 86, 156, 70, 187, 26, 129, 199, 231, 214, 68, 185, 103, 1, 248, 148, 218, 37, 35, 134, 69, 208, 243, 80, 26, 163, 62, 188, 253, 68, 75, 187, 164, 161, 210, 97, 155, 18, 109, 241, 214, 44, 96, 150, 6, 70, 200, 177, 15, 21, 47, 246, 39, 78, 205, 127, 52, 58, 219, 231, 183, 246, 193, 111, 40, 233, 87, 66, 115, 22, 39, 59, 148, 198, 95, 249, 59, 115, 15, 180, 112, 202, 129, 31, 196, 120, 22, 217, 100, 4, 142, 161, 126, 172, 88, 245, 61, 146, 205, 168, 75, 127, 149, 135, 182, 39, 219, 19, 169, 55, 184, 146, 113, 52, 61, 121, 80, 151, 186, 183, 173, 51, 193, 242, 153, 102, 44, 119, 129, 99, 142, 163, 164, 52, 188, 161, 202, 128, 219, 111, 209, 94, 173, 55, 130, 194, 3, 22, 243, 60, 137, 160, 232, 238, 37, 203, 89, 121, 167, 230, 86, 208, 18, 43, 107, 133, 227, 156, 33, 88, 136, 72, 136, 101, 27, 81, 249, 162, 118, 226, 41, 248, 5, 56, 121, 80, 20, 212, 194, 107, 153, 158, 14, 184, 66, 241, 84, 49, 95, 92, 204, 194, 227, 29, 49, 16, 9, 7, 117, 219, 29, 233, 228, 191, 48, 138, 194, 210, 194, 60, 62, 185, 140, 60, 200, 51, 118, 89, 172, 223, 128, 241, 66, 201, 189, 85, 128, 201, 130, 141, 166, 168, 108, 12, 111, 45, 245, 223, 57, 125, 171, 61, 102, 131, 132, 247, 111, 223, 6, 176, 137, 166, 2, 33, 255, 190, 139, 128, 183, 155, 44, 163, 160, 240, 159, 151, 244, 111, 46, 220, 17, 32, 173, 194, 185, 197, 65, 83, 142, 53, 15, 227, 113, 13, 175, 127, 8, 98, 208, 68, 117, 217, 174, 246, 158, 136, 239, 182, 53, 241, 113, 22, 76, 176, 64, 129, 18, 107, 211, 84, 96, 173, 153, 126, 53, 209, 62, 92, 73, 155, 150, 158, 59, 46, 127, 93, 11, 211, 190, 232, 87, 204, 137, 62, 130, 137, 207, 7, 7, 225, 194, 250, 54, 224, 54, 219, 94, 203, 42, 103, 197, 185, 180, 76, 174, 198, 190, 11, 130, 156, 239, 4, 254, 74, 203, 152, 141, 119, 182, 179, 45, 90, 69, 185, 146, 247, 144, 187, 84, 210, 236, 61, 142, 127, 106, 174, 106, 237, 61, 222, 186, 154, 176, 29, 250, 162, 185, 159, 133, 162, 27, 220, 202, 20, 160, 213, 72, 169, 20, 75, 228, 73, 181, 97, 176, 152, 180, 135, 255, 164, 232, 5, 130, 132, 121, 98, 63, 248, 214, 206, 246, 101, 100, 141, 113, 54, 31, 237, 45, 221, 138, 216, 86, 122, 220, 182, 55, 214, 114, 74, 18, 124, 208, 245, 113, 45, 218, 199, 227, 148, 9, 178, 119, 40, 109, 130, 120, 238, 121, 89, 98, 79, 245, 127, 143, 151, 125, 125, 66, 43, 38, 127, 167, 30, 196, 4, 24, 132, 134, 49, 80, 254, 157, 104, 41, 108, 195, 216, 127, 7, 47, 120, 139, 151, 131, 202, 59, 178, 189, 33, 173, 48, 81, 95, 161, 33, 156, 105, 111, 252, 114, 164, 207, 42, 19, 157, 3, 212, 153, 36, 44, 150, 244>>}}.
{{encoded, "2ACtiCAZh9juac4HRN1SRDXwaHN5jnz4RRNAgk49TV1W7vehfUKwFBESc1F75zXmUGSAcSMVQiW3HVi8ie9YpjXV51KzFrRhvY34Ae6M9Ub89LQtywvEzYaYTHCxjGvXFCwJQJhBjMSmRkq2avxy7j4j4JXjvTzSSTd9cheLZt4R5svm62VNEHJrsNrJuipfjGyJ2fELiu2h9c5hzsqB1Ce2zftEVBDuU7dyscka4NgzVeC2KGv9hRSS5LJATsfiVBS7yTiEspQkm6Zt61TdyPduwU7L99aBsQikRbqK1VH9tZxsQ7HJk22Nt95efx7TJ94ymBDX8NnH6wCwW1vL596jnXPHJ8JEArhy9DgmXuTEKBvLqszintVStX1h6p2F4cRDBERJoZ7a6VZ38i395rjDT7BUtVJhr8hK4BbpVknJvnWJ5XfVn8ZKzwatR181iX7EPXGFUCxoJmeCq14ejosX9qCrW7iyyEFemFNLGw3QywchwzUMzbnoVC1rspx7SiKnoHWutzm7YuSUjZkVad3hWGceW5azoFZhXx9DuNoPquovg3xXf8ab9MDoeYvBUSnmgNqJPjWRcru6gAf6A5RQssWYycHD8YqpA7c5Qz9377NLdQMJssz7L886tzEQftLz48WwfhnCttJ5ot3y7ABHq5vdEYWqvkeSkMxsUAYkDSUXcPEx6iSC2iCigifSpZDbqVR3rMTgLmz5ERaL9ngMeVwZ12X9chjYA7DJhWim3Qcghx7ceGRiKZy37STb1WbZYokRUvYc4YFRpuuUuzEDX4uVzL85YMbr4FKJccKDmohKHLEGyuPPSy4rhfRsqsv7Y2sPudKVF8rZrHBXW4WLcyRaPXTqr5SST2KqpPpBtBJw9McVHcaYPHX3T2abwuRLVgHJvZp7qpPEodieUrhNWxWcHeaYw4sx5vPQ7BZGXgGLdVLHFCsmouAyGUQbfHedP5sckghBXvuJo16hZbFsA7pbMEBBFFchrwq2B2a3BeiLFFGjZM823hvYaxDgRTo9GH8N18nHYaKkq3J7AW1hF6acYUVehCms7nzDU7u3anYzLN71t9i9FFHx9bwwogRiqU9LPKJ6nrGBbZeb9yGw3JjPbXw94CCW4XFaN4DjrAeNWo46w5dAUibZa1e2Arg4CTpd4fwZ2CJcCVnxYKNE586PoFadjtMf7rn53RtATo1dLYzH8yUMani56DpGybHjKxuf4hHfR98t94BvgdQzdPrS4RHNfSTjUyHDLqeWf48xK61MwJFzKMew5NLWugTEYARKoY9MqsvkRGocY4wMUthNjM933NxGKBKE"},
{decoded, <<118, 142, 215, 4, 195, 137, 71, 233, 77, 149, 201, 206, 98, 197, 152, 207, 222, 199, 6, 75, 223, 229, 144, 63, 179, 129, 56, 153, 197, 25, 24, 137, 5, 2, 238, 209, 161, 197, 99, 102, 196, 65, 24, 27, 87, 224, 122, 2, 81, 2, 228, 136, 92, 23, 87, 4, 114, 161, 70, 45, 156, 51, 192, 149, 104, 34, 12, 167, 209, 174, 57, 111, 173, 162, 57, 100, 67, 84, 145, 90, 228, 112, 17, 196, 30, 202, 104, 208, 120, 58, 88, 48, 238, 82, 133, 57, 244, 217, 39, 149, 234, 155, 214, 72, 111, 112, 95, 198, 136, 181, 95, 228, 138, 218, 49, 118, 178, 194, 222, 157, 161, 26, 12, 68, 193, 238, 9, 53, 152, 120, 108, 55, 76, 48, 183, 249, 188, 55, 251, 47, 5, 69, 113, 48, 47, 176, 80, 199, 0, 189, 123, 151, 79, 73, 92, 151, 229, 31, 199, 9, 214, 247, 239, 27, 233, 183, 214, 4, 208, 128, 126, 245, 50, 232, 103, 207, 40, 162, 197, 138, 43, 28, 146, 189, 29, 36, 73, 66, 7, 100, 66, 2, 132, 146, 17, 110, 25, 65, 187, 179, 45, 127, 2, 135, 176, 112, 101, 117, 251, 137, 144, 174, 133, 172, 172, 253, 59, 195, 36, 113, 126, 142, 205, 205, 135, 255, 145, 198, 57, 104, 122, 209, 219, 237, 245, 201, 120, 206, 170, 164, 12, 105, 221, 41, 210, 108, 131, 230, 210, 231, 117, 198, 31, 186, 117, 62, 221, 59, 224, 49, 27, 72, 184, 73, 226, 216, 240, 31, 80, 228, 145, 173, 87, 48, 131, 62, 216, 19, 163, 243, 46, 174, 160, 244, 55, 104, 133, 207, 49, 229, 207, 73, 161, 12, 38, 85, 246, 125, 245, 121, 190, 150, 208, 88, 27, 33, 83, 231, 215, 60, 79, 225, 218, 185, 140, 41, 216, 153, 53, 142, 22, 249, 28, 247, 12, 141, 145, 87, 66, 186, 183, 44, 34, 83, 24, 253, 221, 22, 98, 158, 198, 4, 127, 191, 135, 25, 128, 131, 43, 253, 13, 46, 18, 148, 146, 213, 33, 69, 225, 17, 96, 141, 45, 43, 118, 118, 194, 75, 129, 222, 172, 51, 60, 84, 248, 11, 237, 236, 55, 196, 102, 247, 144, 13, 12, 143, 57, 13, 230, 16, 201, 201, 37, 143, 35, 165, 230, 24, 44, 91, 9, 142, 157, 132, 76, 8, 211, 236, 53, 227, 173, 209, 192, 148, 217, 150, 80, 109, 243, 214, 207, 168, 81, 249, 77, 57, 239, 62, 228, 2, 12, 36, 8, 57, 145, 2, 111, 255, 1, 22, 98, 250, 143, 179, 231, 223, 130, 174, 144, 252, 199, 50, 202, 132, 161, 48, 149, 56, 64, 219, 28, 182, 208, 80, 176, 254, 97, 98, 170, 215, 27, 242, 19, 90, 140, 47, 254, 12, 187, 109, 120, 12, 109, 121, 30, 201, 110, 26, 201, 192, 216, 232, 248, 51, 107, 127, 195, 191, 13, 22, 107, 7, 246, 41, 157, 200, 159, 109, 52, 52, 146, 227, 41, 40, 213, 219, 192, 65, 76, 202, 25, 153, 165, 83, 221, 124, 110, 118, 192, 109, 189, 193, 100, 243, 245, 1, 94, 200, 208, 37, 206, 48, 144, 0, 220, 173, 198, 239, 105, 241, 38, 233, 46, 160, 68, 226, 92, 156, 165, 114, 4, 55, 76, 19, 11, 95, 211, 252, 241, 21, 5, 214, 188, 235, 205, 75, 4, 108, 101, 70, 57, 62, 235, 153, 67, 106, 197, 148, 189, 172, 149, 151, 151, 226, 44, 16, 184, 27, 193, 22, 112, 233, 144, 97, 61, 144, 191, 200, 41, 59, 91, 249, 145, 130, 93, 99, 61, 91, 96, 240, 244, 29, 76, 162, 14, 65, 35, 42, 242, 185, 62, 90, 247, 199, 169, 122, 91, 65, 30, 103, 69, 16, 243, 60, 123, 47, 86, 7, 205, 87, 186, 134, 242, 103, 247, 68, 223, 23, 180, 93, 15, 6, 125, 218, 46, 88, 140, 151, 86, 228, 130, 23, 24, 23, 31, 35, 203, 183, 217, 30, 80, 129, 31, 82, 153, 24, 114, 40, 241, 124, 50, 17, 59, 82, 245, 200, 188, 93, 74, 225, 205, 170, 111, 221, 67, 76, 94, 223, 26, 229, 174, 192, 168, 134, 57, 176, 108, 217, 149, 52, 190, 152, 214, 164, 20, 192, 139, 11, 114, 91, 23, 174, 161, 56, 186, 38, 192, 205, 155, 228, 232, 25, 183, 99, 132, 121, 6, 132, 150, 211, 178, 18, 0, 31, 126, 245, 175, 108, 101, 39, 79, 215, 88, 252, 149, 205, 56, 98, 240, 35, 135, 108, 88, 172, 156, 82, 163, 212, 198, 249, 236, 224, 211, 254, 110, 224, 8, 90, 70, 186, 68, 158, 201, 79, 195, 90, 246, 118, 63, 226, 190, 29, 129, 192, 73, 115, 26, 80, 20, 42, 66, 140, 118, 192, 108, 104, 6, 93, 14, 194, 12, 215, 137, 241, 7, 95, 41, 61, 235, 79, 126, 118, 10, 104, 184, 211, 161, 184, 132, 175, 25, 220, 133, 104, 243, 90, 46, 141, 36, 186, 207, 67, 189, 42, 187, 163, 249, 119, 255, 235, 45, 233, 78, 213, 223, 93, 171, 168, 26, 51, 43, 193, 208, 59, 217, 228, 200, 100, 4, 191, 253, 236, 234, 34, 228, 238, 151, 247, 253, 129, 179, 206, 55, 172, 177, 92, 188, 206, 205, 169, 211, 242, 248, 201, 199, 137, 160, 151, 150, 202, 85, 150, 115, 143, 139, 194, 89, 76, 60, 83, 200, 230, 188, 193, 129, 230, 20, 76, 185, 8, 119, 149, 43, 67, 17, 198, 57, 228, 20, 90, 211, 73, 204, 143, 253, 114, 189, 144, 170, 164, 64, 226, 245, 31, 199, 180, 32, 228, 85, 14, 102, 48, 231, 57, 65, 233>>}}.
{{encoded, "6a7qSowf9VB3boS1mCpQZqdRjxsDA5dFyxT9YCXc1U6Abh9iyNZitAorthhSRaaJKEKUrJ8oa24np7qG4nKBn2vgx2n8PTEdxCHBryrLb5kAR4LkWySFU2Teox7SnRv4XFqCibxzZCKuN8MSVLg3WpZ2iQx7dRuoTL5ksyZBFqrZxXZVyZMKypsPJzVjTaoiN6ACq9RTAExw1df8a7FTuSPYiBxr8WWw186i8CE3K6A2bnqF5gCXtThpKvjuD3HnDAei5G7WwTs49a3Hzn6oatZY3a1qn9HpHDQvnSMYcB9pBbT6tpD7zLZ4WTbAoerP26y9UZDTJa1ykHanRcim7pV5SFvHvktKATt7bVvnxXyFS8BS1uF6vJDEwPWq3vVy5nJkoENmi6HU3jUEHomASgJ5DEXvhiUye8sxaK4qTZxGNDSqa6C1KLYdsNwVBDZ6EcSqWuge86WmDQ1mwRUH1BGyvu9gyxmVJ4PAFdtzrizsedoRoogqA5Sdv6nym5Eg8v7ghUJADUS4BQsYzqATKQzYdcUkeGj1X1N47NjBaGev9Wu4sSAF9Q3AFL5novdNPMY9w6ob6bH1Dar1Pi72QhXtmSqSABG496mayre9H9VSkxnQ458euVQcdndTZZpzdHzRdGWNiRizy5TX7sptWkq6m64Hyfi4hg1iFRjHGYYhp4QUX6whZNze7wJFCRwUJhTGUKf5J1NeHNQ6RpmYsBuDx7K4Py8qihaTpQKzdCnsVFSXrJbVjzYypkdKPtGmiErLdA8pfV2zXmcq52buedHDNXnUKu23g6fJFK1JRPPC2KWbvtU6eR3DoJoyS2dfYXW5ZkcYd6hu6Hc9sGgDsYQGRK2AH3dXTqh5D5kyBwnsre1LU4b12KHMtjyxpz14dgSe6F1Dtxr5jBTRne9ZsgTk6Ns8oMpvqZw57"},
{decoded, <<69, 94, 131, 34, 192, 78, 16, 104, 139, 194, 36, 130, 231, 187, 162, 239, 24, 209, 223, 79, 7, 230, 209, 34, 161, 130, 241, 158, 145, 219, 173, 0, 46, 147, 16, 54, 204, 162, 243, 41, 195, 79, 106, 177, 18, 54, 157, 120, 87, 114, 216, 218, 85, 203, 175, 144, 91, 216, 185, 158, 150, 198, 201, 102, 34, 52, 9, 27, 175, 211, 154, 102, 189, 148, 220, 143, 124, 45, 73, 111, 54, 60, 17, 67, 47, 174, 79, 94, 39, 33, 157, 72, 32, 170, 9, 71, 143, 114, 109, 174, 120, 227, 90, 176, 247, 151, 87, 55, 27, 224, 134, 127, 131, 251, 162, 168, 251, 109, 154, 44, 38, 223, 223, 127, 180, 163, 61, 199, 26, 45, 69, 149, 144, 69, 180, 240, 94, 6, 215, 75, 247, 17, 21, 251, 103, 34, 213, 242, 212, 33, 175, 69, 153, 133, 148, 93, 165, 239, 144, 156, 6, 87, 42, 198, 124, 48, 82, 82, 245, 186, 11, 109, 80, 21, 70, 160, 219, 129, 76, 67, 206, 87, 107, 194, 172, 35, 17, 164, 69, 208, 175, 88, 94, 96, 210, 156, 86, 207, 39, 44, 204, 8, 198, 66, 114, 114, 121, 75, 162, 21, 58, 122, 185, 14, 58, 190, 188, 177, 48, 111, 185, 126, 85, 82, 241, 197, 248, 245, 133, 76, 123, 108, 15, 201, 152, 47, 97, 23, 104, 49, 25, 21, 141, 110, 120, 106, 160, 236, 189, 127, 131, 130, 212, 187, 91, 231, 178, 38, 65, 233, 135, 28, 8, 12, 140, 178, 177, 114, 162, 118, 2, 173, 47, 240, 210, 183, 30, 53, 44, 113, 227, 138, 229, 169, 131, 112, 47, 60, 176, 181, 163, 88, 159, 48, 203, 51, 139, 145, 81, 175, 79, 64, 88, 197, 244, 135, 44, 157, 141, 159, 195, 63, 27, 247, 59, 231, 84, 30, 99, 212, 162, 117, 97, 208, 190, 116, 162, 41, 218, 167, 189, 251, 161, 33, 97, 145, 145, 35, 169, 69, 183, 152, 126, 243, 52, 155, 14, 192, 238, 4, 8, 184, 228, 147, 123, 245, 92, 88, 97, 181, 89, 162, 229, 236, 67, 83, 108, 78, 65, 157, 65, 35, 212, 199, 18, 155, 191, 214, 83, 137, 192, 22, 173, 85, 185, 84, 216, 178, 166, 253, 53, 175, 68, 225, 67, 204, 10, 113, 148, 97, 79, 48, 99, 165, 252, 51, 28, 113, 139, 231, 242, 78, 86, 64, 150, 212, 36, 144, 106, 78, 131, 55, 113, 222, 205, 13, 86, 13, 164, 176, 158, 131, 15, 237, 214, 232, 1, 50, 190, 209, 124, 163, 30, 164, 234, 149, 16, 65, 189, 55, 78, 251, 24, 4, 62, 180, 249, 143, 131, 84, 2, 221, 224, 221, 29, 170, 7, 204, 149, 6, 80, 238, 11, 3, 200, 57, 246, 95, 57, 87, 1, 55, 177, 94, 131, 194, 149, 206, 38, 222, 246, 213, 86, 218, 157, 126, 251, 254, 219, 37, 228, 171, 197, 5, 11, 106, 217, 104, 100, 37, 120, 46, 41, 162, 137, 244, 11, 105, 134, 44, 54, 139, 202, 151, 111, 254, 99, 56, 76, 196, 166, 151, 65, 215, 130, 122, 8, 183, 53, 155, 216, 149, 121, 136, 218, 205, 39, 25, 148, 149, 115, 83, 89, 80, 9, 135, 49, 158, 108, 158, 211, 12, 156, 95, 157, 158, 197, 248, 221, 234, 117, 127, 229, 3, 182, 42, 0, 131, 253, 80, 44, 57, 120, 109, 128, 114, 162, 105, 8, 120, 72, 153, 110, 4, 10, 235, 66, 225, 1, 145, 115, 10, 61, 100, 142, 190, 58, 207, 124, 134, 228, 215, 105, 85, 127, 187, 215, 144, 63, 57, 145, 50, 5, 18, 49, 79, 54, 11, 240, 71, 33, 35, 227, 127, 178, 247, 121, 0, 195, 44, 130, 2, 169, 127, 233, 186, 41, 63, 230, 64, 159, 84, 169, 9, 38, 247, 117, 231, 152, 178, 199, 163, 98, 18, 244, 55, 0, 48, 191, 120, 220, 234, 124, 228, 21, 55, 99, 232, 117, 250, 78, 180, 102>>}}.
{{encoded, "2xrW56SUqbDkJHvFpA3iyTjxbxximZxfY4h4kkb9oDW11fqGQqNBTvhcXNqP3ouQi3BKAP1AzCrUjiCuFPBZBpx9E9fwQc8wC1Ewxc1xCAYjJPAemcKyLY3Tyiy2TCgvNWS6DGEhtDMBgotbJuDi1etpX9kuFLhkY89mWSncF9ZUacdvmxaQNwE81jQL6u4SKa6rE63PPy23Hf4m9P7NUwWqZ5rsCHg8bB2syXqewmpobzEJb4c94q57HNgrru6KhJenAa9ZG3U5saoiWyyLMRnHmVNt"},
{decoded, <<6, 224, 98, 127, 95, 34, 151, 164, 207, 215, 106, 166, 73, 32, 185, 56, 16, 185, 34, 142, 33, 193, 97, 104, 223, 62, 69, 58, 90, 2, 134, 47, 17, 254, 128, 126, 197, 34, 100, 202, 177, 244, 142, 166, 174, 27, 139, 52, 143, 62, 61, 102, 83, 223, 76, 95, 138, 56, 30, 36, 46, 189, 245, 59, 224, 125, 54, 25, 167, 87, 232, 243, 29, 252, 20, 63, 136, 40, 83, 198, 25, 193, 230, 60, 45, 50, 20, 215, 237, 233, 141, 220, 65, 201, 246, 103, 3, 223, 215, 120, 130, 239, 56, 5, 28, 250, 251, 35, 81, 202, 168, 60, 4, 3, 60, 200, 93, 207, 57, 84, 32, 3, 65, 240, 91, 212, 10, 167, 165, 22, 13, 90, 173, 45, 158, 91, 146, 171, 192, 249, 63, 63, 144, 176, 41, 90, 210, 100, 211, 175, 193, 240, 236, 157, 166, 199, 226, 61, 119, 106, 103, 106, 50, 224, 254, 233, 4, 185, 160, 132, 11, 145, 51, 191, 228, 173, 122, 230, 73, 200, 201, 252, 248, 5, 186, 52, 109, 236, 5, 218, 175, 124, 230, 45, 37, 143, 20, 221, 247, 92, 231, 23, 140, 163, 16, 22, 52, 229>>}}.
{{encoded, "B7NG8ERA7bqNBorWLXT7whXG8uXPth2ea7HhzJZRQqTJFBRkQjfy4XiAgYHP5RuqFH33ZXkvRTuobHFqdKCASZMYeQ61AWuxoCEZJHbaK3DRD7cKhi32Taj4LwHCSPMssTLspakNn55VU7QuGVNLTWNxSECu4hecaBc93GjGXg2FmWYdMDzKAhfAnVXuNH9EjbEGvu2smXaARTygpq1ADD1oFNbXjugCYwmqgXM2F7EKnQoRNp4VG8XbzRd9XshuWTAXK182sMwUZrPbA4P5nAakKHCn1XN8pYDUX8EPByzVDpoDgmySchEuCVTEEzwuJ9UWEbPZkP2XWiYMyeTSFwjjYkc9hYx5Wki6NMqKuuqmNCtMRcBBph2RYbpu17xaXA5THsHn4cnxVF5SQd98dnLHEs3vktuDK1hcAyuQ5SNRzoPgWvzbNsErxmTdMtCfVbevdVATTX2V47gaFdBibLTRwotDpDTcrAVxiitY6kGyg4u7tbnMzk5yGEsDghiTcaS4dspeVbto8wKcFr69j6raus5JXTKXk1WF5HaGNi5FyvWze4zPfpaETmVE4ZXuRWPSmt3HeTLHcvccaUfRBaFh6YfEsx16mUgT224dmMrHaXA4EvVcPY7vCV18osCQ8xYy5BHQEENb5yjefUecoL3FjnjLrhcy2BNHrVKfMfq39DS4e2FGMJPF21sFB9oAkGXrUWiRdh7urka5No28gGTar3E7orPq7LMXMjWkARaRs2DdKtEQtz4wbn3CG8gCskeLE6jyMFtsrw2yZnthVJdqDsUY9v5fBRBnrKb5Me4TE3GdJSgyT1PdfTsRrnzYeddj4VE67RSiysy9kdEwBRNtmgT1NAu1CG58DBp6Xq9y3yCzMKedAuqz7Rt2UKWcP9KkbJcm6LhkCDt6jCMiL1"},
{decoded, <<137, 200, 92, 173, 161, 123, 200, 192, 55, 222, 98, 10, 132, 26, 1, 156, 111, 20, 101, 212, 42, 177, 43, 203, 195, 177, 50, 9, 255, 128, 216, 2, 18, 205, 55, 72, 54, 12, 22, 233, 172, 84, 214, 230, 88, 99, 74, 60, 113, 54, 167, 199, 18, 219, 126, 39, 238, 141, 213, 228, 43, 100, 13, 241, 5, 227, 6, 151, 152, 124, 173, 140, 37, 36, 149, 64, 149, 70, 152, 228, 45, 39, 104, 138, 111, 254, 4, 103, 37, 64, 218, 17, 169, 144, 129, 37, 113, 166, 93, 50, 189, 161, 11, 220, 196, 107, 46, 182, 230, 145, 97, 30, 239, 86, 241, 240, 51, 183, 97, 215, 168, 250, 113, 243, 22, 114, 206, 252, 219, 125, 54, 100, 196, 180, 135, 19, 135, 30, 156, 82, 90, 114, 150, 191, 229, 163, 101, 201, 228, 56, 143, 168, 72, 133, 239, 150, 245, 228, 59, 97, 194, 210, 224, 93, 52, 105, 20, 146, 44, 205, 210, 14, 138, 3, 194, 48, 244, 202, 170, 114, 227, 106, 140, 234, 44, 178, 224, 26, 250, 234, 232, 92, 37, 124, 219, 178, 125, 112, 252, 234, 123, 254, 166, 139, 66, 115, 57, 157, 218, 138, 166, 217, 227, 199, 60, 66, 13, 158, 79, 196, 41, 88, 99, 111, 96, 140, 200, 62, 154, 13, 97, 59, 139, 148, 30, 195, 178, 215, 231, 42, 166, 198, 109, 192, 244, 56, 119, 87, 69, 56, 214, 106, 106, 101, 64, 59, 135, 20, 117, 30, 254, 165, 152, 206, 25, 47, 182, 253, 6, 138, 131, 44, 40, 17, 55, 2, 218, 5, 174, 37, 5, 35, 111, 125, 202, 202, 38, 231, 132, 135, 168, 236, 78, 190, 69, 49, 66, 185, 90, 38, 199, 167, 101, 10, 250, 121, 112, 94, 193, 90, 85, 28, 238, 242, 138, 96, 7, 23, 252, 209, 193, 188, 192, 42, 246, 88, 200, 197, 25, 210, 62, 20, 10, 109, 25, 68, 73, 122, 96, 245, 66, 55, 116, 149, 130, 103, 132, 83, 211, 118, 33, 49, 165, 67, 226, 149, 189, 117, 105, 125, 250, 47, 246, 156, 1, 14, 64, 247, 114, 249, 213, 112, 156, 68, 179, 184, 212, 242, 78, 8, 34, 32, 105, 10, 90, 97, 28, 173, 31, 30, 170, 10, 129, 235, 41, 192, 122, 20, 16, 3, 124, 152, 96, 9, 239, 119, 125, 74, 7, 19, 49, 103, 26, 106, 133, 49, 133, 62, 20, 73, 174, 192, 183, 108, 237, 149, 68, 70, 169, 106, 122, 9, 192, 19, 222, 16, 157, 25, 64, 166, 191, 8, 25, 222, 211, 152, 253, 135, 174, 239, 164, 131, 245, 96, 235, 222, 223, 69, 74, 114, 14, 249, 180, 150, 155, 204, 74, 49, 129, 135, 123, 61, 208, 230, 249, 212, 208, 68, 24, 160, 27, 65, 115, 77, 185, 11, 231, 30, 213, 224, 210, 36, 35, 54, 143, 97, 80, 132, 94, 160, 13, 245, 106, 60, 238, 93, 23, 224, 249, 154, 5, 84, 104, 96, 62, 54, 126, 194, 210, 23, 102, 221, 226, 216, 249, 32, 91, 105, 40, 16, 79, 179, 109, 26, 227, 186, 247, 46, 96, 220, 156, 198, 228, 175, 94, 191, 143, 222, 76, 105, 16, 74, 213, 45, 52, 38, 163, 158, 72, 50, 165, 98, 100, 65, 210, 170, 76, 185, 46, 202, 57, 133, 113, 246, 92, 247, 217, 101, 62, 218, 40, 213, 177, 120, 148, 153, 82, 123, 125, 100, 89, 47, 45, 197, 80, 31, 82, 5, 219, 152, 215, 100, 73, 80, 44, 76, 96, 5, 236, 22, 80, 61, 52, 149, 181, 59, 89, 15, 96, 114, 26, 207, 217, 123, 150, 137, 116, 187, 80, 165, 136, 125, 245, 141, 171, 247, 133, 224, 22, 39, 169, 248, 114, 129, 112, 248, 235, 125, 43, 129, 19, 26, 206, 65, 122, 204, 12, 181, 129, 65, 239, 231, 6, 234, 2, 164, 165, 181, 22, 234, 2, 226>>}}.
{{encoded, "MRhy5LBr6oXfTvCwsXfSwaerqEdCzs43P1mnDMLuGbRYsVHciQhyeThWj5ynrkdqfojagacRppqGaTuG9Kkn2LXo6ahsahfPBtmJZYqjgcTnbDN4L89YD9w7aoTqpiCVDa46HeyaxhKA42QSPX4BBikwszAkqxA12uhTkZbbUBNuCcx1LtTndxXNnMRcVbLuvauXKTH5nbX3u73KMWxkbx5oTCjiHXd7fxagLx1pBti5Fzu84V42bQVqPcPFqA6DUTHD6xgsQW5oxDPYyaa7E5D3gyU7YBbYxceGoch8NWpHzkEcFkp6qh3AdACCduTJRntDfyBMwApND6kYbXfjFqUDrBMJiuC8FfKTQ3uinuNwC3V2ShSMZXyVpcQP9vJ2QZ9ZgGtvKpFs5vCqNEbkbnmGSyRqXXzuf2EU7s1vnYDWJMVJd5fii8XV1Su5kN2BhPXsx9ZzoxJzskqxZvEQ9FEuxsjYFDU5QiVj7JUP5X6sMKg9mgQ2f4TgtBjXPHPg8s3rEXhi97iC5Uy6c2LyDUhjCmdLwGYN1AeQ142A3sw596nLMxFceKCBEnVpxNKELV9QkuNZkLVSvN63eCiFTHfLFm1ATvfoUQ5WP9neyLvUNciPd4bd8TdzFvWnUAsf3jB5USqL29pJ4x5Jn8168KXB3421"},
{decoded, <<197, 126, 42, 137, 89, 34, 133, 116, 154, 127, 209, 44, 215, 156, 246, 37, 85, 11, 244, 125, 196, 72, 112, 145, 65, 253, 203, 116, 143, 182, 216, 244, 96, 163, 91, 88, 178, 30, 102, 100, 101, 92, 179, 138, 22, 119, 1, 9, 135, 250, 237, 10, 109, 222, 18, 9, 203, 25, 136, 187, 235, 234, 190, 26, 224, 207, 98, 62, 248, 191, 245, 22, 36, 46, 183, 129, 3, 214, 52, 169, 100, 199, 59, 203, 26, 186, 181, 82, 69, 42, 59, 167, 16, 106, 79, 183, 169, 110, 223, 170, 91, 227, 160, 210, 163, 192, 188, 254, 209, 254, 198, 44, 107, 200, 62, 252, 97, 125, 219, 246, 221, 36, 46, 222, 205, 206, 48, 100, 98, 104, 91, 76, 19, 183, 160, 68, 60, 184, 145, 98, 231, 202, 206, 57, 234, 126, 174, 84, 209, 176, 107, 213, 121, 177, 217, 248, 38, 35, 45, 207, 191, 126, 174, 235, 23, 78, 242, 173, 235, 162, 21, 208, 116, 117, 150, 199, 180, 98, 182, 145, 215, 163, 69, 241, 85, 130, 121, 135, 43, 115, 247, 62, 240, 23, 209, 161, 121, 97, 118, 52, 242, 11, 213, 160, 96, 24, 8, 52, 219, 226, 127, 42, 147, 207, 0, 255, 189, 0, 43, 12, 98, 24, 72, 55, 100, 160, 3, 71, 193, 207, 178, 116, 181, 214, 32, 59, 191, 26, 127, 69, 191, 195, 9, 251, 38, 61, 39, 61, 58, 177, 30, 255, 83, 175, 93, 29, 152, 217, 102, 228, 67, 64, 196, 219, 104, 201, 37, 212, 101, 197, 6, 24, 144, 150, 231, 49, 217, 119, 140, 161, 208, 209, 221, 25, 211, 50, 75, 36, 219, 58, 178, 202, 119, 180, 159, 29, 216, 26, 152, 118, 155, 124, 235, 213, 186, 23, 219, 35, 215, 47, 172, 186, 158, 111, 85, 184, 143, 129, 216, 35, 125, 173, 238, 163, 179, 113, 197, 76, 38, 34, 94, 91, 210, 7, 65, 239, 29, 99, 114, 90, 143, 104, 126, 204, 217, 143, 29, 225, 91, 162, 31, 12, 47, 80, 39, 160, 100, 146, 131, 171, 200, 84, 20, 166, 172, 106, 155, 146, 117, 205, 252, 140, 0, 243, 151, 36, 221, 92, 195, 45, 235, 4, 203, 67, 150, 134, 202, 27, 58, 121, 5, 11, 138, 42, 254, 158, 223, 161, 135, 107, 97, 202, 32, 198, 101, 176, 155, 177, 87, 99, 69, 27, 63, 194, 170, 21, 187, 17, 158, 155, 70, 239, 241, 239, 239, 110, 91, 35, 102, 208, 1, 119, 107, 79, 144, 114, 29, 144, 231, 196, 224, 58, 253, 40, 56, 229, 66, 24, 12, 45, 36, 239, 199, 250, 95, 55, 138, 127, 78, 96, 103, 198, 159, 249, 235, 118, 64, 49, 194, 105, 195, 175, 8, 211, 206, 168, 164, 200, 76, 203, 165, 198, 223, 142, 139, 25, 97, 250, 86>>}}.
{{encoded, "FdgatVKh62AMpTy9LZAUwXU63m2cWUPZuAgfY7iNEgYYo2Vkevv6biaT6rQraJWfxLbiTBLEkrA6QpvYCTScARPmV6qTroS5WAod6e3FaJrFa6dhwS3zRucUe98ZCms63mQSgfoqLZAx9NtJxbVXqNdMwjVnz4tqp7iHguXZG2QfuBmk7WisyK3xASXDU7GUrEtV1UU7ZUbdjGjehG2CNWwiDw68cXV2uJ6Tuu8fnPG8EsGuxnDQceZMPVSHLmgJMRDTTWVjzLQ7S1LG9xCx7hsKDFQyUf6TF2nkU1HEJkFFfJvSgbkXjFVdXM1zkWYFT91bQM8vVxhGigD3M668UMFmo3JhAqPKnxAJ6uQE4eynWFYerD2foFfWY7dMTSaMN1KLHvxFw4Hh5L5w6nQ5UXWFtVjK5HsjCsPrtLk4xPptCiFVBYD2CAeBisf"},
{decoded, <<2, 36, 64, 245, 93, 186, 241, 84, 79, 89, 42, 214, 72, 13, 196, 191, 49, 121, 45, 108, 78, 235, 99, 234, 54, 171, 132, 192, 143, 87, 247, 48, 196, 247, 55, 120, 255, 180, 160, 205, 18, 103, 110, 159, 86, 249, 68, 178, 90, 149, 88, 96, 56, 25, 22, 126, 47, 68, 209, 25, 129, 155, 173, 172, 214, 199, 2, 111, 199, 172, 78, 125, 210, 147, 80, 43, 35, 164, 252, 11, 198, 215, 220, 53, 184, 65, 45, 201, 206, 220, 71, 149, 52, 19, 97, 140, 211, 127, 20, 211, 240, 109, 221, 194, 174, 108, 179, 170, 226, 20, 25, 170, 209, 27, 21, 161, 252, 65, 89, 182, 206, 203, 236, 92, 249, 243, 146, 179, 228, 23, 204, 178, 233, 140, 137, 45, 86, 255, 71, 18, 173, 67, 39, 163, 237, 53, 127, 224, 105, 148, 100, 255, 19, 52, 25, 100, 24, 75, 252, 205, 101, 19, 89, 183, 229, 136, 75, 254, 79, 210, 203, 160, 201, 192, 40, 171, 132, 119, 163, 187, 110, 187, 111, 144, 196, 176, 170, 130, 238, 126, 188, 178, 235, 12, 29, 131, 234, 4, 166, 240, 193, 115, 59, 110, 227, 201, 46, 94, 12, 84, 118, 39, 88, 169, 195, 234, 74, 149, 146, 192, 159, 241, 119, 86, 214, 120, 10, 170, 161, 26, 109, 245, 16, 209, 90, 146, 5, 107, 182, 117, 23, 24, 60, 199, 160, 137, 18, 188, 162, 118, 204, 51, 94, 224, 118, 110, 167, 170, 227, 12, 116, 108, 60, 211, 32, 109, 72, 44, 23, 87, 242, 245, 27, 23, 154, 245, 38, 214, 116, 16, 221, 50, 123, 103, 246, 27, 51, 200, 113, 20, 0, 229, 192, 56, 59, 140, 216, 7, 252, 183, 179, 255, 141, 200, 10, 64, 225, 6, 149, 135, 162, 69, 170, 241, 211, 245, 67, 181, 45, 83, 211, 160, 189, 250, 254>>}}.
{{encoded, "ofqqYqmPCgPESAmpFTEUYX3yEUGn6itbEBC9TVmW6iuPRK6vxXe2bSm7NC7Fy3Zp7NbcMK3M64aWyL1pj1opewYQvoUzqMkEKDb8vv76Kh2c8C5WSAVehhVs4pZeWa5kwERK9sVGM7rPpN9FoCnfY4wtkNLauYmreZM79AYPuVXJe7gfiK8Shto2VHijS9wn76zbjDhRdhmRTb6CQTXyaB5tDMFSgrNAtJmBmiDxvnpsqJ5Pzt5RNUZKLcsprtTQBabbSUDxb3mvMWPAWM5GRxecscVLnLXBX7iLCwVUU2JFvhStAGb5dUFBNDm2LgD51qySQZh6p6mJ3T4YKqyNNwkqWNpLTcSLLZWhTKRkLZgMai5AeFxraQh5kTKMm6M8DMW39N3bdYgt"},
{decoded, <<174, 122, 139, 151, 73, 97, 167, 153, 66, 15, 92, 156, 137, 205, 163, 252, 120, 154, 79, 161, 110, 7, 55, 89, 114, 136, 24, 37, 184, 8, 136, 102, 57, 208, 10, 181, 31, 136, 85, 176, 73, 153, 65, 204, 172, 157, 10, 98, 205, 25, 62, 228, 73, 100, 115, 50, 33, 77, 155, 242, 36, 190, 112, 110, 106, 49, 36, 245, 192, 219, 90, 22, 205, 244, 154, 106, 223, 17, 92, 28, 195, 153, 168, 30, 53, 204, 24, 40, 29, 211, 70, 80, 81, 12, 12, 27, 171, 190, 39, 0, 226, 130, 22, 215, 223, 122, 107, 152, 168, 5, 222, 67, 106, 39, 68, 76, 58, 156, 150, 173, 52, 144, 130, 117, 143, 61, 34, 224, 48, 130, 249, 99, 1, 38, 72, 207, 214, 126, 236, 181, 172, 81, 128, 122, 34, 1, 110, 171, 64, 137, 168, 62, 240, 14, 134, 167, 184, 66, 100, 8, 44, 193, 224, 222, 215, 26, 225, 102, 131, 183, 142, 55, 1, 145, 224, 123, 4, 90, 205, 252, 132, 118, 229, 225, 36, 108, 105, 203, 59, 94, 186, 121, 15, 226, 97, 80, 169, 83, 43, 68, 126, 254, 167, 193, 16, 213, 145, 20, 58, 143, 222, 50, 99, 242, 100, 214, 240, 112, 83, 120, 159, 148, 188, 234, 24, 42, 181, 116, 163, 36, 164, 239, 191, 181, 20, 77, 105, 35, 121, 19, 35, 22, 5, 14, 199, 134, 160, 3, 74, 6, 17, 158, 246, 93, 138, 198, 65, 178, 225, 186, 110, 236, 214, 138, 60, 98, 55, 3, 242, 154, 133, 33, 35, 18, 246, 88, 112, 133, 73, 24, 224, 52, 53, 235, 174, 238, 199, 37, 160, 165>>}}.
{{encoded, "8iji7tGzLp52zgs2W8JvZX82ga1RKXbG9evntP2H3xxzsPueru8HJC5ZQqfNnbBDWGNFUGFuoJWuKcRMTvU1pf1M5fTiJLJ8U618opXCWPEZiR9UR7ZEmbXzRKETpnyXEYfKEaZk14mBK1iGX4ivunjoAUmfwhMpJK1tCG43QJwHEF8r3KsqwpovNiKUrtXvhTenuBnPjjcXEQZxdBL3DxfbfBtZ1TJSz23aXH1JAkgX6MGu1CGivMVLm1vKUuRHCxakg1UkuSVu4To8dLU2VY4EFhMwq9KNuwamG9jsYyxwdHcNpyWHPVtGzYPe7ULqeCFmHc6YPrFQkvJCXFa7XphfjQDgK3M8mrCPUiiGD"},
{decoded, <<226, 60, 88, 48, 137, 135, 61, 98, 57, 231, 50, 111, 37, 24, 144, 111, 163, 146, 92, 223, 116, 105, 110, 105, 236, 165, 163, 62, 0, 119, 246, 227, 250, 219, 101, 90, 92, 169, 116, 156, 115, 83, 77, 89, 169, 244, 222, 10, 83, 36, 247, 127, 40, 242, 21, 60, 216, 61, 173, 218, 12, 71, 3, 255, 126, 246, 230, 17, 1, 225, 85, 219, 205, 7, 130, 41, 159, 152, 27, 190, 16, 24, 31, 78, 17, 143, 42, 76, 223, 123, 165, 167, 119, 242, 142, 103, 248, 204, 142, 184, 154, 238, 66, 43, 90, 100, 64, 221, 48, 31, 87, 166, 210, 108, 67, 195, 179, 190, 21, 142, 146, 115, 61, 224, 116, 12, 209, 34, 136, 212, 154, 187, 41, 194, 197, 253, 150, 254, 97, 120, 22, 149, 243, 76, 42, 106, 194, 242, 92, 254, 81, 21, 113, 134, 3, 65, 157, 97, 94, 198, 236, 10, 59, 225, 60, 237, 87, 12, 65, 136, 185, 124, 95, 159, 167, 20, 51, 122, 229, 218, 75, 89, 201, 22, 159, 216, 64, 238, 168, 218, 48, 158, 58, 116, 16, 85, 61, 169, 251, 168, 45, 133, 97, 154, 209, 71, 15, 162, 188, 125, 87, 46, 171, 20, 179, 128, 119, 241, 182, 162, 90, 16, 166, 100, 115, 252, 75, 42, 105, 169, 86, 189, 48, 232, 157, 111, 28, 35, 34, 68, 230, 253, 125, 22, 186, 174, 143, 226, 112, 132, 174, 30, 59, 114, 1, 225, 19, 24, 44, 137, 235, 92, 116, 78>>}}.
{{encoded, "27WH2ex5JHGRfmzbuNTmn1GFbXrBHTthzidysY7gUzrDYrj4ruUBYKQKp94ps"},
{decoded, <<198, 100, 112, 157, 219, 125, 151, 28, 153, 230, 78, 69, 255, 176, 155, 89, 221, 53, 201, 4, 83, 51, 133, 60, 93, 253, 253, 157, 54, 115, 108, 209, 228, 154, 28, 5, 136, 30, 251, 90, 237, 126, 154, 116>>}}.
{{encoded, "3kkNAYNP7PNBpWUchs9qcEsMvqApqLYHqUFNUeqeUooqw31sH4DGr4GAM9hEVU469gd2VMPSMsMgkQtDT5pfufA4ZfC8yYz9k9UsnAYw466tYGrZLpuu7ihcxrVGWVqdYLMrLiacwyszN3term9JopnzuQLVBmKYGnkeR6cpzj88yVi3YpM4NbKqHPFvadHeqp1N7fwe4G9YDNAR8YWaxxER5nXWfb5GC2nGwqYrWwtMyZhcAKkgFdmDqwS7DBBz2kmyGUjyLiPDneSZaCNa6TsCoHo9R2V9A19HdMxwoDfjCh1gxy28oZLSVk6jJnkAF35oVaBnBtKSH1dFaGh7Wh4fkSivjCmFtnYj6jSLfXR6XYm53NVm8kDvMLHvLBH4vMnSpkWkPNXqJf6o72bQsrH9MewhG7NahB3BTzGMRRwxtS7XNGKgh827wTjfUdTVCufx4TVS7D8chch3EHTUNAovdTEJmv2NPAFLY6c6jnf3YBz3wwbj8dREkkMBpHHuR7ixSAhJZP2QviFQeWHk1CMkJb4XTJCvRnM5muMYujaY4bhZeSwhmGHftF7LUDPYpyYQ9suDBtCv5MJSyHZAPnNJAce6sjn7Ddhq5n5KmWYiNyZEiceWicWGYTCuPs2D6c21Kug5DMKfRqddeCvAjYuEvUJCbP4VmM2QJeqSv5JGtYvEGR9cszQ3NQoz2SHb67xhDAoHf2UMrKHQNSEbJr1V36KpXsnEv66bKhwo2Cuw9VcD4r7xoTxEt84gpjz1bfBXncovZVdpcZwp5FXoL5cCJpnsvWo1CDeM1fVbBqWVaYVANAMo7EgDSXYW8LDBGaCWjRPy3fvnZ1KAywoNxq83Xvidc7byXej8BhhWnM2gXiz6VYuS9FUU4Rtv77fjtnua1QYkwDthD2Xa7kxdsiJCeD9U7h2HvACK9ULU3HvhG83XKDxmphbirhst2Nf1gNqTokYeReKDRPb76t2hzeuy6qTEuZmkTobrLRJXPJqncWCyd49qSfRBj1XPz7Sr3xPkFWMcHEhWGiphGbM8bdXD6zkN833y2Y6qagjMQik3u9WFBp2CesSgkfP9mq18yoiDGXuzZD36nepigExims9HfWqMJCRYVn3CNkRikiUXAZd59U8MYV12aSL1Sy7LHumemfwrr2m1SHGRHPtM2hdPJct5LovfHdJaDwZuCTTQtXswd76gGGdxL9qURnw1T5U1c3CiTpkX8eYyZgvdd1YtLR8tBUPqstH3GP5eFiBWZUYfn65DGa6HTgruYWtKrxf4EAV1A1iGXYQQBptSGxtDw3vzrynPdPPNBSzHtuivWBMn5PMv6"},
{decoded, <<19, 152, 30, 59, 224, 136, 18, 61, 104, 225, 19, 198, 21, 157, 176, 97, 64, 133, 65, 10, 97, 236, 65, 150, 18, 61, 66, 177, 173, 14, 76, 42, 145, 249, 250, 101, 173, 44, 167, 2, 115, 91, 167, 109, 165, 187, 38, 44, 156, 103, 33, 167, 104, 218, 110, 184, 182, 148, 60, 51, 160, 104, 232, 251, 219, 70, 195, 205, 15, 182, 149, 211, 64, 3, 148, 76, 225, 54, 145, 43, 232, 226, 123, 142, 77, 170, 93, 28, 183, 170, 226, 180, 23, 99, 174, 144, 122, 23, 161, 206, 106, 153, 216, 90, 85, 221, 35, 235, 146, 13, 222, 38, 99, 146, 216, 118, 167, 172, 221, 139, 250, 245, 134, 126, 192, 172, 132, 180, 119, 35, 99, 1, 91, 136, 100, 62, 105, 99, 94, 242, 96, 86, 197, 22, 108, 180, 126, 74, 13, 144, 235, 96, 80, 246, 86, 161, 243, 61, 219, 119, 90, 154, 43, 17, 108, 10, 247, 89, 78, 17, 186, 93, 81, 80, 235, 194, 2, 218, 2, 112, 38, 129, 141, 63, 62, 32, 251, 219, 72, 196, 43, 147, 32, 137, 225, 150, 235, 46, 160, 192, 142, 16, 235, 146, 210, 23, 51, 29, 156, 45, 210, 81, 229, 10, 168, 238, 243, 95, 28, 125, 40, 52, 52, 139, 101, 142, 191, 14, 86, 81, 101, 177, 62, 79, 143, 17, 251, 57, 226, 104, 133, 87, 182, 39, 150, 82, 76, 110, 10, 83, 106, 0, 154, 140, 255, 130, 230, 102, 235, 207, 141, 103, 114, 50, 72, 244, 65, 164, 35, 185, 152, 124, 188, 248, 247, 86, 253, 138, 149, 166, 232, 118, 227, 181, 185, 46, 8, 174, 61, 180, 163, 253, 193, 170, 213, 8, 243, 73, 187, 249, 150, 125, 171, 26, 0, 226, 112, 253, 207, 3, 62, 150, 112, 53, 18, 3, 78, 115, 188, 56, 210, 150, 87, 96, 83, 2, 27, 91, 252, 62, 32, 143, 181, 152, 28, 177, 218, 29, 47, 27, 148, 119, 172, 41, 211, 141, 204, 151, 175, 101, 194, 51, 139, 76, 106, 6, 18, 59, 8, 82, 224, 186, 133, 194, 163, 105, 45, 27, 225, 82, 113, 210, 130, 186, 169, 121, 18, 210, 90, 107, 177, 254, 74, 245, 58, 166, 12, 157, 85, 36, 26, 219, 85, 99, 155, 82, 245, 105, 153, 36, 40, 208, 219, 91, 152, 62, 70, 184, 112, 151, 98, 155, 149, 169, 225, 97, 203, 109, 111, 208, 212, 147, 190, 96, 245, 82, 38, 175, 135, 245, 195, 179, 52, 119, 72, 247, 32, 75, 87, 136, 41, 155, 75, 213, 122, 66, 92, 176, 112, 68, 192, 15, 72, 255, 57, 73, 36, 81, 178, 42, 255, 71, 146, 162, 12, 185, 35, 141, 162, 43, 98, 120, 67, 101, 160, 56, 107, 219, 195, 247, 56, 226, 241, 187, 164, 19, 249, 30, 160, 159, 214, 209, 180, 10, 144, 163, 61, 227, 199, 35, 142, 239, 93, 175, 50, 10, 24, 2, 99, 48, 35, 140, 226, 47, 217, 125, 102, 45, 142, 2, 37, 253, 107, 69, 19, 7, 214, 203, 35, 238, 228, 170, 118, 63, 115, 69, 185, 22, 32, 92, 3, 100, 187, 224, 187, 222, 115, 92, 99, 178, 201, 40, 155, 179, 231, 41, 246, 177, 7, 233, 100, 98, 54, 239, 53, 129, 98, 16, 160, 64, 157, 198, 202, 91, 243, 51, 14, 154, 233, 196, 199, 110, 243, 139, 65, 49, 114, 163, 120, 104, 108, 135, 168, 22, 107, 222, 209, 94, 244, 221, 199, 253, 140, 189, 140, 240, 150, 41, 21, 7, 77, 164, 78, 27, 154, 119, 221, 108, 244, 193, 134, 8, 217, 152, 103, 36, 239, 42, 167, 110, 79, 138, 198, 187, 120, 239, 36, 219, 50, 46, 25, 116, 85, 125, 53, 27, 60, 216, 204, 192, 169, 13, 46, 144, 185, 225, 78, 78, 67, 138, 87, 224, 113, 105, 57, 244, 115, 174, 125, 57, 13, 1, 33, 80, 251, 140, 255, 189, 27, 48, 181, 107, 97, 252, 170, 132, 220, 225, 111, 64, 14, 115, 176, 130, 253, 118, 9, 147, 45, 2, 71, 110, 92, 25, 255, 29, 63, 160, 130, 171, 229, 89, 61, 105, 221, 144, 201, 20, 231, 97, 68, 61, 157, 31, 19, 15, 179, 79, 123, 79, 16, 14, 112, 104, 207, 139, 61, 56, 169, 247, 5, 34, 49, 119, 116, 31, 217, 177, 126, 58, 33, 105, 93, 160, 122, 253, 71, 118, 250, 164, 139, 173, 159, 155, 228, 9, 17, 85, 135, 253, 127, 68, 38, 208, 250, 11, 32, 243, 145, 202, 29, 234, 223, 81, 184, 165, 210, 201, 130, 122, 2, 118, 187, 24, 206, 32, 143, 59, 80, 167, 150, 255, 146, 163, 215, 50, 245, 62, 189, 116, 171, 96, 142, 134, 49, 222, 95, 177, 173, 247, 172, 118, 125, 49, 190, 214, 126, 47, 59, 116, 90, 198, 0, 89, 191, 91, 34, 63, 153, 162, 14, 155, 146, 211, 238, 151, 20, 162, 160, 213, 254, 189, 109, 149, 82, 117, 60, 230, 56, 14, 139, 49, 169, 76, 4, 247, 164, 170, 249, 182, 195, 158, 110, 90, 62, 132, 13, 17, 46, 89, 226, 255, 61, 122, 102, 246, 57, 43, 61, 98, 161, 167, 21, 12, 23, 107, 100, 72, 180, 241, 54, 116, 238, 8, 174, 135, 248, 168, 4, 143, 240, 195, 199, 72, 254, 151, 2, 227, 12, 71, 224, 41, 94, 124, 34, 250, 140, 241, 203, 17, 33, 214, 215, 21, 144, 64, 107, 204, 249, 169, 56, 177, 165, 114, 150, 50, 233, 224, 123, 134, 204, 129, 187, 88, 143, 144, 201, 228, 244, 148, 80, 46, 9, 87, 97, 15, 26, 40, 226, 30, 7, 203, 117, 215, 44, 167>>}}.
{{encoded, "3TYeXb4g4zb2fKWCuYe29EUpvtDFTbfsJXLmkj48cPHwhhBg486pMeif1HHZo8GzbeHpbRhUXRCZ55p3k7ZQmLWYfyMHHik3jZ2E8BsB6aDGsFipx5251cXM6csXPAfpmLwRu3xvTgHCtAWL4x9QnCxLXzj9qeRJPJFVRUEyXHPwscdKhr9LrFDQnnhNpBruh55APNCWio93PnxLFiNSpkW1a4Xc9L8FyMt9XHpggiBQxG89fkivaEGF2ZJJMDXc"},
{decoded, <<135, 135, 78, 50, 215, 97, 111, 248, 189, 23, 123, 39, 153, 184, 195, 85, 245, 72, 160, 26, 71, 108, 155, 117, 128, 11, 156, 181, 133, 3, 76, 125, 118, 49, 193, 182, 10, 49, 38, 21, 10, 84, 190, 81, 235, 107, 74, 186, 154, 96, 160, 45, 39, 255, 82, 163, 222, 178, 39, 99, 195, 17, 124, 60, 108, 120, 246, 49, 36, 116, 131, 65, 63, 38, 31, 92, 86, 93, 141, 200, 254, 93, 90, 56, 186, 238, 119, 127, 207, 228, 85, 192, 60, 241, 225, 182, 41, 211, 24, 80, 71, 189, 240, 184, 137, 167, 113, 121, 121, 214, 101, 143, 56, 72, 81, 175, 215, 19, 230, 156, 217, 141, 191, 94, 178, 207, 46, 118, 22, 12, 91, 163, 129, 120, 17, 220, 252, 49, 18, 238, 122, 250, 41, 62, 152, 203, 86, 205, 17, 15, 224, 31, 199, 4, 134, 233, 207, 12, 59, 24, 24, 121, 64, 66, 183, 213, 242, 166, 41, 118, 52, 73, 10, 118, 188, 80, 158, 40, 106, 219, 222, 47, 14, 52, 209, 207, 239>>}}.
{{encoded, "2Bd6FP99auobcqXPeJDdMGFsXG4VY76BAvCoLDAZtgHKtxBiHiDpFZtpBDN11rn8CsMqN3npAC6ayegosP36vGznwPQ7AGWRm5xAGzuYLR5ofpKjXZ4YLPYqYDmMRzBQGYkbPCXRbU6d45Bayz8Wbn7kuMZwgtfAshFsD2rQEsdazUwqAP2JGp9NVMoMJHxXthYAct8LzLBatzsWnj91Mix1bzasV7gHpgaTatDHyHheZxEfCfF8nSZwej89uMWuQ4Sfip9pVE7wqzbbqZdgnUCzBmS1BpFWLjbwdYL6HEX6GMFJEUU2KGjZNbkTLdPptyeuzPtXnqS1zX4rkTTXCmzzFbahcgFSJmLDcXKPVp7CtzqjHnDHpaao8daXMa3QDV1GJyYqMBKkwVxcD4LUVbmErJpRVnV6jAWUu3KpTg5vVJtRFRiV5u76WHiCF1xaXSCHHKxJ9P83qupSqxZ5PFpGMvCLLZsZ"},
{decoded, <<74, 79, 212, 193, 138, 179, 54, 74, 185, 6, 254, 195, 244, 57, 206, 39, 176, 133, 45, 156, 190, 248, 64, 125, 44, 48, 113, 111, 132, 0, 207, 211, 26, 202, 103, 244, 19, 201, 3, 74, 199, 188, 14, 182, 33, 101, 103, 177, 191, 170, 129, 164, 59, 170, 160, 152, 140, 201, 206, 225, 217, 251, 82, 3, 196, 132, 1, 88, 48, 111, 45, 74, 90, 76, 39, 17, 158, 253, 171, 126, 37, 218, 160, 103, 254, 134, 62, 224, 86, 191, 132, 10, 241, 28, 97, 194, 92, 41, 184, 62, 241, 212, 212, 142, 2, 195, 250, 167, 136, 228, 71, 49, 46, 190, 1, 228, 114, 250, 166, 154, 162, 255, 87, 96, 142, 105, 2, 170, 3, 161, 190, 29, 81, 44, 62, 217, 197, 78, 253, 228, 151, 40, 160, 185, 200, 229, 187, 105, 8, 3, 95, 181, 30, 148, 101, 94, 72, 97, 218, 50, 65, 164, 131, 48, 120, 236, 76, 34, 113, 169, 163, 243, 230, 164, 0, 9, 169, 179, 38, 0, 172, 57, 149, 71, 115, 103, 109, 11, 123, 87, 108, 180, 68, 88, 227, 0, 100, 177, 158, 211, 127, 34, 142, 184, 115, 243, 245, 75, 254, 202, 236, 34, 230, 16, 207, 212, 194, 198, 245, 194, 213, 93, 142, 243, 141, 158, 232, 35, 74, 105, 225, 155, 137, 83, 5, 222, 238, 118, 147, 170, 217, 254, 85, 197, 128, 58, 170, 102, 203, 9, 243, 166, 104, 87, 114, 150, 141, 209, 237, 112, 224, 213, 242, 21, 108, 68, 143, 79, 152, 105, 211, 5, 4, 163, 220, 250, 166, 221, 239, 113, 102, 138, 70, 188, 99, 49, 207, 229, 101, 171, 68, 14, 247, 235, 17, 116, 86, 108, 185, 169, 203, 232, 123, 45, 214, 0, 100, 14, 96, 122, 98, 42, 76, 196, 124, 217, 50, 194, 235, 55, 111, 244, 102, 129, 159, 232, 65, 32, 151, 140, 68, 40, 100, 48, 4, 20, 57, 13, 13, 220, 76, 87, 89, 213, 171, 115, 191, 199, 34, 225, 60>>}}.
{{encoded, "SvYZgXifLgJwg4EZxHtpEGMoFFxJ7rwvgjNjj3R4AGEBbBDpxhaT5f4G9iFTN9iQpQDN1hhLtRcr1puvca9DjHvy7aroEptQt26vkXNf7bLrN27qZWJo8a9GU5y6vr5gzvdJL8PDvS8mjeMQrjEZUqum1z1CLZj7HNhR5ra6sJ3cZMB2wQFP84BN3K6weagN4Fg7Hg4b9akiUtx4NTP16MbHAWf5JhMyd1ABrVXYojp19X4VEwJ4ee4ZL9iiswfXM6tRSf3XMz2KcyQvFJs"},
{decoded, <<3, 112, 250, 136, 59, 193, 224, 80, 247, 117, 42, 14, 132, 37, 220, 81, 5, 145, 23, 23, 108, 165, 108, 95, 39, 194, 213, 195, 95, 14, 254, 232, 175, 125, 250, 206, 211, 35, 129, 222, 35, 119, 243, 149, 245, 121, 252, 161, 196, 217, 167, 32, 207, 167, 216, 17, 70, 64, 213, 161, 107, 245, 108, 154, 112, 130, 226, 92, 248, 5, 154, 9, 134, 216, 48, 44, 99, 25, 147, 198, 122, 99, 147, 250, 115, 155, 124, 91, 131, 176, 151, 144, 118, 129, 125, 111, 202, 13, 242, 132, 93, 59, 104, 148, 114, 143, 184, 109, 202, 176, 13, 209, 173, 151, 212, 17, 92, 174, 97, 198, 207, 64, 93, 161, 250, 189, 64, 147, 159, 1, 136, 250, 245, 23, 104, 128, 164, 63, 185, 203, 23, 19, 151, 168, 11, 114, 208, 190, 211, 4, 225, 170, 59, 106, 155, 35, 66, 43, 72, 29, 114, 252, 253, 216, 35, 183, 95, 77, 185, 41, 159, 154, 65, 143, 230, 128, 243, 10, 122, 101, 131, 20, 216, 40, 148, 188, 39, 200, 77, 166, 48, 149, 21, 183, 133, 29, 20, 74, 95, 87, 112, 124>>}}.
{{encoded, "2H9YirGNbadhcmPXifU9qTowvTtBcMBFXeSa3M5CywH1HVP4GBzK7aCRgaGh6mFyeXp8XzXsnbDg7aP2isEYCsdJykCRYZgDr5efehqTn3DQMShY7a1FjSBS5nQVfbjJLMPN2xMUhrATyYNdrMmtrqLGtbAYNJBv1SCC4xiYSo5U2qjg2hrRnr6UR3AgVnkTptbdirTbmC6ub8AwxBCcqESYVnF38TdKuayounHFg5vrAEQgA9h9uzHTbQuDpyoJHRZDLbgXj432HUwfcFBG4djSaoDjL9TB82nUdqA4TnVX1ui9a8mQV6WvkUfVyjVetFTZGs1mHcGfZrrzb2mnwWSQZRLTMLiHXdEWWMzYeeJqEb3d5meijXWDjwN7wZw1pcqzFtyupWzobsWM6CuveMvMQTXn2LdYBpGgBETarhsZhjT8bRUWtcft2aqBED6AZ84VE77fDut8zEiBtzTtfJgb1ast9rxnVCDRkNcyb1zfB9oJMixHZBiFK1J5W2pRGxoNLU31uy1wJTDBfKFLwgsXL9gnPiWnA9fZjbgdwrp287hrtwcorukdiBzpqx9vDq1kKtzNtz8g4qdy5jPR1gpqhtuLxKZ7stp6Qz2pGacQAnZhs8JAZ6D9emHANbsprTFA"},
{decoded, <<131, 62, 206, 30, 108, 78, 57, 12, 114, 108, 109, 83, 154, 57, 199, 82, 205, 216, 181, 204, 251, 8, 141, 252, 109, 191, 205, 55, 196, 202, 175, 35, 70, 48, 80, 218, 113, 121, 62, 75, 183, 210, 96, 175, 92, 226, 98, 164, 218, 31, 181, 83, 227, 124, 71, 250, 57, 170, 9, 177, 204, 181, 119, 134, 139, 18, 7, 221, 182, 237, 200, 107, 202, 209, 235, 41, 152, 159, 17, 173, 233, 48, 29, 37, 53, 137, 84, 142, 90, 172, 240, 158, 22, 144, 154, 36, 217, 228, 179, 25, 43, 36, 229, 219, 166, 164, 201, 189, 120, 42, 13, 93, 18, 2, 102, 252, 110, 188, 78, 33, 160, 218, 100, 161, 102, 52, 31, 15, 82, 152, 153, 145, 17, 91, 24, 163, 227, 161, 224, 48, 164, 25, 175, 14, 41, 76, 92, 59, 196, 194, 206, 231, 205, 211, 97, 11, 104, 221, 116, 179, 90, 0, 55, 90, 125, 185, 192, 250, 63, 88, 149, 195, 155, 163, 212, 78, 157, 154, 254, 105, 182, 105, 137, 167, 68, 208, 154, 3, 176, 14, 108, 248, 114, 35, 146, 85, 27, 114, 65, 52, 83, 118, 116, 165, 223, 25, 186, 62, 226, 248, 76, 25, 227, 186, 14, 55, 141, 18, 77, 193, 33, 191, 170, 127, 158, 235, 234, 27, 236, 98, 167, 17, 31, 108, 0, 109, 197, 1, 35, 112, 36, 10, 84, 3, 71, 136, 227, 205, 83, 101, 69, 94, 8, 88, 246, 46, 20, 12, 56, 122, 33, 11, 181, 17, 242, 240, 151, 121, 199, 73, 144, 239, 86, 137, 146, 7, 138, 65, 230, 69, 142, 38, 47, 247, 253, 81, 242, 110, 128, 189, 245, 6, 168, 43, 178, 110, 185, 213, 33, 98, 151, 196, 22, 191, 251, 132, 210, 255, 199, 125, 239, 142, 157, 212, 243, 138, 27, 89, 185, 73, 192, 139, 177, 100, 159, 39, 192, 178, 81, 128, 41, 137, 174, 232, 198, 195, 163, 167, 213, 86, 173, 20, 50, 52, 31, 2, 142, 214, 8, 120, 205, 74, 158, 13, 50, 142, 29, 21, 232, 196, 121, 148, 182, 140, 123, 68, 144, 44, 171, 95, 88, 254, 141, 251, 166, 19, 208, 245, 239, 162, 251, 51, 209, 97, 7, 250, 212, 85, 17, 117, 49, 237, 71, 25, 209, 203, 228, 24, 226, 239, 90, 218, 165, 84, 56, 245, 20, 190, 39, 191, 227, 214, 132, 91, 198, 143, 146, 230, 117, 46, 194, 245, 59, 204, 73, 216, 250, 242, 163, 9, 92, 160, 77, 107, 32, 62, 194, 251, 225, 122, 22, 194, 118, 111, 83, 102, 190, 12, 192, 118, 36, 164, 87, 158, 54, 199, 128, 228, 148, 64, 156, 216, 219, 151, 86, 250, 200, 189, 133, 11, 181>>}}.
{{encoded, "Sg2g68sHBy8CPdUycNuVBeqziQ1Kc9T9FJT5oYoJJ7VD9Gi2wsYRB4GroHHx9Ve3YCibd9kh1o1m8mcpcRsaHh"},
{decoded, <<97, 183, 238, 163, 50, 205, 105, 250, 198, 195, 186, 248, 195, 72, 164, 52, 196, 60, 20, 168, 146, 162, 5, 13, 106, 167, 131, 197, 75, 112, 48, 242, 29, 26, 172, 75, 202, 181, 197, 161, 183, 35, 222, 133, 232, 163, 175, 215, 186, 97, 37, 149, 48, 91, 125, 179, 215, 144, 179, 245, 133, 6, 220>>}}.
{{encoded, "498VP8o677ShSQ2mAgY5UKp279aQeJvzwdGhkqCJocU7L3UKxbxuLgdVwJbfCcLKmvTpDM3cn2UKpSyN8nE5zWs3Axe6yvjDgto7bXhroGoHHaQkxUKCkGZxSs6pRV19DbT55uK78z3t3KNAf4ZmecN1pDPPYmSgNhCr3uSgNJUCqe232VwTj6t6ZGbiGEof3aJysPL1Up1BakMuduBxpKE2oUwXP2jfeg9fhFs6gnthVJRSp5Y9BgJ1bVEr16zTDU47voxMRsn51uf16RNBERyJSL4xTM5oe7nHTrrP29rkrHiWGMey8PKDvHBi7DncQNtawNyTG4CmwD3YK9LTq1cmy7iPg7zaBnyAjrUZstDse2XkwxQBeKvwF7azPaMS9cYPNC7eqDnqtygN8gitZ9SzwB5ntJkgKU54b9RGdaLt9BYHSAJcsGDh9FCrDohD1LEURNkPGLo6Mqa1CyACYp8UivYen2rpdcvBbtJR74h56nddNJEPAAK4H25RmLvfqbjgmM9mRh6DCFHMYrLE2nRdShbUrmiRfJ85UqozJFeTWPxcNetcN7pEB54WPBwsUuq4JNm4PAywZthrpeD3CaTJWCeepEdDrX9YjZNfL7mUJGZ9rRnMDTSE9oiZJji2PBpqowQoKdybVxSYy9fJVuSJTQXuAHqQD9PVJ61fwAyMWhAv7yMu5yvRduMeeDEUJivvwT5KqcqdBoySg7eheB7zg6BvzphZvN4Ed6Edq6eVFXSs696BtMreM3pEyMWw2xnTLquPxZ9iyGouUMq3LRzv2aV6KbVsDML2nBnDkdGGBEEUJGdEqddSbVG7xj8tK6GCrYYFgW2coxX3vDQMnH21Wic3swg2j8GuGo9a2U88gYjNBqzSEm3"},
{decoded, <<226, 73, 4, 21, 218, 9, 162, 224, 60, 21, 255, 44, 89, 151, 84, 88, 99, 146, 222, 232, 88, 162, 66, 121, 73, 53, 101, 50, 7, 143, 203, 85, 115, 12, 19, 16, 123, 197, 127, 129, 155, 80, 230, 129, 202, 143, 225, 187, 48, 112, 23, 76, 138, 161, 168, 94, 177, 108, 150, 62, 54, 193, 135, 122, 76, 199, 206, 122, 204, 60, 19, 54, 186, 142, 39, 89, 75, 185, 182, 215, 101, 212, 181, 230, 76, 28, 83, 87, 148, 133, 127, 92, 39, 189, 243, 101, 6, 81, 162, 249, 33, 3, 6, 243, 88, 41, 82, 174, 98, 222, 176, 151, 254, 137, 176, 114, 6, 40, 50, 229, 235, 172, 62, 242, 244, 156, 219, 134, 76, 187, 200, 220, 111, 20, 160, 192, 49, 4, 68, 134, 33, 130, 211, 233, 88, 73, 168, 199, 5, 83, 133, 70, 150, 245, 40, 83, 179, 199, 162, 147, 103, 3, 16, 255, 40, 253, 132, 175, 102, 113, 86, 130, 77, 127, 80, 89, 125, 235, 85, 169, 214, 69, 91, 244, 242, 122, 217, 87, 123, 55, 80, 57, 171, 89, 16, 130, 128, 48, 6, 58, 181, 211, 11, 131, 202, 55, 238, 146, 40, 101, 68, 95, 16, 142, 185, 41, 42, 129, 241, 206, 106, 222, 43, 200, 110, 128, 110, 133, 59, 105, 97, 184, 198, 35, 236, 208, 105, 202, 76, 248, 229, 94, 66, 110, 50, 184, 49, 94, 68, 60, 4, 94, 161, 94, 168, 22, 26, 157, 11, 122, 230, 167, 52, 23, 161, 138, 99, 1, 37, 89, 221, 236, 63, 171, 13, 25, 54, 28, 158, 124, 146, 211, 238, 0, 98, 149, 20, 186, 44, 128, 164, 104, 176, 185, 102, 224, 150, 170, 111, 16, 143, 82, 82, 106, 93, 231, 28, 251, 214, 76, 108, 56, 193, 121, 51, 121, 66, 37, 183, 140, 37, 242, 35, 19, 153, 243, 186, 238, 51, 233, 243, 97, 200, 222, 35, 224, 66, 60, 82, 241, 175, 218, 155, 15, 211, 250, 174, 180, 111, 196, 53, 83, 34, 58, 213, 122, 82, 44, 117, 76, 10, 9, 220, 187, 3, 188, 207, 72, 35, 112, 111, 20, 95, 203, 238, 146, 3, 202, 236, 170, 45, 162, 162, 55, 158, 91, 176, 195, 58, 161, 120, 90, 186, 38, 206, 228, 241, 181, 136, 50, 172, 99, 11, 163, 7, 163, 234, 25, 169, 65, 66, 142, 127, 114, 24, 91, 193, 69, 71, 212, 228, 119, 103, 209, 15, 254, 226, 137, 199, 243, 59, 134, 180, 240, 19, 45, 57, 254, 67, 165, 181, 133, 112, 255, 97, 100, 193, 243, 3, 160, 215, 78, 190, 169, 5, 250, 113, 226, 137, 80, 35, 33, 174, 122, 149, 155, 25, 169, 237, 148, 82, 107, 227, 58, 11, 155, 27, 121, 183, 21, 72, 125, 178, 6, 136, 171, 206, 242, 72, 44, 169, 129, 96, 201, 199, 190, 96, 38, 6, 31, 100, 35, 236, 194, 119, 21, 106, 152, 160, 206, 158, 193, 31, 122, 252, 95, 76, 204, 180, 252, 171, 75, 182, 57, 141, 55, 189, 68, 187, 76, 120, 158, 16, 86, 109, 62, 31, 87, 55, 131, 217, 109, 188, 128, 98, 65, 33, 129, 80, 5, 44, 132, 195, 160, 174, 195, 90, 139, 217, 130, 184, 101, 103, 54, 107, 76, 202, 165, 190, 104, 109, 245, 226, 192, 156, 143, 97, 222, 78, 126, 156, 38, 4, 168, 63, 233, 161, 113, 208, 38, 11, 226, 5, 170, 165, 61, 240, 232, 173, 180, 220, 114, 251, 213, 206, 3, 37, 109, 105, 73, 146, 99, 207, 72, 25, 80, 202, 181, 26, 206, 235, 37, 78, 146, 166, 222, 95, 27, 0, 51, 3, 100, 107, 147, 126, 234, 28, 178, 49, 83, 124, 73, 120, 78, 173, 175, 38, 136, 70>>}}.
{{encoded, "23CrQydtwsfokvpnAB4JUDQL9ed32Q88Hng5e8viQXZSEcypbr6htpXoZeUFA5GhUXvRMqHyT8xt5CXtnUBhSDcgkffLTUe1e9VV6cg1E8nPLyaghDkYHTvRcVUu5rnVZvCsnmCedg5p1qyx9CdvsnpWxMiL8n8aEHkx3BT1wdyS4E5Aq6QVJ2EjNK4meopkoLqiupYPRzLtwbTyZquyU5dhbN6fpTeEMSr6MCCGWhGeAFYbke7KYbSQMamYGyLTujrxZYcxZshtozTXyBLr7S1Sa8LHkNfbQp3WoPQdUSWgc53JyMwBBfgbbNewE2RwvBz84GabEwdMB4hWXt4icQyHUG4dgPo5Dj7m9qHew49zq8SbqYYQD5nCVBhhRoqSd4yzYDfZVxfQ3czPm5Wtq5wyNfgjPDN7jGnHW1hdsaeYEe1niv3pghjzmCjKx8NX9Pk2BMZccBWa3G293Rk8N9n9xuseFnWCMX2akawKaYrExzWdhCuR78oXqFFhCgk2E3NFyt8N179c2cEvqJ451zysctB4tKcQmKomAPAKqh7qgDNDWdZxXA3resiRoKy1ft6QsWuVbfCgXjoGegqFEU31LT2AgoKjTdqxuygxpHqxkg6H1ixV8uA4AqjtExtUV3SnZarGuPxzmaA2kf6Li4dXXZQ4VyrXCAKzHwvj2aWFgoP2s6DEjfYv1Ag4p21Ck1sBzPGnSXtQ7aY3e8CaoH5uFts1MWiFjo6nteytoNNSKTrd"},
{decoded, <<168, 156, 8, 78, 1, 96, 206, 175, 170, 51, 146, 129, 237, 103, 19, 160, 1, 29, 15, 91, 42, 158, 6, 21, 177, 54, 170, 59, 16, 66, 166, 219, 125, 236, 136, 29, 127, 41, 98, 213, 189, 80, 54, 211, 193, 242, 203, 112, 23, 194, 76, 170, 108, 192, 32, 60, 161, 225, 206, 236, 48, 119, 159, 34, 226, 29, 153, 248, 57, 114, 76, 60, 141, 50, 156, 68, 118, 200, 162, 215, 185, 68, 40, 148, 52, 36, 204, 127, 203, 148, 3, 57, 55, 236, 41, 0, 110, 94, 220, 26, 75, 108, 251, 201, 69, 36, 239, 111, 218, 0, 147, 0, 89, 49, 93, 0, 178, 97, 126, 224, 197, 183, 247, 51, 171, 78, 98, 75, 212, 112, 49, 6, 94, 42, 225, 88, 154, 88, 254, 224, 235, 68, 69, 188, 7, 226, 29, 65, 10, 25, 11, 169, 134, 97, 110, 161, 167, 127, 80, 74, 3, 85, 231, 110, 12, 131, 251, 150, 231, 125, 62, 103, 34, 22, 185, 8, 69, 152, 49, 253, 81, 237, 117, 130, 19, 62, 50, 62, 195, 97, 72, 155, 233, 238, 240, 8, 158, 75, 56, 216, 166, 249, 211, 93, 198, 164, 137, 242, 246, 169, 241, 159, 81, 207, 223, 3, 70, 134, 6, 79, 203, 123, 79, 247, 24, 199, 15, 48, 98, 126, 20, 174, 35, 253, 101, 128, 166, 224, 239, 239, 30, 0, 70, 33, 204, 94, 59, 67, 189, 35, 104, 53, 245, 186, 18, 199, 223, 132, 233, 133, 32, 29, 177, 247, 142, 77, 181, 86, 66, 200, 76, 220, 186, 111, 255, 247, 90, 89, 56, 167, 43, 85, 82, 89, 226, 88, 82, 158, 177, 195, 170, 246, 215, 235, 200, 61, 158, 255, 105, 241, 84, 71, 64, 198, 114, 139, 220, 255, 107, 178, 123, 120, 113, 5, 17, 6, 238, 170, 177, 15, 18, 89, 141, 19, 31, 248, 220, 70, 158, 164, 180, 103, 128, 183, 7, 25, 205, 42, 41, 217, 9, 50, 238, 40, 113, 247, 154, 209, 131, 139, 24, 106, 137, 114, 199, 27, 161, 83, 189, 5, 128, 58, 253, 83, 130, 6, 129, 3, 40, 13, 164, 17, 51, 51, 201, 39, 155, 118, 173, 66, 6, 36, 41, 181, 184, 243, 108, 145, 154, 77, 218, 98, 90, 130, 97, 24, 192, 227, 183, 92, 211, 252, 51, 28, 99, 184, 31, 89, 127, 137, 87, 116, 231, 220, 48, 67, 155, 145, 67, 72, 108, 186, 244, 20, 253, 96, 33, 211, 208, 196, 86, 69, 126, 20, 58, 105, 151, 157, 213, 127, 34, 213, 175, 204, 35, 233, 241, 1, 103, 76, 46, 92, 177, 28, 57, 17, 80, 199, 232, 86, 28, 38, 217, 5, 96, 74, 203, 147, 211, 224, 3, 209, 60, 213, 67, 183, 134, 19, 169, 207, 152, 206, 13, 59, 48, 100, 211, 19, 229, 110, 152, 132, 147, 155, 85, 26, 127, 220, 149, 140, 194, 118, 51, 223, 113, 201, 184, 35, 10, 67, 184, 103, 83, 241, 163, 93, 184, 12, 58, 233, 213, 215, 3, 0, 166, 47, 218, 245, 232, 155, 252, 145, 201, 220, 13, 216, 53, 19, 79, 139, 57, 236, 110, 158, 124, 177, 203, 93, 233, 166>>}}.
{{encoded, "2XkG3iBncJSnJkMTd1EshH47jUoJLRbw3maZyZJbKvuUGm8wJacZm7zXZUCDDHXUraFNcf9d8ENpMQaMCfPdSK4sPK1ELr1ovyd6WAXfXqUJmnv6FPe4Qzcd6qNCckda2VqBiH5BDrcVeUD8tLNt1THJrS5LhVgf8wb"},
{decoded, <<48, 185, 60, 6, 47, 65, 95, 115, 200, 190, 150, 23, 242, 69, 97, 251, 131, 44, 232, 90, 48, 153, 152, 154, 22, 183, 80, 19, 82, 68, 175, 100, 237, 145, 189, 173, 63, 0, 142, 98, 112, 147, 236, 61, 200, 85, 176, 185, 168, 252, 236, 65, 105, 230, 234, 228, 223, 129, 39, 172, 53, 241, 146, 163, 120, 109, 239, 200, 114, 70, 133, 99, 10, 146, 192, 251, 150, 56, 251, 234, 158, 234, 73, 192, 39, 39, 73, 123, 214, 0, 21, 154, 81, 226, 184, 75, 104, 116, 186, 164, 44, 7, 148, 23, 219, 30, 242, 190, 189, 52, 122, 1, 150, 50, 230, 79, 112, 160, 186>>}}.
{{encoded, "28SLRFUhRmBrPDvcPevBf2dxZfHUSnVvaC6gjrMxtSpvXT7xMSv1n9JFayGtfW5vtpqZ5CNM8G1M2PWsiqPSFtLnFBELHDxUVuyzTkM2esnqySPnhjcvNMLbBxWXSqRBvW6TPigSptcPdaeA5FDZNGhchx9bMWYiD1T3Mwd1LoKupsuixrLrsT59skpWq2ipD6bx6HmVQKyUVQAPxGUXf8hbWh4zmFUzsFezwJ2krRXEN9ZYXQNy44Xb18aQWiAmp4N4V8ZjYVxCzFHBFK41TmW5wMSZdSBBsAHXLUJWQSEwo3QVJnatedAXd7tRvBvtqymcRdyMbVwvyPJ3eKMfbY41VpLsWJfEaoyxaKdxomUekUGqkeNJoM2o8Ba544BunwMdWhSr57L5iZ74eEQJH77bDhKrmUj98refJYaGqccAEg1PreesJ7r6xq5mXpHMr9p7D5uwJYpHKMhCQBNcBYbPVXTvXZNkNFn75UfjBypTFh2FSd4efUgT9UzF7dbHJ4NbqStEtdtyvgqcAvpY7tgfjG7rSUCLBaL1QjDsvPVhNJdBy9RvtEYPSPRMtUAJ11e9t5vsbk8gDZuJyDQyHR3dNt6tAZTEwZaXm2X2ZYgB3mFuh5WKB9G7vd5jLobopwc5K7ADrKtGCeRPGD8GdkB4uv88g2oi4XvFswQMqtAZdPjcCNkrpPt3JbcHDogd2XZkcZCDdjVNHJTC3eA7VdV51tEs1Pv1UBCHVfbJyqVk3y7ss7w8XBmjGZ8Nn7y8cVd9biaUR7g7dGbkZAGep7TDaTndrL9ticsACfADFCApbbYknVoCiUa6k5dn9PhbjdgJMuJb6VhWUKKFn18Xg1ifQZya7AHFV2Sy6dVeZa2BGkmZ56tZnfkQw6uNRhg8L1KBMhmNhkER9ojoAqXLeQDBCh6uoYVKDKQYwdtqRVk7KQtYdNgLSmksTsJ1M96H2AmXjmboWPSMEzNG8HZ7evjuD3mqLF1LdF68vQ8zkNZVCcmVLN7odRnVkaD5TtDjpuEQhBGX4teBVgDHscyx3PkoMs3jtgfTZJpHe1NUYc6Q5Vq6jGiVCGRgLcfsQzu2Fp4RDYvHX52fLSwM7AxRK5Wa2PKttaLKEEhdhWcTGhmF1eNUcF97Cgsy7MxSrQFTm6xquDpMpDEAwudSZmXqsmdBET"},
{decoded, <<129, 148, 13, 193, 183, 48, 45, 110, 255, 205, 37, 93, 237, 219, 224, 47, 115, 215, 92, 73, 155, 119, 173, 70, 252, 110, 34, 193, 194, 9, 230, 49, 185, 89, 96, 246, 197, 136, 127, 13, 42, 124, 217, 227, 11, 239, 89, 47, 24, 58, 130, 11, 227, 180, 237, 78, 219, 68, 9, 8, 249, 159, 216, 219, 152, 21, 153, 194, 177, 101, 243, 174, 106, 195, 156, 94, 149, 21, 21, 215, 113, 11, 88, 45, 155, 9, 113, 27, 147, 169, 5, 99, 15, 10, 25, 207, 237, 174, 188, 206, 173, 86, 181, 234, 104, 244, 7, 17, 95, 67, 143, 56, 223, 152, 156, 117, 4, 204, 121, 60, 190, 124, 59, 224, 97, 228, 193, 107, 68, 156, 213, 138, 60, 130, 162, 75, 48, 112, 148, 61, 176, 11, 225, 207, 95, 86, 54, 193, 235, 33, 12, 11, 36, 244, 4, 0, 152, 236, 253, 198, 174, 101, 227, 117, 17, 173, 101, 249, 170, 7, 146, 122, 39, 0, 241, 238, 106, 111, 43, 159, 94, 81, 27, 80, 43, 1, 90, 169, 134, 9, 132, 172, 80, 127, 177, 97, 51, 55, 255, 202, 118, 170, 184, 219, 26, 161, 198, 22, 178, 72, 79, 85, 210, 78, 191, 0, 151, 238, 123, 112, 183, 118, 122, 85, 250, 101, 1, 236, 233, 142, 56, 17, 14, 191, 104, 174, 167, 11, 233, 45, 72, 93, 28, 197, 179, 244, 204, 41, 11, 38, 15, 204, 85, 240, 231, 98, 91, 14, 204, 20, 227, 236, 224, 173, 94, 39, 167, 193, 208, 247, 4, 116, 128, 255, 170, 207, 10, 105, 228, 91, 74, 222, 107, 205, 142, 69, 127, 17, 172, 74, 48, 71, 201, 44, 221, 70, 94, 49, 123, 35, 101, 82, 148, 174, 221, 222, 128, 67, 14, 138, 121, 153, 199, 211, 134, 82, 181, 232, 5, 19, 190, 205, 173, 154, 2, 251, 248, 190, 205, 62, 83, 225, 198, 25, 236, 252, 149, 50, 161, 35, 255, 254, 58, 126, 243, 41, 94, 178, 3, 77, 183, 188, 194, 9, 14, 182, 112, 59, 176, 222, 130, 37, 157, 32, 188, 168, 113, 29, 201, 189, 73, 230, 113, 49, 7, 232, 121, 65, 95, 71, 9, 116, 28, 84, 231, 27, 181, 38, 177, 211, 77, 190, 154, 198, 40, 148, 118, 172, 178, 172, 40, 188, 200, 213, 229, 86, 255, 125, 38, 225, 147, 88, 98, 164, 144, 87, 47, 221, 193, 114, 73, 75, 159, 225, 160, 212, 92, 192, 125, 107, 86, 68, 109, 51, 4, 117, 83, 217, 199, 90, 216, 195, 37, 85, 83, 165, 59, 69, 251, 108, 172, 219, 109, 247, 196, 186, 133, 40, 159, 176, 85, 228, 63, 131, 164, 109, 227, 205, 49, 101, 91, 221, 79, 27, 39, 100, 195, 36, 241, 215, 216, 102, 253, 83, 114, 224, 138, 114, 141, 72, 163, 243, 224, 161, 6, 225, 194, 85, 82, 180, 123, 200, 105, 228, 41, 119, 15, 119, 96, 81, 243, 192, 198, 220, 79, 103, 194, 29, 111, 27, 39, 71, 219, 149, 34, 85, 11, 104, 25, 68, 149, 223, 127, 86, 85, 47, 80, 132, 10, 255, 25, 201, 55, 14, 72, 184, 251, 170, 31, 195, 168, 172, 190, 160, 234, 64, 168, 169, 23, 51, 184, 181, 252, 162, 246, 57, 161, 171, 56, 223, 128, 120, 243, 24, 1, 95, 104, 194, 130, 47, 165, 115, 120, 120, 148, 77, 101, 101, 242, 6, 87, 53, 116, 247, 223, 41, 31, 63, 76, 146, 241, 66, 100, 168, 180, 239, 112, 232, 44, 202, 115, 82, 209, 156, 250, 96, 237, 94, 102, 44, 46, 137, 63, 106, 64, 178, 180, 57, 237, 201, 101, 160, 223, 170, 248, 205, 101, 106, 195, 241, 122, 165, 193, 147, 231, 31, 78, 195, 178, 104, 121, 192, 106, 110, 50, 27, 35, 1, 232, 185, 58, 230, 13, 98, 199, 184, 15, 29, 202, 153, 198, 3, 105, 162, 117, 80, 187, 196, 153, 67, 38, 5, 231, 228, 128, 2, 99, 198, 55, 31, 144, 228, 246, 241, 235, 217, 73, 6, 35, 197, 224, 3, 159, 105, 145, 156, 220, 16, 129, 121, 218, 97, 248, 136, 202, 84, 49, 252, 235, 243, 155, 207, 209, 214, 219, 51, 173, 217, 53, 178, 229, 223, 10, 111, 55, 185, 66, 167, 53, 191, 230, 165, 199, 181, 24, 95, 31, 3, 51, 88, 130, 131, 7, 46, 166, 23, 11, 154, 220, 13, 115, 229, 46, 19, 239, 48, 219, 34, 149, 46, 145, 189, 166, 99, 143, 41, 57, 253, 193, 132, 146, 48, 72, 200, 143, 69, 0, 94, 20, 226, 187, 209, 230, 12, 201, 141, 236, 17, 162, 141, 179, 85, 133, 247, 210, 60, 5, 194, 255, 225, 144, 234, 195, 23, 253, 154, 172, 252, 98, 168, 142, 189, 14, 16, 45, 237, 17, 39, 92, 25, 2, 176, 78, 40, 30, 184, 111, 48, 16, 183, 63, 114, 48, 98, 199, 166, 218, 172, 221, 40, 150, 241, 74, 50, 179, 16, 47, 223, 3, 182, 99, 20>>}}.
{{encoded, "8NhBSyHS1PvnQeGvNm19FSDyMazSvrqFoFAWLWLKvUJNSEc9gamd9XXqp5UfiTnNMa9uw2TiiVEAV1zwrzeTFHLGPqDFp7ftBFFjz6JUU6mprLv8W9rAA8ssKs4K3am4hNBkZw7iKMePX8tT6VCs249M6Kk19o6d72EroXxFVTGtBBnELdbWh8X4YA67GLaWSaUNJnsjemAPt99p29QzG2R6i34v7r1PzhE58z9B4rH6kAhkg73FiveLWobYTxyiSWtVmwE3P3zGsX3bdrzTtqCowxt7cJ9RaqUBKV"},
{decoded, <<154, 112, 15, 219, 87, 85, 144, 224, 19, 76, 213, 101, 216, 189, 204, 39, 133, 116, 102, 201, 235, 42, 245, 44, 232, 32, 252, 55, 115, 72, 1, 92, 208, 228, 219, 48, 205, 101, 241, 227, 82, 39, 181, 110, 253, 12, 246, 221, 195, 183, 244, 18, 246, 182, 100, 38, 220, 70, 47, 244, 147, 165, 228, 13, 204, 129, 205, 4, 181, 62, 200, 219, 170, 26, 80, 73, 84, 193, 192, 37, 60, 199, 25, 148, 33, 253, 129, 213, 243, 164, 244, 115, 188, 16, 242, 167, 117, 7, 194, 53, 180, 189, 74, 92, 93, 113, 106, 97, 64, 210, 247, 73, 17, 19, 142, 45, 185, 76, 168, 217, 201, 71, 78, 175, 137, 10, 13, 238, 180, 74, 63, 141, 178, 45, 124, 190, 245, 15, 240, 178, 51, 214, 237, 70, 48, 147, 30, 102, 182, 88, 12, 41, 58, 76, 127, 178, 146, 163, 38, 7, 171, 15, 36, 71, 81, 220, 162, 209, 149, 0, 107, 141, 67, 180, 155, 39, 65, 71, 69, 180, 147, 83, 98, 78, 88, 19, 222, 20, 160, 127, 51, 53, 190, 194, 195, 159, 61, 205, 133, 127, 132, 165, 173, 118, 93, 79, 219, 226, 150, 169, 113, 27, 77, 143, 112>>}}.
{{encoded, "2tp1K84b33yuQFGULEKndJBMKQhFseztwyTbSFiGDxWP7tpq6fSFZ5pKtF9EupmToCegPKvpK19HkPfusLXWdSNckrkga5cJs6ZwtSAL2Laf2g24LBJFiH69NgS7J1EpkjPpUDQachARokMDXkXbFUKJhpp6NnhYx1y763VVGKrKjtLLiKmzr4qvBFLkUUwtJkNXVvddPBXMz6aqVjnDGrgzTzuL4aiw1hexQqqu6Su452SNFxY94rh5h619tGbCWEX16vng1Q8FiAFp6DWn3Aac9yvhCN3qiZ5an9FqGhhaBugyowJq8mvDBrS7uRu2oNbXjCBWUUnpcGo9MTbPzF7Q66ATMFVVPh1vQm684KnTaWKwBcR57TExD9btRUt3hrg6jCecBdxvTY3S3dBwYNX4AANtnkzAECZ4txsdGadEsiNaN9HFM8xQoVh3VsjKgGDLT8ZHv1HKU1ri5UoqdWrxYZ6Qz73LN6NfyAUTLZWh15S9JhnJQWhjTprbVzoq8JWfzEF8Q6d6dmQRKeKc3TrDHcHXRnuShh1xnoF1J5uGgASS5F7BogffnZ5LaHL4899Hq2aXzQE5d9yeyTUk6dyAxXfqoLPp7JDYZUNkVGqZanCCEzR2GyZuHy7K3v3HZbk8AUJgBwPdrN5GGPe21qdnvDb3YcCM4171EmJGmDLo5J4NNCWSA65S9eR4CSKyEbUccVyCcRw66dKDSQ3fnXrWVgPrx8GwyQz2HMZkAWHtmuuA9kdbqUvGt99MCnMq61yzXsX1PoEYR5iyJFCqpQ7s5mk5Zj8HUmpsQEu2AwzgwnT3t9ANaHC9GXk3QYsxrQSZ45UWvxRJUsNgwW57unxAMACcg84nrNcmy"},
{decoded, <<50, 40, 83, 85, 155, 119, 209, 2, 109, 216, 132, 40, 201, 2, 59, 63, 243, 230, 77, 8, 86, 30, 72, 129, 4, 255, 74, 184, 33, 20, 248, 127, 38, 135, 119, 45, 37, 169, 157, 246, 179, 210, 57, 176, 168, 52, 95, 59, 87, 207, 5, 223, 29, 181, 161, 209, 80, 165, 139, 41, 25, 96, 28, 182, 85, 34, 5, 56, 69, 230, 138, 19, 234, 102, 45, 247, 235, 118, 164, 71, 6, 255, 104, 222, 128, 139, 107, 213, 12, 151, 20, 105, 75, 42, 224, 141, 55, 237, 236, 81, 170, 246, 127, 209, 105, 168, 18, 220, 191, 232, 147, 7, 5, 173, 178, 117, 247, 90, 112, 53, 154, 82, 124, 205, 223, 18, 125, 93, 238, 39, 226, 197, 135, 51, 216, 115, 77, 70, 46, 205, 160, 39, 166, 51, 195, 216, 20, 74, 70, 82, 153, 13, 197, 15, 130, 210, 135, 48, 193, 11, 35, 174, 249, 28, 142, 247, 17, 236, 35, 152, 82, 200, 199, 72, 95, 103, 61, 39, 114, 59, 176, 155, 169, 139, 26, 87, 148, 129, 23, 144, 249, 186, 81, 208, 112, 231, 51, 134, 53, 136, 226, 230, 6, 45, 118, 73, 179, 238, 51, 237, 18, 153, 222, 118, 15, 238, 219, 122, 83, 240, 69, 111, 103, 43, 144, 174, 244, 131, 238, 0, 197, 118, 241, 245, 254, 219, 12, 103, 131, 46, 92, 94, 129, 240, 124, 67, 2, 34, 123, 1, 242, 246, 7, 163, 30, 159, 253, 97, 222, 200, 253, 141, 153, 2, 82, 243, 63, 227, 176, 11, 163, 247, 132, 37, 51, 235, 230, 100, 119, 115, 247, 193, 197, 17, 110, 223, 149, 148, 181, 249, 192, 4, 209, 50, 157, 43, 8, 196, 146, 11, 236, 59, 133, 161, 210, 162, 33, 22, 251, 206, 17, 140, 145, 139, 60, 84, 76, 114, 193, 159, 26, 157, 29, 143, 210, 95, 237, 67, 125, 6, 10, 37, 31, 244, 39, 33, 158, 162, 149, 36, 192, 178, 159, 57, 108, 157, 24, 236, 94, 134, 15, 65, 140, 147, 191, 26, 217, 90, 217, 22, 101, 165, 57, 19, 140, 4, 88, 2, 145, 250, 51, 175, 14, 201, 159, 16, 208, 136, 133, 234, 246, 187, 252, 79, 154, 116, 48, 76, 33, 105, 54, 69, 114, 198, 135, 116, 166, 218, 29, 235, 89, 170, 125, 91, 137, 235, 38, 9, 151, 80, 77, 253, 96, 183, 108, 66, 187, 127, 103, 253, 2, 20, 204, 26, 250, 28, 121, 210, 69, 32, 95, 179, 92, 221, 129, 94, 194, 56, 249, 52, 41, 233, 250, 149, 185, 181, 168, 15, 34, 63, 240, 194, 116, 61, 112, 196, 224, 163, 227, 163, 99, 247, 243, 252, 213, 192, 208, 194, 10, 203, 205, 144, 43, 104, 146, 216, 59, 185, 126, 108, 155, 145, 46, 178, 233, 27, 125, 47, 162, 195, 154, 253, 85, 241, 73, 200, 179, 123, 206, 29, 36, 213, 246, 223, 190, 134, 115, 15, 236, 42, 225, 44, 154, 183, 135, 43, 157, 146, 27, 201, 199, 198, 119, 197, 201, 187, 14, 171, 253, 225, 255, 69, 26, 177, 183, 231, 152, 1, 6, 96, 114, 99, 155, 68, 105, 85, 41, 141, 7, 125, 47, 52, 120, 181, 69, 131, 164, 21, 138, 18, 233, 75, 180, 157, 182, 132, 36, 179, 27, 161, 240, 146, 163, 75, 67, 96, 57, 45, 227, 161, 204, 124, 192, 181, 249, 252, 179, 171, 72, 29, 177, 205, 44, 186, 43, 166, 252, 22, 217, 108, 135, 218, 10, 127, 75, 131, 69, 193, 138, 197, 36, 197, 177, 91, 237, 222, 36, 143, 244, 42, 36, 45, 245, 14, 55, 102, 137, 223, 180, 183, 38, 21, 186, 52, 205, 212>>}}.
{{encoded, "QkfmvXHBFHUReyCZ7LHLSkbKyVME82232BNk8UduHbmLLF4vfyvjKN7Tjq9vWYzXBmU3VNcVZQGtEC"},
{decoded, <<198, 183, 116, 93, 120, 223, 58, 244, 146, 144, 197, 40, 243, 73, 22, 236, 46, 35, 143, 114, 254, 79, 133, 148, 112, 175, 59, 189, 135, 154, 137, 6, 146, 108, 159, 141, 180, 64, 214, 49, 198, 154, 237, 175, 238, 230, 68, 95, 218, 92, 172, 247, 245, 80, 204, 21, 113>>}}.
{{encoded, "5HeCfJcfoSmzZwpLKGyibvSTiXzbw9KeHGmBoqH9QnKSDY6XmtvyN2N9kG2okrHcpsiJVURFQMAwQ3NT6NjZVEWh6zjcYvBqQDK7xWEAxayNJXKQbqFbFz5aCTT52QbCgRqmZbt7awv4Q8UdkkSq1FLuXY4mmDWM95wizYuYsDtD3MGjJbTJfGB5U8YGLjEmop5Pguipv5mrk4aGS1VfVsfnbkY9oXi67jLTGey4FG64orHZyvdHAyGRM9DZBtqikbA9WVChH7jGxfFFw33jioU6MWm23EgsoMMNbmEfVfDnAuhd6UbiN8Q3jDWQEYTRyN5XmGY7W1faqJgJqyWxjjc8YCwPtnenD8oFpibzHvs6Px1TC2kCGAs6pi4ZcnrbXw7cpdhJjRHksJT4ikMuhg8EgNQZ3YLpptZQEDE37fdC7v7bfc6rk122B1w9zNTe6i4KPkLdApjD9jowuV7DbFRKCDBk6nvG4iEN12dxBGMEgh7zMxWBDyHB4mjWfkquFEK6ZotRnuS4PqKcW8TMVjYCZYytFP8DTbtGSnc964m6ZCVqCoSpcaQoC24yUVKCXHWJoThFmcHk1YyW21ZDXaVP4rbnCEgPiJA91XxzM3jR7hfgS9pYyHxWGAMfs6b6PVXNM2DAazfDD19finrxq8u16645dSu9i8MThxKhApYAH5ERXmMxfrEPh7f5AvvtvCCRtvT36ynHEQHNUXnBzXpLZUrwPurZEGEPeiUTU5wDsCy9Cn4qTUKZnMHdgiYiMXa5zx2m3KyoeaBjcHzn29datiSTcaznZjNv5cRqCV6UMCzJdwAGxFC4fHRYs5FuMVmboMeGAGSrd4pedCUYPjXVUoKY5htWLRrtoJjUjLPFvjFFwFG97kh9HHKEQXFegv6FEhMzgBLXFjW2Cch4YoZoZa3ZZDLpx7f5vsU6vbA4K3kXukTJB3kWqXtUYQHgAWyndpBnR4zQpUXzaKea3QFfh2Kaz2gRLSunYrTW1jbLuwspKmEbN735ZkyoN7DF5sxK867D71Dj4LKmUZRBLqp3WZWKvSQcsZfo2y1Lhf8u21V9drLa62BTHTaCnNT5RJv6E295UqygqD2yanJ5iMkNvq2F1vxmfLiBJWfpxhih7tascbcodbiNbhhtqNuGGRi9HGZ9BCtLsirT9FnYLkMooYBf2fWse2rLfPgWPHAUarqNu9pA4zGNXKzsq2DACsiPtVs8zqxYfvfpcUGkDhRqTMtWBTgycMfkZgpVz2N47rMshvHExgxk1vRprStsCm4rNJASCzSDvhWpxzowHYp7wmiTwwqToyqisCrzBKQSjQNJFzLC5kX1ASGE7CY"},
{decoded, <<182, 85, 107, 72, 103, 253, 109, 34, 154, 206, 115, 163, 217, 173, 143, 48, 36, 219, 76, 239, 201, 79, 19, 244, 102, 59, 162, 95, 168, 155, 32, 137, 7, 240, 170, 52, 88, 137, 156, 4, 131, 99, 181, 39, 121, 249, 237, 183, 245, 7, 102, 65, 110, 137, 182, 171, 10, 140, 68, 108, 95, 182, 243, 95, 151, 221, 166, 119, 147, 16, 240, 63, 247, 101, 174, 84, 161, 184, 8, 72, 90, 239, 59, 45, 140, 58, 106, 130, 92, 154, 94, 58, 91, 235, 54, 109, 65, 231, 82, 63, 141, 197, 198, 234, 9, 69, 191, 159, 115, 104, 28, 11, 230, 11, 43, 10, 24, 134, 103, 235, 163, 31, 244, 63, 218, 109, 52, 216, 57, 92, 39, 2, 69, 171, 21, 189, 47, 195, 74, 23, 131, 32, 77, 203, 224, 138, 234, 40, 226, 174, 198, 152, 233, 71, 171, 5, 103, 7, 86, 199, 158, 243, 200, 64, 253, 186, 8, 253, 250, 160, 51, 187, 153, 95, 47, 114, 161, 167, 25, 144, 66, 28, 219, 185, 126, 2, 226, 57, 117, 206, 222, 31, 135, 19, 153, 51, 141, 184, 172, 238, 87, 97, 218, 209, 124, 86, 84, 180, 218, 207, 252, 211, 89, 141, 249, 205, 40, 170, 140, 123, 252, 145, 73, 12, 215, 209, 15, 255, 230, 60, 158, 124, 37, 19, 11, 135, 34, 27, 73, 51, 196, 242, 156, 53, 94, 57, 216, 237, 220, 41, 115, 39, 150, 176, 215, 230, 187, 52, 179, 74, 233, 86, 157, 231, 150, 229, 0, 94, 205, 30, 200, 89, 164, 181, 173, 79, 202, 48, 60, 36, 208, 103, 199, 82, 34, 117, 210, 61, 67, 68, 239, 243, 19, 41, 78, 120, 146, 126, 15, 30, 133, 68, 101, 96, 176, 47, 115, 13, 247, 101, 228, 226, 76, 5, 232, 7, 46, 83, 236, 78, 114, 193, 8, 121, 59, 151, 152, 70, 71, 35, 229, 62, 234, 165, 26, 254, 156, 30, 138, 230, 92, 167, 202, 100, 156, 11, 147, 234, 116, 38, 127, 184, 190, 38, 68, 93, 222, 77, 25, 49, 33, 15, 32, 193, 35, 134, 169, 186, 96, 83, 235, 6, 63, 99, 0, 3, 95, 137, 138, 145, 115, 82, 87, 28, 104, 1, 43, 112, 178, 225, 158, 88, 186, 152, 149, 117, 120, 205, 80, 114, 33, 104, 67, 44, 93, 112, 58, 234, 43, 99, 42, 17, 200, 70, 4, 145, 199, 249, 170, 28, 45, 174, 9, 228, 101, 44, 103, 110, 23, 10, 254, 1, 224, 98, 136, 223, 215, 53, 10, 121, 14, 89, 78, 160, 9, 36, 236, 182, 144, 109, 103, 212, 235, 73, 203, 207, 48, 25, 98, 29, 194, 225, 75, 129, 63, 208, 70, 7, 82, 14, 103, 132, 114, 221, 113, 203, 249, 120, 170, 129, 182, 12, 222, 108, 224, 242, 122, 208, 75, 153, 246, 110, 145, 71, 120, 87, 27, 194, 236, 145, 247, 56, 92, 64, 190, 21, 171, 198, 224, 202, 142, 118, 69, 119, 130, 84, 102, 69, 181, 28, 32, 10, 114, 112, 46, 3, 31, 87, 191, 30, 176, 167, 118, 210, 40, 236, 253, 146, 249, 66, 4, 32, 99, 228, 42, 254, 177, 194, 33, 26, 64, 234, 218, 242, 14, 31, 138, 110, 66, 79, 226, 136, 58, 233, 219, 157, 177, 12, 251, 136, 206, 86, 92, 6, 252, 203, 0, 16, 119, 22, 209, 177, 226, 143, 216, 128, 142, 13, 101, 65, 69, 214, 70, 126, 250, 244, 61, 99, 206, 72, 184, 209, 78, 84, 219, 6, 115, 211, 236, 111, 29, 233, 91, 67, 196, 203, 213, 16, 143, 188, 230, 214, 253, 176, 205, 128, 108, 226, 220, 18, 154, 248, 109, 186, 135, 222, 16, 220, 170, 1, 10, 244, 18, 49, 73, 106, 146, 4, 253, 32, 141, 169, 188, 16, 22, 46, 198, 251, 73, 46, 92, 144, 92, 201, 78, 64, 192, 235, 30, 214, 136, 15, 118, 62, 121, 94, 125, 219, 210, 235, 195, 19, 130, 1, 188, 10, 65, 84, 68, 142, 139, 162, 30, 73, 25, 244, 66, 81, 74, 185, 201, 62, 95, 120, 31, 166, 132, 95, 169, 21, 7, 204, 53, 246, 26, 150, 45, 148, 184, 47, 131, 32, 122, 87, 215, 93, 194, 134, 114, 72, 130, 115, 158, 187, 140, 33, 86, 18, 222, 127, 251, 221, 136, 134, 227, 73, 135, 140, 171, 88, 17, 66, 163, 2, 6, 52, 151, 40, 58, 180, 210, 139, 198, 219, 14, 88, 106, 34, 223, 225, 203, 240, 175, 234, 194, 59, 15, 70, 240, 32, 35, 67, 163, 131, 70, 255, 60, 151, 182, 140, 21, 113, 42, 254, 165, 226, 85, 242, 219, 78, 19, 52, 239, 163, 185, 148, 174, 95, 116, 142, 170, 27, 109, 40, 227, 100, 7, 78, 160, 136, 82, 180, 74, 61, 144, 11, 134, 149, 87, 169, 14, 31, 69, 251, 73, 109, 218, 86, 77, 142, 220, 93, 148, 2, 104, 252, 138, 170, 67, 39, 160, 204, 86, 208, 1, 61, 156, 84, 53, 138, 48, 139, 201, 119, 231, 204, 124, 37, 252, 242, 168, 250, 140, 158, 59, 62, 104, 178, 132, 192, 224, 183, 125, 137, 59, 35, 60, 24, 179, 146, 151, 215, 224, 97, 161, 220, 153, 52, 137, 228, 193, 135, 255, 224, 35, 124, 193, 32, 165, 242, 149, 149, 24, 104, 32, 136, 180, 120, 79, 118, 188, 173, 206, 148, 53, 220, 42, 104, 233, 210, 223, 90, 12, 83, 235, 178, 89, 72, 84, 112, 218, 171, 42, 34, 16, 60, 129, 95, 8, 23, 63, 6, 209, 65, 52, 179, 205, 91, 3, 129, 250, 237, 112, 20, 235, 84, 36, 238, 6, 11, 250, 20, 34, 108, 101, 63, 219, 17, 47, 201, 97, 50, 77>>}}.
{{encoded, "C37SQ4oCvqvWyhAG4WDRYW8KQMdHVGVtrS29wKbvAjQmEvFEC5NaAZmjjkhCvfSk4V9jgJTXYcAk1GUEXkQFXHE6TwCCd7EB5nQdgkUxacvVfEKazKqTo5rYwdFWQEMhQZrPjzvRvBRGq49S2icKzrVpNxb14H4fkDr5rp4W7XCwvUoAxMefUWpEiMoCLEkUeMWRjA3AJdEycUYzLgX1EYht9yg8KnUiuY3b94ZbuiaPAUhXqLY3JQa9V7tRf7oop1zXTX4CSzBwSAtkHqjcSsFAx7997wMdvUwFw3DboACyXQp4L54Kn5SRYWi3z31hvx5gsSN9AYY6F382FmzYYJyTAWEwmuy4e7JcudcfXdjkqrYs4o6AULo2QJ91KPgBi6pZtVMxuXizGzzPhgHaj7A8j1pnRpExFAe4NicrM81EWxPrtwUNoXDAiWA6Qj5hzGB"},
{decoded, <<188, 35, 63, 195, 127, 22, 219, 226, 119, 116, 32, 36, 152, 217, 111, 50, 20, 236, 23, 190, 199, 169, 179, 138, 2, 78, 41, 38, 153, 59, 231, 165, 63, 33, 68, 200, 85, 37, 117, 208, 55, 20, 60, 89, 106, 35, 64, 15, 50, 225, 35, 94, 55, 157, 83, 6, 43, 4, 141, 91, 222, 136, 88, 184, 119, 240, 164, 228, 211, 170, 106, 91, 51, 29, 130, 132, 0, 169, 104, 194, 202, 147, 243, 91, 210, 8, 10, 54, 206, 201, 19, 215, 135, 180, 13, 116, 93, 217, 75, 151, 228, 36, 16, 42, 44, 92, 222, 210, 217, 64, 70, 120, 145, 214, 127, 197, 231, 174, 199, 157, 147, 48, 30, 115, 100, 203, 132, 201, 110, 80, 12, 240, 240, 57, 219, 254, 40, 87, 244, 100, 144, 44, 84, 113, 96, 23, 110, 120, 194, 97, 116, 41, 242, 232, 153, 244, 60, 194, 75, 155, 140, 212, 62, 167, 71, 154, 198, 182, 65, 6, 230, 48, 251, 200, 190, 8, 5, 90, 27, 184, 89, 30, 57, 202, 97, 254, 43, 198, 140, 16, 31, 40, 116, 175, 106, 248, 111, 149, 39, 50, 72, 80, 27, 130, 241, 69, 129, 247, 215, 138, 225, 26, 151, 25, 137, 141, 251, 148, 100, 204, 60, 79, 43, 133, 228, 221, 155, 155, 201, 46, 52, 144, 129, 144, 170, 198, 101, 53, 128, 138, 120, 222, 86, 64, 174, 38, 245, 212, 86, 131, 39, 164, 181, 26, 190, 112, 200, 8, 214, 40, 159, 216, 169, 167, 30, 190, 74, 249, 244, 218, 52, 5, 141, 109, 85, 138, 39, 54, 176, 114, 160, 86, 26, 53, 122, 207, 217, 209, 106, 167, 134, 36, 46, 13, 93, 253, 89, 114, 225, 237, 167, 27, 155, 186, 216, 3, 34, 46, 145, 77, 41, 180, 192, 104, 213, 74, 54, 144, 149, 107, 215, 143, 252, 112, 37, 155, 167, 243, 242, 116>>}}.
{{encoded, "3GBNADS62mDoRZ8SD1ZPPyQBS4peUVNkbttVF5F3P3uL1XQQAgyiZ3SpaKn2VRtsTX68wS1vsxT5i5QQi8gpVSoykMbi4CbXsv9ovVcWx3MRXmnubjhv7dyFFKW9Xr33Rt687LqgWuwrcvLhjbnMo8oekrRvRCDQGyyHsJDWGvLJfJtvCTpcQfKS8Am6ZgNpmJy6Mnq9qbUhnUSiCiQtvXgqMv8PXPr77ZmdJhwiv7wNczbkoQhtuQEhttFT94doVruur3HLpmarCbd5W5exZuLDQ7b1fdkW6DysvzdNJBSxYZMsbFiAiRdZAcMiUxG17E8SuUArZtZwKh8t3djVRYfot9wf76LxHBWxbgon7xKgwaEzJ1xRyZwQyzPQ7L74REHNfHbwTbzZX1BMV9ABz4JMZruNigycF8wMJTEMkA4Yy2nLwdY9nK7cZzsZY6Y2GUNDz5WEfvZ1RG9Y7vMeUcfZPeB6p5dobKRXbFqbNwgaW5FLkpk7FExC2JJbfBsEXbzAYqFn1MPSe"},
{decoded, <<108, 87, 147, 239, 84, 89, 48, 34, 202, 69, 116, 198, 51, 37, 194, 105, 152, 195, 101, 205, 13, 164, 216, 85, 17, 13, 181, 84, 5, 145, 246, 210, 49, 185, 246, 56, 106, 25, 8, 220, 147, 239, 196, 241, 161, 201, 110, 242, 218, 34, 212, 120, 52, 37, 117, 190, 252, 206, 82, 24, 192, 233, 150, 232, 173, 169, 155, 214, 0, 1, 37, 129, 181, 163, 11, 151, 209, 198, 54, 98, 251, 35, 76, 161, 70, 84, 12, 164, 193, 38, 114, 9, 92, 224, 33, 196, 117, 112, 146, 208, 136, 87, 57, 93, 11, 217, 175, 246, 171, 19, 117, 41, 177, 44, 254, 179, 220, 132, 66, 185, 64, 9, 88, 37, 11, 160, 226, 54, 110, 64, 113, 131, 93, 96, 73, 63, 243, 30, 58, 97, 42, 80, 194, 225, 37, 228, 145, 229, 237, 223, 143, 190, 177, 127, 195, 81, 163, 101, 196, 25, 65, 201, 191, 81, 46, 136, 202, 170, 23, 66, 225, 255, 76, 193, 6, 2, 38, 109, 19, 145, 100, 57, 214, 128, 221, 128, 43, 79, 202, 156, 122, 136, 234, 250, 175, 230, 100, 67, 153, 158, 95, 148, 232, 128, 200, 215, 164, 176, 71, 102, 245, 44, 2, 5, 137, 36, 196, 16, 43, 103, 12, 134, 52, 78, 147, 156, 25, 41, 163, 243, 201, 154, 215, 174, 133, 102, 93, 240, 168, 86, 40, 205, 188, 63, 48, 230, 193, 184, 195, 97, 21, 87, 103, 9, 102, 109, 12, 43, 184, 9, 24, 240, 52, 84, 214, 40, 236, 157, 97, 169, 56, 175, 225, 187, 165, 78, 115, 56, 140, 148, 18, 200, 146, 8, 136, 212, 17, 128, 176, 185, 0, 103, 226, 201, 181, 143, 250, 201, 3, 50, 137, 185, 235, 240, 124, 150, 26, 102, 98, 127, 194, 230, 127, 110, 132, 207, 173, 177, 224, 204, 204, 87, 167, 38, 49, 201, 225, 126, 190, 72, 34, 60, 185, 181, 56, 99, 253, 213, 37, 107, 209, 121, 9, 119, 184, 57, 63, 53, 13, 37, 181, 85, 1, 145, 151, 82, 236, 80, 79, 21, 153, 27, 233, 200, 92, 12, 117, 202, 55, 53, 1, 177, 238, 204, 87, 3, 132, 223, 164, 243, 43, 92, 75, 167>>}}.
{{encoded, "DWW8UiNrGvKESJNv5r4uCkUAxwYnB2hSUxAuGH5WzMDrSdcJwt6pxke8r59beJshXESgR3j5aBVaTYgPAGvLJgLEHbH5o43d8hY2JoR2ek6pCLir5tfQifsTQL2nu3gAq9AKTpXS3Y4fkouByuEM3pqUdFsapffFLYpchncSnmkWCQXkths9YNNwWtW82RGPjnY8iMHn5K5m2bsNnXy3ZXrw8TRoSNASx1UKQEz3q8DCRR7eXGG731vM9wSvwdYp65Cg3dcz1dVrgsWMkiHZGzWeBUKZNYMeJJWhRsuC49YbUkA9BmZvHSXBVX558FeXcqYyXp5N3r6DTWT4onXrTnvH99J4ueU3Q6NzGNz7UUoDNKD6i52Lzp3twYBXhgAFQfB8W7cD5j5nx5UQB1snCXcgxQbEWgDWeLdJ4VVEzoUWKS9kf525gbSsFTsUfQihu9Zq3f4mVXdeJvUhw33SpbaaojVTroxGh6sZngFPMGTwGMRDjGut5WACWBusu3RuwFEMeeVcLsrmcdUXqa1yWRJfCoqisjFUC3sajiQT4J7wa4pQHntG6n8zTN7KC7Mc5v9o5tjaxrk6YH7eoE5Fsmm8gByyWySb1yergKF7jsXSTdSAahP8mGfVeEZpWj9E3CuDVDD3rrZL75DSSABGcNLGX5qzXwdCF6dPJ8c3TDMYCihsHcesBoWrFJSehDG8wNC8nrV6gqTg2Bt7fRscC4x7Gu2rqSH5Mg16nTLfQU7YgFcmYhe7zTkQUYvPu3UpCQb4bFDUDtp25CD583YJERjaKueTNdeLSQckcUPtVxeUqR9sZYvgu5Ke3v98aGSLCRygzv7JsHvxW5Qi2TQoVvfVvM"},
{decoded, <<244, 166, 19, 243, 41, 226, 138, 83, 170, 70, 145, 82, 254, 240, 223, 90, 200, 194, 165, 15, 174, 92, 96, 15, 119, 57, 196, 226, 220, 68, 216, 255, 199, 246, 147, 56, 141, 249, 168, 130, 87, 166, 170, 215, 165, 223, 127, 53, 253, 52, 108, 158, 224, 216, 31, 227, 101, 155, 163, 204, 196, 162, 11, 215, 224, 120, 8, 54, 42, 110, 0, 27, 62, 9, 188, 164, 13, 60, 86, 140, 145, 103, 179, 243, 196, 226, 226, 149, 129, 245, 10, 244, 67, 44, 98, 69, 226, 75, 190, 207, 123, 225, 25, 250, 28, 89, 118, 140, 113, 213, 178, 44, 143, 213, 24, 54, 42, 226, 24, 4, 17, 95, 60, 186, 8, 213, 98, 17, 230, 143, 206, 95, 44, 36, 76, 223, 122, 245, 60, 9, 58, 141, 158, 143, 157, 205, 122, 71, 220, 138, 74, 192, 36, 63, 129, 54, 177, 104, 111, 232, 106, 199, 144, 251, 157, 149, 72, 172, 95, 127, 128, 255, 242, 9, 206, 181, 54, 122, 23, 71, 121, 108, 74, 3, 173, 236, 66, 202, 88, 55, 201, 125, 60, 148, 19, 20, 216, 246, 210, 224, 116, 108, 184, 15, 21, 253, 230, 27, 168, 63, 134, 165, 237, 255, 25, 215, 167, 123, 10, 81, 16, 119, 64, 11, 209, 228, 33, 82, 77, 76, 130, 112, 178, 112, 220, 196, 16, 232, 38, 30, 136, 108, 157, 199, 227, 215, 141, 213, 127, 118, 119, 62, 121, 51, 44, 102, 32, 170, 12, 68, 79, 94, 27, 45, 159, 198, 128, 114, 60, 169, 246, 135, 155, 130, 135, 58, 67, 77, 33, 19, 201, 242, 17, 208, 248, 74, 39, 248, 181, 46, 43, 195, 244, 61, 111, 102, 129, 76, 45, 168, 228, 163, 64, 117, 32, 52, 95, 24, 199, 80, 165, 213, 79, 132, 247, 161, 232, 186, 88, 225, 162, 26, 177, 105, 74, 124, 83, 37, 89, 75, 100, 80, 142, 110, 20, 226, 17, 48, 109, 241, 30, 107, 226, 108, 51, 184, 56, 206, 176, 213, 32, 253, 165, 3, 49, 70, 204, 24, 177, 66, 236, 107, 169, 222, 166, 113, 97, 125, 9, 89, 219, 77, 137, 139, 31, 135, 211, 71, 17, 134, 134, 229, 99, 170, 253, 190, 90, 104, 242, 219, 215, 152, 195, 180, 232, 35, 34, 79, 201, 31, 125, 7, 104, 179, 214, 38, 14, 47, 24, 13, 184, 61, 109, 56, 5, 97, 6, 43, 83, 101, 104, 220, 251, 45, 66, 106, 18, 28, 201, 101, 178, 122, 140, 247, 200, 170, 82, 108, 156, 248, 107, 239, 210, 4, 189, 204, 143, 138, 244, 139, 66, 50, 90, 29, 23, 126, 112, 88, 46, 0, 38, 199, 39, 218, 103, 31, 247, 197, 0, 254, 119, 160, 90, 100, 162, 39, 72, 218, 196, 29, 229, 79, 85, 13, 129, 183, 125, 218, 25, 55, 92, 40, 239, 229, 168, 166, 159, 189, 218, 74, 127, 216, 48, 92, 246, 132, 231, 31, 203, 3, 206, 17, 112, 243, 166, 129, 166, 77, 235, 114, 28, 110, 47, 96, 197, 0, 119, 117, 216, 24, 168, 67, 118, 97, 111, 18, 240, 227, 38, 179, 121, 72, 98, 177, 50, 101, 64, 215, 16, 94, 96, 160, 156, 197, 182, 234, 97, 79, 241, 252, 63, 62, 209, 128, 74, 108, 217, 102, 113, 53, 125, 245, 125, 3, 175, 45, 138, 68, 49, 178, 136, 82, 31, 120, 17, 138, 148, 188, 191, 56, 19, 99, 130, 90, 216, 87, 23, 66, 203, 148, 8, 194, 126, 147, 215, 20, 193, 15, 95, 25, 179, 212, 173, 8, 48, 16, 228, 47, 139, 19, 11, 26, 73, 110, 213, 76, 208, 198>>}}.
{{encoded, "4uXguMJp8CxbqZGpQz2Xi7ESBk1muUMT4Uksn2mnUajx77W9oNxGz8gKT83yrGnWm2mbecE9UDEo3EgXjCj7TcogkE1jRzwMvqgMmss9E5VkfuexztSKDtUyVYKNb75BYQt4Cxk8T8Lk4DCv57452QTAtxXVe2W7AzBWp1XaL9oSE7yWa5"},
{decoded, <<113, 161, 111, 208, 31, 200, 181, 56, 185, 141, 32, 147, 116, 23, 221, 119, 135, 235, 210, 94, 118, 240, 61, 72, 7, 203, 34, 12, 74, 57, 90, 199, 148, 120, 35, 200, 170, 87, 204, 201, 217, 244, 204, 88, 25, 132, 77, 189, 196, 160, 194, 142, 164, 204, 1, 142, 226, 41, 252, 11, 80, 186, 244, 129, 216, 130, 91, 32, 231, 225, 140, 253, 177, 76, 237, 119, 209, 166, 65, 60, 193, 123, 26, 66, 195, 203, 51, 51, 123, 2, 131, 51, 126, 211, 87, 79, 57, 57, 77, 113, 140, 133, 94, 35, 79, 110, 41, 95, 57, 156, 42, 210, 226, 24, 71, 214, 202, 106, 104, 130, 245, 148, 55, 83, 108, 7, 12, 96, 238, 18>>}}.
{{encoded, "2QeXynqwTq3Zqwvpjm9wgBnzUgLt1qfmxFQQG6a8Nffi4sCaNZGAXGV9RU1sRbyBUx8ipqmPZ9y9MT85zbysnx46eYeZ3x6NGTmLVfxSGBwrAEUTd9eNLyZb1RJy4MttUnNUeBzr2CmoQDy24wxSSYBKNEknWWuG53BMKHJoBc19ucgJ8hLbRmAhh1ENMb8YftAAufQo2cAX7TFDS1RpXDpLLiuW15zv1RDWDANzsG1xCw3ZtaKGsRen2cjagwNYVQpMucjDJhDXXrxCoBM92pY3nbBxWHJFXLWzFXhSmZ9SCwBXsbezCsA9mvDoMj9ZTywawaSvbSymKKZEDJ73F3CRp63ERpH8rzEMBGMgoZPtPaUA1K7kufedN2BaSfd7pj45M6Gh7S8keyL6bjsZHcLTpYjsWzwmwSAyxXP3BjUvjnLcEKaqkNPf2srT32CeRDF4iY32N6QPeYmJS9eTE4q7TWh8Sqd3LrYeeo8jCc38ehNktjHPPyJwcKc6M8ptEF4Rm8dPpS14kroSY7xMD4wLTJGM215WT88zdyBQ9LLSuhMzfacEmEDqqMtPTu9BFGttgdqudoruvuF6EUk449B4iy8tCShxZP8oRcfamRe59pTGs6H5WJRZxDPAqibWNiY1VHuEN2tn65ozD3wLMktLwB93yvy8Teqb4NXukck7c9DFigQtzQcD1H1Nw9Nahb7Hd594m18QoQzW3oCPXMreAa6B7XBF15mB6xsSE1oSfPLY8Y8YbSyQjdu3CWWKzLZAC6yZUojL4kP8RdGFnvFptKpX5wZsTEu3b8Fc5u2Q8Vtk7TRpyFarAm7hETdES8MfFefWn62pMETaiH4twMuGqANkKRLdzKa7KiytiBnViPujpbePttr6iBnQJmiy3DiNmkYdduP6QxAFRoLrt95XGXM8qcSaDpXwJYJ2zgWk4xQGFyj5fanzYMBSqEQQcrHzoUXnbGpMmj1NDF3uVHFpH5GemMJ"},
{decoded, <<237, 244, 11, 52, 236, 54, 230, 103, 155, 122, 70, 190, 130, 211, 17, 153, 220, 243, 158, 115, 5, 253, 4, 125, 235, 15, 75, 210, 124, 122, 133, 9, 77, 98, 206, 99, 56, 231, 33, 254, 174, 164, 43, 172, 246, 239, 247, 71, 117, 218, 85, 94, 231, 243, 155, 103, 192, 157, 11, 103, 114, 72, 62, 228, 173, 205, 121, 168, 177, 238, 221, 62, 237, 203, 251, 105, 190, 68, 174, 106, 231, 78, 38, 221, 209, 211, 4, 172, 219, 155, 156, 204, 44, 6, 78, 159, 177, 140, 208, 223, 60, 74, 243, 12, 240, 211, 64, 50, 81, 218, 239, 149, 249, 127, 99, 59, 179, 109, 164, 56, 34, 58, 75, 82, 215, 130, 253, 35, 32, 158, 189, 15, 14, 60, 180, 165, 245, 39, 239, 95, 159, 69, 156, 235, 12, 28, 241, 84, 41, 221, 194, 126, 164, 37, 209, 67, 198, 66, 203, 106, 226, 204, 73, 232, 176, 24, 251, 77, 120, 109, 62, 112, 222, 60, 213, 136, 182, 167, 75, 48, 134, 26, 147, 177, 140, 229, 18, 67, 31, 176, 139, 225, 25, 236, 19, 165, 66, 23, 191, 36, 246, 23, 18, 86, 235, 137, 244, 217, 207, 11, 2, 220, 181, 55, 54, 55, 1, 135, 198, 10, 206, 54, 31, 251, 95, 232, 223, 120, 57, 191, 82, 13, 78, 116, 153, 216, 74, 165, 173, 95, 233, 142, 5, 41, 200, 163, 174, 191, 233, 72, 42, 219, 63, 178, 24, 236, 252, 73, 153, 246, 179, 41, 90, 88, 193, 76, 254, 61, 225, 149, 241, 212, 6, 87, 86, 104, 12, 123, 169, 188, 85, 255, 73, 158, 118, 64, 143, 5, 218, 71, 188, 207, 90, 229, 253, 233, 49, 182, 42, 234, 147, 190, 155, 156, 120, 87, 79, 247, 91, 73, 3, 220, 249, 224, 56, 80, 229, 125, 178, 132, 119, 51, 66, 223, 149, 135, 149, 38, 172, 229, 13, 104, 157, 210, 110, 185, 6, 19, 99, 147, 225, 215, 240, 25, 209, 81, 249, 42, 132, 4, 147, 80, 11, 70, 30, 104, 46, 109, 177, 126, 30, 213, 186, 68, 78, 211, 104, 119, 246, 166, 140, 5, 40, 13, 169, 199, 28, 11, 130, 132, 164, 165, 96, 201, 137, 43, 76, 20, 169, 90, 50, 79, 22, 142, 236, 116, 213, 158, 194, 19, 78, 214, 185, 51, 117, 55, 4, 215, 210, 177, 29, 178, 99, 50, 203, 211, 207, 53, 149, 203, 190, 252, 18, 31, 186, 251, 59, 26, 108, 163, 209, 81, 138, 109, 85, 124, 248, 170, 32, 203, 235, 8, 164, 105, 85, 57, 158, 104, 24, 178, 208, 178, 218, 21, 132, 136, 251, 212, 149, 223, 139, 76, 172, 195, 190, 218, 174, 231, 195, 125, 138, 51, 26, 13, 222, 189, 68, 6, 202, 212, 115, 34, 4, 153, 192, 86, 218, 128, 122, 67, 4, 189, 72, 74, 158, 73, 134, 169, 247, 200, 33, 99, 156, 154, 0, 238, 33, 242, 250, 76, 10, 79, 160, 18, 137, 135, 200, 250, 74, 9, 246, 133, 76, 197, 130, 232, 204, 58, 215, 181, 115, 200, 40, 247, 129, 102, 190, 150, 238, 228, 236, 178, 97, 15, 104, 252, 241, 24, 201, 35, 121, 22, 239, 20, 10, 207, 106, 119, 205, 20, 236, 3, 224, 148, 80, 43, 240, 129, 34, 77, 131, 65, 239, 53, 76, 94, 67, 206, 120, 4, 251, 80, 162, 87, 145, 211, 101, 66, 80, 253, 14, 19, 214, 177, 96, 232, 166, 30, 1, 141, 204, 195, 91, 230, 4, 247, 152, 17, 77, 247, 197, 66, 198, 14, 38, 74, 242, 180, 223, 30, 9, 191, 207, 153, 150, 46, 175, 146, 75, 72, 25, 121, 93, 50, 119, 80, 183, 167, 87, 134, 126, 180, 138, 141, 56, 70, 71, 241, 219, 95, 50, 75, 208, 240, 75, 148, 24, 250, 158, 62, 44, 223, 46, 52, 160, 214, 39, 200, 217, 223, 113, 47, 217, 51, 239, 90, 231, 76, 63, 128, 139, 194, 194, 36, 85, 223, 28, 254, 133, 183, 248, 181, 209, 11, 82, 232, 198, 87, 234, 51, 142, 160, 229, 166, 88, 21, 86, 21, 122, 185, 167, 55, 44, 251, 93, 35, 231, 68, 127, 0, 27, 244, 63, 248, 129>>}}.
{{encoded, "3xbyxWh2MPpfNuScxtJy6roGrmogoK4AknJ9DheLYkJHB9Sg8XNkG946LBFgcxRR9yrcJjZ4BMoVWjc3UtxbZWQtxePKHKRenxJoQ7t5USdo3HMkeHbR9oK9oLM7rCTRCkrjueQXFThXwNWXSUCbzd7ahATNdJvxXpork5kpzEdryFeDZW199btF3Hb1WYDCSgqDsiKoiK73D3oFyT4uiC1pdQaWAHEaTvHF2pcYdi7FtxtKMnu6ko9iRpNvkjTNa3tGmCbNBimN7cj87NMPGqjAbaC9vnhmehtJQQpALuy2vN321MZRtSbrSgLJm8mCsq79B8Qp3pXZdyWH8vuWNYEDRSppEQFJxyHziVTAQfUypQE29LLkeMvkbnjPbYrVM5VXiWfQwrkaihYUTttaa3docDuzbS3kzBUC7pzSfsbqGnfYGD68gyr4uLLN6zkvD258T8yhoUb8DJi79ocLeHmFHgHnNsuSoob8UjEZHDz8SKfJQXenwPSqEsu5NtuP9C7nmXDdw5NPnxF4raNV1oQ78ULmb8BkMYqU4eZL8qU8WVuVm5r6qmtKwHbVd2MjuivbHTYKfQXUPCan2pyBYBtzb3DE2wTzk5f22xUi6GtPwG9LDanAsa4HwLF43qDv48VuLNCfRqfphneu6TtCzQLzvw5y68aVG3bi8FP3Kcikm5kfWM9k8o4xNTFpJELhNR2rKBPR9SfTHG6QEzjjtLaujzmPVjSjaHuzVR5A36TczsxTaSmtZcMnmto5X6PV23CaXmYLmwRufXeCs3MogMh8xG1JbrvT7qnEycsBCHCTAiJrxxk7hefjybM72ToTDSCVD3oBWpJ3npL8hMht4kZVg1q9NzfrWG2AkkYZgRrvajCTUNs7ZgnBGWBSsbC5BsV4AM8a2oRg8Q8SrVmMvtNhVXwQf1GbSpAdjCnEnDUQE23pycXkTfNcARrRGRAi36eoaKAsqQdQLcGucnNfqUfjPiXijnaRWUbEnfZUfvDxBFyLwHFhMgL8xcJFCGmHLo8z9t47tjcdEyHRMWEV3GNsoYNDZALmQyLAVrVy6yrwFU9AeETfxDJ4bamnpeLBh4FyfuSB2k2TTxtbeCWVEy1HC42xwJE2AiRSJ2nMG9s6u5w4qUR6uYsDHxw2cZVY6oh9eURZ4MnJQixDRjgu"},
{decoded, <<38, 86, 123, 107, 102, 52, 157, 57, 254, 219, 87, 86, 99, 193, 221, 118, 76, 134, 180, 14, 162, 239, 253, 124, 245, 207, 5, 143, 221, 209, 10, 233, 92, 157, 195, 11, 83, 6, 57, 234, 32, 1, 78, 139, 29, 20, 111, 239, 90, 215, 93, 29, 82, 231, 151, 235, 122, 41, 32, 190, 146, 197, 157, 220, 246, 212, 234, 84, 37, 87, 74, 2, 198, 147, 229, 125, 102, 166, 212, 252, 251, 223, 184, 167, 129, 183, 144, 190, 80, 89, 116, 15, 43, 68, 131, 195, 175, 10, 77, 183, 253, 240, 8, 0, 193, 78, 212, 226, 13, 58, 200, 63, 80, 93, 57, 109, 52, 188, 151, 196, 8, 19, 123, 8, 111, 171, 116, 181, 80, 133, 98, 169, 53, 81, 244, 43, 111, 128, 254, 27, 182, 205, 20, 125, 181, 56, 57, 219, 80, 22, 104, 217, 105, 179, 145, 60, 59, 203, 177, 242, 27, 50, 15, 47, 154, 185, 75, 94, 238, 94, 39, 107, 190, 60, 5, 72, 226, 4, 40, 212, 112, 243, 109, 7, 87, 48, 106, 169, 2, 211, 244, 131, 116, 4, 163, 205, 170, 58, 220, 175, 121, 204, 124, 105, 151, 200, 147, 180, 74, 15, 3, 23, 218, 0, 208, 56, 126, 81, 129, 101, 107, 21, 36, 164, 216, 214, 162, 71, 169, 226, 73, 175, 229, 125, 123, 227, 160, 100, 125, 41, 252, 246, 73, 246, 180, 112, 96, 194, 128, 181, 193, 219, 255, 250, 36, 236, 155, 86, 194, 174, 52, 206, 126, 71, 117, 9, 57, 235, 166, 170, 231, 102, 211, 158, 162, 156, 138, 68, 218, 201, 62, 172, 162, 102, 153, 51, 218, 81, 7, 188, 165, 242, 165, 117, 21, 230, 248, 219, 223, 204, 42, 78, 39, 98, 30, 14, 218, 66, 78, 196, 1, 178, 224, 180, 193, 248, 200, 58, 0, 35, 154, 48, 238, 76, 3, 138, 77, 39, 220, 153, 197, 68, 150, 182, 53, 92, 108, 106, 121, 143, 214, 225, 31, 4, 210, 36, 10, 6, 138, 55, 86, 158, 238, 91, 168, 64, 228, 150, 134, 35, 47, 246, 18, 29, 49, 30, 157, 144, 68, 136, 56, 45, 234, 62, 8, 95, 162, 59, 234, 181, 204, 95, 74, 143, 43, 131, 142, 41, 114, 181, 227, 244, 111, 164, 181, 155, 38, 196, 191, 3, 219, 59, 198, 61, 168, 194, 91, 133, 53, 7, 187, 249, 106, 218, 53, 2, 154, 253, 139, 82, 35, 190, 127, 126, 183, 19, 153, 227, 47, 177, 31, 43, 124, 71, 250, 95, 64, 160, 236, 164, 150, 187, 32, 87, 78, 250, 120, 70, 162, 46, 130, 39, 241, 90, 211, 197, 189, 22, 124, 85, 74, 111, 148, 190, 143, 174, 229, 64, 188, 108, 199, 56, 234, 215, 104, 93, 68, 139, 112, 83, 95, 226, 141, 64, 73, 126, 135, 118, 121, 191, 57, 147, 143, 50, 2, 224, 55, 223, 86, 239, 219, 144, 58, 234, 164, 185, 189, 18, 133, 125, 11, 54, 182, 187, 2, 101, 185, 1, 4, 223, 167, 97, 149, 210, 11, 49, 8, 10, 215, 79, 205, 83, 41, 113, 66, 248, 34, 98, 84, 76, 50, 128, 42, 113, 250, 14, 179, 163, 248, 191, 136, 224, 251, 87, 42, 127, 189, 111, 206, 210, 181, 50, 60, 247, 107, 5, 85, 250, 189, 218, 162, 42, 124, 241, 51, 189, 3, 141, 33, 86, 130, 156, 52, 172, 163, 191, 129, 39, 142, 153, 168, 122, 190, 242, 23, 213, 146, 13, 105, 201, 65, 2, 121, 217, 195, 111, 79, 179, 182, 168, 168, 63, 80, 28, 110, 203, 166, 92, 69, 144, 20, 178, 80, 52, 210, 92, 71, 94, 180, 124, 242, 95, 136, 82, 90, 68, 14, 183, 39, 248, 90, 180, 118, 41, 219, 150, 152, 37, 176, 4, 170, 3, 208, 39, 148, 15, 221, 70, 250, 243, 210, 38, 63, 112, 181, 175, 26, 46, 49, 230, 160, 251, 200, 155, 185, 74, 147, 230, 167, 47, 207, 37, 186, 131, 199, 241, 16, 137, 232, 191, 249, 231, 130, 105, 25, 244, 113, 119, 167, 206, 129, 185, 97, 82, 226, 245, 57, 110, 97, 209, 26, 196, 6, 151, 71, 196, 65, 26, 160, 149, 5, 24, 155, 142, 26, 42, 161, 117, 144, 83, 122, 188, 202, 242, 227, 89, 14, 236, 95, 175, 139, 149, 69, 24, 169, 100, 171, 158, 78, 246, 55, 17, 15, 210, 16, 248, 148, 23, 212, 113, 83, 99, 162, 222, 117, 217, 167, 102, 186, 222, 229, 45, 183, 24, 65, 169, 255, 86, 80, 220, 154, 221, 158, 106, 156, 112, 195, 72, 30, 59, 150, 231, 231, 146, 82, 199, 127, 36, 6, 157, 46, 141, 38, 197, 28, 177, 41, 73, 202, 97, 66, 99, 191, 187, 4, 226, 161, 192, 37, 0, 211, 192, 94, 117, 176, 140, 44, 147, 28, 86, 137, 147, 199, 111, 176, 107, 238, 11, 109, 128, 107, 177, 101, 166, 170, 59, 193, 30, 233, 5, 13, 128, 75, 74, 122, 184, 99, 146>>}}.
{{encoded, "3dx2cBWSLbuY7GwkfoJCm88VpXaYoX7aNcYYMcwXQcbbSnE8ovVRabKFCwN6u37bbQU25xgWARkMSYNa6a2p6Um61xcuoXbuKhNNiiEixaKiuZCkWPgYAyMpoUvrTA1um7kYXCMUmgcLfyM4nRVvMukVXJDY77WHB3vXjATbZ5A5zgMcLUHo5XyNypn3881tLe7R1AM4uK6VsXNrxr3khwer8P3CXwrz4AchwUxZBn1sSTQw7fc2Vcw2V965CSXv3ivc7TRYdeH9H5yhXFEbinGg22hw9taYsaCJw4cn5hEnYaeoY4VSp5esvQsGMuurjX4t18q4tFMCABcvhApXJjAbvJVcy657UVdteCMXC2Bh7PVnQs4D5gyxSGX5UEe3MpbEYRxVTqaLNj1yQAFPZ8yExdFZtetFuaYjBWsuLmVW7bxQ4pfGdWB8NuD3rWM5ZigprZLUbE1H1gdLHffdXKPm6R2apQpGim7jW1zt67kPT6CvbLhNhc1eYwfEyDrfK9Sp14gBtkyBf99RGxC1oFCjosGyRNc27JBFcnswe3hihEAqe1CGgfr5pTZ2CAg3u4vkDjZN26LRKk8An1Mnz6qtVqVx12oy2YDWT9GFkyyfr1hnwvLGgMrsHN7qi2j3MSXXQ36Tn6XNMxEbw8rjmouUMwStjredKDqVBPkeVD1J4UUoUqKzAvZHLtqv7axqn87kb9WixzpJDWpg2vbkv5t6ZJGfSUAyKVzaNnPYz5Hrh9J6BRpizks3vULXpMjiRrynzPpWYFxJrbHzt7Bjj4aCiUx2WXJqfV2ZBWKfPc7GU2S4P3C6gq8LDuujr5hWMQ7q6rg6kYzvYA6jdsQV6wzufqaSQrPHRKuxDbv4jtjLeRM3"},
{decoded, <<94, 161, 39, 156, 254, 156, 128, 103, 54, 64, 115, 122, 10, 208, 182, 200, 74, 59, 65, 202, 23, 69, 46, 108, 193, 67, 76, 148, 5, 108, 241, 26, 82, 124, 237, 134, 184, 194, 44, 93, 170, 70, 200, 41, 79, 74, 94, 71, 189, 36, 185, 169, 95, 177, 234, 121, 104, 201, 71, 85, 152, 245, 216, 34, 247, 7, 32, 16, 42, 134, 79, 249, 173, 69, 195, 172, 64, 187, 55, 229, 184, 100, 163, 43, 0, 5, 102, 1, 223, 82, 169, 247, 250, 144, 247, 158, 172, 197, 203, 170, 58, 57, 60, 103, 130, 208, 221, 127, 156, 105, 73, 51, 239, 45, 155, 83, 166, 232, 56, 39, 233, 142, 244, 11, 93, 108, 27, 255, 205, 53, 173, 100, 237, 113, 51, 213, 59, 165, 43, 16, 132, 157, 97, 182, 62, 169, 131, 122, 68, 83, 135, 198, 172, 48, 61, 119, 216, 155, 166, 49, 65, 198, 70, 8, 48, 123, 145, 119, 151, 106, 90, 94, 245, 1, 18, 142, 117, 46, 126, 38, 103, 36, 45, 171, 113, 75, 140, 70, 93, 77, 241, 46, 129, 133, 189, 127, 120, 46, 90, 106, 146, 64, 162, 69, 156, 177, 40, 11, 151, 153, 62, 114, 18, 86, 61, 57, 165, 63, 109, 111, 157, 51, 192, 244, 127, 100, 101, 72, 54, 151, 141, 40, 45, 195, 237, 214, 180, 146, 163, 45, 19, 102, 179, 116, 57, 151, 249, 4, 181, 29, 149, 95, 219, 110, 238, 142, 193, 25, 186, 88, 176, 134, 23, 185, 13, 100, 73, 60, 162, 234, 136, 43, 54, 149, 194, 229, 47, 108, 237, 136, 200, 184, 9, 49, 16, 31, 111, 199, 69, 208, 187, 39, 217, 96, 225, 65, 177, 136, 68, 245, 87, 113, 250, 69, 152, 125, 23, 66, 241, 209, 136, 164, 201, 50, 122, 194, 179, 244, 174, 130, 83, 160, 252, 175, 199, 248, 44, 97, 199, 174, 188, 149, 176, 228, 213, 152, 83, 174, 10, 148, 21, 14, 111, 9, 248, 166, 216, 241, 165, 189, 102, 73, 161, 171, 37, 203, 18, 247, 180, 125, 101, 12, 19, 50, 209, 176, 237, 24, 183, 120, 10, 170, 24, 171, 30, 25, 174, 71, 211, 9, 155, 152, 22, 88, 68, 157, 72, 234, 199, 76, 75, 207, 183, 100, 32, 238, 165, 35, 221, 177, 128, 134, 164, 238, 229, 196, 159, 110, 9, 217, 70, 96, 49, 178, 82, 187, 110, 149, 163, 35, 5, 70, 69, 182, 237, 217, 244, 173, 236, 87, 213, 206, 198, 116, 31, 194, 53, 48, 49, 128, 251, 187, 41, 156, 80, 114, 161, 254, 235, 8, 57, 1, 148, 190, 114, 124, 3, 41, 110, 154, 228, 89, 0, 126, 225, 151, 171, 149, 169, 69, 253, 164, 94, 139, 97, 198, 64, 166, 86, 50, 147, 73, 104, 211, 45, 15, 113, 224, 204, 211, 39, 215, 27, 72, 61, 60, 43, 77, 147, 180, 8, 232, 107, 231, 62, 245, 8, 208, 37, 235, 1, 75, 233, 168, 113, 83, 170, 6, 22, 100, 150, 194, 142, 156, 175, 136, 238, 128, 34, 101, 39, 60, 115, 78, 1, 143, 110, 103, 24, 173, 42, 247, 96, 65, 151, 202, 168, 149, 108, 101, 9, 98, 25, 160, 197, 200, 188, 139, 17, 147, 134, 45, 170, 64, 19, 12, 227, 60, 223, 226, 226, 226, 116, 74, 240, 74, 126, 173, 68, 144, 39, 34, 110, 187, 152, 42, 41, 112, 76, 233, 49, 97, 28, 43, 170, 13, 57, 205, 145, 82, 20, 12, 130, 71, 239, 131, 147, 10, 194, 191, 166, 169, 226, 240, 251, 204, 130, 26, 165, 241, 215, 87, 48, 24, 211, 83, 27, 74, 110, 184, 202, 39, 123, 48, 81, 64, 9, 137, 204, 229, 236, 132, 224, 226>>}}.
{{encoded, "42x4SioEV2j2kDsYZLNjeHKzZ5eLzZkCQ6y2ycRvivsVJELZfofkifCApjQZDtYBZCn7joYkkV1vpcbGkzZbxmXzMy8ZR7GkzCw3HG3W8KHZZnhQYDp1wxxQVkZjfrzcNmgqPtLgaio3GFts2W6ptn42yzUkJEFXX6ZFxcvthsYxjGifsP9y77dcvd7QTZSfaFmSknaDrMsMLexvGkhHbimszeEgkVLbceDKM7Aj9RaoaHY3dCC4Q656rftJLGSwdXxGTfzbPY7jmfTT7YZruiXY8tguP8LGJPnMMx2boi"},
{decoded, <<42, 218, 223, 28, 111, 85, 125, 212, 210, 212, 148, 74, 113, 122, 107, 35, 13, 17, 80, 242, 36, 78, 101, 217, 192, 73, 199, 64, 115, 45, 183, 140, 96, 117, 131, 40, 6, 157, 86, 239, 204, 56, 250, 139, 121, 15, 191, 130, 22, 12, 12, 206, 214, 57, 217, 246, 20, 15, 236, 218, 179, 239, 174, 148, 211, 196, 38, 150, 136, 181, 169, 89, 81, 175, 70, 5, 237, 195, 115, 220, 153, 162, 252, 2, 64, 40, 145, 34, 76, 41, 90, 13, 215, 41, 129, 239, 152, 47, 162, 162, 55, 53, 73, 144, 251, 244, 138, 226, 154, 226, 98, 207, 169, 172, 76, 110, 33, 106, 21, 1, 100, 17, 181, 178, 123, 61, 133, 93, 13, 144, 54, 207, 131, 69, 14, 45, 216, 151, 187, 190, 110, 125, 234, 69, 210, 249, 223, 252, 129, 225, 172, 86, 59, 150, 110, 33, 38, 8, 187, 117, 61, 76, 25, 122, 160, 109, 21, 79, 111, 11, 52, 160, 40, 219, 223, 107, 218, 241, 209, 138, 128, 234, 79, 45, 231, 23, 45, 119, 212, 176, 144, 208, 140, 94, 169, 4, 186, 59, 189, 24, 20, 45, 46, 218, 148, 171, 175, 171, 55, 95, 90, 141, 4, 139, 92, 64, 75, 245>>}}.
{{encoded, "GTEinCpHhGt6vP1fCs4vLtdNVka6h6ZcQTYNt9Z4y1Y4bH3WPbutzKnv1ij4nERv5b2RLGJVW8NNCx8Sck56EUcyq8ZzBYnRizMQYAn4gTeS49D5AK3cvgVyZeW8FVCZxZHxfPinA8hYkAC4Dhpubp53X8CTnLbu7yvsDPoKsXAWfHdA4MYnXVGXVJMz48ePEnDgE9Qr7UrJsaADSmqfZ7upu7M6j4YsVJ1g6fP"},
{decoded, <<155, 255, 124, 104, 81, 26, 118, 32, 61, 232, 119, 177, 95, 152, 82, 229, 189, 32, 122, 179, 65, 210, 217, 94, 224, 203, 177, 90, 157, 27, 120, 183, 179, 149, 0, 58, 154, 228, 6, 212, 183, 211, 200, 176, 236, 83, 154, 144, 120, 103, 230, 115, 12, 233, 91, 40, 53, 107, 16, 192, 46, 13, 10, 234, 20, 31, 155, 127, 166, 222, 162, 176, 79, 254, 121, 30, 234, 197, 205, 92, 180, 194, 176, 31, 18, 233, 13, 222, 25, 71, 126, 21, 145, 37, 38, 100, 145, 137, 25, 181, 160, 130, 97, 123, 56, 213, 73, 14, 214, 161, 104, 82, 167, 243, 172, 35, 34, 216, 27, 185, 204, 164, 45, 109, 225, 236, 137, 86, 78, 131, 194, 140, 34, 235, 29, 179, 207, 6, 222, 180, 241, 197, 72, 128, 148, 5, 250, 102, 55, 171, 11, 67, 213, 128, 221, 75, 32, 149, 180, 137, 105, 227, 219, 51, 41, 243, 101, 143, 30>>}}.
{{encoded, "QgTEVGc9FqdMMM7GUdQefkrjoo9dSun3vNWHJxry6u3fNfaZD1GfbTXF9JXJqMYPEWjNKAabw9xB7iv5XrCgRDLGRMkvDNLPMXavYZoRojSFN2tbJWv232mfgppDmfVdS5mJ7thwf8FFAsTpV1QHCMCYm5zUEfMXVczbzBPj8MUGHUHMvJZA6w8CQxniQgYbS1qBXYDjLDpd1pUsmMqMykTHD2LzQt7vE9pPaEpcdG72iakL4CsmS33azBLGaz8rFHfESG84mvqwr99ttn8zLTtfdPE1dmmCgDAiJLEWoxMy6cpuVpLCYEvd6cxaQ1Qcb8HRQGEGwJaC82jZMsbbqTmbKtZGcyrSQmhEXU34oc8qcAZTm5SsJZcHffXzyKME9HrDsQrA3XQt7qXBtcg3VarVMu8jPRvyLtYBfZcFhMvYgaVu5oTiZgX2MMKaEu9jBVUfNYsBwCnETtgBUvc6MKKYFPMfeY6cwGGB9697FzfytSikdRpPN8RETk5bYiZ4zjXj5xfZigYdy7hvon5DivdARh7AqEAKrMMzhKsvrPDyavVfhPTfzQKBGx972ngtEasEzNdytmytQhEfvLXQMk9pMhfHTSe1tW4KmaT15ZmU9qPFrPHdck1nZUuWYUCwqgcjCjFrgjtWdHhHD9JZbpF6zNL9FdXoJ2uffpN6jNQLaAUHs1HTqX91dCVXFrK5pEzGQiY5s4y7NoadP8tL"},
{decoded, <<236, 135, 68, 173, 161, 19, 141, 78, 42, 103, 165, 109, 234, 33, 82, 23, 61, 240, 73, 160, 143, 160, 75, 148, 136, 23, 161, 104, 187, 194, 28, 202, 49, 83, 121, 100, 241, 77, 127, 152, 140, 10, 252, 6, 212, 148, 18, 192, 246, 135, 12, 174, 39, 143, 106, 232, 128, 152, 78, 167, 56, 113, 29, 142, 217, 47, 91, 141, 215, 195, 136, 48, 28, 201, 149, 226, 3, 118, 227, 14, 244, 182, 206, 169, 7, 58, 105, 142, 63, 125, 42, 231, 35, 109, 160, 190, 193, 61, 58, 197, 193, 141, 112, 32, 51, 54, 233, 248, 19, 20, 186, 235, 14, 173, 125, 243, 144, 160, 96, 57, 247, 111, 50, 17, 243, 4, 10, 253, 190, 198, 159, 104, 135, 99, 73, 243, 183, 161, 165, 27, 139, 5, 49, 39, 254, 96, 183, 52, 165, 164, 59, 112, 10, 169, 83, 223, 182, 233, 70, 176, 162, 192, 131, 243, 35, 17, 10, 53, 148, 42, 165, 70, 251, 215, 107, 72, 72, 168, 151, 58, 70, 226, 112, 54, 113, 66, 99, 205, 220, 209, 144, 143, 161, 183, 81, 158, 154, 54, 161, 173, 194, 197, 88, 95, 73, 200, 60, 0, 210, 42, 178, 86, 130, 111, 160, 165, 58, 219, 107, 163, 98, 86, 140, 235, 228, 156, 12, 180, 53, 232, 247, 141, 22, 71, 218, 120, 128, 189, 152, 21, 5, 114, 64, 50, 194, 238, 50, 109, 3, 121, 119, 87, 8, 212, 66, 119, 214, 250, 180, 88, 230, 151, 138, 149, 38, 35, 240, 150, 99, 20, 197, 145, 32, 91, 108, 106, 82, 130, 15, 224, 134, 118, 168, 130, 123, 187, 231, 32, 186, 35, 95, 184, 65, 56, 28, 243, 196, 249, 160, 85, 41, 37, 97, 142, 71, 83, 248, 119, 121, 85, 88, 181, 33, 246, 70, 221, 226, 195, 191, 132, 54, 100, 21, 34, 147, 196, 226, 51, 136, 119, 224, 54, 67, 99, 83, 188, 143, 125, 18, 205, 50, 188, 105, 71, 241, 144, 211, 222, 37, 117, 120, 110, 37, 92, 250, 255, 210, 113, 12, 67, 157, 151, 50, 219, 6, 129, 153, 191, 34, 77, 23, 150, 72, 185, 24, 152, 241, 119, 239, 199, 195, 216, 0, 232, 222, 106, 35, 87, 141, 24, 45, 73, 49, 221, 15, 92, 83, 251, 80, 34, 22, 153, 153, 36, 238, 53, 115, 155, 95, 112, 187, 167, 82, 189, 43, 228, 32, 251, 41, 82, 75, 26, 214, 225, 152, 23, 92, 109, 76, 63, 50, 46, 49, 81, 76, 69, 54, 189, 253, 5, 46, 70, 195, 161, 243, 168, 166, 112, 71, 148, 173, 114, 245, 73, 192, 123, 209, 61, 133, 165, 39, 213, 192, 202, 66, 127, 55, 72, 101, 203, 244, 226, 120, 3, 51, 54, 205, 49, 83, 154, 103, 82, 74, 135, 187, 231, 197, 90, 106, 28, 238, 153, 30, 130, 87, 204, 101, 195, 107, 234, 157, 135, 161, 128, 114, 152, 149, 202, 249, 47, 77, 103, 194, 136, 110, 99, 45, 175, 156, 218, 242, 195, 37, 50, 112, 133, 49, 21, 148, 237>>}}.
{{encoded, "75Pz8P8eETSNKkGq3srDdRegrSQWAXtW1uf2ZURap6bnJDJZkah37HxfETogk4gai2Hesev9zeSCxPATTgceiTx8oJ5jAV6mNUyUjR8ACiobuUVu7fo6EVWi3sj6divaMaN3KjwqWqHQbS3G9yBMvF4Abgfeg7MzwMZxmainWBHGXrxkSDCHrrmjjxfStAQpbSRfTuTrrcUXxaULNLW12zMgR2qSgFyJSykmTeGpBe7fAugCmB8YGv8nvbvyA8CHbbWV6WShFnyoEQWc7LhJa9XACAdkLLZT2ZKAK6kpMb81nV6BSKUXa8WL3eVQ5BWwdf34LFqL7W7uy9sQxpCnx57wQFvhWUnCMDznS3jmUhfjmDXuud4kGeSKa5h6TS9zjHMEm9YbkeQCnCHKf8v1bBEy6zwA6DDkqFduAcWQia3Rbj6AgKPw3R54"},
{decoded, <<76, 119, 21, 60, 111, 30, 204, 112, 242, 32, 134, 112, 132, 234, 53, 140, 97, 0, 195, 152, 248, 6, 16, 215, 240, 240, 235, 231, 213, 253, 69, 22, 221, 122, 139, 192, 129, 86, 26, 82, 209, 128, 188, 174, 8, 135, 168, 86, 199, 178, 176, 44, 137, 108, 142, 38, 238, 243, 85, 111, 219, 187, 27, 50, 239, 27, 183, 233, 204, 87, 81, 2, 56, 189, 96, 117, 253, 8, 158, 154, 156, 198, 17, 170, 145, 164, 200, 52, 80, 126, 51, 86, 171, 184, 239, 154, 54, 151, 143, 182, 189, 209, 81, 5, 112, 250, 7, 52, 34, 134, 7, 231, 176, 83, 107, 171, 224, 146, 156, 156, 37, 85, 175, 132, 181, 112, 151, 153, 221, 65, 49, 231, 125, 132, 22, 6, 36, 181, 91, 216, 217, 87, 232, 15, 54, 127, 69, 229, 170, 68, 149, 137, 197, 34, 197, 66, 27, 57, 11, 152, 97, 210, 221, 52, 55, 213, 24, 144, 2, 33, 180, 183, 141, 101, 115, 43, 195, 104, 123, 127, 170, 21, 146, 8, 242, 157, 9, 163, 78, 40, 193, 123, 254, 10, 201, 171, 47, 166, 40, 155, 154, 9, 226, 25, 99, 238, 185, 170, 164, 97, 128, 234, 178, 46, 228, 211, 204, 224, 208, 214, 9, 144, 11, 141, 151, 45, 233, 32, 65, 135, 140, 122, 121, 220, 241, 141, 47, 69, 89, 135, 219, 239, 134, 43, 207, 64, 48, 161, 180, 175, 205, 170, 114, 103, 132, 255, 184, 182, 196, 104, 241, 60, 160, 191, 188, 5, 43, 157, 225, 60, 158, 37, 131, 245, 146, 186, 12, 216, 66, 22, 225, 145, 193, 164, 178, 152, 6, 158, 66, 5, 243, 6, 99, 87, 149, 12, 237, 7, 223, 30, 126, 173, 55, 237, 118, 81, 111, 139, 75, 207, 231, 19, 225, 23, 202, 67, 224, 221, 223, 175, 186, 187>>}}.
{{encoded, "HFBqvvNxrSq97bGL2SvzjTuaPYmKAgNGQBepX7W8NTQt2Aso56M5XzBLReBegNc4BtfGYggFRuBFyqitWPth6LfgAEW8X4PD7jLp7AJBtUfqEQML7ihJhgnm8q5M6CajeqZ1fMJLiWVdTr35KReTxFQrTsdVfGwjZJZakazbwTKHwqwZrr9yEbAE6Yd3j3gP1v8jZj9o8etpNwCWKmYZUkWGraW868kvjEqD7BofoRCBLcekifRtpTAYNVueptuTYvptLT1BV4eAg1cyzuYjGueaG792zAKthpZn51DDPcLYw2VL7YpYdQX83v2ocx5hwphqeHsD4iqLrKUsgYrWrKYAmSNYB5MF4Zrajx4Q1c8M3nVzVLyDnTBLUc6vBzhUpzZPVfYQZaGFgbVtCFScx9gzv1NKrAUKKcjBAL22NiQudrsyAon6gWQhtjCQDxsfm1Se8tdayPj886kF83RSg2B64K1MjaiqsmCLiKUbo76WF41NDvQjw67H5DZgp22As3L3RWA5SgLRyhDGQ3HGHD3Bi4WiGSSZWNLVUTqg1kajEFS5pkbpqjzz5biNQjmwENWHKLna8t6WBmeW9pP1jQRaeTEomHkQLkaUk5sbETH1dxnV2R35NGsZGGQnTXygn8qXH1eH6izdF3sXPqFhpuv8CbbK4Kuq6cgg5E53s7Ak4LLVCr65Xj9BzxbT71oeVdntjVD1bcBnX6DEaAAkX5tzajk2izQsngae6bDxAtjYJfX1FeZHuXVLCvWyJhyAuxsDtt2MGp1Hctw6b17GPN93JXRXqFkUeutJhaqWTtJsX3qC1biVSf5weiHima9gpvAcYkh2nXcDXAp9bAyNryig5DDR1s9MpNj1zvpFA9Xqs3DXMaTxRi2pGLJ2xjhNUFLSX8jBtgZGQoXMwMcNFr5t4mwCDjCpbU4gMnwjuQDf9aE2DPiQdiXBxaseehhe6KMfauJSBuGoyQjqgcnKBV4BydeMhYjVrYXmzGtJp4cs19HguiztH9HYhiENr393TzccFuRWNajPCh2eAH1hcdBzSuG2JTo3MDceRxpAhVo5D3xYnSxm9iQSLYe86jVDfjXVb8QqSZY1vaU89nFjFfvfuHeU6dwL5ehf9dAUsCZyr56vzJaSDnas79eJ1b1i5eJN6pCdAntijEMnkGUMyv6kgz2XedZmcRBZw2s3AFhs1a48T4ZMbdzERc7XrYqf19V9GS3jExfbCLu7"},
{decoded, <<146, 173, 44, 153, 203, 116, 187, 31, 64, 204, 164, 242, 129, 78, 147, 68, 190, 50, 51, 90, 1, 136, 189, 175, 142, 243, 36, 230, 39, 82, 6, 115, 109, 189, 173, 234, 205, 219, 43, 193, 13, 157, 14, 168, 122, 188, 19, 226, 140, 70, 72, 31, 57, 100, 180, 97, 114, 87, 80, 29, 20, 203, 126, 125, 145, 60, 155, 63, 141, 254, 195, 218, 165, 20, 160, 37, 210, 117, 249, 51, 123, 124, 250, 64, 91, 72, 133, 5, 97, 86, 53, 147, 1, 177, 207, 235, 211, 148, 172, 146, 202, 33, 201, 23, 63, 72, 44, 61, 136, 104, 171, 228, 225, 142, 5, 244, 68, 157, 148, 233, 141, 208, 8, 172, 180, 214, 123, 65, 238, 123, 100, 28, 108, 203, 81, 197, 180, 25, 159, 65, 127, 199, 246, 228, 7, 13, 183, 69, 234, 31, 209, 158, 61, 192, 181, 42, 103, 246, 197, 125, 99, 236, 243, 90, 45, 205, 126, 244, 229, 27, 235, 73, 33, 178, 64, 195, 172, 75, 150, 84, 120, 233, 117, 13, 109, 197, 220, 36, 13, 3, 109, 113, 159, 230, 78, 89, 112, 12, 97, 59, 122, 103, 193, 196, 188, 180, 73, 222, 72, 40, 79, 80, 67, 237, 210, 194, 34, 184, 179, 94, 10, 118, 239, 246, 39, 229, 76, 239, 192, 218, 94, 4, 155, 157, 114, 249, 52, 6, 40, 27, 99, 39, 123, 135, 116, 107, 192, 204, 131, 128, 234, 213, 252, 6, 32, 240, 24, 234, 223, 115, 68, 168, 121, 201, 51, 110, 113, 230, 131, 103, 63, 141, 162, 222, 44, 106, 242, 144, 85, 221, 221, 236, 10, 30, 69, 119, 32, 146, 52, 142, 218, 101, 202, 39, 185, 202, 24, 201, 111, 171, 43, 207, 202, 9, 75, 98, 57, 221, 47, 25, 185, 222, 99, 248, 176, 160, 31, 82, 253, 61, 170, 62, 200, 131, 184, 123, 79, 234, 24, 198, 243, 19, 135, 56, 13, 192, 99, 62, 108, 204, 40, 38, 2, 78, 158, 118, 93, 241, 251, 146, 115, 197, 55, 33, 114, 59, 41, 64, 185, 87, 177, 92, 105, 181, 164, 208, 38, 13, 211, 120, 121, 113, 239, 192, 242, 82, 207, 239, 105, 128, 164, 107, 171, 197, 73, 158, 147, 189, 112, 63, 180, 119, 31, 208, 245, 200, 91, 174, 35, 213, 227, 45, 30, 34, 134, 233, 191, 38, 78, 152, 22, 73, 92, 208, 39, 147, 71, 174, 191, 224, 97, 97, 121, 233, 80, 57, 27, 19, 155, 228, 228, 147, 21, 6, 49, 20, 81, 96, 155, 198, 129, 57, 232, 242, 22, 168, 231, 242, 48, 109, 116, 157, 94, 174, 191, 3, 16, 100, 228, 71, 68, 46, 39, 87, 132, 110, 62, 163, 217, 186, 82, 10, 155, 130, 82, 138, 191, 202, 125, 212, 4, 11, 214, 242, 167, 198, 225, 17, 234, 205, 86, 138, 225, 175, 180, 141, 255, 221, 143, 247, 208, 201, 193, 167, 251, 112, 148, 64, 42, 130, 84, 93, 41, 219, 32, 200, 222, 105, 53, 118, 84, 141, 112, 128, 242, 5, 107, 190, 82, 83, 200, 156, 180, 94, 79, 134, 179, 13, 5, 170, 82, 38, 98, 111, 125, 125, 198, 107, 214, 75, 222, 167, 198, 114, 146, 251, 118, 164, 226, 154, 244, 250, 14, 65, 190, 36, 172, 180, 69, 219, 31, 162, 158, 21, 111, 193, 10, 101, 61, 214, 200, 177, 70, 146, 240, 43, 131, 106, 24, 221, 59, 212, 39, 156, 52, 15, 62, 197, 6, 147, 59, 213, 250, 97, 215, 18, 35, 149, 99, 193, 200, 38, 32, 117, 170, 230, 35, 186, 47, 74, 78, 154, 136, 66, 18, 240, 247, 159, 161, 241, 179, 41, 137, 9, 230, 196, 215, 17, 159, 206, 20, 64, 67, 4, 198, 184, 118, 31, 252, 242, 25, 240, 33, 169, 125, 194, 179, 222, 191, 64, 111, 6, 199, 70, 236, 15, 160, 128, 232, 43, 83, 89, 167, 252, 225, 147, 108, 49, 185, 221, 7, 228, 90, 123, 135, 122, 61, 189, 2, 30, 244, 109, 32, 85, 17, 201, 47, 33, 239, 15, 109, 82, 92, 150, 66, 223, 232, 65, 64, 255, 113, 214, 160, 223, 43, 126, 68, 247, 3, 222, 203, 119, 158, 158, 168, 65, 252, 38, 62, 233, 74, 105, 128, 198, 17, 97, 182, 236, 100, 255, 76, 26, 61, 194, 176, 197, 55, 211, 11, 24, 74, 242, 160, 37, 113, 253, 195, 194, 133, 75, 10, 38, 183, 86, 171, 27, 73, 136, 195, 88, 202, 34, 112, 191, 207, 171, 199, 43, 71, 156, 72, 92, 210, 83, 209, 218, 183, 188, 79, 215, 196, 42, 213, 62, 254, 216, 130, 130, 200, 75, 129, 215, 122, 212, 196, 182, 236, 105, 148, 167, 211, 77, 139, 66, 210, 128, 197, 22, 102, 216, 240, 212, 55, 113, 138, 79, 39, 174, 100, 8, 114, 133, 168, 230, 169, 163, 147, 237, 31, 119, 81, 74, 77, 254, 253, 78, 222, 62, 224, 225, 207, 14, 80, 104, 21, 87, 123, 82, 213, 60, 117, 19, 129, 208, 141, 55, 133, 22, 181, 9, 166, 8, 46, 138, 104, 125, 31, 170, 147, 35, 217, 83, 78, 30, 46, 76, 247, 150, 147, 234, 8, 76, 89, 34, 113, 20, 154, 18, 242, 89, 81, 82>>}}.
{{encoded, "4yuKvdFDXug7hq2CJ76ENm8EHYaNP3wZCpRCTZkCCsSQTmFbo52hzmciSZw54KoLZNtKzmMe8QHiN6WtctNYLkupvWwSsRqabAAAVNgrBdoPuJn9aswcf6qzmF2PQguUwGFRzcWvc4ZjTT67giBrbCutAUUji2MShrSX9xtnQLMYieMoUD7JvQPoLQHRXEcHp52A6taBaN8DXGVfDcpUsdHihexPwjT4Xrht4fJ9thMhH1Vi3eVhEW5jxvYLnCny1cKxbuqisBg92VkGTkkqNoE2wMRpkY5YDhVJ1KtM3iWjH1NZTtjaEqYyZtj6qVgwRetn9EYLVbnYec3875okJ2SnLBVxD7WFYAe9drxVoLHWTcM22ajrWbXh8jHnnPzuEmXK6xdXnqS4CFd8gg2DnrWyB8C4F3maNaGqNqC66aGCbLAYsMQaXFGgBd3oY1zR6GiP5xJkh9paBr9Cqh6GFDpEgdVEYWPz89oVDXcFrS5raYjGxrnq2eVeEd9Z3DiYEZsD7sC9AziUUDCxnTgF6abCdrAvRM7MXz5WjVjoACmvAaSAZvPjWCEDxC8TGZTRQXuBcfeufS6rcAcftpg9wvVWxmoux7MubNsRnYvxFUuNz4Y83LKLh4HqAUH1x84SvfMbHKyFPr4NE1dUg5WyV1gmf1tQaVxb5n35Ab"},
{decoded, <<230, 32, 175, 57, 209, 94, 222, 96, 241, 232, 140, 4, 160, 39, 200, 242, 107, 51, 42, 50, 17, 57, 74, 8, 109, 16, 230, 220, 126, 154, 29, 177, 249, 51, 25, 231, 131, 255, 121, 240, 234, 187, 216, 58, 138, 190, 79, 46, 26, 228, 204, 149, 217, 85, 79, 201, 222, 6, 191, 47, 32, 75, 172, 251, 40, 56, 136, 228, 91, 73, 96, 121, 26, 123, 222, 204, 102, 26, 41, 105, 65, 220, 16, 39, 14, 48, 179, 230, 8, 64, 128, 226, 127, 242, 50, 88, 113, 135, 252, 194, 218, 201, 229, 194, 192, 31, 108, 126, 185, 56, 196, 188, 67, 44, 160, 24, 123, 18, 192, 247, 46, 130, 25, 15, 183, 17, 5, 205, 85, 131, 28, 82, 47, 81, 74, 42, 107, 146, 248, 147, 253, 42, 127, 196, 17, 116, 191, 74, 114, 74, 88, 241, 39, 2, 52, 177, 145, 9, 65, 36, 221, 197, 169, 115, 32, 97, 249, 215, 33, 96, 175, 151, 183, 53, 133, 161, 55, 151, 39, 234, 252, 231, 14, 184, 175, 190, 50, 173, 4, 42, 192, 128, 93, 241, 158, 180, 232, 136, 127, 103, 168, 109, 196, 125, 93, 34, 170, 112, 1, 14, 238, 185, 75, 194, 106, 217, 241, 33, 52, 9, 123, 241, 208, 51, 174, 205, 168, 218, 157, 190, 169, 198, 51, 28, 91, 15, 172, 38, 104, 43, 206, 196, 174, 141, 23, 114, 1, 166, 145, 0, 153, 27, 6, 186, 103, 240, 195, 236, 131, 35, 179, 85, 50, 159, 220, 106, 88, 144, 53, 23, 103, 208, 241, 11, 12, 8, 27, 234, 247, 255, 65, 80, 162, 15, 128, 49, 24, 115, 163, 45, 79, 93, 44, 44, 178, 112, 37, 103, 142, 213, 6, 197, 142, 225, 35, 244, 25, 127, 197, 243, 57, 185, 242, 76, 56, 140, 93, 157, 175, 74, 229, 120, 205, 151, 210, 174, 208, 230, 42, 60, 181, 204, 173, 170, 29, 230, 129, 128, 141, 214, 126, 162, 132, 3, 97, 52, 29, 131, 210, 120, 8, 65, 117, 223, 247, 95, 64, 67, 36, 220, 205, 20, 209, 232, 106, 217, 55, 156, 251, 61, 25, 128, 164, 216, 129, 109, 198, 21, 142, 160, 28, 88, 70, 44, 187, 200, 146, 21, 18, 93, 115, 8, 121, 143, 15, 64, 170, 127, 14, 80, 137, 46, 75, 165, 200, 143, 89, 90, 172, 202, 202, 42, 177, 53, 103, 241, 185, 136, 54, 127, 45, 16, 191, 36, 92, 238, 116, 109, 13, 136, 88, 150, 123, 114, 181, 197, 199, 120, 186, 239, 12, 245, 27, 55, 78, 98, 255, 175, 155, 239, 162, 165, 236, 241, 108, 29, 155, 196, 134, 42, 11, 112, 31, 42, 3, 25, 20, 189, 177, 207, 251, 71, 108, 15, 95, 223, 2, 242, 171, 200, 28, 130, 177, 234, 189, 248, 179, 181, 26, 226, 86, 41, 57, 207, 109, 92>>}}.
{{encoded, "3DVVaZqFXuLAsEkQvbfBfFRx1HHhAFnGCPEFgpDhM8VViJG4fRbzLSwHHP4tiYZxqCZc2AuHPK4KxiQRQ36fs6TR46qkVm6XoZygJ9jHRTgsWZ31bBL253CDjGZgpnQ9t2Ecf7eTA4z3MDdjXr7Ms8GAcBRiCd25pqSLW2m7Ankwj6RhXUKdiRGKLbVBqdTi7Z62Q8FutYwtci66SMcQxkELTdK7783yVxD4VooVQzd3xANZLnYsfTtWBxZRa2UA7phkvf8CVFkXAuQB2yGaGUgTCPY6RxzXuMj1ZLqJ7KNxZkYe2WdtPCdCXHBR4AT6gHbStEHgU8PmpN"},
{decoded, <<231, 142, 79, 196, 220, 0, 33, 138, 55, 60, 158, 88, 45, 209, 166, 54, 211, 55, 213, 37, 220, 248, 253, 46, 73, 138, 192, 236, 102, 102, 193, 232, 199, 188, 48, 143, 173, 66, 177, 107, 68, 29, 156, 45, 69, 251, 225, 22, 151, 111, 65, 54, 190, 92, 142, 63, 59, 143, 255, 15, 67, 194, 109, 252, 139, 112, 222, 92, 170, 238, 242, 123, 138, 170, 149, 241, 127, 161, 197, 148, 219, 223, 122, 101, 212, 161, 38, 146, 135, 186, 203, 247, 147, 199, 202, 59, 221, 229, 126, 53, 125, 191, 135, 137, 175, 23, 142, 20, 174, 100, 242, 52, 213, 220, 165, 170, 37, 199, 165, 2, 69, 1, 253, 41, 7, 243, 20, 141, 24, 145, 55, 95, 29, 11, 145, 164, 39, 157, 9, 24, 120, 198, 210, 206, 97, 13, 50, 255, 181, 239, 159, 214, 161, 85, 38, 105, 204, 68, 185, 159, 7, 56, 220, 36, 145, 64, 159, 55, 10, 54, 219, 139, 126, 51, 29, 30, 167, 25, 191, 67, 17, 85, 209, 33, 150, 25, 3, 64, 186, 47, 205, 175, 157, 20, 101, 108, 58, 30, 146, 186, 55, 216, 187, 165, 58, 55, 210, 158, 166, 174, 29, 13, 71, 185, 228, 7, 101, 195, 49, 174, 91, 169, 196, 23, 65, 144, 178, 185, 177, 153, 10, 223, 113, 37, 17, 183, 194, 153, 61, 72, 171, 2, 26, 107>>}}.
{{encoded, "76xiouig6X1fGBvW8BGHJjsfj46k4UUAUxkH3WuimPNSgd7z9Ptjeei4Cbjj1iQRYHZULZiQADT5Y7aETw32t8KSKECNquR16HRit9NHnWHNexS6w7dY6BVcFjayFkwpejvJSEdVuELuC1zMdenTdR2nPTqQLP1drFbay52qr1GckU3kMDzEaVGUPhFvLm8WH2zAbSGxVifPP9uvfx8AN4T5XcVapsckygvXxe6yjguEdYsgSpauVZeEK1GFmEs15RnwYBDwz4ASrqfnyDM6J7oLhoJTv7xaHNzH1X4BxHaaWuPNwsYgLuujbUPbsi4SzeHrypchKZFFR6tckk6XGNhb4Faa8JTERLvPJwN7KZCCwcTZJkUyHrWVzrRGTTgZHfEttxxDJpKEQGT5bXmDwXw1FbWmtcxjrjmWNeSpUkSmMZzsFsfWJXD3vK9ZdzFShKouRqGnkxk3x1NQqFzWpS1Qq1n9BAPf47iFbRqVceKHNfjPExVBJpEF9rzosQHydvXDAEK9YGm8Nh467Xr1LR8xKCfF4obD66RZHhQ5W6iBm1GRTxJDWRoU9WWDZ1CJBHT4NC5okEdCEg8iJkLRyq9GqDcSZXrDQc7y5VgtfLnpxLGBBVGXEsvZRe6aDkQTZaGRoJGYSk7x2veu7u5fVzfMWM4txgLasQ4GY9f295BZFKw1kkXo5pYnVn1fgnK7fR5RvBUNTcxk1nRWHMQieyvAwRic8fcFnFrCQbQr9AG2UjnobEtVEv6zcyhwRnJjmXghwmRkhagwfeb2rTUp6mAHykQE8iqW6Va7nBaYt5L6xqawyx5Zgc3DNGQydev4RiB35dwPRYFb72scXrFYxThbZ6nL2eUcuH6CbPLZxG7Z5dw8jDnDrHPgYLoyHQyxYfKX3fWPPug229BhwR7iypVLE6QyPzE92uzM4RwU39qpFkAM49dFxAivrUNGkLvkAXjYYYxySLmEM5WVd6hKo1EezJSY9jSP"},
{decoded, <<233, 184, 9, 149, 57, 58, 235, 172, 56, 230, 163, 98, 107, 221, 76, 133, 163, 45, 125, 225, 98, 109, 88, 192, 62, 105, 74, 67, 116, 196, 239, 40, 213, 202, 42, 41, 64, 27, 114, 95, 19, 104, 71, 84, 32, 56, 181, 57, 14, 14, 123, 175, 218, 124, 151, 42, 212, 198, 51, 171, 186, 199, 95, 175, 254, 204, 16, 229, 87, 187, 54, 21, 78, 99, 208, 5, 245, 181, 75, 45, 35, 3, 183, 35, 152, 192, 188, 4, 79, 75, 73, 16, 53, 204, 238, 119, 1, 159, 179, 200, 34, 164, 218, 124, 98, 22, 109, 13, 2, 121, 249, 75, 215, 209, 20, 84, 101, 216, 56, 155, 62, 206, 226, 51, 173, 77, 218, 72, 186, 16, 247, 140, 222, 95, 154, 224, 158, 220, 147, 1, 78, 149, 242, 80, 239, 99, 17, 207, 253, 158, 93, 13, 95, 168, 30, 175, 147, 99, 176, 96, 181, 97, 206, 132, 56, 124, 23, 37, 221, 211, 35, 157, 193, 225, 79, 123, 198, 197, 4, 28, 92, 70, 122, 176, 145, 89, 43, 25, 169, 64, 66, 151, 65, 61, 239, 151, 205, 114, 157, 2, 200, 48, 115, 198, 40, 181, 213, 193, 73, 59, 27, 129, 250, 132, 188, 194, 229, 230, 242, 117, 1, 107, 159, 47, 222, 163, 93, 50, 44, 186, 215, 49, 4, 255, 248, 19, 139, 228, 53, 195, 229, 30, 222, 199, 201, 12, 15, 0, 96, 172, 44, 31, 184, 210, 160, 248, 247, 45, 84, 170, 187, 66, 229, 156, 67, 168, 30, 93, 139, 151, 156, 135, 60, 212, 67, 242, 11, 49, 79, 70, 180, 87, 10, 156, 17, 228, 24, 237, 221, 124, 40, 51, 203, 164, 127, 196, 193, 114, 16, 21, 104, 118, 223, 54, 134, 20, 76, 147, 50, 253, 182, 195, 213, 205, 51, 157, 61, 174, 69, 154, 185, 19, 75, 66, 86, 38, 37, 158, 46, 24, 90, 73, 176, 99, 24, 217, 126, 15, 97, 15, 254, 13, 69, 150, 138, 135, 134, 215, 185, 6, 28, 56, 216, 138, 179, 121, 140, 21, 240, 220, 183, 141, 10, 35, 195, 28, 90, 225, 62, 79, 198, 103, 144, 167, 229, 60, 30, 1, 248, 42, 212, 226, 192, 102, 253, 96, 54, 71, 47, 83, 30, 219, 170, 48, 158, 184, 216, 43, 66, 27, 96, 50, 32, 227, 159, 215, 166, 22, 1, 57, 36, 207, 245, 105, 215, 169, 105, 189, 240, 47, 249, 20, 252, 158, 138, 25, 11, 231, 178, 217, 195, 195, 206, 221, 113, 58, 2, 134, 116, 39, 31, 223, 76, 172, 110, 146, 74, 143, 74, 248, 43, 89, 212, 144, 145, 217, 243, 253, 241, 154, 156, 110, 183, 149, 239, 70, 130, 238, 189, 104, 183, 219, 206, 208, 111, 226, 232, 197, 53, 100, 154, 136, 248, 58, 152, 182, 142, 27, 85, 214, 25, 1, 47, 188, 152, 130, 239, 168, 112, 47, 235, 16, 120, 12, 13, 187, 235, 149, 219, 73, 213, 252, 4, 188, 63, 114, 74, 192, 156, 218, 169, 70, 88, 38, 1, 148, 67, 59, 227, 61, 182, 114, 74, 41, 237, 191, 115, 186, 11, 141, 225, 209, 182, 160, 252, 172, 141, 38, 163, 152, 157, 54, 42, 14, 170, 104, 13, 157, 143, 247, 151, 175, 62, 2, 113, 175, 2, 84, 10, 187, 239, 183, 46, 202, 194, 28, 115, 139, 113, 185, 141, 85, 9, 237, 113, 179, 67, 121, 154, 241, 201, 61, 128, 165, 49, 141, 238, 149, 153, 89, 63, 63, 220, 9, 4, 234, 174, 221, 5, 232, 226, 232, 133, 36, 119, 108, 84, 215, 96, 231, 42, 85, 244, 199, 146, 217, 55, 238, 151, 227, 63, 228, 43, 65, 122, 7, 237, 84, 162, 245, 246, 175, 169, 26, 102, 115, 214, 11, 56, 179, 7, 72, 16, 23, 184, 89, 171, 230, 50, 1, 57, 52, 40, 246, 60, 100, 74, 54, 187, 33, 117, 134, 169, 188, 30, 38, 33, 13, 69, 48, 172, 66, 218, 20, 231, 175, 67, 141, 97, 213, 214, 104, 169, 208, 30, 154, 51, 118, 20, 55, 70, 229, 20, 122, 226, 180, 34, 63, 130, 65, 6, 118, 26, 114, 119, 216, 105, 248, 160, 144, 146, 248, 193, 201, 184, 56>>}}.
{{encoded, "A1ewqcLjqwffNWir615qY9LL4XMTkFQiMGtrqofegNX3HFi7HDyDQJDzRLg1RYwS4pFuapWSJGEcp65rav9F5mBTXAyajWMxmvQW33GKApkT1K3mGTBuXYohx7jcsWhMD8CsWaeRuhFFtQYxyBFUZyWpsvAXnj17uGVFcJAncnhojKABPThJ4wNgfonBqcyJqXtfVtqEQtUzbdpTuRw6upENPhkXB7J99rXqKQmPCU7BhPAsDg19BRQDMMv59pwmZHDWA957PTpeRPSh9XCjkaLwnVknHdFG2qVUZqztoKCb3X2vc4SqHcveqgXP8Vh91sYQAJ6Zr9kuBekwNA5bRJ4mZv2FywFfrSU4PyXH4PrYvBYAnAY6soB4esrqRnd4Cc8kwaZfwvif4f2ZuidLXSTWmDb2GNd35Lzwsxe4u4K1dPpTGKHXggi6USWyqqjPYGBJAuDmJQGSiTwXgK8LnnsiEr6BRLM57zu7Wf8EuuqjtKJX5ujKJZKGY6uBA2ytmwzfyAfwamQhYmnP4SErW8S1tEsLKBZDJg57tqSsGvHop8LoXymBFNiikNmUtUt5V6jVT4R6ueFkvFUfCNHJHbTjuHNtF4W7PUgiU4cJJN26iWaCibeG6nNgnbSWBfLWxqyzJXFcQmG7s7w6jjAuFannh8BhmuGZpQSysYAvUsKXjy"},
{decoded, <<236, 254, 193, 194, 54, 136, 75, 238, 64, 40, 57, 55, 10, 95, 206, 130, 18, 238, 35, 156, 38, 118, 252, 174, 9, 139, 113, 117, 245, 217, 129, 62, 223, 255, 48, 191, 149, 40, 30, 131, 184, 133, 79, 75, 128, 72, 185, 28, 254, 204, 220, 210, 90, 63, 246, 197, 166, 71, 161, 25, 56, 104, 253, 159, 178, 188, 62, 108, 244, 13, 112, 166, 198, 125, 107, 50, 118, 152, 158, 217, 32, 107, 44, 66, 185, 114, 114, 206, 69, 244, 115, 193, 77, 214, 117, 1, 126, 232, 178, 222, 236, 67, 202, 39, 195, 36, 136, 115, 172, 231, 91, 248, 239, 214, 239, 54, 45, 255, 4, 31, 19, 175, 175, 156, 94, 207, 157, 206, 17, 17, 186, 52, 146, 170, 174, 81, 78, 195, 240, 182, 253, 122, 55, 3, 5, 67, 108, 51, 221, 212, 86, 233, 57, 113, 176, 105, 237, 141, 119, 222, 43, 155, 197, 192, 43, 59, 24, 214, 172, 24, 177, 240, 40, 19, 239, 107, 129, 182, 170, 107, 96, 95, 165, 44, 58, 184, 187, 58, 42, 119, 61, 25, 196, 218, 152, 102, 194, 24, 15, 144, 82, 190, 124, 102, 191, 142, 212, 168, 28, 28, 226, 100, 66, 46, 25, 52, 227, 206, 132, 50, 121, 5, 80, 59, 127, 63, 25, 16, 27, 63, 117, 174, 42, 124, 169, 66, 68, 103, 1, 144, 251, 111, 196, 229, 148, 160, 122, 90, 247, 128, 236, 13, 132, 239, 71, 146, 141, 122, 90, 32, 46, 21, 220, 178, 179, 223, 84, 80, 114, 206, 15, 111, 210, 112, 127, 47, 51, 94, 36, 96, 159, 105, 73, 106, 126, 107, 230, 193, 81, 122, 167, 108, 129, 58, 255, 191, 210, 5, 173, 223, 78, 231, 40, 5, 208, 158, 167, 214, 22, 234, 36, 150, 217, 69, 231, 25, 10, 100, 146, 253, 57, 8, 22, 84, 9, 80, 169, 24, 251, 42, 56, 145, 248, 133, 4, 216, 103, 40, 100, 61, 203, 5, 72, 86, 223, 118, 202, 187, 55, 149, 243, 115, 38, 105, 23, 39, 161, 81, 208, 7, 69, 181, 235, 164, 104, 7, 201, 53, 234, 128, 201, 6, 48, 70, 215, 57, 55, 51, 227, 30, 100, 97, 234, 127, 131, 221, 169, 150, 71, 84, 8, 181, 95, 212, 38, 232, 14, 222, 100, 22, 228, 241, 135, 147, 39, 94, 182, 48, 148, 63, 172, 112, 50, 227, 28, 32, 169, 36, 227, 106, 223, 229, 8, 200, 121, 34, 3, 147, 203, 93, 32, 51, 75, 128, 180, 69, 57, 216, 194, 0, 178, 57, 151, 97, 187, 151, 107, 14, 224, 177, 76, 2, 92, 1, 45, 176, 31, 252, 102, 203, 121, 64, 57, 152, 20, 136, 35, 188, 11, 34, 8, 190, 44, 21, 0, 148, 221, 34, 85, 255, 211, 212, 49, 85, 117, 224, 187, 204, 236, 244, 73, 101, 153, 108, 2, 254, 240, 66, 82, 175, 244, 132>>}}.
{{encoded, "7qqGaWavYgJBf8Rtr4jqLykpYbumrpPE8aidKMvbjVGF8GpebE3izF3GTojJ5LZ4na9qj33E4fdTVSEowriSV5vKL8euxp2a69E1KtEj9oscfxyiEfQetFyrKXpBVUEPBTPyPZ"},
{decoded, <<59, 33, 228, 92, 174, 112, 17, 159, 3, 212, 83, 54, 136, 10, 23, 245, 188, 54, 52, 108, 17, 65, 0, 42, 33, 72, 20, 222, 129, 132, 211, 242, 41, 207, 129, 110, 171, 156, 135, 7, 136, 77, 192, 150, 236, 236, 169, 126, 31, 11, 244, 87, 60, 219, 27, 64, 211, 111, 127, 132, 92, 164, 166, 170, 158, 149, 124, 29, 127, 2, 28, 159, 117, 217, 181, 67, 89, 191, 221, 10, 207, 132, 136, 80, 186, 127, 232, 90, 20, 253, 108, 102, 212, 124, 147, 74, 117, 76>>}}.
{{encoded, "2DGUKSy7A1AWL3PSBosoKUQ3kqFusqTeJ3S75Byw3D1srhSD62oXWwbiYcy2GUSgd9appJKTBAJQt39T79iUczbAoKSZubupYMBcaZjF15GbHpunmCLLXn8mRLxZanG264toL9zn5mo4FUBeSgtCUhvBHbFXSMSCGBmEqDypDxpJhm8Jttzw7hfgwKV6Xa6byYn7TAkWuVj2xpPN1z7XndpocUGxvEqV4DtdYvCbHKu17CYh3HfDanrvzMjuTWRfqdUkze8YMEytfp1LMyPF37BY2YyZLzMAoTEFdEvWZvuH7nMYtitj1kMD852ANLwPnQMTLcLQ3nKi4ykSDdahfoFjRcv8fbH3DkS9yd87TJKEMv9SFDCQV5CGeVRVKgnnn3XGPrzsaw9s4kDY5dYmeRLsz3CePFh2CXfcpb1JEU1nTdTeaq5RzU8QZwjavXZginj4HxxM58Ko97tNrRm25d3GSCdaMqAQumUjeRwvD4Ghuhxf87er6kuxGRJHhusSpn1x8NVxwLEQXtVsvRfeqFFxHTiMjRqSN476sgtQRxnD49pd9HiBpzmkDsxj2M2E47iBCuyDe3JRHJh1LLLiGVQiS7kRFANRH3YRfvukZzSX5Rp8nDJuY8z1WSFUbbGHuJT76MAsShH1Uj7LMZ4jrMC2Av9By9EcoK82uW3FhzfsLrB3RZ4FVZSLCUgSBLB54DTCy9AU2VAqXoxmcapgnVNaTk7BkrmcpEawMvbMUMyUHcGoxHDJH3YCsNE5ofkcALo5dTuDsKiAauvL82hHVuUPx6pdR6BHP8b1C4ymcsQ763QyaH7qv4AmQM6CvFa5CmZJKGHtHoNX3nUKjVrUDusYXbfKXpxzWzukqUEk"},
{decoded, <<95, 141, 174, 0, 103, 200, 30, 177, 138, 213, 77, 93, 223, 68, 124, 44, 186, 20, 167, 145, 51, 250, 172, 119, 160, 157, 164, 21, 111, 145, 207, 178, 209, 51, 80, 57, 22, 131, 122, 63, 18, 70, 87, 6, 199, 12, 154, 118, 168, 130, 96, 86, 233, 215, 72, 251, 183, 164, 247, 71, 215, 102, 231, 37, 106, 135, 225, 75, 183, 197, 91, 173, 239, 197, 147, 55, 51, 119, 239, 59, 4, 125, 194, 100, 167, 97, 22, 243, 23, 230, 238, 207, 93, 33, 229, 119, 204, 147, 92, 169, 176, 175, 163, 209, 212, 84, 58, 165, 216, 124, 60, 244, 130, 32, 246, 121, 10, 85, 148, 103, 48, 118, 16, 233, 25, 18, 208, 252, 17, 113, 147, 192, 109, 48, 85, 244, 173, 26, 193, 29, 184, 170, 211, 31, 132, 39, 207, 228, 118, 226, 146, 57, 139, 211, 253, 130, 9, 171, 211, 44, 215, 8, 234, 156, 202, 139, 142, 108, 237, 223, 233, 1, 123, 159, 104, 29, 102, 151, 231, 3, 128, 107, 178, 128, 246, 163, 125, 232, 192, 232, 124, 104, 97, 183, 19, 157, 247, 60, 191, 74, 107, 24, 193, 159, 38, 81, 147, 3, 88, 245, 130, 40, 254, 85, 52, 159, 181, 192, 156, 123, 77, 122, 70, 207, 90, 91, 235, 5, 93, 214, 25, 165, 93, 111, 5, 226, 94, 225, 122, 241, 204, 25, 128, 70, 198, 225, 247, 223, 253, 99, 19, 213, 142, 107, 141, 106, 125, 121, 157, 110, 187, 118, 38, 223, 128, 157, 126, 252, 129, 135, 168, 63, 0, 148, 255, 168, 93, 86, 208, 71, 134, 233, 147, 201, 42, 234, 240, 238, 78, 137, 180, 157, 134, 253, 6, 104, 111, 251, 136, 175, 252, 178, 43, 61, 183, 92, 63, 14, 18, 243, 219, 163, 211, 212, 20, 76, 159, 43, 123, 84, 128, 231, 184, 130, 198, 154, 155, 67, 100, 80, 216, 106, 46, 184, 222, 195, 226, 149, 162, 45, 44, 187, 185, 65, 136, 218, 180, 43, 226, 2, 97, 149, 2, 60, 56, 26, 36, 15, 54, 128, 48, 180, 13, 242, 102, 131, 145, 52, 9, 219, 251, 113, 184, 204, 19, 10, 67, 110, 68, 26, 141, 87, 61, 169, 77, 173, 104, 133, 164, 154, 192, 217, 190, 52, 50, 69, 164, 26, 68, 218, 237, 187, 0, 233, 4, 230, 49, 178, 113, 130, 181, 119, 211, 211, 208, 197, 214, 108, 190, 51, 82, 119, 137, 69, 244, 3, 4, 117, 232, 46, 53, 51, 246, 173, 228, 32, 15, 184, 163, 75, 39, 188, 123, 219, 40, 162, 216, 161, 51, 49, 224, 170, 37, 209, 81, 3, 172, 126, 102, 29, 209, 101, 238, 41, 248, 52, 130, 122, 85, 80, 7, 92, 46, 231, 183, 119, 124, 96, 203, 118, 134, 216, 234, 152, 145, 192, 217, 0, 179, 78, 157, 171, 202, 152, 152, 160, 223, 132, 27, 143, 255, 141, 211, 64, 87, 167, 129, 239, 108, 207, 188, 96, 211, 116, 27, 188, 34, 143, 81, 42, 202, 18, 105, 210, 115, 150, 211, 242, 115, 145, 249, 44, 110, 140, 106, 248, 148, 120, 52, 63, 39, 96, 89, 60, 70, 198, 166, 225, 47, 117, 105, 137, 157, 119, 47, 218, 106, 149, 3, 249, 114, 122, 51, 223, 104, 78, 247, 91, 177, 240, 201, 73, 29, 121, 177, 84, 85, 151, 7, 93, 94, 254, 159, 186, 30, 16, 117, 72, 85, 79, 97, 122, 234, 169, 238, 151, 147, 209, 56, 223, 238, 97, 21, 182, 219, 242, 147, 15, 49, 140, 22, 204, 60, 112, 182, 75, 69, 194, 150, 197, 147, 173, 173, 8, 83, 216, 178, 188, 203, 246, 5, 221, 237, 145, 65, 63, 83, 89>>}}.
{{encoded, "2Z1zxKPA4Lf59VjxLZYD4rFdusxm2Nc9E6ssUAoadMcsHFjsxoKLHbHKj5wWr1JWnhDKKKANY2faLekcVNFBkLTysG2N7ntttfGN5zkLe7DytXAkkfb4wBKKCo9jih8tLWJiiq3EL2pbSkoFvvG9KgRZ9TTgbrZDkriCF4euBChrMAcHNqWhoaFidCM9yftCARdXt4dVwvw4YnN7uYWXzuPrWyWW4t5DHwoaMytKYBGKHe4CgoFPSG3r2KkVZUZ7GNQqkxTzzoepR9axX1JF4U5R4ZdbBusKDS5umm6WHBmjkFpAPXRkK195h8otAoS7tboHyzYSG7qnZnJ69YMDXiZ9tiA8M5g9CzSbg71vyxzSfrzjzXyQ1pa3YPNDGjGfozJWxqRVWpaFsLrunbGBpuut88nMtw3nTzwzfQhsEN9tgJn75BaHkV3PPYCR4RWc7kmquhk8mmwK6H3etSfsmRF7R3M4yZb27cdarsAETx5ErmSwNAj7vDwND8ti7J1jtUyc8SggQimdNWohuLY2QgPxqq4UHJZ6EgxcA4xWsSMD6awVSCTDRq81e9AuiM5A2D5iYkj5kQGRj1qRnQVxmCvcmJL3EQ1bX8wthKSCSw3sr8EcMgeHqYEtkYFrPWdJSZGRZ8KeVpsGP2BLTvRmz6NcE9DdX9v98Rfk8misyM1NJH3ZqGzRUgte7Aa5kVRTSXVZYvvsGcBm7gfBZ5FcYhoGtwb7AzEdngCm5i3VQ2wrpPmc5S36yNpK1J4BEt4BvRe3LVUDidYtPd6madj8HSAndMbSgEp1gVsDRQXq94Qv5aGzM5GHaJzpDueHRsjurWRAiqxh4Gjd5mfXKQiN4PicWCyqc5htrfTwwf3UPNm26gV8zJD31oEvfiS36zYUeWw6q6VHZNwnbqPa4qHq7THMfmEa6ktTMYq96snJd9NKqrU37sXLHTCaS4jRkqdr8KeR5pa3R718f7Um48tL3GdHykMbuxoLHt3uCRhP9sVVQ8RfCZeoR9kvJS7NmNUh4inq9zGgA4my5L3F6KeYj5XB2odWSrSPRZrqyy8pfLuS2yVF3gEFsu6cT1vqbe8RaKC4ZqzqtLHCRJfc8J8xh1bMHKvZUyVxZMvthQN1bgu66"},
{decoded, <<233, 184, 53, 154, 153, 107, 21, 255, 190, 142, 178, 90, 19, 254, 232, 94, 106, 43, 242, 88, 176, 202, 229, 18, 116, 244, 36, 50, 169, 244, 39, 6, 170, 56, 191, 208, 227, 115, 32, 193, 149, 81, 32, 46, 152, 56, 176, 56, 100, 145, 191, 116, 191, 250, 65, 164, 223, 42, 183, 99, 204, 135, 212, 23, 53, 171, 196, 102, 225, 85, 56, 89, 195, 254, 217, 154, 227, 97, 55, 130, 241, 42, 29, 136, 220, 76, 182, 110, 197, 40, 246, 169, 79, 98, 155, 6, 220, 167, 208, 131, 208, 152, 63, 246, 230, 52, 57, 86, 95, 255, 210, 121, 176, 41, 176, 222, 115, 6, 61, 231, 197, 195, 45, 172, 114, 245, 41, 27, 255, 38, 114, 207, 60, 224, 7, 132, 155, 71, 113, 134, 117, 35, 195, 250, 230, 50, 85, 18, 199, 211, 76, 75, 168, 226, 180, 72, 187, 62, 39, 100, 125, 67, 14, 221, 97, 98, 211, 178, 109, 192, 32, 9, 57, 220, 122, 206, 29, 51, 133, 99, 192, 198, 76, 142, 157, 240, 226, 230, 100, 174, 237, 149, 182, 120, 95, 64, 54, 56, 82, 43, 175, 128, 75, 225, 165, 211, 1, 89, 139, 148, 123, 234, 205, 195, 93, 74, 55, 46, 166, 185, 100, 76, 104, 0, 178, 33, 171, 223, 226, 244, 205, 120, 13, 65, 14, 46, 77, 215, 18, 82, 186, 196, 118, 108, 98, 61, 209, 159, 12, 0, 68, 62, 31, 123, 249, 89, 181, 71, 215, 188, 248, 20, 158, 63, 64, 227, 1, 47, 24, 44, 200, 228, 213, 174, 242, 40, 24, 230, 159, 244, 214, 98, 153, 131, 223, 169, 118, 84, 212, 5, 79, 91, 214, 27, 23, 174, 80, 126, 247, 194, 228, 247, 92, 125, 8, 138, 86, 84, 235, 69, 65, 105, 76, 68, 254, 110, 197, 162, 189, 77, 209, 71, 134, 171, 189, 15, 59, 221, 89, 165, 123, 112, 200, 217, 179, 9, 156, 200, 131, 22, 18, 250, 7, 234, 75, 92, 57, 113, 51, 94, 237, 79, 108, 116, 231, 210, 199, 77, 142, 110, 212, 209, 51, 86, 0, 156, 61, 100, 196, 3, 97, 186, 105, 221, 2, 11, 192, 64, 108, 45, 158, 239, 35, 89, 14, 68, 178, 207, 58, 116, 236, 17, 82, 33, 203, 174, 47, 159, 71, 251, 179, 184, 134, 114, 24, 112, 198, 59, 149, 111, 60, 255, 144, 122, 24, 157, 245, 205, 184, 1, 62, 49, 57, 121, 151, 137, 84, 126, 132, 183, 119, 60, 200, 212, 207, 120, 28, 117, 204, 153, 145, 209, 175, 31, 126, 148, 144, 219, 179, 89, 154, 188, 144, 183, 154, 190, 80, 20, 184, 120, 98, 84, 194, 181, 106, 34, 46, 69, 133, 80, 251, 44, 21, 209, 27, 145, 188, 165, 132, 132, 82, 166, 196, 59, 162, 79, 201, 34, 126, 98, 56, 20, 45, 208, 213, 21, 42, 193, 58, 186, 63, 164, 123, 52, 40, 90, 25, 72, 233, 82, 194, 113, 8, 44, 238, 83, 198, 97, 45, 70, 152, 3, 92, 149, 91, 57, 137, 116, 27, 64, 178, 169, 57, 156, 253, 185, 71, 194, 225, 124, 125, 102, 162, 32, 87, 17, 60, 33, 187, 113, 37, 88, 62, 7, 186, 147, 221, 31, 152, 100, 103, 112, 252, 54, 153, 182, 169, 215, 224, 0, 225, 171, 177, 21, 200, 46, 99, 49, 78, 139, 100, 128, 13, 154, 201, 90, 206, 186, 13, 222, 191, 166, 125, 23, 189, 238, 129, 13, 91, 201, 19, 103, 15, 174, 252, 221, 79, 58, 154, 93, 171, 248, 171, 213, 38, 188, 87, 91, 217, 214, 204, 189, 156, 134, 158, 125, 170, 113, 96, 118, 61, 39, 137, 183, 216, 71, 19, 4, 133, 97, 254, 184, 213, 156, 60, 235, 56, 211, 140, 241, 30, 130, 148, 132, 104, 56, 13, 21, 134, 215, 139, 56, 79, 15, 164, 136, 72, 144, 211, 8, 105, 139, 255, 214, 138, 113, 105, 78, 170, 251, 77, 121, 191, 0, 207, 53, 25, 71, 66, 212, 116, 166, 167, 216, 10, 16, 143, 191, 184, 46, 81, 177, 61, 112, 83, 164, 247, 55, 102, 86, 176, 138, 171, 238, 13, 94, 65, 154, 51, 10, 202, 97, 37, 245, 127, 144, 0, 102, 235, 67, 70, 51, 146, 13, 147, 232, 211, 161, 188, 25, 143, 218, 169, 211, 44, 231, 37, 14, 184, 190, 34, 3, 11, 107, 0, 196, 140, 138, 179, 197, 176, 11, 7, 210, 61, 158, 38, 90, 190, 143, 110, 217, 106, 6, 51, 136, 28, 114, 26, 20, 37, 201, 210, 189, 151, 237, 67, 89, 89, 188, 203, 183, 57, 104, 201, 141, 53, 1, 139, 75, 124, 140, 8, 74, 91, 11, 114, 160, 121, 176, 238, 75, 168, 146, 6, 110, 163, 210, 172, 99, 27, 170, 184, 76, 167, 34, 125, 35, 111>>}}.
{{encoded, "b1kU6mZ5vxr3YkjWif5QavsXaetehH8RXYr1LcWwg3VrUmPPoLcEKfCRr56gx3QVkyHeDfc67fYLch815pETgU43vquCCcvgndy5YjTXdaEbJzp1w7d2jiDeZwFr8vQsQwcn9HzQkrfRe5C2Uiyu6LNQF3tg6bTot5NLXfxfyNWbvzkgPiMExTMaRX8F8pXaGJeNosmyccjtYzw2vDYWf2ut3qRckNYLjeQhuaNLRRdLwqRWAvss7Wmvo2Eb7N7tArbKWiSujg6gXhCnXkbSBFuiUWnhqyfnpAzpX2VpvTPTJqJ8UbdiA7EB9NzdUUj41nS3LMUpP6nYmd3s21XK3dFimKtnEpx11BUqitQ95WGaHNh7dihTD9PTkicRg4UZnPFifXJNkRJcqmxbUMrUQ7WpAFN8hopGXcoALxTeZAUFCZqdMyXzCn2zKiyLKFA6vcxjGG7EhEyNLYVopPbbR2sFRnqj2ni5SKk3L8tMM5ND7tAQbeFygWaUemk1t1URUCvA9Ev3JrDss8w4g2Ms4oyRG3SeGuBpoeQZiRUGcw4hfKXr7T8uG7HQL3ug7XFYp9o9ne4iWRo3UY9RSuG8bQvs7Cm8MnFFPJ23gs94D1a3jgDS6bjgC39AFeZ2jZJFYb5A66SwQAvbKQPeNTeRU56McaNN8pJVWuq238mwoiJbC2jcCN4m8FBi44P24jth16QihqhpFQCjbGSqizSFbzCJ7xX11GLBoYAoPQ9avMLWErXQtxM5WD688f6LN1ABoANdV15wQSygXdnJd9gchqXr2FPHNEWLG4okyCTCeD5bmkSvkog3Fnuine2BuNckgbAb22HEEAGLuqZCd65weLF7"},
{decoded, <<50, 159, 218, 162, 187, 234, 226, 68, 242, 4, 97, 95, 225, 184, 168, 51, 125, 197, 255, 232, 25, 180, 205, 147, 255, 225, 31, 161, 201, 252, 209, 10, 232, 158, 164, 141, 239, 126, 22, 139, 170, 9, 246, 164, 131, 244, 174, 224, 150, 133, 75, 192, 150, 22, 162, 247, 98, 58, 139, 189, 156, 41, 230, 153, 145, 151, 212, 123, 35, 53, 44, 61, 16, 85, 253, 180, 88, 187, 64, 221, 246, 233, 21, 24, 50, 65, 80, 169, 221, 58, 101, 170, 225, 84, 177, 10, 120, 37, 79, 172, 213, 67, 133, 52, 44, 194, 23, 56, 65, 139, 251, 195, 19, 27, 160, 72, 215, 117, 49, 103, 130, 94, 150, 13, 136, 4, 43, 158, 89, 247, 167, 195, 155, 199, 243, 163, 163, 247, 112, 40, 150, 164, 16, 172, 70, 102, 127, 47, 4, 225, 123, 17, 173, 244, 239, 68, 166, 94, 226, 48, 220, 151, 167, 157, 171, 224, 170, 246, 213, 168, 8, 172, 4, 180, 217, 142, 6, 240, 80, 163, 121, 135, 162, 97, 228, 218, 119, 153, 248, 53, 61, 145, 92, 106, 187, 158, 100, 245, 249, 95, 16, 171, 215, 52, 170, 45, 103, 217, 14, 152, 88, 14, 220, 148, 247, 241, 16, 99, 138, 137, 95, 72, 204, 104, 86, 167, 51, 235, 47, 34, 233, 54, 1, 67, 242, 109, 13, 159, 227, 92, 246, 203, 44, 151, 101, 48, 111, 174, 226, 205, 239, 221, 133, 232, 62, 190, 91, 78, 218, 212, 91, 249, 255, 169, 251, 222, 126, 214, 203, 116, 203, 159, 139, 75, 235, 179, 63, 210, 245, 124, 39, 177, 178, 207, 0, 187, 67, 245, 202, 74, 177, 229, 47, 217, 165, 148, 20, 184, 41, 158, 105, 9, 205, 4, 23, 215, 241, 84, 236, 198, 86, 5, 73, 160, 225, 151, 206, 134, 106, 148, 236, 148, 61, 147, 125, 84, 247, 117, 231, 17, 248, 39, 224, 1, 66, 178, 236, 96, 130, 66, 72, 176, 39, 42, 195, 126, 72, 152, 32, 163, 12, 144, 135, 152, 23, 95, 185, 99, 76, 36, 184, 165, 157, 143, 158, 208, 41, 241, 247, 95, 88, 198, 189, 249, 103, 15, 5, 104, 151, 165, 206, 119, 172, 7, 163, 12, 204, 165, 53, 192, 164, 204, 73, 112, 158, 201, 186, 248, 106, 98, 65, 54, 226, 9, 71, 43, 70, 54, 49, 221, 105, 82, 191, 99, 237, 85, 166, 73, 176, 8, 143, 204, 33, 251, 197, 74, 37, 57, 255, 72, 34, 208, 251, 168, 79, 178, 231, 188, 92, 100, 95, 54, 1, 106, 31, 247, 51, 3, 178, 241, 33, 90, 196, 214, 167, 44, 225, 132, 250, 215, 9, 122, 65, 97, 119, 9, 122, 83, 65, 138, 100, 244, 91, 85, 198, 178, 206, 93, 155, 69, 219, 172, 137, 227, 53, 175, 196, 222, 23, 133, 104, 212, 190, 95, 203, 168, 42, 143, 87, 146, 219, 238, 155, 198, 162, 222, 222, 74, 98, 249, 50, 198, 185, 252, 205, 117, 5, 67, 46, 223, 111, 65, 15, 125, 49, 91, 241, 231, 51, 69, 19, 0, 67, 190, 250, 213, 17, 8, 1, 110, 44, 239, 225, 27, 114, 127, 233, 157, 66, 185, 171, 225, 242, 123, 40, 131, 153, 166, 60, 134, 7, 168, 98, 93, 185, 125, 69, 113, 241, 58, 161, 39, 20, 4, 166, 140, 172, 88, 175, 108, 97, 165, 104, 173, 90, 127, 115, 255, 253, 0, 23, 154, 117, 160, 47, 9, 132, 125, 19, 234, 37, 31, 100, 68, 27, 217, 204, 125, 132, 235, 186, 159, 187, 13, 120, 67, 40, 182, 163, 57, 18, 242, 148, 32, 182, 144, 198>>}}.
{{encoded, "es8uKxSweJr5nRj8mAmNqVKeYXLUkvLfvfnEZJ3Gkhajco8o9f9M3PpcYKmM7XG37XPG95P7d2cGnreNPX4uf94C51UGXT31Kyy2NcZNmU1vZ6egNbaR1GBjc5a5zVPDo3v24ddTvnotzbEgoRGVfrT7VxZPjMpR5NYhjs4SmQqewE7boadq61zWCnNwGNxp3VASQYftqEmBpWkGhFwoDGcm7soFFwxq28r3cSKXpNwfWk2ZkZAEwTuyxk96yJWWmJmSA6U7CaxHiNjPN5ZFaPcVzs4rDqhXNe2rD5vGWCAQGZoBGRYNj8Vxd5XCGEYwosNUBhDEkpDcbYn1jiuY7s7CXZMLXLeZXQSnS5fMs1XwhswNuM5XtphTo8JYCGqVFk4rQbM38JUPDdbtptN42vGrdyJ9uTgPFDeRNx5n5kMoh87A9SwCxtLvyURoy8R1p1kBgozQdDGx5UnjyAxLaaMrMdFH2uDoakxdHBNMNbRGNmpUht9ETbXkhkeoFt631UpBA48EtzbEtGQXgssMBCiFJ2xyEr5tnzyL94buhP7zxixh28VCVCBgteq5tim2cNmLwA1tFYk6bqiaCFpyzL7J19Lq6LhaVTDnvN44YWTUGBJWJUnUN4HLRWmBWRS96C6P3jRan9W4awnUHxFuHAZg78JjnaWFdd9j3YShKXyM2dtf18b7dpQLwkrshKMthq4NFtUCVkFnJ282zpQx37cTLadKnmq4KUhDF6Z9cg3MRNjaFC66tVkhGHN13xou8hrdAdBtejAfAN3GqkSAvmJvnqk8DgkNnqP3xvLUABCxpRTVmP3mGuLQ5smhorT26Ak1Lbibwb9azAuYhWtM9iSAtfRNGdRLCafxjKHJUnhXdWbF6reo3c1o83xL7NBMfs3ehQXX6XKxkfh6AsXGbVwBw4nMHPRP7UL8gyXDo8LaNfrPXY3StBLagrvBq7Fn8DMLJXMNtqWX6Mpy5cYYKg"},
{decoded, <<242, 140, 80, 75, 101, 79, 211, 148, 136, 2, 63, 94, 212, 109, 164, 230, 204, 183, 93, 207, 117, 230, 6, 129, 24, 40, 241, 177, 123, 162, 62, 157, 196, 56, 17, 183, 129, 157, 50, 181, 38, 217, 13, 190, 153, 71, 50, 210, 246, 246, 210, 164, 99, 86, 81, 39, 18, 193, 54, 28, 2, 190, 248, 43, 159, 146, 124, 20, 242, 20, 253, 228, 242, 40, 121, 153, 103, 73, 31, 224, 192, 169, 117, 108, 254, 178, 228, 108, 40, 31, 213, 26, 189, 181, 48, 19, 67, 88, 8, 172, 111, 211, 227, 166, 205, 51, 14, 196, 177, 23, 148, 154, 118, 26, 188, 36, 58, 178, 109, 241, 15, 185, 28, 180, 106, 109, 75, 189, 91, 241, 53, 23, 241, 12, 166, 153, 185, 228, 228, 218, 185, 3, 213, 177, 16, 62, 126, 227, 199, 47, 239, 63, 24, 145, 97, 161, 113, 6, 220, 166, 32, 26, 105, 147, 55, 254, 77, 181, 98, 48, 108, 236, 179, 81, 54, 96, 71, 39, 12, 186, 70, 209, 129, 57, 114, 123, 70, 58, 217, 21, 132, 126, 123, 91, 43, 197, 75, 63, 172, 185, 218, 239, 95, 137, 118, 74, 221, 84, 218, 116, 40, 136, 15, 135, 84, 161, 91, 180, 168, 110, 32, 235, 15, 96, 26, 149, 12, 180, 46, 16, 71, 139, 145, 23, 96, 149, 254, 169, 168, 81, 114, 87, 44, 71, 148, 165, 14, 165, 134, 14, 2, 41, 18, 143, 164, 167, 160, 177, 130, 141, 93, 37, 241, 226, 253, 213, 24, 81, 119, 101, 66, 28, 230, 255, 74, 185, 121, 120, 49, 74, 222, 197, 37, 11, 219, 154, 104, 48, 7, 138, 127, 166, 152, 195, 158, 95, 91, 122, 146, 14, 170, 18, 245, 254, 177, 29, 153, 74, 44, 21, 52, 242, 29, 116, 72, 93, 252, 74, 207, 158, 194, 108, 153, 248, 30, 172, 31, 122, 192, 128, 7, 184, 174, 220, 238, 147, 152, 122, 239, 131, 195, 111, 251, 46, 204, 60, 96, 57, 51, 100, 104, 11, 156, 230, 61, 247, 155, 219, 84, 164, 211, 188, 9, 163, 189, 150, 159, 50, 171, 81, 112, 244, 71, 254, 186, 193, 25, 150, 128, 162, 129, 192, 13, 240, 34, 118, 239, 23, 143, 88, 102, 187, 206, 90, 149, 122, 212, 240, 71, 27, 230, 138, 98, 112, 62, 233, 57, 51, 96, 84, 214, 42, 17, 81, 169, 140, 120, 223, 125, 201, 137, 238, 48, 126, 10, 56, 139, 166, 236, 194, 9, 116, 221, 152, 219, 121, 25, 184, 164, 31, 136, 250, 52, 161, 75, 133, 56, 222, 152, 190, 103, 53, 233, 25, 162, 201, 49, 112, 26, 166, 102, 206, 51, 213, 55, 230, 249, 102, 24, 97, 57, 251, 252, 242, 140, 150, 67, 16, 201, 249, 22, 188, 15, 34, 197, 37, 198, 90, 95, 83, 202, 140, 215, 20, 57, 194, 48, 187, 79, 239, 73, 122, 210, 211, 95, 13, 16, 211, 92, 232, 223, 119, 234, 220, 77, 107, 221, 4, 81, 203, 5, 192, 99, 81, 80, 148, 152, 248, 102, 219, 49, 96, 56, 223, 139, 68, 168, 194, 184, 187, 248, 237, 36, 243, 116, 144, 228, 188, 172, 217, 215, 68, 115, 60, 163, 26, 233, 113, 132, 249, 38, 2, 156, 12, 197, 100, 25, 4, 81, 237, 121, 206, 92, 193, 16, 42, 38, 62, 131, 122, 173, 212, 36, 217, 30, 213, 154, 105, 122, 213, 196, 245, 249, 199, 11, 23, 81, 61, 51, 159, 117, 24, 114, 138, 26, 2, 255, 26, 255, 245, 136, 120, 207, 145, 6, 83, 18, 247, 148, 113, 72, 38, 20, 212, 104, 75, 143, 150, 62, 33, 193, 206, 84, 47, 9, 251, 238, 38, 152, 90, 69, 116, 60, 245, 233, 151, 116, 171, 147, 217, 157, 99, 240, 125, 238, 10, 97, 60, 131, 110, 127, 249, 169, 60, 71, 182, 66, 155, 51, 133, 225, 210, 228, 8, 178, 198, 248, 148, 81, 154, 188, 192, 147, 41, 81, 183, 164, 144, 202, 201, 91, 127, 233, 126, 198, 116, 53, 213, 173, 237, 215, 237, 59, 164, 112, 98, 63, 213, 51, 216, 19, 67, 8, 95, 143, 54, 208, 231, 159>>}}.
{{encoded, "5oK9kpP82o79nM9d3NeVx7YfMt411Li312oYjihxXNpb5jrRtnLiz1fwPDHYPDFg7vUGVYk3iAkTHwR6XEHsHhaZveD4SiRk8j1wvRZDpSYztJS4ZWrxX7o2a7Rzs8Q5Qt6a197cJ3XSvcSfg6LH3qpXRGRMYnf3Cf3oaf81kzQe9jeWwZFNUJuUaALVrJNY6KoStrmPS4tfkMkSNEVwJ8LoVQ5zmawsdksZRbU3U5AjygLWm9Zb2ttfUdouVHe6pDjcmJGMVFWKYPwwPMtEi2YMR89SGneYx9XBKzc7LdbEpJ1VZnNeKRTMFjUQnzcH19iNukxJUFwqR2UwicbWfmAtH93iFDR"},
{decoded, <<23, 133, 153, 250, 149, 74, 181, 209, 199, 27, 148, 231, 212, 84, 42, 134, 67, 175, 95, 3, 201, 53, 109, 122, 217, 109, 254, 16, 127, 210, 48, 221, 117, 177, 201, 207, 248, 66, 104, 32, 225, 163, 30, 118, 5, 209, 145, 216, 13, 78, 82, 34, 15, 67, 23, 197, 65, 198, 189, 165, 71, 182, 136, 150, 219, 144, 17, 40, 189, 212, 29, 76, 43, 218, 216, 72, 168, 139, 96, 80, 2, 64, 212, 33, 30, 21, 19, 253, 18, 159, 172, 200, 234, 47, 2, 30, 199, 232, 97, 36, 99, 185, 116, 64, 48, 41, 243, 215, 94, 86, 14, 164, 158, 89, 65, 113, 145, 151, 50, 222, 17, 76, 81, 134, 184, 20, 137, 95, 86, 5, 220, 169, 180, 37, 62, 105, 147, 165, 185, 173, 16, 133, 165, 213, 158, 26, 40, 254, 45, 6, 113, 204, 166, 246, 59, 60, 188, 105, 78, 14, 180, 252, 103, 22, 90, 33, 6, 40, 20, 22, 230, 123, 217, 159, 25, 56, 85, 54, 133, 190, 101, 147, 72, 124, 169, 9, 219, 218, 199, 126, 106, 34, 142, 86, 121, 177, 141, 107, 105, 163, 158, 97, 85, 244, 142, 63, 175, 56, 221, 253, 241, 205, 234, 97, 171, 114, 56, 209, 7, 96, 149, 171, 70, 138, 236, 180, 250, 215, 187, 102, 119, 157, 153, 199, 193, 34, 2, 229, 104, 172, 41, 4, 167, 95, 57, 18, 6, 128, 130, 174, 196, 206, 93, 169, 9, 238, 208>>}}.
{{encoded, "43fQ38Wwf3nzNJLhiAxtPayK1F7bwJeJtsU6wMvYaX8fGhaf4cHAGvdW8M9ivYYhY2d92xD8DivQZLWt879JySRyC9HZyTSQsskVQDTx7BmiTzvNFgWk4TNxfNN1HhucMk8ZYn6c9X88AgKQw9QDQsKhEj59tWaTJoYs1Rr9umkMKGg44gZYcyumt3yD6XrMAKgtF4CvYNoKzB2X3BFLQAxD2qw7ZnGWDTA2FgASdWVNAjzxKJbV6b92nNzAndWTp6RrjPwaaQrLi1bdUL3LLqAH2TUovtKhPDrTcyTEZMvz5Vy4ohM9pAw6Ni2wb5CxfrGDPZVfb4rQNaAUXfJpUq4fioz9sxpny9GuFE8jLQGM2RCQ29nFsELKkDcKH4NZtDkMYqaKdCSoxQPCYNMEASxudd6NzynPLugW8US3WCcaE3DpCQHjTXa5V2zroYVjGo4r978DKtta3auinjsqSxQycBYX2xgtCv3cAXFat4D7ZhtJyjDc1iegButdg7YssEpAuqDYbuUMtQkf4emC4tQ66ZuM7Egk5cHfyd4YbT2LrCjjEGi16WWQd3f7bPPUEw7XR7XnU61H2c6qeo43MXWLgvCWUZn9fGWhHceY9wdGzV93hGZMsBFqMYk5ZLXG9oQaPJj3yQ9mhnExpox1cBggec1GMWeHGMA7FLgWfB5uCPPRYa4Rp7Ka1XAd9bzZz8Ngj6Ua7ekor6xH28BesxtvPnf5PUJ4eTQUyrwfgqhxtsVKQ24aXLYP3GxBnbD36nabt1iUBY9KJyoaRuu3eKpKp4FJJtMUYyR9fRovzv4ewW"},
{decoded, <<17, 178, 97, 30, 84, 90, 246, 167, 157, 190, 29, 157, 167, 55, 253, 30, 50, 52, 85, 239, 91, 174, 164, 38, 143, 202, 193, 146, 53, 50, 53, 60, 120, 55, 16, 53, 99, 132, 244, 140, 61, 55, 6, 21, 92, 28, 8, 6, 98, 150, 46, 2, 105, 123, 215, 248, 138, 142, 163, 68, 176, 207, 194, 101, 87, 156, 86, 163, 72, 15, 105, 1, 22, 41, 119, 74, 149, 78, 80, 192, 59, 100, 27, 121, 249, 244, 16, 38, 139, 28, 68, 173, 17, 187, 176, 165, 65, 76, 175, 198, 26, 55, 176, 192, 78, 69, 173, 241, 156, 29, 155, 87, 47, 162, 58, 46, 220, 32, 5, 163, 203, 10, 34, 2, 195, 5, 63, 100, 48, 167, 161, 87, 48, 220, 236, 183, 159, 88, 138, 149, 2, 154, 124, 91, 242, 140, 232, 251, 197, 201, 18, 110, 240, 55, 210, 169, 136, 179, 201, 189, 55, 40, 246, 84, 128, 3, 56, 221, 114, 143, 161, 217, 48, 245, 79, 84, 240, 15, 222, 63, 59, 107, 97, 20, 18, 121, 139, 137, 115, 75, 128, 193, 130, 47, 79, 78, 19, 204, 45, 42, 47, 71, 105, 124, 76, 172, 186, 112, 191, 71, 49, 248, 111, 69, 214, 157, 50, 149, 107, 132, 249, 191, 135, 187, 229, 230, 128, 167, 90, 174, 34, 216, 29, 90, 107, 223, 47, 11, 60, 44, 165, 96, 89, 180, 84, 178, 50, 166, 163, 79, 89, 43, 70, 131, 175, 190, 81, 120, 179, 208, 71, 144, 236, 90, 46, 254, 218, 250, 228, 245, 60, 71, 30, 238, 128, 20, 192, 188, 19, 124, 5, 96, 58, 250, 252, 149, 88, 182, 46, 196, 123, 188, 5, 101, 204, 252, 142, 106, 99, 132, 242, 166, 215, 34, 109, 48, 79, 223, 231, 61, 246, 119, 251, 122, 49, 244, 121, 201, 53, 64, 181, 75, 99, 165, 94, 72, 124, 19, 18, 129, 155, 133, 246, 13, 56, 159, 48, 223, 119, 178, 185, 93, 95, 179, 116, 157, 165, 17, 192, 203, 1, 241, 119, 229, 113, 80, 148, 225, 36, 56, 25, 57, 102, 76, 70, 197, 250, 125, 229, 196, 173, 153, 169, 185, 31, 132, 210, 154, 209, 223, 191, 219, 66, 68, 49, 225, 108, 236, 26, 196, 42, 173, 126, 38, 75, 147, 180, 200, 156, 164, 188, 225, 217, 225, 22, 46, 220, 166, 71, 244, 59, 135, 116, 184, 84, 44, 94, 88, 33, 91, 86, 226, 247, 182, 135, 208, 201, 59, 87, 211, 217, 7, 230, 127, 159, 72, 35, 166, 218, 59, 203, 172, 245, 216, 183, 252, 219, 204, 238, 248, 25, 82, 215, 23, 81, 167, 222, 24, 99, 31, 3, 10, 236, 90, 57, 151, 202, 233, 2, 64, 219, 147, 85, 211, 242, 162, 36, 204, 4, 192, 45, 110, 243, 217, 71, 80, 81, 116, 146, 95, 220, 24, 168, 112, 200, 107, 151, 77, 215, 23, 44, 106, 117, 135, 61, 246, 190, 209, 82, 160, 32, 91, 21, 240, 250, 215, 105, 184, 1, 128, 85, 69, 106, 245, 63, 101, 192, 2, 55, 163, 10, 113, 205, 8, 70, 237, 17, 190, 83, 127, 173, 35, 120, 207, 227, 177, 188, 54, 247, 211, 201, 143, 144, 30, 224, 125, 136, 207, 111, 55, 252, 148, 176, 31, 192, 122, 27, 204, 213, 63, 17, 216, 114, 71, 253, 139, 224, 24, 181, 24, 74, 181, 227, 196, 223, 241, 4, 25, 198, 234, 42, 232, 234, 169, 232, 53>>}}.
{{encoded, "8pVyNAKcodqxLhw9FGGsVREH54tinUMQbeG9PHVyks2Nwrq8rf9wfLypBksToEYgLdyPodKEBg2iN1GPb3dQEdCurSA6aiZF24Gdi2rYNQdghe76abkPxJ2vE2XSYdHDKFYeJMADbjiXCA6U76zWf3vHvdaGKZapH2p1k9qCwGi4vmdsjpfU7a4XEgoYdZiKxKKwwkJJBhtRDrXBLownDhsa2nhhQqJhGN3oB4Vgnk8Lvubp8nbTZ6r9qyWE9V8qudFmwQCEZF3cwzJ7Dt3yAXjzUhJeeBokdkEoib85GbifZhZNgGHw4pbKWHTTmhwg9uS9SbfDPpiu5taTnftFGDmFRNJE1wgqXkHsuZ8hQQzG3x44Di7ZfH6vSm4eTigdz3QCjqVC23kLMjXKC8XWNaua5pYXckGCrFX1TCDwGVLtX1qLxksDp5i5zukAGfwp492uifDBfXDARzAK1DqQWj8HA5kDAk32mte6d9ivffUBx3MqPTG1XxKFiL3YbtRhrLhWNek8JiStcSxt5Bfco78DzrRPJpDPfPLoxjRhVyRWFAP4iELEtpKBURTNqv8G1Z5RcQT5HhwtcnbJzKWpzu2FC8dfacAFxyNbDFqoUr1YniCateZoKLUwLPiW1hGpjBWtaqZAimBJ6Wt6MMWS9MWwKyKGddQSeLKHPecAHfZBnoXAi669C2LzzPqacbMUDkYtthZqtTd2T3hFo8G1vJaygLGQTmnw2cJ4LYQHu6uhnLFaGTBaTuG122BA5B2Bsk2cwVviVob1q7CAYTS5VjDKdFDrUS443pdqLE1H3HX4cmqpMVQn71qAyL9ZFf67MxxxajCZikZDu7FVTwA7Tqb7vnR5qsbZsE6QtXCTCjVQdKjwqdmVDW4i7wDCjZP8QKhhFK6SeUXv1VHEf2DMzV4AKi18Ze89PpQJCBcGjuKt"},
{decoded, <<195, 131, 171, 219, 236, 160, 228, 161, 124, 190, 203, 217, 242, 87, 166, 43, 240, 82, 244, 185, 205, 26, 155, 108, 96, 104, 246, 161, 0, 238, 57, 214, 34, 79, 70, 61, 118, 87, 182, 23, 199, 26, 67, 133, 1, 176, 123, 214, 177, 108, 241, 255, 211, 31, 126, 60, 214, 98, 121, 117, 60, 8, 165, 198, 20, 225, 48, 21, 138, 33, 2, 1, 119, 46, 85, 1, 105, 135, 151, 234, 36, 197, 90, 190, 250, 249, 70, 53, 75, 173, 252, 210, 138, 218, 55, 56, 198, 28, 127, 102, 159, 173, 190, 225, 192, 213, 56, 47, 246, 211, 167, 152, 37, 214, 93, 138, 216, 29, 79, 107, 79, 41, 190, 143, 213, 47, 144, 140, 34, 102, 196, 181, 222, 63, 216, 230, 117, 2, 95, 39, 130, 67, 12, 66, 242, 243, 254, 177, 247, 71, 100, 93, 78, 154, 125, 34, 179, 124, 130, 78, 81, 189, 104, 118, 250, 224, 190, 33, 149, 91, 39, 130, 93, 27, 112, 209, 254, 15, 187, 123, 183, 141, 108, 208, 148, 212, 19, 182, 138, 8, 71, 110, 11, 175, 69, 202, 222, 26, 104, 24, 24, 11, 238, 50, 237, 132, 42, 92, 44, 144, 211, 141, 45, 78, 122, 92, 42, 228, 198, 149, 30, 147, 229, 84, 125, 65, 104, 186, 119, 66, 174, 36, 223, 217, 46, 178, 248, 198, 26, 239, 121, 208, 133, 99, 31, 25, 128, 32, 251, 146, 97, 253, 172, 131, 93, 144, 208, 40, 18, 217, 193, 245, 243, 41, 62, 220, 114, 225, 81, 246, 124, 253, 176, 148, 153, 136, 36, 38, 102, 34, 154, 113, 213, 120, 99, 113, 236, 206, 136, 134, 242, 196, 158, 18, 185, 246, 29, 221, 168, 208, 51, 141, 77, 226, 245, 28, 231, 134, 156, 5, 107, 24, 205, 141, 141, 95, 226, 23, 88, 225, 239, 241, 190, 112, 172, 88, 255, 206, 122, 18, 217, 100, 127, 80, 121, 153, 45, 142, 248, 190, 238, 57, 56, 235, 233, 100, 71, 6, 190, 165, 194, 209, 37, 150, 233, 170, 51, 146, 9, 24, 220, 97, 219, 252, 16, 205, 176, 83, 205, 226, 47, 6, 115, 33, 125, 92, 229, 167, 104, 64, 226, 197, 42, 78, 15, 9, 66, 153, 183, 248, 143, 79, 58, 61, 121, 146, 91, 170, 108, 51, 215, 111, 1, 11, 101, 181, 174, 220, 227, 176, 144, 39, 40, 60, 102, 216, 105, 97, 205, 234, 152, 84, 43, 193, 240, 198, 212, 129, 226, 133, 107, 197, 198, 221, 14, 4, 32, 166, 248, 251, 124, 114, 99, 108, 234, 7, 127, 17, 29, 16, 241, 118, 28, 78, 129, 79, 119, 19, 161, 49, 3, 90, 44, 111, 160, 133, 186, 159, 131, 128, 43, 150, 108, 58, 3, 20, 35, 127, 33, 60, 29, 180, 11, 87, 239, 129, 47, 151, 74, 139, 143, 204, 224, 182, 101, 174, 88, 164, 8, 26, 64, 96, 48, 15, 33, 197, 32, 17, 51, 86, 75, 243, 112, 124, 68, 129, 243, 19, 70, 226, 108, 224, 102, 221, 227, 25, 92, 180, 131, 116, 132, 76, 174, 62, 67, 210, 227, 225, 183, 62, 137, 112, 87, 12, 124, 241, 217, 241, 37, 204, 23, 172, 254, 85, 184, 49, 222, 140, 138, 242, 152, 113, 42, 27, 160, 209, 157, 186, 119, 178, 123, 44, 78, 205, 204, 240, 63, 137, 90, 24, 160, 129, 196, 239, 179, 107, 202, 243, 43, 181, 67, 208, 71, 46, 181, 13, 233, 254, 65, 15, 89, 137, 105, 161, 253, 139, 87, 69, 122, 19, 155, 145, 177, 74, 219, 76, 239, 193, 37, 150, 204, 217, 82, 182, 248, 92, 6, 229, 3, 245, 108, 72, 64, 33, 20, 135, 14, 7, 164, 33, 83, 136, 196, 240, 51, 203, 149, 44, 241, 96, 107, 162, 219, 139, 14, 4, 214, 222, 5, 168, 120, 97, 125, 163, 81, 129, 83, 121, 161, 81, 10, 111, 209, 247, 45, 249, 180, 19, 79, 9, 11, 175, 60, 36, 57, 197, 87, 247>>}}.
{{encoded, "Dp4BsGozdvD9gRMUesp87FUDu4YN7Heg9JXgYdwCVpaAn7qktGkExXG9sYPBE4i1Ca71uVWJGX91fWHSPBcb4x6A9L9pTXm4XTKQXpeQB45RjFN1GBBuwD3CS5fc4AaEi12pM5FczJiqgWwZVNMLVcS5nUbLbEHLB"},
{decoded, <<31, 11, 153, 73, 216, 43, 203, 98, 150, 102, 160, 216, 120, 126, 180, 30, 26, 177, 41, 29, 250, 198, 162, 34, 72, 154, 118, 107, 106, 34, 49, 140, 5, 111, 181, 255, 64, 2, 92, 151, 138, 37, 203, 68, 212, 75, 41, 206, 63, 193, 184, 109, 27, 207, 102, 125, 188, 218, 107, 48, 34, 149, 167, 7, 152, 112, 248, 116, 103, 239, 55, 9, 34, 161, 54, 213, 168, 241, 55, 26, 197, 226, 48, 150, 191, 69, 63, 167, 186, 182, 23, 136, 245, 176, 70, 158, 165, 184, 43, 65, 235, 164, 212, 0, 60, 124, 186, 91, 147, 245, 46, 150, 86, 194, 33, 126, 98, 160>>}}.
{{encoded, "2CoDwcxSvpfye9uJhvhMzY2KNcQgrCQpJbHhSqxaQUMgv5Stdr4Cdqx7M9GEZFEmydf95gQbQcC21svxv1JST3xrvisdiHC7dzDZuZMKPQozUAdez2RFeApb5PYdoH2yLoFKkeA7UFsNGZB1vU5eGtgkTCjm42no7RUk8Vi3fARPem5eEhUUvr7bfkCtV81rUiHqFBguxvyRpqq6Gj3DFDqLH1BUtZJAC3fnNeA4cDSmo4CkCwCgqqKHT4oyWg35qv8a7Sub6qRkJGhqbPiNXWqg2s5RuxzjXwvbEQd8LJaz2H2oFDzUQPp9qpPsC4scTB1EWQ6HNMqkzKwdvdaxKjU11pTrPgMgHwoVaC7SUDrmEsbzNSDCrDkPo98j8C3b3eWuAom7xwkxEX4Jnn4voowztqG2nbxwupGu"},
{decoded, <<108, 120, 61, 44, 17, 0, 198, 23, 47, 140, 168, 225, 36, 137, 97, 192, 13, 115, 64, 197, 58, 150, 117, 43, 99, 230, 209, 111, 206, 138, 176, 105, 163, 47, 179, 26, 4, 236, 237, 40, 124, 237, 34, 69, 136, 134, 63, 1, 200, 252, 93, 51, 188, 115, 184, 101, 137, 62, 130, 114, 49, 220, 207, 152, 246, 218, 59, 82, 0, 36, 191, 140, 8, 94, 101, 163, 170, 13, 168, 206, 244, 19, 0, 146, 123, 112, 90, 237, 45, 60, 219, 93, 115, 6, 236, 117, 203, 71, 254, 126, 52, 156, 151, 182, 7, 204, 146, 180, 113, 252, 105, 144, 169, 164, 49, 200, 1, 20, 174, 54, 171, 52, 74, 157, 180, 66, 86, 53, 123, 126, 82, 187, 181, 124, 166, 168, 203, 142, 146, 121, 227, 64, 68, 64, 1, 100, 245, 167, 124, 111, 12, 204, 179, 161, 25, 141, 26, 4, 189, 5, 30, 186, 165, 155, 143, 111, 232, 37, 187, 36, 125, 54, 226, 56, 214, 235, 214, 163, 88, 201, 113, 73, 159, 6, 34, 221, 193, 58, 153, 127, 117, 81, 82, 198, 12, 62, 172, 17, 134, 104, 163, 254, 95, 111, 60, 47, 151, 210, 75, 19, 187, 49, 152, 50, 6, 60, 244, 22, 63, 53, 33, 205, 153, 253, 190, 215, 112, 4, 194, 86, 169, 64, 133, 129, 109, 199, 25, 144, 148, 168, 253, 62, 97, 85, 182, 131, 66, 26, 233, 84, 70, 124, 9, 59, 247, 22, 196, 144, 21, 36, 204, 58, 118, 140, 199, 31, 4, 120, 8, 188, 199, 1, 91, 118, 83, 136, 117, 63, 31, 223, 120, 180, 165, 103, 161, 149, 34, 138, 173, 55, 128, 243, 56, 45, 114, 254, 74, 63, 49, 159, 14, 83, 104, 110, 66, 160, 22>>}}.
{{encoded, "Nw1kj93s9epZ2adJrEQdCvjWSUwxeFYwndmzXhHgVk5oUV8RHy5fYwDKmyMbxj9FVJNnA5Fjddb32G4KPx3Gwb7Pv5DHyMzTrKKEGdFrdkC8EQZy2ozTyWzU8K2ynevvjAob3znEi29A8JaFQZj3oMcME5t42EpRMdQD8FjxQnoQJxjU7Zk3yzg3c4hwCNNRyjhc3dcUx7SgKBSUk4LBGTUfWKNXqGHBX4xv5MeQQZtUQKwbbbqzcb6De64FEY6uy7cgJ4GwvmbdxHGCFULRBjyX9KjZkhQVMX7Uvv5V2kHcyKgBxU1KbCrnw3yVNCTk7stqvUTf7Qb2r3du3yG2HgfPem4gUBTW9ogbfrGsGCd1LT7GrhrWjjBDeZPerc5HKg6XJFfYwf5aH2cnzzeZrBNMm9fksHfGmPaRVW373Sk89mivB9xAUqQe8E5tCFLBFv6xDGdaw1ws47Z8CsrxifNvG48uDKWPm4e9S5otEX3YcMYN9hdP"},
{decoded, <<192, 84, 64, 14, 90, 228, 8, 227, 120, 131, 205, 100, 133, 196, 167, 86, 231, 245, 124, 169, 251, 84, 250, 59, 193, 151, 183, 92, 250, 180, 118, 30, 241, 8, 146, 98, 53, 200, 17, 200, 219, 193, 213, 207, 232, 38, 23, 187, 131, 31, 100, 110, 136, 133, 153, 234, 141, 172, 186, 183, 95, 40, 54, 87, 22, 199, 60, 49, 199, 147, 182, 146, 242, 23, 242, 182, 151, 82, 133, 169, 202, 181, 224, 219, 96, 222, 218, 132, 214, 159, 113, 2, 27, 13, 132, 166, 130, 181, 140, 250, 134, 66, 207, 187, 143, 166, 184, 1, 30, 242, 243, 172, 47, 8, 1, 242, 122, 23, 226, 198, 129, 75, 205, 178, 2, 129, 236, 198, 243, 194, 99, 4, 136, 239, 90, 55, 40, 109, 79, 5, 203, 87, 94, 173, 70, 116, 218, 178, 169, 152, 103, 251, 202, 18, 132, 74, 157, 220, 183, 240, 15, 9, 75, 202, 195, 221, 155, 81, 105, 186, 164, 196, 198, 211, 111, 127, 201, 193, 127, 132, 227, 151, 7, 84, 197, 44, 217, 188, 84, 121, 65, 126, 248, 221, 121, 23, 48, 103, 211, 90, 190, 38, 119, 190, 88, 109, 84, 130, 178, 227, 247, 208, 116, 198, 143, 23, 158, 148, 69, 241, 112, 154, 146, 90, 187, 143, 26, 83, 210, 50, 46, 58, 143, 212, 148, 106, 1, 172, 52, 197, 226, 117, 39, 134, 221, 28, 88, 7, 67, 73, 39, 185, 55, 22, 163, 224, 215, 142, 145, 98, 226, 156, 159, 18, 67, 164, 45, 46, 234, 92, 159, 142, 202, 140, 42, 28, 10, 74, 0, 22, 23, 233, 156, 64, 5, 52, 149, 209, 144, 28, 97, 93, 137, 106, 8, 135, 3, 100, 239, 17, 28, 251, 60, 59, 217, 236, 73, 60, 92, 39, 170, 54, 196, 157, 246, 53, 152, 142, 84, 95, 103, 9, 133, 144, 239, 31, 5, 124, 43, 90, 136, 29, 151, 240, 215, 66, 151, 167, 181, 178, 71, 102, 207, 249, 177, 186, 205, 23, 168, 9, 31, 150, 152, 25, 228, 4, 134, 133, 32, 15, 208, 191, 249, 55, 7, 78>>}}.
{{encoded, "XpEinoQ8DKLXq43Ta2KgHNDCqPPUyjGdfdHcZKNygpWXux7spZa25fSpasoHXXdPbwkK3tX1zjLPHfCrKcvFwrd3Dvz7BBLJnE57xru6i6ytS6TXmS146bvnyxze5RQ"},
{decoded, <<132, 158, 92, 82, 253, 111, 33, 34, 101, 68, 73, 137, 224, 97, 167, 28, 120, 84, 73, 32, 6, 149, 178, 174, 182, 80, 121, 59, 32, 40, 197, 236, 158, 189, 239, 234, 140, 172, 110, 153, 81, 146, 46, 93, 235, 64, 226, 75, 154, 251, 118, 186, 135, 34, 0, 67, 226, 31, 250, 177, 67, 56, 70, 229, 246, 130, 53, 90, 216, 105, 253, 242, 135, 0, 147, 110, 126, 140, 156, 47, 85, 173, 37, 43, 139, 224, 38, 222, 223, 146, 121, 155, 79>>}}.
{{encoded, "FGocMyoj6aR8kmyUCnHM7fJLuW54vtnrnQxeKsDDWNRj4V2SHDEpPCivLUpK3Q8d5tbThWUN1SJLabP9bLeam6YKJxGiG3Lq127GHiirffVKNoyrS31J7qg53kwgKXY7yVVRLLS1AewCj7LQAkoZfVNkHnen7YcHEUj4Y917VPhVzVVMmULq9TagEvbtTvNfNoh13mptTACLNwNDDVZSwQt2KdPRXbR3v1mNZoQCDTBiqTnAeAP2YxSy75nhuWnggwv7SwjPHpf6yzCQ6DqCkbxQcgg7WtjQG22azBT92196N1uViPFbuUVMxQJZhvavxiuT6VzNxUotxKwThYqG5gXfuBtGXb5aF1X8S6E2Lros2He4q1Ag5sAY4JF5Bkm3R7y8st185HD28RbpkgBiHPefs8UfZRavPDxEDmTXSKfxTH2ZCYV1YkkV41CVKA4JvjzZwUWJRywHzeUH6Ws8ufTE6F4FWnSaUgGVNFUnQ1jitkpaECXWwXgt34AUrkjMTbEdVTkBTeWytMSDQDZ3iNf1fwsBdxx9cq7SoCrYKnViyfvkZbaJDeypLX8wJqarH6DRDW5XzzWxcNtyDDyU8LPX1EdqagEU5dwZvukwbGAnLWhNYZ6MU5bdpMFfASKJu78tHCnJzpbbHuyjTEj6dFuzfkFeRv2xSmWqcXpgdvAtb8TjCc"},
{decoded, <<253, 48, 80, 180, 194, 183, 178, 232, 232, 73, 126, 175, 55, 30, 86, 55, 218, 210, 94, 145, 145, 149, 165, 24, 190, 155, 191, 148, 9, 224, 230, 212, 31, 59, 146, 194, 237, 242, 16, 72, 253, 193, 163, 7, 109, 117, 188, 60, 73, 233, 79, 105, 91, 138, 129, 168, 91, 133, 109, 118, 244, 174, 51, 215, 65, 8, 103, 237, 54, 5, 229, 50, 240, 234, 233, 117, 166, 58, 142, 6, 220, 97, 253, 70, 126, 158, 234, 62, 40, 207, 33, 247, 60, 64, 210, 21, 29, 95, 93, 197, 181, 246, 14, 21, 116, 219, 129, 223, 205, 121, 145, 83, 171, 222, 81, 8, 75, 154, 31, 215, 206, 195, 162, 9, 153, 105, 42, 64, 31, 96, 184, 60, 47, 230, 255, 241, 48, 209, 168, 12, 23, 5, 111, 164, 217, 242, 38, 144, 166, 162, 254, 147, 122, 220, 55, 217, 17, 156, 212, 128, 252, 7, 26, 176, 73, 26, 197, 254, 253, 31, 213, 141, 28, 247, 177, 82, 203, 94, 253, 91, 249, 90, 51, 12, 53, 194, 18, 169, 158, 214, 186, 222, 26, 97, 181, 129, 122, 98, 105, 108, 80, 202, 81, 91, 177, 127, 249, 239, 182, 182, 213, 177, 28, 83, 254, 103, 227, 208, 189, 142, 254, 122, 155, 30, 168, 207, 59, 146, 230, 64, 219, 128, 111, 166, 116, 32, 65, 130, 147, 62, 23, 12, 213, 220, 191, 80, 8, 201, 147, 83, 68, 72, 246, 38, 192, 163, 156, 213, 58, 110, 179, 22, 53, 144, 232, 98, 175, 58, 109, 164, 241, 38, 201, 195, 56, 115, 245, 115, 176, 241, 1, 23, 204, 108, 138, 241, 15, 208, 145, 79, 167, 167, 244, 64, 82, 50, 116, 72, 159, 23, 189, 23, 4, 71, 211, 232, 251, 98, 25, 171, 223, 233, 102, 36, 59, 0, 208, 116, 175, 91, 153, 236, 99, 28, 7, 215, 217, 176, 225, 218, 105, 82, 8, 167, 186, 126, 80, 37, 62, 233, 225, 179, 196, 184, 8, 104, 74, 94, 56, 203, 173, 154, 39, 242, 29, 46, 121, 117, 2, 184, 160, 5, 97, 253, 162, 44, 3, 48, 96, 154, 145, 34, 181, 111, 102, 78, 78, 73, 83, 8, 170, 16, 100, 186, 51, 100, 94, 96, 78, 143, 115, 4, 41, 198, 143, 204, 169, 93, 29, 121, 202, 147, 210, 214, 50, 166, 77, 171, 42, 115, 57, 138, 228, 163, 244, 198, 80, 199, 148, 204, 10, 6, 184, 50, 46, 243, 181, 64, 43, 5, 94, 123, 161, 115, 169, 224, 168, 15, 125, 51, 100, 85, 103, 4, 73, 44, 193, 173, 139, 59, 241, 46, 32, 167, 194, 197, 58, 21, 216, 234, 12, 111, 92, 155, 156, 107, 177, 233, 192, 239, 43, 241, 13, 5, 163, 75, 158, 252, 175, 85, 125, 125, 167, 52, 12, 76, 117, 33, 252, 93, 234, 128, 216, 174, 215, 120, 170, 215, 70, 171, 191, 50, 235, 27, 137>>}}.
{{encoded, "ZMjRHVQ6b4E6qoWgpU7rUdVaesajSHan5uGt8ybwnp8qHsbWeZWSEkhVEKx1GX2qrNCDEnrxY7Jm7e1zDky4FUFyWLBgM92MwhhYdKfHpQmuYdPgMQ8rJ7rfXmwX1WMB2JLBvf4fXWoA2oBdHpXLMNJaguxFvoQbgpLQrBPrY4QLeugGo87AzLxnjysTr6E5Ze2tWhkm3R48EmSxmdL9AdjDVG2yh97KEBq2TFWpRFzafTj7cirke49Wj2gYNYBYSv8GeKEiwcuH2SiMZDMu3eeMnVz7JP6PjpnJpmPkbXu3FFb6z7tK81A1EjFjFzxMA51qiUaT8aGKGZhEyaHmChx1mNrXo9EHyfWarRN4wrHH1Vyma6vB6UFPpNA7db1zg8T6HQqDUpayjqBTUXin7s89Ho4X4jcXonej8bttpbcwntgBTRYuWEcYg7Ppd521zXCCzSNSxyT1sm9XiWnuNr52K54JZGJFJwZSS9GUbcuB5DSzAFy6JRWA8yu9C57FtjTp8fmKTbjZGXmVANuGk1xayqb38JffGUHcFSDVUawPsTXqMFZwmovnWTGz93vNzSLvh4C3m2jhrEvKCU3tHxTX8xe9MFKCX5eBme6RdcshDGhZwaNZcooMAwtvHS4Wo57sModF2XX7ufgjd9J2KhYVFHHGqkuzZjiF44BEHuXG6pVGehtWWPuG4ovCwL6eo1XsQVxaRb6EQ8rDoshosrCxy9ZmfrmB9JvyPRMPBEoG7fNdbszjW7LtUs3vjUyDBLvFTE1ciZgwLieBXgGiyrYNqjiT6Z7TozyPzMDYFkyYVx5Lo1ejQKQSWirxhWKZRwr49TxJaAq1ipQMYjz5KSb"},
{decoded, <<212, 145, 246, 3, 2, 250, 116, 116, 163, 85, 81, 39, 141, 127, 0, 141, 114, 152, 190, 66, 150, 23, 51, 73, 55, 244, 176, 18, 34, 114, 48, 19, 171, 246, 174, 69, 45, 51, 121, 203, 70, 187, 70, 254, 233, 170, 76, 25, 98, 81, 96, 32, 26, 228, 190, 164, 194, 129, 15, 76, 19, 143, 112, 178, 220, 198, 15, 148, 161, 188, 196, 108, 116, 183, 238, 107, 186, 91, 233, 127, 203, 14, 248, 133, 217, 124, 194, 148, 137, 144, 131, 140, 18, 110, 219, 158, 38, 248, 115, 128, 191, 68, 234, 224, 142, 205, 142, 194, 171, 146, 32, 186, 67, 181, 18, 49, 170, 192, 178, 121, 215, 114, 180, 140, 71, 47, 104, 179, 134, 206, 218, 210, 218, 31, 214, 115, 31, 71, 28, 134, 58, 129, 36, 125, 71, 226, 51, 49, 68, 199, 147, 15, 95, 100, 116, 193, 110, 101, 67, 132, 79, 252, 248, 129, 161, 45, 17, 154, 25, 96, 46, 73, 202, 22, 19, 131, 15, 183, 97, 31, 171, 176, 39, 58, 187, 63, 16, 24, 0, 3, 84, 79, 106, 251, 121, 30, 187, 218, 116, 233, 68, 229, 131, 206, 193, 150, 113, 87, 87, 33, 170, 65, 212, 64, 126, 165, 251, 35, 87, 163, 222, 73, 186, 17, 25, 248, 64, 38, 77, 90, 136, 66, 208, 193, 178, 56, 57, 22, 179, 195, 40, 194, 186, 219, 192, 254, 27, 150, 94, 174, 69, 135, 126, 245, 171, 111, 172, 120, 169, 218, 97, 158, 18, 173, 168, 214, 9, 210, 203, 207, 224, 170, 137, 185, 224, 179, 114, 171, 177, 99, 221, 199, 255, 202, 57, 1, 68, 40, 47, 171, 132, 144, 154, 63, 52, 85, 180, 75, 192, 49, 13, 251, 18, 148, 60, 70, 190, 87, 63, 9, 134, 158, 88, 142, 11, 120, 208, 255, 121, 179, 205, 219, 181, 113, 75, 146, 176, 200, 169, 139, 139, 210, 106, 165, 21, 235, 33, 56, 6, 130, 217, 119, 197, 131, 98, 50, 133, 227, 16, 48, 40, 104, 238, 89, 37, 84, 199, 127, 172, 86, 245, 207, 122, 200, 166, 114, 42, 169, 65, 89, 170, 153, 234, 36, 20, 63, 56, 26, 134, 23, 219, 253, 112, 184, 181, 103, 223, 205, 77, 101, 191, 215, 87, 199, 15, 33, 71, 36, 213, 203, 116, 249, 165, 8, 178, 205, 189, 195, 93, 37, 99, 215, 194, 56, 188, 11, 127, 242, 76, 31, 70, 131, 195, 149, 202, 145, 55, 167, 1, 23, 227, 182, 69, 109, 174, 208, 194, 169, 79, 222, 129, 170, 8, 23, 235, 152, 224, 229, 155, 146, 27, 122, 17, 55, 208, 113, 175, 150, 195, 186, 101, 110, 21, 152, 198, 156, 195, 107, 28, 215, 71, 37, 116, 43, 119, 50, 132, 187, 27, 234, 106, 68, 131, 199, 56, 165, 248, 13, 78, 226, 24, 151, 249, 95, 61, 193, 229, 23, 64, 240, 217, 191, 249, 247, 248, 223, 242, 13, 212, 176, 246, 210, 190, 80, 24, 194, 236, 231, 66, 250, 193, 84, 107, 11, 182, 6, 229, 33, 140, 208, 149, 62, 18, 73, 41, 107, 222, 34, 72, 124, 162, 103, 149, 22, 33, 99, 79, 47, 100, 146, 237, 47, 219, 112, 200, 78, 86, 8, 248, 21, 132, 129, 37, 105, 216, 4, 63, 161, 142, 82, 84, 190, 199, 78, 26, 16, 51, 233, 209, 180, 229, 154, 78, 116, 132, 1, 76, 153, 66, 204, 245, 194, 88, 212, 175, 42, 157, 208, 75, 180, 7, 161, 241, 137, 80, 182, 206, 252, 253, 177, 221, 130, 178, 91, 54, 210, 244, 193, 209, 219, 153, 166, 158, 55, 164, 132>>}}.
{{encoded, "DbggnjLbJZ8pqzNUQCAva4HjvNEP26vE8vmg8jbdWyJoZhkcbo5ZLL79nGwDe6q2D12biqTMSmEo18AzRMyDhN2fVYPPr2JCUhvUeYLTaTmiWEu5iXtDjhzD8fajFWRAVEa3RR36qGJVSYqoU4Ru87621U6Bzrc58TPC2JKdaLHufYdsJyi5baBsURTTep7WP7oa7dyLMs5FKz3itFWENQC1Vu8rL7sCBTSDSDabBK3oMDSE258AtjCPXygjz4eHedZCEoU7UZhL3VUq3dc95iKqVbg4iqZ41zUwL61kRPVVJXSdNXmwVGPd9K9j7E9CUdQrn63h4n7BpSK9CRQTT1vGg8o1YLLEwVUJNfCPmPZowXST8ZxXfgjaZ4v2HTxNL4fuaWoTWeMZVWXYQvJQtHbL3XPuKinejpGbk1jKyRMjeBxepvVnxN7tnpgBMfwZhK7rC7m2cm9a5Wu8SiHYCsANUH28qFLDsqLGeJ7ytx7y9S76JzXXNsDvFfWH98nA7m2ZAEmpweDkoFE3DqjybY24XeWmyZ6LMpt9juDSkiYuCnccPLDgkLYrgEtyy7Z3GDNwDjxc8mmGbCnvsM2ziN2T1KSCU6CVcKVpSaHy88YMTWEiYCoLbT7o81hDVmQfBGiTS2jDNTgcMJhF6AaTv8gm6KyNAxRJiYVHxV8E59CVPBuwYyYkzWtVsvRngzo214EjKw2LLU267VeTdpHVNx9tpYjEzXebfuzbWkMCkTSUUuKLk5jQy114F7swrQunkFankYWguo4LR94VLsVZCRJ8wCKzNtxWBS2nyn4HaECZgJFvUHT7ng"},
{decoded, <<33, 77, 54, 182, 229, 67, 5, 48, 219, 64, 240, 102, 236, 142, 213, 145, 92, 100, 54, 75, 103, 75, 162, 130, 184, 3, 85, 69, 186, 149, 212, 106, 196, 57, 210, 142, 220, 90, 104, 214, 222, 177, 53, 95, 58, 124, 69, 193, 184, 175, 92, 165, 15, 79, 81, 134, 150, 10, 138, 27, 184, 20, 173, 35, 204, 184, 195, 144, 246, 30, 230, 90, 157, 30, 35, 30, 173, 102, 55, 11, 7, 174, 213, 152, 102, 135, 177, 1, 10, 53, 119, 162, 60, 182, 241, 40, 113, 95, 249, 93, 110, 232, 74, 237, 115, 196, 97, 25, 7, 149, 5, 176, 181, 173, 28, 123, 218, 245, 125, 179, 28, 214, 15, 194, 230, 18, 125, 213, 87, 56, 233, 6, 13, 31, 109, 30, 40, 202, 68, 133, 190, 205, 200, 250, 173, 219, 181, 43, 44, 216, 221, 221, 125, 241, 236, 112, 193, 16, 243, 86, 61, 191, 229, 188, 70, 159, 195, 215, 113, 116, 116, 108, 145, 106, 178, 73, 245, 85, 96, 94, 152, 66, 177, 173, 212, 206, 71, 0, 229, 223, 242, 37, 89, 5, 248, 139, 215, 107, 216, 76, 169, 78, 115, 218, 84, 2, 210, 49, 140, 152, 86, 23, 66, 7, 185, 98, 8, 127, 238, 236, 126, 207, 126, 220, 166, 70, 174, 95, 167, 35, 161, 121, 214, 129, 32, 68, 127, 37, 161, 235, 137, 71, 37, 161, 230, 136, 2, 90, 92, 88, 246, 27, 175, 25, 99, 61, 197, 128, 170, 211, 123, 194, 196, 91, 48, 152, 146, 47, 163, 4, 227, 116, 254, 202, 48, 143, 194, 72, 193, 18, 115, 154, 35, 160, 76, 121, 59, 101, 216, 49, 90, 215, 197, 177, 221, 47, 211, 178, 45, 23, 67, 35, 26, 215, 67, 117, 34, 59, 215, 76, 219, 174, 29, 16, 226, 28, 41, 193, 192, 113, 194, 154, 189, 194, 45, 55, 80, 147, 100, 78, 120, 52, 194, 60, 238, 174, 127, 182, 237, 42, 142, 185, 70, 187, 132, 142, 141, 230, 22, 234, 72, 144, 233, 45, 143, 146, 129, 94, 146, 39, 170, 135, 76, 117, 129, 129, 224, 222, 7, 110, 11, 125, 141, 167, 179, 230, 159, 47, 140, 44, 158, 35, 187, 133, 107, 148, 51, 171, 136, 139, 210, 235, 14, 245, 198, 92, 40, 5, 212, 146, 75, 82, 3, 11, 234, 244, 236, 4, 200, 223, 178, 111, 239, 44, 231, 193, 145, 246, 101, 97, 95, 172, 85, 49, 254, 134, 68, 204, 148, 88, 243, 199, 39, 25, 51, 224, 242, 28, 74, 22, 195, 211, 135, 252, 158, 87, 241, 202, 166, 33, 82, 113, 38, 44, 169, 252, 127, 134, 116, 202, 5, 167, 51, 190, 27, 95, 60, 211, 183, 36, 90, 85, 21, 143, 200, 136, 5, 77, 238, 50, 13, 94, 249, 7, 77, 203, 214, 27, 13, 218, 54, 176, 164, 9, 138, 96, 101, 237, 191, 197, 191, 170, 251, 42, 79, 200, 199, 107, 140, 192, 106, 36, 226, 171, 118, 200, 251, 109, 228, 63, 185, 117, 159, 122, 141, 234, 74, 73, 72, 73, 21, 185, 62, 38, 236, 13, 143, 158, 69, 32, 27, 248, 166, 163, 62, 234, 102, 143, 200, 183, 210, 198, 34, 205, 173, 197, 57, 16, 136, 153, 167, 82, 81, 54, 225, 227, 184, 2, 81, 149, 144, 172, 49, 130, 44, 109, 148, 59, 50, 113, 133, 161, 138, 213, 227, 27, 231, 79, 233, 51, 125, 98, 159, 166, 188, 96, 74, 251, 131, 78, 231, 97>>}}.
{{encoded, "T7wKWZwEYLmsLaaypA1uPWNoXAAeQ3vdWJ7JNqnyeiTYDdARSBnSQEu24aDp5aXUjrqdcdSK7mm8hbFVjhTJKbwiNvVau8zTVKqwVwz36Vqy5mgA7nq4LUuQXQiizrfvJfoGzrP4ivK1kxzaAFfV3UKRMtvQWH6rMiCpP1jK8bzy4D2wxcdfKi5ozDLxrbqS9ZFSS7jSTaTrXFPhNhi6sGzWo8nqoa68FZZVtJsUdHvBoENJMvyPC9Ng67sAEJhvqoTfmNXEnpJdrRqKWxvCzgfA7hQT32dKErHByacPVuvP8FBPg7JH3oeq2L1nixbooCH6cdHaRiPzRoScVb7pFp5vkCaiJsc8bxGmfgQDesq24QTXgPTiaJvbM9GtFXZPUk828ZsRBtZBouJAHiF1noqZHg917ur9pfyhGv7zqN9FTASypbLVSSiJXg1KTEx3Aqo4F14uyAwaQMXuJLhRZC5KtiUfbNdWmASvcTKrWUc6pPD6BgWdQLEnUCpDEgqiALuDDJ9o16HTBsFyyFzPMVf5BptyeDc1EnQURKnbV9cbWwtSv4rnPJYABjBWyKfJ6eRDHowwmxC6AVxHfrimqSkw6wi9icnkFomyMNLNpmA1Fe6Skh9kjLnyp5oxCfqtQhtN2td44gRfMuM2UyGnePS35DKcyR2XdoGAkXx2HY2p9ABrqcLvfkwGWyjVqPicV94aYcYD9fBLQBY5AS78jgVUC98PbBcL4nkVEPRdjCycfKycayYgLKgrZhcJtusAtSKaVK7gPCuCmVzEAzRdSN57N5dXke36x9U6VQzBBrWJ7xnrDnFFdN9qiydDTojAmY59nCJfBbbEgvxnKe7vXVeVMqw5iYu7c4GCQVLZRYSGGsYNCYgGfcXvYXnb7JjNQDHu4adHYkfCwSXx6BoD1k9W5TNaKb87CGgiSNvFkAM8T3fNeUJ5BYPt6hmRfziKKnsFbpq"},
{decoded, <<183, 32, 141, 88, 248, 254, 7, 151, 207, 73, 213, 92, 254, 159, 244, 123, 85, 100, 44, 18, 39, 235, 236, 206, 84, 229, 111, 172, 55, 89, 236, 228, 219, 245, 141, 45, 4, 17, 8, 89, 250, 137, 248, 221, 223, 189, 111, 95, 241, 110, 167, 226, 109, 51, 121, 215, 93, 140, 135, 31, 16, 25, 75, 94, 33, 190, 243, 213, 108, 158, 75, 171, 30, 12, 12, 1, 55, 166, 164, 49, 226, 137, 219, 163, 222, 31, 200, 42, 126, 136, 132, 10, 88, 39, 121, 56, 199, 65, 137, 182, 226, 29, 108, 57, 159, 65, 33, 45, 56, 188, 222, 89, 79, 149, 97, 99, 115, 217, 214, 117, 71, 17, 197, 160, 99, 189, 140, 244, 2, 26, 247, 124, 118, 106, 95, 86, 68, 232, 154, 222, 192, 137, 171, 196, 135, 155, 218, 26, 2, 246, 169, 167, 238, 114, 24, 26, 50, 102, 210, 127, 254, 197, 179, 95, 151, 68, 183, 138, 105, 53, 177, 94, 129, 129, 215, 20, 181, 174, 225, 23, 86, 251, 208, 105, 56, 189, 235, 104, 126, 222, 165, 181, 72, 58, 12, 29, 62, 35, 160, 114, 159, 172, 147, 214, 239, 1, 214, 56, 86, 249, 36, 164, 141, 118, 37, 86, 143, 80, 235, 61, 245, 10, 221, 127, 8, 194, 156, 165, 171, 122, 210, 203, 180, 116, 178, 94, 184, 138, 243, 166, 13, 138, 133, 167, 171, 6, 171, 55, 48, 49, 153, 206, 74, 249, 197, 254, 2, 134, 126, 213, 176, 183, 27, 209, 180, 196, 79, 140, 241, 109, 225, 17, 134, 52, 174, 72, 204, 132, 62, 101, 30, 74, 191, 48, 34, 8, 110, 254, 254, 233, 72, 163, 209, 230, 164, 210, 5, 204, 107, 78, 165, 88, 6, 177, 22, 218, 159, 180, 17, 143, 57, 85, 194, 231, 147, 171, 191, 157, 145, 34, 219, 27, 16, 77, 121, 107, 104, 191, 75, 17, 85, 204, 200, 134, 202, 254, 108, 167, 242, 105, 90, 41, 227, 195, 171, 129, 62, 62, 19, 232, 38, 231, 146, 225, 69, 252, 231, 202, 210, 26, 17, 188, 22, 204, 159, 135, 81, 4, 234, 42, 43, 40, 40, 227, 229, 131, 110, 192, 198, 175, 161, 192, 244, 99, 124, 247, 16, 225, 204, 242, 234, 59, 73, 8, 150, 228, 209, 114, 85, 160, 183, 165, 89, 174, 195, 94, 2, 13, 102, 37, 100, 251, 113, 60, 160, 227, 103, 34, 154, 86, 241, 121, 192, 218, 138, 158, 50, 4, 134, 76, 158, 224, 54, 138, 46, 232, 189, 112, 118, 175, 77, 4, 197, 66, 28, 248, 95, 148, 47, 115, 238, 166, 141, 22, 215, 87, 33, 172, 140, 178, 65, 111, 153, 79, 56, 59, 209, 25, 143, 62, 146, 121, 155, 216, 61, 164, 17, 3, 251, 58, 225, 46, 247, 105, 230, 51, 72, 169, 55, 245, 179, 250, 44, 126, 150, 242, 153, 252, 218, 88, 67, 6, 3, 75, 13, 172, 88, 225, 96, 77, 90, 238, 155, 86, 121, 10, 110, 79, 145, 111, 183, 113, 93, 113, 73, 185, 117, 221, 166, 56, 216, 88, 114, 174, 240, 39, 81, 123, 22, 224, 103, 71, 54, 35, 57, 229, 118, 142, 128, 158, 160, 89, 252, 99, 200, 140, 207, 185, 86, 39, 178, 178, 182, 171, 187, 88, 211, 240, 148, 55, 140, 121, 178, 167, 52, 250, 135, 81, 213, 112, 85, 90, 246, 35, 0, 237, 114, 120, 247, 38, 120, 38, 135, 153, 148, 37, 141, 234, 179, 64, 151, 190, 197, 185, 8, 138, 172, 70, 97, 141, 20, 194, 60, 15, 176, 118, 35, 30, 24, 56, 185, 105, 3, 90, 45, 153, 241, 45, 124, 113, 19, 137, 59, 41, 10, 54, 175, 95, 1, 35, 11, 137, 245, 149, 211, 206, 210, 61, 28, 124, 85, 69, 109, 88, 231, 196, 231, 154, 4, 84, 91, 40, 171, 200, 23, 41, 230, 37, 8, 155, 23, 136, 116, 94, 116, 112, 186, 234, 161, 142, 182, 8, 61, 227, 187, 65, 133, 177, 223, 134, 39, 99, 45, 87, 133, 151, 121, 222, 130, 57, 70, 225, 228, 68, 168, 159, 234, 142>>}}.
{{encoded, "JuPVTmdkSiSTyTSKHB53qrHjswnDwfTKvWDgM6wnVxGjAkt5TeaZafdpgkmxj14aevuQdnDgDq18Brcc1Kb8ZFTpJSLhYskSARUNSeW1R2igxPb2pzmvSRUHZ4Q1qTczWSjta2NaBFG8LjTEi6Psa44d76qv3PrHjCRp4EgKShDLZxrj5oXTcCAKR65nuzyFtioAFaP2mm8itw1Sz65QdaSgVjotxkfoivHDd6Smit3VjtJBNE5T5XW7kw2iNLbT58PjLfyBe1QCBDFmJ4eFDdt5Sw8akqSNQF1FDZ2d9Zbu1cHstnFD1YD5CNjyGwC5VB9SCBiJvHdbRMFGDAzjEhV8D6TAMaGVVkhd8F3YNoBjzXknwfHLh4KtfFwVTtUdHqqXfvbiKuESmy6bDa5ZTB9y7qzfyewd91tYh11T8chVVzrK7XJy4YFBwByiz8QkA62D9Mdncn4gbw8qYyufiuriM6BwU7PNtGF9B9Fo1aSVFQrawRvNHiQ2vz8QLsr2TrAQcNLqL2mJuQAJwMFiJLkVDjTEqXBcxdTNPtgezuFbDJDyhoEdvBFQef1be8hExD5JrgtJrsfWb7mvpnmiKSM7Fw7LfMn7v3yrpoWP5HNk3bUKTHZC12nhgSHSRxTtd2c8awNso8J3hnDWGzzLmf533hR1ebk2WPuBwqrKbiqepCveoLsztRVBTm7C6abF7ykaFfNnTLfhod7sJF6cqyzbSg1KYc5uXLApDuuM9qKjUoRYXJtZkxVa"},
{decoded, <<5, 43, 29, 181, 105, 131, 166, 174, 22, 71, 149, 230, 181, 169, 80, 121, 122, 159, 102, 148, 235, 172, 21, 240, 76, 167, 9, 50, 21, 111, 136, 62, 81, 75, 49, 190, 5, 160, 209, 61, 154, 71, 169, 190, 2, 136, 237, 11, 111, 69, 103, 139, 143, 160, 74, 226, 100, 113, 144, 119, 11, 12, 176, 69, 64, 28, 144, 88, 46, 61, 170, 181, 78, 164, 11, 82, 212, 108, 43, 105, 164, 112, 31, 43, 224, 120, 212, 71, 60, 171, 218, 58, 88, 187, 21, 22, 138, 95, 139, 71, 223, 31, 251, 238, 238, 214, 37, 34, 206, 118, 10, 231, 145, 76, 148, 89, 98, 145, 105, 162, 233, 46, 130, 48, 232, 221, 253, 89, 71, 11, 140, 60, 139, 142, 213, 45, 233, 14, 90, 31, 186, 184, 27, 151, 228, 247, 184, 124, 194, 82, 200, 162, 24, 182, 240, 6, 101, 174, 21, 179, 155, 215, 146, 102, 62, 227, 136, 191, 157, 155, 32, 80, 186, 91, 139, 136, 202, 187, 50, 15, 173, 169, 228, 231, 215, 204, 254, 242, 147, 106, 91, 169, 160, 233, 168, 38, 152, 178, 223, 235, 49, 245, 4, 185, 169, 166, 116, 84, 8, 6, 140, 52, 83, 240, 198, 80, 21, 245, 127, 102, 162, 233, 167, 121, 164, 239, 252, 36, 229, 115, 6, 231, 198, 108, 220, 155, 251, 127, 42, 7, 52, 207, 184, 93, 167, 141, 25, 18, 209, 72, 104, 250, 24, 216, 221, 56, 66, 183, 175, 1, 186, 61, 207, 105, 10, 152, 213, 16, 184, 40, 107, 232, 2, 110, 4, 132, 196, 199, 46, 33, 246, 78, 189, 55, 76, 16, 12, 211, 15, 20, 188, 248, 40, 181, 253, 188, 89, 42, 251, 134, 220, 104, 33, 213, 230, 162, 5, 42, 24, 156, 56, 210, 78, 94, 109, 178, 23, 245, 222, 209, 45, 180, 138, 19, 150, 124, 125, 176, 178, 212, 121, 8, 91, 97, 67, 120, 174, 60, 118, 180, 218, 155, 238, 146, 136, 100, 191, 62, 214, 36, 216, 41, 165, 57, 190, 129, 109, 111, 25, 173, 111, 69, 132, 160, 27, 64, 126, 105, 110, 212, 132, 185, 151, 156, 183, 25, 146, 195, 194, 152, 150, 253, 82, 233, 43, 48, 113, 115, 167, 152, 168, 254, 80, 56, 163, 18, 40, 59, 126, 132, 91, 34, 51, 47, 94, 149, 130, 117, 74, 61, 68, 143, 25, 246, 160, 139, 81, 125, 66, 177, 15, 34, 176, 48, 47, 80, 33, 95, 231, 68, 191, 18, 5, 47, 92, 134, 186, 97, 143, 28, 232, 155, 117, 142, 48, 37, 233, 111, 24, 119, 215, 202, 235, 76, 66, 96, 177, 115, 94, 193, 199, 159, 239, 125, 255, 15, 126, 78, 85, 216, 129, 237, 181, 139, 153, 123, 92, 0, 37, 79, 200, 246, 121, 145, 221, 130, 161, 170, 214, 168, 198, 223, 11, 30, 234, 148, 185, 33, 68, 45, 236, 255, 132, 35, 231, 184, 157, 153, 22, 247, 77, 43, 144, 99, 96, 8, 45, 95, 51, 152, 31, 151, 105, 243, 138, 254, 162, 225, 125, 230, 160, 183, 177, 133, 176, 92, 137, 141, 219, 234, 35, 70, 23, 1, 212, 126, 137, 7, 239, 110, 115, 182, 125, 0, 192, 51, 13>>}}.
{{encoded, "3HzjeQLCACibXxRDM8jzBVDGXsYq8gpLph5wdWxhx2V1JmtAJdQogi4susza21Pp7bVPwMTL8LR8Q69oPzfFgksXdkdP8A9uYYpqzKFMsYTyATEPZcU63DmWQ5aDVwBjeNrS8oVkfUya18rgDrChq3LWcH9oS1rJyVPszvTEgyxdQV7QtbJBoEdByM93BtgyiH7EXEex71BQwnxh6ziYrGHm1KtGtLMozWaoXoVgRJo29m8f4eZvGBE9GqpeRyCZuxTxLA2qNCiFZYgf7xsPw6mxXGaXEnbjPAkSJ9Gjxxu9p1b4LWJx5cTVbwPKrfnodo8FvkyEcugB9W86o6XwFeABApUZuxpcrQpdA7hgmEpC8UEqMDNALzxGytK5zc7RHMHFNLaHxqsjRsrx3nb2bKyVnvmCzwxCSrEtUWki2F7adgynnbkdsqijozMCP4c4pfmFxVKayUtC1y3twNQX9Pjpqp1chknwhTvncDyE1R2vCcR5PWYpPNLQejn3e3d6RE2PRrrqvnh6GYS2dCbmmGJCxoLVn3WuMkvt1zqiMiWxTJQ5VZAAqydaJTcqbndW8DSYFkpPrrEM3eFCpinmrnxN3cWzezVBcmdAC8GT4s9wAU4jZxzwpU4xEzVLgqVB4FQZPsg3akQ6XgyXsxvz4HDqbtLkJeBNWm4WecAa3o6WLdvt8tYoAWsGPGWeWrNwnJmsxrXHhPtxiSRb24ifqeqkgs2dZU7Xqw69ZF4GsYprLikMNKY3treTQ6HgSuWrwrci2QMnKwxX37ZtNB8hjuPrMLSUmfLvooDfVCjKhjh8xvTXFhZTPXfo9qn6nKgTAr8Y1jZpzSKBhjHzNmdQS58PNrAY3gRN9LfQCD7p1BVxB9W2Rmp94abAM4pSxGbgH9dCWjWKUizwqddtVkvQosVyF94KC7TvBqLf3p3g2VNMyhZKhZBLP6oFGuxg2mg1bEbSRFXJkxXoaRQbyGZooH55j94RT1qiCu4njPFEG6dniCVdRD6GoGHtwg6MouZXqnwRzrSHnDpk53SG9MGdAEGKrDZryBDK9i9asoRvL2TaHve27dGB8p3bKvrmmXLCyZXn1cvwF5RdckXMMbyY8aaiQgLPjWPN38L5PgYeDRhU8p2pZNJd88GNynamoVDcheWYzPsePdzhVSNT9wUdC8xt7t4oFna1811XZathu3ECDo55imcSyuySeoDmN54vSfxMGHSboEyNKQqGpxi6wBKmy3t7cRZv8PZs9"},
{decoded, <<167, 170, 214, 92, 198, 22, 245, 140, 108, 212, 73, 70, 29, 156, 78, 41, 142, 155, 51, 186, 228, 173, 14, 178, 167, 221, 187, 167, 155, 235, 122, 94, 245, 60, 172, 7, 199, 140, 173, 13, 116, 145, 161, 49, 235, 6, 185, 154, 233, 238, 144, 76, 253, 137, 182, 126, 43, 24, 212, 109, 100, 64, 78, 175, 172, 133, 84, 212, 49, 234, 68, 139, 183, 106, 165, 242, 236, 170, 38, 110, 35, 43, 234, 24, 154, 165, 103, 251, 120, 191, 116, 205, 59, 242, 111, 4, 248, 137, 131, 136, 181, 139, 33, 204, 148, 100, 187, 173, 54, 67, 219, 81, 127, 26, 22, 27, 136, 19, 142, 165, 23, 44, 174, 99, 171, 102, 244, 238, 159, 96, 153, 177, 151, 170, 40, 120, 193, 207, 143, 124, 198, 159, 5, 102, 131, 116, 214, 22, 174, 41, 147, 66, 28, 76, 7, 151, 125, 5, 31, 161, 84, 202, 130, 240, 135, 214, 127, 122, 207, 226, 163, 114, 149, 42, 19, 200, 95, 49, 182, 21, 255, 124, 251, 57, 64, 250, 77, 199, 229, 31, 172, 148, 71, 170, 232, 218, 191, 20, 205, 233, 40, 213, 96, 209, 234, 121, 22, 140, 44, 87, 244, 54, 11, 248, 75, 26, 86, 126, 25, 222, 13, 169, 132, 65, 66, 211, 66, 102, 240, 205, 98, 254, 86, 217, 82, 205, 194, 205, 206, 66, 57, 76, 204, 127, 43, 210, 227, 205, 229, 61, 5, 193, 109, 35, 170, 92, 112, 27, 212, 179, 60, 87, 0, 70, 210, 184, 97, 44, 100, 54, 100, 120, 65, 88, 185, 74, 246, 212, 191, 167, 224, 23, 203, 27, 53, 20, 232, 188, 74, 90, 176, 66, 248, 177, 175, 187, 155, 231, 7, 35, 174, 7, 54, 95, 126, 108, 151, 192, 137, 201, 50, 37, 75, 157, 202, 166, 251, 128, 189, 23, 56, 108, 191, 66, 192, 215, 35, 160, 172, 93, 235, 146, 158, 212, 188, 32, 14, 228, 60, 224, 36, 33, 144, 183, 114, 164, 152, 5, 252, 33, 10, 105, 177, 22, 183, 245, 79, 208, 196, 101, 106, 114, 215, 101, 232, 170, 193, 233, 18, 45, 66, 199, 111, 180, 69, 133, 2, 155, 231, 123, 212, 159, 116, 213, 12, 201, 121, 152, 254, 248, 95, 219, 229, 148, 217, 30, 120, 101, 47, 27, 12, 158, 208, 179, 207, 103, 192, 22, 216, 224, 189, 64, 96, 57, 249, 163, 132, 169, 5, 248, 171, 185, 4, 106, 204, 236, 57, 26, 93, 36, 154, 188, 189, 213, 151, 191, 206, 78, 132, 252, 60, 242, 38, 226, 171, 176, 146, 2, 89, 18, 62, 242, 233, 120, 9, 80, 253, 75, 211, 140, 61, 124, 246, 5, 113, 56, 39, 245, 140, 191, 92, 49, 54, 47, 195, 48, 195, 152, 74, 77, 73, 180, 182, 90, 161, 177, 132, 225, 197, 27, 170, 18, 146, 56, 131, 102, 210, 239, 221, 230, 159, 17, 122, 86, 12, 56, 212, 157, 123, 28, 38, 177, 21, 3, 149, 235, 181, 60, 176, 215, 52, 84, 194, 191, 109, 102, 242, 245, 204, 253, 170, 131, 5, 123, 198, 215, 11, 132, 126, 95, 21, 40, 244, 130, 124, 151, 203, 68, 157, 120, 140, 6, 59, 134, 28, 16, 209, 235, 164, 71, 139, 161, 153, 174, 30, 226, 147, 254, 139, 130, 239, 196, 246, 216, 133, 43, 219, 69, 76, 174, 71, 203, 23, 251, 50, 149, 154, 86, 58, 43, 1, 159, 235, 82, 221, 118, 128, 96, 161, 130, 163, 28, 135, 173, 162, 247, 48, 176, 37, 48, 194, 124, 113, 75, 200, 238, 54, 13, 90, 161, 101, 109, 48, 122, 131, 1, 196, 209, 56, 107, 251, 237, 160, 188, 231, 68, 148, 51, 115, 106, 10, 126, 177, 158, 207, 244, 94, 44, 203, 212, 206, 142, 53, 173, 247, 216, 123, 72, 47, 214, 126, 16, 55, 5, 177, 130, 162, 138, 30, 12, 145, 151, 244, 158, 85, 175, 145, 130, 182, 142, 243, 179, 230, 21, 89, 32, 194, 25, 182, 214, 22, 218, 208, 229, 25, 156, 110, 89, 47, 227, 248, 50, 92, 153, 236, 125, 71, 188, 226, 228, 233, 55, 79, 20, 102, 128, 172, 184, 5, 2, 129, 132, 221, 226, 12, 147, 133, 78, 137, 54, 131, 30, 69, 118, 234, 254, 10, 230, 114, 180, 26, 118, 177, 159, 185, 216, 7, 124, 87, 223, 93, 6, 115, 12, 246, 187, 250, 190, 16, 192, 60, 249, 159, 254, 3, 5, 243, 73, 125, 254, 74, 154, 220, 74, 140, 30, 195, 37, 225, 129, 48, 218, 156, 119, 29, 184, 48, 104, 172, 205, 154, 251, 149, 28, 72, 5, 163, 27, 183, 229, 249, 137, 42, 145, 145, 235, 176, 246, 51, 204, 17, 208, 91, 157, 172, 136, 171, 99, 20, 196, 107, 241, 88, 87, 198, 208, 128, 157, 170, 53, 241, 21, 61, 199, 19, 16, 224, 202, 153, 6, 125, 30, 224, 147, 191, 236, 146, 219, 115, 3, 3, 129, 67, 65, 111, 60, 215, 223, 93, 3, 10, 187, 249, 76, 193, 179, 48, 185, 182, 161, 255, 102, 158, 51, 128, 216, 80, 106, 35, 48, 154, 209, 188, 64, 14, 59, 57, 0, 2, 13, 76, 123, 244, 212, 63, 169, 88, 34, 134, 131, 123, 122, 48, 68, 32, 107, 51, 213, 236, 164, 8, 175, 69, 186, 194, 35, 220>>}}.
{{encoded, "Sa2LuZpfTubG1HuuxxbnSmVvdhjANbDqWBiAaiFTyPwLREhQntgZG6KFMwoLhryomRuyCapaWipqjsRfnPGrxXpzt2CQhvPo5ofu6tWHQT4iU9EAcD6k7XhZb57GAHuJTVJ5BJrKqJRpZ3obmswMTNoZy4MtvLEij1YRSb2e2yNERrxBHsLLio5xa8EdnnKCtMEbibWcDivk3vDvu8U4pwh7uX1thJyukyjBkdxGMzf3ZsgZALK53sKC4KuFisGjyB3dFLy4pR3m8k3XHr254qTS28uGqxRJpEnJNYqHgsHS3mSbz8nfy2uzRq1XpvD1zJ1wt4x2NRRmwAZ98obGeA9cgt5FnT4CdM6NeCFd9fshJq8bKRa5Ci5cZ8MqKa8DCYwg9ey2rRYwVeMKkYL8FrGB6e25MErH2pzDVsrufDHsN4k7Ad1sMNhVAYotmFHu4NShDRdJBFUzZLpJmMM6b1cw2disTj5eE7uozp8gfkbRvLuh3p3cDznHnY4EzQjFzhaLv7jawU7gFLFuNcmpyqosN1Hn7bXSZwWnoKWCQRgU76wrd3vRd3Cbf1PAkNf5oZxqFiBYMpFisAet47L38vApLNLpNGMCmFuqS1uyU3Br5Sgn4HUBchjQw3Dz77vdD73WmHZfxKZnd5DJaWKnhe8ktgGp3dXnZCn2BRkgemGz1v2g7CA8f2Ax97d5XyPY1rxLSsGsAsFG7dWFA7pavL9fewyeaU6Si7CTwxgvehnhWur2i2QKP3C3yPEie5ZbBzPNpq1s2qZPZN9w3TRU7Qs3fPpZjxz9A1ec3Zvycvmjhr5CKUMjeHmVWABqXzsqjfQhCdj2zekp3BnN3pm9VSQXHCakuzaPoxPqKWq1igjpUQ9AvBTmMtgmeD8sRxTFkZhS1mGXXkDQ4qhm4JrDCGZShcnig1GobCySEEunK6oEBbB5mGnLqhD2k35wovSyHX9juL1gUyPDGATrAqUhJGAChojyKRknzUtW8MCN9jgxy1bWrpXXhcfwwdE6T42Pz3YZE6jPtJ59oRnnSLjnqcLJ6DKJTsaxgsryx2C6p7FraVYKa4kTFPPjm4BK7kbw6Z7nwb5Ar945wHTyVkBHig2gJ2Jd62F4wEFvvsGPb9E9PTonEzzfjkChQmKurnXLUXoH6J9xVuuwib1QU3Qj76j21QendqsYsudWf2iKFxsbjSXD9K1PFuHRENMSQjhnR"},
{decoded, <<252, 177, 19, 135, 55, 36, 254, 114, 88, 70, 185, 39, 17, 185, 195, 113, 207, 255, 141, 204, 103, 228, 29, 147, 155, 111, 229, 31, 68, 190, 69, 185, 167, 153, 214, 168, 241, 80, 24, 202, 117, 185, 38, 180, 121, 107, 248, 170, 207, 224, 22, 58, 187, 54, 120, 122, 143, 147, 104, 182, 14, 77, 125, 158, 35, 252, 110, 107, 127, 224, 130, 37, 172, 231, 66, 163, 118, 175, 227, 185, 77, 193, 86, 92, 16, 132, 217, 13, 74, 83, 206, 29, 89, 19, 15, 192, 157, 209, 214, 166, 60, 23, 139, 225, 67, 3, 221, 36, 72, 238, 181, 83, 141, 237, 166, 16, 71, 105, 246, 134, 65, 188, 92, 230, 139, 217, 201, 16, 137, 75, 133, 97, 206, 151, 54, 226, 212, 38, 114, 177, 176, 28, 50, 113, 52, 85, 178, 130, 75, 66, 211, 19, 122, 108, 195, 231, 192, 243, 176, 45, 254, 57, 187, 183, 105, 187, 33, 127, 91, 154, 85, 171, 120, 153, 2, 18, 104, 179, 46, 112, 90, 86, 57, 91, 107, 103, 67, 128, 12, 80, 247, 15, 14, 107, 153, 68, 151, 102, 202, 166, 169, 80, 52, 8, 162, 135, 205, 141, 19, 56, 168, 100, 248, 108, 37, 89, 125, 176, 111, 230, 250, 167, 85, 233, 145, 84, 91, 73, 42, 141, 125, 66, 41, 71, 208, 234, 49, 56, 254, 24, 163, 176, 64, 167, 18, 164, 94, 79, 21, 27, 26, 60, 75, 239, 82, 28, 40, 44, 232, 163, 2, 40, 161, 131, 3, 70, 153, 3, 29, 131, 76, 134, 162, 240, 82, 96, 118, 251, 243, 16, 101, 74, 105, 108, 94, 172, 188, 148, 245, 162, 20, 251, 17, 126, 82, 225, 51, 165, 251, 218, 78, 135, 236, 50, 184, 225, 3, 131, 86, 178, 95, 245, 104, 161, 182, 1, 40, 1, 33, 36, 255, 71, 210, 248, 14, 173, 72, 29, 192, 125, 5, 131, 215, 174, 172, 182, 142, 57, 216, 210, 81, 226, 179, 200, 131, 239, 174, 225, 181, 137, 53, 231, 70, 249, 216, 234, 218, 116, 220, 186, 126, 89, 38, 42, 144, 5, 232, 169, 226, 47, 195, 72, 47, 52, 144, 154, 127, 58, 188, 184, 81, 232, 93, 96, 143, 97, 215, 94, 63, 18, 134, 47, 237, 149, 104, 83, 200, 201, 208, 88, 120, 68, 112, 227, 238, 191, 67, 238, 11, 160, 150, 163, 173, 56, 149, 149, 214, 118, 185, 219, 181, 166, 71, 2, 212, 106, 100, 104, 209, 173, 51, 31, 178, 77, 138, 91, 81, 250, 52, 41, 13, 68, 181, 183, 127, 133, 61, 83, 84, 97, 177, 131, 26, 33, 56, 22, 100, 236, 230, 244, 192, 91, 27, 188, 127, 159, 187, 44, 33, 185, 224, 107, 112, 224, 36, 179, 2, 105, 255, 166, 171, 54, 62, 128, 86, 248, 70, 91, 13, 150, 217, 180, 100, 1, 1, 155, 69, 63, 231, 153, 163, 132, 19, 167, 172, 190, 107, 154, 236, 73, 215, 117, 114, 151, 9, 37, 211, 204, 206, 249, 233, 128, 93, 40, 26, 88, 76, 123, 211, 222, 229, 158, 35, 234, 130, 10, 71, 70, 29, 89, 148, 44, 227, 120, 9, 160, 9, 75, 193, 134, 235, 43, 166, 44, 243, 214, 102, 3, 200, 103, 178, 138, 38, 15, 244, 215, 224, 97, 238, 173, 115, 14, 93, 102, 34, 30, 127, 55, 14, 217, 191, 149, 45, 70, 160, 94, 250, 249, 130, 53, 149, 24, 61, 90, 182, 147, 85, 152, 152, 166, 58, 183, 185, 56, 127, 131, 61, 19, 201, 237, 19, 97, 142, 18, 173, 170, 178, 161, 8, 77, 84, 44, 1, 125, 180, 126, 12, 244, 158, 60, 70, 165, 79, 64, 113, 41, 157, 65, 62, 214, 136, 158, 30, 74, 114, 219, 71, 170, 186, 172, 60, 115, 153, 142, 50, 157, 135, 122, 146, 95, 47, 95, 80, 50, 5, 42, 11, 1, 29, 162, 68, 36, 25, 197, 183, 151, 153, 190, 31, 59, 54, 149, 193, 74, 40, 51, 96, 146, 36, 230, 89, 47, 43, 21, 214, 240, 6, 13, 115, 102, 134, 137, 18, 216, 228, 71, 229, 6, 37, 24, 27, 140, 190, 50, 12, 171, 35, 110, 28, 158, 177, 186, 146, 77, 186, 37, 223, 126, 200, 72, 198, 40, 151, 129, 33, 107, 156, 4, 49, 229, 239, 145, 30, 149, 212, 83, 79, 230, 163, 204, 56, 89, 153, 199, 149, 241, 151, 227, 39, 175, 243, 243, 88, 90, 199, 189, 71, 172, 112, 202, 7, 72, 39, 46, 152, 167, 151, 85, 190, 159, 195, 159, 172, 141, 117, 149, 63, 14, 180, 105, 200, 119, 69, 39, 248, 143, 127, 216, 134, 140, 251, 230, 73, 36, 150, 191, 2, 54, 93, 27, 95, 206, 152, 21, 22, 36, 242, 233, 4, 135, 205, 111, 107, 15, 24, 32, 120, 142, 152, 255, 222, 34, 0, 83, 42, 29, 98, 110, 219, 12, 187, 252, 185, 71, 156, 201, 158, 201, 54, 66, 133, 81, 57, 131, 22, 76, 158, 249, 82, 58, 6, 140, 98, 79, 94, 239, 68, 232, 94, 28, 212, 2, 9, 181, 73, 93, 179, 39, 0, 111, 10, 7, 44, 179, 185, 16, 76, 42, 127, 130, 10>>}}.
{{encoded, "AGZtkMm3zrY9f3TKTUuMHLqyY2a7bjPrFwPEExyoJB6GpkTD4NP8pGhtNcdaGkhj8y8M4Vu1Yk9GkdvpNJPXSn2NxHxyLMFykx85vesR4RooHTMAkjp5WYyNNcM8CyqakhGyv9ym9pQMdsRz9eFnevgGThxPy5aYFNFGvL9KhnFzWVC4CAeyhXosw7kVUeZPmL1CYSyMEBuXu5gVi74WidghNQdbXzSqM3o"},
{decoded, <<138, 184, 37, 149, 37, 104, 17, 112, 161, 155, 251, 237, 147, 51, 171, 38, 27, 157, 20, 156, 27, 117, 222, 149, 139, 85, 87, 154, 140, 61, 119, 113, 161, 89, 3, 51, 68, 68, 166, 228, 173, 130, 65, 7, 17, 110, 15, 138, 146, 6, 237, 137, 78, 51, 177, 120, 133, 253, 19, 78, 48, 15, 106, 149, 150, 95, 38, 195, 201, 122, 141, 81, 241, 141, 228, 45, 122, 150, 100, 186, 54, 22, 175, 85, 187, 192, 119, 200, 232, 254, 213, 96, 53, 109, 255, 174, 151, 216, 214, 197, 145, 112, 43, 140, 236, 6, 184, 1, 100, 255, 224, 247, 22, 234, 211, 111, 88, 92, 8, 48, 167, 65, 20, 112, 198, 27, 129, 86, 204, 198, 138, 169, 126, 232, 122, 76, 75, 194, 117, 58, 247, 24, 223, 246, 157, 23, 160, 40, 207, 186, 142, 173, 213, 169, 148, 76, 146, 240, 207, 43, 42, 245, 88, 180, 228, 162>>}}.
{{encoded, "9Txz4vp99aMdy1VHiZuBTPVYxoTkEe7A3XB8wZFspsWuRkpomKSRFvzKwkWcnBqm3sqA92PsGsAjHxfaDcJkNEQH5AqhHU1RjC25jDC8ugd1cNL3oiMaHhWkszXxLTbPeP17MuBrHqj5bkev1VcuNvHZ2H7HRt8JFABCPxbCaFfNHVYfhfsgHDzE5urkQtzrq5tJ9z4a6Qemcwe59Jbm7cejkb5RkfhNQ9JRrASrqRZVWncTUozYrVubhY4CvFNWFcpWusyTZMntW4xtpd74AZYNvx8bfx8eDWPkBU2QfyiJgWsJCMGyEP3AgssJhaE5ZjwCfiKpoJSwW3MxyHDh365njd6LQspWC8uyxtwh6XprUS2fH4NXkK2iHseDCNFw7Vmwsqss4mLSkzYB4mpjZYvaWs7m6YZDSdunjZn4GW8GRkhT52LPHdmZrYD6UP2UUt5G9NPHbG5kuzFWoCvYkm6ZLV14rdKfVdwbiTLSm8xV8BCxtyrsaFqUWNyEcrxer8fTKJoE85MvgQPdLJm6o3x2YAUhEeQTRkepVrp3Xsaeq1Ar1GnSiR7VYWovR5aJGMCoxoL1Gf8aayhZxhC9o2S2VpMzQjV11QBMJ1t3iVTrJcHYf2jYYs5rC238rr7tbnbx6BeBddwiMMnP9LCAGeZNxqsv5WH4TBEGe4SXejHPcmWq4us82ZckCXXRUKMzkMmfYJHTXwgGQTwgVWH2xLxRzdLUZ49dx6rJCN4MmzoAJ16eqhr1K3xp6dPwxpzVgR646er9fEAZfMuXYwfheoBY4STrxLGC8zcdhK5JZtiSu7fJKMiAo9dqugb3rZwEpaedaEEfdDk6Yof73axpaJ796KCQG267SpPeHj9Gtu7rqANxNe9qfz9XvErCiYrZ8Gm1ktuKLvRM3yjMBbm5UDpoBnT18NvNx"},
{decoded, <<156, 68, 20, 182, 102, 61, 231, 202, 165, 12, 51, 137, 140, 209, 167, 246, 79, 144, 157, 94, 100, 167, 190, 46, 194, 14, 66, 203, 67, 52, 96, 142, 69, 242, 151, 86, 244, 230, 3, 142, 239, 206, 62, 158, 15, 139, 47, 21, 141, 168, 13, 103, 206, 220, 221, 28, 58, 71, 72, 146, 134, 248, 225, 153, 130, 189, 226, 127, 178, 162, 61, 227, 139, 192, 191, 95, 46, 71, 246, 11, 243, 89, 199, 50, 3, 54, 156, 170, 50, 243, 61, 51, 13, 184, 137, 23, 248, 218, 238, 223, 43, 65, 134, 113, 254, 171, 24, 227, 150, 230, 253, 211, 108, 177, 13, 177, 161, 114, 190, 8, 121, 186, 147, 114, 99, 60, 51, 105, 164, 126, 141, 125, 37, 33, 95, 158, 91, 146, 151, 79, 127, 90, 232, 233, 179, 63, 39, 87, 74, 54, 198, 189, 255, 94, 143, 68, 60, 146, 233, 1, 98, 181, 168, 248, 53, 126, 137, 49, 9, 241, 197, 206, 26, 70, 217, 6, 141, 55, 253, 253, 197, 4, 43, 133, 40, 88, 123, 242, 221, 69, 204, 155, 158, 123, 69, 38, 126, 197, 23, 9, 20, 54, 7, 197, 190, 249, 198, 67, 93, 147, 244, 0, 165, 237, 154, 220, 106, 231, 116, 196, 55, 193, 156, 238, 14, 71, 89, 161, 245, 152, 139, 240, 205, 141, 40, 61, 207, 59, 34, 163, 208, 233, 91, 158, 121, 30, 102, 116, 254, 245, 153, 243, 233, 109, 192, 141, 110, 106, 21, 18, 80, 245, 140, 219, 106, 169, 188, 55, 231, 10, 100, 73, 241, 137, 155, 55, 1, 181, 0, 84, 218, 152, 137, 171, 42, 214, 19, 47, 178, 192, 15, 137, 84, 222, 218, 170, 8, 97, 91, 218, 139, 103, 154, 55, 145, 64, 209, 144, 112, 89, 51, 180, 134, 230, 190, 194, 107, 29, 95, 110, 222, 127, 162, 151, 199, 149, 100, 28, 82, 158, 31, 79, 219, 162, 117, 239, 182, 96, 101, 102, 234, 237, 26, 144, 188, 5, 116, 99, 2, 96, 176, 163, 73, 57, 197, 90, 35, 71, 15, 68, 163, 186, 81, 100, 9, 145, 2, 152, 172, 27, 238, 55, 58, 231, 214, 206, 249, 213, 139, 250, 99, 208, 159, 112, 212, 108, 253, 223, 83, 173, 73, 247, 93, 167, 188, 131, 1, 36, 84, 67, 117, 194, 133, 126, 16, 221, 84, 87, 71, 249, 140, 107, 113, 40, 24, 228, 173, 9, 73, 192, 222, 46, 151, 165, 78, 181, 8, 12, 43, 238, 234, 102, 194, 191, 120, 197, 73, 109, 191, 204, 135, 6, 38, 107, 234, 90, 31, 66, 82, 104, 27, 196, 80, 156, 173, 13, 61, 9, 134, 11, 53, 114, 44, 230, 171, 108, 15, 120, 64, 131, 91, 117, 228, 228, 142, 252, 128, 244, 98, 26, 30, 159, 243, 85, 99, 248, 205, 169, 108, 201, 236, 26, 64, 82, 155, 146, 179, 166, 54, 182, 92, 227, 131, 179, 150, 97, 145, 76, 202, 41, 165, 44, 132, 215, 163, 24, 67, 109, 208, 130, 67, 101, 38, 77, 231, 147, 31, 201, 87, 95, 197, 165, 171, 122, 242, 187, 7, 169, 59, 193, 111, 167, 133, 192, 164, 74, 15, 74, 30, 237, 126, 67, 254, 158, 126, 139, 44, 81, 7, 73, 160, 49, 33, 6, 45, 132, 155, 142, 97, 151, 152, 207, 53, 12, 123, 235, 41, 121, 40, 86, 30, 38, 213, 221, 122, 192, 180, 52, 149, 133, 9, 0, 225, 204, 109, 106, 90, 32, 188, 128, 108, 213, 92, 54, 64, 154, 138, 248, 7, 97, 162, 223, 49, 89, 92, 217, 174, 113, 140, 15, 163, 241, 62, 96, 54, 103, 189, 1, 192, 33, 68, 191, 43, 110, 38, 93, 250, 128, 10, 177, 159, 13, 229, 34, 193, 120, 153, 202, 8, 216, 108, 105, 105, 199, 198, 138, 217, 49, 30, 183, 50, 120, 182, 196, 82, 49, 162, 6, 28, 223, 101, 78, 170, 84, 164, 161, 205, 36, 59, 37>>}}.
{{encoded, "3dAFhNKRHdgfsWSrX1j79tRXdBMMTpEX7uneNPTv7kCs11xjSXNqrbMezWje3xLU4XrdSpQEPoaHQET864xvuG7m899crAFeMyZWWkF3scmSRgW3ixH7UMsUzMeLmDuLd4vLiCvjaMyRXpPwG2QrYRkeo5y5KmAdKjST6qUJAHatvynkdaAuxKzEfH6RhrFEPedf5x7p226r7aeW7oyTZjsa5xFES6Cec6mwpJVfq3UFz4pUTEsjL8AErDtjQv9GWvPfQvwjRCWoKax3aoBbXoM1augS3PK4GPS7Z9M743FTQNyc6Q8ZJTWB7kMn1nJ6c1W9hqLwEPkC45wLYjkAgauYwcFyMAuSmvPTpoJQ9E4KTjLqfAcRbgZ4vBAxrJ7rtf7ydmjbYEQriHqhLEKjAzUF1mhCbkbUU29hFSKbiSamQyAUX4yThMU8QJbZGD4p7zGuZNCzRgXubh8UHZWKer6aZeg3M35LpoT184LAupdQsKpNwRnPSGbe8C5U55GnJ1B9vJ5cKuYi2MKwQ7wX5AtDxW1CTbooPC9z1ZXrWZW1kEJV2uZkpkZnVfTjoaPbrouZqbWUgLSH8gG5ebXsKK8W9ZzsDsYa9CYrQDk6e7P31vr189dP4m5kxuBzxmicEGLyA1VRgc9WckrkSvc6HnvbQcLUhgsMfSW2rrtEHftQs6awk6XXwm1dRXQeW4v8ao4hZQxthvCxve3aJhKcGKGpNGd5jLFF8fy2C9CRF9nQfJKZoMNLRju1cRPRDCAL4yZ9AqNoWtiv9mV8vt9CdgEbWoWqHP17cPzeAGzXLaLEcvi9BUGxrcZLG1d5K4JJUPofcmNdFBwXFpdoE6HwhdQ8hSMxa5QAZKvwPZqwfkp6QV7RzU91wnMRKGEr8wiNKjvphUNmw6Qjq1oKE9uiadnZPHy3kT2FdhxNBy8C5XSwG45zmFk"},
{decoded, <<131, 187, 216, 38, 184, 147, 192, 110, 184, 242, 183, 21, 106, 185, 208, 143, 178, 134, 32, 184, 48, 74, 38, 20, 218, 219, 200, 156, 69, 119, 215, 202, 80, 12, 243, 89, 49, 83, 219, 248, 177, 32, 236, 127, 183, 149, 174, 255, 31, 115, 207, 88, 208, 128, 248, 233, 121, 206, 109, 253, 73, 223, 191, 131, 154, 182, 49, 238, 27, 1, 67, 20, 71, 129, 187, 57, 213, 17, 153, 137, 168, 75, 86, 55, 120, 35, 217, 80, 43, 254, 106, 12, 182, 97, 183, 229, 83, 251, 124, 78, 73, 220, 121, 232, 48, 42, 123, 98, 134, 254, 37, 164, 227, 213, 75, 9, 179, 243, 51, 143, 246, 71, 199, 168, 237, 33, 205, 151, 115, 54, 77, 60, 25, 102, 239, 58, 59, 191, 42, 98, 149, 172, 250, 56, 120, 189, 178, 238, 203, 245, 90, 24, 76, 27, 95, 85, 233, 15, 174, 122, 148, 46, 190, 254, 175, 247, 28, 185, 43, 180, 35, 13, 50, 66, 107, 79, 182, 62, 13, 49, 146, 201, 200, 243, 203, 243, 225, 84, 225, 83, 0, 124, 62, 128, 81, 103, 188, 10, 212, 175, 26, 223, 25, 100, 133, 111, 196, 225, 213, 186, 71, 201, 15, 232, 109, 153, 51, 44, 187, 203, 45, 193, 175, 166, 101, 16, 142, 110, 17, 226, 85, 9, 99, 149, 169, 78, 176, 58, 144, 220, 197, 143, 52, 208, 204, 17, 46, 236, 18, 149, 68, 145, 179, 237, 97, 32, 248, 141, 29, 173, 172, 156, 234, 21, 214, 47, 126, 216, 171, 70, 80, 48, 27, 148, 151, 225, 172, 76, 146, 204, 83, 65, 109, 201, 20, 95, 114, 237, 7, 223, 109, 225, 141, 203, 39, 3, 232, 48, 126, 139, 111, 245, 1, 89, 149, 119, 144, 207, 255, 67, 6, 18, 12, 93, 193, 110, 67, 13, 243, 152, 86, 46, 118, 125, 99, 95, 46, 225, 15, 27, 202, 22, 148, 238, 66, 244, 156, 90, 51, 70, 154, 183, 154, 162, 92, 6, 204, 2, 60, 195, 183, 224, 28, 11, 55, 136, 24, 12, 34, 208, 17, 15, 116, 41, 95, 27, 251, 170, 162, 144, 88, 145, 90, 8, 185, 3, 6, 64, 210, 15, 54, 203, 245, 127, 143, 52, 24, 192, 252, 141, 180, 59, 135, 114, 8, 150, 183, 57, 81, 72, 126, 58, 207, 101, 27, 101, 197, 219, 29, 42, 67, 170, 31, 210, 46, 218, 72, 241, 216, 53, 184, 163, 18, 128, 172, 105, 251, 156, 137, 76, 186, 150, 26, 244, 128, 65, 58, 139, 218, 65, 239, 23, 3, 86, 186, 185, 192, 175, 175, 247, 208, 184, 124, 162, 217, 59, 252, 123, 15, 167, 118, 76, 227, 45, 89, 141, 31, 3, 198, 78, 100, 210, 147, 243, 186, 153, 161, 167, 172, 126, 110, 219, 108, 222, 186, 39, 12, 64, 219, 118, 111, 201, 11, 82, 217, 26, 147, 46, 106, 233, 6, 219, 194, 69, 175, 253, 50, 41, 170, 92, 128, 61, 103, 62, 139, 41, 86, 208, 228, 248, 249, 164, 189, 84, 6, 39, 159, 120, 36, 211, 34, 230, 2, 190, 94, 175, 242, 128, 46, 141, 60, 50, 183, 184, 163, 192, 106, 2, 240, 209, 144, 76, 219, 53, 199, 115, 254, 171, 199, 39, 94, 107, 155, 150, 209, 69, 167, 217, 19, 87, 87, 130, 91, 151, 86, 228, 155, 53, 177, 76, 91, 120, 135, 97, 23, 235, 114, 11, 180, 30, 237, 236, 50, 67, 5, 196, 191, 173, 4, 7, 41, 72, 238, 20, 7, 188, 163, 54, 224, 90, 166, 92, 81, 243, 247, 61, 117, 165, 132, 192, 83, 75, 156, 251, 52, 146, 231, 212, 231, 50, 252, 0, 85, 38, 185, 111, 99, 106, 168, 65, 51, 248, 224, 229, 230, 118, 63, 124, 35, 136, 67, 52, 107, 19, 57, 170, 82, 168, 144, 187, 191, 24, 86, 12, 243, 40, 1, 237, 229, 46, 18, 220, 118, 83, 93, 76, 171, 3, 22, 137, 103, 175, 46, 100, 229, 253, 61, 155, 168, 37, 68, 63, 79>>}}.
{{encoded, "2CrjWNNi72CTneEz19eii7obi34SsaYSTSgfqcYc4bCJK4gFutgjNYmB2SLu3JSAguP8684xnGKoubE466wBYtYsjiaJEvsaFzqMDxSDM5HpG97EkKvPTPSYcHvHheB4mcsF75GTGaP1M67U367aCLEMi3Pv14xoHL5RVYiQu7L7vaq3VctL6qdBKJuMfpepv4AjV4WEqte6rg14hiDKKLntf35wcm2bs1VrADvNUzG2pezA1rpmdZGQcVU8ojy82DKaZWxUkXeRLmi8wgGPALdJtrDe1B2jh6QT9oTKsdkZhS3C7bcojyjqr7ZThSLKvycoFhyQxPfWfvj4Dr3FqewT3ZWUTU4bEo3kF6fDL53q7X7ZjDpjYhKkpk7xjqG8LZtQmNDKqzizHdaM4PvLqa9aBmAdA21F6jRGzWxsmZXPWQwdR7q63G84JBrz3ubrVjgwxCmmABrpcQCJRB7Yq6Qd647wjqEufVxjuPGLn1ZXNrNMqV8M57DAZWptASifqVc8uwD2YvyC5RBSX2fQuLg9cLKge4GvrWbKoPrmE5n4miHtXjYMHRRU75TY3QoWSGc5AryRRkCUGd38YeECjJh9UXYDyephbRTbLKucDLnBEP4uzxBT3nboUB4FBQ2dNWUPtzwtFjHypEfr14Ar1xtdVQ8oc3FebaKfhX8godXPCiKtBgp8h27eJrm5Y1ZK9mJd4W52mtdi734JzbkUe2MZAb6MvavBLufqtopS2ZD2SFz2xQ23z43g4hTmy7BXkwCs5jHnceBN7eJDPM8gQ8WtvnuyFsj8DBpUZmu45HZEEiUvPHVy8qhpTC31R7EhdiMJmTdAafsssefeZq8BgHDt8desPfYB2R7BZyWLTe8gB175Wec6iKBgHrvUDrhAwZraciCCK25axdt3ohvp6xVN5QRdZidJ6eMtU5pgzswyHbD6iQsFiMyCFL4guShkj5SHERYVTTD9vwRYqtvXrHBWFhsyB5z1hi2cGyLMxHHT9R9fqnTmNCixcPEbZXtCazvT3oLkR7gN1ntbcg2FcWAhBvupseRD7BgYSh1c6RTRsRqJCEncaYfzPeTcWVdfUhZR8cYm8cMZg1VQktRz7LK68rbzqJiUReh5C2s25ybHHVhqQDnd4cBSJuPK9HXvTcp1To7EawdK3KLWhp3aKemSYDcBhSAtU2d9mpzcs9o6JhH6FQuDa5yyrKGFPCbbn9E8i3H7cTbMQoDjmXGQqUpBdbZ5WmvZz19qqWeEAoS7gecZMoqUyAB6wgLv1kT3VLCUZR"},
{decoded, <<218, 223, 24, 150, 10, 145, 247, 226, 85, 207, 95, 45, 229, 139, 169, 166, 182, 2, 5, 163, 162, 67, 101, 199, 39, 214, 134, 231, 204, 208, 8, 32, 28, 191, 156, 34, 82, 146, 145, 69, 223, 202, 31, 92, 139, 193, 171, 95, 171, 67, 214, 37, 88, 215, 87, 247, 135, 11, 57, 27, 206, 94, 224, 248, 169, 194, 122, 87, 179, 119, 181, 85, 107, 29, 100, 14, 75, 229, 144, 160, 106, 60, 193, 182, 250, 26, 67, 134, 221, 0, 117, 98, 239, 148, 61, 116, 138, 53, 86, 204, 170, 37, 32, 26, 215, 32, 225, 33, 64, 248, 119, 216, 173, 251, 197, 174, 168, 169, 135, 242, 173, 78, 109, 75, 190, 165, 234, 116, 114, 219, 10, 16, 172, 222, 108, 209, 151, 8, 51, 66, 55, 254, 246, 86, 187, 103, 129, 107, 18, 10, 54, 230, 209, 241, 255, 59, 11, 74, 142, 176, 7, 4, 45, 11, 167, 16, 201, 188, 107, 149, 201, 68, 105, 120, 130, 28, 238, 135, 245, 237, 64, 82, 74, 10, 52, 28, 59, 31, 112, 210, 175, 192, 8, 9, 136, 201, 47, 62, 19, 147, 159, 207, 66, 35, 21, 60, 156, 207, 161, 29, 248, 174, 148, 184, 194, 90, 49, 141, 185, 51, 147, 3, 77, 86, 161, 89, 59, 252, 151, 3, 124, 123, 199, 44, 113, 135, 244, 162, 230, 126, 173, 121, 99, 86, 255, 33, 119, 117, 86, 53, 235, 243, 139, 168, 167, 106, 242, 113, 176, 176, 40, 219, 113, 223, 92, 142, 81, 73, 216, 233, 93, 254, 34, 158, 193, 213, 208, 119, 135, 24, 187, 229, 227, 100, 149, 82, 138, 159, 92, 172, 54, 237, 17, 97, 180, 240, 196, 202, 142, 75, 141, 128, 184, 114, 233, 75, 115, 98, 234, 65, 164, 16, 116, 209, 199, 26, 79, 50, 194, 221, 225, 153, 130, 203, 254, 244, 21, 247, 156, 182, 35, 123, 111, 240, 21, 139, 163, 70, 57, 26, 51, 84, 15, 64, 52, 216, 87, 85, 180, 166, 4, 123, 42, 170, 58, 79, 23, 183, 75, 240, 149, 23, 236, 128, 60, 89, 227, 77, 163, 218, 198, 152, 228, 31, 70, 4, 148, 219, 64, 86, 149, 118, 203, 159, 68, 136, 172, 216, 113, 212, 92, 69, 186, 76, 6, 16, 120, 205, 37, 203, 143, 165, 133, 46, 160, 80, 49, 38, 227, 68, 206, 47, 143, 229, 215, 253, 254, 240, 220, 21, 98, 219, 250, 101, 34, 28, 172, 116, 131, 156, 168, 75, 80, 169, 9, 195, 177, 175, 164, 4, 134, 115, 111, 72, 91, 235, 18, 181, 187, 140, 109, 180, 78, 236, 80, 145, 174, 88, 223, 94, 66, 128, 152, 173, 84, 37, 177, 14, 244, 14, 64, 137, 189, 89, 173, 250, 69, 128, 235, 86, 15, 39, 187, 222, 80, 220, 6, 208, 196, 155, 14, 208, 98, 197, 75, 218, 178, 233, 129, 21, 5, 120, 199, 227, 243, 13, 124, 11, 67, 78, 73, 25, 5, 78, 53, 46, 242, 240, 126, 206, 11, 99, 188, 242, 240, 68, 124, 206, 222, 250, 41, 3, 27, 19, 31, 190, 139, 46, 122, 165, 30, 31, 48, 46, 170, 163, 148, 187, 32, 208, 250, 46, 178, 177, 136, 69, 23, 81, 249, 90, 2, 83, 232, 24, 222, 163, 126, 65, 228, 220, 35, 115, 88, 23, 108, 201, 190, 220, 147, 23, 142, 193, 31, 64, 250, 224, 134, 15, 4, 165, 36, 98, 211, 14, 146, 133, 27, 109, 72, 184, 49, 131, 41, 15, 177, 138, 3, 21, 175, 222, 155, 57, 139, 54, 245, 24, 127, 194, 128, 214, 102, 4, 32, 253, 78, 71, 163, 224, 160, 56, 225, 227, 174, 144, 172, 87, 7, 71, 164, 231, 19, 55, 220, 242, 56, 117, 85, 208, 194, 200, 82, 75, 141, 111, 97, 173, 87, 64, 135, 249, 203, 98, 130, 191, 140, 193, 200, 141, 223, 147, 14, 21, 235, 58, 113, 20, 14, 157, 124, 127, 62, 199, 193, 108, 240, 81, 127, 130, 99, 12, 144, 58, 173, 239, 15, 78, 225, 153, 208, 119, 117, 248, 133, 28, 128, 15, 57, 239, 199, 12, 86, 235, 154, 84, 142, 123, 189, 69, 105, 224, 42, 36, 138, 29, 222, 219, 8, 154, 171, 25, 237, 156, 73, 89, 32, 116, 194, 4, 136, 212, 3, 195, 212, 165, 56, 139, 206, 116, 55, 190, 160, 141, 199, 205, 134, 56, 179, 177, 123, 72, 27, 21, 59, 24, 251, 214, 119, 184, 29, 250, 102, 78, 147, 225, 177, 209, 187, 127, 185, 95, 195, 72, 16, 65, 170, 185, 227, 211, 149, 11, 204, 149, 146, 110, 231, 205, 129, 153, 219, 52, 93, 252, 2, 219, 200, 181, 157, 31, 78, 44, 177, 57, 213, 114, 148, 96, 171, 144, 39, 150, 114, 165, 188, 69, 54, 6, 159, 104, 66, 13, 105, 44, 113, 31, 215, 140, 221, 174, 39, 4, 28, 106, 29, 170, 191, 91, 62, 218, 185, 168, 191, 166, 2, 81, 15, 176, 84, 72, 160, 243, 79, 228, 227, 223, 240, 201, 133, 76, 234, 69, 153, 156, 164, 93, 60, 37, 88, 26, 165, 248, 46, 247, 46, 188, 30, 194, 95, 174, 208, 243, 9, 23, 188, 195, 252, 131, 68, 6, 67, 123, 51, 131, 208, 37, 91, 98, 107, 20, 173, 162, 134, 192, 176, 204, 166, 121, 75, 203, 81, 20, 248, 137, 22, 137, 6, 171, 81, 62, 194, 88, 24, 222, 176, 103, 124, 56, 113, 133, 196, 228, 12>>}}.
{{encoded, "BLXqLWB1EYGewUM3WWt7JHiPpAQ9p4Sztv9ssE4vKVpBUUGpuu7toZRkto6VQof6Ys8jtoZB3WZmbGDdUBNvqT8V5gQcTwZVLvVnYkixXTCphKQM6NcSSzm5TywfbHXWbkPBwWuFkzjokuS4psLCBfixLdn1qjzP1RDuFVNFip6SEQTvAxw62eJLvTw8PP7FqQmZb8XnWu2HwgXfc6hkqas5zjm61acBBhJqeHBonqf4cbWFfK6DendCcQG1SZeNY9ghXnEkk863e98xoyqd5Ra8XGpASDXGgqbQ337BBjHEpJBfRMyqoszLaXZN44NZMp7YcRALGd8fz8nGHbm61GPFDRLTUeW3jQsRPuVi7tbN7zu8DsDR8Jve9J9W32WCXyahq11Df2Ld4LzxqBwytYJWDTcrCPJoZE1a6JvJt4hdeX4jzfaQLGUAuxhu7zRTW7xYUAFGEY74fpPW29zyT7edPugMxVtLSM88VU7sXtiqow8hkT5VhQ6PvV2kQwKqszh6ecbmJ1kVuivzU72GdGt11iff9iEGKVi8RiPaNchanopz2xnSGk5UceYr9wjBYsRkUghppy7ShzW5E5Hp1tPSXJ6RUPDchVoVYLo7dPAbUkwY3JzKvke59X"},
{decoded, <<177, 128, 46, 25, 49, 139, 82, 124, 144, 71, 88, 175, 236, 221, 49, 77, 76, 3, 217, 40, 34, 62, 231, 73, 115, 163, 132, 75, 139, 171, 216, 106, 159, 181, 162, 91, 154, 159, 141, 183, 125, 120, 123, 62, 17, 24, 219, 11, 188, 112, 149, 115, 254, 85, 213, 245, 200, 3, 228, 177, 1, 8, 142, 121, 119, 28, 47, 183, 156, 95, 187, 37, 60, 162, 250, 51, 50, 210, 50, 248, 245, 3, 41, 80, 54, 213, 189, 58, 89, 128, 45, 54, 79, 33, 214, 194, 151, 31, 187, 209, 229, 158, 57, 176, 161, 6, 140, 156, 59, 107, 142, 202, 54, 215, 224, 173, 215, 122, 50, 29, 245, 150, 0, 106, 225, 57, 135, 193, 78, 184, 66, 81, 160, 56, 213, 215, 247, 105, 75, 187, 117, 142, 16, 158, 2, 173, 192, 251, 200, 102, 207, 52, 106, 87, 100, 137, 150, 206, 216, 245, 138, 25, 85, 220, 193, 127, 36, 107, 179, 19, 173, 162, 186, 66, 189, 29, 82, 147, 244, 227, 63, 32, 233, 116, 39, 105, 77, 153, 229, 182, 43, 95, 66, 122, 252, 194, 62, 116, 142, 125, 142, 200, 120, 201, 119, 111, 87, 20, 140, 114, 8, 213, 124, 11, 246, 4, 213, 222, 223, 109, 80, 177, 39, 214, 140, 45, 139, 160, 124, 99, 155, 168, 216, 163, 45, 159, 77, 159, 67, 100, 188, 91, 77, 141, 85, 197, 192, 213, 112, 148, 242, 73, 158, 42, 119, 231, 189, 132, 3, 27, 115, 156, 141, 63, 179, 72, 59, 114, 139, 221, 22, 81, 146, 20, 16, 167, 120, 224, 77, 98, 89, 148, 132, 80, 109, 28, 25, 51, 210, 130, 104, 80, 40, 7, 8, 50, 147, 34, 255, 94, 130, 222, 31, 104, 218, 118, 180, 211, 139, 143, 55, 32, 213, 119, 98, 194, 237, 186, 162, 92, 102, 134, 23, 28, 103, 39, 43, 110, 136, 3, 63, 151, 4, 219, 90, 9, 28, 35, 40, 61, 76, 144, 193, 59, 222, 86, 214, 69, 22, 139, 121, 140, 145, 188, 96, 13, 9, 108, 2, 194, 243, 52, 30, 159, 12, 214, 47, 73, 104, 209, 111, 158, 93, 239, 127, 63, 119, 196, 237, 96, 34, 69, 252, 228, 182, 93, 62, 204, 100, 21, 107, 204, 84, 86, 93, 45, 76, 135, 221, 232, 218, 182, 129, 100, 92, 78, 153, 49, 130, 214, 88, 248, 229, 128, 198, 201, 116, 37, 129, 1, 138, 67, 46, 106, 250, 40, 1, 29, 48, 161, 102, 184, 222, 169, 127, 44, 6, 118, 31, 164, 72, 4, 182, 194, 66, 169, 160, 212, 10, 156, 197, 160, 203, 122, 51, 225, 71, 184, 113, 226, 152, 87, 178, 22>>}}.
{{encoded, "3yW8KuCReCbwRVnjbsetS5Qk1wcHuEVJkDGinkqexyHEpWxHHVoYBoXkrAvqmxtrFqwhALrGGNPQy8eNQvSNLBmWememAkWEU8NPT32CUfhFKcwL8bLYRmiaKGNWmtVn6aY7NnE3dKBjZGenZzoecbn8jD9GXAjJq9tX2CLf7kPB8tQfEWZJUXgVzvbxkqPZvgLQ8K8wCfLp4n6Q11HwmRcJ2j9QR9z58nBxdxcruGkAcHUTzkhvUdESQgZNSkDMtxjMcRcynVe4dKNUFU41AyshQARoFe19cAaVwctPnMaqCvoi74ECGeisYYcJs8ukiUHmcoGDmURtGFmsVDgKnKuoXnd5QEN9ctcEgAaxwXq69zKSEEmmVwFrxUfD2wfhk3ZFJfxb1Wi3RtQ1oReXqYbb5RjZscEq33Ha4YL4mE1HTZg1vvt3tzjrKMir81rC4iMuCXvj1ecrT8CZz"},
{decoded, <<204, 117, 163, 217, 19, 66, 43, 227, 207, 176, 192, 137, 253, 9, 112, 181, 246, 100, 59, 207, 205, 26, 236, 6, 180, 149, 245, 2, 86, 76, 246, 105, 124, 238, 185, 109, 216, 178, 176, 78, 217, 129, 41, 149, 224, 220, 126, 74, 221, 165, 183, 180, 242, 179, 91, 220, 31, 46, 44, 159, 103, 213, 213, 160, 27, 226, 50, 126, 236, 34, 119, 18, 81, 119, 116, 21, 216, 91, 94, 69, 133, 77, 28, 134, 56, 53, 184, 39, 250, 131, 41, 85, 6, 221, 34, 155, 73, 41, 87, 19, 166, 83, 57, 122, 66, 244, 162, 13, 190, 93, 105, 96, 229, 79, 179, 2, 59, 208, 34, 141, 37, 173, 175, 59, 9, 221, 238, 28, 125, 89, 46, 227, 139, 137, 251, 92, 204, 125, 208, 31, 230, 111, 101, 51, 77, 34, 188, 66, 83, 243, 103, 116, 38, 153, 252, 179, 13, 80, 235, 231, 7, 98, 141, 2, 248, 175, 67, 10, 194, 238, 155, 9, 132, 246, 39, 106, 110, 196, 118, 23, 158, 21, 48, 193, 136, 114, 197, 169, 17, 201, 119, 5, 227, 119, 192, 78, 104, 0, 43, 42, 228, 215, 36, 241, 240, 122, 101, 144, 48, 234, 131, 19, 174, 13, 173, 97, 13, 177, 235, 227, 6, 113, 172, 164, 35, 6, 248, 81, 221, 41, 164, 196, 57, 189, 116, 146, 200, 195, 220, 115, 55, 109, 29, 192, 167, 143, 110, 254, 143, 99, 244, 17, 196, 90, 104, 47, 107, 38, 78, 2, 57, 1, 110, 69, 80, 157, 81, 245, 108, 225, 24, 6, 70, 159, 102, 101, 120, 24, 114, 103, 162, 211, 168, 137, 14, 15, 13, 174, 115, 243, 253, 71, 222, 177, 67, 212, 158, 106, 237, 198, 115, 34, 66, 225, 207, 127, 173, 34, 119, 66, 92, 145, 175, 251, 94, 128, 93, 72, 235, 140, 173, 214, 17, 235, 154, 204, 33, 197, 165, 103, 104, 70, 210, 203, 138, 188, 39, 166, 125, 157>>}}.
{{encoded, "5srRbWi47mtiRy1yFXYgMTV5x13GRHKdfBQT7h3nWvryiuXaKqa1wSfukcjvNE1sDc8bCKHqSDNauk5y19xai7nYeYSdfkpVgXdfibAEdP45GpueiBpaRri8iCw5gwzcXfgULtmUaGRYAQCrgPpnAK7PYX8ZcwxwHwUAih5eWo3"},
{decoded, <<70, 167, 86, 111, 241, 106, 26, 245, 221, 6, 189, 45, 133, 136, 219, 114, 92, 228, 127, 192, 144, 235, 142, 241, 107, 71, 150, 25, 26, 34, 124, 254, 97, 197, 201, 152, 215, 76, 249, 100, 111, 8, 159, 119, 255, 84, 255, 206, 131, 141, 50, 44, 156, 60, 16, 128, 197, 27, 94, 174, 170, 163, 113, 227, 81, 117, 119, 177, 191, 240, 41, 117, 143, 57, 13, 114, 132, 41, 124, 9, 53, 185, 19, 60, 229, 74, 221, 211, 165, 161, 227, 152, 155, 132, 79, 62, 51, 154, 203, 57, 221, 189, 207, 238, 32, 245, 83, 203, 183, 2, 41, 147, 237, 148, 58, 118, 42, 191, 141, 212, 61, 204, 100, 58, 74>>}}.
+166
View File
@@ -0,0 +1,166 @@
-module(bits).
-compile([export_all, nowarn_export_all]).
rand_bits(N) when N =< 8 ->
<<Foo:N, _/bits>> = rand:bytes(1),
<<Foo:N>>;
rand_bits(N) when N > 8 ->
Num_Bytes = N div 8,
Num_Trailing_Bits = N rem 8,
<<( rand_bits(Num_Trailing_Bits) )/bits,
( rand:bytes(Num_Bytes) )/binary>>.
fmt(Bits) ->
io:format("~ts~n", [format_bits(Bits)]).
format_bits(Bits) ->
["<<", format_bits2(Bits), ">>"].
format_bits2(Bits) when 8 =< bit_size(Bits) ->
NBits = bit_size(Bits),
NBytes = NBits div 8,
NRem = NBits rem 8,
<<Bytes:NBytes/bytes, NewBits:NRem/bits>> = Bits,
case NRem of
0 ->
format_bytes(Bytes);
_ ->
[format_bytes(Bytes), ", ", format_bits2(NewBits)]
end;
format_bits2(Bits = <<Start:4/bits, Rem/bits>>) when 5 =< bit_size(Bits) ->
[format_bits2(Start), "_", format_bits2(Rem)];
format_bits2(Bits = <<B:1, Rest/bits>>) when 1 =< bit_size(Bits) ->
case B of
0 ->
["0", format_bits2(Rest)];
1 ->
["1", format_bits2(Rest)]
end;
format_bits2(<<>>) ->
[].
%% hack: split into two groups of 4 bits
format_bytes(<<A:4/bits, B:4/bits>>) ->
[format_bits2(A), "_", format_bits2(B)];
%% byte_size(Rest) >= 1 by previous case
format_bytes(<<N:1/bytes, Rest/bytes>>) ->
[format_bytes(N), ", ", format_bytes(Rest)];
format_bytes(<<>>) ->
[].
%% ten random cases for each pair of bit lengths, 0 =< N =< 32
rand_cases() ->
rand_cases(0, 0, []).
%% ten random cases for
rand_cases(32, 32, Acc) ->
[ten_cases(32, 32) | Acc];
rand_cases(N, 32, Acc) ->
NewAcc = [ten_cases(N, 32) | Acc],
rand_cases(N + 1, 0, NewAcc);
rand_cases(N, M, Acc) ->
rand_cases(N, M + 1, [ten_cases(N, M) | Acc]).
ten_cases(N, M) ->
[cs(N, M) || _ <- lists:seq(1, 10)].
cs(N, M) ->
A = rand_bits(N),
B = rand_bits(M),
C = <<A/bits, B/bits>>,
{A, B, C}.
fmt_rand_cases_(Cases) ->
io:format("~ts~n", [fmt_rand_cases(Cases)]).
fmt_rand_cases(Cases) ->
["[", fmt_rand_cases2(Cases, ""), "]"].
%% one more case
%% no trailing comma
fmt_rand_cases2([TenCases], Acc) ->
[Acc, fmt_ten_cases(TenCases)];
%% at least two more cases
%% add trailing comma
fmt_rand_cases([TenCases | Rest]) ->
lists:map(fun fmt_ten_cases/1, Cases).
fmt_ten_cases
fmt_case_(Case) ->
io:format("~ts~n", [fmt_case(Case)]).
fmt_case({A, B, AB}) ->
["{a : ", fmtjs(A), ",\n",
" b : ", fmtjs(B), ",\n",
" ab : ", fmtjs(AB), "}"].
%% format bitstring as JS bits
fmtjs_(Bits) ->
io:format("~ts~n", [fmtjs(Bits)]).
fmtjs(Bits) ->
BS = bit_size(Bits),
BF = format_bytes_js(Bits),
io_lib:format("{bit_size : ~tp,~n"
" bytes : ~ts}",
[BS, BF]).
format_bytes_js(Bits) ->
["new Uint8Array([", format_bytes_js2(Bits), "])"].
%% formats the contents of the array
%% empty array
format_bytes_js2(<<>>) ->
"";
%% exactly one entry
format_bytes_js2(Bits) when bit_size(Bits) =< 8 ->
BS = bit_size(Bits),
<<N:BS>> = Bits,
%% ah... right, ok we have to bitshift left by the missing zeros
NumMissingZeros = 8 - BS,
N_ = N bsl NumMissingZeros,
io_lib:format("~tp", [N_]);
%% more than one entry, need to call format_bytes_js3 with a nontrivial initial
%% accumulator
format_bytes_js2(<<N:8, Rest/bits>>) ->
InitAcc = io_lib:format("~tp", [N]),
format_bytes_js3(Rest, InitAcc).
%% empty array case; should only happen on initial call
format_bytes_js3(<<>>, Acc) ->
Acc;
%% terminal case: one bit remaining
format_bytes_js3(Bits, Acc) when bit_size(Bits) =< 8 ->
BS = bit_size(Bits),
<<N:BS>> = Bits,
%% ah... right, ok we have to bitshift left by the missing zeros
NumMissingZeros = 8 - BS,
N_ = N bsl NumMissingZeros,
FinalAcc = [Acc, ", ", io_lib:format("~tp", [N_])],
FinalAcc;
%% general case
format_bytes_js3(<<N:8, Rest/bits>>, Acc) ->
NewAcc = [Acc, ", ", io_lib:format("~tp", [N])],
format_bytes_js3(Rest, NewAcc).
+142
View File
@@ -0,0 +1,142 @@
-module(rlp).
-compile(export_all).
-compile(nowarn_export_all).
-type decoded_data() :: binary() | [decoded_data()].
-spec encode(Data) -> RLP
when Data :: decoded_data(),
RLP :: binary().
%% @doc
%% encode some data
encode(Binary) when is_binary(Binary) ->
encode_binary(Binary);
encode(List) when is_list(List) ->
encode_list(List).
-spec encode_binary(Bytes) -> RLP
when Bytes :: binary(),
RLP :: binary().
%% @private
%% encode a binary in rlp
%% @end
% single byte case when the byte is between 0..127
% result is the byte itself
encode_binary(<<Byte>>) when Byte =< 127 ->
<<Byte>>;
% if the bytestring is 0..55 items long, the first byte is 128 + Length,
% the rest of the string is the string
encode_binary(Bytes) when byte_size(Bytes) =< 55 ->
Size = byte_size(Bytes),
<<(128 + Size), Bytes/binary>>;
% more than 55 bytes long, first byte is 183 + ByteLengthOfLength
% max byte size is 2^64 - 1
encode_binary(Bytes) when 55 < byte_size(Bytes), byte_size(Bytes) < (1 bsl 64) ->
SizeInt = byte_size(Bytes),
SizeBytes = binary:encode_unsigned(SizeInt, big),
SizeOfSizeInt = byte_size(SizeBytes),
%% 183 = 128 + 55
%% SizeOfSizeInt > 0
<<(183 + SizeOfSizeInt),
SizeBytes/binary,
Bytes/binary>>.
-spec encode_list(List) -> RLP
when List :: [decoded_data()],
RLP :: binary().
%% @private
%% encode a list in rlp
%% @end
% first we encode the total payload of the list
% depending on how long it is, we then branch
encode_list(List) ->
Payload = << (encode(Item)) || Item <- List>>,
Payload_Size = byte_size(Payload),
if
Payload_Size =< 55 ->
<<(192 + Payload_Size), Payload/binary>>;
55 < Payload_Size ->
SizeBytes = binary:encode_unsigned(Payload_Size, big),
SizeOfSizeInt = byte_size(SizeBytes),
%% 247 = 192 + 55
%% SizeOfSizeInt > 0
<<(247 + SizeOfSizeInt),
SizeBytes/binary,
Payload/binary>>
end.
-spec decode(RLP) -> {Data, Rest}
when RLP :: binary(),
Data :: decoded_data(),
Rest :: binary().
%% @doc
%% decode an RLP-encoded string
%% @end
% if the first byte is between 0 and 127, that is the data
decode(<<Byte, Rest/binary>>) when Byte =< 127 ->
{<<Byte>>, Rest};
% if the first byte is between 128 and 183 = 128 + 55, it is a bytestring and
% the length is Byte - 128
decode(<<Byte, Rest/binary>>) when Byte =< 183 ->
PayloadByteLength = Byte - 128,
%PayloadBitLength = 8 * PayloadByteLength,
%io:format("Byte : ~p~n"
% "Rest : ~w~n"
% "PayloadByteLength : ~p~n",
% %"PayloadBitLength : ~p~n",
% [Byte, Rest, PayloadByteLength]),
<<Payload:PayloadByteLength/binary,
Rest2/binary>> = Rest,
{Payload, Rest2};
% If the first byte is between 184 = 183 + 1 and 191 = 183 + 8, it is a
% bytestring. The byte length of the byte length of bytestring is FirstByte -
% 183. Then pull out the actual data
decode(<<Byte, Rest/binary>>) when Byte =< 191 ->
ByteLengthOfByteLength = Byte - 183,
BitLengthOfByteLength = 8 * ByteLengthOfByteLength,
<<ByteLengthInt:BitLengthOfByteLength,
Rest2/binary>> = Rest,
<<Payload:ByteLengthInt/binary,
Rest3/binary>> = Rest2,
{Payload, Rest3};
% If the first byte is between 192 and 247 = 192 + 55, it is a list. The byte
% length of the list-payload is FirstByte - 192. Then the list payload, which
% needs to be decoded on its own.
decode(<<Byte, Rest/binary>>) when Byte =< 247 ->
ByteLengthOfListPayload = Byte - 192,
<<ListPayload:ByteLengthOfListPayload/binary,
Rest2/binary>> = Rest,
List = decode_list(ListPayload),
{List, Rest2};
% If the first byte is between 248 = 247 + 1 and 255 = 247 + 8, it is a list.
% The byte length of the byte length of the list-payload is FirstByte - 247.
% Then the byte length of the list. Then the list payload, which needs to be
% decoded on its own.
decode(<<Byte, Rest/binary>>) ->
ByteLengthOfByteLengthOfListPayload_int = Byte - 247,
BitLengthOfByteLengthOfListPayload_int = 8 * ByteLengthOfByteLengthOfListPayload_int,
<<ByteLengthOfListPayload_int:BitLengthOfByteLengthOfListPayload_int,
Rest2/binary>> = Rest,
<<ListPayload_bytes:ByteLengthOfListPayload_int/binary,
Rest3/binary>> = Rest2,
List = decode_list(ListPayload_bytes),
{List, Rest3}.
decode_list(<<>>) ->
[];
decode_list(Bytes) ->
{Item, Rest} = decode(Bytes),
[Item | decode_list(Rest)].
@@ -0,0 +1,256 @@
%-module(rlp_testgen).
%-compile(export_all).
-mode(compile).
-compile([nowarn_unused_function]).
main([]) ->
% Decoded cases
DecodedCases = rand_decode_datas(10_000),
%io:format("~p~n", [DecodedCases]),
io:format("~s~n", [format_cases_js(DecodedCases)]),
ok.
%%%%%%%%%%%%%%%%%%%%%
%%% JS FORMATTING %%%
%%%%%%%%%%%%%%%%%%%%%
format_cases_js(Cases) ->
format_stringlist_js(lists:map(fun format_case_js/1, Cases)).
% format a list of strings into a python list
format_stringlist_js(List) ->
% stringlist commas are the same in python/js, so reusing python
["import * as rlp from './jex_include/local-vanillae-0.1.0/dist/rlp.js';\n"
"\n"
"type rlpcases = {decoded: rlp.decoded_data, encoded: Uint8Array};\n"
"\n"
"// @ts-ignore never mind; jesus christ\n"
"export const cases : Array<rlpcases> = [\n", slcommas(List, []), "];"].
% input: decoded_data
% format a case as
% {'decoded_data': <js term for rlist>,
% 'encoded_bytes': new Uint8Array([B1, B2, B3, ...])}
format_case_js(DecodedData_rlist) ->
% EncodedData_bytes = rlp:encode(
% DD_js = format_data_js(DecodedData_rlist),
EncodedData_bytes = rlp:encode(DecodedData_rlist),
EncodedBytes_py = format_bytes_js(EncodedData_bytes),
DecodedData_py = format_data_js(DecodedData_rlist),
[" {'decoded': ", DecodedData_py, ",\n",
" 'encoded': ", EncodedBytes_py, "}"].
format_data_js(List) when is_list(List) ->
format_list_js(List);
format_data_js(Bytes) when is_binary(Bytes) ->
format_bytes_js(Bytes).
format_list_js(List) ->
[$[, js_lcommas(List, []), $]].
% similar to commas/2 below but for a list
% cases
% - list is empty -> special case
% - exactly one element -> special case
% - two or more elements -> peel off one at a time until terminal case of exactly one
% initial input empty, so return empty
js_lcommas([], []) ->
[];
% one item left, do not add comma
js_lcommas([Item], Acc) ->
[Acc, format_data_js(Item)];
% two or more items left, add comma
js_lcommas([Item | Rest], Acc) ->
js_lcommas(Rest, [Acc, format_data_js(Item), ", "]).
% format a bytestring as "bytes([Byte1, Byte2, ...])"
format_bytes_js(Bytes) ->
% commas are the same as in python so reusing that
Commas = commas(Bytes, []),
["new Uint8Array([", Commas, "])"].
%%%%%%%%%%%%%%%%%%%%%%%%%
%%% PYTHON FORMATTING %%%
%%%%%%%%%%%%%%%%%%%%%%%%%
format_cases_py(Cases) ->
format_stringlist_py(lists:map(fun format_case_py/1, Cases)).
% format a list of strings into a python list
format_stringlist_py(List) ->
["cases = [\n", slcommas(List, []), $]].
% similar to commas/2 below but for a list of the dictstrings
% adding a comma, a newline, and a space
%
% this one does no intrnal processing
%
% cases
% - list is empty -> special case
% - exactly one element -> special case
% - two or more elements -> peel off one at a time until terminal case of exactly one
% initial input empty, so return empty
slcommas([], []) ->
[];
% one item left, do not add comma
slcommas([Item], Acc) ->
[Acc, Item];
% two or more items left, add comma
slcommas([Item | Rest], Acc) ->
slcommas(Rest, [Acc, Item, ",\n"]).
% input: decoded_data
% format a case as
% {'decoded_data': <python term for rlist>,
% 'encoded_bytes': bytes([B1, B2, B3, ...])}
format_case_py(DecodedData_rlist) ->
% EncodedData_bytes = rlp:encode(
% DD_js = format_data_js(DecodedData_rlist),
EncodedData_bytes = rlp:encode(DecodedData_rlist),
EncodedBytes_py = format_bytes_py(EncodedData_bytes),
DecodedData_py = format_data_py(DecodedData_rlist),
[" {'decoded': ", DecodedData_py, ",\n",
" 'encoded': ", EncodedBytes_py, "}"].
format_data_py(List) when is_list(List) ->
format_list_py(List);
format_data_py(Bytes) when is_binary(Bytes) ->
format_bytes_py(Bytes).
format_list_py(List) ->
[$[, lcommas(List, []), $]].
% similar to commas/2 below but for a list
% cases
% - list is empty -> special case
% - exactly one element -> special case
% - two or more elements -> peel off one at a time until terminal case of exactly one
% initial input empty, so return empty
lcommas([], []) ->
[];
% one item left, do not add comma
lcommas([Item], Acc) ->
[Acc, format_data_py(Item)];
% two or more items left, add comma
lcommas([Item | Rest], Acc) ->
lcommas(Rest, [Acc, format_data_py(Item), ", "]).
% format a bytestring as "bytes([Byte1, Byte2, ...])"
format_bytes_py(Bytes) ->
Commas = commas(Bytes, []),
["bytes([", Commas, "])"].
% cases:
% - bytestring is empty -> special case
% - exactly one element -> special case
% - two or more elements -> peel off one at a time until terminal case of exactly two
% empty bytestring
commas(<<>>, []) ->
[];
% only one byte left, do not add comma
commas(<<B2>>, Acc) ->
[Acc, integer_to_list(B2)];
% two or more bytes left: peel off one, add comma
commas(<<B, Rest/binary>>, Acc) ->
commas(Rest, [Acc, integer_to_list(B), ", "]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% INVERSE PROPERTY TEST %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% test that the inverse property is correct
test_inverse() ->
% test stuff
DecodedCases = rand_decode_datas(20),
All = lists:all(% predicate
fun(X) -> X end,
% data
lists:map(fun(DecodedData) ->
CI = check_inverse(DecodedData),
ok = io:format("~p~n", [CI]),
CI
end,
DecodedCases)),
io:format("all: ~p~n", [All]),
ok.
check_inverse(DecodedData) ->
{DeEncodedData, <<>>} = rlp:decode(rlp:encode(DecodedData)),
DeEncodedData =:= DecodedData.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% RANDOM CASE GENERATION %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%mkcase(DecodedData) ->
% Encoded = rlp:encode(DecodedData),
% {Deencoded, <<>>} = rlp:decode(
% %{decoded, DecodedData,
% % encoded,
% check
% - encode is correct
% - decode is the inverse of decode
% generate N-ish random decode datas
% no duplicates
rand_decode_datas(N) ->
% hack to remove duplicate cases
% this is good enough
sets:to_list(sets:from_list(rand_list(N))).
% generate a list of random datas n items long
rand_list(N) ->
[rand_data() || _ <- lists:seq(1, N)].
% generate a random bytestring or random list with 50% probability
rand_data() ->
MkList = rand:uniform() < 0.7,
case MkList of
true -> rand_list();
false -> rand_bytes()
end.
% generate a random list of random length between 0 and 10, inclusive
rand_list() ->
% rand:uniform(N) is between 1 and N
NItems = rand:uniform(3) - 1,
rand_list(NItems).
% generate a random bytestring between 0 and 100 bytes long
rand_bytes() ->
%works
case rand:uniform() < 0.5 of
% either generate between 0 and 5 items or between 5 and 100 items
true ->
NItems = rand:uniform(6) - 1,
crypto:strong_rand_bytes(NItems);
false ->
% range between 1, 96, add 4
NItems = (rand:uniform(96) + 4),
crypto:strong_rand_bytes(NItems)
end.
% syntax error:
% they look literally the same
%NItems = rand:uniform(11) - 1, crypto:strong_rand:bytes(NItems).
File diff suppressed because one or more lines are too long
+49
View File
@@ -0,0 +1,49 @@
#!/usr/bin/env python3.9
'''
generate rlp tests
really checking to see if my code matches the ethereum python rlp package which
has 85 stars on github
requires rlp package, which requires python 3.7 or greater
this checks to see if my Erlang implementation matches python. It works for
59,638 randomly generated test cases
'''
# need more cases
# single bytes
# empty list
# list with variable number of elements
# element has equal chance of becoming a list or a binary
import rlp
import random as r
from rlpcases import cases
def main():
all_encode_work = True
all_decode_work = True
for case in cases:
decoded_data = case['decoded']
encoded_bytes = case['encoded']
real_encoded_bytes = rlp.encode(decoded_data)
real_decoded_data = rlp.decode(encoded_bytes)
# check if encode/decode works
encode_works = (real_encoded_bytes == encoded_bytes)
decode_works = (real_decoded_data == decoded_data)
print('encode works: %s' % (encode_works))
print('decode works: %s' % (decode_works))
# update globals
all_encode_work = all_encode_work and encode_works
all_decode_work = all_decode_work and decode_works
# print globals
print('all encode work: %s' % (all_encode_work))
print('all decode work: %s' % (all_decode_work))
#print(format_cases_erl(c))
if __name__ == '__main__':
main()

Some files were not shown because too many files have changed in this diff Show More