Skip to content
Extraits de code Groupes Projets
gf256_tables.h 335 ko
Newer Older
  • Learn to ignore specific revisions
  • Louis Navarre's avatar
    Louis Navarre a validé
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
    #ifndef GF256_TABLES_H
    #define GF256_TABLES_H
    
    // source - https://github.com/irtf-nwcrg/swif-codec/blob/master/src/swif_table-mul-gf256.c
    
    /*
      File automatically generated by: 
      python3 writeGaloisFieldTable.py 8 
    ---------------------------------------------------------------------------
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
     "Software"), to deal in the Software without restriction, including
     without limitation the rights to use, copy, modify, merge, publish,
     distribute, sublicense, and/or sell copies of the Software, and to
     permit persons to whom the Software is furnished to do so, subject to
     the following conditions:
    
     The above copyright notice and this permission notice shall be
     included in all copies or substantial portions of the Software.
    
     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    ---------------------------------------------------------------------------
    */
    
    #include <stdint.h>
    
    static const uint8_t gf256_mul_table[256][256] = {
        {0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0},
        {0, 1, 2, 3, 4, 5, 6, 7,
         8, 9, 10, 11, 12, 13, 14, 15,
         16, 17, 18, 19, 20, 21, 22, 23,
         24, 25, 26, 27, 28, 29, 30, 31,
         32, 33, 34, 35, 36, 37, 38, 39,
         40, 41, 42, 43, 44, 45, 46, 47,
         48, 49, 50, 51, 52, 53, 54, 55,
         56, 57, 58, 59, 60, 61, 62, 63,
         64, 65, 66, 67, 68, 69, 70, 71,
         72, 73, 74, 75, 76, 77, 78, 79,
         80, 81, 82, 83, 84, 85, 86, 87,
         88, 89, 90, 91, 92, 93, 94, 95,
         96, 97, 98, 99, 100, 101, 102, 103,
         104, 105, 106, 107, 108, 109, 110, 111,
         112, 113, 114, 115, 116, 117, 118, 119,
         120, 121, 122, 123, 124, 125, 126, 127,
         128, 129, 130, 131, 132, 133, 134, 135,
         136, 137, 138, 139, 140, 141, 142, 143,
         144, 145, 146, 147, 148, 149, 150, 151,
         152, 153, 154, 155, 156, 157, 158, 159,
         160, 161, 162, 163, 164, 165, 166, 167,
         168, 169, 170, 171, 172, 173, 174, 175,
         176, 177, 178, 179, 180, 181, 182, 183,
         184, 185, 186, 187, 188, 189, 190, 191,
         192, 193, 194, 195, 196, 197, 198, 199,
         200, 201, 202, 203, 204, 205, 206, 207,
         208, 209, 210, 211, 212, 213, 214, 215,
         216, 217, 218, 219, 220, 221, 222, 223,
         224, 225, 226, 227, 228, 229, 230, 231,
         232, 233, 234, 235, 236, 237, 238, 239,
         240, 241, 242, 243, 244, 245, 246, 247,
         248, 249, 250, 251, 252, 253, 254, 255},
        {0, 2, 4, 6, 8, 10, 12, 14,
         16, 18, 20, 22, 24, 26, 28, 30,
         32, 34, 36, 38, 40, 42, 44, 46,
         48, 50, 52, 54, 56, 58, 60, 62,
         64, 66, 68, 70, 72, 74, 76, 78,
         80, 82, 84, 86, 88, 90, 92, 94,
         96, 98, 100, 102, 104, 106, 108, 110,
         112, 114, 116, 118, 120, 122, 124, 126,
         128, 130, 132, 134, 136, 138, 140, 142,
         144, 146, 148, 150, 152, 154, 156, 158,
         160, 162, 164, 166, 168, 170, 172, 174,
         176, 178, 180, 182, 184, 186, 188, 190,
         192, 194, 196, 198, 200, 202, 204, 206,
         208, 210, 212, 214, 216, 218, 220, 222,
         224, 226, 228, 230, 232, 234, 236, 238,
         240, 242, 244, 246, 248, 250, 252, 254,
         29, 31, 25, 27, 21, 23, 17, 19,
         13, 15, 9, 11, 5, 7, 1, 3,
         61, 63, 57, 59, 53, 55, 49, 51,
         45, 47, 41, 43, 37, 39, 33, 35,
         93, 95, 89, 91, 85, 87, 81, 83,
         77, 79, 73, 75, 69, 71, 65, 67,
         125, 127, 121, 123, 117, 119, 113, 115,
         109, 111, 105, 107, 101, 103, 97, 99,
         157, 159, 153, 155, 149, 151, 145, 147,
         141, 143, 137, 139, 133, 135, 129, 131,
         189, 191, 185, 187, 181, 183, 177, 179,
         173, 175, 169, 171, 165, 167, 161, 163,
         221, 223, 217, 219, 213, 215, 209, 211,
         205, 207, 201, 203, 197, 199, 193, 195,
         253, 255, 249, 251, 245, 247, 241, 243,
         237, 239, 233, 235, 229, 231, 225, 227},
        {0, 3, 6, 5, 12, 15, 10, 9,
         24, 27, 30, 29, 20, 23, 18, 17,
         48, 51, 54, 53, 60, 63, 58, 57,
         40, 43, 46, 45, 36, 39, 34, 33,
         96, 99, 102, 101, 108, 111, 106, 105,
         120, 123, 126, 125, 116, 119, 114, 113,
         80, 83, 86, 85, 92, 95, 90, 89,
         72, 75, 78, 77, 68, 71, 66, 65,
         192, 195, 198, 197, 204, 207, 202, 201,
         216, 219, 222, 221, 212, 215, 210, 209,
         240, 243, 246, 245, 252, 255, 250, 249,
         232, 235, 238, 237, 228, 231, 226, 225,
         160, 163, 166, 165, 172, 175, 170, 169,
         184, 187, 190, 189, 180, 183, 178, 177,
         144, 147, 150, 149, 156, 159, 154, 153,
         136, 139, 142, 141, 132, 135, 130, 129,
         157, 158, 155, 152, 145, 146, 151, 148,
         133, 134, 131, 128, 137, 138, 143, 140,
         173, 174, 171, 168, 161, 162, 167, 164,
         181, 182, 179, 176, 185, 186, 191, 188,
         253, 254, 251, 248, 241, 242, 247, 244,
         229, 230, 227, 224, 233, 234, 239, 236,
         205, 206, 203, 200, 193, 194, 199, 196,
         213, 214, 211, 208, 217, 218, 223, 220,
         93, 94, 91, 88, 81, 82, 87, 84,
         69, 70, 67, 64, 73, 74, 79, 76,
         109, 110, 107, 104, 97, 98, 103, 100,
         117, 118, 115, 112, 121, 122, 127, 124,
         61, 62, 59, 56, 49, 50, 55, 52,
         37, 38, 35, 32, 41, 42, 47, 44,
         13, 14, 11, 8, 1, 2, 7, 4,
         21, 22, 19, 16, 25, 26, 31, 28},
        {0, 4, 8, 12, 16, 20, 24, 28,
         32, 36, 40, 44, 48, 52, 56, 60,
         64, 68, 72, 76, 80, 84, 88, 92,
         96, 100, 104, 108, 112, 116, 120, 124,
         128, 132, 136, 140, 144, 148, 152, 156,
         160, 164, 168, 172, 176, 180, 184, 188,
         192, 196, 200, 204, 208, 212, 216, 220,
         224, 228, 232, 236, 240, 244, 248, 252,
         29, 25, 21, 17, 13, 9, 5, 1,
         61, 57, 53, 49, 45, 41, 37, 33,
         93, 89, 85, 81, 77, 73, 69, 65,
         125, 121, 117, 113, 109, 105, 101, 97,
         157, 153, 149, 145, 141, 137, 133, 129,
         189, 185, 181, 177, 173, 169, 165, 161,
         221, 217, 213, 209, 205, 201, 197, 193,
         253, 249, 245, 241, 237, 233, 229, 225,
         58, 62, 50, 54, 42, 46, 34, 38,
         26, 30, 18, 22, 10, 14, 2, 6,
         122, 126, 114, 118, 106, 110, 98, 102,
         90, 94, 82, 86, 74, 78, 66, 70,
         186, 190, 178, 182, 170, 174, 162, 166,
         154, 158, 146, 150, 138, 142, 130, 134,
         250, 254, 242, 246, 234, 238, 226, 230,
         218, 222, 210, 214, 202, 206, 194, 198,
         39, 35, 47, 43, 55, 51, 63, 59,
         7, 3, 15, 11, 23, 19, 31, 27,
         103, 99, 111, 107, 119, 115, 127, 123,
         71, 67, 79, 75, 87, 83, 95, 91,
         167, 163, 175, 171, 183, 179, 191, 187,
         135, 131, 143, 139, 151, 147, 159, 155,
         231, 227, 239, 235, 247, 243, 255, 251,
         199, 195, 207, 203, 215, 211, 223, 219},
        {0, 5, 10, 15, 20, 17, 30, 27,
         40, 45, 34, 39, 60, 57, 54, 51,
         80, 85, 90, 95, 68, 65, 78, 75,
         120, 125, 114, 119, 108, 105, 102, 99,
         160, 165, 170, 175, 180, 177, 190, 187,
         136, 141, 130, 135, 156, 153, 150, 147,
         240, 245, 250, 255, 228, 225, 238, 235,
         216, 221, 210, 215, 204, 201, 198, 195,
         93, 88, 87, 82, 73, 76, 67, 70,
         117, 112, 127, 122, 97, 100, 107, 110,
         13, 8, 7, 2, 25, 28, 19, 22,
         37, 32, 47, 42, 49, 52, 59, 62,
         253, 248, 247, 242, 233, 236, 227, 230,
         213, 208, 223, 218, 193, 196, 203, 206,
         173, 168, 167, 162, 185, 188, 179, 182,
         133, 128, 143, 138, 145, 148, 155, 158,
         186, 191, 176, 181, 174, 171, 164, 161,
         146, 151, 152, 157, 134, 131, 140, 137,
         234, 239, 224, 229, 254, 251, 244, 241,
         194, 199, 200, 205, 214, 211, 220, 217,
         26, 31, 16, 21, 14, 11, 4, 1,
         50, 55, 56, 61, 38, 35, 44, 41,
         74, 79, 64, 69, 94, 91, 84, 81,
         98, 103, 104, 109, 118, 115, 124, 121,
         231, 226, 237, 232, 243, 246, 249, 252,
         207, 202, 197, 192, 219, 222, 209, 212,
         183, 178, 189, 184, 163, 166, 169, 172,
         159, 154, 149, 144, 139, 142, 129, 132,
         71, 66, 77, 72, 83, 86, 89, 92,
         111, 106, 101, 96, 123, 126, 113, 116,
         23, 18, 29, 24, 3, 6, 9, 12,
         63, 58, 53, 48, 43, 46, 33, 36},
        {0, 6, 12, 10, 24, 30, 20, 18,
         48, 54, 60, 58, 40, 46, 36, 34,
         96, 102, 108, 106, 120, 126, 116, 114,
         80, 86, 92, 90, 72, 78, 68, 66,
         192, 198, 204, 202, 216, 222, 212, 210,
         240, 246, 252, 250, 232, 238, 228, 226,
         160, 166, 172, 170, 184, 190, 180, 178,
         144, 150, 156, 154, 136, 142, 132, 130,
         157, 155, 145, 151, 133, 131, 137, 143,
         173, 171, 161, 167, 181, 179, 185, 191,
         253, 251, 241, 247, 229, 227, 233, 239,
         205, 203, 193, 199, 213, 211, 217, 223,
         93, 91, 81, 87, 69, 67, 73, 79,
         109, 107, 97, 103, 117, 115, 121, 127,
         61, 59, 49, 55, 37, 35, 41, 47,
         13, 11, 1, 7, 21, 19, 25, 31,
         39, 33, 43, 45, 63, 57, 51, 53,
         23, 17, 27, 29, 15, 9, 3, 5,
         71, 65, 75, 77, 95, 89, 83, 85,
         119, 113, 123, 125, 111, 105, 99, 101,
         231, 225, 235, 237, 255, 249, 243, 245,
         215, 209, 219, 221, 207, 201, 195, 197,
         135, 129, 139, 141, 159, 153, 147, 149,
         183, 177, 187, 189, 175, 169, 163, 165,
         186, 188, 182, 176, 162, 164, 174, 168,
         138, 140, 134, 128, 146, 148, 158, 152,
         218, 220, 214, 208, 194, 196, 206, 200,
         234, 236, 230, 224, 242, 244, 254, 248,
         122, 124, 118, 112, 98, 100, 110, 104,
         74, 76, 70, 64, 82, 84, 94, 88,
         26, 28, 22, 16, 2, 4, 14, 8,
         42, 44, 38, 32, 50, 52, 62, 56},
        {0, 7, 14, 9, 28, 27, 18, 21,
         56, 63, 54, 49, 36, 35, 42, 45,
         112, 119, 126, 121, 108, 107, 98, 101,
         72, 79, 70, 65, 84, 83, 90, 93,
         224, 231, 238, 233, 252, 251, 242, 245,
         216, 223, 214, 209, 196, 195, 202, 205,
         144, 151, 158, 153, 140, 139, 130, 133,
         168, 175, 166, 161, 180, 179, 186, 189,
         221, 218, 211, 212, 193, 198, 207, 200,
         229, 226, 235, 236, 249, 254, 247, 240,
         173, 170, 163, 164, 177, 182, 191, 184,
         149, 146, 155, 156, 137, 142, 135, 128,
         61, 58, 51, 52, 33, 38, 47, 40,
         5, 2, 11, 12, 25, 30, 23, 16,
         77, 74, 67, 68, 81, 86, 95, 88,
         117, 114, 123, 124, 105, 110, 103, 96,
         167, 160, 169, 174, 187, 188, 181, 178,
         159, 152, 145, 150, 131, 132, 141, 138,
         215, 208, 217, 222, 203, 204, 197, 194,
         239, 232, 225, 230, 243, 244, 253, 250,
         71, 64, 73, 78, 91, 92, 85, 82,
         127, 120, 113, 118, 99, 100, 109, 106,
         55, 48, 57, 62, 43, 44, 37, 34,
         15, 8, 1, 6, 19, 20, 29, 26,
         122, 125, 116, 115, 102, 97, 104, 111,
         66, 69, 76, 75, 94, 89, 80, 87,
         10, 13, 4, 3, 22, 17, 24, 31,
         50, 53, 60, 59, 46, 41, 32, 39,
         154, 157, 148, 147, 134, 129, 136, 143,
         162, 165, 172, 171, 190, 185, 176, 183,
         234, 237, 228, 227, 246, 241, 248, 255,
         210, 213, 220, 219, 206, 201, 192, 199},
        {0, 8, 16, 24, 32, 40, 48, 56,
         64, 72, 80, 88, 96, 104, 112, 120,
         128, 136, 144, 152, 160, 168, 176, 184,
         192, 200, 208, 216, 224, 232, 240, 248,
         29, 21, 13, 5, 61, 53, 45, 37,
         93, 85, 77, 69, 125, 117, 109, 101,
         157, 149, 141, 133, 189, 181, 173, 165,
         221, 213, 205, 197, 253, 245, 237, 229,
         58, 50, 42, 34, 26, 18, 10, 2,
         122, 114, 106, 98, 90, 82, 74, 66,
         186, 178, 170, 162, 154, 146, 138, 130,
         250, 242, 234, 226, 218, 210, 202, 194,
         39, 47, 55, 63, 7, 15, 23, 31,
         103, 111, 119, 127, 71, 79, 87, 95,
         167, 175, 183, 191, 135, 143, 151, 159,
         231, 239, 247, 255, 199, 207, 215, 223,
         116, 124, 100, 108, 84, 92, 68, 76,
         52, 60, 36, 44, 20, 28, 4, 12,
         244, 252, 228, 236, 212, 220, 196, 204,
         180, 188, 164, 172, 148, 156, 132, 140,
         105, 97, 121, 113, 73, 65, 89, 81,
         41, 33, 57, 49, 9, 1, 25, 17,
         233, 225, 249, 241, 201, 193, 217, 209,
         169, 161, 185, 177, 137, 129, 153, 145,
         78, 70, 94, 86, 110, 102, 126, 118,
         14, 6, 30, 22, 46, 38, 62, 54,
         206, 198, 222, 214, 238, 230, 254, 246,
         142, 134, 158, 150, 174, 166, 190, 182,
         83, 91, 67, 75, 115, 123, 99, 107,
         19, 27, 3, 11, 51, 59, 35, 43,
         211, 219, 195, 203, 243, 251, 227, 235,
         147, 155, 131, 139, 179, 187, 163, 171},
        {0, 9, 18, 27, 36, 45, 54, 63,
         72, 65, 90, 83, 108, 101, 126, 119,
         144, 153, 130, 139, 180, 189, 166, 175,
         216, 209, 202, 195, 252, 245, 238, 231,
         61, 52, 47, 38, 25, 16, 11, 2,
         117, 124, 103, 110, 81, 88, 67, 74,
         173, 164, 191, 182, 137, 128, 155, 146,
         229, 236, 247, 254, 193, 200, 211, 218,
         122, 115, 104, 97, 94, 87, 76, 69,
         50, 59, 32, 41, 22, 31, 4, 13,
         234, 227, 248, 241, 206, 199, 220, 213,
         162, 171, 176, 185, 134, 143, 148, 157,
         71, 78, 85, 92, 99, 106, 113, 120,
         15, 6, 29, 20, 43, 34, 57, 48,
         215, 222, 197, 204, 243, 250, 225, 232,
         159, 150, 141, 132, 187, 178, 169, 160,
         244, 253, 230, 239, 208, 217, 194, 203,
         188, 181, 174, 167, 152, 145, 138, 131,
         100, 109, 118, 127, 64, 73, 82, 91,
         44, 37, 62, 55, 8, 1, 26, 19,
         201, 192, 219, 210, 237, 228, 255, 246,
         129, 136, 147, 154, 165, 172, 183, 190,
         89, 80, 75, 66, 125, 116, 111, 102,
         17, 24, 3, 10, 53, 60, 39, 46,
         142, 135, 156, 149, 170, 163, 184, 177,
         198, 207, 212, 221, 226, 235, 240, 249,
         30, 23, 12, 5, 58, 51, 40, 33,
         86, 95, 68, 77, 114, 123, 96, 105,
         179, 186, 161, 168, 151, 158, 133, 140,
         251, 242, 233, 224, 223, 214, 205, 196,
         35, 42, 49, 56, 7, 14, 21, 28,
         107, 98, 121, 112, 79, 70, 93, 84},
        {0, 10, 20, 30, 40, 34, 60, 54,
         80, 90, 68, 78, 120, 114, 108, 102,
         160, 170, 180, 190, 136, 130, 156, 150,
         240, 250, 228, 238, 216, 210, 204, 198,
         93, 87, 73, 67, 117, 127, 97, 107,
         13, 7, 25, 19, 37, 47, 49, 59,
         253, 247, 233, 227, 213, 223, 193, 203,
         173, 167, 185, 179, 133, 143, 145, 155,
         186, 176, 174, 164, 146, 152, 134, 140,
         234, 224, 254, 244, 194, 200, 214, 220,
         26, 16, 14, 4, 50, 56, 38, 44,
         74, 64, 94, 84, 98, 104, 118, 124,
         231, 237, 243, 249, 207, 197, 219, 209,
         183, 189, 163, 169, 159, 149, 139, 129,
         71, 77, 83, 89, 111, 101, 123, 113,
         23, 29, 3, 9, 63, 53, 43, 33,
         105, 99, 125, 119, 65, 75, 85, 95,
         57, 51, 45, 39, 17, 27, 5, 15,
         201, 195, 221, 215, 225, 235, 245, 255,
         153, 147, 141, 135, 177, 187, 165, 175,
         52, 62, 32, 42, 28, 22, 8, 2,
         100, 110, 112, 122, 76, 70, 88, 82,
         148, 158, 128, 138, 188, 182, 168, 162,
         196, 206, 208, 218, 236, 230, 248, 242,
         211, 217, 199, 205, 251, 241, 239, 229,
         131, 137, 151, 157, 171, 161, 191, 181,
         115, 121, 103, 109, 91, 81, 79, 69,
         35, 41, 55, 61, 11, 1, 31, 21,
         142, 132, 154, 144, 166, 172, 178, 184,
         222, 212, 202, 192, 246, 252, 226, 232,
         46, 36, 58, 48, 6, 12, 18, 24,
         126, 116, 106, 96, 86, 92, 66, 72},
        {0, 11, 22, 29, 44, 39, 58, 49,
         88, 83, 78, 69, 116, 127, 98, 105,
         176, 187, 166, 173, 156, 151, 138, 129,
         232, 227, 254, 245, 196, 207, 210, 217,
         125, 118, 107, 96, 81, 90, 71, 76,
         37, 46, 51, 56, 9, 2, 31, 20,
         205, 198, 219, 208, 225, 234, 247, 252,
         149, 158, 131, 136, 185, 178, 175, 164,
         250, 241, 236, 231, 214, 221, 192, 203,
         162, 169, 180, 191, 142, 133, 152, 147,
         74, 65, 92, 87, 102, 109, 112, 123,
         18, 25, 4, 15, 62, 53, 40, 35,
         135, 140, 145, 154, 171, 160, 189, 182,
         223, 212, 201, 194, 243, 248, 229, 238,
         55, 60, 33, 42, 27, 16, 13, 6,
         111, 100, 121, 114, 67, 72, 85, 94,
         233, 226, 255, 244, 197, 206, 211, 216,
         177, 186, 167, 172, 157, 150, 139, 128,
         89, 82, 79, 68, 117, 126, 99, 104,
         1, 10, 23, 28, 45, 38, 59, 48,
         148, 159, 130, 137, 184, 179, 174, 165,
         204, 199, 218, 209, 224, 235, 246, 253,
         36, 47, 50, 57, 8, 3, 30, 21,
         124, 119, 106, 97, 80, 91, 70, 77,
         19, 24, 5, 14, 63, 52, 41, 34,
         75, 64, 93, 86, 103, 108, 113, 122,
         163, 168, 181, 190, 143, 132, 153, 146,
         251, 240, 237, 230, 215, 220, 193, 202,
         110, 101, 120, 115, 66, 73, 84, 95,
         54, 61, 32, 43, 26, 17, 12, 7,
         222, 213, 200, 195, 242, 249, 228, 239,
         134, 141, 144, 155, 170, 161, 188, 183},
        {0, 12, 24, 20, 48, 60, 40, 36,
         96, 108, 120, 116, 80, 92, 72, 68,
         192, 204, 216, 212, 240, 252, 232, 228,
         160, 172, 184, 180, 144, 156, 136, 132,
         157, 145, 133, 137, 173, 161, 181, 185,
         253, 241, 229, 233, 205, 193, 213, 217,
         93, 81, 69, 73, 109, 97, 117, 121,
         61, 49, 37, 41, 13, 1, 21, 25,
         39, 43, 63, 51, 23, 27, 15, 3,
         71, 75, 95, 83, 119, 123, 111, 99,
         231, 235, 255, 243, 215, 219, 207, 195,
         135, 139, 159, 147, 183, 187, 175, 163,
         186, 182, 162, 174, 138, 134, 146, 158,
         218, 214, 194, 206, 234, 230, 242, 254,
         122, 118, 98, 110, 74, 70, 82, 94,
         26, 22, 2, 14, 42, 38, 50, 62,
         78, 66, 86, 90, 126, 114, 102, 106,
         46, 34, 54, 58, 30, 18, 6, 10,
         142, 130, 150, 154, 190, 178, 166, 170,
         238, 226, 246, 250, 222, 210, 198, 202,
         211, 223, 203, 199, 227, 239, 251, 247,
         179, 191, 171, 167, 131, 143, 155, 151,
         19, 31, 11, 7, 35, 47, 59, 55,
         115, 127, 107, 103, 67, 79, 91, 87,
         105, 101, 113, 125, 89, 85, 65, 77,
         9, 5, 17, 29, 57, 53, 33, 45,
         169, 165, 177, 189, 153, 149, 129, 141,
         201, 197, 209, 221, 249, 245, 225, 237,
         244, 248, 236, 224, 196, 200, 220, 208,
         148, 152, 140, 128, 164, 168, 188, 176,
         52, 56, 44, 32, 4, 8, 28, 16,
         84, 88, 76, 64, 100, 104, 124, 112},
        {0, 13, 26, 23, 52, 57, 46, 35,
         104, 101, 114, 127, 92, 81, 70, 75,
         208, 221, 202, 199, 228, 233, 254, 243,
         184, 181, 162, 175, 140, 129, 150, 155,
         189, 176, 167, 170, 137, 132, 147, 158,
         213, 216, 207, 194, 225, 236, 251, 246,
         109, 96, 119, 122, 89, 84, 67, 78,
         5, 8, 31, 18, 49, 60, 43, 38,
         103, 106, 125, 112, 83, 94, 73, 68,
         15, 2, 21, 24, 59, 54, 33, 44,
         183, 186, 173, 160, 131, 142, 153, 148,
         223, 210, 197, 200, 235, 230, 241, 252,
         218, 215, 192, 205, 238, 227, 244, 249,
         178, 191, 168, 165, 134, 139, 156, 145,
         10, 7, 16, 29, 62, 51, 36, 41,
         98, 111, 120, 117, 86, 91, 76, 65,
         206, 195, 212, 217, 250, 247, 224, 237,
         166, 171, 188, 177, 146, 159, 136, 133,
         30, 19, 4, 9, 42, 39, 48, 61,
         118, 123, 108, 97, 66, 79, 88, 85,
         115, 126, 105, 100, 71, 74, 93, 80,
         27, 22, 1, 12, 47, 34, 53, 56,
         163, 174, 185, 180, 151, 154, 141, 128,
         203, 198, 209, 220, 255, 242, 229, 232,
         169, 164, 179, 190, 157, 144, 135, 138,
         193, 204, 219, 214, 245, 248, 239, 226,
         121, 116, 99, 110, 77, 64, 87, 90,
         17, 28, 11, 6, 37, 40, 63, 50,
         20, 25, 14, 3, 32, 45, 58, 55,
         124, 113, 102, 107, 72, 69, 82, 95,
         196, 201, 222, 211, 240, 253, 234, 231,
         172, 161, 182, 187, 152, 149, 130, 143},
        {0, 14, 28, 18, 56, 54, 36, 42,
         112, 126, 108, 98, 72, 70, 84, 90,
         224, 238, 252, 242, 216, 214, 196, 202,
         144, 158, 140, 130, 168, 166, 180, 186,
         221, 211, 193, 207, 229, 235, 249, 247,
         173, 163, 177, 191, 149, 155, 137, 135,
         61, 51, 33, 47, 5, 11, 25, 23,
         77, 67, 81, 95, 117, 123, 105, 103,
         167, 169, 187, 181, 159, 145, 131, 141,
         215, 217, 203, 197, 239, 225, 243, 253,
         71, 73, 91, 85, 127, 113, 99, 109,
         55, 57, 43, 37, 15, 1, 19, 29,
         122, 116, 102, 104, 66, 76, 94, 80,
         10, 4, 22, 24, 50, 60, 46, 32,
         154, 148, 134, 136, 162, 172, 190, 176,
         234, 228, 246, 248, 210, 220, 206, 192,
         83, 93, 79, 65, 107, 101, 119, 121,
         35, 45, 63, 49, 27, 21, 7, 9,
         179, 189, 175, 161, 139, 133, 151, 153,
         195, 205, 223, 209, 251, 245, 231, 233,
         142, 128, 146, 156, 182, 184, 170, 164,
         254, 240, 226, 236, 198, 200, 218, 212,
         110, 96, 114, 124, 86, 88, 74, 68,
         30, 16, 2, 12, 38, 40, 58, 52,
         244, 250, 232, 230, 204, 194, 208, 222,
         132, 138, 152, 150, 188, 178, 160, 174,
         20, 26, 8, 6, 44, 34, 48, 62,
         100, 106, 120, 118, 92, 82, 64, 78,
         41, 39, 53, 59, 17, 31, 13, 3,
         89, 87, 69, 75, 97, 111, 125, 115,
         201, 199, 213, 219, 241, 255, 237, 227,
         185, 183, 165, 171, 129, 143, 157, 147},
        {0, 15, 30, 17, 60, 51, 34, 45,
         120, 119, 102, 105, 68, 75, 90, 85,
         240, 255, 238, 225, 204, 195, 210, 221,
         136, 135, 150, 153, 180, 187, 170, 165,
         253, 242, 227, 236, 193, 206, 223, 208,
         133, 138, 155, 148, 185, 182, 167, 168,
         13, 2, 19, 28, 49, 62, 47, 32,
         117, 122, 107, 100, 73, 70, 87, 88,
         231, 232, 249, 246, 219, 212, 197, 202,
         159, 144, 129, 142, 163, 172, 189, 178,
         23, 24, 9, 6, 43, 36, 53, 58,
         111, 96, 113, 126, 83, 92, 77, 66,
         26, 21, 4, 11, 38, 41, 56, 55,
         98, 109, 124, 115, 94, 81, 64, 79,
         234, 229, 244, 251, 214, 217, 200, 199,
         146, 157, 140, 131, 174, 161, 176, 191,
         211, 220, 205, 194, 239, 224, 241, 254,
         171, 164, 181, 186, 151, 152, 137, 134,
         35, 44, 61, 50, 31, 16, 1, 14,
         91, 84, 69, 74, 103, 104, 121, 118,
         46, 33, 48, 63, 18, 29, 12, 3,
         86, 89, 72, 71, 106, 101, 116, 123,
         222, 209, 192, 207, 226, 237, 252, 243,
         166, 169, 184, 183, 154, 149, 132, 139,
         52, 59, 42, 37, 8, 7, 22, 25,
         76, 67, 82, 93, 112, 127, 110, 97,
         196, 203, 218, 213, 248, 247, 230, 233,
         188, 179, 162, 173, 128, 143, 158, 145,
         201, 198, 215, 216, 245, 250, 235, 228,
         177, 190, 175, 160, 141, 130, 147, 156,
         57, 54, 39, 40, 5, 10, 27, 20,
         65, 78, 95, 80, 125, 114, 99, 108},
        {0, 16, 32, 48, 64, 80, 96, 112,
         128, 144, 160, 176, 192, 208, 224, 240,
         29, 13, 61, 45, 93, 77, 125, 109,
         157, 141, 189, 173, 221, 205, 253, 237,
         58, 42, 26, 10, 122, 106, 90, 74,
         186, 170, 154, 138, 250, 234, 218, 202,
         39, 55, 7, 23, 103, 119, 71, 87,
         167, 183, 135, 151, 231, 247, 199, 215,
         116, 100, 84, 68, 52, 36, 20, 4,
         244, 228, 212, 196, 180, 164, 148, 132,
         105, 121, 73, 89, 41, 57, 9, 25,
         233, 249, 201, 217, 169, 185, 137, 153,
         78, 94, 110, 126, 14, 30, 46, 62,
         206, 222, 238, 254, 142, 158, 174, 190,
         83, 67, 115, 99, 19, 3, 51, 35,
         211, 195, 243, 227, 147, 131, 179, 163,
         232, 248, 200, 216, 168, 184, 136, 152,
         104, 120, 72, 88, 40, 56, 8, 24,
         245, 229, 213, 197, 181, 165, 149, 133,
         117, 101, 85, 69, 53, 37, 21, 5,
         210, 194, 242, 226, 146, 130, 178, 162,
         82, 66, 114, 98, 18, 2, 50, 34,
         207, 223, 239, 255, 143, 159, 175, 191,
         79, 95, 111, 127, 15, 31, 47, 63,
         156, 140, 188, 172, 220, 204, 252, 236,
         28, 12, 60, 44, 92, 76, 124, 108,
         129, 145, 161, 177, 193, 209, 225, 241,
         1, 17, 33, 49, 65, 81, 97, 113,
         166, 182, 134, 150, 230, 246, 198, 214,
         38, 54, 6, 22, 102, 118, 70, 86,
         187, 171, 155, 139, 251, 235, 219, 203,
         59, 43, 27, 11, 123, 107, 91, 75},
        {0, 17, 34, 51, 68, 85, 102, 119,
         136, 153, 170, 187, 204, 221, 238, 255,
         13, 28, 47, 62, 73, 88, 107, 122,
         133, 148, 167, 182, 193, 208, 227, 242,
         26, 11, 56, 41, 94, 79, 124, 109,
         146, 131, 176, 161, 214, 199, 244, 229,
         23, 6, 53, 36, 83, 66, 113, 96,
         159, 142, 189, 172, 219, 202, 249, 232,
         52, 37, 22, 7, 112, 97, 82, 67,
         188, 173, 158, 143, 248, 233, 218, 203,
         57, 40, 27, 10, 125, 108, 95, 78,
         177, 160, 147, 130, 245, 228, 215, 198,
         46, 63, 12, 29, 106, 123, 72, 89,
         166, 183, 132, 149, 226, 243, 192, 209,
         35, 50, 1, 16, 103, 118, 69, 84,
         171, 186, 137, 152, 239, 254, 205, 220,
         104, 121, 74, 91, 44, 61, 14, 31,
         224, 241, 194, 211, 164, 181, 134, 151,
         101, 116, 71, 86, 33, 48, 3, 18,
         237, 252, 207, 222, 169, 184, 139, 154,
         114, 99, 80, 65, 54, 39, 20, 5,
         250, 235, 216, 201, 190, 175, 156, 141,
         127, 110, 93, 76, 59, 42, 25, 8,
         247, 230, 213, 196, 179, 162, 145, 128,
         92, 77, 126, 111, 24, 9, 58, 43,
         212, 197, 246, 231, 144, 129, 178, 163,
         81, 64, 115, 98, 21, 4, 55, 38,
         217, 200, 251, 234, 157, 140, 191, 174,
         70, 87, 100, 117, 2, 19, 32, 49,
         206, 223, 236, 253, 138, 155, 168, 185,
         75, 90, 105, 120, 15, 30, 45, 60,
         195, 210, 225, 240, 135, 150, 165, 180},
        {0, 18, 36, 54, 72, 90, 108, 126,
         144, 130, 180, 166, 216, 202, 252, 238,
         61, 47, 25, 11, 117, 103, 81, 67,
         173, 191, 137, 155, 229, 247, 193, 211,
         122, 104, 94, 76, 50, 32, 22, 4,
         234, 248, 206, 220, 162, 176, 134, 148,
         71, 85, 99, 113, 15, 29, 43, 57,
         215, 197, 243, 225, 159, 141, 187, 169,
         244, 230, 208, 194, 188, 174, 152, 138,
         100, 118, 64, 82, 44, 62, 8, 26,
         201, 219, 237, 255, 129, 147, 165, 183,
         89, 75, 125, 111, 17, 3, 53, 39,
         142, 156, 170, 184, 198, 212, 226, 240,
         30, 12, 58, 40, 86, 68, 114, 96,
         179, 161, 151, 133, 251, 233, 223, 205,
         35, 49, 7, 21, 107, 121, 79, 93,
         245, 231, 209, 195, 189, 175, 153, 139,
         101, 119, 65, 83, 45, 63, 9, 27,
         200, 218, 236, 254, 128, 146, 164, 182,
         88, 74, 124, 110, 16, 2, 52, 38,
         143, 157, 171, 185, 199, 213, 227, 241,
         31, 13, 59, 41, 87, 69, 115, 97,
         178, 160, 150, 132, 250, 232, 222, 204,
         34, 48, 6, 20, 106, 120, 78, 92,
         1, 19, 37, 55, 73, 91, 109, 127,
         145, 131, 181, 167, 217, 203, 253, 239,
         60, 46, 24, 10, 116, 102, 80, 66,
         172, 190, 136, 154, 228, 246, 192, 210,
         123, 105, 95, 77, 51, 33, 23, 5,
         235, 249, 207, 221, 163, 177, 135, 149,
         70, 84, 98, 112, 14, 28, 42, 56,
         214, 196, 242, 224, 158, 140, 186, 168},
        {0, 19, 38, 53, 76, 95, 106, 121,
         152, 139, 190, 173, 212, 199, 242, 225,
         45, 62, 11, 24, 97, 114, 71, 84,
         181, 166, 147, 128, 249, 234, 223, 204,
         90, 73, 124, 111, 22, 5, 48, 35,
         194, 209, 228, 247, 142, 157, 168, 187,
         119, 100, 81, 66, 59, 40, 29, 14,
         239, 252, 201, 218, 163, 176, 133, 150,
         180, 167, 146, 129, 248, 235, 222, 205,
         44, 63, 10, 25, 96, 115, 70, 85,
         153, 138, 191, 172, 213, 198, 243, 224,
         1, 18, 39, 52, 77, 94, 107, 120,
         238, 253, 200, 219, 162, 177, 132, 151,
         118, 101, 80, 67, 58, 41, 28, 15,
         195, 208, 229, 246, 143, 156, 169, 186,
         91, 72, 125, 110, 23, 4, 49, 34,
         117, 102, 83, 64, 57, 42, 31, 12,
         237, 254, 203, 216, 161, 178, 135, 148,
         88, 75, 126, 109, 20, 7, 50, 33,
         192, 211, 230, 245, 140, 159, 170, 185,
         47, 60, 9, 26, 99, 112, 69, 86,
         183, 164, 145, 130, 251, 232, 221, 206,
         2, 17, 36, 55, 78, 93, 104, 123,
         154, 137, 188, 175, 214, 197, 240, 227,
         193, 210, 231, 244, 141, 158, 171, 184,
         89, 74, 127, 108, 21, 6, 51, 32,
         236, 255, 202, 217, 160, 179, 134, 149,
         116, 103, 82, 65, 56, 43, 30, 13,
         155, 136, 189, 174, 215, 196, 241, 226,
         3, 16, 37, 54, 79, 92, 105, 122,
         182, 165, 144, 131, 250, 233, 220, 207,
         46, 61, 8, 27, 98, 113, 68, 87},
        {0, 20, 40, 60, 80, 68, 120, 108,
         160, 180, 136, 156, 240, 228, 216, 204,
         93, 73, 117, 97, 13, 25, 37, 49,
         253, 233, 213, 193, 173, 185, 133, 145,
         186, 174, 146, 134, 234, 254, 194, 214,
         26, 14, 50, 38, 74, 94, 98, 118,
         231, 243, 207, 219, 183, 163, 159, 139,
         71, 83, 111, 123, 23, 3, 63, 43,
         105, 125, 65, 85, 57, 45, 17, 5,
         201, 221, 225, 245, 153, 141, 177, 165,
         52, 32, 28, 8, 100, 112, 76, 88,
         148, 128, 188, 168, 196, 208, 236, 248,
         211, 199, 251, 239, 131, 151, 171, 191,
         115, 103, 91, 79, 35, 55, 11, 31,
         142, 154, 166, 178, 222, 202, 246, 226,
         46, 58, 6, 18, 126, 106, 86, 66,
         210, 198, 250, 238, 130, 150, 170, 190,
         114, 102, 90, 78, 34, 54, 10, 30,
         143, 155, 167, 179, 223, 203, 247, 227,
         47, 59, 7, 19, 127, 107, 87, 67,
         104, 124, 64, 84, 56, 44, 16, 4,
         200, 220, 224, 244, 152, 140, 176, 164,
         53, 33, 29, 9, 101, 113, 77, 89,
         149, 129, 189, 169, 197, 209, 237, 249,
         187, 175, 147, 135, 235, 255, 195, 215,
         27, 15, 51, 39, 75, 95, 99, 119,
         230, 242, 206, 218, 182, 162, 158, 138,
         70, 82, 110, 122, 22, 2, 62, 42,
         1, 21, 41, 61, 81, 69, 121, 109,
         161, 181, 137, 157, 241, 229, 217, 205,
         92, 72, 116, 96, 12, 24, 36, 48,
         252, 232, 212, 192, 172, 184, 132, 144},
        {0, 21, 42, 63, 84, 65, 126, 107,
         168, 189, 130, 151, 252, 233, 214, 195,
         77, 88, 103, 114, 25, 12, 51, 38,
         229, 240, 207, 218, 177, 164, 155, 142,
         154, 143, 176, 165, 206, 219, 228, 241,
         50, 39, 24, 13, 102, 115, 76, 89,
         215, 194, 253, 232, 131, 150, 169, 188,
         127, 106, 85, 64, 43, 62, 1, 20,
         41, 60, 3, 22, 125, 104, 87, 66,
         129, 148, 171, 190, 213, 192, 255, 234,
         100, 113, 78, 91, 48, 37, 26, 15,
         204, 217, 230, 243, 152, 141, 178, 167,
         179, 166, 153, 140, 231, 242, 205, 216,
         27, 14, 49, 36, 79, 90, 101, 112,
         254, 235, 212, 193, 170, 191, 128, 149,
         86, 67, 124, 105, 2, 23, 40, 61,
         82, 71, 120, 109, 6, 19, 44, 57,
         250, 239, 208, 197, 174, 187, 132, 145,
         31, 10, 53, 32, 75, 94, 97, 116,
         183, 162, 157, 136, 227, 246, 201, 220,
         200, 221, 226, 247, 156, 137, 182, 163,
         96, 117, 74, 95, 52, 33, 30, 11,
         133, 144, 175, 186, 209, 196, 251, 238,
         45, 56, 7, 18, 121, 108, 83, 70,
         123, 110, 81, 68, 47, 58, 5, 16,
         211, 198, 249, 236, 135, 146, 173, 184,
         54, 35, 28, 9, 98, 119, 72, 93,
         158, 139, 180, 161, 202, 223, 224, 245,
         225, 244, 203, 222, 181, 160, 159, 138,
         73, 92, 99, 118, 29, 8, 55, 34,
         172, 185, 134, 147, 248, 237, 210, 199,
         4, 17, 46, 59, 80, 69, 122, 111},
        {0, 22, 44, 58, 88, 78, 116, 98,
         176, 166, 156, 138, 232, 254, 196, 210,
         125, 107, 81, 71, 37, 51, 9, 31,
         205, 219, 225, 247, 149, 131, 185, 175,
         250, 236, 214, 192, 162, 180, 142, 152,
         74, 92, 102, 112, 18, 4, 62, 40,
         135, 145, 171, 189, 223, 201, 243, 229,
         55, 33, 27, 13, 111, 121, 67, 85,
         233, 255, 197, 211, 177, 167, 157, 139,
         89, 79, 117, 99, 1, 23, 45, 59,
         148, 130, 184, 174, 204, 218, 224, 246,
         36, 50, 8, 30, 124, 106, 80, 70,
         19, 5, 63, 41, 75, 93, 103, 113,
         163, 181, 143, 153, 251, 237, 215, 193,
         110, 120, 66, 84, 54, 32, 26, 12,
         222, 200, 242, 228, 134, 144, 170, 188,
         207, 217, 227, 245, 151, 129, 187, 173,
         127, 105, 83, 69, 39, 49, 11, 29,
         178, 164, 158, 136, 234, 252, 198, 208,
         2, 20, 46, 56, 90, 76, 118, 96,
         53, 35, 25, 15, 109, 123, 65, 87,
         133, 147, 169, 191, 221, 203, 241, 231,
         72, 94, 100, 114, 16, 6, 60, 42,
         248, 238, 212, 194, 160, 182, 140, 154,
         38, 48, 10, 28, 126, 104, 82, 68,
         150, 128, 186, 172, 206, 216, 226, 244,
         91, 77, 119, 97, 3, 21, 47, 57,
         235, 253, 199, 209, 179, 165, 159, 137,
         220, 202, 240, 230, 132, 146, 168, 190,
         108, 122, 64, 86, 52, 34, 24, 14,
         161, 183, 141, 155, 249, 239, 213, 195,
         17, 7, 61, 43, 73, 95, 101, 115},
        {0, 23, 46, 57, 92, 75, 114, 101,
         184, 175, 150, 129, 228, 243, 202, 221,
         109, 122, 67, 84, 49, 38, 31, 8,
         213, 194, 251, 236, 137, 158, 167, 176,
         218, 205, 244, 227, 134, 145, 168, 191,
         98, 117, 76, 91, 62, 41, 16, 7,
         183, 160, 153, 142, 235, 252, 197, 210,
         15, 24, 33, 54, 83, 68, 125, 106,
         169, 190, 135, 144, 245, 226, 219, 204,
         17, 6, 63, 40, 77, 90, 99, 116,
         196, 211, 234, 253, 152, 143, 182, 161,
         124, 107, 82, 69, 32, 55, 14, 25,
         115, 100, 93, 74, 47, 56, 1, 22,
         203, 220, 229, 242, 151, 128, 185, 174,
         30, 9, 48, 39, 66, 85, 108, 123,
         166, 177, 136, 159, 250, 237, 212, 195,
         79, 88, 97, 118, 19, 4, 61, 42,
         247, 224, 217, 206, 171, 188, 133, 146,
         34, 53, 12, 27, 126, 105, 80, 71,
         154, 141, 180, 163, 198, 209, 232, 255,
         149, 130, 187, 172, 201, 222, 231, 240,
         45, 58, 3, 20, 113, 102, 95, 72,
         248, 239, 214, 193, 164, 179, 138, 157,
         64, 87, 110, 121, 28, 11, 50, 37,
         230, 241, 200, 223, 186, 173, 148, 131,
         94, 73, 112, 103, 2, 21, 44, 59,
         139, 156, 165, 178, 215, 192, 249, 238,
         51, 36, 29, 10, 111, 120, 65, 86,
         60, 43, 18, 5, 96, 119, 78, 89,
         132, 147, 170, 189, 216, 207, 246, 225,
         81, 70, 127, 104, 13, 26, 35, 52,
         233, 254, 199, 208, 181, 162, 155, 140},
        {0, 24, 48, 40, 96, 120, 80, 72,
         192, 216, 240, 232, 160, 184, 144, 136,
         157, 133, 173, 181, 253, 229, 205, 213,
         93, 69, 109, 117, 61, 37, 13, 21,
         39, 63, 23, 15, 71, 95, 119, 111,
         231, 255, 215, 207, 135, 159, 183, 175,
         186, 162, 138, 146, 218, 194, 234, 242,
         122, 98, 74, 82, 26, 2, 42, 50,
         78, 86, 126, 102, 46, 54, 30, 6,
         142, 150, 190, 166, 238, 246, 222, 198,
         211, 203, 227, 251, 179, 171, 131, 155,
         19, 11, 35, 59, 115, 107, 67, 91,
         105, 113, 89, 65, 9, 17, 57, 33,
         169, 177, 153, 129, 201, 209, 249, 225,
         244, 236, 196, 220, 148, 140, 164, 188,
         52, 44, 4, 28, 84, 76, 100, 124,
         156, 132, 172, 180, 252, 228, 204, 212,
         92, 68, 108, 116, 60, 36, 12, 20,
         1, 25, 49, 41, 97, 121, 81, 73,
         193, 217, 241, 233, 161, 185, 145, 137,
         187, 163, 139, 147, 219, 195, 235, 243,
         123, 99, 75, 83, 27, 3, 43, 51,
         38, 62, 22, 14, 70, 94, 118, 110,
         230, 254, 214, 206, 134, 158, 182, 174,
         210, 202, 226, 250, 178, 170, 130, 154,
         18, 10, 34, 58, 114, 106, 66, 90,
         79, 87, 127, 103, 47, 55, 31, 7,
         143, 151, 191, 167, 239, 247, 223, 199,
         245, 237, 197, 221, 149, 141, 165, 189,
         53, 45, 5, 29, 85, 77, 101, 125,
         104, 112, 88, 64, 8, 16, 56, 32,
         168, 176, 152, 128, 200, 208, 248, 224},
        {0, 25, 50, 43, 100, 125, 86, 79,
         200, 209, 250, 227, 172, 181, 158, 135,
         141, 148, 191, 166, 233, 240, 219, 194,
         69, 92, 119, 110, 33, 56, 19, 10,
         7, 30, 53, 44, 99, 122, 81, 72,
         207, 214, 253, 228, 171, 178, 153, 128,
         138, 147, 184, 161, 238, 247, 220, 197,
         66, 91, 112, 105, 38, 63, 20, 13,
         14, 23, 60, 37, 106, 115, 88, 65,
         198, 223, 244, 237, 162, 187, 144, 137,
         131, 154, 177, 168, 231, 254, 213, 204,
         75, 82, 121, 96, 47, 54, 29, 4,
         9, 16, 59, 34, 109, 116, 95, 70,
         193, 216, 243, 234, 165, 188, 151, 142,
         132, 157, 182, 175, 224, 249, 210, 203,
         76, 85, 126, 103, 40, 49, 26, 3,
         28, 5, 46, 55, 120, 97, 74, 83,
         212, 205, 230, 255, 176, 169, 130, 155,
         145, 136, 163, 186, 245, 236, 199, 222,
         89, 64, 107, 114, 61, 36, 15, 22,
         27, 2, 41, 48, 127, 102, 77, 84,
         211, 202, 225, 248, 183, 174, 133, 156,
         150, 143, 164, 189, 242, 235, 192, 217,
         94, 71, 108, 117, 58, 35, 8, 17,
         18, 11, 32, 57, 118, 111, 68, 93,
         218, 195, 232, 241, 190, 167, 140, 149,
         159, 134, 173, 180, 251, 226, 201, 208,
         87, 78, 101, 124, 51, 42, 1, 24,
         21, 12, 39, 62, 113, 104, 67, 90,
         221, 196, 239, 246, 185, 160, 139, 146,
         152, 129, 170, 179, 252, 229, 206, 215,
         80, 73, 98, 123, 52, 45, 6, 31},
        {0, 26, 52, 46, 104, 114, 92, 70,
         208, 202, 228, 254, 184, 162, 140, 150,
         189, 167, 137, 147, 213, 207, 225, 251,
         109, 119, 89, 67, 5, 31, 49, 43,
         103, 125, 83, 73, 15, 21, 59, 33,
         183, 173, 131, 153, 223, 197, 235, 241,
         218, 192, 238, 244, 178, 168, 134, 156,
         10, 16, 62, 36, 98, 120, 86, 76,
         206, 212, 250, 224, 166, 188, 146, 136,
         30, 4, 42, 48, 118, 108, 66, 88,
         115, 105, 71, 93, 27, 1, 47, 53,
         163, 185, 151, 141, 203, 209, 255, 229,
         169, 179, 157, 135, 193, 219, 245, 239,
         121, 99, 77, 87, 17, 11, 37, 63,
         20, 14, 32, 58, 124, 102, 72, 82,
         196, 222, 240, 234, 172, 182, 152, 130,
         129, 155, 181, 175, 233, 243, 221, 199,
         81, 75, 101, 127, 57, 35, 13, 23,
         60, 38, 8, 18, 84, 78, 96, 122,
         236, 246, 216, 194, 132, 158, 176, 170,
         230, 252, 210, 200, 142, 148, 186, 160,
         54, 44, 2, 24, 94, 68, 106, 112,
         91, 65, 111, 117, 51, 41, 7, 29,
         139, 145, 191, 165, 227, 249, 215, 205,
         79, 85, 123, 97, 39, 61, 19, 9,
         159, 133, 171, 177, 247, 237, 195, 217,
         242, 232, 198, 220, 154, 128, 174, 180,
         34, 56, 22, 12, 74, 80, 126, 100,
         40, 50, 28, 6, 64, 90, 116, 110,
         248, 226, 204, 214, 144, 138, 164, 190,
         149, 143, 161, 187, 253, 231, 201, 211,
         69, 95, 113, 107, 45, 55, 25, 3},
        {0, 27, 54, 45, 108, 119, 90, 65,
         216, 195, 238, 245, 180, 175, 130, 153,
         173, 182, 155, 128, 193, 218, 247, 236,
         117, 110, 67, 88, 25, 2, 47, 52,
         71, 92, 113, 106, 43, 48, 29, 6,
         159, 132, 169, 178, 243, 232, 197, 222,
         234, 241, 220, 199, 134, 157, 176, 171,
         50, 41, 4, 31, 94, 69, 104, 115,
         142, 149, 184, 163, 226, 249, 212, 207,
         86, 77, 96, 123, 58, 33, 12, 23,
         35, 56, 21, 14, 79, 84, 121, 98,
         251, 224, 205, 214, 151, 140, 161, 186,
         201, 210, 255, 228, 165, 190, 147, 136,
         17, 10, 39, 60, 125, 102, 75, 80,
         100, 127, 82, 73, 8, 19, 62, 37,
         188, 167, 138, 145, 208, 203, 230, 253,
         1, 26, 55, 44, 109, 118, 91, 64,
         217, 194, 239, 244, 181, 174, 131, 152,
         172, 183, 154, 129, 192, 219, 246, 237,
         116, 111, 66, 89, 24, 3, 46, 53,
         70, 93, 112, 107, 42, 49, 28, 7,
         158, 133, 168, 179, 242, 233, 196, 223,
         235, 240, 221, 198, 135, 156, 177, 170,
         51, 40, 5, 30, 95, 68, 105, 114,
         143, 148, 185, 162, 227, 248, 213, 206,
         87, 76, 97, 122, 59, 32, 13, 22,
         34, 57, 20, 15, 78, 85, 120, 99,
         250, 225, 204, 215, 150, 141, 160, 187,
         200, 211, 254, 229, 164, 191, 146, 137,
         16, 11, 38, 61, 124, 103, 74, 81,
         101, 126, 83, 72, 9, 18, 63, 36,
         189, 166, 139, 144, 209, 202, 231, 252},
        {0, 28, 56, 36, 112, 108, 72, 84,
         224, 252, 216, 196, 144, 140, 168, 180,
         221, 193, 229, 249, 173, 177, 149, 137,
         61, 33, 5, 25, 77, 81, 117, 105,
         167, 187, 159, 131, 215, 203, 239, 243,
         71, 91, 127, 99, 55, 43, 15, 19,
         122, 102, 66, 94, 10, 22, 50, 46,
         154, 134, 162, 190, 234, 246, 210, 206,
         83, 79, 107, 119, 35, 63, 27, 7,
         179, 175, 139, 151, 195, 223, 251, 231,
         142, 146, 182, 170, 254, 226, 198, 218,
         110, 114, 86, 74, 30, 2, 38, 58,
         244, 232, 204, 208, 132, 152, 188, 160,
         20, 8, 44, 48, 100, 120, 92, 64,
         41, 53, 17, 13, 89, 69, 97, 125,
         201, 213, 241, 237, 185, 165, 129, 157,
         166, 186, 158, 130, 214, 202, 238, 242,
         70, 90, 126, 98, 54, 42, 14, 18,
         123, 103, 67, 95, 11, 23, 51, 47,
         155, 135, 163, 191, 235, 247, 211, 207,
         1, 29, 57, 37, 113, 109, 73, 85,
         225, 253, 217, 197, 145, 141, 169, 181,
         220, 192, 228, 248, 172, 176, 148, 136,
         60, 32, 4, 24, 76, 80, 116, 104,
         245, 233, 205, 209, 133, 153, 189, 161,
         21, 9, 45, 49, 101, 121, 93, 65,
         40, 52, 16, 12, 88, 68, 96, 124,
         200, 212, 240, 236, 184, 164, 128, 156,
         82, 78, 106, 118, 34, 62, 26, 6,
         178, 174, 138, 150, 194, 222, 250, 230,
         143, 147, 183, 171, 255, 227, 199, 219,
         111, 115, 87, 75, 31, 3, 39, 59},
        {0, 29, 58, 39, 116, 105, 78, 83,
         232, 245, 210, 207, 156, 129, 166, 187,
         205, 208, 247, 234, 185, 164, 131, 158,
         37, 56, 31, 2, 81, 76, 107, 118,
         135, 154, 189, 160, 243, 238, 201, 212,
         111, 114, 85, 72, 27, 6, 33, 60,
         74, 87, 112, 109, 62, 35, 4, 25,
         162, 191, 152, 133, 214, 203, 236, 241,
         19, 14, 41, 52, 103, 122, 93, 64,
         251, 230, 193, 220, 143, 146, 181, 168,
         222, 195, 228, 249, 170, 183, 144, 141,
         54, 43, 12, 17, 66, 95, 120, 101,
         148, 137, 174, 179, 224, 253, 218, 199,
         124, 97, 70, 91, 8, 21, 50, 47,
         89, 68, 99, 126, 45, 48, 23, 10,
         177, 172, 139, 150, 197, 216, 255, 226,
         38, 59, 28, 1, 82, 79, 104, 117,
         206, 211, 244, 233, 186, 167, 128, 157,
         235, 246, 209, 204, 159, 130, 165, 184,
         3, 30, 57, 36, 119, 106, 77, 80,
         161, 188, 155, 134, 213, 200, 239, 242,
         73, 84, 115, 110, 61, 32, 7, 26,
         108, 113, 86, 75, 24, 5, 34, 63,
         132, 153, 190, 163, 240, 237, 202, 215,
         53, 40, 15, 18, 65, 92, 123, 102,
         221, 192, 231, 250, 169, 180, 147, 142,
         248, 229, 194, 223, 140, 145, 182, 171,
         16, 13, 42, 55, 100, 121, 94, 67,
         178, 175, 136, 149, 198, 219, 252, 225,
         90, 71, 96, 125, 46, 51, 20, 9,
         127, 98, 69, 88, 11, 22, 49, 44,
         151, 138, 173, 176, 227, 254, 217, 196},
        {0, 30, 60, 34, 120, 102, 68, 90,
         240, 238, 204, 210, 136, 150, 180, 170,
         253, 227, 193, 223, 133, 155, 185, 167,
         13, 19, 49, 47, 117, 107, 73, 87,
         231, 249, 219, 197, 159, 129, 163, 189,
         23, 9, 43, 53, 111, 113, 83, 77,
         26, 4, 38, 56, 98, 124, 94, 64,