- #include "chess.h" 
- /* *INDENT-OFF* */ 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Pawn scoring terms.                                     * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int pawn_can_promote          = 525; 
- const int pawn_file_width           =   8; 
- const int pawn_unsupported[2]       = { -8, -4 }; 
- const int pawn_defects[2][8] = { 
-   { 0, 0, 0, 1, 2, 3, 0, 0 },               /* [black][8] */ 
-   { 0, 0, 3, 2, 1, 0, 0, 0 }                /* [white][8] */ 
- }; 
- const int passed_pawn[8] = { 0, 0, 0, 2, 6, 12, 21, 0 }; 
- const int passed_pawn_base[2] = { 4, 8 }; 
- const int passed_pawn_free_advance = 8; 
- const int passed_pawn_free_advance_1 = 5; 
- const int passed_pawn_defended = 3; 
- const int passed_pawn_defended_1 = 2; 
- const int passed_pawn_candidate[2][8] = { 
-   { 0, 2, 2,  6, 13, 32, 0, 0 },            /* [mg][rank] */ 
-   { 0, 5, 5, 11, 27, 65, 0, 0 }             /* [eg][rank] */ 
- }; 
- const int pawn_doubled[2][8] = { 
-   { 7,  8,  9,  9,  9,  9,  8,  7}, 
-   {22, 19, 19, 19, 19, 19, 19, 22} 
- }; 
- const int pawn_isolated[2][8] = { 
-   {14, 21, 23, 23, 23, 23, 21, 14}, 
-   { 5,  7,  8,  8,  8,  8,  7,  5} 
- }; 
- const int pawn_backward[2][8] = { 
-   { 8, 12, 14, 14, 14, 14, 12,  8}, 
-   { 2,  3,  3,  3,  3,  3,  3,  2} 
- }; 
- const int pawn_connected[2][8][8] = { 
-   {{  0,  0,  0,  0,  0,  0,  0,  0 }, 
-    {  0,  1,  1,  2,  2,  1,  1,  0 }, 
-    {  1,  2,  2,  3,  3,  2,  2,  1 }, 
-    {  3,  5,  6, 10, 10,  6,  5,  3 },  /* [mg][file][rank] */ 
-    { 12, 14, 17, 22, 22, 17, 14, 12 }, 
-    { 27, 29, 31, 35, 35, 31, 29, 27 }, 
-    { 54, 63, 65, 70, 70, 65, 63, 54 }, 
-    {  0,  0,  0,  0,  0,  0,  0,  0 }}, 
-   
-   {{  0,  0,  0,  0,  0,  0,  0,  0 }, 
-    {  1,  3,  3,  3,  3,  3,  1,  1 }, 
-    {  3,  6,  6,  6,  6,  6,  6,  1 }, 
-    {  6, 10, 10, 10, 10, 10, 10,  3 },  /* [eg][file][rank] */ 
-    { 13, 17, 17, 17, 17, 17, 17, 13 }, 
-    { 32, 38, 38, 38, 38, 38, 38, 32 }, 
-    { 76, 87, 87, 87, 87, 87, 87, 76 }, 
-    {  0,  0,  0,  0,  0,  0,  0,  0 }} 
- }; 
- const int pval[2][64] = { 
-    { 0,  0,  0,  0,  0,  0,  0,  0, 
-     -5,  0,  0,  0,  0,  0,  0, -5, 
-     -5,  0,  0,  0,  0,  0,  0, -5, 
-     -5,  0,  3,  5,  5,  3,  0, -5,  /* [mg][black][sq] */ 
-     -5,  0,  5, 10, 10,  5,  0, -5, 
-     -5,  0,  3,  5,  5,  3,  0, -5, 
-     -5,  0,  0,  0,  0,  0,  0, -5, 
-      0,  0,  0,  0,  0,  0,  0,  0 }, 
-   
-    { 0,  0,  0,  0,  0,  0,  0,  0, 
-     -5,  0,  0,  0,  0,  0,  0, -5, 
-     -5,  0,  3,  5,  5,  3,  0, -5, 
-     -5,  0,  5, 10, 10,  5,  0, -5,  /* [mg][white][sq] */ 
-     -5,  0,  3,  5,  5,  3,  0, -5, 
-     -5,  0,  0,  0,  0,  0,  0, -5, 
-     -5,  0,  0,  0,  0,  0,  0, -5, 
-      0,  0,  0,  0,  0,  0,  0,  0 } 
- }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Knight scoring terms.                                   * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int king_tropism_n[8] = { 3, 3, 3, 2, 1, 0, 0, 0 }; 
- const int knight_outpost[2][64] = { 
-   { 0, 0, 0, 0, 0, 0, 0, 0, 
-     0, 0, 0, 0, 0, 0, 0, 0, 
-     0, 1, 4, 4, 4, 4, 1, 0, 
-     0, 2, 6, 8, 8, 6, 2, 0, 
-     0, 1, 4, 4, 4, 4, 1, 0,   /* [black][sq] */ 
-     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, 4, 4, 4, 4, 1, 0, 
-     0, 2, 6, 8, 8, 6, 2, 0,   /* [white][sq] */ 
-     0, 1, 4, 4, 4, 4, 1, 0, 
-     0, 0, 0, 0, 0, 0, 0, 0, 
-     0, 0, 0, 0, 0, 0, 0, 0 } 
- }; 
- const int nval[2][2][64] = { 
-   {{ -41, -29, -27, -15, -15, -27, -29, -41, 
-       -9,   4,  14,  20,  20,  14,   4,  -9, 
-       -7,  10,  23,  29,  29,  23,  10,  -7, 
-       -5,  12,  25,  32,  32,  25,  12,  -5,  /* [mg][black][sq] */ 
-       -5,  10,  23,  28,  28,  23,  10,  -5, 
-       -7,  -2,  19,  19,  19,  19,  -2,  -7, 
-       -9,  -6,  -2,   0,   0,  -2,  -6,  -9, 
-      -31, -29, -27, -25, -25, -27, -29, -31 }, 
-   
-    { -31, -29, -27, -25, -25, -27, -29, -31, 
-       -9,  -6,  -2,   0,   0,  -2,  -6,  -9, 
-       -7,  -2,  19,  19,  19,  19,  -2,  -7, 
-       -5,  10,  23,  28,  28,  23,  10,  -5,  /* [mg][white][sq] */ 
-       -5,  12,  25,  32,  32,  25,  12,  -5, 
-       -7,  10,  23,  29,  29,  23,  10,  -7, 
-       -9,   4,  14,  20,  20,  14,   4,  -9, 
-      -41, -29, -27, -15, -15, -27, -29, -41 }}, 
-   
-   {{ -41, -29, -27, -15, -15, -27, -29, -41, 
-       -9,   4,  14,  20,  20,  14,   4,  -9, 
-       -7,  10,  23,  29,  29,  23,  10,  -7, 
-       -5,  12,  25,  32,  32,  25,  12,  -5,  /* [eg][black][sq] */ 
-       -5,  10,  23,  28,  28,  23,  10,  -5, 
-       -7,  -2,  19,  19,  19,  19,  -2,  -7, 
-       -9,  -6,  -2,   0,   0,  -2,  -6,  -9, 
-      -31, -29, -27, -25, -25, -27, -29, -31 }, 
-   
-    { -31, -29, -27, -25, -25, -27, -29, -31, 
-       -9,  -6,  -2,   0,   0,  -2,  -6,  -9, 
-       -7,  -2,  19,  19,  19,  19,  -2,  -7, 
-       -5,  10,  23,  28,  28,  23,  10,  -5,  /* [eg][white][sq] */ 
-       -5,  12,  25,  32,  32,  25,  12,  -5, 
-       -7,  10,  23,  29,  29,  23,  10,  -7, 
-       -9,   4,  14,  20,  20,  14,   4,  -9, 
-      -41, -29, -27, -15, -15, -27, -29, -41 }} 
- }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Bishop scoring terms.                                   * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int bishop_trapped            = 174; 
- const int bishop_pawns_on_color[2]  = { 4, 6 }; 
- const int bishop_wing_pawns[2]      = { 18, 36 }; 
- const int bishop_pair[2]            = { 38, 56 }; 
- const int king_tropism_b[8] = { 2, 2, 2, 1, 0, 0, 0, 0 }; 
- const int bishop_outpost[2][64] = { 
-   { 0, 0, 0, 0, 0, 0, 0, 0, 
-     0, 0, 0, 0, 0, 0, 0, 0, 
-     0, 1, 3, 3, 3, 3, 1, 0, 
-     0, 3, 5, 5, 5, 5, 3, 0, 
-     0, 1, 2, 2, 2, 2, 1, 0,   /* [black][sq] */ 
-     0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 0, 0, 
-     0, 1, 2, 2, 2, 2, 1, 0, 
-     0, 3, 5, 5, 5, 5, 3, 0,   /* [white][sq] */ 
-     0, 1, 3, 3, 3, 3, 1, 0, 
-     0, 0, 0, 0, 0, 0, 0, 0, 
-     0, 0, 0, 0, 0, 0, 0, 0 } 
- }; 
- const int bval[2][2][64] = { 
-   {{  0,   0,   0,   0,   0,   0,   0,   0, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][black][sq] */ 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-     -15, -15, -15, -15, -15, -15, -15, -15}, 
-   
-    {-15, -15, -15, -15, -15, -15, -15, -15, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][white][sq] */ 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-       0,   0,   0,   0,   0,   0,   0,   0}}, 
-   
-   {{  0,   0,   0,   0,   0,   0,   0,   0, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][black][sq] */ 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-     -15, -15, -15, -15, -15, -15, -15, -15}, 
-   
-    {-15, -15, -15, -15, -15, -15, -15, -15, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0, 
-       0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][white][sq] */ 
-       0,   4,   8,   8,   8,   8,   4,   0, 
-       0,   4,   4,   4,   4,   4,   4,   0, 
-       0,   0,   0,   0,   0,   0,   0,   0}} 
- }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Rook scoring terms.                                     * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int rook_on_7th[2]          = { 25, 35 }; 
- const int rook_connected_7th[2]   = {  6, 10 }; 
- const int rook_open_file[2]       = { 35, 20 }; 
- const int rook_half_open_file[2]  = { 10, 10 }; 
- const int king_tropism_r[8] = { 4, 4, 3, 2, 1, 1, 1, 1 }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Queen scoring terms.                                    * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int king_tropism_q[8] = { 6, 6, 5, 4, 3, 2, 2, 2 }; 
- const int qval[2][2][64] = { 
-    {{ 0,   0,   0,   0,   0,   0,   0,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][black][sq] */ 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   0,   0,   0,   0,   0,   0,   0 }, 
-   
-     { 0,   0,   0,   0,   0,   0,   0,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][white][sq] */ 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   0,   0,   0,   0,   0,   0,   0 }}, 
-   
-    {{ 0,   0,   0,   0,   0,   0,   0,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][black][sq] */ 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   0,   0,   0,   0,   0,   0,   0 }, 
-   
-     { 0,   0,   0,   0,   0,   0,   0,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0, 
-       0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][white][sq] */ 
-       0,   4,   4,   6,   6,   4,   4,   0, 
-       0,   0,   4,   4,   4,   4,   0,   0, 
-       0,   0,   0,   0,   0,   0,   0,   0 }} 
- }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  King scoring terms.                                     * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- int king_safety[16][16]; 
- const int king_safety_mate_threat = 600; 
- const int king_king_tropism       =  10; 
- const int open_file[8]            = { 6, 5, 4, 4, 4, 4, 5, 6 }; 
- const int half_open_file[8] = { 4, 4, 3, 3, 3, 3, 4, 4 }; 
- const int safety_vector[16] = { 
-    0,  7, 14, 21, 28, 35, 42,  49, 
-   56, 63, 70, 77, 84, 91, 98, 105 
- }; 
- const int tropism_vector[16] = { 
-    0,  1,  2,  3,   4,   5,  11,  20, 
-   32, 47, 65, 86, 110, 137, 167, 200 
- }; 
- const int kval[2][64] = { 
-    {-40, -40, -40, -40, -40, -40, -40, -40, 
-     -40, -10, -10, -10, -10, -10, -10, -40, 
-     -40, -10,  60,  60,  60,  60, -10, -40, 
-     -40, -10,  60,  60,  60,  60, -10, -40, 
-     -40, -10,  40,  40,  40,  40, -10, -40,   /* [black][sq] */ 
-     -40, -10,  20,  20,  20,  20, -10, -40, 
-     -40, -10, -10, -10, -10, -10, -10, -40, 
-     -40, -40, -40, -40, -40, -40, -40, -40 }, 
-   
-    {-40, -40, -40, -40, -40, -40, -40, -40, 
-     -40, -10, -10, -10, -10, -10, -10, -40, 
-     -40, -10,  20,  20,  20,  20, -10, -40, 
-     -40, -10,  40,  40,  40,  40, -10, -40, 
-     -40, -10,  60,  60,  60,  60, -10, -40,   /* [white][sq] */ 
-     -40, -10,  60,  60,  60,  60, -10, -40, 
-     -40, -10, -10, -10, -10, -10, -10, -40, 
-     -40, -40, -40, -40, -40, -40, -40, -40 } 
- }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Miscellaneous evaluation constants.                     * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int bad_trade = 90; 
- const int dark_corner[2] =  { FILEA, FILEH }; 
- const int light_corner[2] = { FILEH, FILEA }; 
- const int direction[2] =    { -8, 8 }; 
- const char square_color[64] = { 
-   1, 0, 1, 0, 1, 0, 1, 0, 
-   0, 1, 0, 1, 0, 1, 0, 1, 
-   1, 0, 1, 0, 1, 0, 1, 0, 
-   0, 1, 0, 1, 0, 1, 0, 1, 
-   1, 0, 1, 0, 1, 0, 1, 0, 
-   0, 1, 0, 1, 0, 1, 0, 1, 
-   1, 0, 1, 0, 1, 0, 1, 0, 
-   0, 1, 0, 1, 0, 1, 0, 1 
- }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Opening phase development terms.                        * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const int development_thematic      =     12; 
- const int development_losing_castle =     20; 
- const int development_not_castled   =     20; 
- const int wtm_bonus[2]              = { 5, 8 }; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Skill command constants (should not be changed)         * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- uint64_t burner[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
- const int burnc[10] = {128000, 64000, 32400, 15200, 7600, 
-                          3800,  1960,  1040,   480,  140}; 
- /* 
-  ************************************************************ 
-  *                                                          * 
-  *  Mop-up scoring terms.  These are used in pawnless end-  * 
-  *  games to mate the weaker side.  There is a special PST  * 
-  *  B+N vs lone king to make it easier to win with very     * 
-  *  shallow search depths.                                  * 
-  *                                                          * 
-  ************************************************************ 
-  */ 
- const char b_n_mate_dark_squares[64] = { 
-   99, 90, 80, 70, 60, 50, 40, 30, 
-   90, 80, 70, 60, 50, 40, 30, 40, 
-   80, 70, 60, 50, 40, 30, 40, 50, 
-   70, 60, 50, 40, 30, 40, 50, 60, 
-   60, 50, 40, 30, 40, 50, 60, 70, 
-   50, 40, 30, 40, 50, 60, 70, 80, 
-   40, 30, 40, 50, 60, 70, 80, 90, 
-   30, 40, 50, 60, 70, 80, 90, 99 
- }; 
- const char b_n_mate_light_squares[64] = { 
-   30, 40, 50, 60, 70, 80, 90, 99, 
-   40, 30, 40, 50, 60, 70, 80, 90, 
-   50, 40, 30, 40, 50, 60, 70, 80, 
-   60, 50, 40, 30, 40, 50, 60, 70, 
-   70, 60, 50, 40, 30, 40, 50, 60, 
-   80, 70, 60, 50, 40, 30, 40, 50, 
-   90, 80, 70, 60, 50, 40, 30, 40, 
-   99, 90, 80, 70, 60, 50, 40, 30 
- }; 
- const int mate[64] = { 
-   200, 180, 160, 140, 140, 160, 180, 200, 
-   180, 160, 140, 120, 120, 140, 160, 180, 
-   160, 140, 120, 100, 100, 120, 140, 160, 
-   140, 120, 100, 100, 100, 100, 120, 140, 
-   140, 120, 100, 100, 100, 100, 120, 140, 
-   160, 140, 120, 100, 100, 120, 140, 160, 
-   180, 160, 140, 120, 120, 140, 160, 180, 
-   200, 180, 160, 140, 140, 160, 180, 200 
- }; 
- /* *INDENT-ON* */ 
-