Upgrade to Bonanza 6.0
[bonanza.git] / phash.c
diff --git a/phash.c b/phash.c
index 8592ee5..d00dcb2 100644 (file)
--- a/phash.c
+++ b/phash.c
-#include "shogi.h"\r
-\r
-static unsigned short tab[] = {\r
-5866,14081,15663,4534,14969,3034,8274,7570,\r
-14571,15428,2921,37,2534,4727,660,249,\r
-8308,3662,15794,10079,13857,13019,6070,9141,\r
-3942,14629,6891,11561,12156,4793,11132,12989,\r
-10044,16304,9389,2228,5053,3789,5988,4479,\r
-8719,13901,15524,3098,7570,12949,1074,0,\r
-10079,16233,7531,14642,13600,8087,0,11690,\r
-8579,15413,6522,1076,2677,6914,10881,13803,\r
-13806,15789,14642,2135,15427,14023,14079,7708,\r
-3602,0,4976,10910,4821,4543,5455,9368,\r
-4201,9970,10647,15130,10079,15020,5558,15902,\r
-7858,2962,10386,2155,14641,12308,8021,8170,\r
-2490,10528,15427,14629,10528,15136,999,1883,\r
-14912,10788,6360,3677,14960,12257,2294,12614,\r
-8698,12433,9867,12663,16016,11332,8568,8348,\r
-0,3228,8594,11249,6674,3098,9297,10077,\r
-10340,5803,5420,6070,660,5676,1,9497,\r
-8700,14264,5846,12433,16282,12561,12032,13732,\r
-8239,10731,7236,10286,2678,7321,13368,6594,\r
-9047,5291,8293,2809,3268,6485,10509,2277,\r
-10471,595,8887,15919,14413,15881,8827,13726,\r
-13975,14092,7634,1652,8753,6801,6568,15853,\r
-1022,5664,0,9303,15719,6128,6674,7433,\r
-157,9360,6555,12432,9593,9660,14081,13927,\r
-8702,13702,8663,5629,3691,16298,1573,902,\r
-1272,2376,1084,14447,14666,1692,15316,15129,\r
-3833,920,8348,15839,15902,15635,10340,6603,\r
-1764,9634,3833,2470,4704,9646,385,13200,\r
-3009,1562,6846,6598,15861,8924,11762,3766,\r
-9095,431,6599,1987,15902,11064,4972,12175,\r
-14642,13857,6130,5833,13857,12112,8170,9867,\r
-2569,9648,1883,10205,12365,6801,5222,14506,\r
-1819,5142,2172,5291,15542,12112,2092,5560,\r
-4538,5461,15059,11773,15884,2099,6876,11914,\r
-3833,4972,8164,6240,12487,1341,10731,11762,\r
-14548,4471,5044,7576,2392,16129,8175,7559,\r
-12559,15861,6396,2926,7618,8417,15759,0,\r
-9095,3510,7247,1712,16345,2209,8055,0,\r
-319,12209,13144,15159,8238,7822,5014,10077,\r
-2284,7177,6555,15861,14479,2510,8170,11806,\r
-12149,12440,14185,11762,11552,8260,11864,11728,\r
-15046,11561,4707,13420,3615,2233,2277,10668,\r
-2228,8016,1813,2677,5240,6594,6636,9911,\r
-1737,4396,12500,9682,7176,2027,12500,5244,\r
-12112,1768,14571,12663,6729,3662,8170,15641,\r
-15316,9648,5373,5475,6522,14571,3662,15902,\r
-1652,9648,2228,8348,902,5988,9150,13250,\r
-13411,4675,431,5507,10616,13987,15316,1378,\r
-13832,13356,10087,9543,9093,8065,10497,8228,\r
-11762,616,12968,5411,9648,12487,9463,15597,\r
-11292,13985,14482,14600,1705,4678,12020,8828,\r
-6210,9481,14980,5738,5990,14447,1569,8618,\r
-2273,8543,1819,16158,12447,12470,10160,4725,\r
-10778,1412,8040,4300,9550,568,7394,592,\r
-9481,15680,3476,16128,7660,1214,359,6181,\r
-8618,4067,14699,13368,514,11355,8914,3801,\r
-14520,8885,10434,8274,7709,4312,7243,12633,\r
-4867,5981,4538,2490,3034,5558,6801,7512,\r
-14971,4315,4905,11682,8845,3732,1475,11661,\r
-10189,1741,11667,5605,2656,9573,10898,2796,\r
-1817,15216,11152,470,5988,6164,4972,10386,\r
-13128,7247,3268,6729,4300,13101,8568,12663,\r
-13849,3600,9718,11203,10528,13732,5251,14148,\r
-8568,13128,10205,11332,1712,12821,9557,12753,\r
-10505,5276,109,10394,10122,9809,3513,16093,\r
-2490,9943,14798,15084,4598,5174,15648,13109,\r
-0,6971,15426,14500,14571,6831,2623,6801,\r
-6522,15388,3228,11053,0,2902,4285,13853,\r
-14830,5373,15137,10087,3268,2569,6284,2902,\r
-1483,3838,12159,4764,15130,6846,6957,12499,\r
-4604,2739,14629,996,4867,13420,7791,5263,\r
-8119,10088,4128,7950,11875,16244,1147,3473,\r
-3268,15869,12821,11152,9922,1987,8238,15271,\r
-852,6921,4155,7857,11187,2275,14224,15725,\r
-9967,4479,6522,11152,2457,5962,13732,10088,\r
-11226,11359,5053,13420,3727,12487,3823,13412,\r
-13732,5962,11005,11173,8719,4354,6821,11421,\r
-15640,4769,14868,9369,215,8176,2363,1930,\r
-4124,11338,5373,2135,5253,10648,6220,5853,\r
-2741,12020,14070,14571,7476,9011,11415,1306,\r
-5318,13418,7293,15364,8898,3402,11976,9325,\r
-1562,7366,3395,10762,7144,2336,13458,4538,\r
-1159,1987,11652,12964,13513,541,13792,9741,\r
-10840,16129,10917,4534,13600,5462,2357,3890,\r
-6299,11315,13376,13820,13369,4450,14282,3510,\r
-10008,2381,9301,10165,4832,13042,3789,11751,\r
-8021,14286,9341,436,9171,8623,12745,12738,\r
-567,13996,3654,9495,844,8260,15108,2851,\r
-10351,2756,8572,3694,8851,5833,4280,12168,\r
-9550,9095,1652,6594,2534,3662,12009,6827,\r
-7447,2228,6555,15919,2294,6522,6674,0,\r
-13128,15478,3098,14571,1573,13117,16336,3422,\r
-12751,4635,9808,13171,11875,14148,14759,15680,\r
-610,780,14127,15067,12717,11768,2223,4745,\r
-2111,4363,6821,12230,13200,16093,410,15205,\r
-3838,15020,12230,3473,7951,2926,981,13414,\r
-3034,9835,3875,7247,15776,11053,10533,6393,\r
-6729,1712,12233,10088,5152,1378,6043,3871,\r
-6043,12487,15527,11769,12308,5962,11864,10804,\r
-3268,14005,13662,10647,4972,15137,14485,7784,\r
-7275,410,6555,2470,7074,359,12751,12054,\r
-8851,2993,9487,13270,9267,2370,8119,14112,\r
-6639,157,10245,16121,9967,14912,10307,8011,\r
-12094,2470,10322,3570,6154,1453,15084,14801,\r
-3823,7259,780,4972,13047,14500,2569,5833,\r
-56,14601,2690,5036,788,46,2738,9922,\r
-11332,10619,8011,13128,3268,431,13412,8851,\r
-14748,5036,12185,13042,10030,11716,100,16205,\r
-7951,5738,8417,10757,6463,7114,1183,14798,\r
-10205,9721,15359,10074,8727,4587,11875,14615,\r
-10340,9171,9171,4686,7731,4269,13042,8574,\r
-16298,7024,10309,2858,4904,7223,8238,7512,\r
-4556,3532,15222,2161,1162,6476,3221,10290,\r
-11229,15137,14921,1319,4925,1991,7817,7427,\r
-15089,9366,920,3875,4641,11787,14255,4915,\r
-7588,15555,13106,16014,12882,10324,341,1331,\r
-10685,7950,12292,10230,15336,7431,7576,6158,\r
-5058,12149,2777,13434,5263,15769,9877,2704,\r
-10300,867,1443,5285,2155,4474,935,12586,\r
-12601,158,16191,8119,3726,3554,10398,13418,\r
-8170,4867,14642,15478,1712,10136,6674,0,\r
-46,9867,3766,12433,6057,3972,2156,852,\r
-2144,9856,14761,11491,46,363,10561,4484,\r
-999,9557,2902,7323,15084,8274,16087,6679,\r
-6867,6971,2914,586,6240,5988,10386,8304,\r
-3662,10088,5988,12821,7409,8308,15931,14376,\r
-14700,15998,4484,1766,15794,3833,2464,4342,\r
-1358,319,10099,15776,15839,1530,8538,7800,\r
-3641,5569,7469,2104,8314,8976,5962,11857,\r
-10330,8293,12356,1399,1991,5415,10497,15478,\r
-15931,8308,11608,10167,4185,9369,1658,6193,\r
-5962,5132,12322,319,7802,4707,3034,11308,\r
-9559,10788,2228,8339,13513,5222,1712,3098,\r
-1987,2719,1548,15427,13361,13736,5139,1255,\r
-11064,8011,985,6135,788,2761,6522,5362,\r
-13128,3476,6164,12032,2902,15881,11053,14538,\r
-12964,14730,3751,12890,396,1132,6164,7938,\r
-3165,7677,12218,7007,4824,6266,4198,9127,\r
-12821,6463,199,6522,5462,1084,7232,15717,\r
-3354,2788,6294,11857,14174,2235,6135,7808,\r
-15931,10377,1168,9162,7176,3595,10046,1960,\r
-3726,1723,6779,10955,11201,4721,661,7247,\r
-5988,11291,9095,8555,7017,5975,14500,15822,\r
-10887,7999,9648,15908,2938,8293,14629,4233,\r
-8419,5141,12427,9360,2948,9321,13473,1134,\r
-87,4180,2284,8822,3893,15653,15668,12175,\r
-7951,12668,13119,7839,4793,4686,914,9481,\r
-11912,13196,4235,15293,5704,9063,1605,15640,\r
-13270,1192,9967,8698,5576,3059,4067,11809,\r
-5420,7691,16087,764,12487,2273,14224,13412,\r
-5373,12663,788,12433,8870,15902,14019,3966,\r
-1104,11153,13117,8913,46,9922,15240,8260,\r
-9874,1712,9096,7708,4544,15601,0,10529,\r
-7419,9404,653,4067,10717,4901,10009,7229,\r
-9867,7620,1412,14284,9931,8845,13975,8238,\r
-10941,10205,678,11308,14985,12099,3268,11120,\r
-14148,7900,5934,10099,12903,6274,9648,2851,\r
-972,5149,9506,12102,723,15873,14497,5447,\r
-13505,13658,13128,4699,11152,0,0,7808,\r
-2623,6674,9557,7920,10004,14081,0,15478,\r
-12498,7162,13662,14438,6939,10841,6599,7074,\r
-2129,9303,3614,5121,13626,14806,13096,5275,\r
-12032,11431,12265,242,12651,6465,11153,15635,\r
-6154,7864,3263,7708,13216,9466,4929,4763,\r
-16121,12949,6801,14244,6289,3766,8913,3228,\r
-10099,4198,11895,286,13119,10778,12230,7238,\r
-3614,14081,7323,4050,6846,14629,13420,9427,\r
-5460,5130,10528,15705,6369,8361,1212,8866,\r
-12821,15427,7323,2777,9648,8744,5386,8241,\r
-11875,14112,14770,15369,9813,6750,13732,6594,\r
-2464,11682,2031,15129,3532,12112,4831,4354,\r
-2275,10376,11226,11611,8313,9590,14500,8598,\r
-13403,4316,15388,13458,961,208,5995,1225,\r
-6455,5932,11987,2902,13128,1224,1003,7409,\r
-3028,650,13436,8485,6653,911,9425,11421,\r
-9554,10993,15293,514,6670,14578,4972,9874,\r
-8483,2534,14969,1934,14154,8926,11830,8784,\r
-2987,9634,6670,13501,13957,4260,5761,15347,\r
-7991,13414,7159,7233,14206,11665,6715,11079,\r
-3545,5185,15639,14307,9338,8971,15994,5645,\r
-3098,14081,788,8170,10188,8016,5988,15919,\r
-12788,14960,10214,12606,11152,2470,13420,2927,\r
-5240,7370,9648,10099,2039,4846,10610,11823,\r
-13270,14761,5962,7512,10079,4867,8260,2135,\r
-1052,10823,5729,10395,14361,13382,12200,8162,\r
-5117,7531,13361,14520,10602,8685,3654,9777,\r
-16263,6135,6389,11745,10383,8550,12618,10340,\r
-4128,15459,7062,5135,9047,9346,5897,15479,\r
-7268,5576,0,14937,12736,5545,10079,6507,\r
-3238,3204,9865,5843,12487,198,8251,13195,\r
-158,8913,6598,4373,15991,13857,3615,11106,\r
-3244,10654,6394,6183,11633,3098,12257,15427,\r
-1768,7209,11987,963,13857,7247,16046,7239,\r
-13200,11773,2914,12927,11669,13011,1905,9089,\r
-16176,3743,158,5222,12717,5825,16087,9519,\r
-9227,15563,1712,8511,11005,4867,13200,13106,\r
-10788,3606,8680,3447,5833,3709,4526,10847,\r
-2871,6000,2204,15769,2969,7617,15976,7618,\r
-4067,10757,15316,6476,10509,8772,9095,0,\r
-8996,410,14742,7239,10532,9406,7419,15903,\r
-5437,5560,12608,9141,3986,14358,7409,3992,\r
-3221,6170,11821,508,6434,1442,4260,3813,\r
-8308,6456,3534,431,4538,3406,12435,5643,\r
-7144,8870,9186,3775,1817,9905,7951,4336,\r
-2273,12264,6513,2993,16270,5541,5077,6263,\r
-1259,2559,1675,16218,1790,12804,15098,4445,\r
-10336,15216,12144,8618,4573,13679,15000,10189,\r
-2209,4583,5353,13784,2623,7720,5833,11064,\r
-10088,10077,10610,6786,10939,10867,1768,8119,\r
-7394,12056,3789,1074,15413,10527,7247,12487,\r
-8568,10136,2228,13412,4840,1652,6740,11322,\r
-5037,2910,5174,10340,2135,8011,11895,11895,\r
-109,11957,14336,13234,8225,14343,9063,9819,\r
-13517,11635,13549,14936,988,3809,5833,7857,\r
-13462,297,7668,14482,4316,10848,2569,13931,\r
-5593,12056,11103,14170,448,902,1768,11552,\r
-6043,0,0,8646,10391,0,15316,3737,\r
-10594,11026,13280,14667,5713,4057,2787,4191,\r
-3838,7247,8772,14185,15641,8772,0,14081,\r
-0,9429,17,613,7428,15131,15651,14350,\r
-4365,15856,9521,3228,7950,3395,0,6594,\r
-11078,14975,6889,10768,4288,6707,7175,2235,\r
-10896,911,7707,7592,12916,15570,15644,6997,\r
-12523,14757,11895,7109,16279,12969,11690,0,\r
-8854,16304,8568,11334,15641,15478,2275,6193,\r
-7323,5230,9835,12821,1652,12477,5044,359,\r
-12487,13881,10731,8246,14642,14885,6555,15919,\r
-13857,1982,7646,12528,12009,7310,12310,3193,\r
-359,1483,5322,10476,46,3751,3766,6729,\r
-4512,13853,5558,12736,1733,2718,9956,7857,\r
-6519,2187,12964,12949,750,8877,15136,3742,\r
-4495,13851,3811,906,11592,9943,920,10806,\r
-10442,12561,5035,988,15861,8024,10272,16372,\r
-13353,15946,7330,4834,9414,8267,1668,12498,\r
-4530,9162,8648,3883,9451,3900,2028,12427,\r
-11203,3071,5645,10228,11875,8198,4563,215,\r
-3614,5717,11332,1617,11382,13987,12626,11857,\r
-12156,6513,13496,6997,16158,9093,6725,13737,\r
-5890,10008,14447,5475,12215,141,16192,10200,\r
-4450,6688,11090,16109,12256,9027,15355,3422,\r
-10079,14571,13101,9967,12296,3460,8348,15413,\r
-5222,11762,3823,13412,6729,6599,10528,9922,\r
-11152,9171,5362,5373,750,8969,1652,6220,\r
-5373,2569,3742,15119,10340,999,10088,10731,\r
-1028,3228,7369,15256,11822,12904,8121,11641,\r
-11158,5016,10725,8412,1183,9674,11806,12112,\r
-2623,15516,4226,10021,13316,12075,792,4972,\r
-8506,8921,6133,14718,567,4349,13420,5953,\r
-2265,11902,10019,16265,16312,0,9922,3009,\r
-8170,3473,10757,3567,2825,6915,5174,4299,\r
-0,8274,6292,295,6522,1475,359,4538,\r
-5358,5174,3008,6317,12688,4165,752,12052,\r
-10008,3912,7431,13364,9894,13524,284,16013,\r
-9820,11295,1144,2845,3538,10678,13806,1469,\r
-14210,7870,3766,10528,13642,10823,4200,8031,\r
-4671,14093,5541,1214,4115,3286,8217,8018 };\r
-\r
-\r
-unsigned int phash( unsigned int move, int turn )\r
-{\r
-  unsigned int a, b;\r
-  \r
-  move |= ( (unsigned int)turn << 31 );\r
-  move += 0x69fe378e;\r
-  move ^= ( move >> 16 );\r
-  move += ( move << 8 );\r
-  move ^= ( move >> 4 );\r
-  b     = ( move >> 7 ) & 0x7ff;\r
-  a     = move >> 18;\r
-  \r
-  return a ^ tab[b];\r
-}\r
+#include "shogi.h"
+
+static unsigned short tab[] = {
+5866,14081,15663,4534,14969,3034,8274,7570,
+14571,15428,2921,37,2534,4727,660,249,
+8308,3662,15794,10079,13857,13019,6070,9141,
+3942,14629,6891,11561,12156,4793,11132,12989,
+10044,16304,9389,2228,5053,3789,5988,4479,
+8719,13901,15524,3098,7570,12949,1074,0,
+10079,16233,7531,14642,13600,8087,0,11690,
+8579,15413,6522,1076,2677,6914,10881,13803,
+13806,15789,14642,2135,15427,14023,14079,7708,
+3602,0,4976,10910,4821,4543,5455,9368,
+4201,9970,10647,15130,10079,15020,5558,15902,
+7858,2962,10386,2155,14641,12308,8021,8170,
+2490,10528,15427,14629,10528,15136,999,1883,
+14912,10788,6360,3677,14960,12257,2294,12614,
+8698,12433,9867,12663,16016,11332,8568,8348,
+0,3228,8594,11249,6674,3098,9297,10077,
+10340,5803,5420,6070,660,5676,1,9497,
+8700,14264,5846,12433,16282,12561,12032,13732,
+8239,10731,7236,10286,2678,7321,13368,6594,
+9047,5291,8293,2809,3268,6485,10509,2277,
+10471,595,8887,15919,14413,15881,8827,13726,
+13975,14092,7634,1652,8753,6801,6568,15853,
+1022,5664,0,9303,15719,6128,6674,7433,
+157,9360,6555,12432,9593,9660,14081,13927,
+8702,13702,8663,5629,3691,16298,1573,902,
+1272,2376,1084,14447,14666,1692,15316,15129,
+3833,920,8348,15839,15902,15635,10340,6603,
+1764,9634,3833,2470,4704,9646,385,13200,
+3009,1562,6846,6598,15861,8924,11762,3766,
+9095,431,6599,1987,15902,11064,4972,12175,
+14642,13857,6130,5833,13857,12112,8170,9867,
+2569,9648,1883,10205,12365,6801,5222,14506,
+1819,5142,2172,5291,15542,12112,2092,5560,
+4538,5461,15059,11773,15884,2099,6876,11914,
+3833,4972,8164,6240,12487,1341,10731,11762,
+14548,4471,5044,7576,2392,16129,8175,7559,
+12559,15861,6396,2926,7618,8417,15759,0,
+9095,3510,7247,1712,16345,2209,8055,0,
+319,12209,13144,15159,8238,7822,5014,10077,
+2284,7177,6555,15861,14479,2510,8170,11806,
+12149,12440,14185,11762,11552,8260,11864,11728,
+15046,11561,4707,13420,3615,2233,2277,10668,
+2228,8016,1813,2677,5240,6594,6636,9911,
+1737,4396,12500,9682,7176,2027,12500,5244,
+12112,1768,14571,12663,6729,3662,8170,15641,
+15316,9648,5373,5475,6522,14571,3662,15902,
+1652,9648,2228,8348,902,5988,9150,13250,
+13411,4675,431,5507,10616,13987,15316,1378,
+13832,13356,10087,9543,9093,8065,10497,8228,
+11762,616,12968,5411,9648,12487,9463,15597,
+11292,13985,14482,14600,1705,4678,12020,8828,
+6210,9481,14980,5738,5990,14447,1569,8618,
+2273,8543,1819,16158,12447,12470,10160,4725,
+10778,1412,8040,4300,9550,568,7394,592,
+9481,15680,3476,16128,7660,1214,359,6181,
+8618,4067,14699,13368,514,11355,8914,3801,
+14520,8885,10434,8274,7709,4312,7243,12633,
+4867,5981,4538,2490,3034,5558,6801,7512,
+14971,4315,4905,11682,8845,3732,1475,11661,
+10189,1741,11667,5605,2656,9573,10898,2796,
+1817,15216,11152,470,5988,6164,4972,10386,
+13128,7247,3268,6729,4300,13101,8568,12663,
+13849,3600,9718,11203,10528,13732,5251,14148,
+8568,13128,10205,11332,1712,12821,9557,12753,
+10505,5276,109,10394,10122,9809,3513,16093,
+2490,9943,14798,15084,4598,5174,15648,13109,
+0,6971,15426,14500,14571,6831,2623,6801,
+6522,15388,3228,11053,0,2902,4285,13853,
+14830,5373,15137,10087,3268,2569,6284,2902,
+1483,3838,12159,4764,15130,6846,6957,12499,
+4604,2739,14629,996,4867,13420,7791,5263,
+8119,10088,4128,7950,11875,16244,1147,3473,
+3268,15869,12821,11152,9922,1987,8238,15271,
+852,6921,4155,7857,11187,2275,14224,15725,
+9967,4479,6522,11152,2457,5962,13732,10088,
+11226,11359,5053,13420,3727,12487,3823,13412,
+13732,5962,11005,11173,8719,4354,6821,11421,
+15640,4769,14868,9369,215,8176,2363,1930,
+4124,11338,5373,2135,5253,10648,6220,5853,
+2741,12020,14070,14571,7476,9011,11415,1306,
+5318,13418,7293,15364,8898,3402,11976,9325,
+1562,7366,3395,10762,7144,2336,13458,4538,
+1159,1987,11652,12964,13513,541,13792,9741,
+10840,16129,10917,4534,13600,5462,2357,3890,
+6299,11315,13376,13820,13369,4450,14282,3510,
+10008,2381,9301,10165,4832,13042,3789,11751,
+8021,14286,9341,436,9171,8623,12745,12738,
+567,13996,3654,9495,844,8260,15108,2851,
+10351,2756,8572,3694,8851,5833,4280,12168,
+9550,9095,1652,6594,2534,3662,12009,6827,
+7447,2228,6555,15919,2294,6522,6674,0,
+13128,15478,3098,14571,1573,13117,16336,3422,
+12751,4635,9808,13171,11875,14148,14759,15680,
+610,780,14127,15067,12717,11768,2223,4745,
+2111,4363,6821,12230,13200,16093,410,15205,
+3838,15020,12230,3473,7951,2926,981,13414,
+3034,9835,3875,7247,15776,11053,10533,6393,
+6729,1712,12233,10088,5152,1378,6043,3871,
+6043,12487,15527,11769,12308,5962,11864,10804,
+3268,14005,13662,10647,4972,15137,14485,7784,
+7275,410,6555,2470,7074,359,12751,12054,
+8851,2993,9487,13270,9267,2370,8119,14112,
+6639,157,10245,16121,9967,14912,10307,8011,
+12094,2470,10322,3570,6154,1453,15084,14801,
+3823,7259,780,4972,13047,14500,2569,5833,
+56,14601,2690,5036,788,46,2738,9922,
+11332,10619,8011,13128,3268,431,13412,8851,
+14748,5036,12185,13042,10030,11716,100,16205,
+7951,5738,8417,10757,6463,7114,1183,14798,
+10205,9721,15359,10074,8727,4587,11875,14615,
+10340,9171,9171,4686,7731,4269,13042,8574,
+16298,7024,10309,2858,4904,7223,8238,7512,
+4556,3532,15222,2161,1162,6476,3221,10290,
+11229,15137,14921,1319,4925,1991,7817,7427,
+15089,9366,920,3875,4641,11787,14255,4915,
+7588,15555,13106,16014,12882,10324,341,1331,
+10685,7950,12292,10230,15336,7431,7576,6158,
+5058,12149,2777,13434,5263,15769,9877,2704,
+10300,867,1443,5285,2155,4474,935,12586,
+12601,158,16191,8119,3726,3554,10398,13418,
+8170,4867,14642,15478,1712,10136,6674,0,
+46,9867,3766,12433,6057,3972,2156,852,
+2144,9856,14761,11491,46,363,10561,4484,
+999,9557,2902,7323,15084,8274,16087,6679,
+6867,6971,2914,586,6240,5988,10386,8304,
+3662,10088,5988,12821,7409,8308,15931,14376,
+14700,15998,4484,1766,15794,3833,2464,4342,
+1358,319,10099,15776,15839,1530,8538,7800,
+3641,5569,7469,2104,8314,8976,5962,11857,
+10330,8293,12356,1399,1991,5415,10497,15478,
+15931,8308,11608,10167,4185,9369,1658,6193,
+5962,5132,12322,319,7802,4707,3034,11308,
+9559,10788,2228,8339,13513,5222,1712,3098,
+1987,2719,1548,15427,13361,13736,5139,1255,
+11064,8011,985,6135,788,2761,6522,5362,
+13128,3476,6164,12032,2902,15881,11053,14538,
+12964,14730,3751,12890,396,1132,6164,7938,
+3165,7677,12218,7007,4824,6266,4198,9127,
+12821,6463,199,6522,5462,1084,7232,15717,
+3354,2788,6294,11857,14174,2235,6135,7808,
+15931,10377,1168,9162,7176,3595,10046,1960,
+3726,1723,6779,10955,11201,4721,661,7247,
+5988,11291,9095,8555,7017,5975,14500,15822,
+10887,7999,9648,15908,2938,8293,14629,4233,
+8419,5141,12427,9360,2948,9321,13473,1134,
+87,4180,2284,8822,3893,15653,15668,12175,
+7951,12668,13119,7839,4793,4686,914,9481,
+11912,13196,4235,15293,5704,9063,1605,15640,
+13270,1192,9967,8698,5576,3059,4067,11809,
+5420,7691,16087,764,12487,2273,14224,13412,
+5373,12663,788,12433,8870,15902,14019,3966,
+1104,11153,13117,8913,46,9922,15240,8260,
+9874,1712,9096,7708,4544,15601,0,10529,
+7419,9404,653,4067,10717,4901,10009,7229,
+9867,7620,1412,14284,9931,8845,13975,8238,
+10941,10205,678,11308,14985,12099,3268,11120,
+14148,7900,5934,10099,12903,6274,9648,2851,
+972,5149,9506,12102,723,15873,14497,5447,
+13505,13658,13128,4699,11152,0,0,7808,
+2623,6674,9557,7920,10004,14081,0,15478,
+12498,7162,13662,14438,6939,10841,6599,7074,
+2129,9303,3614,5121,13626,14806,13096,5275,
+12032,11431,12265,242,12651,6465,11153,15635,
+6154,7864,3263,7708,13216,9466,4929,4763,
+16121,12949,6801,14244,6289,3766,8913,3228,
+10099,4198,11895,286,13119,10778,12230,7238,
+3614,14081,7323,4050,6846,14629,13420,9427,
+5460,5130,10528,15705,6369,8361,1212,8866,
+12821,15427,7323,2777,9648,8744,5386,8241,
+11875,14112,14770,15369,9813,6750,13732,6594,
+2464,11682,2031,15129,3532,12112,4831,4354,
+2275,10376,11226,11611,8313,9590,14500,8598,
+13403,4316,15388,13458,961,208,5995,1225,
+6455,5932,11987,2902,13128,1224,1003,7409,
+3028,650,13436,8485,6653,911,9425,11421,
+9554,10993,15293,514,6670,14578,4972,9874,
+8483,2534,14969,1934,14154,8926,11830,8784,
+2987,9634,6670,13501,13957,4260,5761,15347,
+7991,13414,7159,7233,14206,11665,6715,11079,
+3545,5185,15639,14307,9338,8971,15994,5645,
+3098,14081,788,8170,10188,8016,5988,15919,
+12788,14960,10214,12606,11152,2470,13420,2927,
+5240,7370,9648,10099,2039,4846,10610,11823,
+13270,14761,5962,7512,10079,4867,8260,2135,
+1052,10823,5729,10395,14361,13382,12200,8162,
+5117,7531,13361,14520,10602,8685,3654,9777,
+16263,6135,6389,11745,10383,8550,12618,10340,
+4128,15459,7062,5135,9047,9346,5897,15479,
+7268,5576,0,14937,12736,5545,10079,6507,
+3238,3204,9865,5843,12487,198,8251,13195,
+158,8913,6598,4373,15991,13857,3615,11106,
+3244,10654,6394,6183,11633,3098,12257,15427,
+1768,7209,11987,963,13857,7247,16046,7239,
+13200,11773,2914,12927,11669,13011,1905,9089,
+16176,3743,158,5222,12717,5825,16087,9519,
+9227,15563,1712,8511,11005,4867,13200,13106,
+10788,3606,8680,3447,5833,3709,4526,10847,
+2871,6000,2204,15769,2969,7617,15976,7618,
+4067,10757,15316,6476,10509,8772,9095,0,
+8996,410,14742,7239,10532,9406,7419,15903,
+5437,5560,12608,9141,3986,14358,7409,3992,
+3221,6170,11821,508,6434,1442,4260,3813,
+8308,6456,3534,431,4538,3406,12435,5643,
+7144,8870,9186,3775,1817,9905,7951,4336,
+2273,12264,6513,2993,16270,5541,5077,6263,
+1259,2559,1675,16218,1790,12804,15098,4445,
+10336,15216,12144,8618,4573,13679,15000,10189,
+2209,4583,5353,13784,2623,7720,5833,11064,
+10088,10077,10610,6786,10939,10867,1768,8119,
+7394,12056,3789,1074,15413,10527,7247,12487,
+8568,10136,2228,13412,4840,1652,6740,11322,
+5037,2910,5174,10340,2135,8011,11895,11895,
+109,11957,14336,13234,8225,14343,9063,9819,
+13517,11635,13549,14936,988,3809,5833,7857,
+13462,297,7668,14482,4316,10848,2569,13931,
+5593,12056,11103,14170,448,902,1768,11552,
+6043,0,0,8646,10391,0,15316,3737,
+10594,11026,13280,14667,5713,4057,2787,4191,
+3838,7247,8772,14185,15641,8772,0,14081,
+0,9429,17,613,7428,15131,15651,14350,
+4365,15856,9521,3228,7950,3395,0,6594,
+11078,14975,6889,10768,4288,6707,7175,2235,
+10896,911,7707,7592,12916,15570,15644,6997,
+12523,14757,11895,7109,16279,12969,11690,0,
+8854,16304,8568,11334,15641,15478,2275,6193,
+7323,5230,9835,12821,1652,12477,5044,359,
+12487,13881,10731,8246,14642,14885,6555,15919,
+13857,1982,7646,12528,12009,7310,12310,3193,
+359,1483,5322,10476,46,3751,3766,6729,
+4512,13853,5558,12736,1733,2718,9956,7857,
+6519,2187,12964,12949,750,8877,15136,3742,
+4495,13851,3811,906,11592,9943,920,10806,
+10442,12561,5035,988,15861,8024,10272,16372,
+13353,15946,7330,4834,9414,8267,1668,12498,
+4530,9162,8648,3883,9451,3900,2028,12427,
+11203,3071,5645,10228,11875,8198,4563,215,
+3614,5717,11332,1617,11382,13987,12626,11857,
+12156,6513,13496,6997,16158,9093,6725,13737,
+5890,10008,14447,5475,12215,141,16192,10200,
+4450,6688,11090,16109,12256,9027,15355,3422,
+10079,14571,13101,9967,12296,3460,8348,15413,
+5222,11762,3823,13412,6729,6599,10528,9922,
+11152,9171,5362,5373,750,8969,1652,6220,
+5373,2569,3742,15119,10340,999,10088,10731,
+1028,3228,7369,15256,11822,12904,8121,11641,
+11158,5016,10725,8412,1183,9674,11806,12112,
+2623,15516,4226,10021,13316,12075,792,4972,
+8506,8921,6133,14718,567,4349,13420,5953,
+2265,11902,10019,16265,16312,0,9922,3009,
+8170,3473,10757,3567,2825,6915,5174,4299,
+0,8274,6292,295,6522,1475,359,4538,
+5358,5174,3008,6317,12688,4165,752,12052,
+10008,3912,7431,13364,9894,13524,284,16013,
+9820,11295,1144,2845,3538,10678,13806,1469,
+14210,7870,3766,10528,13642,10823,4200,8031,
+4671,14093,5541,1214,4115,3286,8217,8018 };
+
+
+unsigned int CONV phash( unsigned int move, int turn )
+{
+  unsigned int a, b;
+  
+  move |= ( (unsigned int)turn << 31 );
+  move += 0x69fe378e;
+  move ^= ( move >> 16 );
+  move += ( move << 8 );
+  move ^= ( move >> 4 );
+  b     = ( move >> 7 ) & 0x7ff;
+  a     = move >> 18;
+  
+  return a ^ tab[b];
+}