forked from tensorflow/minigo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathzobrist.py
More file actions
1160 lines (1143 loc) · 66.2 KB
/
Copy pathzobrist.py
File metadata and controls
1160 lines (1143 loc) · 66.2 KB
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
""" Zobrist hash calculation.
used/imported by go.Position
"""
import enum
from collections import namedtuple
from typing import Optional, Iterable, Dict, Tuple, TYPE_CHECKING
import numpy as np
import go
class Player(enum.Enum):
black = 1
white = 2
class Point(namedtuple('Point', 'row col')):
pass
class ZobristHash:
def __init__(self, board_size: int):
self.ztable = self.initialize_ztable(DLGO_ZOBRIST_HASH, board_size)
self.EMPTY_BOARD_HASH = np.uint64(EMPTY_BOARD_HASH_19)
@staticmethod
def initialize_ztable(hmap: Dict[Tuple[Point, Player], np.uint64], n: int) -> np.ndarray:
"""
how to lookup the final table: ztable[move[0], move[1], to_play + 1]
ztable[:, :, 0/1/2] is hash for white/empty/black
"""
PLAYER_MAP = [Player.white, None, Player.black]
ztable = np.ndarray(shape=(n, n, 3), dtype=np.uint64)
for i in range(n):
for j in range(n):
for k in range(3):
ztable[(i, j, k)] = hmap[Point(i+1, j+1), PLAYER_MAP[k]]
# the most common op when playing/undo a move needs to apply "empty" hash
ztable[(i, j, 0)] ^= ztable[(i, j, 1)]
ztable[(i, j, 2)] ^= ztable[(i, j, 1)]
return ztable
def board_hash_slow(self, board: np.ndarray) -> np.uint64:
""" compute board hash stone by stone """
h = np.uint64(self.EMPTY_BOARD_HASH)
for i, j in np.argwhere(board != 0):
color = board[i, j]
h ^= self.ztable[(i, j, 1 + color)]
return h
def board_hash(self, board: np.ndarray) -> np.uint64:
""" compute board hash array style """
h = np.uint64(self.EMPTY_BOARD_HASH)
black_hashes = self.ztable[:, :, 2][board == 1]
white_hashes = self.ztable[:, :, 0][board == -1]
return h ^ np.bitwise_xor.reduce(black_hashes) ^ np.bitwise_xor.reduce(white_hashes)
def hash_after_move(self, pos: 'go.Position', move: Optional[tuple], captured: Iterable[tuple]) -> np.uint64:
start_hash = pos.zobrist_hash
if move is None:
return start_hash
to_play = pos.to_play # -1/1
h = start_hash
h ^= self.ztable[(move[0], move[1], 1 + to_play)]
for p in captured:
h ^= self.ztable[(p[0], p[1], 1 - to_play)]
return h
# below is clipped from dlgo zobrist code
DLGO_ZOBRIST_HASH = {
(Point(row=1, col=1), None): 6402364705153495313,
(Point(row=1, col=1), Player.black): 444191475187629924,
(Point(row=1, col=1), Player.white): 3180807544946524599,
(Point(row=1, col=2), None): 3474352554071515715,
(Point(row=1, col=2), Player.black): 4452486373405451057,
(Point(row=1, col=2), Player.white): 2625197482182378633,
(Point(row=1, col=3), None): 4301395653233812397,
(Point(row=1, col=3), Player.black): 1052743445463685251,
(Point(row=1, col=3), Player.white): 4333922193950527979,
(Point(row=1, col=4), None): 579019433439089653,
(Point(row=1, col=4), Player.black): 6933861647704254864,
(Point(row=1, col=4), Player.white): 7471883531373616369,
(Point(row=1, col=5), None): 6620703135527919578,
(Point(row=1, col=5), Player.black): 266726669874565249,
(Point(row=1, col=5), Player.white): 971215397166039728,
(Point(row=1, col=6), None): 4901139204652546593,
(Point(row=1, col=6), Player.black): 3661296273230053320,
(Point(row=1, col=6), Player.white): 2091383563393534946,
(Point(row=1, col=7), None): 5841479823883894579,
(Point(row=1, col=7), Player.black): 1343795425674087019,
(Point(row=1, col=7), Player.white): 7027629093182269949,
(Point(row=1, col=8), None): 6974526363558785031,
(Point(row=1, col=8), Player.black): 3308889409935951416,
(Point(row=1, col=8), Player.white): 8001375756973022700,
(Point(row=1, col=9), None): 3326669231944330056,
(Point(row=1, col=9), Player.black): 182527627536217527,
(Point(row=1, col=9), Player.white): 647055117537790819,
(Point(row=1, col=10), None): 6580632857085978264,
(Point(row=1, col=10), Player.black): 6659120627973877329,
(Point(row=1, col=10), Player.white): 6957515196384025093,
(Point(row=1, col=11), None): 9041661876709162103,
(Point(row=1, col=11), Player.black): 9191630649994762430,
(Point(row=1, col=11), Player.white): 7667317760915857375,
(Point(row=1, col=12), None): 1146547653441411500,
(Point(row=1, col=12), Player.black): 4291861776441109562,
(Point(row=1, col=12), Player.white): 5261049327471094678,
(Point(row=1, col=13), None): 2778587950653512497,
(Point(row=1, col=13), Player.black): 465534554861083261,
(Point(row=1, col=13), Player.white): 3865103907397000387,
(Point(row=1, col=14), None): 4402854031209572266,
(Point(row=1, col=14), Player.black): 2607843465059610177,
(Point(row=1, col=14), Player.white): 5449307550544736426,
(Point(row=1, col=15), None): 5205560982133491164,
(Point(row=1, col=15), Player.black): 1757319192084209670,
(Point(row=1, col=15), Player.white): 2204336175311806893,
(Point(row=1, col=16), None): 6377548462923823584,
(Point(row=1, col=16), Player.black): 5370945101679060223,
(Point(row=1, col=16), Player.white): 2750848819294718078,
(Point(row=1, col=17), None): 1922634541266613353,
(Point(row=1, col=17), Player.black): 3035185049417693555,
(Point(row=1, col=17), Player.white): 9116106208682090693,
(Point(row=1, col=18), None): 9132932969976328558,
(Point(row=1, col=18), Player.black): 9192639340869719841,
(Point(row=1, col=18), Player.white): 5306307051004961905,
(Point(row=1, col=19), None): 1273340342344806167,
(Point(row=1, col=19), Player.black): 4527122623697748155,
(Point(row=1, col=19), Player.white): 3428488706066419650,
(Point(row=2, col=1), None): 6449118728834868339,
(Point(row=2, col=1), Player.black): 1585640068930406174,
(Point(row=2, col=1), Player.white): 9134544091463577840,
(Point(row=2, col=2), None): 8328734357465609043,
(Point(row=2, col=2), Player.black): 3825472901644543968,
(Point(row=2, col=2), Player.white): 4331833334881670434,
(Point(row=2, col=3), None): 7939176487324947983,
(Point(row=2, col=3), Player.black): 8678508756355018553,
(Point(row=2, col=3), Player.white): 5235979586169535941,
(Point(row=2, col=4), None): 7263218545755892903,
(Point(row=2, col=4), Player.black): 4448713833350756341,
(Point(row=2, col=4), Player.white): 4465157666470120555,
(Point(row=2, col=5), None): 3239965565957128280,
(Point(row=2, col=5), Player.black): 4557763796869350033,
(Point(row=2, col=5), Player.white): 8842890046215258149,
(Point(row=2, col=6), None): 3769355537864191299,
(Point(row=2, col=6), Player.black): 6885240998881489694,
(Point(row=2, col=6), Player.white): 4415950635220041552,
(Point(row=2, col=7), None): 7621263210603790530,
(Point(row=2, col=7), Player.black): 7256234720016582174,
(Point(row=2, col=7), Player.white): 499138474184864094,
(Point(row=2, col=8), None): 5025506371434802894,
(Point(row=2, col=8), Player.black): 2778062765892278994,
(Point(row=2, col=8), Player.white): 3712877991078905475,
(Point(row=2, col=9), None): 840509165269696992,
(Point(row=2, col=9), Player.black): 8647746146718318171,
(Point(row=2, col=9), Player.white): 535387047113016018,
(Point(row=2, col=10), None): 8708635127468887087,
(Point(row=2, col=10), Player.black): 975639018856529464,
(Point(row=2, col=10), Player.white): 12436055714459141,
(Point(row=2, col=11), None): 8895395780204337051,
(Point(row=2, col=11), Player.black): 4412612752235080739,
(Point(row=2, col=11), Player.white): 3784840302641714006,
(Point(row=2, col=12), None): 577424424841274797,
(Point(row=2, col=12), Player.black): 4746030903634755766,
(Point(row=2, col=12), Player.white): 6316652347533303429,
(Point(row=2, col=13), None): 6441043060651851472,
(Point(row=2, col=13), Player.black): 8551628441633633049,
(Point(row=2, col=13), Player.white): 6158877703276773492,
(Point(row=2, col=14), None): 7740666914240334555,
(Point(row=2, col=14), Player.black): 6148556273867368376,
(Point(row=2, col=14), Player.white): 2671810666463534590,
(Point(row=2, col=15), None): 3756484191730342703,
(Point(row=2, col=15), Player.black): 3556222011996989557,
(Point(row=2, col=15), Player.white): 3861437304505402972,
(Point(row=2, col=16), None): 236496246506091899,
(Point(row=2, col=16), Player.black): 818014148096696419,
(Point(row=2, col=16), Player.white): 6468780300745379509,
(Point(row=2, col=17), None): 399155553254586720,
(Point(row=2, col=17), Player.black): 3702070310203979897,
(Point(row=2, col=17), Player.white): 593549611371714409,
(Point(row=2, col=18), None): 8767893947804512198,
(Point(row=2, col=18), Player.black): 5133383106902779321,
(Point(row=2, col=18), Player.white): 6828977111791572903,
(Point(row=2, col=19), None): 4592011223739099001,
(Point(row=2, col=19), Player.black): 7614885855104742178,
(Point(row=2, col=19), Player.white): 1065785641268353102,
(Point(row=3, col=1), None): 3214339223890817952,
(Point(row=3, col=1), Player.black): 1804735232890689478,
(Point(row=3, col=1), Player.white): 5530191433834147475,
(Point(row=3, col=2), None): 2459542802743141529,
(Point(row=3, col=2), Player.black): 7430710132699508883,
(Point(row=3, col=2), Player.white): 5227922030234559936,
(Point(row=3, col=3), None): 8310487749316464853,
(Point(row=3, col=3), Player.black): 6539250671230328204,
(Point(row=3, col=3), Player.white): 1636391802322895807,
(Point(row=3, col=4), None): 3201605223513475804,
(Point(row=3, col=4), Player.black): 4693922249704781826,
(Point(row=3, col=4), Player.white): 1779229419151637822,
(Point(row=3, col=5), None): 558201485475450064,
(Point(row=3, col=5), Player.black): 4865685331756308707,
(Point(row=3, col=5), Player.white): 7052208577881940555,
(Point(row=3, col=6), None): 4805567071864461468,
(Point(row=3, col=6), Player.black): 7559097505437019193,
(Point(row=3, col=6), Player.white): 4643844473324317561,
(Point(row=3, col=7), None): 1519687966931990918,
(Point(row=3, col=7), Player.black): 6786702668528296933,
(Point(row=3, col=7), Player.white): 3684977632621123172,
(Point(row=3, col=8), None): 2610234951903747791,
(Point(row=3, col=8), Player.black): 7104169818985152575,
(Point(row=3, col=8), Player.white): 4560982823209099388,
(Point(row=3, col=9), None): 159142264817205456,
(Point(row=3, col=9), Player.black): 781602136172868089,
(Point(row=3, col=9), Player.white): 5569741163936435548,
(Point(row=3, col=10), None): 9067722428313912262,
(Point(row=3, col=10), Player.black): 4723369690040452091,
(Point(row=3, col=10), Player.white): 6378019894347085307,
(Point(row=3, col=11), None): 460746804383889904,
(Point(row=3, col=11), Player.black): 8100714703851785038,
(Point(row=3, col=11), Player.white): 305499469080745306,
(Point(row=3, col=12), None): 5297676611173878612,
(Point(row=3, col=12), Player.black): 1927546534823338275,
(Point(row=3, col=12), Player.white): 896019098429197548,
(Point(row=3, col=13), None): 1286564752928684810,
(Point(row=3, col=13), Player.black): 3212624103038956378,
(Point(row=3, col=13), Player.white): 1020352911642252781,
(Point(row=3, col=14), None): 5449294960749378567,
(Point(row=3, col=14), Player.black): 1189228143402220965,
(Point(row=3, col=14), Player.white): 7591720174038768320,
(Point(row=3, col=15), None): 6931960571125079076,
(Point(row=3, col=15), Player.black): 1055891884634482278,
(Point(row=3, col=15), Player.white): 3800778189645971447,
(Point(row=3, col=16), None): 715891830713545573,
(Point(row=3, col=16), Player.black): 7852768451293332371,
(Point(row=3, col=16), Player.white): 5078429455126308573,
(Point(row=3, col=17), None): 1778533326402989039,
(Point(row=3, col=17), Player.black): 2458344364044189676,
(Point(row=3, col=17), Player.white): 3689804324801256999,
(Point(row=3, col=18), None): 2170672545712705912,
(Point(row=3, col=18), Player.black): 898230024106306560,
(Point(row=3, col=18), Player.white): 1336093135229730915,
(Point(row=3, col=19), None): 8702635158959698093,
(Point(row=3, col=19), Player.black): 8425171920202584706,
(Point(row=3, col=19), Player.white): 915181043986995702,
(Point(row=4, col=1), None): 4004871713182262070,
(Point(row=4, col=1), Player.black): 2821066776118968440,
(Point(row=4, col=1), Player.white): 606591794771243444,
(Point(row=4, col=2), None): 5230740409529799347,
(Point(row=4, col=2), Player.black): 2209315354228125698,
(Point(row=4, col=2), Player.white): 4054461639177786028,
(Point(row=4, col=3), None): 7152330581273339063,
(Point(row=4, col=3), Player.black): 1725271973127949257,
(Point(row=4, col=3), Player.white): 8476625611840964372,
(Point(row=4, col=4), None): 7083050387819501721,
(Point(row=4, col=4), Player.black): 8531110550199435366,
(Point(row=4, col=4), Player.white): 8808199961093427400,
(Point(row=4, col=5), None): 1011681971776576307,
(Point(row=4, col=5), Player.black): 7907947182356614813,
(Point(row=4, col=5), Player.white): 5256367253333525286,
(Point(row=4, col=6), None): 8090533373807174698,
(Point(row=4, col=6), Player.black): 7592576832065363597,
(Point(row=4, col=6), Player.white): 9108827166927302462,
(Point(row=4, col=7), None): 148442356257871513,
(Point(row=4, col=7), Player.black): 5610751411300577227,
(Point(row=4, col=7), Player.white): 7691118390552077387,
(Point(row=4, col=8), None): 1342630896765287083,
(Point(row=4, col=8), Player.black): 6123849063435974300,
(Point(row=4, col=8), Player.white): 8196583757814147075,
(Point(row=4, col=9), None): 2129147695078284758,
(Point(row=4, col=9), Player.black): 9111181793229849285,
(Point(row=4, col=9), Player.white): 5479420289394836701,
(Point(row=4, col=10), None): 5923407029508913502,
(Point(row=4, col=10), Player.black): 8044078599318789644,
(Point(row=4, col=10), Player.white): 5479153792641138286,
(Point(row=4, col=11), None): 393887881715599288,
(Point(row=4, col=11), Player.black): 726705351862230621,
(Point(row=4, col=11), Player.white): 8139510337319572969,
(Point(row=4, col=12), None): 2822056917918869985,
(Point(row=4, col=12), Player.black): 2433442482806939237,
(Point(row=4, col=12), Player.white): 3125525600398009853,
(Point(row=4, col=13), None): 5684229964252598350,
(Point(row=4, col=13), Player.black): 4686403392452973091,
(Point(row=4, col=13), Player.white): 6085779330032826349,
(Point(row=4, col=14), None): 7826091629117900271,
(Point(row=4, col=14), Player.black): 8931528487227229778,
(Point(row=4, col=14), Player.white): 4535458209118169084,
(Point(row=4, col=15), None): 1833797249778996213,
(Point(row=4, col=15), Player.black): 2965594857841836131,
(Point(row=4, col=15), Player.white): 4097061679336533589,
(Point(row=4, col=16), None): 943390866590328013,
(Point(row=4, col=16), Player.black): 6711478166371935177,
(Point(row=4, col=16), Player.white): 3101246156323461394,
(Point(row=4, col=17), None): 3173861742912989385,
(Point(row=4, col=17), Player.black): 8548142168299395065,
(Point(row=4, col=17), Player.white): 5335277406341172729,
(Point(row=4, col=18), None): 2203934612495904377,
(Point(row=4, col=18), Player.black): 4062952182080696242,
(Point(row=4, col=18), Player.white): 4159099634239066734,
(Point(row=4, col=19), None): 1279838196939269452,
(Point(row=4, col=19), Player.black): 8838438865276977743,
(Point(row=4, col=19), Player.white): 9213692649117641996,
(Point(row=5, col=1), None): 3970787424252681183,
(Point(row=5, col=1), Player.black): 9121673643611892697,
(Point(row=5, col=1), Player.white): 5357186677382163771,
(Point(row=5, col=2), None): 4932472531976974592,
(Point(row=5, col=2), Player.black): 714832167672743793,
(Point(row=5, col=2), Player.white): 2437081593430763803,
(Point(row=5, col=3), None): 8256778408589110131,
(Point(row=5, col=3), Player.black): 6080470963214502273,
(Point(row=5, col=3), Player.white): 2495757575503324631,
(Point(row=5, col=4), None): 89160742088962376,
(Point(row=5, col=4), Player.black): 2416021242026214464,
(Point(row=5, col=4), Player.white): 8327480479404806966,
(Point(row=5, col=5), None): 6540335895073663871,
(Point(row=5, col=5), Player.black): 1122643827088857012,
(Point(row=5, col=5), Player.white): 482721879645106227,
(Point(row=5, col=6), None): 3289361158875287472,
(Point(row=5, col=6), Player.black): 8704118699776142494,
(Point(row=5, col=6), Player.white): 2996745166287033854,
(Point(row=5, col=7), None): 2377104713468886038,
(Point(row=5, col=7), Player.black): 4141699207365748082,
(Point(row=5, col=7), Player.white): 862169453568162505,
(Point(row=5, col=8), None): 4917939387271042997,
(Point(row=5, col=8), Player.black): 1484651023567990862,
(Point(row=5, col=8), Player.white): 5673769096719125195,
(Point(row=5, col=9), None): 3020492033375902908,
(Point(row=5, col=9), Player.black): 1775183889184447121,
(Point(row=5, col=9), Player.white): 631398328521238939,
(Point(row=5, col=10), None): 6981674218688302866,
(Point(row=5, col=10), Player.black): 2273351100975277247,
(Point(row=5, col=10), Player.white): 5777225017176976571,
(Point(row=5, col=11), None): 4330705311243731973,
(Point(row=5, col=11), Player.black): 3963482564690695107,
(Point(row=5, col=11), Player.white): 2288727862300371672,
(Point(row=5, col=12), None): 9014811060966004298,
(Point(row=5, col=12), Player.black): 4289286217307604131,
(Point(row=5, col=12), Player.white): 697355111142392607,
(Point(row=5, col=13), None): 8235685956105459657,
(Point(row=5, col=13), Player.black): 8168007848538534157,
(Point(row=5, col=13), Player.white): 2804272276044443686,
(Point(row=5, col=14), None): 8225900234506491415,
(Point(row=5, col=14), Player.black): 2200277323150620183,
(Point(row=5, col=14), Player.white): 203974965768980816,
(Point(row=5, col=15), None): 2752315560833329864,
(Point(row=5, col=15), Player.black): 1237373329060552168,
(Point(row=5, col=15), Player.white): 2457801072451683571,
(Point(row=5, col=16), None): 9206495611621710488,
(Point(row=5, col=16), Player.black): 7479150707332996833,
(Point(row=5, col=16), Player.white): 653894659358868314,
(Point(row=5, col=17), None): 6953138104722064453,
(Point(row=5, col=17), Player.black): 6400962948817612487,
(Point(row=5, col=17), Player.white): 2768989623510194233,
(Point(row=5, col=18), None): 7417012331464802806,
(Point(row=5, col=18), Player.black): 3980447420236150362,
(Point(row=5, col=18), Player.white): 6919602418177107430,
(Point(row=5, col=19), None): 5668464032013017166,
(Point(row=5, col=19), Player.black): 8757112649996924998,
(Point(row=5, col=19), Player.white): 6290723394473004617,
(Point(row=6, col=1), None): 7238406206765822665,
(Point(row=6, col=1), Player.black): 423812617168567217,
(Point(row=6, col=1), Player.white): 3104019267489386807,
(Point(row=6, col=2), None): 2765613177652849486,
(Point(row=6, col=2), Player.black): 4362573117234489564,
(Point(row=6, col=2), Player.white): 4916634655561473640,
(Point(row=6, col=3), None): 2657467858928810457,
(Point(row=6, col=3), Player.black): 3735127098437132220,
(Point(row=6, col=3), Player.white): 170273614138368740,
(Point(row=6, col=4), None): 7029981726712463215,
(Point(row=6, col=4), Player.black): 8526383184719402860,
(Point(row=6, col=4), Player.white): 7823091606639214527,
(Point(row=6, col=5), None): 2860601882956863443,
(Point(row=6, col=5), Player.black): 3122201562173091301,
(Point(row=6, col=5), Player.white): 2822640494234751573,
(Point(row=6, col=6), None): 8157066395471718803,
(Point(row=6, col=6), Player.black): 5551543367155764251,
(Point(row=6, col=6), Player.white): 3323265190680832478,
(Point(row=6, col=7), None): 6286132655359072642,
(Point(row=6, col=7), Player.black): 6092326308893543831,
(Point(row=6, col=7), Player.white): 5832654969028746701,
(Point(row=6, col=8), None): 1211077220123420512,
(Point(row=6, col=8), Player.black): 627083288764982946,
(Point(row=6, col=8), Player.white): 5563068161605367514,
(Point(row=6, col=9), None): 2611182155893117641,
(Point(row=6, col=9), Player.black): 553160645565891622,
(Point(row=6, col=9), Player.white): 2201330596883065552,
(Point(row=6, col=10), None): 4003057723226907800,
(Point(row=6, col=10), Player.black): 4216348254493350495,
(Point(row=6, col=10), Player.white): 6796279568887386894,
(Point(row=6, col=11), None): 5340047233161030150,
(Point(row=6, col=11), Player.black): 776091550552755915,
(Point(row=6, col=11), Player.white): 6969021693827360652,
(Point(row=6, col=12), None): 6197898450384910086,
(Point(row=6, col=12), Player.black): 8829570073548991273,
(Point(row=6, col=12), Player.white): 8769820237202793209,
(Point(row=6, col=13), None): 5291242650150271421,
(Point(row=6, col=13), Player.black): 6662086761910395834,
(Point(row=6, col=13), Player.white): 3457949163291068790,
(Point(row=6, col=14), None): 4232629379719922985,
(Point(row=6, col=14), Player.black): 6544339295308139893,
(Point(row=6, col=14), Player.white): 5399631532724418690,
(Point(row=6, col=15), None): 2613162652827432819,
(Point(row=6, col=15), Player.black): 2049677909257218173,
(Point(row=6, col=15), Player.white): 1464310709531746579,
(Point(row=6, col=16), None): 5464082436111998573,
(Point(row=6, col=16), Player.black): 8795629608094445377,
(Point(row=6, col=16), Player.white): 4842434302155018932,
(Point(row=6, col=17), None): 6727888049076736664,
(Point(row=6, col=17), Player.black): 5100997362160864456,
(Point(row=6, col=17), Player.white): 5540122784933976079,
(Point(row=6, col=18), None): 3891535108343851883,
(Point(row=6, col=18), Player.black): 6932220238214217651,
(Point(row=6, col=18), Player.white): 3024710041380052487,
(Point(row=6, col=19), None): 5157851649025310803,
(Point(row=6, col=19), Player.black): 3859403834721659588,
(Point(row=6, col=19), Player.white): 5734093285794028742,
(Point(row=7, col=1), None): 8754311069462869784,
(Point(row=7, col=1), Player.black): 4135756281096723130,
(Point(row=7, col=1), Player.white): 2660262621554400597,
(Point(row=7, col=2), None): 3186047861180874773,
(Point(row=7, col=2), Player.black): 8437617441112518392,
(Point(row=7, col=2), Player.white): 5700847880115193089,
(Point(row=7, col=3), None): 2451349687867204270,
(Point(row=7, col=3), Player.black): 5024753648402413878,
(Point(row=7, col=3), Player.white): 4707342013474535257,
(Point(row=7, col=4), None): 894458264737334111,
(Point(row=7, col=4), Player.black): 7400549340701852518,
(Point(row=7, col=4), Player.white): 4982178515371346946,
(Point(row=7, col=5), None): 7889078960323713327,
(Point(row=7, col=5), Player.black): 3463688502071051813,
(Point(row=7, col=5), Player.white): 5439043411360527203,
(Point(row=7, col=6), None): 8158999343965029092,
(Point(row=7, col=6), Player.black): 4417991440989120207,
(Point(row=7, col=6), Player.white): 7911029905557355535,
(Point(row=7, col=7), None): 1269318264525121990,
(Point(row=7, col=7), Player.black): 5526412712629111132,
(Point(row=7, col=7), Player.white): 7056989575271047877,
(Point(row=7, col=8), None): 7310640724609976681,
(Point(row=7, col=8), Player.black): 8450643432045855842,
(Point(row=7, col=8), Player.white): 2142109716255387536,
(Point(row=7, col=9), None): 2372815664597218093,
(Point(row=7, col=9), Player.black): 5788558840708187518,
(Point(row=7, col=9), Player.white): 3942803655429791644,
(Point(row=7, col=10), None): 6132824217092640719,
(Point(row=7, col=10), Player.black): 3172679522121416254,
(Point(row=7, col=10), Player.white): 1516842868586377042,
(Point(row=7, col=11), None): 4781290152295674513,
(Point(row=7, col=11), Player.black): 4930726143183960084,
(Point(row=7, col=11), Player.white): 2266423932357799570,
(Point(row=7, col=12), None): 7235698355734347131,
(Point(row=7, col=12), Player.black): 165973395613352972,
(Point(row=7, col=12), Player.white): 4371681950815139985,
(Point(row=7, col=13), None): 8393902247179788641,
(Point(row=7, col=13), Player.black): 7590340859497507303,
(Point(row=7, col=13), Player.white): 4206211316467976619,
(Point(row=7, col=14), None): 8229545792753994899,
(Point(row=7, col=14), Player.black): 838711893588053696,
(Point(row=7, col=14), Player.white): 4477295381157072518,
(Point(row=7, col=15), None): 4173090253482017435,
(Point(row=7, col=15), Player.black): 4072906910742500792,
(Point(row=7, col=15), Player.white): 4907262873264099313,
(Point(row=7, col=16), None): 5867380728191338030,
(Point(row=7, col=16), Player.black): 8135365657022021506,
(Point(row=7, col=16), Player.white): 4189409989034502083,
(Point(row=7, col=17), None): 5874705238031490949,
(Point(row=7, col=17), Player.black): 1337494314650889511,
(Point(row=7, col=17), Player.white): 3148591770173058627,
(Point(row=7, col=18), None): 3722649922881024055,
(Point(row=7, col=18), Player.black): 3934330035566479726,
(Point(row=7, col=18), Player.white): 6860352147551392319,
(Point(row=7, col=19), None): 4259121313222633299,
(Point(row=7, col=19), Player.black): 6710991919328058302,
(Point(row=7, col=19), Player.white): 729487318318649743,
(Point(row=8, col=1), None): 2708867513683618113,
(Point(row=8, col=1), Player.black): 8284401402821228502,
(Point(row=8, col=1), Player.white): 266774759783490574,
(Point(row=8, col=2), None): 5918755146055395138,
(Point(row=8, col=2), Player.black): 5702689780266635942,
(Point(row=8, col=2), Player.white): 2220258171102127975,
(Point(row=8, col=3), None): 6653466860005395853,
(Point(row=8, col=3), Player.black): 5694510591981484870,
(Point(row=8, col=3), Player.white): 2556856366938374080,
(Point(row=8, col=4), None): 8020600426333158407,
(Point(row=8, col=4), Player.black): 6356921100593396180,
(Point(row=8, col=4), Player.white): 5149748205727967954,
(Point(row=8, col=5), None): 3051160807432229960,
(Point(row=8, col=5), Player.black): 260378505723678285,
(Point(row=8, col=5), Player.white): 1822942542127719912,
(Point(row=8, col=6), None): 2059368881907087243,
(Point(row=8, col=6), Player.black): 7630446262559191057,
(Point(row=8, col=6), Player.white): 2352065658131437765,
(Point(row=8, col=7), None): 1000694156378281597,
(Point(row=8, col=7), Player.black): 6211828436070597931,
(Point(row=8, col=7), Player.white): 9013248265871745105,
(Point(row=8, col=8), None): 2815401307423159003,
(Point(row=8, col=8), Player.black): 7483337698674146232,
(Point(row=8, col=8), Player.white): 9052402633085182507,
(Point(row=8, col=9), None): 6384879156631677794,
(Point(row=8, col=9), Player.black): 8426441507681753452,
(Point(row=8, col=9), Player.white): 1854388785471876700,
(Point(row=8, col=10), None): 142227175561852656,
(Point(row=8, col=10), Player.black): 65994339143027192,
(Point(row=8, col=10), Player.white): 1426413243849234911,
(Point(row=8, col=11), None): 8430986503980830376,
(Point(row=8, col=11), Player.black): 619817367324323140,
(Point(row=8, col=11), Player.white): 4677987248292530730,
(Point(row=8, col=12), None): 1508615909331847777,
(Point(row=8, col=12), Player.black): 8162333180096663164,
(Point(row=8, col=12), Player.white): 5852637502964969314,
(Point(row=8, col=13), None): 3275974798452305241,
(Point(row=8, col=13), Player.black): 631782669438325441,
(Point(row=8, col=13), Player.white): 8555593582322512786,
(Point(row=8, col=14), None): 4134515947666502889,
(Point(row=8, col=14), Player.black): 4197594044100261270,
(Point(row=8, col=14), Player.white): 2117711969623158939,
(Point(row=8, col=15), None): 2704155668255596809,
(Point(row=8, col=15), Player.black): 8386704845222266124,
(Point(row=8, col=15), Player.white): 6995258630292617909,
(Point(row=8, col=16), None): 4620356030723102193,
(Point(row=8, col=16), Player.black): 8844257309346066382,
(Point(row=8, col=16), Player.white): 4397164639691657310,
(Point(row=8, col=17), None): 6924436026869042932,
(Point(row=8, col=17), Player.black): 7384357565442669286,
(Point(row=8, col=17), Player.white): 7926866768428985043,
(Point(row=8, col=18), None): 1215192570725879370,
(Point(row=8, col=18), Player.black): 5352654741175191994,
(Point(row=8, col=18), Player.white): 7230246477789996181,
(Point(row=8, col=19), None): 4928595744231691382,
(Point(row=8, col=19), Player.black): 8616104833462014511,
(Point(row=8, col=19), Player.white): 1892938770974011968,
(Point(row=9, col=1), None): 6743386700188933609,
(Point(row=9, col=1), Player.black): 3950154523875636246,
(Point(row=9, col=1), Player.white): 6192177334781799846,
(Point(row=9, col=2), None): 1158215549499412747,
(Point(row=9, col=2), Player.black): 5196418744428607937,
(Point(row=9, col=2), Player.white): 2762022000374018832,
(Point(row=9, col=3), None): 3437874067203692545,
(Point(row=9, col=3), Player.black): 3176712490511609694,
(Point(row=9, col=3), Player.white): 5532505359918782509,
(Point(row=9, col=4), None): 1681133576289494651,
(Point(row=9, col=4), Player.black): 3265322080508945804,
(Point(row=9, col=4), Player.white): 8813436625971083059,
(Point(row=9, col=5), None): 4809082433745526062,
(Point(row=9, col=5), Player.black): 8937671368406148786,
(Point(row=9, col=5), Player.white): 7053786125698232633,
(Point(row=9, col=6), None): 6949320065309673474,
(Point(row=9, col=6), Player.black): 8712247726931233578,
(Point(row=9, col=6), Player.white): 4800931047663682160,
(Point(row=9, col=7), None): 5528666175740154755,
(Point(row=9, col=7), Player.black): 1327409937908817374,
(Point(row=9, col=7), Player.white): 4968243361936629567,
(Point(row=9, col=8), None): 1766252635293279171,
(Point(row=9, col=8), Player.black): 8371827633496203896,
(Point(row=9, col=8), Player.white): 7664536919037887122,
(Point(row=9, col=9), None): 834007951221734505,
(Point(row=9, col=9), Player.black): 1372011264285931700,
(Point(row=9, col=9), Player.white): 6958136041648042869,
(Point(row=9, col=10), None): 8335642646378469991,
(Point(row=9, col=10), Player.black): 8846790262314288081,
(Point(row=9, col=10), Player.white): 4754132456638923854,
(Point(row=9, col=11), None): 728530736027322184,
(Point(row=9, col=11), Player.black): 1223080923982888743,
(Point(row=9, col=11), Player.white): 9083073265780692130,
(Point(row=9, col=12), None): 8398287296122274253,
(Point(row=9, col=12), Player.black): 917843401066074734,
(Point(row=9, col=12), Player.white): 3892412035384001864,
(Point(row=9, col=13), None): 5810603813584124513,
(Point(row=9, col=13), Player.black): 2044483860325592702,
(Point(row=9, col=13), Player.white): 3568871320809511757,
(Point(row=9, col=14), None): 7084073977275282610,
(Point(row=9, col=14), Player.black): 308871768499422692,
(Point(row=9, col=14), Player.white): 2975360071744976769,
(Point(row=9, col=15), None): 965035502713851221,
(Point(row=9, col=15), Player.black): 4686998987103768104,
(Point(row=9, col=15), Player.white): 6763319247795544372,
(Point(row=9, col=16), None): 335543540674458061,
(Point(row=9, col=16), Player.black): 8858140030017112705,
(Point(row=9, col=16), Player.white): 7051082800217888273,
(Point(row=9, col=17), None): 5822265270841595340,
(Point(row=9, col=17), Player.black): 1571417258931187188,
(Point(row=9, col=17), Player.white): 6177082688753647598,
(Point(row=9, col=18), None): 8031848734766952378,
(Point(row=9, col=18), Player.black): 5983730123854807911,
(Point(row=9, col=18), Player.white): 696389077836533043,
(Point(row=9, col=19), None): 2882479314766007597,
(Point(row=9, col=19), Player.black): 8713061394733110502,
(Point(row=9, col=19), Player.white): 1050853813804221676,
(Point(row=10, col=1), None): 1950234272191381469,
(Point(row=10, col=1), Player.black): 5175079759805257525,
(Point(row=10, col=1), Player.white): 4757374552741113331,
(Point(row=10, col=2), None): 8813779413874243703,
(Point(row=10, col=2), Player.black): 2093855662644194547,
(Point(row=10, col=2), Player.white): 7326110078467404228,
(Point(row=10, col=3), None): 1896199623460553578,
(Point(row=10, col=3), Player.black): 3494786890845576880,
(Point(row=10, col=3), Player.white): 4822579479625204366,
(Point(row=10, col=4), None): 4110133747305616117,
(Point(row=10, col=4), Player.black): 6809121397298136095,
(Point(row=10, col=4), Player.white): 1142547570472052062,
(Point(row=10, col=5), None): 3920574724383796057,
(Point(row=10, col=5), Player.black): 8490022816923582618,
(Point(row=10, col=5), Player.white): 7912568750051101101,
(Point(row=10, col=6), None): 2611484310505569377,
(Point(row=10, col=6), Player.black): 8026232239820375548,
(Point(row=10, col=6), Player.white): 8243417593632187738,
(Point(row=10, col=7), None): 4606569151749803495,
(Point(row=10, col=7), Player.black): 7986741646505653418,
(Point(row=10, col=7), Player.white): 4082810198274077169,
(Point(row=10, col=8), None): 2580857269279378932,
(Point(row=10, col=8), Player.black): 8706569330971570630,
(Point(row=10, col=8), Player.white): 5645076841868909104,
(Point(row=10, col=9), None): 7424587179509651130,
(Point(row=10, col=9), Player.black): 2184698807655211705,
(Point(row=10, col=9), Player.white): 3156600238538578747,
(Point(row=10, col=10), None): 3310293293796591705,
(Point(row=10, col=10), Player.black): 2282523187695085649,
(Point(row=10, col=10), Player.white): 1907651172290516840,
(Point(row=10, col=11), None): 4081014091650373916,
(Point(row=10, col=11), Player.black): 860252683717739433,
(Point(row=10, col=11), Player.white): 3113425945782685885,
(Point(row=10, col=12), None): 8496032273814956766,
(Point(row=10, col=12), Player.black): 8112914414093410853,
(Point(row=10, col=12), Player.white): 5674386181867331442,
(Point(row=10, col=13), None): 460960048795654073,
(Point(row=10, col=13), Player.black): 2096970978170442551,
(Point(row=10, col=13), Player.white): 65888111676722484,
(Point(row=10, col=14), None): 2150527785864224937,
(Point(row=10, col=14), Player.black): 6933109289082883821,
(Point(row=10, col=14), Player.white): 5299541951288090098,
(Point(row=10, col=15), None): 2156046386939312224,
(Point(row=10, col=15), Player.black): 1577851428011824440,
(Point(row=10, col=15), Player.white): 5883930708901612338,
(Point(row=10, col=16), None): 5894456861931156456,
(Point(row=10, col=16), Player.black): 1789633680523736723,
(Point(row=10, col=16), Player.white): 2060351134511504306,
(Point(row=10, col=17), None): 6528956843065007787,
(Point(row=10, col=17), Player.black): 1750562304957394079,
(Point(row=10, col=17), Player.white): 2614619476442229857,
(Point(row=10, col=18), None): 4285372643475982199,
(Point(row=10, col=18), Player.black): 1253633533403755994,
(Point(row=10, col=18), Player.white): 7708574052894177945,
(Point(row=10, col=19), None): 1146181610758603993,
(Point(row=10, col=19), Player.black): 2907147452008658037,
(Point(row=10, col=19), Player.white): 1624893857574645652,
(Point(row=11, col=1), None): 6600889724937353275,
(Point(row=11, col=1), Player.black): 5251013867839258866,
(Point(row=11, col=1), Player.white): 182706400080058445,
(Point(row=11, col=2), None): 8452575339349872181,
(Point(row=11, col=2), Player.black): 1016978115270879205,
(Point(row=11, col=2), Player.white): 3675955787731333716,
(Point(row=11, col=3), None): 7988035518794270861,
(Point(row=11, col=3), Player.black): 8013990723634243579,
(Point(row=11, col=3), Player.white): 5188540287965720978,
(Point(row=11, col=4), None): 2626010928596301180,
(Point(row=11, col=4), Player.black): 8676164363279579784,
(Point(row=11, col=4), Player.white): 6136845334252258012,
(Point(row=11, col=5), None): 7739883564023534804,
(Point(row=11, col=5), Player.black): 3870292117782701049,
(Point(row=11, col=5), Player.white): 3379418719542278107,
(Point(row=11, col=6), None): 3191367889339035055,
(Point(row=11, col=6), Player.black): 3887270346160412488,
(Point(row=11, col=6), Player.white): 8311930232282244556,
(Point(row=11, col=7), None): 1057014878116115124,
(Point(row=11, col=7), Player.black): 117733489483515854,
(Point(row=11, col=7), Player.white): 283931416477096805,
(Point(row=11, col=8), None): 4288592364095064501,
(Point(row=11, col=8), Player.black): 4374889157940996903,
(Point(row=11, col=8), Player.white): 5253619226708660761,
(Point(row=11, col=9), None): 462087282971616580,
(Point(row=11, col=9), Player.black): 6706345442552767344,
(Point(row=11, col=9), Player.white): 7091181745596794369,
(Point(row=11, col=10), None): 4934056123847552657,
(Point(row=11, col=10), Player.black): 5070506725134408311,
(Point(row=11, col=10), Player.white): 3795547590811991174,
(Point(row=11, col=11), None): 1297554240296777509,
(Point(row=11, col=11), Player.black): 1523276519119352578,
(Point(row=11, col=11), Player.white): 8129907947090939767,
(Point(row=11, col=12), None): 9071521583323485530,
(Point(row=11, col=12), Player.black): 5078701995274613057,
(Point(row=11, col=12), Player.white): 3789082397402468533,
(Point(row=11, col=13), None): 8203112540552071704,
(Point(row=11, col=13), Player.black): 1862648691335708078,
(Point(row=11, col=13), Player.white): 3563230535496567664,
(Point(row=11, col=14), None): 5294618759427954761,
(Point(row=11, col=14), Player.black): 146067844120509946,
(Point(row=11, col=14), Player.white): 3458225018555978949,
(Point(row=11, col=15), None): 8339043895005418257,
(Point(row=11, col=15), Player.black): 2177022254647070435,
(Point(row=11, col=15), Player.white): 4164108108099808472,
(Point(row=11, col=16), None): 8992767240077238223,
(Point(row=11, col=16), Player.black): 8266732303263193660,
(Point(row=11, col=16), Player.white): 7769342006007064958,
(Point(row=11, col=17), None): 8150564971404507664,
(Point(row=11, col=17), Player.black): 6165614977864587183,
(Point(row=11, col=17), Player.white): 877272186653260412,
(Point(row=11, col=18), None): 7327898938204419879,
(Point(row=11, col=18), Player.black): 329182253602334078,
(Point(row=11, col=18), Player.white): 2400841112928608,
(Point(row=11, col=19), None): 3977123413101628477,
(Point(row=11, col=19), Player.black): 5062038999931368386,
(Point(row=11, col=19), Player.white): 2721390189772895402,
(Point(row=12, col=1), None): 4360033836765261028,
(Point(row=12, col=1), Player.black): 8204114360619351780,
(Point(row=12, col=1), Player.white): 6954811528197685000,
(Point(row=12, col=2), None): 9036247333791858215,
(Point(row=12, col=2), Player.black): 2199614172029597010,
(Point(row=12, col=2), Player.white): 1856723800642548680,
(Point(row=12, col=3), None): 5674729209171125804,
(Point(row=12, col=3), Player.black): 7883502993642673307,
(Point(row=12, col=3), Player.white): 9110809727914459295,
(Point(row=12, col=4), None): 8083477365681075767,
(Point(row=12, col=4), Player.black): 7653855125822988063,
(Point(row=12, col=4), Player.white): 2550946436039360190,
(Point(row=12, col=5), None): 3349324930458867787,
(Point(row=12, col=5), Player.black): 3252660232637555005,
(Point(row=12, col=5), Player.white): 1234973871658377379,
(Point(row=12, col=6), None): 2372796904463625457,
(Point(row=12, col=6), Player.black): 2714474110718573658,
(Point(row=12, col=6), Player.white): 2922932858700824842,
(Point(row=12, col=7), None): 6984466958382389975,
(Point(row=12, col=7), Player.black): 1304272032505844829,
(Point(row=12, col=7), Player.white): 4412464546816746704,
(Point(row=12, col=8), None): 3476365136404014733,
(Point(row=12, col=8), Player.black): 6371091448955140245,
(Point(row=12, col=8), Player.white): 1466560588593637266,
(Point(row=12, col=9), None): 4642717582336135617,
(Point(row=12, col=9), Player.black): 8948855720666141590,
(Point(row=12, col=9), Player.white): 6213597555189260145,
(Point(row=12, col=10), None): 2671207131631953832,
(Point(row=12, col=10), Player.black): 2289855430531536781,
(Point(row=12, col=10), Player.white): 1079994396639798172,
(Point(row=12, col=11), None): 3677910639930301919,
(Point(row=12, col=11), Player.black): 264717285611233850,
(Point(row=12, col=11), Player.white): 6132419899442887956,
(Point(row=12, col=12), None): 5036790561745105113,
(Point(row=12, col=12), Player.black): 3894831455188040975,
(Point(row=12, col=12), Player.white): 8397680417073351336,
(Point(row=12, col=13), None): 7486952213357644434,
(Point(row=12, col=13), Player.black): 8019055082110826633,
(Point(row=12, col=13), Player.white): 2763271402461037383,
(Point(row=12, col=14), None): 4187848061922147931,
(Point(row=12, col=14), Player.black): 8212920524602598463,
(Point(row=12, col=14), Player.white): 6059940661878438388,
(Point(row=12, col=15), None): 1706069461311095556,
(Point(row=12, col=15), Player.black): 800160352722785413,
(Point(row=12, col=15), Player.white): 3325247341665160990,
(Point(row=12, col=16), None): 8027599743141047580,
(Point(row=12, col=16), Player.black): 445641289634904717,
(Point(row=12, col=16), Player.white): 3567511526301907961,
(Point(row=12, col=17), None): 7385537632455963735,
(Point(row=12, col=17), Player.black): 62410261542762687,
(Point(row=12, col=17), Player.white): 2167299545513438560,
(Point(row=12, col=18), None): 1985116491241899714,
(Point(row=12, col=18), Player.black): 6255202715009013310,
(Point(row=12, col=18), Player.white): 8414900668028793600,
(Point(row=12, col=19), None): 2429276353133396490,
(Point(row=12, col=19), Player.black): 1847682822850556028,
(Point(row=12, col=19), Player.white): 7348162734895443377,
(Point(row=13, col=1), None): 2740644359063616243,
(Point(row=13, col=1), Player.black): 4300965642275840365,
(Point(row=13, col=1), Player.white): 7818198876660425920,
(Point(row=13, col=2), None): 7691740946004035704,
(Point(row=13, col=2), Player.black): 1739396463365117424,
(Point(row=13, col=2), Player.white): 1205206435048225510,
(Point(row=13, col=3), None): 6071201435843963197,
(Point(row=13, col=3), Player.black): 1859468397498404977,
(Point(row=13, col=3), Player.white): 8918623117509719449,
(Point(row=13, col=4), None): 1821748043159364911,
(Point(row=13, col=4), Player.black): 4631942953520085482,
(Point(row=13, col=4), Player.white): 5013417302799730077,
(Point(row=13, col=5), None): 7862578350480619139,
(Point(row=13, col=5), Player.black): 1727990950976565183,
(Point(row=13, col=5), Player.white): 6945730708205859564,
(Point(row=13, col=6), None): 1241167448281569216,
(Point(row=13, col=6), Player.black): 7159801058727899484,
(Point(row=13, col=6), Player.white): 550198735512664108,
(Point(row=13, col=7), None): 1293671948176065378,
(Point(row=13, col=7), Player.black): 8954381719324200566,
(Point(row=13, col=7), Player.white): 6469536102592732480,
(Point(row=13, col=8), None): 7309379715586934845,
(Point(row=13, col=8), Player.black): 3942431050182997112,
(Point(row=13, col=8), Player.white): 3562871107319467957,
(Point(row=13, col=9), None): 3554368399876695750,
(Point(row=13, col=9), Player.black): 4820981967630837995,
(Point(row=13, col=9), Player.white): 6506003644779812706,
(Point(row=13, col=10), None): 75165547083973152,
(Point(row=13, col=10), Player.black): 2726396203636676247,
(Point(row=13, col=10), Player.white): 3528833049631923826,
(Point(row=13, col=11), None): 1312496585560927648,
(Point(row=13, col=11), Player.black): 1552363990659818621,
(Point(row=13, col=11), Player.white): 3092638618649416205,
(Point(row=13, col=12), None): 7293160852328703843,
(Point(row=13, col=12), Player.black): 3028478959388987959,
(Point(row=13, col=12), Player.white): 135459696849454266,
(Point(row=13, col=13), None): 8240027998143891221,
(Point(row=13, col=13), Player.black): 6832571697712871192,
(Point(row=13, col=13), Player.white): 6670610197927269334,
(Point(row=13, col=14), None): 7897243161474883760,
(Point(row=13, col=14), Player.black): 4194661492642604232,
(Point(row=13, col=14), Player.white): 8897469759656018470,
(Point(row=13, col=15), None): 3628909237245382490,
(Point(row=13, col=15), Player.black): 3621083416792383737,
(Point(row=13, col=15), Player.white): 1044951076593964374,
(Point(row=13, col=16), None): 5074519954533631651,
(Point(row=13, col=16), Player.black): 4785826263584180796,
(Point(row=13, col=16), Player.white): 2896995813186829821,
(Point(row=13, col=17), None): 2521897184292838739,
(Point(row=13, col=17), Player.black): 3726710280247918589,
(Point(row=13, col=17), Player.white): 1346132077020756898,
(Point(row=13, col=18), None): 362426564225769883,
(Point(row=13, col=18), Player.black): 6262172930722527705,
(Point(row=13, col=18), Player.white): 971261805966150392,
(Point(row=13, col=19), None): 2719861366189057701,
(Point(row=13, col=19), Player.black): 308866103452104365,
(Point(row=13, col=19), Player.white): 6218592345396876308,
(Point(row=14, col=1), None): 8924232850905585413,
(Point(row=14, col=1), Player.black): 5694058760963514477,
(Point(row=14, col=1), Player.white): 2244012173554539786,
(Point(row=14, col=2), None): 5591784495217181424,
(Point(row=14, col=2), Player.black): 3889975433169933029,
(Point(row=14, col=2), Player.white): 5849393950258914488,
(Point(row=14, col=3), None): 2133780521550489293,
(Point(row=14, col=3), Player.black): 1396880423203366649,
(Point(row=14, col=3), Player.white): 4110208832263932145,
(Point(row=14, col=4), None): 1117238335814674381,
(Point(row=14, col=4), Player.black): 8749019886330822436,
(Point(row=14, col=4), Player.white): 5088905729799233472,
(Point(row=14, col=5), None): 5334171861263963358,
(Point(row=14, col=5), Player.black): 734689735421136974,
(Point(row=14, col=5), Player.white): 5026682058626472335,
(Point(row=14, col=6), None): 2884149941149311262,
(Point(row=14, col=6), Player.black): 5148069458024981520,
(Point(row=14, col=6), Player.white): 3775111677789921901,
(Point(row=14, col=7), None): 268536115391065705,
(Point(row=14, col=7), Player.black): 1584289617759234736,
(Point(row=14, col=7), Player.white): 6110944001437383435,
(Point(row=14, col=8), None): 4431372681799391870,
(Point(row=14, col=8), Player.black): 8495880876011258463,
(Point(row=14, col=8), Player.white): 1779102438903325334,
(Point(row=14, col=9), None): 8457042363905943411,
(Point(row=14, col=9), Player.black): 5991947578814289866,
(Point(row=14, col=9), Player.white): 1819755688896508506,
(Point(row=14, col=10), None): 8020269451533821453,
(Point(row=14, col=10), Player.black): 76807380073689101,
(Point(row=14, col=10), Player.white): 4875460073468700149,
(Point(row=14, col=11), None): 649950192155371578,
(Point(row=14, col=11), Player.black): 8420286392003412464,
(Point(row=14, col=11), Player.white): 7330202131997174971,
(Point(row=14, col=12), None): 3437898181839925521,
(Point(row=14, col=12), Player.black): 4579844043636482751,
(Point(row=14, col=12), Player.white): 5675298027485555095,
(Point(row=14, col=13), None): 2782341101524300525,
(Point(row=14, col=13), Player.black): 4475387273802659322,
(Point(row=14, col=13), Player.white): 5102347129208604848,
(Point(row=14, col=14), None): 1833468644417825643,
(Point(row=14, col=14), Player.black): 6290874629857104695,
(Point(row=14, col=14), Player.white): 8561294844716308608,
(Point(row=14, col=15), None): 254966696020520283,
(Point(row=14, col=15), Player.black): 7367677728278944549,
(Point(row=14, col=15), Player.white): 1824843138712013229,
(Point(row=14, col=16), None): 1055401592349859307,
(Point(row=14, col=16), Player.black): 7827546914560571253,
(Point(row=14, col=16), Player.white): 5667720198339318907,
(Point(row=14, col=17), None): 1408031708744953358,
(Point(row=14, col=17), Player.black): 2861774344483343859,
(Point(row=14, col=17), Player.white): 3381675511593998274,
(Point(row=14, col=18), None): 7336561305202704811,
(Point(row=14, col=18), Player.black): 6556318742702303239,
(Point(row=14, col=18), Player.white): 1324000411936927448,
(Point(row=14, col=19), None): 8954819160184438559,
(Point(row=14, col=19), Player.black): 8052349090182791458,
(Point(row=14, col=19), Player.white): 7239229860948448453,
(Point(row=15, col=1), None): 8291809624538792221,
(Point(row=15, col=1), Player.black): 2538083883736520226,
(Point(row=15, col=1), Player.white): 8274655105676915846,
(Point(row=15, col=2), None): 6931566474393815647,
(Point(row=15, col=2), Player.black): 4545000441550109050,
(Point(row=15, col=2), Player.white): 5873594683098786847,
(Point(row=15, col=3), None): 8315099980556599349,
(Point(row=15, col=3), Player.black): 8464849721411205594,
(Point(row=15, col=3), Player.white): 2458216153093656083,
(Point(row=15, col=4), None): 479004347673471424,
(Point(row=15, col=4), Player.black): 1244855509357968671,
(Point(row=15, col=4), Player.white): 4575261232844901683,
(Point(row=15, col=5), None): 5715414256790813417,
(Point(row=15, col=5), Player.black): 1250921919857759889,
(Point(row=15, col=5), Player.white): 1081204847824126909,
(Point(row=15, col=6), None): 6624630350275454462,
(Point(row=15, col=6), Player.black): 5516454750686759462,
(Point(row=15, col=6), Player.white): 2756644124819897588,
(Point(row=15, col=7), None): 3340176754373011181,
(Point(row=15, col=7), Player.black): 3206204824346623496,
(Point(row=15, col=7), Player.white): 26430015510255603,
(Point(row=15, col=8), None): 4930751566536492850,
(Point(row=15, col=8), Player.black): 597522933322154360,
(Point(row=15, col=8), Player.white): 371967473456796557,
(Point(row=15, col=9), None): 3841041044456046036,
(Point(row=15, col=9), Player.black): 4311573471646846043,
(Point(row=15, col=9), Player.white): 6618550024651892578,
(Point(row=15, col=10), None): 6025152064570605573,
(Point(row=15, col=10), Player.black): 4840379054011716996,
(Point(row=15, col=10), Player.white): 412450886724929897,
(Point(row=15, col=11), None): 4728798248329881085,
(Point(row=15, col=11), Player.black): 518079527071036378,
(Point(row=15, col=11), Player.white): 4288178157707188241,
(Point(row=15, col=12), None): 7092648339647305837,
(Point(row=15, col=12), Player.black): 6594680907138298189,
(Point(row=15, col=12), Player.white): 3384010508749114041,
(Point(row=15, col=13), None): 3175325380222444724,
(Point(row=15, col=13), Player.black): 4042200394647250377,
(Point(row=15, col=13), Player.white): 989323389652347970,
(Point(row=15, col=14), None): 6992105915936304959,
(Point(row=15, col=14), Player.black): 5167926881444962887,
(Point(row=15, col=14), Player.white): 1880109307190105705,
(Point(row=15, col=15), None): 6777615500034728810,
(Point(row=15, col=15), Player.black): 5501299262012918754,
(Point(row=15, col=15), Player.white): 3399344572582604150,
(Point(row=15, col=16), None): 7672486937793083068,
(Point(row=15, col=16), Player.black): 4590561347678556578,
(Point(row=15, col=16), Player.white): 2744835452180995638,
(Point(row=15, col=17), None): 579802781452674641,
(Point(row=15, col=17), Player.black): 7815051084238234798,
(Point(row=15, col=17), Player.white): 8825071524309684872,
(Point(row=15, col=18), None): 7856181308947372757,
(Point(row=15, col=18), Player.black): 4870193313166468144,
(Point(row=15, col=18), Player.white): 3688724226392407154,
(Point(row=15, col=19), None): 8922173895957909887,
(Point(row=15, col=19), Player.black): 1877065985697984506,
(Point(row=15, col=19), Player.white): 8655554446381557936,
(Point(row=16, col=1), None): 6556031236969286246,
(Point(row=16, col=1), Player.black): 6443645201743780202,
(Point(row=16, col=1), Player.white): 2762067543878927108,
(Point(row=16, col=2), None): 2366571831079956419,
(Point(row=16, col=2), Player.black): 939033849504052381,
(Point(row=16, col=2), Player.white): 846003791900350306,
(Point(row=16, col=3), None): 7165211158568592344,
(Point(row=16, col=3), Player.black): 5129770743968664015,
(Point(row=16, col=3), Player.white): 7275730683128642676,
(Point(row=16, col=4), None): 6581020631265903357,
(Point(row=16, col=4), Player.black): 2951028199540884145,
(Point(row=16, col=4), Player.white): 7031281878075417899,
(Point(row=16, col=5), None): 4950460232062986255,
(Point(row=16, col=5), Player.black): 7911970555751691695,
(Point(row=16, col=5), Player.white): 6538335192289137380,
(Point(row=16, col=6), None): 7562886280055929503,
(Point(row=16, col=6), Player.black): 5515623507188643909,
(Point(row=16, col=6), Player.white): 486243866438770865,
(Point(row=16, col=7), None): 370952491074592131,
(Point(row=16, col=7), Player.black): 6186966918632387361,
(Point(row=16, col=7), Player.white): 8367573962684752055,
(Point(row=16, col=8), None): 5111164465840843253,
(Point(row=16, col=8), Player.black): 6843500356969554304,
(Point(row=16, col=8), Player.white): 1861655187442495092,
(Point(row=16, col=9), None): 8513801854010801898,
(Point(row=16, col=9), Player.black): 3769943096339235807,
(Point(row=16, col=9), Player.white): 7700883061110114305,
(Point(row=16, col=10), None): 6036858580882119589,
(Point(row=16, col=10), Player.black): 6235654762231292950,
(Point(row=16, col=10), Player.white): 2837846151478443838,
(Point(row=16, col=11), None): 1541044112500056336,
(Point(row=16, col=11), Player.black): 7770808223579816188,
(Point(row=16, col=11), Player.white): 3650766475271992051,
(Point(row=16, col=12), None): 5616154398682881462,
(Point(row=16, col=12), Player.black): 7534628418839371086,
(Point(row=16, col=12), Player.white): 7511668397119318463,
(Point(row=16, col=13), None): 6814315894443601661,
(Point(row=16, col=13), Player.black): 2269838876424946526,
(Point(row=16, col=13), Player.white): 28215113756749003,
(Point(row=16, col=14), None): 5048258071989020202,
(Point(row=16, col=14), Player.black): 1210825246322736323,
(Point(row=16, col=14), Player.white): 7284838970644067464,
(Point(row=16, col=15), None): 881739829658612186,
(Point(row=16, col=15), Player.black): 4941573376550531472,
(Point(row=16, col=15), Player.white): 3712836831209236121,
(Point(row=16, col=16), None): 8268238307895306528,
(Point(row=16, col=16), Player.black): 8124387305920822925,
(Point(row=16, col=16), Player.white): 4386167911205470553,
(Point(row=16, col=17), None): 3853246836506317104,
(Point(row=16, col=17), Player.black): 8901133131138247364,
(Point(row=16, col=17), Player.white): 2821377795133081773,
(Point(row=16, col=18), None): 5160743941508258720,
(Point(row=16, col=18), Player.black): 5018262052375639436,
(Point(row=16, col=18), Player.white): 597087507416802053,
(Point(row=16, col=19), None): 7990071123641771138,
(Point(row=16, col=19), Player.black): 2647034409199430891,
(Point(row=16, col=19), Player.white): 2295830542032634937,
(Point(row=17, col=1), None): 7737401394819595242,
(Point(row=17, col=1), Player.black): 8875600302167034488,
(Point(row=17, col=1), Player.white): 7731527998706009486,
(Point(row=17, col=2), None): 715720492641185994,
(Point(row=17, col=2), Player.black): 7688568884192057030,
(Point(row=17, col=2), Player.white): 7030239749929949703,
(Point(row=17, col=3), None): 4253369128350027031,
(Point(row=17, col=3), Player.black): 8432096447296282118,
(Point(row=17, col=3), Player.white): 2824769679627582916,
(Point(row=17, col=4), None): 6834520328610039054,
(Point(row=17, col=4), Player.black): 7274073934562428887,
(Point(row=17, col=4), Player.white): 1256090539020774254,
(Point(row=17, col=5), None): 8892327929102139278,
(Point(row=17, col=5), Player.black): 1496962392350061870,