/*
 * Copyright (c) 2018 IOTA Stiftung
 * https://github.com/iotaledger/iota_common
 *
 * Refer to the LICENSE file for licensing information
 */

#include <stdlib.h>

#include <unity/unity.h>

#include "common/helpers/sign.h"

static void test_address_generation(void) {
  tryte_t const * const  SEED = (tryte_t*)
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQ"
      "RSTUVWXYZ9";
  tryte_t const * const  EX_ADD_0_1 = (tryte_t*)
      "CFOYUCXLHLSUBAEYOTAWUNRPJFA9TSJNLBFLMZQASPTVCMTFBOQQRGGQ9MRZCJWYGBORJZQW"
      "VSBLVKBVW";
  tryte_t const * const  EX_ADD_2_2 = (tryte_t*)
      "TZZUOMKXUUIIAJEQJJRIJQKWQVYK9YPFNWWUUHDQWVVWIBWHC9J9FJJEFZKOZZAIMUDDGHOI"
      "WTIWCOHGD";
  tryte_t const * const  EX_ADD_2_3 = (tryte_t*)
      "MLAUELWJHZ9QBPCIYLOXAWCVSZTK9XUEIWQSRLFDWEORDOLVOMOF9RUMFXSAMYWCGXDAVXZM"
      "RWQOJH9RY";

  char* out_1 = iota_sign_address_gen_trytes((char*)SEED, 0, 1);
  char* out_2 = iota_sign_address_gen_trytes((char*)SEED, 2, 2);
  char* out_3 = iota_sign_address_gen_trytes((char*)SEED, 2, 3);

  TEST_ASSERT_EQUAL_MEMORY(out_1, EX_ADD_0_1, HASH_LENGTH_TRYTE);
  TEST_ASSERT_EQUAL_MEMORY(out_2, EX_ADD_2_2, HASH_LENGTH_TRYTE);
  TEST_ASSERT_EQUAL_MEMORY(out_3, EX_ADD_2_3, HASH_LENGTH_TRYTE);

  free(out_1);
  free(out_2);
  free(out_3);
}

static void test_signature(void) {
  tryte_t const * const SEED = (tryte_t*)
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQ"
      "RSTUVWXYZ9";
  tryte_t const * const EX = (tryte_t*)
      "IRRWWESEWUSGFCQZQUETVGNLONDOHXJRQPECGNOI9FSDSVDHH9EXGXHLW9TXQSFRZK9TKFMW"
      "SLOGAD9OWUCQCZTCRHQXINFJHVGPVWYWFKIGHUAYFWNJXGZZYISMFTVQKDLUQWHEVUWYCIHE"
      "VW9QKRJSYDCBTFTOL9HTNPRBPGTSQACDUGZSXRJWSKFJUXCH9TEXJUUDOI9EDDFAQ9QMDNPJ"
      "DZLZPUMVGBOUNFYHKWSICCGEKLZHECPB9SKR9NW9NUUCIGYJZZHQGAWMA9PFQOQMBFOYXWYZ"
      "SZRAENTWFOHTYWZCM9NYFBKQGKL9APFFZ9YDMUASLWRMQHJETMUAEY99WGDOUDBSHMPQAPKG"
      "9LQHAJMMIEUAX9OQHQKMMNFA9GUDQENAELLL99CZLTRFYNGXUREWFUHIKQJVHCSTOWZIOCJV"
      "DE9ZRC9PMJEOUMNRILRBE9KDLKHDRQHIWEDLHVDEHZPOFXYGHHAMACOPNRV9EZBSFYITYURV"
      "QSJOZWESIYRMHOYZHEEHMTAYPNMIJMPUF9OSCEWPQEKWOHSOMLPZJUIXWVJMLMDUWCCWGPVK"
      "BUUUEGAKJYSYAWWDWY9RZITWOHZTMTXPLHTDFTZJDLBJFFJ9RHXZBBHOIHV9UFRYRAABMKEA"
      "UUOOIGCWVNOKKPUODIQJYSFTUAKIBNJ9YIYVCNMUDGHLQENMWSDUHGZIA9FYIPOSFEOLDCRY"
      "SXRCJSJOCNIE9GLCRMXQFAUERKRDEAGVVPSSEUFWFFYEYRWAHHZPNQWQYHWCTJXBGSJKBGZG"
      "PQZJOVLRFQZGLJURVCSIXOGDPZPIVHDCTOBDEYTVUFILZ9PMBAQNOWHPNBLXYYJSMZKRBACR"
      "VPGKXUQSEA9NTHUFUHTP9OYBIIDFJIUGNTNCHVHX99MQ9IAMRNJNZL9KGQ9VKYNXMANFDHAB"
      "PSYDQLBMTVDOKFFZQZPABWUTLVDKUYKBZNDDM9HZKK9ZL9BHKWGKILNTZGHCWSNKQBITFFRB"
      "CZTRNJAHGCZBJVGRYNYYBDYXNWCENEOXDDZODTGMI9LGDVCZWALMADQJHOEHQLYBSRXUSGBB"
      "MFENSDX9NVFHHIJAEPRDDNRCN9DMTLOOUASJLXNXLJN9VKEVRLRIMZOYNHGHVERWERXP9NIM"
      "MFVZMVWCPAOBZDPKOSNXYK9CZFPUINBREOYJBVBASSWWKKDQGQBBAYPSQCZDFSZZIYJFVMFV"
      "HGE9HJZTLB9POVGTBGZCTMBLNXGHZCDUKWAPPTGXKSXSAUKICBRCKYK9KTSNFKEJKJE9UHTC"
      "KPNUWRHKSYQRSHIVGRBTRBWEQ9KS9LNTLRUWRLWTVYNLVVMNXPNZPYMATERXEVVTSBRCNYPA"
      "9DXNLQXP9RLVAKDAGOJDDOMAXODLLZEHHRFSDDNMPMKOP9YCBDDBTYUYOHCJYQHLKSECHQUW"
      "ZZRPEYGFSIMMO9JDXDEXUETJIEBJMBTRGFTWXPQZXAWDFNQGPUDQESGAAN9WNFNTDIAZ9DKW"
      "JKPOKZESUYMVC9AEVNCTAWZLZB9GUSUWASJTVIJBCKUZLBSBVCUBAAPDTADOSERGKMDLBUGV"
      "OHNMPGCLYIPFVECMYXJBFPWWJUVQTJSOY9OWZGYOYZYAUWFRBPRRXMPDQIFLFYEJURGSFT9N"
      "OINQF9DSHSNGJKHOUEPPBGOMENJNVFZHHMGOABXTMF9DANGGQGKDCSXZNEOPEMIDOULWF9BH"
      "N9UCOZDFOYZ9AHDCEANXWVHNJMOMLVS9YYDHTNEFDPCVKDTCIMHDADUVRKCDNGPWVCJBZOPW"
      "9EU9YXOWTVBWHCYCVUIVRGXXIDFWZCDTTTBHWYH9VNT9CEYOEECS9AXYKBCSIHCABBGJYTSK"
      "FJJADIMQBZNZLZPIIZDCJDVIWZXGKSQDDMSXCJEWGWAUJXIO9FTHLYXRKQWDKZ9X9HRIKDQX"
      "PJSWKNM9S9KWRGTIEHFPVFFYZXRAWSKKXDLBRTTYAXRIKHESEOXCURUPJLXWWIIGDMBUIBRF"
      "CLLICDZXDDPSDP9NSZYBIYEZSVIQLQCXZJLHXUJJGPHRDILDMLDSVKXI9LZWZDPIVFABZTVF"
      "SNFLUHDBPFMCKNFSTXMTQHGSGXXSRWCRDKBHZGQVEPPRSIHKZSGCZOKJTUNHRDOLNZVXARQX"
      "DUZMZZ9AGLOKYBKYRQMDJKQJOIA"
      "JXXHYSPUJEL9PSLRGUMNCUZRNDLIUXYVJWGUIFOWVWGFNVVRPWIGS9POUUFBLFH9VYRTOSVL"
      "IXJSYOCEXSNRAYWBWYGJRYJGZRZGK9DCSJ9LFZZMNCLQKBMGYJOL9NWEZURYXHEMMEWZPN9S"
      "VKRKQVUFGWWRRC9VGA9JVXALSWYDFKYCJQTJAPRACLEUYQSCFHYOUUGMWXZOLOPBA9UGZGDL"
      "B9ZKHSYPXLBRVONMZWZZLHQYSNCVDCJXUTVUKAYDAQYYHDMEZVCFASPTGJPVZCZCUKAOVTJC"
      "OAIMISYURFVXWNCKSWNHNZWOPUQFTJAFRRFWDHQECFSSOIFICV9GYMCHOBSXFZSCLQMJZJJQ"
      "YLDYZWISHLIWHIMGSPB9BDZGDZNQXDVTHHFRIIYFQHWFCD9LRDWZBAMHABLKOYGKILGV9DBK"
      "JZBOOSHLEIG9NJHRZCNNZAIYTZTPIDJNWFSNAMUNBBY9DMOI9ECDSWOHACKAZOYQAVYJPWMD"
      "YIQMLEU9WYCCPGCWUBOBORACRLEAIRZVEALJKPLPJFTPRWGPXCAJHVJ9CTHGYEDGDE9KXLUU"
      "BZDDT9RFJAMZGHNGHPIRGPEHHKOMJXXTQQNRKGORUCGZPLKPF9IXEBRRIDGWYGOHSTCTQWGY"
      "DDYTRAUQMPYDSHICWRLUBMHTEXRSAHXAKJSGQDEAATAIGWFGJMUKGPLYXFKCWRA9MHUSZBAU"
      "EUEBAGEDCUZXS9FCDQIJZNGCKZ9BZDTZUREZNYABOZOKSLYRLZ9DYFIOAVUNEVXSXYJFUYSS"
      "PISTPBMNMH9SWFQ9FCOOHSRWGNBEHHVFUYXKZBUWWXHFMYBDICTXZNIYQ9YGFGU9TXHOGFIN"
      "GUATJFUUCVZZFM9SAGJQOAOQTUWREJFWOEQFCNXPAKVRVKNILWRGISOY9WZHTU9WTUREVHSQ"
      "KTONDY9NDCNHDRNHOAIKCFSGW9WOTOPVLNDWAUTNVMALCLRDVWYFWSDCPQWHPWMQP9WY9PUV"
      "IKOIPFHNOPNS9OSZTHUJXOABLJRMGFEPZUNZMDZSXYNG9OMRJXJUVOMEELLGTLGATQCDVKPF"
      "YCQFDYHEKKKIODOSCNSRACPVJWGPLYABFIFKXHABSIABMDJJIYBPIWQEDLPLU9EYCPBVUVKZ"
      "SVGQQQIJJWTRJVVJARBACTNMHQBQNROFOPLAWITTVWYVMEPYQAPTPSQBLACQYTYZOWXGSMHW"
      "I9XV9XSUXJBFV9GZNRQVUJ9OOTQATHEJWPJSWPEEYZGQCJYNDBL9FUXILWGRVATPFYVUWGPD"
      "FSZIA9BMICESFCLYAFHOYAEDDXUUSXROOUXOLVLORXEHAMCJCYQWWYWXZUMJQGSJVQGQPMMI"
      "JQOLMGE9ZYAQCQLUSOSBXZTXVMCPCL9BRTVGZ9WEUJYYTFPFGPWPOMGKHMMHJVEHTWUOVY99"
      "FNBKAQMTCAJFQWQWPXZTHFYWJSJXDMCTCGAKJRJHXHPWAXEFRVOROBXWSWYXGRJ9PNNHDYVA"
      "NJDZQMZWKYFRFWGLPPWFPJNGJPDYKGTHGDBQPBODBPWFIHBBFEICJLXYEKDJMESTDIKYIYBK"
      "LMMKQTPORSFMUVJHWORTZSAQOKCVV9BKBXEXJVZOTZRWPBYNYEQDOKRMEITTJGU9WWGBOAMS"
      "CZTRGFNQNQRWTXIMSVOXVNR9GVDJWJVLYEXITUBQPY9VWXWFCRYBGNYWAUWASIBBAESNRNUM"
      "HLTLNR9LENCEUGMHQIYUINDGYWJQIHSTQBLPEFCDRYDHQSRFKJKWEAFBJDKRJFAXKIERXURB"
      "ZWIRCHOBJYTRDMJBBXUZZPZRANPCSSOJGV9HVYHOOEZFNPJOXIXKNPMZVGTPEZ9QGVCSKDAH"
      "GEVAZKILDUFZIICUJOLPKRNXJDXYKCNHRJFUJ9VSAIKGBLE9EUSTFDFNKGNHZR9PIWHUHAWB"
      "LEFJQM9NTDMOFVAKLOOWS9UCEZSRRDEJZBIZONFEYJZFRFMSFMMSCOPAXULAUKOVDOBXY9OJ"
      "AFIXT9NY99GLSIFY9ISFBQKUCQQZ9WVMLVRIQWYOGWUBIHLMJAXY99DJFOXMIIRBBGNVVUKE"
      "GMV99T9HTXML9EUZYADINHCSQISPTQXKTIHAWYCGYFTRFT99IHJCURQUYMVYKXSBYUALS9GK"
      "Q9LOWROQSZANOVISNYYZQK9KBKA";

  char* out_1 = iota_sign_signature_gen_trytes((char*)SEED, 2, 2, (char*)SEED);

  TEST_ASSERT_EQUAL_MEMORY(out_1, EX, (ISS_KEY_LENGTH * 2) / 3);

  free(out_1);
}

static void test_flex_address_generation(void) {
#if defined(FLEX_TRIT_ENCODING_1_TRIT_PER_BYTE)
  const flex_trit_t SEED[] = {
      1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,  0, 0, 1,
      1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1, 0, 0, -1,
      1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,  0, 0, 0,
      1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,  0, 0, 1,
      1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1, 0, 0, -1,
      1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,  0, 0, 0,
      1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,  0, 0, 1,
      1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1, 0, 0, -1,
      1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,  0, 0, 0};
  const flex_trit_t EX_ADD_0_1[] = {
      0, 1,  0,  0,  -1, 1,  0,  -1, -1, 1,  -1, 0,  0,  1,  -1, 0,  1,  0,  0,  -1, 0,  0,  1,  1,  -1, 0,  1,
      0, 1,  1,  1,  0,  -1, 0,  1,  -1, -1, 1,  0,  1,  0,  0,  -1, -1, 1,  1,  -1, 0,  0,  -1, -1, -1, 1,  -1,
      1, 0,  0,  -1, -1, 0,  0,  1,  -1, -1, -1, -1, 0,  0,  -1, 1,  -1, -1, 1,  0,  1,  0,  -1, 1,  1,  0,  0,
      0, 0,  0,  -1, 1,  -1, 1,  0,  -1, 1,  0,  1,  -1, -1, -1, 0,  1,  1,  -1, 1,  0,  0,  -1, 1,  0,  1,  1,
      1, 1,  1,  -1, 0,  0,  -1, 0,  -1, 1,  0,  0,  1,  0,  -1, 1,  -1, -1, -1, 1,  -1, 1,  1,  -1, 0,  1,  0,
      1, 1,  1,  -1, 1,  -1, 0,  -1, 1,  -1, 1,  0,  0,  -1, -1, -1, 0,  -1, -1, 0,  -1, 0,  0,  -1, 1,  -1, 1,
      1, -1, 1,  -1, 0,  -1, 0,  0,  0,  1,  1,  1,  0,  0,  -1, -1, 0,  0,  0,  1,  0,  1,  0,  1,  -1, -1, 0,
      1, -1, 0,  1,  -1, 1,  -1, 1,  0,  0,  -1, -1, 0,  0,  -1, 1,  0,  1,  -1, 0,  0,  -1, 0,  -1, -1, -1, 0,
      1, 1,  -1, 1,  0,  -1, -1, 1,  0,  0,  1,  1,  1,  1,  -1, -1, 1,  1,  -1, 1,  0,  1,  1,  -1, -1, -1, 0};
  const flex_trit_t EX_ADD_2_2[] = {
      -1, 1,  -1, -1, 0,  0,  -1, 0,  0,  0,  1,  -1, 0,  -1, -1, 1,  1,  1,  -1, 1,  1,  0,  -1, 0,  0, 1,  -1,
      0,  1,  -1, 0,  0,  1,  0,  0,  1,  1,  0,  0,  1,  0,  1,  -1, -1, 1,  -1, 0,  -1, 1,  0,  1,  1, 0,  1,
      0,  0,  -1, 0,  0,  1,  1,  0,  1,  -1, 0,  -1, -1, 1,  1,  -1, -1, 0,  -1, 0,  -1, 1,  1,  -1, 1, -1, 0,
      -1, 1,  1,  0,  0,  0,  1,  -1, 0,  1,  -1, -1, 0,  -1, 1,  -1, -1, -1, -1, -1, 0,  -1, -1, 0,  0, 1,  -1,
      0,  1,  -1, -1, 0,  1,  1,  1,  0,  -1, 0,  -1, -1, -1, 0,  1,  1,  -1, 1,  1,  -1, -1, -1, 0,  0, 0,  1,
      -1, 1,  0,  -1, -1, 0,  -1, 0,  1,  0,  1,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  -1, 1,  1, 0,  1,
      1,  0,  1,  -1, -1, 1,  0,  -1, 1,  -1, 0,  0,  -1, 1,  1,  0,  -1, -1, -1, 0,  0,  -1, 0,  0,  1, 0,  0,
      0,  0,  1,  1,  1,  1,  0,  1,  -1, 1,  1,  0,  1,  1,  0,  1,  -1, 1,  -1, 0,  1,  0,  -1, -1, 0, 0,  1,
      -1, -1, 0,  -1, 1,  -1, 0,  0,  1,  -1, -1, 0,  0,  1,  0,  0,  -1, -1, -1, 0,  1,  1,  -1, 1,  1, 1,  0};
  const flex_trit_t EX_ADD_2_3[] = {
      1,  1,  1,  0,  1,  1, 1,  0,  0,  0,  1,  -1, -1, -1, 1,  0,  1,  1,  -1, -1, 0,  1,  0,  1,  -1, 0,  1,
      -1, 0,  0,  0,  0,  0, -1, 0,  -1, -1, 1,  0,  1,  -1, -1, 0,  1,  0,  0,  0,  1,  1,  -1, 0,  0,  1,  1,
      0,  -1, -1, 0,  -1, 0, 1,  0,  0,  -1, -1, 0,  0,  1,  0,  1,  1,  -1, 1,  0,  -1, -1, 0,  0,  -1, 1,  -1,
      -1, 1,  1,  0,  0,  0, 0,  -1, 0,  0,  1,  -1, -1, -1, 1,  0,  0,  1,  -1, -1, 0,  -1, 0,  -1, 1,  0,  -1,
      0,  0,  -1, 0,  1,  1, 0,  -1, 1,  1,  1,  0,  -1, -1, 0,  -1, -1, 1,  0,  -1, -1, 0,  0,  -1, 1,  1,  0,
      0,  -1, -1, 0,  1,  1, 1,  1,  -1, 0,  -1, -1, 1,  1,  1,  0,  -1, -1, 0,  -1, 1,  0,  0,  0,  0,  0,  -1,
      0,  1,  -1, 1,  1,  1, 0,  -1, 1,  0,  -1, 0,  1,  0,  -1, 1,  0,  0,  1,  1,  1,  1,  -1, 0,  -1, -1, 0,
      0,  1,  0,  1,  -1, 1, 0,  -1, 0,  1,  1,  0,  1,  0,  0,  1,  1,  -1, 0,  -1, 0,  -1, 0,  0,  1,  1,  1,
      0,  0,  -1, -1, -1, 0, -1, 0,  -1, 0,  -1, -1, 1,  0,  1,  -1, 0,  1,  0,  0,  0,  0,  0,  -1, 1,  -1, 0};
#elif defined(FLEX_TRIT_ENCODING_3_TRITS_PER_BYTE)
  const flex_trit_t SEED[] =
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQ"
      "RSTUVWXYZ9";
  const flex_trit_t EX_ADD_0_1[] =
      "CFOYUCXLHLSUBAEYOTAWUNRPJFA9TSJNLBFLMZQASPTVCMTFBOQQRGGQ9MRZCJWYGBORJZQW"
      "VSBLVKBVW";
  const flex_trit_t EX_ADD_2_2[] =
      "TZZUOMKXUUIIAJEQJJRIJQKWQVYK9YPFNWWUUHDQWVVWIBWHC9J9FJJEFZKOZZAIMUDDGHOI"
      "WTIWCOHGD";
  const flex_trit_t EX_ADD_2_3[] =
      "MLAUELWJHZ9QBPCIYLOXAWCVSZTK9XUEIWQSRLFDWEORDOLVOMOF9RUMFXSAMYWCGXDAVXZM"
      "RWQOJH9RY";
#elif defined(FLEX_TRIT_ENCODING_4_TRITS_PER_BYTE)
  const flex_trit_t SEED[] = {-63, 65,  20,  31,  -41, 77,  80,  116, 81,  -43, -49, -9,  51,  28,  -33, 116,
                              -3,  48,  -51, 0,   4,   7,   81,  124, 92,  55,  65,  -47, 69,  85,  63,  -33,
                              -49, 112, 124, -45, -11, -61, 52,  3,   16,  28,  68,  -15, 113, -35, 4,   69,
                              23,  85,  -3,  124, 63,  -61, -15, 77,  -41, 15,  -45, 12,  0};
  const flex_trit_t EX_ADD_0_1[] = {4,   -57, 55,  52,  -63, 80,  19,  21,  -45, 71,  -16, 53,  -4, 29, 60,  -12,
                                    15,  -9,  17,  23,  0,   119, 28,  -3,  -44, -63, 81,  -43, 48, 7,  113, 127,
                                    -41, 68,  117, 115, 7,   63,  -49, 112, -41, -51, 64,  5,   15, 68, -12, 52,
                                    -35, -63, -61, -47, 48,  63,  117, 124, 80,  -11, 117, -44, 15};
  const flex_trit_t EX_ADD_2_2[] = {-9,  48,  -48, 124, 117, 49, 52,  13,  65, 65,  -12, -51, 81,  4,   67, -47,
                                    124, 61,  115, -35, 92,  64, -45, 115, -1, -13, -48, -12, 84,  -52, 79, 93,
                                    63,  -48, -15, 76,  4,   16, 1,   92,  20, 125, -36, 112, -15, -61, 16, 64,
                                    21,  93,  20,  -35, -60, 67, -49, 13,  61, 4,   63,  117, 5};
  const flex_trit_t EX_ADD_2_3[] = {21,  21,  -48, 31,  -11, 68,  -45, 0,   -52, 71,  79,  64,  13,  -59, 51,  -63,
                                    67,  -44, -15, 112, 95,  0,   67,  127, -48, 51,  -57, 48,  -59, 21,  -49, -57,
                                    -61, 5,   79,  -43, 124, -59, 115, 0,   76,  87,  28,  19,  7,   85,  -13, 16,
                                    29,  83,  4,   53,  51,  84,  -16, 51,  -13, -47, 4,   -64, 13};
#elif defined(FLEX_TRIT_ENCODING_5_TRITS_PER_BYTE)
  const flex_trit_t SEED[] = {
      55,  90,   46,  -48, 25,  93,  92,  -41,  -112, -38,  53,  -66,  102, -13, -19, -1, -78,
      28,  -104, 100, 74,  36,  34,  121, -94,  -115, -84,  46,  62,   -38, -57, -3,  9,  83,
      -69, 56,   -20, 109, 102, 120, -38, -103, -10,  -106, -56, -113, 72,  -10, 0,
  };
  const flex_trit_t EX_ADD_0_1[] = {
      -78, 46,  -55, -78, -45, 111, 73, 86,  45,   -83, 59, -36, -114, 53,  86, 33, -81,
      -74, -98, -46, 55,  120, -83, 6,  -62, 59,   25,  67, -64, -107, -37, 53, 65, -10,
      39,  -12, 30,  70,  62,  -79, 53, -6,  -118, 66,  15, 120, -49,  -44, -4,
  };
  const flex_trit_t EX_ADD_2_2[] = {
      -34, -3,   -110, 67,  -8,  -56, 9,   85,  48,  17,  31,   78, -17,  -49, -91, -59, 33,
      -18, -92,  -119, -37, 75,  104, -89, 104, -97, 80,  -106, 24, 1,    10,  99,  93,  -76,
      -83, -104, -28,  3,   120, 102, 93,  74,  -12, -92, 79,   77, -117, 66,  4,
  };
  const flex_trit_t EX_ADD_2_3[] = {
      94,  4,    43,  -96, -51, -6,  -27, 86,   23,  -45,  36,  -31, -107, 90,  -74, 53,  32,
      -27, -114, -53, -91, -8,  35,  38,  -112, -35, 33,   69,  -14, 113,  -93, 1,   -57, -68,
      73,  6,    -41, -12, 64,  105, 84,  -29,  107, -107, -91, 15,  25,   -81, -2,
  };
#endif

  flex_trit_t* out_1 = iota_sign_address_gen_flex_trits(SEED, 0, 1);
  flex_trit_t* out_2 = iota_sign_address_gen_flex_trits(SEED, 2, 2);
  flex_trit_t* out_3 = iota_sign_address_gen_flex_trits(SEED, 2, 3);

  TEST_ASSERT_EQUAL_MEMORY(out_1, EX_ADD_0_1, FLEX_TRIT_SIZE_243);
  TEST_ASSERT_EQUAL_MEMORY(out_2, EX_ADD_2_2, FLEX_TRIT_SIZE_243);
  TEST_ASSERT_EQUAL_MEMORY(out_3, EX_ADD_2_3, FLEX_TRIT_SIZE_243);

  free(out_1);
  free(out_2);
  free(out_3);
}

static void test_flex_signature(void) {
#if defined(FLEX_TRIT_ENCODING_1_TRIT_PER_BYTE)
  const flex_trit_t SEED[] = {
      1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,  0, 0, 1,
      1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1, 0, 0, -1,
      1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,  0, 0, 0,
      1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,  0, 0, 1,
      1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1, 0, 0, -1,
      1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,  0, 0, 0,
      1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,  0, 0, 1,
      1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1, 0, 0, -1,
      1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,  0, 0, 0,
  };
  const flex_trit_t EX[] = {
      0,  0,  1,  0,  0,  -1, 0,  0,  -1, -1, -1, 0,  -1, -1, 0,  -1, -1, 1,  1,  0,  -1, -1, -1, 1,  -1, -1, 0,  0,
      1,  -1, 1,  0,  -1, 1,  -1, 1,  0,  -1, 1,  0,  1,  0,  -1, 0,  -1, -1, 0,  0,  -1, 0,  -1, 0,  1,  -1, -1, -1,
      1,  -1, 1,  -1, 1,  1,  -1, 1,  -1, 1,  -1, -1, -1, 0,  1,  1,  0,  -1, -1, -1, -1, -1, 1,  1,  0,  0,  -1, -1,
      -1, 0,  1,  0,  -1, 0,  1,  0,  1,  0,  0,  -1, -1, 0,  -1, 1,  -1, -1, -1, -1, 1,  0,  1,  0,  1,  -1, 1,  -1,
      -1, -1, 0,  -1, -1, 0,  0,  1,  0,  0,  0,  0,  -1, 1,  1,  0,  -1, 1,  1,  0,  1,  0,  -1, 1,  1,  -1, 1,  1,
      0,  -1, 0,  1,  -1, 0,  1,  0,  0,  0,  -1, -1, 1,  0,  -1, 0,  1,  -1, 1,  0,  -1, 0,  -1, 0,  1,  0,  1,  1,
      -1, -1, 0,  0,  0,  0,  -1, 1,  -1, 0,  -1, 0,  -1, 0,  -1, 1,  0,  -1, 0,  -1, 1,  0,  0,  -1, -1, 0,  0,  -1,
      1,  1,  0,  0,  0,  -1, 1,  -1, -1, 1,  1,  0,  -1, 1,  1,  1,  1,  -1, -1, 0,  1,  0,  -1, 0,  1,  1,  0,  -1,
      -1, 1,  -1, 1,  1,  0,  0,  1,  1,  0,  0,  0,  0,  0,  -1, -1, -1, -1, 0,  0,  1,  -1, 0,  1,  0,  -1, 0,  -1,
      0,  1,  0,  -1, 0,  0,  -1, 1,  -1, 0,  1,  0,  0,  0,  -1, -1, 0,  1,  -1, 0,  -1, 0,  -1, 0,  0,  0,  1,  -1,
      -1, -1, 0,  -1, 1,  1,  0,  1,  -1, 0,  1,  1,  1,  -1, 1,  -1, 1,  1,  -1, -1, 1,  1,  -1, -1, -1, 0,  1,  -1,
      0,  -1, -1, 0,  0,  -1, 1,  -1, 1,  1,  0,  0,  1,  1,  -1, 1,  -1, 0,  1,  0,  1,  -1, 1,  0,  0,  1,  -1, 0,
      0,  -1, 1,  -1, -1, 0,  -1, -1, -1, 1,  0,  1,  0,  -1, 0,  1,  -1, 1,  -1, 0,  0,  -1, 0,  0,  1,  -1, 0,  0,
      0,  1,  1,  0,  -1, 1,  1,  1,  0,  -1, 1,  -1, 1,  -1, 1,  1,  -1, -1, 0,  -1, -1, 1,  1,  1,  1,  0,  0,  1,
      1,  0,  1,  -1, -1, 0,  -1, -1, -1, 0,  -1, 0,  1,  -1, -1, 1,  1,  1,  -1, 0,  1,  -1, -1, -1, 0,  1,  -1, 0,
      0,  1,  0,  0,  0,  1,  -1, 0,  1,  -1, -1, 1,  1,  1,  -1, -1, -1, 0,  0,  0,  0,  -1, 0,  -1, -1, 1,  1,  0,
      0,  -1, 1,  0,  1,  1,  0,  -1, 1,  -1, 0,  1,  1,  0,  0,  1,  0,  -1, 1,  0,  -1, 1,  -1, 0,  -1, 1,  -1, 1,
      -1, 0,  -1, -1, 0,  1,  1,  0,  0,  0,  -1, 0,  1,  -1, 1,  -1, -1, -1, -1, 1,  -1, -1, 0,  0,  -1, -1, 1,  0,
      1,  -1, -1, 1,  -1, 1,  -1, 1,  -1, 1,  0,  -1, -1, 0,  -1, 1,  0,  0,  0,  1,  0,  1,  1,  0,  0,  1,  -1, 1,
      -1, 1,  -1, 0,  0,  1,  0,  -1, 0,  -1, 0,  0,  0,  -1, 1,  0,  1,  -1, -1, 0,  1,  0,  -1, -1, 1,  1,  0,  -1,
      1,  1,  0,  1,  0,  1,  -1, 0,  -1, 0,  0,  1,  0,  -1, 0,  1,  0,  0,  0,  -1, 1,  -1, -1, -1, 1,  0,  -1, 0,
      1,  0,  1,  0,  1,  -1, 0,  1,  -1, 1,  1,  0,  0,  -1, -1, 0,  0,  1,  0,  0,  0,  -1, -1, 1,  1,  1,  0,  1,
      1,  0,  0,  -1, 1,  1,  0,  0,  -1, 0,  -1, 0,  0,  0,  -1, 0,  -1, 1,  1,  1,  1,  1,  0,  -1, -1, -1, 1,  -1,
      -1, 1,  0,  1,  1,  1,  0,  -1, 0,  0,  0,  1,  1,  -1, 0,  0,  1,  -1, -1, 0,  1,  -1, 1,  1,  1,  1,  1,  -1,
      1,  -1, 1,  -1, 1,  0,  0,  -1, -1, 0,  1,  -1, -1, -1, -1, 0,  -1, 1,  1,  -1, 0,  -1, 0,  1,  -1, 1,  1,  -1,
      -1, 0,  1,  0,  -1, 0,  0,  1,  0,  1,  0,  0,  1,  0,  1,  -1, 1,  -1, -1, 1,  -1, 1,  1,  0,  1,  1,  -1, 0,
      0,  -1, 0,  1,  -1, -1, 1,  0,  1,  0,  1,  -1, -1, -1, 1,  0,  0,  0,  0,  1,  0,  -1, -1, 1,  1,  0,  0,  -1,
      0,  0,  0,  -1, -1, -1, -1, -1, 0,  0,  0,  0,  -1, -1, -1, 0,  1,  -1, 0,  1,  -1, 0,  1,  0,  0,  0,  1,  1,
      -1, 1,  1,  -1, 0,  1,  0,  1,  -1, 0,  0,  -1, 0,  0,  -1, 0,  1,  -1, 0,  -1, 1,  -1, 1,  1,  0,  0,  -1, -1,
      0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  1,  -1, -1, 0,  -1, 1,  -1, 0,  -1, 0,  -1, -1, -1, 0,  -1, 1,  1,  1,
      -1, 1,  0,  0,  -1, 1,  0,  -1, -1, 1,  -1, 0,  0,  -1, 0,  -1, -1, 0,  1,  -1, 0,  -1, 0,  0,  1,  0,  -1, -1,
      0,  0,  0,  0,  -1, 1,  0,  0,  -1, -1, 1,  -1, -1, -1, -1, 1,  -1, -1, -1, 0,  0,  -1, 1,  0,  -1, -1, -1, 0,
      1,  -1, 1,  -1, 1,  -1, 0,  -1, -1, 0,  -1, 0,  0,  0,  1,  0,  1,  1,  1,  0,  0,  0,  -1, -1, -1, 1,  -1, 0,
      0,  -1, 1,  -1, 1,  0,  -1, 1,  1,  -1, 0,  -1, 1,  -1, 1,  -1, 1,  1,  0,  1,  1,  0,  0,  0,  1,  0,  0,  1,
      -1, -1, 0,  -1, 1,  0,  -1, 1,  -1, 0,  0,  0,  0,  0,  1,  -1, 0,  1,  1,  0,  1,  1,  1,  0,  1,  -1, 1,  0,
      0,  1,  0,  -1, 0,  1,  1,  -1, -1, 0,  0,  0,  -1, 1,  1,  1,  -1, 0,  -1, -1, 0,  1,  1,  0,  1,  -1, -1, 1,
      -1, 1,  -1, 1,  1,  1,  0,  1,  -1, 1,  0,  0,  -1, -1, 1,  1,  -1, 0,  0,  0,  0,  0,  0,  0,  -1, -1, 0,  1,
      -1, 1,  1,  1,  0,  0,  -1, -1, 0,  1,  -1, 1,  1,  0,  -1, 1,  0,  1,  0,  -1, -1, 0,  1,  1,  1,  1,  1,  -1,
      -1, -1, 0,  -1, 1,  0,  0,  1,  -1, -1, -1, 1,  1,  1,  -1, 1,  0,  0,  0,  0,  1,  1,  -1, 0,  -1, -1, 0,  1,
      1,  0,  0,  1,  0,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  -1, -1, 1,  0,  1,  -1, 1,  0,  0,  0,  -1, 0,  0,
      0,  0,  0,  -1, -1, -1, 0,  -1, -1, 0,  1,  -1, 0,  -1, -1, 1,  1,  1,  1,  1,  1,  1,  1,  -1, -1, -1, 0,  -1,
      1,  1,  0,  0,  0,  0,  0,  1,  -1, 1,  0,  1,  -1, 1,  1,  0,  -1, 0,  -1, -1, -1, 1,  -1, -1, -1, 1,  0,  0,
      -1, -1, 1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  -1, 0,  0,  0,  1,  1,  -1,
      1,  -1, 0,  0,  -1, 0,  -1, 1,  1,  -1, 0,  -1, -1, -1, 1,  -1, 1,  0,  -1, 0,  0,  1,  -1, 0,  0,  -1, -1, -1,
      1,  -1, -1, 0,  0,  -1, 1,  0,  1,  -1, -1, 0,  1,  0,  0,  1,  -1, 1,  1,  -1, 0,  -1, 1,  0,  1,  1,  1,  -1,
      -1, 0,  1,  0,  1,  0,  1,  0,  -1, -1, 1,  -1, 0,  -1, -1, -1, -1, 0,  -1, 0,  0,  0,  0,  1,  0,  -1, -1, 0,
      1,  0,  1,  0,  1,  1,  1,  -1, 1,  1,  0,  -1, -1, 1,  0,  0,  0,  -1, 0,  0,  0,  0,  -1, 0,  1,  0,  0,  0,
      0,  1,  -1, -1, 1,  1,  1,  1,  0,  1,  -1, -1, 1,  0,  -1, -1, 0,  1,  -1, 1,  1,  1,  -1, -1, -1, 0,  0,  -1,
      0,  0,  1,  0,  1,  1,  0,  0,  -1, -1, 1,  0,  -1, -1, 1,  0,  0,  0,  -1, 1,  1,  1,  1,  0,  0,  1,  1,  -1,
      1,  1,  -1, 0,  1,  1,  1,  0,  0,  0,  -1, -1, 0,  -1, -1, 0,  1,  0,  0,  1,  -1, -1, 0,  -1, -1, 1,  1,  1,
      0,  0,  1,  1,  -1, 0,  1,  1,  1,  -1, 1,  1,  0,  -1, -1, 1,  -1, 0,  1,  -1, 0,  0,  1,  -1, -1, 0,  -1, -1,
      0,  -1, 1,  0,  -1, 0,  1,  -1, 0,  1,  -1, 1,  -1, 0,  1,  -1, 0,  1,  1,  0,  0,  1,  1,  1,  1,  0,  0,  0,
      1,  0,  0,  -1, -1, 1,  -1, -1, -1, -1, -1, 0,  0,  -1, 1,  1,  -1, 0,  0,  0,  -1, -1, 1,  -1, 0,  0,  -1, 1,
      0,  1,  0,  -1, 0,  -1, 1,  1,  -1, 0,  0,  0,  1,  -1, 1,  -1, 1,  -1, 0,  0,  1,  -1, 0,  0,  -1, 1,  1,  -1,
      -1, 0,  -1, 1,  0,  -1, 1,  0,  1,  0,  -1, -1, -1, 0,  0,  -1, -1, 0,  -1, -1, 1,  1,  0,  -1, 0,  0,  1,  1,
      -1, 0,  0,  0,  -1, 1,  1,  1,  -1, 0,  1,  0,  -1, -1, 1,  -1, 0,  -1, 0,  0,  -1, 0,  1,  -1, -1, 1,  -1, -1,
      1,  -1, 0,  1,  1,  1,  1,  -1, 1,  -1, 1,  0,  0,  1,  -1, 0,  1,  -1, -1, -1, -1, -1, 1,  1,  1,  0,  0,  1,
      1,  0,  1,  1,  1,  1,  1,  -1, -1, 0,  1,  -1, 0,  -1, 1,  0,  0,  0,  0,  -1, -1, 1,  0,  -1, 0,  1,  0,  -1,
      -1, 1,  -1, -1, 0,  1,  -1, -1, -1, 0,  -1, -1, -1, 1,  -1, 1,  1,  -1, -1, 0,  0,  -1, -1, -1, 0,  1,  1,  0,
      -1, 0,  -1, -1, 1,  1,  1,  0,  1,  1,  1,  -1, -1, -1, 0,  0,  1,  0,  1,  0,  1,  -1, 0,  0,  1,  0,  -1, 0,
      -1, -1, 0,  1,  1,  -1, 1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  -1, -1, -1, 0,  0,
      1,  0,  0,  1,  0,  -1, -1, 0,  1,  -1, 1,  1,  -1, -1, 1,  1,  -1, -1, 1,  1,  -1, 1,  0,  0,  1,  -1, 0,  1,
      -1, 0,  1,  -1, -1, -1, 1,  1,  -1, 1,  1,  0,  0,  -1, 1,  1,  1,  0,  1,  1,  -1, 0,  1,  0,  -1, 1,  -1, 0,
      1,  0,  0,  -1, -1, 0,  -1, -1, 0,  1,  1,  0,  -1, -1, 0,  1,  -1, 0,  0,  0,  0,  0,  0,  -1, -1, 0,  0,  0,
      0,  1,  -1, 1,  -1, -1, -1, 0,  0,  -1, -1, -1, 0,  1,  -1, 0,  0,  -1, 1,  -1, 1,  1,  1,  -1, 1,  -1, 0,  -1,
      0,  1,  -1, -1, 0,  1,  1,  -1, 0,  1,  -1, 1,  -1, 1,  1,  0,  0,  -1, 1,  -1, 1,  -1, -1, 0,  0,  1,  0,  1,
      1,  1,  0,  0,  1,  1,  -1, 1,  0,  1,  0,  1,  0,  -1, 1,  0,  -1, 1,  1,  0,  1,  0,  0,  0,  0,  0,  -1, -1,
      0,  1,  0,  -1, 0,  -1, 0,  0,  -1, 1,  0,  -1, 1,  0,  -1, 0,  1,  0,  -1, -1, 0,  0,  1,  -1, 0,  1,  1,  1,
      -1, 0,  0,  0,  0,  1,  -1, 0,  -1, 1,  0,  0,  -1, 1,  -1, 0,  0,  0,  -1, 1,  0,  0,  1,  0,  0,  -1, 1,  0,
      1,  1,  1,  -1, 1,  1,  -1, -1, 1,  1,  0,  0,  0,  1,  -1, 0,  1,  -1, 0,  -1, -1, 0,  -1, -1, 0,  0,  1,  1,
      -1, 1,  0,  1,  0,  -1, -1, 0,  1,  1,  -1, -1, -1, -1, 0,  -1, -1, -1, 1,  1,  -1, 1,  1,  1,  -1, -1, 0,  1,
      -1, 0,  -1, -1, 1,  1,  0,  0,  0,  1,  -1, 0,  -1, 1,  0,  1,  1,  -1, 0,  1,  0,  -1, 0,  -1, 1,  -1, 1,  -1,
      0,  1,  -1, 1,  0,  0,  -1, 1,  1,  0,  0,  1,  -1, 1,  0,  -1, -1, -1, 1,  0,  1,  0,  0,  0,  1,  -1, 0,  0,
      0,  1,  1,  -1, 0,  1,  1,  -1, 0,  1,  0,  -1, -1, -1, 1,  1,  1,  0,  1,  -1, 1,  1,  0,  1,  -1, 1,  -1, 0,
      1,  0,  1,  1,  -1, 0,  -1, -1, -1, 1,  -1, -1, -1, 1,  1,  1,  -1, -1, 0,  1,  0,  -1, 1,  1,  0,  0,  1,  -1,
      -1, 0,  1,  1,  -1, 1,  -1, 0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0,  -1, 1,  1,  -1, 0,  0,  0,  1,  1,
      -1, -1, 0,  -1, -1, 1,  0,  -1, 0,  -1, 1,  -1, -1, 1,  0,  -1, -1, 0,  1,  1,  1,  1,  0,  0,  1,  0,  0,  0,
      -1, 1,  -1, 0,  1,  0,  -1, 0,  -1, 0,  0,  0,  -1, 0,  1,  0,  1,  0,  1,  1,  0,  -1, 1,  0,  1,  0,  -1, -1,
      0,  1,  0,  -1, -1, -1, 0,  0,  1,  -1, -1, 1,  0,  0,  0,  1,  -1, 1,  0,  1,  1,  0,  1,  0,  0,  0,  -1, 1,
      1,  1,  0,  -1, 0,  -1, 0,  -1, 0,  -1, 1,  1,  0,  0,  0,  1,  -1, -1, -1, 1,  0,  0,  -1, -1, 1,  1,  0,  0,
      -1, 1,  1,  0,  -1, -1, 1,  1,  0,  0,  1,  -1, 1,  1,  1,  -1, 1,  1,  -1, 1,  -1, -1, 1,  0,  -1, 1,  0,  -1,
      -1, -1, 1,  0,  1,  -1, 0,  -1, 1,  -1, -1, 0,  0,  -1, 1,  0,  -1, 1,  1,  -1, 0,  -1, -1, 1,  1,  -1, 0,  0,
      0,  -1, -1, -1, 0,  1,  0,  0,  -1, 0,  1,  -1, 0,  1,  -1, 0,  0,  1,  -1, -1, -1, -1, -1, -1, 0,  -1, -1, -1,
      0,  -1, 0,  -1, 1,  -1, 0,  -1, 0,  1,  -1, -1, 0,  0,  1,  0,  -1, 1,  -1, 1,  0,  1,  0,  -1, 0,  -1, 1,  0,
      1,  -1, 1,  1,  0,  -1, 1,  0,  1,  -1, 1,  1,  -1, 1,  0,  1,  -1, 1,  -1, 0,  0,  1,  -1, 1,  1,  -1, -1, -1,
      0,  -1, -1, 0,  0,  1,  0,  1,  0,  -1, -1, 1,  1,  -1, 0,  1,  1,  0,  0,  -1, 0,  -1, 1,  -1, 0,  -1, -1, 0,
      0,  1,  -1, 1,  0,  1,  1,  1,  0,  1,  0,  1,  -1, 0,  0,  -1, 1,  1,  -1, 0,  1,  0,  1,  0,  -1, 0,  0,  1,
      0,  -1, 0,  0,  -1, -1, 1,  -1, 1,  1,  1,  0,  1,  -1, -1, -1, 0,  0,  1,  -1, -1, 0,  0,  1,  1,  1,  -1, -1,
      0,  1,  1,  1,  0,  0,  1,  0,  -1, 1,  -1, 0,  -1, -1, -1, 1,  0,  1,  1,  0,  -1, -1, 1,  1,  -1, 0,  -1, 1,
      -1, 1,  1,  -1, 0,  1,  -1, 0,  -1, 1,  0,  0,  1,  0,  1,  1,  -1, 0,  0,  0,  0,  0,  1,  -1, -1, 1,  1,  1,
      -1, 1,  0,  1,  0,  0,  -1, 0,  -1, -1, -1, -1, 0,  -1, -1, -1, -1, 0,  -1, 0,  1,  1,  -1, -1, -1, -1, -1, -1,
      1,  0,  0,  1,  1,  0,  -1, 0,  1,  -1, 0,  1,  -1, 0,  1,  0,  1,  1,  0,  -1, 1,  1,  1,  -1, 0,  0,  -1, 1,
      1,  0,  0,  -1, -1, 1,  0,  1,  0,  0,  0,  1,  0,  0,  0,  -1, 1,  1,  -1, 1,  -1, -1, 1,  -1, 1,  -1, 1,  1,
      0,  -1, 0,  0,  1,  -1, -1, 0,  -1, 1,  0,  -1, -1, -1, 1,  1,  0,  0,  0,  0,  0,  -1, -1, -1, -1, 1,  -1, -1,
      0,  1,  0,  1,  -1, 0,  -1, 1,  0,  1,  -1, -1, 0,  1,  -1, 1,  -1, 1,  -1, -1, 0,  0,  0,  0,  -1, -1, 1,  -1,
      0,  -1, 1,  0,  0,  0,  1,  0,  0,  1,  1,  1,  0,  0,  -1, 1,  1,  0,  1,  0,  0,  1,  0,  1,  -1, 1,  -1, 1,
      -1, -1, -1, -1, 1,  -1, -1, -1, -1, 0,  1,  0,  -1, 0,  1,  1,  1,  -1, -1, 0,  1,  0,  -1, 0,  0,  0,  0,  0,
      0,  0,  1,  1,  1,  -1, 0,  -1, 0,  0,  0,  0,  0,  1,  1,  0,  0,  1,  1,  1,  0,  0,  -1, -1, -1, -1, 1,  0,
      1,  -1, -1, -1, -1, 0,  0,  0,  1,  1,  0,  0,  0,  -1, 1,  1,  1,  -1, 1,  -1, 0,  -1, 0,  0,  0,  1,  1,  -1,
      -1, 1,  1,  1,  -1, 0,  -1, -1, -1, 0,  -1, 0,  1,  1,  1,  1,  0,  0,  -1, -1, -1, 0,  -1, 1,  1,  1,  0,  -1,
      0,  1,  1,  0,  0,  -1, 1,  0,  1,  -1, -1, 1,  0,  -1, 1,  -1, 0,  1,  1,  0,  -1, 0,  -1, 0,  1,  1,  -1, 1,
      0,  1,  1,  1,  -1, 1,  -1, 1,  1,  -1, 1,  1,  0,  0,  -1, -1, -1, 1,  1,  0,  -1, 1,  0,  -1, 1,  -1, 0,  0,
      -1, 0,  -1, -1, 0,  0,  1,  -1, -1, 1,  0,  0,  -1, 1,  0,  -1, -1, 0,  0,  1,  -1, -1, 1,  -1, 0,  1,  1,  1,
      1,  -1, 1,  1,  0,  -1, 1,  1,  0,  1,  -1, 1,  -1, 0,  -1, 1,  1,  -1, 1,  0,  -1, 0,  0,  -1, -1, -1, 1,  1,
      0,  1,  1,  0,  1,  1,  1,  0,  0,  0,  -1, 0,  1,  -1, 0,  0,  -1, 1,  1,  -1, 1,  1,  0,  0,  0,  -1, 0,  0,
      0,  1,  1,  0,  0,  0,  -1, 1,  0,  -1, 0,  1,  -1, 1,  1,  -1, -1, 0,  1,  -1, 1,  -1, 1,  1,  0,  0,  1,  0,
      1,  1,  -1, -1, -1, -1, 1,  -1, -1, 0,  0,  1,  -1, 1,  -1, 0,  1,  0,  1,  0,  -1, -1, 0,  1,  0,  -1, -1, -1,
      -1, -1, 1,  1,  -1, 0,  -1, -1, 1,  0,  0,  0,  1,  -1, 1,  -1, 0,  -1, 1,  0,  -1, 1,  0,  0,  -1, -1, 1,  0,
      0,  1,  0,  -1, 0,  0,  -1, 1,  -1, 0,  0,  -1, -1, -1, -1, 1,  0,  1,  1,  0,  0,  -1, 0,  1,  1,  -1, 1,  0,
      1,  0,  -1, 0,  0,  -1, 1,  0,  1,  0,  1,  1,  1,  -1, 1,  -1, 1,  0,  0,  -1, 1,  -1, 0,  -1, -1, -1, 1,  -1,
      0,  1,  -1, 0,  -1, 1,  0,  1,  1,  0,  1,  -1, 0,  0,  -1, 0,  -1, -1, -1, -1, -1, 0,  0,  1,  0,  -1, -1, 1,
      -1, -1, -1, -1, -1, 1,  0,  -1, -1, 0,  -1, 0,  1,  1,  0,  1,  1,  0,  -1, 0,  0,  0,  -1, -1, 1,  1,  0,  -1,
      1,  -1, 1,  -1, 1,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  1,  1,  1,  -1, 1,  1,  1,  0,  1,  1,  -1, 0,  1,
      0,  -1, 0,  0,  -1, -1, 0,  1,  0,  0,  0,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  -1, 0,  -1, 1,  0,  1,
      -1, 0,  1,  0,  -1, -1, -1, -1, 1,  -1, 0,  1,  -1, 0,  -1, 0,  1,  1,  1,  -1, 0,  -1, 1,  0,  1,  0,  -1, 0,
      0,  -1, 0,  -1, 0,  0,  1,  -1, 1,  0,  -1, 1,  -1, 1,  -1, 1,  0,  -1, 1,  0,  1,  1,  1,  0,  -1, 1,  -1, -1,
      1,  -1, -1, -1, 1,  0,  -1, 1,  1,  0,  0,  -1, 0,  0,  0,  0,  -1, -1, -1, 1,  1,  -1, 0,  -1, 1,  -1, 0,  1,
      -1, 0,  1,  0,  0,  1,  1,  0,  1,  1,  0,  0,  -1, -1, 1,  1,  -1, -1, 0,  0,  -1, 1,  1,  0,  1,  1,  0,  -1,
      -1, -1, 0,  0,  -1, 0,  1,  0,  -1, -1, -1, 0,  0,  0,  1,  1,  0,  1,  1,  1,  -1, 1,  -1, 0,  1,  1,  0,  -1,
      -1, 0,  -1, -1, 0,  1,  -1, 1,  0,  0,  1,  0,  -1, 1,  0,  1,  0,  1,  1,  0,  -1, 0,  -1, -1, -1, 0,  -1, 0,
      0,  1,  1,  1,  0,  1,  -1, -1, -1, 0,  0,  0,  1,  1,  -1, -1, 1,  1,  -1, -1, 1,  1,  1,  -1, 0,  0,  -1, 0,
      1,  1,  0,  0,  -1, 0,  0,  1,  1,  1,  1,  -1, 0,  0,  0,  -1, -1, 1,  -1, 0,  -1, -1, -1, -1, 0,  1,  1,  -1,
      1,  -1, 0,  1,  1,  1,  -1, -1, -1, 1,  0,  0,  -1, -1, -1, 0,  -1, -1, 1,  0,  0,  -1, 0,  -1, 0,  1,  -1, -1,
      0,  0,  0,  -1, -1, -1, 0,  0,  1,  1,  1,  1,  1,  1,  1,  0,  -1, 1,  1,  1,  -1, -1, 0,  0,  1,  1,  1,  1,
      1,  -1, -1, -1, 0,  0,  1,  0,  1,  -1, -1, 1,  0,  0,  0,  -1, -1, -1, 1,  0,  -1, 0,  0,  1,  1,  0,  1,  -1,
      -1, -1, 1,  1,  0,  -1, -1, 1,  0,  -1, -1, -1, -1, 0,  -1, 0,  1,  -1, 0,  -1, 1,  1,  0,  0,  0,  0,  1,  0,
      -1, 0,  0,  0,  -1, 1,  1,  -1, -1, 0,  1,  -1, 0,  0,  1,  -1, -1, -1, -1, 1,  0,  0,  0,  -1, -1, -1, 1,  0,
      -1, -1, 1,  -1, 0,  1,  0,  1,  -1, 1,  0,  1,  1,  -1, -1, 1,  0,  1,  0,  0,  1,  0,  -1, 1,  0,  -1, -1, -1,
      0,  -1, -1, 0,  -1, 1,  1,  -1, 1,  1,  1,  1,  0,  -1, 0,  -1, 1,  -1, 1,  -1, 0,  -1, -1, 1,  0,  -1, 1,  0,
      1,  0,  0,  1,  -1, 0,  1,  -1, -1, 1,  0,  -1, -1, 0,  -1, 0,  1,  0,  -1, 0,  0,  1,  1,  0,  0,  -1, 1,  1,
      0,  -1, -1, 0,  0,  -1, 0,  0,  0,  0,  1,  1,  -1, 0,  1,  0,  1,  0,  -1, 1,  1,  1,  -1, 1,  1,  1,  0,  -1,
      1,  1,  1,  -1, -1, 0,  1,  1,  -1, 1,  -1, -1, 1,  0,  0,  0,  -1, 0,  1,  1,  0,  1,  -1, 0,  0,  -1, 1,  -1,
      0,  1,  1,  -1, 1,  0,  0,  0,  0,  1,  -1, -1, 0,  -1, -1, 1,  1,  -1, 1,  -1, 1,  -1, 1,  -1, -1, 1,  0,  1,
      -1, 1,  -1, 0,  0,  0,  1,  0,  -1, 1,  -1, 1,  1,  1,  -1, 1,  0,  0,  1,  1,  -1, -1, -1, 0,  -1, 0,  1,  -1,
      1,  -1, 0,  1,  -1, 0,  0,  0,  1,  0,  1,  1,  0,  0,  1,  -1, -1, 1,  1,  -1, -1, 0,  1,  0,  0,  1,  -1, -1,
      1,  -1, -1, -1, 1,  -1, 1,  -1, 1,  0,  -1, 0,  -1, 1,  1,  1,  0,  -1, 0,  -1, 0,  1,  0,  -1, 1,  0,  0,  0,
      1,  -1, -1, 1,  1,  0,  0,  1,  0,  1,  0,  -1, 1,  0,  0,  0,  -1, 0,  1,  0,  -1, 1,  1,  1,  -1, 0,  -1, 1,
      1,  0,  0,  0,  -1, 1,  1,  -1, 1,  -1, 1,  0,  -1, -1, -1, -1, 0,  -1, 1,  -1, 1,  1,  -1, -1, 1,  1,  0,  1,
      -1, 1,  1,  1,  0,  1,  -1, -1, 1,  0,  0,  0,  0,  1,  -1, -1, 0,  1,  -1, 1,  -1, 0,  1,  0,  -1, 1,  1,  1,
      -1, -1, -1, -1, -1, 0,  1,  -1, -1, -1, 0,  0,  0,  -1, -1, 0,  1,  -1, 1,  1,  1,  0,  -1, 1,  -1, 0,  -1, 0,
      -1, 0,  0,  -1, 1,  0,  -1, -1, 0,  1,  0,  0,  1,  1,  1,  -1, 1,  -1, 1,  0,  0,  -1, -1, 1,  0,  -1, 1,  -1,
      0,  0,  -1, -1, 1,  0,  -1, -1, 0,  -1, -1, 1,  -1, 0,  -1, 0,  0,  0,  -1, 1,  1,  1,  0,  -1, 0,  0,  0,  0,
      1,  1,  -1, -1, -1, -1, 1,  -1, 0,  1,  1,  0,  0,  -1, 0,  1,  -1, -1, -1, 0,  0,  0,  -1, 0,  1,  1,  -1, -1,
      0,  -1, 1,  -1, 1,  1,  -1, 1,  -1, 0,  -1, -1, -1, 0,  1,  1,  1,  1,  -1, 1,  1,  -1, 1,  1,  1,  -1, -1, -1,
      0,  -1, 0,  1,  -1, -1, -1, -1, -1, -1, 0,  0,  1,  -1, -1, 1,  -1, 0,  1,  1,  1,  1,  0,  0,  -1, 1,  -1, -1,
      -1, 1,  0,  0,  -1, 0,  -1, 0,  -1, -1, 1,  1,  1,  -1, 1,  1,  -1, -1, 1,  -1, 1,  0,  -1, -1, 1,  0,  0,  0,
      -1, 0,  1,  0,  -1, -1, -1, 1,  -1, 0,  1,  -1, -1, 1,  0,  0,  0,  0,  0,  1,  1,  0,  0,  -1, 0,  -1, -1, -1,
      0,  1,  1,  -1, 0,  -1, 0,  -1, 0,  1,  -1, -1, 0,  0,  0,  0,  0,  -1, 0,  1,  1,  1,  1,  -1, 1,  0,  0,  -1,
      1,  1,  1,  1,  0,  1,  0,  0,  1,  -1, 1,  0,  -1, -1, 1,  0,  1,  1,  1,  0,  1,  1,  0,  0,  -1, -1, 1,  1,
      1,  1,  0,  0,  0,  -1, 0,  0,  -1, -1, 1,  1,  0,  0,  1,  1,  0,  1,  1,  -1, 0,  0,  -1, -1, 1,  -1, 0,  1,
      -1, 0,  1,  0,  0,  -1, 0,  -1, 1,  1,  0,  -1, 1,  1,  0,  1,  1,  0,  -1, -1, -1, 1,  1,  1,  1,  -1, -1, 1,
      1,  1,  -1, 1,  1,  0,  -1, -1, 1,  -1, -1, 0,  0,  0,  1,  -1, 0,  0,  1,  0,  -1, 1,  0,  1,  1,  0,  1,  1,
      0,  -1, 1,  0,  -1, 1,  -1, 1,  -1, 0,  0,  1,  -1, 1,  -1, 0,  0,  -1, -1, -1, 0,  1,  0,  1,  0,  1,  0,  1,
      1,  -1, 0,  -1, 0,  -1, -1, 0,  1,  0,  1,  1,  -1, 1,  1,  1,  0,  -1, -1, -1, 1,  0,  1,  0,  -1, 0,  1,  -1,
      0,  -1, 0,  1,  -1, -1, -1, 0,  -1, 0,  0,  -1, 0,  0,  0,  0,  -1, 1,  -1, -1, -1, -1, 1,  1,  -1, 0,  1,  -1,
      1,  0,  -1, 1,  1,  0,  -1, 0,  0,  1,  1,  1,  1,  1,  1,  1,  0,  -1, -1, 0,  0,  0,  1,  0,  1,  1,  1,  0,
      0,  -1, 0,  1,  1,  0,  -1, -1, 1,  0,  -1, 0,  0,  1,  -1, -1, -1, 1,  -1, 1,  -1, 1,  0,  1,  0,  0,  1,  -1,
      -1, 1,  -1, 1,  0,  1,  0,  1,  1,  1,  1,  -1, 1,  0,  -1, 1,  -1, 0,  0,  -1, 1,  -1, 1,  0,  -1, 1,  -1, 1,
      -1, -1, -1, 0,  0,  -1, 0,  1,  -1, -1, -1, 0,  -1, -1, 0,  0,  0,  -1, 0,  1,  0,  0,  -1, -1, 0,  1,  1,  0,
      0,  -1, 1,  -1, -1, -1, -1, 0,  -1, 1,  -1, 1,  1,  -1, -1, 0,  1,  -1, 1,  1,  0,  -1, 0,  -1, -1, -1, 1,  1,
      0,  -1, 1,  -1, 1,  1,  0,  0,  1,  0,  0,  -1, -1, -1, 0,  0,  0,  -1, -1, 0,  -1, -1, -1, 0,  -1, 1,  -1, -1,
      -1, -1, 1,  -1, 1,  1,  0,  0,  0,  1,  1,  0,  0,  -1, 0,  0,  0,  0,  0,  1,  1,  0,  -1, 1,  1,  -1, -1, 0,
      1,  0,  1,  -1, 1,  1,  1,  -1, -1, 0,  -1, -1, -1, 1,  1,  -1, 0,  0,  -1, -1, 1,  1,  0,  -1, 0,  1,  -1, 1,
      -1, 0,  1,  1,  1,  1,  1,  -1, 0,  1,  0,  0,  0,  0,  1,  0,  0,  -1, -1, 1,  1,  1,  -1, -1, -1, -1, 0,  1,
      0,  -1, 1,  -1, 1,  0,  0,  -1, -1, 0,  -1, 0,  0,  0,  1,  1,  -1, 0,  0,  -1, 1,  0,  0,  0,  0,  1,  -1, 1,
      0,  1,  -1, 1,  0,  -1, 0,  1,  -1, -1, -1, 0,  1,  0,  0,  1,  0,  -1, 1,  0,  1,  -1, 1,  -1, 1,  1,  -1, 0,
      0,  1,  1,  0,  1,  -1, 1,  0,  0,  1,  0,  -1, 1,  1,  0,  1,  -1, -1, 0,  0,  0,  1,  1,  -1, 1,  0,  1,  0,
      -1, -1, 1,  0,  1,  1,  -1, 0,  1,  0,  0,  1,  -1, -1, 1,  0,  1,  0,  0,  1,  0,  0,  1,  -1, -1, 1,  1,  0,
      -1, 1,  -1, 1,  0,  0,  1,  1,  0,  0,  -1, -1, 1,  0,  -1, -1, -1, 1,  0,  0,  -1, 1,  -1, 1,  -1, 1,  1,  1,
      1,  1,  1,  1,  0,  0,  1,  1,  -1, 1,  0,  0,  1,  -1, 1,  -1, 1,  1,  1,  -1, 0,  -1, -1, -1, 0,  1,  -1, -1,
      -1, 1,  1,  1,  1,  -1, -1, 1,  -1, 1,  0,  1,  0,  0,  1,  1,  1,  -1, 0,  0,  0,  1,  1,  -1, -1, 0,  -1, 1,
      1,  1,  -1, -1, -1, 1,  0,  1,  0,  1,  1,  1,  1,  -1, 0,  0,  -1, 0,  1,  0,  1,  -1, 1,  0,  0,  -1, 1,  1,
      -1, -1, -1, -1, 0,  -1, -1, 0,  1,  0,  1,  0,  1,  -1, 1,  1,  -1, -1, 0,  -1, -1, 1,  -1, 1,  0,  1,  1,  0,
      -1, 0,  -1, -1, 1,  -1, 0,  0,  0,  0,  0,  -1, -1, -1, -1, 0,  -1, 0,  0,  1,  -1, 1,  1,  -1, 0,  0,  -1, -1,
      1,  -1, 0,  -1, 0,  0,  1,  -1, 0,  1,  0,  0,  0,  1,  -1, -1, -1, 0,  0,  -1, 1,  0,  0,  -1, -1, 1,  0,  1,
      -1, -1, 0,  0,  -1, 0,  0,  -1, 0,  -1, 0,  1,  1,  1,  1,  -1, -1, 1,  1,  0,  -1, 0,  -1, 0,  0,  1,  0,  -1,
      1,  0,  1,  1,  0,  -1, 1,  1,  -1, 0,  -1, -1, 1,  1,  0,  1,  0,  1,  -1, 0,  0,  -1, 1,  -1, 1,  1,  0,  -1,
      0,  -1, 1,  -1, 1,  -1, 0,  0,  0,  -1, -1, -1, 0,  -1, -1, 0,  0,  1,  -1, -1, -1, -1, 0,  -1, 0,  -1, 1,  0,
      0,  0,  1,  1,  0,  1,  0,  -1, -1, 0,  1,  1,  0,  -1, -1, -1, -1, 1,  -1, 1,  1,  0,  1,  -1, 1,  1,  -1, 0,
      1,  0,  -1, -1, 0,  1,  -1, -1, -1, 1,  1,  -1, -1, 1,  -1, -1, -1, 1,  0,  1,  -1, 1,  0,  -1, -1, 1,  1,  1,
      -1, -1, 1,  -1, -1, -1, 1,  0,  1,  -1, -1, -1, 1,  1,  -1, 0,  -1, 1,  -1, 0,  0,  -1, 0,  1,  -1, 0,  1,  1,
      1,  1,  1,  -1, 1,  0,  -1, -1, 1,  0,  0,  -1, 1,  0,  0,  -1, 0,  -1, 1,  -1, 1,  1,  1,  0,  -1, 1,  0,  0,
      0,  1,  1,  0,  1,  0,  0,  -1, -1, -1, 1,  -1, 1,  1,  -1, 1,  -1, 0,  -1, 1,  -1, 1,  -1, 1,  1,  1,  1,  0,
      0,  1,  0,  1,  0,  -1, 0,  -1, 0,  -1, 0,  0,  -1, -1, -1, -1, -1, 1,  0,  -1, -1, 1,  -1, -1, -1, -1, 1,  1,
      1,  1,  0,  0,  1,  1,  1,  0,  0,  -1, -1, 0,  1,  -1, 0,  1,  1,  -1, -1, 0,  0,  -1, 1,  0,  0,  0,  -1, 1,
      0,  -1, 0,  1,  -1, -1, -1, 0,  0,  0,  0,  1,  -1, 0,  1,  0,  0,  -1, -1, -1, 0,  0,  1,  1,  0,  0,  -1, 1,
      0,  -1, -1, 1,  -1, 0,  -1, 0,  0,  0,  0,  0,  1,  0,  0,  -1, 0,  1,  1,  1,  0,  0,  1,  0,  -1, -1, 1,  1,
      0,  0,  -1, -1, -1, 0,  -1, 0,  -1, -1, 0,  1,  1,  -1, -1, 0,  1,  -1, -1, -1, 1,  0,  1,  1,  1,  1,  0,  -1,
      -1, 1,  1,  1,  0,  1,  1,  1,  1,  -1, 1,  0,  -1, 0,  0,  0,  1,  -1, 0,  1,  -1, 0,  1,  1,  0,  -1, 0,  1,
      -1, 1,  -1, -1, -1, -1, -1, -1, 1,  0,  -1, 1,  1,  1,  0,  1,  -1, -1, 0,  1,  0,  1,  1,  -1, -1, 1,  1,  1,
      1,  0,  -1, 1,  -1, 0,  1,  0,  0,  0,  1,  1,  1,  1,  -1, 0,  1,  1,  1,  0,  1,  0,  0,  1,  1,  0,  0,  1,
      -1, 1,  1,  -1, 0,  0,  -1, -1, 1,  1,  0,  1,  0,  1,  1,  0,  -1, -1, -1, 1,  -1, 1,  1,  -1, -1, -1, -1, 0,
      1,  1,  -1, 0,  1,  0,  1,  0,  1,  -1, 1,  0,  -1, 0,  0,  0,  -1, -1, 1,  -1, -1, -1, -1, 0,  0,  0,  0,  -1,
      -1, 1,  0,  1,  -1, 0,  0,  0,  1,  -1, 0,  0,  -1, 0,  0,  -1, -1, -1, -1, 0,  -1, 1,  -1, 1,  1,  -1, -1, 1,
      0,  -1, -1, 0,  -1, 0,  1,  0,  1,  0,  1,  -1, 0,  0,  1,  0,  1,  1,  -1, 0,  1,  -1, 0,  0,  1,  1,  1,  -1,
      0,  0,  -1, 1,  -1, 1,  0,  -1, 0,  0,  -1, 0,  0,  0,  1,  1,  1,  0,  0,  -1, 1,  -1, -1, 0,  -1, 0,  0,  0,
      1,  0,  1,  1,  0,  -1, 1,  -1, -1, 1,  -1, -1, 1,  -1, -1, 1,  0,  -1, 0,  1,  -1, -1, 0,  1,  -1, 0,  -1, 0,
      1,  0,  0,  0,  1,  1,  -1, -1, -1, -1, -1, 1,  -1, 0,  0,  0,  0,  1,  0,  -1, -1, 1,  1,  -1, 0,  0,  -1, -1,
      -1, -1, 1,  -1, -1, 1,  0,  1,  0,  1,  0,  -1, 0,  0,  0,  1,  0,  0,  0,  -1, 0,  1,  -1, 0,  -1, 1,  1,  -1,
      1,  0,  0,  1,  0,  1,  0,  -1, 0,  0,  1,  -1, 0,  1,  0,  1,  0,  1,  0,  0,  -1, 1,  0,  -1, 1,  0,  1,  -1,
      1,  1,  0,  1,  1,  -1, 0,  -1, 1,  -1, 1,  0,  -1, -1, 1,  1,  0,  -1, 1,  1,  0,  1,  1,  0,  1,  1,  0,  0,
      1,  1,  0,  0,  0,  1,  1,  1,  1,  -1, 0,  -1, -1, 1,  0,  -1, 0,  0,  -1, -1, -1, -1, 0,  0,  0,  1,  1,  -1,
      0,  0,  1,  -1, -1, 0,  0,  1,  0,  0,  1,  -1, 0,  0,  1,  1,  0,  0,  1,  0,  1,  0,  1,  1,  1,  0,  1,  1,
      -1, 0,  0,  1,  -1, -1, 0,  -1, 0,  0,  0,  -1, 0,  1,  -1, 1,  -1, 1,  1,  1,  0,  -1, -1, 0,  -1, 1,  1,  0,
      1,  1,  0,  1,  1,  1,  1,  0,  -1, 0,  -1, 0,  0,  1,  0,  1,  0,  1,  -1, -1, 1,  -1, -1, 0,  1,  -1, 1,  -1,
      -1, 0,  1,  0,  0,  0,  1,  -1, 1,  0,  1,  0,  -1, 0,  0,  0,  1,  0,  -1, -1, 0,  0,  0,  0,  -1, 1,  -1, 1,
      -1, -1, 0,  1,  0,  1,  1,  1,  -1, 0,  0,  -1, 0,  0,  0,  -1, -1, 1,  1,  -1, 0,  -1, -1, -1, 0,  1,  1,  0,
      -1, 1,  1,  -1, 0,  0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  -1, 0,  1,  0,  0,  -1, 0,  0,  1,  -1, 1,  1,  1,
      1,  0,  -1, 0,  -1, 0,  -1, 0,  1,  -1, -1, 1,  0,  1,  1,  0,  -1, -1, -1, 0,  -1, 1,  1,  -1, -1, -1, 1,  1,
      1,  0,  0,  0,  1,  0,  -1, 0,  0,  0,  -1, 1,  1,  -1, -1, 0,  0,  0,  -1, 1,  -1, 1,  -1, 1,  -1, 0,  0,  1,
      -1, -1, 1,  -1, 0,  1,  0,  -1, 1,  1,  -1, -1, 1,  1,  -1, 0,  -1, 1,  0,  -1, 1,  1,  -1, 0,  -1, 0,  0,  0,
      -1, 0,  0,  0,  -1, 1,  0,  0,  -1, -1, 0,  1,  0,  -1, -1, 1,  1,  -1, 1,  1,  0,  -1, 0,  1,  1,  0,  0,  1,
      1,  -1, 1,  0,  0,  0,  -1, -1, 1,  -1, -1, 1,  -1, 1,  -1, 0,  1,  0,  0,  0,  -1, 0,  0,  0,  -1, 0,  0,  1,
      -1, 1,  1,  -1, 0,  1,  -1, -1, 1,  1,  0,  -1, -1, -1, 1,  0,  -1, -1, 0,  -1, 0,  0,  1,  0,  0,  1,  -1, 0,
      0,  -1, 0,  1,  -1, 1,  -1, -1, 1,  0,  1,  0,  1,  1,  0,  -1, 0,  -1, -1, 0,  -1, -1, 0,  0,  0,  1,  0,  0,
      1,  1,  -1, 1,  1,  1,  0,  1,  1,  1,  -1, 1,  0,  0,  1,  -1, 0,  0,  1,  -1, 1,  0,  0,  0,  -1, 0,  -1, 1,
      0,  1,  0,  0,  1,  1,  0,  1,  1,  0,  0,  1,  0,  1,  0,  1,  1,  0,  -1, 0,  0,  0,  -1, 0,  1,  1,  0,  1,
      1,  0,  1,  -1, -1, 1,  0,  -1, 1,  1,  0,  1,  -1, -1, 0,  0,  0,  -1, -1, -1, 1,  0,  -1, -1, 0,  0,  1,  -1,
      0,  -1, 1,  0,  0,  0,  1,  1,  -1, 0,  -1, -1, 1,  -1, 0,  0,  1,  0,  -1, 1,  1,  -1, 0,  0,  1,  -1, 0,  -1,
      0,  1,  1,  -1, 0,  -1, 0,  1,  0,  0,  -1, 0,  -1, 0,  0,  1,  0,  1,  0,  1,  1,  -1, 0,  1,  0,  -1, 0,  0,
      1,  -1, 1,  0,  1,  1,  0,  1,  1,  -1, 1,  1,  -1, -1, -1, 0,  1,  0,  0,  -1, 1,  1,  0,  0,  0,  1,  0,  1,
      1,  1,  1,  0,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  0,  -1, 1,  1,  -1, -1, 1,  1,  0,  -1, 0,  0,  0,  1,
      0,  0,  0,  0,  1,  1,  -1, 0,  0,  -1, -1, 0,  -1, 0,  0,  1,  1,  0,  1,  -1, -1, 0,  0,  1,  1,  1,  -1, 0,
      -1, 1,  1,  0,  0,  -1, 1,  0,  -1, 0,  0,  -1, 1,  -1, 1,  1,  -1, 0,  -1, 1,  1,  0,  -1, -1, -1, -1, 0,  -1,
      1,  0,  1,  1,  0,  1,  -1, -1, 0,  1,  1,  1,  0,  -1, 1,  0,  1,  -1, -1, 0,  -1, 1,  1,  1,  1,  0,  1,  0,
      -1, 1,  1,  -1, -1, -1, 0,  -1, 1,  1,  0,  -1, -1, 1,  -1, 0,  -1, 0,  1,  1,  1,  -1, 1,  -1, -1, 0,  -1, -1,
      0,  1,  1,  -1, 1,  1,  0,  -1, 1,  -1, 1,  0,  -1, 0,  0,  -1, 0,  1,  0,  -1, 0,  0,  -1, -1, -1, 0,  0,  1,
      0,  0,  0,  -1, 1,  1,  0,  -1, 1,  1,  -1, 1,  0,  -1, 0,  1,  -1, 0,  0,  1,  -1, 1,  -1, 0,  -1, 1,  1,  -1,
      -1, -1, 1,  1,  -1, -1, 1,  -1, -1, 0,  0,  -1, 1,  0,  -1, 0,  0,  1,  -1, 0,  1,  -1, 1,  1,  -1, 0,  0,  1,
      0,  -1, 1,  -1, 1,  0,  1,  0,  -1, 0,  0,  0,  -1, -1, -1, 1,  1,  1,  0,  1,  -1, 1,  -1, 0,  1,  -1, -1, -1,
      -1, -1, 0,  1,  0,  0,  -1, 1,  1,  0,  0,  -1, -1, 0,  1,  1,  -1, -1, -1, -1, 0,  0,  1,  1,  -1, 0,  -1, 0,
      1,  0,  0,  0,  0,  -1, -1, 0,  -1, 0,  -1, 0,  1,  1,  0,  0,  1,  -1, -1, 0,  0,  1,  1,  1,  -1, 0,  0,  -1,
      0,  0,  0,  0,  0,  1,  0,  0,  1,  -1, 1,  0,  1,  1,  0,  -1, -1, -1, 1,  1,  1,  -1, 0,  -1, 1,  0,  -1, 1,
      1,  1,  -1, 0,  0,  0,  -1, -1, 0,  -1, 1,  1,  1,  1,  1,  0,  1,  0,  1,  -1, 1,  1,  -1, 0,  -1, 1,  0,  1,
      0,  -1, -1, 0,  0,  1,  1,  0,  0,  1,  0,  1,  0,  -1, 0,  0,  -1, 0,  -1, 0,  1,  1,  -1, 0,  1,  0,  -1, 1,
      -1, -1, 0,  1,  -1, 1,  0,  1,  -1, -1, 1,  0,  1,  1,  0,  0,  0,  1,  -1, -1, 1,  0,  -1, 0,  1,  1,  0,  0,
      -1, 1,  -1, 1,  0,  1,  -1, 1,  1,  1,  -1, -1, -1, 0,  1,  0,  0,  1,  -1, -1, 0,  0,  0,  0,  -1, -1, -1, -1,
      1,  1,  0,  0,  1,  1,  0,  0,  1,  0,  1,  -1, 0,  -1, 0,  1,  -1, 0,  1,  1,  -1, 1,  0,  1,  -1, -1, 0,  1,
      -1, 1,  0,  1,  -1, 0,  0,  1,  0,  -1, 1,  0,  -1, -1, -1, -1, 0,  1,  1,  -1, -1, -1, 0,  1,  -1, 1,  0,  -1,
      1,  -1, -1, -1, 1,  1,  -1, 1,  1,  -1, 0,  0,  -1, 1,  -1, -1, -1, -1, 0,  0,  0,  1,  1,  -1, 1,  1,  0,  -1,
      0,  0,  0,  1,  -1, -1, 0,  -1, -1, 0,  1,  -1, 0,  1,  -1, 0,  -1, 1,  -1, 1,  0,  0,  1,  1,  0,  -1, 1,  -1,
      0,  1,  0,  0,  0,  1,  1,  -1, 1,  -1, 0,  0,  0,  -1, -1, 1,  -1, 0,  -1, -1, 1,  0,  -1, 1,  1,  -1, 0,  1,
      1,  0,  0,  1,  0,  -1, 0,  1,  0,  1,  1,  0,  -1, 1,  -1, 0,  0,  -1, -1, 0,  1,  0,  -1, -1, 1,  0,  -1, 0,
      1,  0,  -1, -1, -1, -1, 0,  0,  -1, 1,  0,  0,  1,  -1, 0,  -1, -1, 0,  -1, 1,  0,  -1, -1, 0,  1,  -1, 0,  1,
      -1, 1,  1,  0,  1,  0,  0,  -1, 1,  -1, 0,  1,  0,  1,  1,  -1, 1,  -1, 0,  0,  0,  0,  -1, -1, 0,  0,  1,  -1,
      1,  -1, 1,  1,  0,  0,  0,  1,  1,  0,  0,  1,  0,  1,  0,  -1, 1,  0,  1,  0,  0,  0,  0,  1,  1,  0,  -1, 1,
      -1, 0,  0,  -1, 0,  0,  1,  1,  1,  -1, -1, -1, 0,  1,  0,  0,  1,  1,  -1, 0,  -1, -1, 1,  1,  -1, 1,  0,  1,
      1,  1,  1,  -1, 1,  1,  -1, 0,  1,  0,  1,  0,  -1, -1, 0,  1,  1,  0,  0,  0,  -1, -1, -1, -1, -1, 0,  -1, -1,
      1,  -1, 0,  0,  0,  1,  -1, 0,  0,  -1, 1,  -1, 0,  0,  -1, 0,  -1, 0,  1,  -1, -1, 1,  1,  1,  1,  1,  1,  1,
      -1, -1, 1,  -1, -1, 0,  -1, 0,  0,  1,  -1, -1, -1, -1, -1, 0,  0,  0,  1,  0,  -1, 1,  1,  -1, -1, 1,  1,  0,
      0,  -1, -1, 1,  1,  -1, 0,  -1, 1,  1,  -1, 0,  1,  -1, 0,  -1, 1,  1,  -1, 1,  -1, -1, 0,  -1, -1, 0,  0,  0,
      -1, 0,  0,  -1, 0,  1,  0,  0,  0,  0,  1,  1,  -1, 1,  -1, 1,  1,  0,  0,  0,  0,  0,  1,  0,  1,  1,  1,  -1,
      0,  -1, 0,  1,  0,  0,  0,  1,  1,  1,  0,  -1, -1, -1, 0,  1,  -1, 0,  1,  1,  0,  0,  -1, 1,  -1, 1,  1,  1,
      -1, 0,  0,  1,  0,  1,  0,  1,  -1, 0,  -1, -1, 1,  -1, 1,  0,  1,  1,  0,  0,  1,  -1, -1, 0,  0,  -1, 1,  0,
      0,  0,  1,  0,  0,  1,  1,  -1, -1, 1,  0,  1,  -1, 1,  -1, 0,  -1, 0,  -1, 1,  0,  -1, 0,  1,  0,  0,  -1, 1,
      -1, 0,  1,  1,  -1, 0,  0,  -1, -1, 0,  1,  -1, 0,  1,  -1, 1,  -1, 1,  1,  1,  1,  -1, -1, 0,  0,  -1, 0,  -1,
      0,  0,  0,  -1, -1, 0,  1,  1,  0,  -1, -1, 1,  -1, -1, -1, 1,  0,  1,  0,  0,  0,  0,  0,  0,  1,  -1, 1,  -1,
      1,  -1, 0,  0,  1,  -1, 1,  1,  1,  0,  0,  1,  1,  -1, 1,  0,  0,  0,  0,  -1, 0,  0,  -1, 1,  1,  -1, 0,  1,
      1,  0,  -1, 1,  -1, 0,  1,  -1, -1, 0,  -1, 0,  0,  1,  1,  -1, 1,  0,  0,  0,  -1, 1,  1,  -1, 0,  -1, -1, -1,
      -1, -1, 1,  1,  1,  -1, 0,  0,  -1, -1, 0,  -1, 0,  0,  -1, 0,  0,  0,  1,  1,  -1, 0,  1,  -1, 0,  -1, 1,  -1,
      0,  1,  0,  -1, -1, -1, -1, 0,  1,  0,  1,  1,  -1, 1,  1,  0,  0,  1,  0,  1,  0,  1,  0,  -1, 0,  0,  1,  -1,
      -1, 1,  -1, 1,  1,  -1, 0,  1,  -1, -1, 1,  1,  1,  0,  0,  1,  -1, 0,  1,  1,  0,  1,  0,  0,  -1, 0,  -1, 1,
      -1, 0,  1,  -1, 0,  -1, 0,  1,  1,  1,  0,  1,  1,  1,  -1, -1, 1,  -1, 0,  0,  1,  1,  -1, 0,  1,  0,  0,  -1,
      1,  1,  0,  0,  1,  0,  -1, 1,  -1, -1, -1, 1,  -1, 1,  -1, 1,  1,  0,  1,  1,  -1, -1, 1,  1,  -1, -1, 0,  0,
      0,  1,  0,  -1, 0,  0,  0,  1,  0,  0,  1,  -1, -1, 1,  1,  1,  0,  0,  0,  -1, -1, 1,  1,  -1, -1, 1,  -1, 1,
      0,  1,  0,  1,  0,  0,  -1, -1, 1,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  1,  1,  0,  -1, 1,  -1, 0,  0,  1,
      -1, 0,  0,  -1, 0,  -1, 1,  1,  1,  -1, 0,  -1, 0,  -1, -1, 0,  -1, -1, -1, 0,  1,  0,  -1, 1,  1,  1,  0,  -1,
      -1, -1, 0,  -1, -1, -1, -1, 0,  1,  -1, -1, -1, -1, 0,  0,  -1, -1, 0,  0,  -1, -1, 1,  -1, -1, 0,  1,  -1, -1,
      0,  -1, 0,  -1, 1,  -1, 1,  -1, 1,  0,  1,  1,  0,  0,  0,  -1, 1,  0,  0,  -1, 0,  0,  -1, 0,  -1, 1,  -1, -1,
      0,  1,  1,  0,  -1, 0,  1,  -1, 0,  -1, -1, -1, 1,  0,  1,  0,  0,  -1, 1,  1,  0,  -1, 1,  0,  -1, 0,  -1, -1,
      0,  0,  1,  0,  -1, 1,  0,  0,  1,  0,  1,  0,  1,  1,  -1, 0,  0,  0,  1,  -1, 1,  1,  -1, 0,  1,  1,  1,  0,
      1,  0,  -1, 0,  1,  0,  -1, -1, -1, 1,  0,  1,  0,  -1, 0,  -1, 0,  0,  -1, 1,  -1, 0,  0,  1,  0,  -1, 0,  1,
      0,  0,  1,  1,  -1, 0,  -1, 1,  1,  1,  1,  0,  1,  -1, 0,  0,  1,  0,  1,  1,  0,  1,  -1, 0,  -1, 1,  -1, 0,
      0,  1,  1,  1,  1,  0,  1,  -1, 0,  -1, 0,  0,  -1, -1, 0,  0,  0,  1,  1,  0,  -1, -1, 0,  1,  0,  1,  1,  0,
      0,  1,  -1, -1, 0,  -1, 0,  1,  0,  0,  1,  1,  1,  1,  1,  -1, 1,  1,  0,  -1, 1,  -1, -1, -1, 1,  0,  0,  0,
      0,  -1, 1,  0,  1,  1,  0,  -1, 0,  0,  1,  -1, 1,  1,  1,  0,  -1, 0,  0,  -1, -1, -1, -1, 0,  -1, 0,  -1, 0,
      1,  1,  0,  1,  1,  -1, -1, 1,  -1, -1, 0,  1,  -1, 0,  1,  0,  -1, 1,  0,  0,  -1, 0,  0,  1,  0,  0,  1,  1,
      -1, 0,  0,  -1, 1,  -1, 0,  -1, -1, 0,  1,  -1, -1, 0,  0,  -1, 1,  0,  1,  0,  1,  1,  0,  0,  0,  0,  0,  1,
      1,  0,  0,  -1, 1,  1,  0,  -1, -1, 0,  -1, 0,  0,  -1, 1,  0,  1,  0,  0,  1,  1,  1,  -1, 0,  1,  1,  0,  0,
      -1, 1,  0,  0,  1,  1,  -1, 1,  1,  0,  -1, -1, 1,  -1, 0,  1,  -1, 1,  -1, 1,  1,  0,  0,  1,  0,  1,  1,  1,
      -1, 1,  1,  1,  -1, 0,  0,  0,  1,  1,  0,  -1, 1,  0,  -1, 1,  1,  1,  0,  1,  -1, 0,  0,  -1, 1,  0,  0,  -1,
      -1, 0,  -1, -1, 1,  0,  -1, -1, 0,  1,  0,  1,  1,  -1, -1, 1,  0,  0,  1,  1,  -1, 1,  0,  0,  0,  -1, -1, -1,
      1,  0,  1,  -1, 0,  1,  0,  0,  -1, -1, 0,  0,  0,  1,  0,  -1, -1, -1, -1, -1, -1, -1, 0,  0,  1,  0,  0,  0,
      0,  1,  1,  -1, 0,  -1, 1,  -1, -1, 0,  0,  -1, 1,  -1, 1,  -1, -1, 0,  0,  1,  1,  1,  0,  1,  0,  1,  -1, -1,
      -1, -1, -1, 0,  0,  -1, 1,  1,  0,  -1, -1, -1, -1, 1,  0,  0,  1,  1,  1,  0,  1,  -1, -1, -1, -1, -1, 1,  0,
      -1, 1,  0,  1,  -1, 0,  0,  0,  0,  1,  1,  0,  1,  1,  1,  0,  -1, -1, 0,  0,  1,  0,  0,  0,  -1, -1, 1,  0,
      1,  0,  1,  1,  0,  1,  0,  -1, -1, -1, 0,  0,  -1, -1, -1, 0,  1,  1,  0,  0,  0,  1,  0,  -1, 1,  1,  1,  0,
      0,  -1, 0,  0,  0,  -1, -1, 1,  -1, 0,  -1, 0,  -1, 1,  0,  0,  1,  1,  -1, 1,  -1, 0,  1,  0,  1,  1,  -1, -1,
      -1, -1, 0,  1,  1,  1,  1,  1,  0,  1,  -1, 0,  0,  0,  1,  -1, 0,  -1, 1,  1,  1,  0,  1,  1,  -1, -1, 1,  0,
      1,  -1, 0,  0,  0,  -1, -1, 0,  1,  -1, 0,  0,  1,  0,  0,  1,  0,  1,  -1, -1, 1,  -1, 1,  0,  1,  0,  -1, -1,
      0,  0,  1,  -1, -1, 1,  0,  0,  -1, -1, -1, 1,  0,  0,  -1, -1, 0,  0,  -1, 1,  0,  0,  0,  1,  0,  0,  0,  -1,
      0,  1,  1,  -1, -1, 1,  1,  0,  0,  0,  0,  1,  0,  0,  -1, -1, 0,  0,  1,  1,  -1, -1, -1, 1,  1,  0,  0,  0,
      1,  1,  1,  0,  1,  -1, 1,  1,  1,  -1, -1, 0,  1,  1,  1,  -1, -1, 1,  0,  1,  0,  -1, 1,  -1, 1,  -1, 1,  -1,
      -1, 0,  0,  -1, -1, -1, 0,  1,  -1, 1,  1,  -1, -1, 0,  -1, 0,  0,  1,  0,  1,  0,  0,  1,  0,  1,  -1, 0,  1,
      1,  1,  -1, 1,  0,  1,  0,  0,  0,  0,  1,  0,  -1, 1,  -1, -1, 0,  1,  1,  -1, 1,  1,  -1, 0,  -1, -1, 1,  1,
      1,  0,  1,  -1, 1,  1,  1,  0,  -1, -1, 1,  0,  0,  0,  -1, 1,  1,  0,  -1, 0,  0,  1,  1,  0,  1,  -1, 0,  1,
      -1, -1, 1,  0,  -1, 0,  0,  1,  1,  0,  1,  1,  0,  -1, 1,  -1, 0,  0,  0,  0,  0,  -1, 0,  -1, 1,  1,  0,  1,
      1,  0,  0,  1,  1,  1,  -1, 0,  0,  1,  -1, 1,  -1, 0,  1,  -1, -1, -1, 1,  -1, 1,  -1, 0,  1,  1,  -1, -1, 0,
      0,  1,  0,  0,  -1, 1,  -1, 1,  1,  -1, -1, -1, -1, 1,  -1, 0,  1,  -1, 0,  1,  -1, 1,  1,  0,  -1, -1, 1,  1,
      1,  1,  0,  1,  0,  -1, 0,  0,  -1, 0,  -1, 1,  -1, -1, 0,  -1, -1, 0,  -1, -1, -1, -1, 0,  0,  -1, -1, 1,  1,
      1,  -1, 1,  0,  -1, -1, 0,  0,  -1, 0,  1,  -1, 0,  1,  0,  1,  -1, 1,  -1, 0,  0,  1,  -1, -1, 0,  1,  1,  -1,
      1,  1,  1,  -1, -1, 0,  -1, 1,  0,  0,  0,  0,  0,  1,  0,  -1, 0,  -1, -1, 1,  -1, 1,  0,  0,  0,  -1, 0,  0,
      -1, 0,  0,  1,  1,  1,  0,  1,  -1, 1,  -1, -1, 0,  1,  -1, 0,  1,  -1, 1,  0,  -1, -1, -1, 0,  1,  1,  0,  -1,
      -1, 1,  -1, 0,  1,  0,  -1, 1,  -1, -1, 0,  -1, -1, -1, 0,  1,  -1, 1,  1,  -1, 0,  1,  1,  0,  1,  1,  0,  1,
      -1, 0,  -1, 1,  -1, 0,  0,  -1, 1,  0,  0,  0,  1,  -1, -1, 0,  -1, 1,  1,  1,  1,  -1, -1, 1,  -1, 0,  1,  1,
      0,  1,  0,  -1, -1, 0,  1,  0,  0,  1,  0,  1,  0,  -1, -1, 0,  0,  0,  -1, 0,  1,  1,  0,  1,  -1, -1, 1,  0,
      1,  1,  1,  -1, 0,  1,  -1, 1,  -1, -1, -1, 1,  0,  -1, 0,  0,  0,  -1, 1,  0,  -1, 1,  0,  0,  -1, 0,  1,  0,
      -1, 0,  1,  0,  0,  -1, 1,  1,  1,  0,  1,  1,  0,  -1, 1,  -1, 1,  -1, 0,  -1, 1,  1,  0,  -1, -1, 1,  1,  0,
      0,  1,  0,  0,  -1, 1,  -1, 1,  0,  0,  0,  0,  1,  1,  -1, 1,  -1, -1, 0,  0,  -1, 1,  1,  -1, 1,  1,  0,  1,
      1,  1,  1,  0,  1,  -1, -1, 1,  1,  1,  -1, 1,  1,  -1, -1, 0,  1,  1,  1,  -1, 0,  0,  -1, 0,  0,  -1, 1,  -1,
      1,  1,  0,  1,  0,  -1, -1, 0,  0,  0,  -1, 1,  0,  0,  0,  0,  0,  1,  1,  1,  -1, 0,  1,  0,  1,  -1, 1,  0,
      -1, -1, 0,  0,  -1, 1,  0,  1,  0,  0,  0,  1,  -1, -1, -1, 1,  0,  1,  -1, -1, -1, 1,  -1, 1,  0,  1,  0,  0,
      1,  -1, 1,  -1, -1, 1,  1,  1,  0,  0,  1,  0,  0,  1,  -1, -1, 0,  0,  0,  -1, 0,  1,  0,  -1, 0,  0,  0,  0,
      -1, 1,  0,  1,  0,  1,  1,  0,  -1, 0,  -1, 0,  0,  1,  1,  0,  1,  -1, 0,  0,  -1, -1, -1, 1,  -1, 1,  0,  1,
      0,  -1, 1,  1,  -1, 0,  0,  0,  0,  0,  -1, 1,  0,  -1, 0,  0,  1,  1,  0,  -1, 1,  -1, -1, 0,  0,  0,  1,  -1,
      0,  0,  -1, -1, -1, 1,  -1, 0,  0,  -1, -1, -1, 1,  -1, 0,  1,  0,  0,  -1, 1,  0,  0,  -1, -1, -1, 0,  0,  0,
      -1, -1, -1, 1,  1,  1,  0,  -1, 0,  1,  1,  1,  -1, 0,  0,  0,  -1, 0,  1,  1,  -1, 0,  0,  0,  0,  0,  1,  1,
      0,  1,  -1, 0,  0,  -1, 1,  0,  0,  1,  0,  -1, -1, 1,  0,  0,  1,  1,  -1, 0,  1,  -1, -1, -1, -1, -1, -1, 1,
      1,  1,  -1, 0,  -1, 0,  1,  0,  -1, 0,  -1, 0,  1,  -1, 0,  1,  0,  1,  0,  -1, 1,  0,  1,  -1, 1,  -1, 0,  1,
      0,  -1, 1,  0,  -1, 1,  -1, -1, 0,  0,  1,  1,  0,  -1, -1, 1,  -1, 1,  -1, -1, -1, 1,  0,  1,  1,  1,  -1, -1,
      -1, 1,  1,  1,  -1, 0,  1,  0,  0,  0,  1,  0,  -1, -1, -1, 0,  0,  -1, 1,  -1, 0,  -1, 0,  0,  0,  0,  -1, 1,
      0,  1,  0,  0,  -1, -1, 0,  -1, -1, -1, 0,  1,  1,  0,  -1, 0,  0,  -1, -1, -1, 0,  1,  -1, 1,  -1, -1, -1, -1,
      1,  0,  -1, -1, 1,  -1, 0,  1,  -1, 0,  1,  1,  1,  -1, 0,  -1, 1,  0,  1,  -1, 1,  -1, 0,  0,  -1, 0,  -1, 1,
      1,  -1, 0,  0,  -1, 1,  0,  0,  1,  -1, -1, -1, 0,  -1, -1, 0,  0,  -1, 0,  -1, 0,  1,  0,  -1, 1,  1,  1,  1,
      1,  -1, 0,  -1, 1,  0,  1,  1,  0,  0,  0,  1,  0,  1,  0,  -1, 1,  -1, 0,  -1, 0,  -1, 0,  0,  -1, -1, -1, 0,
      0,  1,  1,  -1, 0,  -1, 0,  -1, 0,  0,  0,  1,  -1, 0,  1,  -1, 1,  0,  -1, 1,  1,  -1, 1,  0,  1,  -1, 0,  0,
      0,  -1, 1,  -1, 0,  -1, 0,  -1, 0,  1,  0,  -1, -1, 1,  -1, 1,  0,  -1, 1,  0,  0,  1,  -1, -1, -1, 1,  -1, 1,
      0,  1,  -1, 1,  0,  0,  -1, 1,  -1, 1,  0,  1,  0,  -1, 1,  0,  1,  -1, 0,  1,  -1, 0,  1,  0,  1,  1,  -1, -1,
      0,  0,  -1, 0,  0,  0,  -1, 1,  1,  1,  1,  0,  0,  0,  1,  0,  -1, 1,  0,  0,  1,  -1, 1,  1,  0,  1,  -1, 0,
      -1, 0,  -1, -1, 1,  0,  0,  0,  -1, -1, -1, 0,  -1, -1, 1,  -1, 0,  1,  -1, -1, -1, 0,  0,  0,  -1, -1, -1, 1,
      1,  0,  1,  0,  -1, 1,  -1, -1, 0,  0,  -1, -1, -1, -1, 1,  -1, 0,  -1, 0,  -1, 1,  0,  1,  0,  -1, -1, -1, 0,
      -1, 0,  1,  -1, -1, 1,  0,  0,  -1, 1,  1,  1,  1,  -1, 0,  0,  -1, 1,  1,  -1, -1, 1,  1,  -1, -1, -1, 0,  0,
      1,  0,  1,  1,  -1, -1, 0,  0,  0,  -1, 1,  -1, 1,  0,  0,  1,  1,  0,  -1, 0,  -1, -1, 1,  -1, 0,  0,  0,  0,
      -1, -1, 0,  -1, 0,  0,  -1, 0,  1,  -1, 1,  -1, 0,  1,  -1, 0,  0,  0,  -1, -1, 0,  -1, 1,  -1, 0,  1,  -1, 0,
      0,  -1, -1, -1, 1,  1,  1,  -1, -1, 0,  1,  1,  0,  -1, -1, 0,  -1, -1, 1,  1,  -1, 1,  -1, 0,  -1, -1, -1, -1,
      -1, 1,  1,  0,  1,  -1, 0,  0,  0,  0,  -1, -1, -1, 1,  1,  0,  0,  1,  0,  -1, -1, -1, -1, 0,  1,  1,  1,  0,
      0,  0,  -1, -1, -1, -1, -1, 0,  1,  0,  -1, -1, 1,  0,  0,  0,  0,  1,  -1, 1,  1,  0,  1,  0,  0,  -1, 1,  1,
      0,  -1, 1,  -1, 1,  -1, -1, 0,  0,  0,  0,  -1, -1, 0,  0,  -1, -1, -1, 1,  -1, 0,  -1, -1, 1,  -1, -1, 1,  1,
      -1, 0,  1,  1,  -1, -1, -1, 1,  1,  0,  -1, -1, 0,  1,  0,  0,  0,  1,  -1, -1, 1,  -1, -1, -1, -1, 1,  1,  -1,
      1,  1,  1,  1,  0,  0,  0,  1,  1,  0,  1,  0,  0,  1,  1,  0,  0,  -1, 1,  1,  0,  1,  1,  -1, -1, -1, 0,  1,
      -1, 0,  0,  -1, 1,  -1, -1, 0,  1,  0,  -1, 1,  1,  0,  0,  1,  0,  1,  -1, -1, -1, 0,  -1, -1, -1, 0,  -1, 0,
      1,  1,  -1, -1, -1, -1, 0,  1,  1,  1,  -1, 0,  -1, 1,  -1, -1, 0,  0,  0,  -1, -1, 0,  1,  -1, 0,  0,  0,  0,
      1,  -1, -1, 0,  1,  -1, 1,  1,  -1, 0,  0,  1,  -1, 1,  1,  0,  -1, -1, 0,  0,  1,  1,  -1, -1, 0,  -1, 1,  -1,
      0,  1,  -1, -1, -1, 0,  -1, -1, 1,  -1, -1, -1, -1, -1, 1,  0,  -1, 0,  0,  0,  0,  -1, -1, 1,  0,  -1, -1, 0,
      0,  -1, 1,  -1, -1, 0,  1,  0,  1,  -1, 1,  0,  1,  0,  -1, 0,  0,  -1, -1, 1,  0,  0,  -1, 1,  0,  0,  1,  1,
      1,  0,  1,  0,  0,  -1, 1,  1,  1,  1,  -1, 1,  0,  -1, 1,  -1, -1, 1,  1,  -1, -1, -1, 0,  0,  0,  1,  -1, -1,
      -1, -1, -1, 0,  0,  1,  1,  1,  1,  1,  0,  -1, 0,  0,  1,  0,  -1, 0,  -1, 0,  1,  -1, 0,  -1, -1, -1, 1,  -1,
      1,  0,  0,  0,  0,  -1, -1, 1,  1,  1,  0,  0,  -1, 1,  0,  1,  0,  -1, 0,  1,  0,  1,  0,  1,  -1, 1,  1,  -1,
      0,  -1, -1, 1,  1,  1,  -1, -1, 1,  -1, -1, 1,  0,  1,  1,  0,  1,  1,  1,  -1, 1,  -1, 1,  -1, 0,  1,  1,  1,
      -1, 1,  1,  0,  0,  -1, 1,  -1, -1, 0,  -1, 0,  1,  0,  1,  1,  0,  1,  1,  -1, -1, 1,  1,  1,  -1, -1, 0,  -1,
      1,  1,  -1, 0,  0,  1,  0,  -1, 0,  -1, 0,  -1, 1,  1,  1,  0,  1,  -1, 0,  -1, 0,  1,  -1, -1, 1,  -1, 1,  1,
      -1, 1,  1,  -1, 1,  1,  0,  0,  1,  0,  -1, -1, 1,  1,  0,  0,  -1, -1, 1,  0,  -1, 0,  1,  0,  -1, -1, -1, 1,
      0,  -1, 0,  0,  -1, 1,  0,  0,  0,  1,  0,  1,  -1, -1, 1,  1,  -1, 1,  0,  1,  -1, -1, 0,  1,  -1, 1,  1,  -1,
      -1, 0,  1,  1,  1,  -1, 0,  1,  0,  0,  -1, 1,  0,  0,  -1, 1,  0,  0,  1,  0,  -1, 1,  -1, 1,  1,  0,  -1, 0,
      -1, 0,  1,  1,  0,  0,  -1, 1,  0,  1,  0,  -1, 0,  0,  1,  1,  0,  0,  -1, 1,  0,  1,  1,  1,  1,  1,  0,  1,
      0,  1,  1,  0,  1,  0,  0,  1,  1,  -1, 0,  -1, 1,  0,  1,  -1, -1, 0,  0,  1,  -1, -1, 0,  -1, 0,  -1, -1, -1,
      1,  1,  1,  0,  0,  1,  1,  1,  -1, -1, 0,  1,  1,  0,  1,  -1, 0,  0,  0,  -1, -1, 1,  1,  -1, 0,  0,  1,  0,
      1,  -1, -1, -1, 1,  0,  1,  1,  -1, 0,  1,  -1, 1,  1,  -1, -1, 1,  1,  -1, 0,  0,  1,  0,  -1, 1,  1,  -1, 1,
      -1, 1,  -1, 0,  -1, -1, 0,  -1, -1, 0,  -1, 0,  0,  1,  1,  0,  1,  1,  0,  1,  -1, -1, 0,  -1, 1,  -1, 0,  0,
      -1, 1,  0,  1,  1,  1,  -1, 1,  1,  -1, 1,  0,  1,  1,  0,  0,  0,  0,  -1, -1, 1,  0,  1,  0,  0,  0,  1,  0,
      -1, 1,  -1, -1, -1, -1, 1,  1,  1,  -1, 0,  1,  -1, 0,  -1, -1, 1,  0,  -1, 0,  -1, -1, -1, -1, 0,  0,  -1, 0,
      -1, -1, 0,  -1, 1,  0,  -1, -1, 1,  -1, -1, 0,  1,  1,  1,  0,  0,  -1, -1, 0,  0,  0,  1,  -1, 1,  -1, -1, 1,
      -1, 1,  1,  -1, -1, -1, 0,  1,  -1, 0,  1,  1,  -1, 1,  1,  1,  -1, -1, 1,  1,  -1, -1, 1,  -1, 0,  -1, 0,  -1,
      1,  0,  0,  1,  -1, -1, -1, 1,  -1, 1,  -1, -1, 1,  0,  -1, -1, 0,  -1, -1, 1,  0,  0,  1,  1,  1,  0,  0,  0,
      1,  0,  -1, 0,  -1, 1,  -1, 0,  -1, 1,  -1, 1,  -1, 0,  -1, 0,  0,  0,  -1, -1, -1, -1, 0,  0,  -1, 0,  1,  -1,
      1,  1,  0,  -1, 1,  1,  1,  -1, 0,  1,  -1, -1, 0,  0,  0,  1,  0,  0,  0,  0,  -1, 0,  1,  1,  -1, 0,  0,  0,
      0,  -1, 0,  1,  0,  -1, 0,  1,  -1, 0,  -1, 0,  1,  0,  1,  -1, 1,  0,  0,  -1, 1,  1,  1,  -1, 0,  0,  0,  1,
      -1, 1,  -1, 0,  0,  -1, -1, -1, 0,  0,  -1, -1, 0,  -1, 1,  1,  -1, 0,  1,  -1, 1,  0,  1,  0,  0,  0,  0,  -1,
      -1, 0,  -1, -1, -1, 1,  -1, -1, 0,  -1, 1,  0,  0,  -1, 1,  -1, -1, 0,  1,  -1, -1, 1,  1,  0,  1,  -1, -1, 0,
      1,  -1, -1, 1,  0,  1,  1,  0,  -1, -1, -1, 0,  1,  -1, -1, -1, -1, 1,  -1, -1, 1,  1,  -1, 0,  -1, 0,  0,  1,
      -1, 1,  -1, 0,  -1, 0,  1,  0,  1,  0,  1,  1,  -1, 0,  -1, -1, -1, 1,  1,  0,  -1, 1,  0,  0,  1,  1,  0,  0,
      0,  0,  -1, 1,  0,  1,  -1, 0,  -1, 0,  0,  0,  1,  0,  1,  1,  -1, -1, 0,  1,  -1, 1,  0,  0,  -1, 1,  1,  -1,
      1,  0,  0,  -1, 1,  -1, 1,  -1, -1, 0,  -1, 1,  1,  -1, 0,  1,  1,  -1, 0,  1,  -1, -1, -1, 0,  1,  -1, 1,  1,
      -1, -1, 1,  1,  0,  0,  -1, 1,  1,  0,  -1, -1, 0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  -1, 1,  0,  1,  1,
      1,  0,  0,  1,  0,  1,  0,  -1, -1, 1,  1,  0,  -1, 0,  -1, 1,  0,  1,  0,  0,  1,  1,  1,  -1, 0,  1,  0,  0,
      0,  -1, 1,  -1, 0,  1,  0,  -1, -1, 1,  -1, 0,  1,  0,  0,  -1, -1, 1,  1,  1,  0,  1,  1,  0,  0,  -1, 0,  0,
      1,  -1, 0,  1,  -1, 1,  0,  -1, 0,  -1, 0,  0,  0,  -1, 0,  -1, -1, 0,  -1, -1, 0,  1,  -1, 0,  -1, 0,  0,  -1,
      -1, 0,  1,  1,  1,  1,  -1, 0,  1,  1,  0,  -1, -1, 0,  0,  -1, 0,  -1, 0,  -1, -1, 1,  -1, 0,  1,  1,  0,  0,
      1,  1,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  -1, 0,  -1, 0,  -1, -1, -1, 0,  -1, -1, 0,  1,  -1, 0,  -1,
      -1, 0,  0,  -1, 0,  -1, 0,  0,  0,  1,  -1, 1,  1,  1,  1,  0,  1,  -1, 0,  -1, 1,  -1, 1,  1,  0,  -1, 1,  0,
      1,  1,  1,  -1, -1, 0,  -1, 1,  -1, 1,  -1, 0,  -1, 1,  -1, -1, 1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,
      -1, 0,  -1, 0,  -1, -1, 0,  1,  1,  1,  1,  1,  1,  -1, 1,  -1, -1, 1,  0,  0,  0,  -1, 0,  0,  1,  -1, 0,  1,
      0,  0,  -1, 0,  -1, 0,  1,  0,  -1, 0,  -1, 0,  1,  1,  0,  1,  -1, 1,  0,  -1, 0,  -1, -1, 1,  0,  -1, -1, 1,
      0,  0,  -1, 0,  -1, 0,  0,  -1, 1,  -1, 0,  -1, 0,  1,  1,  -1, 1,  1,  1,  0,  1,  0,  1,  -1, -1, 0,  1,  0,
      0,  1,  1,  0,  0,  0,  -1, 1,  0,  0,  0,  -1, -1, 1,  -1, 1,  1,  -1, 1,  -1, 1,  -1, 0,  0,  0,  0,  0,  -1,
      -1, 0,  -1, -1, 1,  0,  1,  -1, 1,  0,  1,  1,  -1, 0,  1,  -1, 0,  -1, 1,  -1, 0,  -1, 1,  1,  -1, -1, 0,  -1,
      1,  1,  -1, 1,  1,  -1, -1, -1, -1, 0,  1,  -1, -1, 0,  -1, -1, 1,  1,  1,  1,  -1, 1,  -1, 1,  1,  -1, 0,  1,
      1,  1,  1,  1,  1,  1,  -1, 0,  1,  1,  0,  1,  1,  1,  -1, -1, -1, 1,  -1, 0,  1,  -1, 1,  -1, -1, -1, 0,  0,
      1,  -1, 0,  -1, -1, 1,  1,  -1, 1,  -1, 0,  0,  0,  0,  0,  0,  0,  0,  -1, 1,  -1, -1, -1, -1, 1,  0,  -1, 1,
      1,  1,  0,  0,  -1, 0,  -1, 1,  1,  1,  -1, 1,  -1, 0,  1,  0,  1,  0,  0,  1,  0,  1,  0,  -1, 1,  -1, 0,  -1,
      -1, -1, 0,  -1, 0,  -1, -1, -1, 0,  1,  -1, -1, 0,  -1, 0,  -1, 0,  0,  -1, 1,  -1, -1, 0,  1,  0,  -1, 1,  1,
      -1, 0,  -1, -1, 0,  1,  0,  1,  1,  0,  -1, 1,  0,  1,  0,  -1, 0,  1,  1,  0,  1,  1,  1,  0,  1,  0,  -1, 1,
      -1, 0,  1,  0,  1,  -1, 1,  1,  0,  0,  -1, 1,  1,  1,  0,  1,  0,  0,  -1, 1,  0,  1,  -1, 0,  1,  0,  -1, 0,
      -1, 0,  1,  1,  -1, -1, -1, -1, 0,  1,  0,  0,  0,  -1, 0,  -1, -1, 1,  0,  -1, 1,  0,  0,  -1, 1,  1,  -1, 0,
      -1, -1, 0,  0,  -1, 0,  -1, -1, -1, 1,  0,  0,  -1, 0,  -1, -1, 0,  1,  0,  -1, -1, -1, 0,  1,  -1, 0,  0,  -1,
      0,  1,  -1, 1,  0,  0,  -1, 1,  0,  1,  0,  0,  0,  1,  -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,  1,  1,  1,  0,
      1,  -1, 0,  1,  1,  -1, 1,  0,  0,  -1, -1, -1, 1,  0,  1,  1,  1,  0,  -1, 0,  0,  -1, 0,  -1, 1,  1,  1,  -1,
      0,  0,  -1, -1, 0,  -1, 1,  1,  1,  -1, 0,  0,  -1, 1,  0,  0,  -1, 0,  -1, 1,  -1, -1, 0,  1,  -1, 1,  0,  1,
      1,  1,  -1, -1, 1,  -1, -1, -1, -1, 0,  0,  -1, 1,  1,  -1, -1, 1,  0,  1,  -1, -1, -1, 1,  -1, 1,  1,  0,  1,
      1,  -1, -1, 1,  1,  0,  1,  -1, 0,  -1, 1,  1,  1,  -1, 1,  -1, 1,  -1, -1, 0,  1,  1,  -1, 1,  1,  1,  0,  -1,
      1,  0,  -1, 0,  -1, 1,  -1, -1, -1, 1,  0,  0,  -1, -1, 1,  1,  0,  -1, 1,  0,  1,  -1, -1, -1, -1, 0,  0,  -1,
      1,  0,  0,  1,  -1, 0,  1,  -1, 1,  0,  -1, 1,  0,  0,  -1, 1,  -1, -1, 1,  0,  0,  1,  0,  1,  0,  1,  0,  1,
      0,  1,  1,  0,  -1, 0,  1,  -1, 0,  -1, -1, 1,  -1, 1,  1,  1,  1,  0,  1,  0,  1,  1,  1,  1,  -1, -1, 1,  1,
      0,  -1, -1, 1,  -1, 1,  1,  0,  0,  0,  1,  -1, 1,  1,  1,  -1, 0,  0,  0,  1,  1,  -1, 0,  -1, 1,  0,  -1, 1,
      1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  -1, 1,  1,  -1, 0,  -1, -1, 1,  -1, 1,  -1, -1, 0,  -1, -1, 0,  0,  -1,
      1,  0,  -1, 0,  -1, 1,  1,  1,  1,  0,  1,  -1, 1,  1,  -1, 1,  0,  1,  -1, 0,  1,  -1, -1, 0,  0,  -1, -1, 0,
      0,  -1, -1, 1,  -1, -1, 0,  0,  1,  0,  -1, 1,  0,  0,  -1, 0,  -1, 0,  -1, -1, -1, 1,  1,  0,  1,  0,  1,  1,
      -1, 1,  1,  -1, 0,  0,  0,  -1, 1,  0,  -1, 1,  1,  -1, 1,  0,  0,  -1, 0,  -1, -1, 1,  0,  -1, 0,  1,  0,  1,
      1,  1,  -1, -1, 0,  0,  0,  -1, -1, -1, 1,  -1, -1, 0,  0,  0,  0,  -1, -1, -1, 0,  1,  -1, -1, -1, 1,  0,  1,
      -1, 0,  -1, -1, -1, 1,  -1, 0,  -1, -1, 1,  -1, 0,  -1, 1,  1,  0,  0,  -1, -1, -1, 1,  1,  0,  0,  -1, 1,  1,
      1,  -1, -1, 1,  0,  0,  1,  -1, 1,  -1, -1, 1,  -1, 1,  0,  1,  1,  -1, 1,  0,  1,  -1, 0,  0,  0,  -1, -1, 0,
      -1, -1, 0,  1,  -1, 1,  -1, 1,  0,  0,  -1, -1, 1,  0,  0,  1,  1,  1,  1,  0,  -1, 0,  1,  0,  -1, 0,  0,  -1,
      1,  -1, 0,  0,  -1, 1,  -1, 1,  0,  -1, 1,  -1, -1, -1, -1, 0,  -1, -1, -1, -1, -1, 0,  -1, 0,  0,  -1, -1, -1,
      0,  -1, 1,  -1, 0,  -1, 0,  0,  0,  1,  1,  1,  1,  1,  0,  -1, 1,  1,  -1, 0,  -1, -1, 0,  -1, 0,  1,  1,  -1,
      -1, -1, -1, 0,  0,  -1, 0,  0,  0,  1,  -1, 1,  1,  1,  -1, 1,  1,  0,  1,  0,  1,  -1, -1, 0,  1,  0,  1,  1,
      1,  -1, 0,  1,  1,  1,  -1, 0,  -1, -1, 1,  0,  -1, 0,  0,  0,  1,  -1, 1,  -1, 0,  1,  -1, -1, 1,  0,  -1, 0,
      -1, 1,  -1, -1, 1,  -1, 0,  0,  0,  0,  1,  1,  -1, -1, -1, 0,  0,  -1, 0,  -1, -1, 0,  0,  -1, 1,  0,  1,  0,
      0,  0,  -1, 1,  -1, 0,  -1, 1,  0,  1,  -1, 1,  -1, -1, -1, 1,  -1, 0,  -1, -1, 0,  1,  0,  0,  0,  1,  -1, -1,
      -1, 0,  1,  0,  0,  1,  0,  -1, 0,  0,  1,  -1, 1,  0,  -1, 1,  0,  1,  0,  0,  -1, -1, 1,  1,  0,  -1, -1, -1,
      -1, 0,  0,  -1, -1, -1, -1, 0,  1,  -1, 1,  1,  1,  -1, 0,  1,  0,  1,  1,  -1, 1,  -1, 0,  1,  1,  -1, -1, -1,
      0,  0,  -1, 0,  0,  0,  0,  1,  1,  -1, -1, 1,  -1, -1, -1, 0,  1,  0,  -1, -1, 1,  0,  1,  -1, 1,  -1, 1,  1,
      1,  1,  -1, 0,  1,  -1, 0,  -1, 0,  0,  1,  1,  -1, 0,  0,  1,  -1, 0,  0,  1,  -1, -1, -1, 1,  1,  0,  1,  -1,
      1,  1,  -1, 0,  -1, -1, 0,  1,  0,  1,  -1, 0,  -1, 0,  0,  1,  -1, 0,  1,  1,  0,  -1, -1, 1,  -1, -1, 0,  -1,
      -1, 1,  0,  0,  1,  1,  1,  -1, -1, -1, -1, 1,  0,  -1, 1,  0,  1,  0,  1,  1,  0,  0,  0,  -1, 1,  -1, 0,  1,
      1,  0,  -1, 0,  1,  -1, 0,  -1, 1,  0,  -1, 0,  0,  -1, 0,  -1, 1,  -1, 1,  1,  1,  0,  1,  -1, 1,  1,  -1, -1,
      0,  -1, -1, 1,  1,  0,  0,  0,  -1, 1,  -1, 1,  0,  1,  0,  1,  1,  1,  0,  -1, 1,  1,  0,  0,  -1, 1,  0,  1,
      0,  -1, 1,  1,  0,  0,  0,  -1, 0,  -1, 1,  1,  0,  0,  1,  -1, -1, 1,  0,  0,  -1, 0,  -1, 0,  0,  1,  -1, 0,
      0,  -1, -1, 1,  0,  -1, 0,  0,  -1, -1, 0,  0,  0,  1,  0,  0,  -1, 0,  1,  0,  -1, 0,  1,  0,  -1, -1, -1, 1,
      0,  1,  0,  1,  1,  -1, 0,  -1, 1,  -1, 0,  0,  -1, 1,  1,  0,  1,  1,  1,  1,  0,  1,  -1, 1,  0,  -1, 1,  0,
      0,  -1, 0,  0,  1,  -1, -1, 0,  0,  -1, 0,  0,  1,  -1, -1, -1, 0,  0,  0,  0,  -1, 1,  0,  0,  -1, -1, -1, 1,
      -1, -1, 0,  1,  0,  1,  0,  -1, 1,  0,  -1, 0,  -1, -1, 1,  0,  1,  1,  -1, 1,  1,  1,  -1, 0,  0,  0,  -1, 0,
      1,  1,  1,  -1, 1,  -1, 0,  -1, 0,  1,  0,  -1, -1, 0,  -1, -1, -1, -1, 1,  -1, 0,  0,  0,  -1, 1,  -1, -1, -1,
      1,  -1, -1, 1,  0,  1,  0,  -1, -1, 0,  -1, 0,  0,  0,  1,  0,  -1, 0,  -1, 1,  1,  -1, -1, -1, 1,  -1, -1, 1,
      1,  1,  -1, 0,  0,  1,  1,  -1, 1,  -1, 1,  -1, 1,  -1, 1,  -1, -1, -1, -1, 1,  -1, 0,  0,  0,  0,  0,  -1, 0,
      -1, 1,  -1, 1,  1,  1,  -1, 0,  1,  0,  1,  0,  -1, -1, 1,  1,  1,  1,  0,  1,  0,  0,  -1, 0,  1,  1,  -1, 1,
      -1, -1, 1,  1,  1,  -1, 1,  0,  0,  -1, 0,  0,  -1, 1,  1,  0,  0,  1,  0,  1,  1,  1,  1,  0,  0,  1,  -1, 0,
      -1, 1,  -1, 0,  0,  0,  0,  1,  0,  0,  1,  0,  1,  0,  0,  1,  -1, 1,  0,  1,  0,  -1, -1, 0,  1,  1,  1,  -1,
      -1, -1, 1,  1,  0,  0,  -1, -1, -1, -1, 0,  -1, 0,  1,  0,  1,  1,  1,  0,  0,  -1, 0,  1,  -1, 0,  -1, 1,  1,
      0,  1,  0,  -1, -1, -1, -1, 0,  1,  0,  0,  -1, 1,  0,  1,  0,  -1, 1,  0,  1,  -1, 1,  0,  1,  0,  0,  0,  1,
      1,  -1, 1,  0,  -1, 1,  0,  0,  0,  0,  1,  -1, 1,  1,  1,  -1, 1,  -1, 1,  0,  0,  1,  1,  -1, -1, 1,  0,  0,
      0,  -1, -1, 1,  0,  1,  -1, 1,  0,  -1, -1, 1,  -1, 0,  -1, 1,  1,  1,  0,  0,  -1, 1,  -1, -1, -1, -1, 1,  1,
      1,  -1, 1,  -1, -1, -1, -1, 0,  1,  -1, 0,  0,  0,  0,  -1, 0,  0,  0,  1,  -1, -1, 0,  0,  1,  -1, -1, 0,  -1,
      0,  1,  0,  1,  -1, -1, 0,  1,  1,  0,  0,  -1, -1, 0,  -1, 1,  0,  0,  1,  1,  -1, -1, 1,  0,  -1, 1,  1,  0,
      1,  -1, 0,  -1, 1,  1,  1,  0,  0,  0,  -1, -1, -1, -1, 1,  -1, 1,  1,  0,  1,  1,  1,  0,  -1, -1, 0,  -1, 1,
      1,  1,  -1, 1,  0,  0,  -1, 1,  1,  0,  1,  1,  0,  -1, -1, 0,  -1, -1, -1, -1, 0,  1,  0,  -1, 0,  0,  0,  0,
      1,  -1, 0,  1,  0,  -1, -1, 1,  -1, 0,  0,  1,  0,  -1, 0,  0,  -1, 0,  0,  -1, 1,  1,  0,  -1, -1, 1,  1,  0,
      1,  -1, 0,  0,  -1, 1,  0,  0,  0,  1,  -1, 0,  0,  0,  -1, -1, -1, -1, -1, 0,  -1, 1,  -1, -1, 1,  1,  -1, 0,
      1,  0,  1,  -1, 0,  0,  0,  -1, 1,  0,  0,  -1, 0,  -1, 1,  1,  1,  1,  1,  0,  -1, 0,  -1, 1,  1,  1,  1,  1,
      1,  1,  1,  0,  -1, 0,  1,  0,  0,  -1, -1, 1,  -1, -1, 1,  0,  0,  0,  -1, 0,  0,  1,  -1, 0,  1,  1,  1,  0,
      0,  0,  1,  -1, -1, 1,  1,  0,  -1, -1, 1,  1,  -1, 1,  1,  0,  0,  -1, -1, -1, 1,  0,  0,  -1, 0,  1,  -1, 0,
      0,  0,  0,  0,  -1, -1, 1,  0,  1,  1,  0,  0,  0,  -1, 1,  0,  0,  1,  0,  -1, 0,  -1, 1,  -1, 0,  0,  0,  -1,
      -1, -1, 1,  -1, 0,  0,  0,  0,  0,  0,  0,  1,  -1, 1,  0,  1,  1,  1,  0,  -1, 0,  0,  1,  0,  -1, 1,  1,  -1,
      0,  0,  0,  0,  0,  0,  1,  1,  0,  -1, 0,  -1, 1,  -1, 1,  0,  -1, 0,  -1, -1, 1,  1,  0,  1,  -1, 0,  1,  0,
      -1, 0,  -1, -1, 0,  -1, -1, 0,  0,  0,  0,  0,  -1, -1, 0,  1,  1,  -1, 1,  1,  1,  0,  1,  1,  1,  1,  -1, 0,
      0,  -1, 0,  0,  1,  -1, 0,  -1, -1, -1, 0,  1,  -1, 0,  0,  -1, -1, 1,  -1, 1,  -1, -1, 0,  0,  1,  -1, -1, 1,
      0,  0,  0,  1,  -1, 0,  1,  0,  1,  1,  1,  1,  1,  1,  0,  1,  1,  0,  0,  0,  -1, 0,  1,  -1, 0,  0,  0,  0,
      0,  0,  0,  1,  1,  0,  1,  0,  1,  0,  -1, 1,  0,  -1, -1, 0,  -1, 0,  1,  1,  1,  0,  0,  1,  0,  0,  1,  0,
      0,  -1, -1, 1,  0,  -1, 1,  0,  1,  -1, 1,  -1, -1, -1, 1,  1,  -1, 1,  1,  -1, 0,  1,  -1, -1, 1,  1,  -1, -1,
      1,  1,  -1, 1,  1,  1,  1,  1,  1,  -1, 0,  0,  0,  0,  0,  0,  -1, 1,  -1, 0,  0,  0,  -1, 0,  1,  -1, 1,  -1,
      0,  -1, 0,  1,  1,  1,  0,  1,  1,  0,  0,  0,  -1, -1, 1,  0,  1,  -1, -1, 0,  0,  1,  -1, 0,  1,  0,  0,  1,
      1,  0,  0,  0,  1,  -1, -1, -1, -1, 0,  1,  0,  1,  0,  1,  0,  -1, -1, 0,  -1, 0,  0,  1,  1,  0,  -1, 1,  -1,
      -1, -1, 1,  -1, -1, 0,  -1, 0,  -1, 0,  -1, 1,  1,  -1, 1,  -1, 0,  0,  1,  -1, 0,  1,  1,  0,  0,  -1, -1, 0,
      1,  -1, 0,  0,  1,  0,  1,  -1, 1,  1,  -1, 0,  0,  -1, 1,  -1, 1,  -1, 0,  0,  -1, 0,  -1, 1,  -1, 1,  -1, 0,
      0,  0,  0,  0,  0,  0,  0,  1,  -1, 0,  1,  1,  0,  1,  0,  1,  0,  0,  1,  -1, 0,  0,  -1, -1, 0,  -1, 0,  1,
      -1, 1,  -1, 0,  1,  1,  1,  1,  1,  -1, 1,  -1, 0,  -1, 1,  1,  0,  -1, 0,  1,  0,  -1, -1, 1,  0,  1,  -1, 0,
      0,  1,  -1, 1,  0,  0,  0,  1,  1,  1,  0,  -1, 0,  0,  0,  1,  -1, 1,  -1, 1,  1,  -1, 0,  -1, 0,  0,  0,  0,
      1,  1,  0,  -1, -1, -1, -1, 0,  0,  0,  -1, 0,  -1, -1, -1, 0,  -1, 1,  0,  -1, -1, 0,  0,  1,  0,  0,  -1, -1,
      -1, 0,  -1, -1, 1,  1,  -1, 0,  0,  1,  1,  0,  -1, -1, -1, -1, 1,  -1, 0,  1,  -1, 0,  -1, 0,  0,  -1, 0,  -1,
      -1, 1,  1,  0,  0,  0,  -1, 1,  1,  -1, 1,  0,  -1, 1,  1,  1,  0,  0,
  };
#elif defined(FLEX_TRIT_ENCODING_3_TRITS_PER_BYTE)
  const flex_trit_t SEED[] =
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQ"
      "RSTUVWXYZ9";

  const flex_trit_t EX[] =
      "IRRWWESEWUSGFCQZQUETVGNLONDOHXJRQPECGNOI9FSDSVDHH9EXGXHLW9TXQSFRZK9TKFMW"
      "SLOGAD9OWUCQCZTCRHQXINFJHVGPVWYWFKIGHUAYFWNJXGZZYISMFTVQKDLUQWHEVUWYCIHE"
      "VW9QKRJSYDCBTFTOL9HTNPRBPGTSQACDUGZSXRJWSKFJUXCH9TEXJUUDOI9EDDFAQ9QMDNPJ"
      "DZLZPUMVGBOUNFYHKWSICCGEKLZHECPB9SKR9NW9NUUCIGYJZZHQGAWMA9PFQOQMBFOYXWYZ"
      "SZRAENTWFOHTYWZCM9NYFBKQGKL9APFFZ9YDMUASLWRMQHJETMUAEY99WGDOUDBSHMPQAPKG"
      "9LQHAJMMIEUAX9OQHQKMMNFA9GUDQENAELLL99CZLTRFYNGXUREWFUHIKQJVHCSTOWZIOCJV"
      "DE9ZRC9PMJEOUMNRILRBE9KDLKHDRQHIWEDLHVDEHZPOFXYGHHAMACOPNRV9EZBSFYITYURV"
      "QSJOZWESIYRMHOYZHEEHMTAYPNMIJMPUF9OSCEWPQEKWOHSOMLPZJUIXWVJMLMDUWCCWGPVK"
      "BUUUEGAKJYSYAWWDWY9RZITWOHZTMTXPLHTDFTZJDLBJFFJ9RHXZBBHOIHV9UFRYRAABMKEA"
      "UUOOIGCWVNOKKPUODIQJYSFTUAKIBNJ9YIYVCNMUDGHLQENMWSDUHGZIA9FYIPOSFEOLDCRY"
      "SXRCJSJOCNIE9GLCRMXQFAUERKRDEAGVVPSSEUFWFFYEYRWAHHZPNQWQYHWCTJXBGSJKBGZG"
      "PQZJOVLRFQZGLJURVCSIXOGDPZPIVHDCTOBDEYTVUFILZ9PMBAQNOWHPNBLXYYJSMZKRBACR"
      "VPGKXUQSEA9NTHUFUHTP9OYBIIDFJIUGNTNCHVHX99MQ9IAMRNJNZL9KGQ9VKYNXMANFDHAB"
      "PSYDQLBMTVDOKFFZQZPABWUTLVDKUYKBZNDDM9HZKK9ZL9BHKWGKILNTZGHCWSNKQBITFFRB"
      "CZTRNJAHGCZBJVGRYNYYBDYXNWCENEOXDDZODTGMI9LGDVCZWALMADQJHOEHQLYBSRXUSGBB"
      "MFENSDX9NVFHHIJAEPRDDNRCN9DMTLOOUASJLXNXLJN9VKEVRLRIMZOYNHGHVERWERXP9NIM"
      "MFVZMVWCPAOBZDPKOSNXYK9CZFPUINBREOYJBVBASSWWKKDQGQBBAYPSQCZDFSZZIYJFVMFV"
      "HGE9HJZTLB9POVGTBGZCTMBLNXGHZCDUKWAPPTGXKSXSAUKICBRCKYK9KTSNFKEJKJE9UHTC"
      "KPNUWRHKSYQRSHIVGRBTRBWEQ9KS9LNTLRUWRLWTVYNLVVMNXPNZPYMATERXEVVTSBRCNYPA"
      "9DXNLQXP9RLVAKDAGOJDDOMAXODLLZEHHRFSDDNMPMKOP9YCBDDBTYUYOHCJYQHLKSECHQUW"
      "ZZRPEYGFSIMMO9JDXDEXUETJIEBJMBTRGFTWXPQZXAWDFNQGPUDQESGAAN9WNFNTDIAZ9DKW"
      "JKPOKZESUYMVC9AEVNCTAWZLZB9GUSUWASJTVIJBCKUZLBSBVCUBAAPDTADOSERGKMDLBUGV"
      "OHNMPGCLYIPFVECMYXJBFPWWJUVQTJSOY9OWZGYOYZYAUWFRBPRRXMPDQIFLFYEJURGSFT9N"
      "OINQF9DSHSNGJKHOUEPPBGOMENJNVFZHHMGOABXTMF9DANGGQGKDCSXZNEOPEMIDOULWF9BH"
      "N9UCOZDFOYZ9AHDCEANXWVHNJMOMLVS9YYDHTNEFDPCVKDTCIMHDADUVRKCDNGPWVCJBZOPW"
      "9EU9YXOWTVBWHCYCVUIVRGXXIDFWZCDTTTBHWYH9VNT9CEYOEECS9AXYKBCSIHCABBGJYTSK"
      "FJJADIMQBZNZLZPIIZDCJDVIWZXGKSQDDMSXCJEWGWAUJXIO9FTHLYXRKQWDKZ9X9HRIKDQX"
      "PJSWKNM9S9KWRGTIEHFPVFFYZXRAWSKKXDLBRTTYAXRIKHESEOXCURUPJLXWWIIGDMBUIBRF"
      "CLLICDZXDDPSDP9NSZYBIYEZSVIQLQCXZJLHXUJJGPHRDILDMLDSVKXI9LZWZDPIVFABZTVF"
      "SNFLUHDBPFMCKNFSTXMTQHGSGXXSRWCRDKBHZGQVEPPRSIHKZSGCZOKJTUNHRDOLNZVXARQX"
      "DUZMZZ9AGLOKYBKYRQMDJKQJOIA"
      "JXXHYSPUJEL9PSLRGUMNCUZRNDLIUXYVJWGUIFOWVWGFNVVRPWIGS9POUUFBLFH9VYRTOSVL"
      "IXJSYOCEXSNRAYWBWYGJRYJGZRZGK9DCSJ9LFZZMNCLQKBMGYJOL9NWEZURYXHEMMEWZPN9S"
      "VKRKQVUFGWWRRC9VGA9JVXALSWYDFKYCJQTJAPRACLEUYQSCFHYOUUGMWXZOLOPBA9UGZGDL"
      "B9ZKHSYPXLBRVONMZWZZLHQYSNCVDCJXUTVUKAYDAQYYHDMEZVCFASPTGJPVZCZCUKAOVTJC"
      "OAIMISYURFVXWNCKSWNHNZWOPUQFTJAFRRFWDHQECFSSOIFICV9GYMCHOBSXFZSCLQMJZJJQ"
      "YLDYZWISHLIWHIMGSPB9BDZGDZNQXDVTHHFRIIYFQHWFCD9LRDWZBAMHABLKOYGKILGV9DBK"
      "JZBOOSHLEIG9NJHRZCNNZAIYTZTPIDJNWFSNAMUNBBY9DMOI9ECDSWOHACKAZOYQAVYJPWMD"
      "YIQMLEU9WYCCPGCWUBOBORACRLEAIRZVEALJKPLPJFTPRWGPXCAJHVJ9CTHGYEDGDE9KXLUU"
      "BZDDT9RFJAMZGHNGHPIRGPEHHKOMJXXTQQNRKGORUCGZPLKPF9IXEBRRIDGWYGOHSTCTQWGY"
      "DDYTRAUQMPYDSHICWRLUBMHTEXRSAHXAKJSGQDEAATAIGWFGJMUKGPLYXFKCWRA9MHUSZBAU"
      "EUEBAGEDCUZXS9FCDQIJZNGCKZ9BZDTZUREZNYABOZOKSLYRLZ9DYFIOAVUNEVXSXYJFUYSS"
      "PISTPBMNMH9SWFQ9FCOOHSRWGNBEHHVFUYXKZBUWWXHFMYBDICTXZNIYQ9YGFGU9TXHOGFIN"
      "GUATJFUUCVZZFM9SAGJQOAOQTUWREJFWOEQFCNXPAKVRVKNILWRGISOY9WZHTU9WTUREVHSQ"
      "KTONDY9NDCNHDRNHOAIKCFSGW9WOTOPVLNDWAUTNVMALCLRDVWYFWSDCPQWHPWMQP9WY9PUV"
      "IKOIPFHNOPNS9OSZTHUJXOABLJRMGFEPZUNZMDZSXYNG9OMRJXJUVOMEELLGTLGATQCDVKPF"
      "YCQFDYHEKKKIODOSCNSRACPVJWGPLYABFIFKXHABSIABMDJJIYBPIWQEDLPLU9EYCPBVUVKZ"
      "SVGQQQIJJWTRJVVJARBACTNMHQBQNROFOPLAWITTVWYVMEPYQAPTPSQBLACQYTYZOWXGSMHW"
      "I9XV9XSUXJBFV9GZNRQVUJ9OOTQATHEJWPJSWPEEYZGQCJYNDBL9FUXILWGRVATPFYVUWGPD"
      "FSZIA9BMICESFCLYAFHOYAEDDXUUSXROOUXOLVLORXEHAMCJCYQWWYWXZUMJQGSJVQGQPMMI"
      "JQOLMGE9ZYAQCQLUSOSBXZTXVMCPCL9BRTVGZ9WEUJYYTFPFGPWPOMGKHMMHJVEHTWUOVY99"
      "FNBKAQMTCAJFQWQWPXZTHFYWJSJXDMCTCGAKJRJHXHPWAXEFRVOROBXWSWYXGRJ9PNNHDYVA"
      "NJDZQMZWKYFRFWGLPPWFPJNGJPDYKGTHGDBQPBODBPWFIHBBFEICJLXYEKDJMESTDIKYIYBK"
      "LMMKQTPORSFMUVJHWORTZSAQOKCVV9BKBXEXJVZOTZRWPBYNYEQDOKRMEITTJGU9WWGBOAMS"
      "CZTRGFNQNQRWTXIMSVOXVNR9GVDJWJVLYEXITUBQPY9VWXWFCRYBGNYWAUWASIBBAESNRNUM"
      "HLTLNR9LENCEUGMHQIYUINDGYWJQIHSTQBLPEFCDRYDHQSRFKJKWEAFBJDKRJFAXKIERXURB"
      "ZWIRCHOBJYTRDMJBBXUZZPZRANPCSSOJGV9HVYHOOEZFNPJOXIXKNPMZVGTPEZ9QGVCSKDAH"
      "GEVAZKILDUFZIICUJOLPKRNXJDXYKCNHRJFUJ9VSAIKGBLE9EUSTFDFNKGNHZR9PIWHUHAWB"
      "LEFJQM9NTDMOFVAKLOOWS9UCEZSRRDEJZBIZONFEYJZFRFMSFMMSCOPAXULAUKOVDOBXY9OJ"
      "AFIXT9NY99GLSIFY9ISFBQKUCQQZ9WVMLVRIQWYOGWUBIHLMJAXY99DJFOXMIIRBBGNVVUKE"
      "GMV99T9HTXML9EUZYADINHCSQISPTQXKTIHAWYCGYFTRFT99IHJCURQUYMVYKXSBYUALS9GK"
      "Q9LOWROQSZANOVISNYYZQK9KBKA";
#elif defined(FLEX_TRIT_ENCODING_4_TRITS_PER_BYTE)
  const flex_trit_t SEED[] = {
      -63, 65,  20,  31,  -41, 77, 80,  116, 81, -43, -49, -9,  51,  28,  -33, 116, -3,  48, -51, 0,  4,
      7,   81,  124, 92,  55,  65, -47, 69,  85, 63,  -33, -49, 112, 124, -45, -11, -61, 52, 3,   16, 28,
      68,  -15, 113, -35, 4,   69, 23,  85,  -3, 124, 63,  -61, -15, 77,  -41, 15,  -45, 12, 0,
  };
  const flex_trit_t EX[] = {
      16,  12,  63,  -49, 23,  127, 15,  29,  119, 28,  49,  15,  51,  -3,  -35, 117, -9,  83,  -4,  95,  -16, 19,  19,
      -63, 115, -1,  17,  -35, -49, 67,  0,   23,  23,  113, 93,  76,  19,  -16, 49,  29,  51,  81,  15,  112, 51,  115,
      -52, -63, -61, 5,   -36, 23,  87,  61,  49,  -59, 119, 65,  1,   -16, 15,  77,  -52, -60, 112, 19,  -16, 52,  51,
      -48, -49, 69,  83,  -35, -11, -11, -45, 60,  -36, 5,   117, 19,  29,  52,  -36, -13, 71,  76,  55,  12,  13,  20,
      87,  -36, 93,  -49, 87,  65,  -47, -13, 51,  125, 53,  -3,  52,  4,   52,  125, -11, 3,   -52, 23,  28,  -59, 77,
      65,  28,  55,  119, -13, 20,  48,  -35, 127, 15,  31,  125, 119, -57, 115, 64,  20,  116, 55,  -60, 12,  28,  61,
      -15, -59, 69,  52,  67,  76,  -64, -3,  49,  17,  77,  23,  60,  4,   124, 69,  -63, 5,   51,  48,  87,  -59, -33,
      71,  -59, 64,  13,  61,  93,  -43, -35, -63, -45, 63,  -41, 76,  -41, 19,  67,  4,   -47, 125, 23,  53,  76,  31,
      -47, 31,  64,  124, -63, -64, -1,  0,   63,  77,  19,  80,  -41, 68,  -61, 48,  -51, 93,  -16, 84,  1,   -48, 115,
      51,  63,  87,  7,   -57, 55,  -52, -45, 12,  -15, 0,   7,   -33, 127, 63,  28,  63,  -35, -51, 51,  16,  21,  -16,
      55,  -36, 113, -51, -35, 69,  1,   65,  -49, 113, 3,   -48, 20,  21,  29,  -60, -44, 3,   87,  -13, 20,  125, 119,
      69,  7,   95,  3,   0,   79,  87,  -16, 116, 113, -60, 83,  -43, -49, 65,  127, 117, 0,   53,  79,  65,  84,  85,
      -48, 71,  7,   12,  -64, -49, -45, 124, 85,  -43, -49, 5,   64,  71,  23,  -13, -9,  7,   31,  69,  81,  0,   64,
      12,  -44, 13,  115, -51, -33, 49,  52,  -4,  61,  28,  61,  65,  -41, 28,  -43, 19,  17,  -33, -4,  51,  64,  60,
      17,  -43, -59, 7,   12,  48,  1,   -12, 85,  -12, -15, 116, -11, -61, 16,  5,   31,  31,  112, 21,  -44, 53,  21,
      -16, 60,  65,  -49, 87,  80,  83,  93,  124, -45, -48, -13, 28,  -45, 116, -45, 20,  84,  1,   -63, -9,  63,  92,
      3,   -33, 112, -60, 92,  3,   -35, 13,  13,  -41, 115, 28,  -15, -61, -13, -59, 80,  3,   87,  19,  -33, 12,  -45,
      -9,  77,  -43, 29,  52,  -3,  95,  65,  81,  -43, -45, 28,  -64, -57, -60, -9,  -12, -13, 119, 61,  -4,  20,  -13,
      21,  -43, 15,  17,  13,  49,  79,  29,  85,  84,  85,  -48, 15,  65,  60,  93,  95,  95,  7,   77,  -45, 95,  23,
      92,  81,  19,  55,  -63, -13, 20,  79,  3,   -64, 3,   116, 63,  -4,  52,  -36, -43, -51, -12, -44, 116, 23,  -36,
      61,  68,  5,   117, 68,  28,  23,  1,   -16, -60, 12,  -57, 49,  -15, -48, 84,  3,   52,  7,   55,  112, 16,  28,
      -43, -11, 5,   52,  -51, -13, 80,  71,  60,  -11, -49, 95,  87,  79,  -13, 5,   52,  71,  77,  -52, -35, 116, 112,
      65,  -57, 31,  1,   13,  -44, -44, -60, 95,  -47, 69,  55,  81,  -13, -9,  87,  79,  92,  -48, 83,  55,  64,  1,
      -64, 53,  80,  -49, -57, -36, -57, 83,  5,   1,   55,  49,  3,   19,  81,  28,  -15, -60, 15,  125, 64,  71,  17,
      112, -59, -52, 92,  64,  127, -16, 5,   23,  95,  -48, -43, 117, 31,  -57, 31,  -51, 61,  28,  -41, 124, 13,  -4,
      4,   -45, 52,  -12, -1,  -4,  -52, -51, -12, 16,  119, -60, 28,  93,  28,  93,  71,  55,  116, -3,  60,  68,  124,
      77,  -63, -36, 60,  116, 84,  68,  -61, 53,  17,  67,  12,  -33, 21,  -3,  -48, 67,  -11, 84,  16,  55,  127, 20,
      95,  115, -41, 52,  7,   81,  3,   -48, 87,  71,  48,  -1,  -4,  51,  -11, -1,  65,  49,  77,  19,  -59, -43, 112,
      -63, 71,  64,  -64, 117, -33, 93,  12,  61,  -57, 95,  0,   -4,  -9,  68,  115, -12, 116, -9,  0,   -33, 28,  16,
      84,  112, 17,  68,  119, -1,  -3,  19,  83,  61,  49,  0,   80,  -51, 0,   20,  84,  -16, 31,  -3,  3,   5,   92,
      -35, 12,  -44, 87,  -13, 51,  85,  -16, 115, -59, 20,  28,  125, -36, 20,  51,  117, 84,  119, 93,  -16, 23,  -57,
      13,  -13, -48, 7,   -57, 67,  -33, 84,  93,  92,  116, 115, 29,  -61, 95,  20,  21,  48,  13,  -41, 5,   12,  20,
      112, 76,  -41, -45, 93,  16,  -11, -33, 67,  55,  17,  79,  -4,  95,  -13, 1,   -35, 28,  7,   31,  -60, 112, -61,
      127, 20,  76,  29,  49,  28,  81,  -35, -63, -51, -33, 52,  71,  -47, 48,  -1,  67,  124, -1,  -57, 51,  69,  49,
      -16, -59, -35, 85,  16,  64,  117, 69,  77,  12,  79,  64,  85,  65,  49,  71,  19,  -1,  77,  51,  -43, 28,  49,
      -52, -48, 113, 119, 28,  21,  -9,  -3,  113, -63, 0,   127, -51, 77,  19,  20,  5,   95,  15,  23,  -59, 15,  19,
      63,  80,  84,  55,  -59, -13, 116, 16,  71,  20,  -13, 51,  84,  -12, 3,   -11, -11, -43, 48,  5,   67,  -43, -64,
      55,  -1,  -44, 77,  -11, 7,   63,  31,  -52, -12, -64, 15,  85,  21,  87,  15,  85,  -3,  16,  125, -64, 31,  67,
      -47, 95,  124, -4,  51,  -51, 5,   16,  3,   -41, -45, -48, 127, -64, 31,  -33, 68,  71,  125, 4,   113, -4,  60,
      -41, 85,  -52, -35, 124, 28,  65,  -45, -57, 51,  49,  20,  92,  60,  12,  80,  19,  113, 117, -59, -43, 83,  -9,
      1,   83,  52,  -36, -44, 1,   -12, 124, -35, -35, 71,  55,  16,  119, 117, 80,  63,  -45, 77,  3,   81,  -48, -41,
      19,  -12, -3,  -35, 49,  87,  -52, -60, 1,   125, 65,  -60, 1,   19,  87,  115, 1,   -41, 29,  -1,  -36, -11, 69,
      87,  -12, 1,   -12, 116, 19,  87,  -1,  -45, 15,  60,  93,  113, 51,  -61, -15, 4,   -43, 29,  124, -36, -16, -15,
      124, 51,  112, -59, 0,   -11, -33, 20,  76,  63,  48,  -11, -36, 117, -13, 83,  117, 93,  -3,  76,  -1,  15,  125,
      83,  5,   -9,  7,   51,  95,  93,  -33, -15, 1,   19,  127, -45, 7,   64,  -63, -4,  -44, -52, -12, 0,   76,  -43,
      -63, 85,  4,   29,  31,  21,  5,   95,  5,   12,  95,  80,  -44, -16, 77,  19,  -52, -59, 69,  -15, 87,  125, 117,
      -15, 61,  -48, 16,  71,  81,  28,  119, 67,  55,  -4,  68,  68,  -51, 60,  81,  87,  -4,  17,  -45, 76,  63,  -61,
      0,   -9,  95,  -45, 113, 49,  84,  85,  60,  16,  21,  76,  -15, 49,  -12, 119, 71,  -48, 119, 68,  -43, 113, -61,
      29,  119, 63,  76,  63,  15,  76,  -16, 20,  -36, 63,  119, 61,  93,  -52, 95,  -36, 5,   -63, 15,  60,  63,  -9,
      -33, 5,   20,  12,  64,  113, 61,  -47, -43, -13, -41, -16, -59, 116, 83,  -43, 4,   16,  124, -11, 79,  -36, -63,
      51,  80,  -61, 1,   116, 116, 76,  63,  65,  28,  -35, 53,  20,  29,  -60, 69,  15,  -44, 17,  31,  53,  65,  31,
      65,  -48, 23,  119, 80,  -16, -15, 7,   119, 87,  85,  80,  7,   -35, -43, -4,  -12, 87,  125, 71,  80,  13,  -44,
      115, -11, 71,  84,  13,  19,  29,  92,  -1,  60,  17,  93,  -49, 119, 20,  -13, 13,  -64, 63,  67,  -41, -16, -51,
      -48, 4,   -12, -61, -63, 71,  15,  -61, 76,  -43, 23,  51,  -60, 81,  92,  -13, 69,  52,  -36, -59, -36, 13,  -4,
      60,  -12, -49, 28,  80,  -60, 83,  -4,  119, -47, 53,  -15, -12, -41, -9,  71,  -57, 87,  -33, 31,  -3,  53,  55,
      76,  83,  -43, -15, -63, -63, -36, 21,  7,   20,  -63, -33, 117, 115, 119, 21,  68,  -52, 12,  -1,  -57, -9,  95,
      5,   21,  60,  77,  61,  28,  112, 76,  63,  64,  19,  -4,  80,  112, 124, 51,  0,   -63, 84,  16,  95,  -16, 51,
      79,  61,  -3,  81,  -59, 87,  84,  29,  3,   77,  83,  76,  -9,  -1,  113, 69,  79,  -44, 87,  113, 19,  80,  53,
      21,  65,  65,  -41, -16, 69,  20,  127, -41, 63,  53,  17,  29,  3,   -33, 63,  -64, 71,  3,   13,  -61, 63,  119,
      125, 60,  19,  -47, 16,  53,  13,  -43, 112, -57, 48,  80,  -63, 61,  3,   81,  -36, -9,  125, 76,  79,  51,  1,
      -11, 127, 3,   -60, -41, -16, -33, 71,  -60, 64,  -64, 52,  -41, 65,  -60, -48, 68,  4,   -57, -47, 69,  -51, 29,
      95,  92,  20,  5,   5,   84,  -51, -57, -16, 15,  -44, -48, 67,  -48, 80,  16,  81,  81,  67,  -49, -64, 116, 87,
      60,  23,  69,  21,  51,  68,  -12, 61,  -35, 19,  -48, 17,  3,   -15, 0,   119, 79,  84,  -61, -64, -41, -4,  20,
      -41, 0,   48,  -64, 4,   67,  87,  49,  51,  125, 20,  63,  -41, 95,  1,   49,  112, 61,  112, 119, 67,  -33, -60,
      -11, 53,  -57, 53,  3,   3,   7,   79,  124, 93,  76,  65,  29,  -16, 125, 55,  1,   3,   67,  -41, -12, -59, 31,
      -49, 16,  52,  76,  -9,  17,  -59, 60,  15,  4,   117, 69,  117, -48, -48, 1,   115, 4,   69,  65,  68,  49,  48,
      69,  -47, -57, 69,  15,  -4,  -15, -48, 28,  80,  -13, 13,  113, 13,  -51, -44, 76,  48,  67,  68,  77,  12,  29,
      69,  93,  63,  -63, 5,   68,  21,  21,  85,  -60, -11, -59, 64,  0,   53,  60,  67,  -47, 67,  53,  23,  28,  -61,
      93,  115, -15, -49, 81,  -12, 84,  28,  61,  87,  17,  -41, -49, -59, 55,  83,  -35, -13, -44, -59, 29,  -61, -60,
      -16, 67,  -64, -59, 117, 76,  67,  55,  -41, 95,  -33, -61, 49,  52,  93,  67,  -36, 17,  3,   127, 69,  55,  -3,
      79,  112, -63, 83,  -1,  80,  51,  1,   60,  51,  5,   61,  84,  -61, 0,   4,   29,  -59, 95,  -51, 113, 53,  -16,
      92,  21,  -47, 53,  71,  60,  20,  68,  12,  51,  53,  113, 79,  71,  31,  5,   -12, 49,  5,   119, 116, -11, 19,
      -12, 0,   -1,  5,   5,   -47, 76,  83,  71,  79,  71,  67,  28,  -1,  -44, 79,  -57, -3,  117, 13,  -9,  15,  -44,
      -59, 64,  -49, -45, 52,  119, 80,  -36, 4,   -44, 13,  124, -13, 113, 77,  65,  76,  20,  55,  60,  -15, 49,  -15,
      15,  7,   -51, 115, 60,  77,  23,  -63, 77,  -44, 13,  -16, -48, 93,  64,  65,  -60, 17,  64,  113, -61, 80,  -3,
      4,   53,  95,  71,  -43, 53,  17,  79,  1,   -1,  -13, 13,  52,  -36, 48,  -45, 87,  85,  -33, 51,  -12, 63,  16,
      -41, 23,  124, -51, 53,  -51, 117, -49, 3,   -61, 4,   80,  119, 1,   16,  -43, 76,  64,  -59, 79,  83,  112, 87,
      67,  68,  -13, 29,  5,   61,  28,  16,  -44, 71,  55,  115, 76,  112, 83,  -61, -45, 116, 87,  61,  -52, -64, 83,
      124, 127, 4,   0,   -35, 13,  93,  65,  29,  -64, 112, 77,  113, -45, 51,  -44, 1,   -41, -4,  95,  13,  -49, 48,
      80,  -45, -36, -60, 63,  81,  23,  68,  -60, -48, 119, 77,  95,  65,  83,  4,   115, -45, 76,  69,  -11, 13,  53,
      -63, 5,   113, 127, 119, 81,  95,  15,  -60, 64,  -48, 87,  -64, -41, 119, 68,  -16, 1,   84,  65,  113, 67,  -61,
      92,  -51, 60,  63,  113, -59, -49, 63,  -3,  -61, -61, -9,  -12, -52, -35, 81,  -64, -63, 48,  -9,  20,  -45, -4,
      17,  92,  28,  -13, 16,  7,   17,  53,  -48, 53,  21,  49,  -15, 71,  -52, 112, 67,  76,  80,  115, 21,  13,  81,
      52,  55,  84,  -47, 12,  15,  20,  79,  20,  -12, 76,  80,  -43, -59, -3,  1,   28,  -59, -48, 21,  -61, 63,  51,
      69,  125, 79,  19,  7,   67,  80,  -61, -51, -45, -61, 17,  5,   64,  -63, -59, 51,  28,  65,  53,  5,   7,   117,
      -15, 77,  119, 65,  84,  87,  3,   -59, 113, 69,  -61, -63, -13, -15, 68,  125, 80,  7,   -4,  -47, 4,   15,  -60,
      -1,  15,  1,   -44, -36, -61, -35, 67,  69,  -12, 63,  92,  -4,  7,   21,  -3,  31,  71,  3,   20,  21,  15,  1,
      31,  81,  -60, 15,  63,  5,   -60, 21,  12,  124, 51,  7,   117, 19,  -11, 79,  85,  52,  -48, 92,  81,  31,  13,
      60,  13,  65,  -12, 29,  -15, -48, 7,   127, -16, 112, 64,  -64, -44, 23,  64,  -16, 80,  127, 1,   21,  93,  61,
      -43, 71,  -36, -35, -61, 79,  -41, 51,  68,  16,  77,  117, 4,   16,  -9,  -44, 53,  95,  -47, 21,  31,  112, 49,
      20,  77,  31,  67,  81,  -36, 0,   -52, 69,  65,  53,  116, -45, -33, 77,  61,  4,   119, -3,  55,  77,  23,  95,
      69,  12,  115, -49, -13, 15,  95,  29,  15,  -45, 68,  55,  -12, -44, -43, 115, 0,   -60, 124, 7,   12,  67,  69,
      -9,  52,  29,  63,  -59, 55,  113, -49, 79,  -41, 20,  69,  115, -61, 1,   61,  87,  125, 83,  -60, 19,  68,  60,
      48,  69,  31,  -43, 116, 127, 12,  28,  7,   19,  19,  92,  81,  -36, -51, -59, 23,  4,   119, 0,   117, 15,  -41,
      69,  21,  125, 117, 61,  -43, 48,  -36, 69,  60,  112, 0,   84,  19,  29,  15,  71,  64,  127, -12, 119, 4,   -35,
      87,  16,  -12, -64, -60, 0,   71,  20,  51,  20,  13,  127, 71,  92,  3,   112, 12,  -59, 61,  -48, -16, 55,  -4,
      77,  112, -16, 3,   127, -59, 84,  3,   83,  3,   80,  52,  28,  -60, 7,   53,  -3,  127, 53,  19,  51,  77,  -60,
      -47, 77,  28,  -9,  80,  124, -9,  71,  -11, 87,  19,  16,  63,  -36, 12,  112, 4,   -49, 79,  49,  -4,  116, -1,
      -15, 77,  83,  -51, -47, 13,  115, 13,  7,   -3,  60,  -52, -60, 85,  -51, 81,  64,  -60, -51, 12,  63,  -44, -52,
      64,  -45, 113, 29,  13,  -36, -52, -60, 119, 28,  -12, 119, 116, 112, 71,  28,  77,  19,  -11, 48,  112, 21,  16,
      7,   93,  52,  -13, 1,   63,  -33, -12, 3,   127, 17,  -9,  -16, -33, -52, 17,  63,  -45, 7,   87,  13,  -41, -41,
      15,  81,  15,  -36, 65,  49,  -33, 0,   -49, 48,  -35, 52,  -16, -36, 52,  -4,  -43, 83,  60,  95,  55,  -1,  23,
      13,  -16, 23,  -60, 63,  21,  -16, 63,  -15, 1,   116, 17,  92,  -36, 61,  -64, -61, -33, 124, 95,  83,  127, -15,
      4,   -12, -3,  -41, 85,  64,  17,  20,  92,  -44, 79,  -61, 61,  113, 65,  -12, -13, 51,  -11, 79,  53,  -9,  -64,
      -45, 0,   61,  93,  67,  23,  15,  -11, -36, -12, -13, -3,  31,  3,   124, 60,  -36, 19,  29,  49,  124, 112, 80,
      17,  92,  117, -36, -41, 15,  -12, 63,  84,  -59, 16,  51,  -51, -33, 1,   124, 5,   71,  76,  68,  -41, 124, -11,
      125, 20,  -43, -35, 84,  23,  -36, 51,  81,  -44, 87,  -49, 53,  -60, -52, 21,  -51, -12, 93,  -41, 5,   -15, 5,
      31,  19,  127, 12,  7,   68,  95,  71,  79,  -41, 83,  77,  112, 112, 16,  119, 49,  83,  112, -60, 80,  112, 84,
      69,  20,  65,  -51, -47, 67,  -49, -4,  21,  84,  79,  -47, -64, -41, 16,  -3,  81,  -45, -11, 53,  -60, 117, 55,
      -49, 51,  20,  69,  -49, 13,  71,  117, 29,  5,   -16, 17,  16,  -9,  95,  77,  -13, 49,  -1,  48,  -49, -15, 61,
      21,  60,  -48, 125, -41, 79,  83,  87,  95,  -33, -52, 65,  127, -9,  -15, 124, 80,  1,   49,  55,  119, 51,  -16,
      15,  -45, -59, -43, -12, 64,  0,   83,  3,   76,  76,  51,  -47, -63, -43, 64,  55,  -4,  -16, 92,  -45, 17,  -64,
      -13, -9,  28,  -36, -45, 23,  61,  125, 20,  63,  -3,  -9,  53,  67,  55,  19,  81,  -13, 23,  7,   5,   112, 52,
      3,   81,  79,  7,   -41, -63, -35, 115, 77,  77,  63,  93,  95,  112, -15, 0,   5,   -64, 81,  65,  -60, 23,  115,
      4,   -43, 4,   -36, -60, 55,  -63, 87,  20,  12,  77,  -57, 12,  -52, -13, 52,  -61, 83,  53,  -59, -61, -52, 55,
      5,   21,  17,  17,  -51, -4,  60,  -51, -61, 12,  116, 21,  -51, 93,  28,  -43, 115, 55,  -9,  85,  5,   69,  51,
      79,  85,  -35, 7,   12,  77,  48,  19,  51,  69,  -57, 124, 124, 48,  -61, -51, -44, 21,  -47, 19,  20,  112, -64,
      119, -35, 13,  -64, -13, -47, 81,  -45, -36, 92,  -49, 117, -3,  -45, -13, 85,  119, 77,  85,  53,  69,  -11, 55,
      -35, 15,  -51, -41, 13,  0,   112, -1,  113, 5,   115, 117, 19,  65,  -60, -51, -49, -4,  -12, -52, 112, 79,  92,
      -13, 68,  113, -60, 20,  21,  113, 19,  93,  112, 69,  112, 52,  49,  83,  -1,  4,   -52, -57, -63, 53,  15,  -13,
      7,   -13, -60, 79,  -61, 116, 112, 4,   -12, -1,  63,  21,  77,  29,  -4,  81,  49,  -52, -43, -16, 92,  13,  7,
      115, 79,  71,  -11, -3,  -61, -11, -47, -33, 69,  125, -47, 92,  -35, 61,  117, -59, 49,  -9,  7,   95,  28,  -3,
      -61, 65,  -45, 113, 112, 31,  68,  68,  20,  -45, 124, 87,  17,  85,  95,  124, 23,  -48, -43, 64,  -51, 113, 81,
      85,  117, -51, 119, -49, -61, 49,  87,  -47, 117, 52,  61,  60,  124, 15,  113, 48,  -13, 23,  81,  -41, -64, 113,
      29,  -52, -57, 68,  -11, -64, -33, 3,   -4,  -12, 71,  -13, 55,  -33, 92,  -16, 23,  92,  125, -48, 125, 71,  29,
      13,  60,  79,  119, -16, 65,  21,  19,  -61, 13,  119, -36, 63,  -1,  51,  -4,  -36, 12,  84,  -59, 53,  -49, -44,
      63,  12,  116, 117, 17,  61,  81,  77,  53,  31,  3,   -35, -12, 49,  -9,  13,  80,  63,  -52, -61, 17,  112, 115,
      116, 127, -13, 4,   -12, 19,  -60, -48, 113, 4,   95,  -4,  -61, 63,  93,  77,  -44, 77,  -3,  48,  64,  125, 63,
      -15, -47, 93,  53,  -51, 80,  67,  67,  127, -47, 53,  79,  52,  67,  83,  124, -49, 7,   -43, 127, 28,  81,  -64,
      77,  49,  -51, 49,  -52, 93,  -47, -11, 124, 1,   119, 68,  -59, 5,   71,  92,  -64, 92,  -48, 7,   51,  52,  124,
      12,  15,  4,   19,  19,  127, 68,  -51, 13,  23,  85,  116, 28,  12,  61,  12,  -3,  0,   7,   127, 79,  -60, 49,
      31,  117, 53,  48,  -43, -51, -60, -13, -33, -64, -3,  125, -60, 51,  16,  115, -3,  125, 53,  -44, -35, -35, 127,
      3,   48,  119, 53,  17,  95,  69,  48,  117, 95,  29,  12,  23,  68,  21,  52,  55,  64,  16,  65,  71,  60,  -43,
      95,  -16, -49, 68,  5,   -45, 92,  -60, 63,  -63, 17,  71,  71,  64,  29,  7,   -48, -43, 29,  -44, 7,   124, 116,
      124, 115, 5,   -9,  95,  -35, 63,  13,  48,  -48, 67,  -49, 68,  79,  -63, 115, 80,  31,  23,  -51, 21,  -16, -33,
      69,  -59, 115, 117, 112, 81,  60,  -1,  -60, 0,   77,  124, 67,  12,  -61, -59, 23,  13,  7,   52,  -16, 63,  -9,
      53,  -47, -64, -63, 92,  21,  115, 85,  21,  19,  124, 31,  48,  52,  21,  -48, 23,  95,  23,  -4,  -63, 52,  0,
      31,  5,   28,  -60, -36, -64, -33, 0,   64,  71,  -59, 16,  -41, 0,   80,  -52, 29,  -13, 69,  19,  -13, 60,  0,
      79,  93,  81,  53,  12,  -51, 79,  -61, 119, 15,  125, 64,  19,  85,  69,  1,   -45, 0,   64,  17,  113, 60,  83,
      65,  16,  124, 28,  -35, 95,  -41, -12, -11, 117, 85,  13,  0,   55,  48,  -35, 76,  69,  1,   31,  61,  52,  65,
      1,   -3,  19,  17,  -49, 80,  -36, -33, 51,  115, -35, -48, 20,  60,  13,  -47, 53,  -36, 13,  115, 55,  0,   64,
      83,  68,  -48, -16, 76,  55,  85,  -35, 92,  76,  124, 52,  116, 64,  -59, 64,  119, -51, 0,   -59, 63,  48,  63,
      -57, 67,  -16, -13, 53,  20,  -1,  77,  51,  -52, 23,  112, 29,  87,  0,
  };
#elif defined(FLEX_TRIT_ENCODING_5_TRITS_PER_BYTE)
  const flex_trit_t SEED[] = {
      55,  90,   46,  -48, 25,  93,  92,  -41,  -112, -38,  53,  -66,  102, -13, -19, -1, -78,
      28,  -104, 100, 74,  36,  34,  121, -94,  -115, -84,  46,  62,   -38, -57, -3,  9,  83,
      -69, 56,   -20, 109, 102, 120, -38, -103, -10,  -106, -56, -113, 72,  -10, 0,
  };
  const flex_trit_t EX[] = {
      9,    -109, -37,  32,   -67,  -55,  -62,  19,   -89,  -28,  -100, -61,  -59,  -38,  -104, 95,   -117, -24,  10,
      50,   41,   -51,  -38,  77,   -81,  58,   -71,  103,  -57,  3,    -76,  21,   71,   -96,  -81,  -29,  17,   17,
      -12,  11,   -102, 58,   -95,  -24,  -104, 34,   12,   -108, 77,   -73,  24,   53,   8,    69,   -91,  -54,  50,
      -17,  67,   -97,  -113, -87,  53,   11,   -59,  -51,  -53,  -63,  -118, -71,  -60,  -9,   -2,   58,   58,   101,
      -112, 40,   93,   -112, 71,   113,  -100, -19,  3,    -56,  -43,  -4,   -111, -77,  37,   74,   28,   56,   -64,
      -110, 12,   -57,  -119, -11,  86,   59,   20,   50,   27,   85,   -61,  -72,  -3,   -52,  -73,  -70,  31,   -29,
      -24,  -80,  43,   24,   -17,  34,   -12,  -80,  38,   -77,  -77,  -3,   98,   -68,  -103, 118,  -3,   -5,   70,
      119,  61,   -79,  -100, 50,   -29,  -47,  -73,  90,   90,   47,   92,   -83,  48,   -51,  5,    -72,  11,   -82,
      -40,  -108, -19,  25,   -45,  76,   -6,   -28,  52,   11,   104,  4,    -99,  -21,  -118, 114,  -79,  46,   -28,
      -58,  78,   -12,  18,   -66,  -67,  -85,  -116, -60,  -110, -3,   118,  -108, -7,   20,   -16,  -61,  112,  27,
      -33,  56,   -1,   75,   118,  21,   -24,  -32,  99,   -110, 93,   59,   38,   7,    -49,  0,    -36,  115,  -36,
      34,   29,   104,  -95,  17,   -114, 67,   81,   -110, 12,   118,  40,   48,   21,   -9,   -108, -37,  -110, 121,
      -95,  98,   0,    88,   -70,  42,   14,   15,   112,  12,   0,    -8,   66,   -28,  -16,  -67,  -8,   -83,  -103,
      18,   70,   63,   52,   -42,  89,   -105, -110, -31,  27,   23,   118,  -70,  2,    -1,   8,    -99,  40,   16,
      -58,  -95,  -28,  111,  45,   15,   99,   85,   -47,  39,   -36,  23,   -33,  113,  -45,  -42,  -104, -56,  -99,
      -93,  73,   62,   -19,  85,   13,   -78,  -115, -85,  -5,   -66,  18,   -89,  -5,   -60,  79,   53,   -92,  19,
      -116, -36,  32,   107,  -82,  -14,  46,   -10,  -100, -65,  120,  20,   75,   -121, 13,   112,  -95,  -87,  1,
      -76,  -105, 70,   -94,  59,   -11,  68,   -89,  38,   -95,  26,   -17,  -24,  104,  110,  112,  121,  -99,  26,
      -105, 102,  -49,  65,   -18,  -56,  -49,  -77,  94,   25,   74,   -36,  104,  69,   -1,   -36,  -54,  -38,  -39,
      -83,  115,  -88,  -33,  76,   101,  -63,  -11,  118,  -45,  91,   -75,  31,   -81,  -73,  -84,  19,   -73,  -55,
      -42,  81,   17,   -21,  18,   -78,  118,  -97,  4,    -56,  -93,  107,  29,   104,  -40,  95,   -43,  -19,  32,
      -18,  110,  -73,  60,   62,   99,   63,   42,   3,    -2,   76,   25,   95,   64,   64,   89,   -110, -115, -95,
      57,   -53,  -46,  -2,   12,   -81,  -5,   -96,  15,   -64,  -106, 120,  9,    -21,  -89,  -27,  91,   19,   -35,
      -116, -99,  82,   110,  3,    38,   -91,  33,   -99,  -79,  11,   -70,  11,   115,  65,   -76,  -116, -17,  -34,
      -75,  -86,  -16,  -117, -78,  75,   -55,  -121, -39,  -64,  -57,  26,   20,   -89,  64,   19,   -47,  64,   -55,
      -113, -12,  -71,  -16,  -77,  -21,  77,   110,  91,   53,   25,   -8,   -8,   59,   -50,  77,   77,   -32,  13,
      -62,  42,   -69,  -16,  101,  -19,  83,   -15,  81,   113,  29,   -111, -112, -31,  -113, 14,   -69,  75,   89,
      100,  -83,  -77,  29,   9,    -48,  -65,  34,   -55,  17,   95,   0,    41,   23,   52,   -33,  61,   -4,   -66,
      6,    84,   -77,  31,   -51,  -101, -103, 23,   116,  23,   -1,   108,  -29,  81,   109,  -107, 86,   -40,  36,
      99,   -20,  80,   97,   -110, 71,   13,   -94,  -68,  12,   -52,  56,   35,   71,   88,   -59,  103,  -117, 58,
      -21,  -111, -99,  55,   -12,  -65,  120,  -70,  -50,  52,   -74,  -117, 112,  39,   72,   53,   34,   -9,   12,
      -75,  102,  -58,  34,   111,  41,   77,   74,   -105, -105, 95,   44,   -54,  52,   6,    5,    -8,   -7,   41,
      12,   -46,  -71,  18,   118,  20,   -21,  -67,  -87,  37,   -83,  -120, 26,   -103, 14,   -31,  112,  -3,   32,
      -61,  40,   3,    -42,  94,   25,   -109, 3,    121,  109,  51,   75,   -120, -56,  105,  52,   -24,  -30,  21,
      -61,  19,   -68,  -65,  -76,  -77,  -81,  -49,  -21,  25,   93,   -107, -32,  33,   -104, -28,  -116, 108,  -42,
      106,  -93,  62,   -72,  91,   -89,  -31,  39,   -38,  -45,  -97,  -14,  105,  -9,   -41,  -108, -110, 104,  74,
      -113, -107, 44,   -90,  -33,  -117, 117,  40,   -43,  107,  -95,  26,   16,   -117, -8,   -50,  32,   -76,  -94,
      -87,  4,    -24,  99,   -58,  -99,  5,    42,   -66,  -51,  -44,  29,   57,   -39,  50,   115,  -89,  -20,  -76,
      10,   -56,  -106, 24,   107,  99,   -12,  -1,   76,   57,   103,  100,  70,   -101, -80,  93,   53,   -46,  1,
      -92,  65,   -61,  -52,  -2,   -62,  67,   -45,  -31,  -20,  -2,   37,   48,   70,   -99,  43,   20,   98,   -89,
      57,   -54,  11,   -71,  -80,  57,   -86,  4,    65,   -106, 50,   -97,  -50,  94,   5,    -99,  -60,  57,   -113,
      -58,  -4,   -58,  -68,  -29,  53,   69,   117,  20,   15,   -7,   -76,  44,   -10,  114,  -3,   -96,  -22,  -77,
      -114, -27,  -32,  101,  -88,  104,  103,  -43,  -31,  -119, 77,   -22,  40,   -102, -79,  -111, 67,   -65,  46,
      -27,  -116, -56,  2,    36,   -111, -46,  -30,  -11,  -27,  -41,  55,   94,   63,   15,   94,   -107, 40,   -9,
      32,   93,   -83,  74,   8,    98,   33,   -104, 119,  113,  -70,  -34,  -18,  57,   93,   19,   -61,  63,   -109,
      89,   111,  -91,  89,   115,  42,   -24,  -29,  -38,  -28,  54,   41,   -56,  100,  78,   121,  -35,  90,   -77,
      -69,  -25,  -114, 61,   84,   59,   111,  22,   -7,   20,   -61,  -85,  -114, -12,  24,   69,   55,   -40,  101,
      -58,  -23,  95,   60,   28,   -39,  -36,  -94,  -119, 34,   36,   -3,   36,   -97,  -51,  -95,  42,   -83,  -70,
      -60,  120,  25,   27,   96,   -119, 57,   -79,  -10,  -15,  6,    63,   21,   -100, 8,    19,   61,   79,   64,
      -72,  -50,  80,   88,   15,   76,   -99,  10,   -53,  -70,  7,    -77,  -106, -79,  61,   121,  109,  83,   101,
      -110, -100, 119,  59,   84,   -5,   -96,  114,  14,   118,  -83,  -51,  55,   -119, 69,   -51,  -32,  59,   -69,
      -66,  0,    -40,  -55,  -5,   -22,  -55,  3,    -38,  6,    86,   -85,  -90,  120,  32,   -10,  19,   58,   -110,
      31,   -83,  34,   -64,  -2,   -94,  -55,  -94,  6,    93,   69,   -116, 101,  102,  -73,  -100, -97,  43,   21,
      113,  -103, -52,  -49,  -21,  -57,  120,  -74,  -79,  -26,  101,  19,   36,   -107, 101,  -88,  61,   13,   -71,
      -30,  -120, -106, -119, 40,   39,   69,   -46,  53,   54,   -57,  -4,   75,   -117, 36,   -75,  -88,  0,    -26,
      13,   46,   -107, -91,  -46,  -100, 110,  -104, 94,   67,   -3,   -56,  -69,  -60,  -121, 100,  -98,  111,  113,
      -62,  3,    -41,  39,   109,  63,   -83,  92,   -69,  59,   -119, -15,  91,   -25,  45,   -40,  -108, -17,  -18,
      -84,  -94,  -47,  -106, 24,   -17,  111,  -19,  -42,  -63,  -8,   80,   -77,  -92,  27,   58,   -103, 16,   -100,
      -87,  3,    -113, -22,  27,   -49,  -117, 47,   30,   80,   -27,  52,   7,    -71,  -18,  91,   18,   -52,  112,
      -64,  46,   100,  93,   109,  108,  -86,  -25,  -120, 108,  -55,  26,   -6,   85,   111,  -44,  -99,  -3,   62,
      38,   50,   37,   40,   -10,  91,   -103, -60,  8,    21,   -8,   -105, -81,  -101, 111,  -83,  -108, -86,  104,
      -48,  0,    -3,   24,   78,   119,  -30,  -100, 37,   -94,  -113, 13,   -24,  99,   -4,   -61,  79,   -22,  100,
      -49,  -75,  -86,  -27,  18,   69,   96,   -70,  12,   22,   45,   59,   8,    -3,   -55,  76,   32,   14,   -31,
      84,   -28,  -101, 91,   -89,  -37,  9,    103,  118,  83,   -55,  -80,  87,   36,   85,   111,  -3,   35,   -50,
      56,   -98,  -108, -106, -18,  2,    -86,  -7,   100,  -55,  105,  71,   -90,  90,   -15,  -8,   88,   -44,  -113,
      -78,  4,    118,  118,  120,  57,   97,   -3,   1,    -5,   -31,  93,   77,   -86,  -77,  -8,   101,  98,   -120,
      87,   -98,  39,   -52,  98,   31,   -97,  98,   -66,  105,  -101, 69,   34,   20,   -28,  -8,   -13,  -80,  58,
      -74,  -6,   -20,  -97,  -97,  -11,  -25,  75,   -16,  57,   29,   -82,  113,  -60,  -114, 23,   33,   69,   -119,
      -45,  24,   -108, -30,  85,   77,   -5,   -1,   84,   110,  42,   -86,  100,  -2,   50,   40,   64,   52,   -105,
      36,   30,   -28,  -46,  57,   -58,  -98,  37,   -99,  73,   55,   -52,  -95,  8,    -11,  -117, 11,   85,   -87,
      75,   88,   -58,  -17,  57,   -120, -96,  62,   -102, 65,   -83,  -119, 108,  -70,  -54,  -37,  -56,  60,   36,
      74,   108,  -7,   -66,  15,   -16,  85,   24,   58,   -109, -105, 73,   -120, 18,   -87,  17,   -58,  102,  -78,
      25,   -59,  -81,  -55,  34,   36,   30,   29,   108,  -21,  78,   -113, 84,   -110, 22,   -41,  76,   -105, 12,
      -120, 44,   80,   53,   -28,  -100, 121,  49,   -31,  -114, -4,   100,  32,   96,   98,   -19,  65,   -112, -27,
      24,   108,  101,  0,    118,  71,   108,  -116, 75,   55,   -43,  90,   -87,  20,   85,   -85,  82,   -45,  -52,
      -29,  -25,  55,   -46,  -36,  -56,  115,  -11,  -10,  69,   46,   14,   1,    63,   -7,   115,  -45,  1,    53,
      106,  -21,  -92,  -45,  -80,  -86,  41,   -5,   -31,  -3,   76,   -64,  -105, 23,   103,  90,   -24,  48,   -16,
      97,   -53,  93,   -90,  -56,  105,  118,  -22,  -15,  55,   28,   -115, 61,   -44,  -97,  27,   80,   -99,  13,
      96,   59,   30,   15,   108,  85,   -62,  -18,  51,   -86,  -93,  23,   38,   -94,  68,   -40,  -12,  -103, -33,
      -64,  88,   -80,  -26,  51,   104,  -57,  42,   -78,  58,   -111, -72,  28,   -44,  -54,  76,   31,   -73,  86,
      -30,  -21,  -24,  109,  98,   -50,  90,   -17,  -7,   40,   -29,  -12,  -69,  89,   -53,  71,   117,  103,  -102,
      2,    87,   -8,   115,  -84,  -94,  105,  -96,  70,   -73,  -26,  84,   -83,  -110, -33,  87,   12,   108,  99,
      -93,  18,   109,  106,  18,   66,   46,   62,   11,   118,  -43,  108,  -75,  94,   53,   -36,  -76,  89,   16,
      66,   -108, -52,  -78,  80,   -120, -13,  1,    -86,  -11,  -61,  107,  91,   -121, 99,   -120, 109,  -98,  14,
      -52,  81,   118,  -12,  -80,  29,   31,   -13,  68,   82,   114,  -9,   -66,  51,   -45,  25,   -113, 116,  -50,
      -54,  114,  -96,  -17,  -36,  79,   90,   59,   -105, -99,  -107, -79,  53,   27,   72,   97,   81,   -36,  -96,
      11,   39,   115,  104,  16,   -62,  -101, -117, 102,  -31,  30,   -51,  -42,  10,   -72,  70,   -47,  96,   64,
      -104, -80,  -23,  93,   -100, -8,   112,  -21,  -81,  33,   85,   -5,   -20,  43,   74,   -11,  55,   -97,  -22,
      -56,  -104, 40,   -8,   -64,  -37,  -40,  96,   -74,  -28,  25,   -20,  -33,  103,  -92,  1,    -24,  59,   -27,
      78,   -50,  70,   62,   -39,  -104, 25,   -34,  68,   -16,  112,  -87,  -83,  82,   50,   -95,  106,  -105, 84,
      -105, -27,  -50,  110,  -56,  43,   -3,   56,   72,   24,   114,  -69,  -20,  -70,  11,   55,   2,    66,   -85,
      103,  120,  48,   103,  104,  -83,  -63,  31,   -4,   2,    117,  89,   -106, 18,   82,   14,   43,   29,   -60,
      38,   84,   -4,   -73,  -81,  91,   -89,  36,   -83,  59,   57,   -2,   18,   107,  -102, -54,  -117, -83,  -22,
      55,   -117, -108, 38,   116,  -82,  -15,  81,   -17,  6,    46,   -45,  -114, 95,   -29,  -89,  75,   57,   -60,
      57,   -102, 36,   59,   14,   -95,  -43,  3,    -116, -63,  -3,   87,   -36,  68,   -8,   68,   -115, -106, -56,
      -42,  87,   -7,   98,   53,   -99,  -37,  -30,  100,  -14,  110,  27,   -62,  -30,  -39,  -15,  -10,  75,   56,
      88,   -82,  -29,  -73,  20,   83,   -67,  64,   -63,  -71,  -17,  25,   -32,  -3,   119,  27,   83,   92,   -91,
      2,    -94,  74,   -13,  42,   -71,  -11,  41,   -91,  -71,  -31,  16,   114,  -83,  49,   -38,  111,  -4,   20,
      -69,  -66,  -81,  -10,  62,   -19,  -36,  74,   -109, -43,  35,   -112, -59,  -120, 92,   -1,   95,   -72,  68,
      4,    -121, -105, 1,    34,   55,   -62,  -11,  -36,  42,   44,   -49,  -96,  -70,  8,    48,   41,   115,  82,
      10,   -77,  112,  68,   53,   23,   11,   -98,  -118, 105,  -40,  -14,  -34,  -36,  -2,   -33,  -47,  63,   -35,
      -96,  -21,  -38,  -103, 14,   -1,   -76,  53,   23,   88,   -84,  -79,  109,  10,   119,  56,   -49,  -4,   -119,
      107,  -68,  -72,  -57,  42,   2,    96,   55,   -24,  91,   -16,  113,  -103, 37,   67,   74,   103,  -63,  71,
      93,   97,   -92,  -5,   -89,  114,  -87,  48,   65,   34,   -105, -77,  -25,  -116, -8,   2,    -98,  22,   70,
      -97,  -42,  -78,  55,   -72,  34,   71,   55,   -24,  12,   110,  94,   93,   -45,  87,   77,   -31,  95,   109,
      70,   -17,  45,   79,   -114, -44,  102,  -49,  -72,  -59,  -110, -93,  36,   -50,  -64,  18,   67,   88,   1,
      86,   27,   -115, -43,  -87,  -25,  -40,  -111, -75,  -34,  13,   -4,   -101, -47,  -58,  66,   49,   -65,  51,
      -99,  -61,  -106, 15,   39,   -72,  -21,  -61,  -3,   -40,  -57,  58,   76,   -4,   1,    -46,  -81,  -24,  -29,
      64,   99,   -2,   -20,  -39,  -93,  76,   29,   -108, 42,   50,   -63,  -100, -50,  -100, 37,   68,   41,   -49,
      78,   -88,  30,   -86,  32,   83,   1,    -52,  -3,   -44,  62,   99,   -79,  -101, -48,  -15,  -38,  -47,  11,
      -70,  -1,   4,    18,   13,   -71,  -70,  87,   117,  8,    -21,  46,   8,    113,  12,   -55,  21,   -10,  -111,
      69,   -10,  104,  76,   -35,  -30,  -22,  85,   31,   91,   -87,  -39,  -58,  -12,  -10,  102,  -50,  60,   19,
      -95,  60,   -64,  119,  85,   -17,  -37,  121,  -101, -80,  -18,  -26,  -73,  105,  21,   44,   15,   -30,  -21,
      -46,  94,   -33,  109,  54,   -108, -47,  -20,  -81,  44,   21,   76,   -64,  -48,  98,   -97,  -58,  44,   67,
      -16,  121,  76,   118,  -67,  -60,  77,   44,   -20,  0,    -63,  14,   38,   51,   -59,  30,   30,   -88,  -31,
      68,   -31,  53,   23,   -16,  23,   58,   -24,  112,  -71,  25,   34,   114,  -78,  -17,  -89,  -96,  23,   -90,
      56,   99,   -37,  -111, -79,  69,   -39,  -83,  21,   87,   -54,  -121, 68,   -50,  66,   -117, 118,  -84,  114,
      -109, 114,  53,   -90,  70,   110,  -65,  -13,  -97,  -98,  101,  -96,  -50,  114,  -61,  -46,  -68,  -89,  43,
      45,   19,   -119, 18,   75,   56,   -63,  83,   30,   37,   -19,  59,   94,   120,  32,   59,   82,   -43,  108,
      17,   92,   121,  103,  44,   -34,  -85,  -89,  40,   -47,  -17,  -11,  -85,  -34,  57,   -90,  42,   91,   -47,
      54,   -48,  -26,  -76,  111,  -11,  42,   -4,   -39,  43,   -87,  -22,  -22,  11,   95,   99,   16,   -60,  20,
      22,   -2,   -112, -60,  -107, 109,  -23,  -8,   -7,   20,   -115, -118, -31,  -39,  -88,  108,  -68,  -86,  71,
      -119, -9,   102,  34,   -98,  111,  106,  -110, -8,   -60,  48,   51,   -22,  108,  -13,  -37,  87,   54,   17,
      -101, -88,  8,    -114, 84,   78,   56,   -78,  -70,  -13,  -40,  115,  89,   -20,  -113, -9,   -45,  -115, -105,
      64,   119,  -19,  107,  -55,  -99,  92,   -16,  23,   -29,  75,   46,   -112, 109,  -119, 19,   37,   -63,  -69,
      -87,  -8,   -64,  94,   -97,  96,   54,   29,   -68,  -77,  -71,  4,    98,   -99,  -26,  -55,  45,   -84,  80,
      72,   24,   14,   -44,  -21,  33,   40,   -74,  -26,  -33,  78,   -13,  18,   42,   23,   19,   44,   66,   -5,
      105,  -20,  -73,  -118, -7,   -102, 47,   -105, -3,   -89,  -113, 97,   79,   61,   -61,  -67,  0,    -64,  -14,
      -71,  119,  -78,  66,   113,  -79,  99,   90,   13,   52,   -1,   28,   -53,  -71,  116,  95,   -117, 71,   39,
      -57,  33,   -116, 8,    29,   -52,  10,   66,   6,    63,   -59,  109,  5,    15,   -74,  -88,  13,   -115, -43,
      -119, -6,   -9,   -33,  -33,  89,   104,  -36,  83,   16,   92,   98,   -80,  -67,  112,  -35,  -43,  55,   37,
      -112, 23,   -1,   25,   -22,  -24,  -84,  -104, -50,  18,   -18,  -117, 50,   -49,  -51,  54,   -90,  121,  51,
      121,  -23,  -107, 16,   -9,   106,  82,   32,   -49,  -77,  5,    -19,  -81,  110,  54,   -72,  -21,  -117, -2,
      81,   110,  -8,   100,  -1,   36,   -64,  -89,  92,   -73,  -93,  -1,   69,   115,  120,  -28,  -87,  -58,  45,
      -34,  48,   -54,  111,  40,   4,    -19,  0,    93,   57,   -93,  39,   84,   45,   87,   -115, 103,  -100, 49,
      115,  -14,  0,    -7,   -57,  -29,  94,   -80,  -52,  -55,  84,   82,   -40,  91,   -93,  36,   -115, -92,  51,
      -20,  75,   -107, -6,   64,   -83,  -20,  51,   -7,   0,    75,   91,   -18,  -93,  -60,  120,  -20,  -70,  -105,
      -17,  21,   117,  -3,   61,   -29,  108,  -120, -27,  -94,  -35,  -78,  -112, -5,   -104, -22,  -29,  -111, 4,
      65,   114,  0,
  };
#endif
  flex_trit_t* out_1 = iota_sign_signature_gen_flex_trits(SEED, 2, 2, SEED);

  TEST_ASSERT_EQUAL_MEMORY(out_1, EX, NUM_FLEX_TRITS_FOR_TRITS(ISS_KEY_LENGTH * 2));

  free(out_1);
}

int main(void) {
  UNITY_BEGIN();

  RUN_TEST(test_address_generation);
  RUN_TEST(test_signature);
  RUN_TEST(test_flex_address_generation);
  RUN_TEST(test_flex_signature);

  return UNITY_END();
}
