diff options
| author | Scott Gasch <[email protected]> | 2026-09-16 00:08:27 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2026-09-16 00:08:27 -0700 |
| commit | b91c8453f3fe21c8ccd3568923d8e39141c9c945 (patch) | |
| tree | b908fea282ecd4075744590d3dfc88ffa903d943 | |
| parent | c0ac3d7845f60c7f6f2c3bfc306ceb0e4ac045ba (diff) | |
Add search self-tests (hash consistency, QSearch sanity) and a native EPD parser (`epd` command + ParseEpdRecord), fixing a silent-corruption bug in convert_epd.pl that broke every Black-to-move EPD conversion.
testsearch.c: TestSearchHashConsistency exercises the hash table through real search (repeat-with-warm-table and shallow-then-deep agreement) rather than synthetic store/probe calls. TestQSearchSanity checks termination and a node-count ceiling; its own header documents that the TEST=1 self-test build doesn't define PERF_COUNTERS, so it checks whole-search node count rather than the qsearch-only counter. A planned null-move zugzwang test was dropped in favor of tests/zugzwang.epd (best-move outcome, not an internal counter) after the three classic literature positions turned out not to structurally reach this engine's verification-search code path on this build.
fen.c/script.c/command.c: new `epd <file>` command reads raw EPD directly via ParseEpdRecord, reusing ScriptCommand's existing suite-reporting machinery (factored into _ProcessSuiteLine/_PrintSuiteReport). Replaces the need for tests/convert_epd.pl, which had a real bug: its bm/am regex's [^b]+ filler breaks on any Black-to-move record (side-to-move field is literally "b"), and unscoped $fen/$id/$solution globals meant a failed match silently duplicated the previous record instead of erroring.
tests/ep_to_epd.pl converts the existing setboard/solution/avoid/id/go suites back to real EPD; cross-checked ecm_ringers.ep_ via `script` against ecm_ringers.epd via `epd` -- byte-identical node counts and solve stats. Added .epd siblings for every genuine tactical suite in tests/.
Added src/TESTING_PLAN.md: full audit of test*.c coverage gaps (dead SEE oracle, unwired eval/recognizer tests, zero hash-table correctness coverage, thin search self-tests) with a prioritized plan for closing them.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
| -rw-r--r-- | src/TESTING_PLAN.md | 253 | ||||
| -rwxr-xr-x | src/chess.h | 16 | ||||
| -rw-r--r-- | src/command.c | 6 | ||||
| -rw-r--r-- | src/fen.c | 216 | ||||
| -rw-r--r-- | src/main.c | 2 | ||||
| -rw-r--r-- | src/script.c | 378 | ||||
| -rw-r--r-- | src/testsearch.c | 298 | ||||
| -rw-r--r-- | tests/LCT2.epd | 35 | ||||
| -rw-r--r-- | tests/arasan.epd | 140 | ||||
| -rwxr-xr-x | tests/convert_epd.pl | 11 | ||||
| -rw-r--r-- | tests/ecm-gcp.epd | 181 | ||||
| -rw-r--r-- | tests/ecm-hard.epd | 378 | ||||
| -rw-r--r-- | tests/ecm.epd | 879 | ||||
| -rw-r--r-- | tests/ecm016_only.epd | 1 | ||||
| -rw-r--r-- | tests/ecm_confident.epd | 535 | ||||
| -rw-r--r-- | tests/ecm_confident_quick.epd | 90 | ||||
| -rw-r--r-- | tests/ecm_confident_sample2.epd | 40 | ||||
| -rw-r--r-- | tests/ecm_hard.epd | 232 | ||||
| -rw-r--r-- | tests/ecm_hard_quick.epd | 90 | ||||
| -rw-r--r-- | tests/ecm_late.epd | 25 | ||||
| -rw-r--r-- | tests/ecm_quick.epd | 30 | ||||
| -rw-r--r-- | tests/ecm_ringers.epd | 11 | ||||
| -rw-r--r-- | tests/ep_to_epd.pl | 56 | ||||
| -rw-r--r-- | tests/mes400.epd | 400 | ||||
| -rw-r--r-- | tests/newiq.epd | 360 | ||||
| -rw-r--r-- | tests/quick.epd | 24 | ||||
| -rw-r--r-- | tests/swiss.epd | 60 | ||||
| -rw-r--r-- | tests/wac.epd | 300 | ||||
| -rw-r--r-- | tests/zugzwang.epd | 5 |
29 files changed, 4936 insertions, 116 deletions
diff --git a/src/TESTING_PLAN.md b/src/TESTING_PLAN.md new file mode 100644 index 0000000..abf35e3 --- /dev/null +++ b/src/TESTING_PLAN.md @@ -0,0 +1,253 @@ +# Testing plan: closing coverage gaps in test*.c + +Written 2026-09-16 after an audit of every `src/test*.c` file and how +(or whether) each is wired into `main.c`'s self-test sequence. Goal +per Scott: not more test code for its own sake -- find the +years-old bugs that asserts have been missing. Priorities: search, +eval, generate (not exclusively). Perf testing is also explicitly +in scope. + +## Dead/disconnected infrastructure (fix first -- near-zero cost) + +Several tests already exist but don't run. Recovering this coverage is +strictly cheaper than writing anything new, so do this before anything +else below. + +1. **SEE has zero active correctness testing.** `testsee.c`'s own + header comment admits it: `DebugSEE`/`DebugSEERecursive` (a + brute-force make/unmake exchange-walk oracle meant to check `SEE()` + against) is wrapped in `#ifdef TEST_BROKEN` -- a define nothing + sets. `testsee.c`'s only *called* functions (`TestGetAttacks`, + `TestIsAttackedBB`) test attack generation, not SEE. Given SEE is + what `GetMoveSee`/extensions/QSearch pruning all trust (and is the + exact code reworked in commit c0ac3d7), this is the single + highest-value fix here. Get `TEST_BROKEN` -> live (`TEST`), fix + whatever bitrot surfaces, and confirm it's called from `main.c`. +2. **`TestEvalWithKnownPositions`** (`testeval.c`, ~20 hand-curated + "side X should be better here" positions from chess literature) is + defined but **never called from anywhere** -- not `main.c`, not + `command.c`. Wire it into the self-test sequence. +3. **`TestRecognExhaustiveKNKP`** (`testrecogn.c`, exhaustive KNKP + endgame-recognizer enumeration) is defined and prototyped in + `chess.h` but referenced only in a comment -- never invoked. Only + the smaller table-driven `TestRecogn` runs. Wire it in. +4. **The hash table has no correctness self-test at all.** + `testhash.c` contains `SanityCheckHashEntry` (an entry-shape + validator) and `AnalyzeFullHashTable` -- but the latter is a + post-search *diagnostic dump* called from `root.c`, not a test, and + it's never invoked from the `TEST` self-test sequence. See "New + test: hash correctness" below for what should replace this gap, not + just a wiring fix. +5. **`TestEvalWithSymmetry`** only runs a *single* random symmetric + position per invocation, and only when a human types `eval` at the + prompt in an `EVAL_DUMP` build (`command.c:2203`) -- not part of the + automated suite, never loops. See "New test: eval symmetry fuzz" + below. + +## New tests, by area + +### Search (thinnest area relative to its bug surface) + +- `TestSearch` (`testsearch.c`) runs 20 random positions at fixed + **depth 2** only, checking solely "returned move is legal" and + "didn't blow the time limit." + - **DONE -- hash-consistency test** (`TestSearchHashConsistency`, + testsearch.c): searches a position to depth D twice in a row with + a warm hash table (scores must match), and separately confirms a + depth-D2 search seeded by a shallower depth-D1 warm-up agrees with + a from-scratch depth-D2 search. Wired into the `TEST=1` self-test + sequence (main.c). + - **DONE (partially) -- QSearch sanity test** + (`TestQSearchSanity`, testsearch.c): checks search termination + (no `INVALID_SCORE`/garbage) and a whole-search node-count + ceiling. Caveat found and documented in the function's own header + comment: the self-test suite builds with plain `gmake TEST=1`, + which doesn't define `PERF_COUNTERS` -- every `sCounters` field + (including `u64QNodeCount`, the qsearch-only counter this was + originally meant to check) is wrapped in `chess.h`'s `INC()` macro, + a no-op without that define. Confirmed live (`sd 3; go` on a + `TEST`-only binary reports "0 qnodes" regardless of real qsearch + activity). The test currently checks + `ctx->sCounters.tree.u64TotalNodeCount` instead (root.c's + unconditional per-node `++`, always live) -- a real but strictly + weaker signal, since it can't distinguish "qsearch exploded" from + "full-width search exploded." Building a `PERF_COUNTERS`-enabled + `TEST` profile (or adding an always-live qsearch-only counter) is + the natural follow-up to close this for real. The hand-auditable- + tree idea (`Trace()` every qsearch node on a small position) is + still worth doing but wasn't implemented this session. + - **NOT DONE -- determinism test** (same position/depth searched + twice, PV must match): explicitly descoped -- Scott's call is that + a stable-PV requirement makes the test break every time move + ordering changes for unrelated reasons, which is just noise, not a + real regression signal. A same-*score* (not same-PV) check is + already covered by the hash-consistency test above. + - **NOT DONE -- MP-vs-single-thread agreement test**: still open. + `split.c` has no dedicated correctness test. + - **DONE (as an EPD suite, not a C test) -- null-move/zugzwang + soundness**: `tests/zugzwang.epd` (5 positions, run via the new + `epd` command -- see below) checks actual best-move outcome + instead of an internal counter. An earlier attempt asserted + against `ctx->sCounters.extension.uZugzwang` (the verification- + search hit counter) using the 3 classic literature zugzwang + positions, but none of them structurally reach that code path on + this build: 2 have too little material for + `WeShouldTryNullmovePruning`'s own `> 2` non-pawn-count gate to + attempt null-move pruning at all, and the 3rd (despite landing in + the eligible window) gets resolved directly off this box's local + Syzygy tablebase before search ever touches null-move logic -- + confirmed live via the `TABLEBASE MOVE` trace line. Removed in + favor of the EPD suite, which doesn't care about internal + mechanism, only the final answer. See `testsearch.c`'s comment + where `TestNullMoveZugzwang` used to be for the full writeup. + +**New infrastructure that came out of chasing the above (search.c +touches none of this, but it's now how any future EPD-based search +test should be added):** + +- **`epd <file>` engine command** (`EpdCommand`, script.c) parses and + runs a raw EPD suite file directly -- no perl preprocessing step + first. Backed by `ParseEpdRecord` (fen.c), real per-record EPD + parsing (4 position fields, optional FEN-style halfmove/fullmove + counters, then `;`-separated `bm`/`am`/`id` opcodes). +- **Found and fixed while building this**: `tests/convert_epd.pl` (the + old perl-based EPD-to-script converter) had a real, silent- + corruption bug -- its `bm`/`am` regex used `[^b]+` as the filler + between the board and the opcode, which breaks on *every* + Black-to-move record (the side-to-move field is literally the + character `b`), and since `$fen`/`$id`/`$solution` were unscoped + globals rather than per-line locals, a failed match silently carried + the *previous* record's values forward instead of erroring. + Confirmed live: feeding it a 5-position batch with one Black-to-move + entry produced a byte-for-byte duplicate of the previous record for + that one line, no diagnostic at all. The script is left in place + (marked superseded in its own header) in case something still shells + out to it, but new suites should use `epd` instead. + Cross-checked the new parser against the old pipeline on + `ecm_ringers`: `script` (old `.ep_` format) and `epd` (new + `tests/ecm_ringers.epd`, produced by `ep_to_epd.pl`, see next item) + produced byte-identical node counts and solve stats. +- **`tests/ep_to_epd.pl`**: one-off reverse converter, turns the + existing `setboard`/`solution`/`avoid`/`id`/`go` script-format + suites back into real EPD now that `epd` can read it directly. Run + against every genuine tactical suite in `tests/` (not `bench.ep_` or + `trial.ep_`, which use `sd`/`st`/`easy`/`quit` and aren't EPD + underneath) -- produced `.epd` siblings for `arasan`, + `ecm_confident_quick`, `ecm_confident_sample2`, `ecm_confident`, + `ecm_hard_quick`, `ecm_hard`, `ecm_late`, `ecm_quick`, `ecm_ringers`, + `ecm-gcp`, `ecm-hard`, `ecm`, `ecm016_only`, `LCT2`, `mes400`, + `newiq`, `quick`, `swiss`, `wac`. `ecm.epd` came out to 879 records, + matching the `606/879`/`622/879` solve-count baselines already + quoted elsewhere in CLAUDE.md. + +### Eval + +- Automate `TestEvalWithSymmetry` into a real fuzz loop (N random + symmetric positions, assert `Eval() == 0` for all, as part of the + standard self-test run) instead of the current single-shot + manual-only invocation. +- **Adversarial/degenerate-position term-bounds test**: 0-pawn + positions, 9-queen positions, fully-open-board positions -- extend + `GenerateRandomLegalPosition` or hand-build cases, assert no eval + term produces an out-of-range score (reuse the existing + `EvalTrace`/`EVAL_DUMP` term-tracing machinery for this). +- Audit for any **incrementally-maintained eval state** (pawn hash, + king-safety cache) and add a from-scratch-recompute-vs-incremental + consistency check if any exists -- classic "works until the hash + collides" bug class. +- **Eval speed regression test**: no benchmark currently exists for + eval itself despite it being the named NPS bottleneck vs. Crafty + (see CLAUDE.md). Same interleaved-comparison shape as the existing + `TestGenerate*Speed` benchmarks, broken down by game phase. + +### Generate (best-covered area, but gaps remain) + +- Perft (`TestMoveGenerator`) only checks to **ply 4** even though + `uLeaves[]` already has reference values to ply 6/7 sitting unused -- + extend to a `--perft-deep` slow path, and add perft-**divide** + (per-root-move leaf breakdown) to localize failures to a specific + move instead of just tripping a panic. +- Add perft positions specifically chosen to stress **en passant, + underpromotion, and castling-through-check** individually (the + current 5 FENs give general coverage but weren't chosen for this). +- `TestGenerateAllMovesSpeed` and the per-piece-type speed tests are + **pure microbenchmarks with no correctness assertion** -- they print + cycles and never diff the move *sets* produced by the mailbox vs. + bitboard generators being compared. Add a sorted-move-list-equality + assertion alongside each (both generators already run back-to-back + in the same loop, so this is nearly free) -- otherwise a bitboard + generator silently missing a move class just prints a suspiciously + fast number and passes. +- `GetMoveSee`'s new non-pawn-capture SEE path (c0ac3d7) has no + dedicated test yet -- covered by the SEE oracle fix above once live. + +### Move/Position plumbing + +- Reasonably solid already (`TestMakeUnmakeMove`, `TestExposesCheck`, + `TestIsAttacked`). Add a **long-game fuzz test**: play N random games + of ~200 plies each (not just 1-ply-at-a-time exercises), asserting + `VerifyPositionConsistency` and `ComputeSig`-from-scratch agreement + with the incrementally-maintained signature at every ply. Confirm + `VerifyPositionConsistency` is actually compiled live in the + `TEST`/`DEBUG` build, not just present in source. + +### Hash (currently zero correctness coverage) + +New test needed, not just a wiring fix: +- Store/probe roundtrip correctness. +- Replacement-scheme behavior under forced collisions (fill table past + capacity with distinct signatures, confirm replacement policy + behaves as designed, not just "doesn't crash"). +- `ADJUST_MATE_IN_N` ply-distance adjustment on `HASH_FLAG_EXACT` + entries specifically -- the exact mechanism CLAUDE.md flags as + audited-by-hand but not test-covered after this session's `ASSERT` + removals in `QSearch()`. + +### Recognizer + +- Wire in `TestRecognExhaustiveKNKP` (see dead-infra list above). + Consider the same exhaustive-enumeration treatment for any other + small recognized endgame class in `recogn.c` (KPK, KRK) if one + exists without a test. + +## Perf testing + +Current coverage is narrow: five isolated per-piece-type +mailbox-vs-bitboard microbenchmarks (`TestGenerate*Speed`), nothing for +search, eval, or hash. + +- **Eval NPS/cycles-per-call benchmark**, same interleaved-comparison + shape as the existing generate benchmarks, by game phase -- eval is + the named bottleneck (CLAUDE.md's 1.5M vs 7.5M nps gap vs. Crafty) + and has no dedicated speed test today. +- **Whole-search NPS benchmark**: `bench.c` already exists for this -- + confirm whether it's part of the automated `TEST` self-test pass or + purely a manual `bench` command; if manual-only, wire a + fixed-node-budget version into the automated sequence so a + regression surfaces without someone remembering to run it by hand. +- **Hash-probe-under-load benchmark**: cycles/probe at low occupancy + vs. near-full table -- replacement-scheme cost can regress silently + today with nothing to measure it. +- **Stored baselines with pass/fail thresholds**, not print-only + output: today every perf test prints cycles/call and leaves + interpretation to a human reading the log. Store a last-known-good + baseline (same idea as `head_reference/` for solve-counts) and fail + loud if a call site regresses past some tolerance. + +## Suggested priority order + +1. Un-bitrot the three dead tests (SEE oracle, + `TestEvalWithKnownPositions`, `TestRecognExhaustiveKNKP`) -- + near-zero cost, immediate coverage recovery. +2. Hash-table correctness test (store/probe/replace/mate-adjust) -- + currently the single biggest correctness blind spot. +3. Search determinism + MP-vs-single-thread agreement test -- targets + the exact class of bug most likely to hide in threading/hash/ + extension interactions that per-function unit tests can't see. +4. Extend perft to deeper plies + divide output; add move-set-equality + assertions to the existing generate speed benchmarks (turns + dead-weight microbenchmarks into correctness tests for free). +5. Eval: automate the symmetry fuzz test (loop N, not 1) and add + adversarial/degenerate-position term-bounds checks. +6. Round out perf testing per the list above, with stored baselines + and pass/fail thresholds instead of print-only output. diff --git a/src/chess.h b/src/chess.h index 16cdca9..38fdb3f 100755 --- a/src/chess.h +++ b/src/chess.h @@ -2162,6 +2162,15 @@ PositionToFen(POSITION *p); FLAG FenToPosition(POSITION *p, char *szFen); +FLAG +ParseEpdRecord(char *szLineIn, + char *szFen, ULONG cbFen, + char *szId, ULONG cbId, + char szMoves[][SMALL_STRING_LEN_CHAR], + ULONG uMaxMoves, + ULONG *puNumMoves, + FLAG *pfIsAvoid); + // // testfen.c // @@ -3051,6 +3060,7 @@ IsLegalDrawByRepetition(void); // script.c // COMMAND(ScriptCommand); +COMMAND(EpdCommand); COMMAND(SolutionCommand); @@ -3303,6 +3313,12 @@ SanityCheckMoves(IN SEARCHER_THREAD_CONTEXT *ctx, FLAG TestSearch(void); +FLAG +TestSearchHashConsistency(void); + +FLAG +TestQSearchSanity(void); + // // see.c // diff --git a/src/command.c b/src/command.c index 0662333..5087aee 100644 --- a/src/command.c +++ b/src/command.c @@ -2720,6 +2720,12 @@ COMMAND_PARSER_ENTRY g_ParserTable[] = FALSE, TRUE, "Inform the engine about a game result" }, + { "epd", + EpdCommand, + FALSE, + FALSE, + FALSE, + "Run a raw EPD test suite file directly (no conversion needed)" }, { "script", ScriptCommand, FALSE, @@ -781,3 +781,219 @@ Return value: SystemFreeMemory(szCapturedFen); return(TRUE); } + + +FLAG +ParseEpdRecord(IN char *szLineIn, + OUT char *szFen, IN ULONG cbFen, + OUT char *szId, IN ULONG cbId, + OUT char szMoves[][SMALL_STRING_LEN_CHAR], + IN ULONG uMaxMoves, + OUT ULONG *puNumMoves, + OUT FLAG *pfIsAvoid) +/** + +Routine description: + + Real per-record EPD parsing: pull the board/side-to-move/castling/ + en-passant fields plus the "bm"/"am" and "id" opcodes out of one + raw EPD line, e.g.: + + 8/8/1p1r1k2/p1pPN1p1/P3KnP1/1P6/8/3R4 b - - 0 1 bm Nxd5; id "zugzwang.005"; + + Written to replace tests/convert_epd.pl's single-regex approach + ("everything between the board and bm is [^b]+"), which silently + breaks on exactly this kind of line: side-to-move "b" contains the + character the regex's filler class explicitly excludes, so the + match fails outright, and because that script's $fen/$id/$solution + were plain globals rather than per-line locals, a failed match + silently carried the *previous* line's values forward instead of + erroring. This function fails closed instead: a line it can't + parse returns FALSE and touches none of the OUT parameters, so a + caller looping over a file can never mistake stale data left over + from the previous line for a real result. + + Tolerates the two EPD-ish flavors seen in real suites: strict EPD + (exactly 4 position fields, then opcodes) and the more common + FEN-plus-opcodes hybrid (4 position fields, then halfmove/fullmove + counters, then opcodes) -- an opcode name is never purely numeric, + so the two are unambiguous to tell apart by just skipping leading + all-digit tokens before looking for "bm"/"am"/"id". + +Parameters: + + IN char *szLineIn : one raw EPD line (not modified) + OUT char *szFen : receives "<board> <stm> <castle> <ep>" + IN ULONG cbFen : size of szFen + OUT char *szId : receives the id string (unquoted), or "" if none + IN ULONG cbId : size of szId + OUT char szMoves[][] : receives each bm/am move token, in order + IN ULONG uMaxMoves : capacity of szMoves (row count) + OUT ULONG *puNumMoves : number of moves written to szMoves + OUT FLAG *pfIsAvoid : TRUE if the opcode was "am", FALSE if "bm" + +Return value: + + FLAG : TRUE if a fen and at least one bm/am move were found and + fit in the caller's buffers; FALSE otherwise (all OUT + parameters left untouched) + +**/ +{ + char szWork[SMALL_STRING_LEN_CHAR]; + char *szTokens[4]; + char *p; + char *szOpcodeSection; + char *szChunk; + char *szSavePtr1, *szSavePtr2; + ULONG u; + ULONG uNumMoves = 0; + FLAG fIsAvoid = FALSE; + char szLocalId[SMALL_STRING_LEN_CHAR]; + char szLocalFen[SMALL_STRING_LEN_CHAR]; + + szLocalId[0] = '\0'; + + if ((NULL == szLineIn) || ('\0' == szLineIn[0])) + { + return(FALSE); + } + strncpy(szWork, szLineIn, ARRAY_LENGTH(szWork) - 1); + szWork[ARRAY_LENGTH(szWork) - 1] = '\0'; + szWork[strcspn(szWork, "\r\n")] = '\0'; + + p = szWork; + while (isspace((unsigned char)*p)) p++; + if (('\0' == *p) || ('#' == *p)) + { + return(FALSE); + } + + // First 4 whitespace-delimited tokens are always the position. + for (u = 0; u < 4; u++) + { + while (isspace((unsigned char)*p)) p++; + if ('\0' == *p) + { + return(FALSE); + } + szTokens[u] = p; + while (*p && !isspace((unsigned char)*p)) p++; + if (*p) + { + *p = '\0'; + p++; + } + } + if (snprintf(szLocalFen, ARRAY_LENGTH(szLocalFen), "%s %s %s %s", + szTokens[0], szTokens[1], szTokens[2], szTokens[3]) < 0) + { + return(FALSE); + } + + // Skip FEN-style halfmove/fullmove counters ahead of the first + // real opcode -- an opcode name is never purely numeric. + for (;;) + { + char *q; + while (isspace((unsigned char)*p)) p++; + q = p; + if ('\0' == *q) + { + break; + } + while (isdigit((unsigned char)*q)) q++; + if ((q == p) || (*q && !isspace((unsigned char)*q) && (';' != *q))) + { + // Not a bare numeric token -- this is the opcode section. + break; + } + if ('\0' == *q) + { + p = q; + break; + } + p = q; + } + szOpcodeSection = p; + + // Now split what's left on ';' into individual opcode chunks. + for (szChunk = strtok_r(szOpcodeSection, ";", &szSavePtr1); + NULL != szChunk; + szChunk = strtok_r(NULL, ";", &szSavePtr1)) + { + char *szTrimmed = szChunk; + char *szTail; + + while (isspace((unsigned char)*szTrimmed)) szTrimmed++; + szTail = szTrimmed + strlen(szTrimmed); + while ((szTail > szTrimmed) && isspace((unsigned char)szTail[-1])) + { + szTail--; + *szTail = '\0'; + } + if ('\0' == *szTrimmed) + { + continue; + } + + if (((0 == STRNCMPI(szTrimmed, "bm", 2)) && + isspace((unsigned char)szTrimmed[2])) || + ((0 == STRNCMPI(szTrimmed, "am", 2)) && + isspace((unsigned char)szTrimmed[2]))) + { + char *szMoveTok; + + fIsAvoid = (0 == STRNCMPI(szTrimmed, "am", 2)); + szMoveTok = strtok_r(szTrimmed + 2, " \t", &szSavePtr2); + while (NULL != szMoveTok) + { + if (uNumMoves < uMaxMoves) + { + strncpy(szMoves[uNumMoves], szMoveTok, + SMALL_STRING_LEN_CHAR - 1); + szMoves[uNumMoves][SMALL_STRING_LEN_CHAR - 1] = '\0'; + uNumMoves++; + } + szMoveTok = strtok_r(NULL, " \t", &szSavePtr2); + } + } + else if ((0 == STRNCMPI(szTrimmed, "id", 2)) && + isspace((unsigned char)szTrimmed[2])) + { + char *szIdVal = szTrimmed + 2; + while (isspace((unsigned char)*szIdVal)) szIdVal++; + if ('"' == *szIdVal) + { + char *szEndQuote; + szIdVal++; + szEndQuote = strchr(szIdVal, '"'); + if (NULL != szEndQuote) + { + *szEndQuote = '\0'; + } + } + strncpy(szLocalId, szIdVal, ARRAY_LENGTH(szLocalId) - 1); + szLocalId[ARRAY_LENGTH(szLocalId) - 1] = '\0'; + } + // Other opcodes (acd, ce, dm, c0, ...) intentionally ignored. + } + + if (0 == uNumMoves) + { + return(FALSE); + } + if (strlen(szLocalFen) >= cbFen) + { + return(FALSE); + } + strcpy(szFen, szLocalFen); + if (strlen(szLocalId) >= cbId) + { + szLocalId[cbId - 1] = '\0'; + } + strcpy(szId, szLocalId); + *puNumMoves = uNumMoves; + *pfIsAvoid = fIsAvoid; + return(TRUE); +} @@ -619,6 +619,8 @@ Return value: TestIsAttacked(); TestMakeUnmakeMove(); TestSearch(); + TestSearchHashConsistency(); + TestQSearchSanity(); return(TRUE); } diff --git a/src/script.c b/src/script.c index 0bc09e4..e8d6f9a 100644 --- a/src/script.c +++ b/src/script.c @@ -349,6 +349,160 @@ Return value: +// +// Shared by ScriptCommand and EpdCommand: process one already-read +// line exactly the way a script file's line is processed -- "go" +// triggers a search plus counter accumulation, anything else is +// dispatched through the normal command parser. Factored out so +// EpdCommand can feed it lines synthesized from a raw EPD record +// (setboard/id/solution/avoid/go) instead of lines read verbatim from +// a file, without duplicating this logic or its counter bookkeeping. +// +static void +_ProcessSuiteLine(char *szLine, POSITION *pos) +{ + Trace("SCRIPT> %s\n", szLine); + if (!STRNCMPI(szLine, "go", 2)) + { + (void)Think(pos); + g_SuiteCounters.u64TotalNodeCount += + g_Options.u64NodesSearched; + g_SuiteCounters.u64TotalBetaCutoffs += + g_Options.u64BetaCutoffs; + g_SuiteCounters.u64TotalBetaCutoffsOnFirstMove += + g_Options.u64BetaCutoffsOnFirstMove; + g_SuiteCounters.u64TotalCounterMoveTries += + g_Options.u64CounterMoveTries; + g_SuiteCounters.u64TotalCounterMoveHits += + g_Options.u64CounterMoveHits; + g_SuiteCounters.u64TotalLeftoverTries += + g_Options.u64LeftoverTries; + g_SuiteCounters.u64TotalLeftoverAlpha += + g_Options.u64LeftoverAlpha; + g_SuiteCounters.u64TotalLeftoverFH += + g_Options.u64LeftoverFH; + { + ULONG v; + for (v = 0; v < CM_EVIDENCE_BUCKETS; v++) + { + g_SuiteCounters.u64TotalCMEvidenceTries[v] += + g_Options.u64CMEvidenceTries[v]; + g_SuiteCounters.u64TotalCMEvidenceFH[v] += + g_Options.u64CMEvidenceFH[v]; + } + } + } + else + { + PushNewInput(szLine); + if (FALSE == g_fExitProgram) + { + ParseUserInput(FALSE); + } + } +} + + +// +// Shared by ScriptCommand and EpdCommand: the end-of-suite banner and +// statistics report. Verbatim extraction of what used to be +// ScriptCommand's own tail -- see that function's history for the +// meaning of each field. +// +static void +_PrintSuiteReport(double dSuiteStart) +{ + ULONG u, v, uMax; + double dMult = (double)g_Options.uMyIncrement / (double)SUITE_NUM_HISTOGRAM; + + Banner(); + Trace("\n" + "TEST SCRIPT execution complete. Final statistics:\n" + "--------------------------------------------------\n" + " correct solutions : %u\n" + " incorrect solutions : %u\n" + " total problems : %u\n" + " total nodecount : %" + COMPILER_LONGLONG_UNSIGNED_FORMAT "\n" + " avg. search speed : %6.1f nps\n" + " avg. solution time : %3.1f sec\n" + " avg. search depth : %4.1f ply\n" + " 1st move beta cut : %5.2f percent\n" + " avg. eff. branching : %5.3f\n" + " counter move hit %% : %5.2f percent (%" + COMPILER_LONGLONG_UNSIGNED_FORMAT " tries)\n" + " leftover : %5.2f%% alpha, %5.2f%% FH (%" + COMPILER_LONGLONG_UNSIGNED_FORMAT " tries)\n" + " script time : %6.1f sec\n\n", + g_SuiteCounters.uCorrect, + g_SuiteCounters.uIncorrect, + g_SuiteCounters.uTotal, + g_SuiteCounters.u64TotalNodeCount, + ((double)g_SuiteCounters.u64TotalNodeCount / + (SystemTimeStamp() - dSuiteStart)), + ((g_SuiteCounters.uCorrect > 0) ? + (g_SuiteCounters.dSigmaSolutionTime / + (double)g_SuiteCounters.uCorrect) : 0.0), + ((double)g_SuiteCounters.uSigmaDepth / + (double)g_SuiteCounters.uTotal), + (100.0 * (double)g_SuiteCounters.u64TotalBetaCutoffsOnFirstMove / + ((double)g_SuiteCounters.u64TotalBetaCutoffs + 1.0)), + (g_SuiteCounters.dSigmaEBF / + ((double)g_SuiteCounters.uEBFCount + 1.0)), + (100.0 * (double)g_SuiteCounters.u64TotalCounterMoveHits / + ((double)g_SuiteCounters.u64TotalCounterMoveTries + 1.0)), + g_SuiteCounters.u64TotalCounterMoveTries, + (100.0 * (double)g_SuiteCounters.u64TotalLeftoverAlpha / + ((double)g_SuiteCounters.u64TotalLeftoverTries + 1.0)), + (100.0 * (double)g_SuiteCounters.u64TotalLeftoverFH / + ((double)g_SuiteCounters.u64TotalLeftoverTries + 1.0)), + g_SuiteCounters.u64TotalLeftoverTries, + (SystemTimeStamp() - dSuiteStart)); + + // Countermove evidence calibration -- FH% per evidence bucket, + // an ongoing check that COUNTERMOVE_EVIDENCE_THRESHOLD (chess.h) + // is still well-calibrated as the engine/data evolve. + { + static const ULONG uCMEvidenceFloors[CM_EVIDENCE_BUCKETS] = + { 0, 1, 100, 1000, 10000, 100000, 1000000 }; + Trace("\ncountermove evidence calibration:\n"); + for (v = 0; v < CM_EVIDENCE_BUCKETS; v++) + { + Trace(" evidence >= %8lu : %5.2f%% FH (%" + COMPILER_LONGLONG_UNSIGNED_FORMAT " tries)\n", + uCMEvidenceFloors[v], + (100.0 * (double)g_SuiteCounters.u64TotalCMEvidenceFH[v] / + ((double)g_SuiteCounters.u64TotalCMEvidenceTries[v] + 1.0)), + g_SuiteCounters.u64TotalCMEvidenceTries[v]); + } + } + + // Histogram stuff + if (g_SuiteCounters.uTotal > 0) { + uMax = g_SuiteCounters.uHistogram[0]; + for (u = 1; u < SUITE_NUM_HISTOGRAM; u++) + { + if (g_SuiteCounters.uHistogram[u] > uMax) + { + uMax = g_SuiteCounters.uHistogram[u]; + } + } + for (u = 0; u < SUITE_NUM_HISTOGRAM; u++) + { + Trace("%4.1f .. %4.1f: ", + (double)u * dMult, (double)(u + 1) * dMult); + for (v = 0; + (uMax > 0) && (v < 50 * g_SuiteCounters.uHistogram[u] / uMax); + v++) + { + Trace("*"); + } + Trace("\n"); + } + } +} + + COMMAND(ScriptCommand) /** @@ -389,8 +543,6 @@ Return value: FILE *p; static CHAR szLine[SMALL_STRING_LEN_CHAR]; double dSuiteStart; - ULONG u, v, uMax; - double dMult; if (argc < 2) { @@ -402,143 +554,137 @@ Return value: Trace("Error (file doesn't exist): %s\n", argv[1]); return; } - + p = fopen(argv[1], "rb"); if (NULL != p) { - // Doing the script... dSuiteStart = SystemTimeStamp(); memset(&(g_SuiteCounters), 0, sizeof(g_SuiteCounters)); while(fgets(szLine, ARRAY_LENGTH(szLine), p)) { - Trace("SCRIPT> %s\n", szLine); - if (!STRNCMPI(szLine, "go", 2)) - { - (void)Think(pos); - g_SuiteCounters.u64TotalNodeCount += - g_Options.u64NodesSearched; - g_SuiteCounters.u64TotalBetaCutoffs += - g_Options.u64BetaCutoffs; - g_SuiteCounters.u64TotalBetaCutoffsOnFirstMove += - g_Options.u64BetaCutoffsOnFirstMove; - g_SuiteCounters.u64TotalCounterMoveTries += - g_Options.u64CounterMoveTries; - g_SuiteCounters.u64TotalCounterMoveHits += - g_Options.u64CounterMoveHits; - g_SuiteCounters.u64TotalLeftoverTries += - g_Options.u64LeftoverTries; - g_SuiteCounters.u64TotalLeftoverAlpha += - g_Options.u64LeftoverAlpha; - g_SuiteCounters.u64TotalLeftoverFH += - g_Options.u64LeftoverFH; - for (v = 0; v < CM_EVIDENCE_BUCKETS; v++) - { - g_SuiteCounters.u64TotalCMEvidenceTries[v] += - g_Options.u64CMEvidenceTries[v]; - g_SuiteCounters.u64TotalCMEvidenceFH[v] += - g_Options.u64CMEvidenceFH[v]; - } - } - else - { - PushNewInput(szLine); - if (TRUE == g_fExitProgram) break; - ParseUserInput(FALSE); - } + _ProcessSuiteLine(szLine, pos); + if (TRUE == g_fExitProgram) break; } fclose(p); + _PrintSuiteReport(dSuiteStart); + } +} - // Banner and end results - dMult = (double)g_Options.uMyIncrement / (double)SUITE_NUM_HISTOGRAM; - Banner(); - Trace("\n" - "TEST SCRIPT execution complete. Final statistics:\n" - "--------------------------------------------------\n" - " correct solutions : %u\n" - " incorrect solutions : %u\n" - " total problems : %u\n" - " total nodecount : %" - COMPILER_LONGLONG_UNSIGNED_FORMAT "\n" - " avg. search speed : %6.1f nps\n" - " avg. solution time : %3.1f sec\n" - " avg. search depth : %4.1f ply\n" - " 1st move beta cut : %5.2f percent\n" - " avg. eff. branching : %5.3f\n" - " counter move hit %% : %5.2f percent (%" - COMPILER_LONGLONG_UNSIGNED_FORMAT " tries)\n" - " leftover : %5.2f%% alpha, %5.2f%% FH (%" - COMPILER_LONGLONG_UNSIGNED_FORMAT " tries)\n" - " script time : %6.1f sec\n\n", - g_SuiteCounters.uCorrect, - g_SuiteCounters.uIncorrect, - g_SuiteCounters.uTotal, - g_SuiteCounters.u64TotalNodeCount, - ((double)g_SuiteCounters.u64TotalNodeCount / - (SystemTimeStamp() - dSuiteStart)), - ((g_SuiteCounters.uCorrect > 0) ? - (g_SuiteCounters.dSigmaSolutionTime / - (double)g_SuiteCounters.uCorrect) : 0.0), - ((double)g_SuiteCounters.uSigmaDepth / - (double)g_SuiteCounters.uTotal), - (100.0 * (double)g_SuiteCounters.u64TotalBetaCutoffsOnFirstMove / - ((double)g_SuiteCounters.u64TotalBetaCutoffs + 1.0)), - (g_SuiteCounters.dSigmaEBF / - ((double)g_SuiteCounters.uEBFCount + 1.0)), - (100.0 * (double)g_SuiteCounters.u64TotalCounterMoveHits / - ((double)g_SuiteCounters.u64TotalCounterMoveTries + 1.0)), - g_SuiteCounters.u64TotalCounterMoveTries, - (100.0 * (double)g_SuiteCounters.u64TotalLeftoverAlpha / - ((double)g_SuiteCounters.u64TotalLeftoverTries + 1.0)), - (100.0 * (double)g_SuiteCounters.u64TotalLeftoverFH / - ((double)g_SuiteCounters.u64TotalLeftoverTries + 1.0)), - g_SuiteCounters.u64TotalLeftoverTries, - (SystemTimeStamp() - dSuiteStart)); - // Countermove evidence calibration -- FH% per evidence bucket, - // an ongoing check that COUNTERMOVE_EVIDENCE_THRESHOLD (chess.h) - // is still well-calibrated as the engine/data evolve. +COMMAND(EpdCommand) +/** + +Routine description: + + Runs a raw EPD test suite file directly -- no perl preprocessing + into a setboard/solution/go script first. Historically the only + way to run a suite from real-world EPD (the "board stm castle ep + [halfmove fullmove] bm <move>; id \"...\"; ..." format most public + tactical suites ship in) was tests/convert_epd.pl, which had a + real, silent-corruption bug: its single "everything between the + board and bm is [^b]+" regex breaks on any Black-to-move record + (the side-to-move field is literally the character "b"), and + because $fen/$id/$solution were unscoped globals rather than + per-line locals, a failed match silently carried the *previous* + record's board and solution forward instead of erroring -- + confirmed live by feeding it a real 5-position batch, where the + one Black-to-move line came out as a byte-for-byte duplicate of + the line before it. This command replaces that whole external + preprocessing step with real per-record EPD parsing (see + ParseEpdRecord, fen.c) feeding the exact same + _ProcessSuiteLine/_PrintSuiteReport machinery ScriptCommand uses, + so a raw EPD file can just be handed to the engine directly. + + Usage: + + epd <required filename> + +Parameters: + + The COMMAND macro hides four arguments from the input parser: + + CHAR *szInput : the full line of input + ULONG argc : number of argument chunks + CHAR *argv[] : array of ptrs to each argument chunk + POSITION *pos : a POSITION pointer to operate on + +Return value: + + void + +**/ +{ + FILE *p; + static CHAR szLine[SMALL_STRING_LEN_CHAR]; + static CHAR szSynth[SMALL_STRING_LEN_CHAR]; + CHAR szFen[SMALL_STRING_LEN_CHAR]; + CHAR szId[SMALL_STRING_LEN_CHAR]; + CHAR szMoves[SUITE_MAX_SOLUTIONS + SUITE_MAX_AVOIDS][SMALL_STRING_LEN_CHAR]; + ULONG uNumMoves; + FLAG fIsAvoid; + double dSuiteStart; + ULONG u; + ULONG uLineNum = 0; + + if (argc < 2) + { + Trace("Error (Usage: epd <filename>): %s\n", argv[0]); + return; + } + if (FALSE == SystemDoesFileExist(argv[1])) + { + Trace("Error (file doesn't exist): %s\n", argv[1]); + return; + } + + p = fopen(argv[1], "rb"); + if (NULL != p) + { + dSuiteStart = SystemTimeStamp(); + memset(&(g_SuiteCounters), 0, sizeof(g_SuiteCounters)); + while(fgets(szLine, ARRAY_LENGTH(szLine), p)) { - static const ULONG uCMEvidenceFloors[CM_EVIDENCE_BUCKETS] = - { 0, 1, 100, 1000, 10000, 100000, 1000000 }; - Trace("\ncountermove evidence calibration:\n"); - for (v = 0; v < CM_EVIDENCE_BUCKETS; v++) + uLineNum++; + if (FALSE == ParseEpdRecord(szLine, szFen, ARRAY_LENGTH(szFen), + szId, ARRAY_LENGTH(szId), + szMoves, ARRAY_LENGTH(szMoves), + &uNumMoves, &fIsAvoid)) { - Trace(" evidence >= %8lu : %5.2f%% FH (%" - COMPILER_LONGLONG_UNSIGNED_FORMAT " tries)\n", - uCMEvidenceFloors[v], - (100.0 * (double)g_SuiteCounters.u64TotalCMEvidenceFH[v] / - ((double)g_SuiteCounters.u64TotalCMEvidenceTries[v] + 1.0)), - g_SuiteCounters.u64TotalCMEvidenceTries[v]); + if (szLine[0] && (szLine[0] != '\n') && (szLine[0] != '#')) + { + Trace("epd: skipping unparseable line %lu: %s", + uLineNum, szLine); + } + continue; } - } - // Histogram stuff - if (g_SuiteCounters.uTotal > 0) { - uMax = g_SuiteCounters.uHistogram[0]; - for (u = 1; u < SUITE_NUM_HISTOGRAM; u++) + snprintf(szSynth, ARRAY_LENGTH(szSynth), "setboard %s\n", szFen); + _ProcessSuiteLine(szSynth, pos); + if (TRUE == g_fExitProgram) break; + + if (szId[0]) { - if (g_SuiteCounters.uHistogram[u] > uMax) - { - uMax = g_SuiteCounters.uHistogram[u]; - } + snprintf(szSynth, ARRAY_LENGTH(szSynth), "id %s\n", szId); + _ProcessSuiteLine(szSynth, pos); } - for (u = 0; u < SUITE_NUM_HISTOGRAM; u++) + + for (u = 0; u < uNumMoves; u++) { - Trace("%4.1f .. %4.1f: ", - (double)u * dMult, (double)(u + 1) * dMult); - for (v = 0; - (uMax > 0) && (v < 50 * g_SuiteCounters.uHistogram[u] / uMax); - v++) - { - Trace("*"); - } - Trace("\n"); + snprintf(szSynth, ARRAY_LENGTH(szSynth), "%s %s\n", + fIsAvoid ? "avoid" : "solution", szMoves[u]); + _ProcessSuiteLine(szSynth, pos); } + + _ProcessSuiteLine("go\n", pos); + if (TRUE == g_fExitProgram) break; } + fclose(p); + _PrintSuiteReport(dSuiteStart); } } -FLAG + +FLAG WeAreRunningASuite(void) /** diff --git a/src/testsearch.c b/src/testsearch.c index 3d560ac..6b43f64 100644 --- a/src/testsearch.c +++ b/src/testsearch.c @@ -131,4 +131,302 @@ TestSearch(void) SystemFreeMemory(ctx); return(fRet); } + + +// +// Shared setup for the hash-consistency and zugzwang tests below: run +// one fixed-depth search on a fresh SEARCHER_THREAD_CONTEXT-relative +// position (ctx is caller-owned and reused across calls, matching +// TestSearch's own pattern -- SystemAllocateMemory'ing a fresh 75MB +// context per call would be wasteful for tests that need many runs +// over the same handful of positions) and return the root score. +// Does NOT touch the hash table itself (no Clear/Dirty call) -- that +// decision is the caller's, since the whole point of the hash tests +// below is controlling exactly what's in the table before each call. +// +static SCORE +_FixedDepthSearchScore(SEARCHER_THREAD_CONTEXT *ctx, + POSITION *pos, + ULONG uMaxDepth) +{ + GAME_RESULT result; + FLAG fPost = g_Options.fShouldPost; + + g_Options.fShouldPost = FALSE; + InitializeSearcherContext(pos, ctx); + g_MoveTimer.bvFlags = 0; + g_Options.fPondering = FALSE; + g_Options.fThinking = TRUE; + g_Options.fSuccessfulPonder = FALSE; + MaintainDynamicMoveOrdering(); + SetMoveTimerForTestingSearch(); + g_Options.uMaxDepth = uMaxDepth; +#if (PERF_COUNTERS && MP) + ClearHelperThreadIdleness(); +#endif + result = Iterate(ctx); + g_Options.fShouldPost = fPost; + if (RESULT_IN_PROGRESS != result.eResult) + { + // Mate/stalemate/draw at the root -- no root score was set by + // this iteration (there's no move to score). Not a bug, just + // not a comparable data point for the callers below. + return(INVALID_SCORE); + } + return(ctx->iRootScore); +} + + +// +// Hash-table correctness, exercised through real search rather than +// synthetic store/probe calls -- the actual bug class this is meant +// to catch (stale entries surviving a generation boundary, a bound +// getting misapplied, ADJUST_MATE_IN_N misfiring on an entry that +// shouldn't get it) only shows up when a search's outcome actually +// depends on what it reads back out of the table, which a +// hand-constructed store()-then-probe() unit test can't exercise -- +// see TESTING_PLAN.md's "hash correctness" section for the case for a +// synthetic store/probe test too; this is the complementary +// behavioral half, not a replacement for it. +// +// Two invariants, neither of which cares about search internals +// (move ordering, PV, node count) changing across future search work +// -- only that the table is *transparent*, i.e. its presence changes +// performance, never the answer: +// +// 1. Searching the same position to the same depth twice in a row +// (second time with the table already populated by the first) +// must produce the same score both times. +// 2. Searching to depth D2 with the table pre-populated by a +// shallower depth-D1 search of the same position must produce +// the same score as searching directly to D2 from a freshly +// cleared table. A depth-D1 entry read back during the depth-D2 +// search is only ever a bound, never trusted as exact at a +// higher depth than it was stored at -- if it were, this would +// catch it. +// +FLAG +TestSearchHashConsistency(void) +{ + static const char *rgszFen[] = + { + "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", + "r1bq1rk1/pp2bppp/2n1pn2/2pp4/3P4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 1", + "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1", + "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1", + }; + const ULONG uD1 = 4; + const ULONG uD2 = 6; + SEARCHER_THREAD_CONTEXT *ctx; + POSITION pos; + SCORE iFirst, iSecond, iShallow, iDirect; + ULONG u; + FLAG fRet = TRUE; + + Trace("Testing hash table consistency through search...\n"); + ctx = SystemAllocateMemory(sizeof(SEARCHER_THREAD_CONTEXT)); + ASSERT(ctx); + + for (u = 0; u < ARRAY_LENGTH(rgszFen); u++) + { + if (FALSE == FenToPosition(&pos, (char *)rgszFen[u])) + { + UtilPanic(INCONSISTENT_STATE, + NULL, NULL, NULL, NULL, + __FILE__, __LINE__); + } + + // Invariant 1: repeat-with-warm-table stability. + ClearHashTable(); + DirtyHashTable(); + iFirst = _FixedDepthSearchScore(ctx, &pos, uD1); + DirtyHashTable(); + iSecond = _FixedDepthSearchScore(ctx, &pos, uD1); + if ((INVALID_SCORE != iFirst) && + (INVALID_SCORE != iSecond) && + (iFirst != iSecond)) + { + Trace("TestSearchHashConsistency: position %lu: same-depth " + "rerun with warm hash table diverged (%d vs %d) -- " + "FEN: %s\n", u, iFirst, iSecond, rgszFen[u]); + fRet = FALSE; + } + + // Invariant 2: a shallower pre-population must not corrupt a + // deeper search's answer. + ClearHashTable(); + DirtyHashTable(); + iShallow = _FixedDepthSearchScore(ctx, &pos, uD1); + DirtyHashTable(); + iSecond = _FixedDepthSearchScore(ctx, &pos, uD2); + + ClearHashTable(); + DirtyHashTable(); + iDirect = _FixedDepthSearchScore(ctx, &pos, uD2); + + if ((INVALID_SCORE != iSecond) && + (INVALID_SCORE != iDirect) && + (iSecond != iDirect)) + { + Trace("TestSearchHashConsistency: position %lu: depth-%lu " + "search seeded by a depth-%lu warm-up (%d) disagreed " + "with a from-scratch depth-%lu search (%d) -- FEN: " + "%s\n", u, uD2, uD1, iSecond, uD2, iDirect, + rgszFen[u]); + fRet = FALSE; + } + (void)iShallow; + } + + if (FALSE == fRet) + { + UtilPanic(TESTCASE_FAILURE, + NULL, "TestSearchHashConsistency", NULL, NULL, + __FILE__, __LINE__); + } + ClearHashTable(); + SystemFreeMemory(ctx); + return(fRet); +} + + +// Null-move soundness is intentionally NOT tested here as a C unit +// test. An earlier version of this file asserted against +// ctx->sCounters.extension.uZugzwang (searchsup.c's verification- +// search counter) using the three classic "verified null-move +// pruning" zugzwang positions -- but on this codebase's own material +// gates (WeShouldTryNullmovePruning's `> 2` non-pawn-count guard, +// TryNullmovePruning's `< 4` verification window) and this box's +// Syzygy coverage, none of the three ever actually reached the +// mechanism: two have too little material for null-move pruning to +// be attempted at all, and the third gets resolved directly off the +// local tablebase before search ever touches null-move logic. That +// made the internal-counter approach fragile and environment- +// dependent in a way a real best-move suite isn't. See +// tests/zugzwang.epd (run with the `epd` command, e.g. `epd +// tests/zugzwang.epd`) instead -- five known zugzwang positions +// checked by best-move outcome, which doesn't care why the engine +// gets it right, just whether it does. +// + +// +// QSearch is meant to stay small and shallow (search.c's own +// ASSERT(pf->uQsearchNodes < 20000) at its only call site is a +// no-op in a release build -- this makes a version of that bound a +// real, always-checked test instead of a DEBUG-only assertion). +// +// Note this checks ctx->sCounters.tree.u64TotalNodeCount (whole +// search, root.c's own unconditional per-node ++), not +// u64QNodeCount specifically -- that counter, and every other field +// in sCounters, is wrapped in the INC() macro (chess.h), which +// compiles to nothing unless PERF_COUNTERS is defined, and this +// self-test suite is built with plain `gmake TEST=1` (see CLAUDE.md), +// which doesn't define it (confirmed live: a real `sd 3; go` on this +// TEST-only binary reports "0 qnodes" no matter how much qsearch +// activity actually happened). A whole-search bound is a strictly +// weaker signal than a qsearch-only one -- it wouldn't distinguish +// "qsearch exploded" from "full-width search exploded" -- but it's +// the honest thing this build can actually check; rebuilding with +// PERF_COUNTERS added would be needed to test u64QNodeCount for real. +// +// "Small" is also exactly what makes qsearch trees hand-auditable in +// principle: a person could Trace() every node visited on one of the +// positions below and read the resulting tree start to finish against +// the board, unlike a full alpha-beta tree at real search depth. No +// such tracing is wired up here (that would need a new instrumented +// build define, not written this session) -- noting it as a +// worthwhile follow-up, not implying it already exists. +// +FLAG +TestQSearchSanity(void) +{ + static const char *rgszFen[] = + { + // Quiet position -- qsearch should do almost nothing (stand + // pat immediately, no captures available). + "4k3/8/8/8/8/8/8/4K3 w - - 0 1", + // A short, bounded capture sequence on one square. + "4k3/8/8/3p4/2P5/8/8/4K3 w - - 0 1", + // A deeper capturing melee -- the kind of position qsearch + // exists for. + "r1bq1rk1/pp2bppp/2n1pn2/2pp4/3P4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 1", + "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1", + }; + const ULONG uDepth = 3; + SEARCHER_THREAD_CONTEXT *ctx; + POSITION pos; + SCORE iScore; + ULONG u; + FLAG fRet = TRUE; + + Trace("Testing QSearch sanity (node-count bound, termination)...\n"); + ctx = SystemAllocateMemory(sizeof(SEARCHER_THREAD_CONTEXT)); + ASSERT(ctx); + + for (u = 0; u < ARRAY_LENGTH(rgszFen); u++) + { + if (FALSE == FenToPosition(&pos, (char *)rgszFen[u])) + { + UtilPanic(INCONSISTENT_STATE, + NULL, NULL, NULL, NULL, + __FILE__, __LINE__); + } + // uMaxDepth == 3 plies -- enough that the last full-width ply + // (uDepth == 0 in Search()'s ONE_PLY units) actually falls + // below Search()'s THREE_QUARTERS_PLY qsearch-entry threshold + // and real qsearch nodes get visited (measured live: depth 1 + // resolved every position here without qsearch ever firing -- + // g_uQNodeCount stayed 0 -- since a two-king or short-capture + // position this shallow settles via CommonSearchInit's own + // early-outs before the qsearch dispatch is ever reached). + // Still small enough to trace by hand per this function's own + // header comment. + ClearHashTable(); + DirtyHashTable(); + iScore = _FixedDepthSearchScore(ctx, &pos, uDepth); + + if ((INVALID_SCORE != iScore) && + !IS_VALID_SCORE(iScore)) + { + Trace("TestQSearchSanity: position %lu returned an " + "invalid score %d -- FEN: %s\n", u, iScore, + rgszFen[u]); + fRet = FALSE; + } + Trace("TestQSearchSanity: position %lu total nodes this " + "search: %llu\n", u, + ctx->sCounters.tree.u64TotalNodeCount); + + // Not the same invariant as search.c's per-entry + // ASSERT(pf->uQsearchNodes < 20000) (that resets per qsearch + // entry point and counts qsearch nodes only; this is a + // whole-search cumulative total, per this function's header + // comment on why), but a real, always-checked (not DEBUG-only) + // ceiling on "a shallow fixed-depth search on a small position + // stays small" -- a qsearch that's stopped terminating cleanly + // (e.g. a check-extension/repetition interaction letting + // QPLIES_OF_NON_CAPTURE_CHECKS get bypassed) will blow through + // this by orders of magnitude, not marginally, regardless of + // it being mixed in with full-width nodes here. + if (ctx->sCounters.tree.u64TotalNodeCount > 500000) + { + Trace("TestQSearchSanity: position %lu total node count " + "%llu is wildly outside the expected 'small' range " + "for depth %lu -- FEN: %s\n", u, + ctx->sCounters.tree.u64TotalNodeCount, uDepth, + rgszFen[u]); + fRet = FALSE; + } + } + + if (FALSE == fRet) + { + UtilPanic(TESTCASE_FAILURE, + NULL, "TestQSearchSanity", NULL, NULL, + __FILE__, __LINE__); + } + ClearHashTable(); + SystemFreeMemory(ctx); + return(fRet); +} #endif diff --git a/tests/LCT2.epd b/tests/LCT2.epd new file mode 100644 index 0000000..ccdfc9c --- /dev/null +++ b/tests/LCT2.epd @@ -0,0 +1,35 @@ +r3kb1r/3n1pp1/p6p/2pPp2q/Pp2N3/3B2PP/1PQ2P2/R3K2R w KQkq - bm d6; id "POS-01"; +r3kb1r/3n1pp1/p6p/2pPp2q/Pp2N3/3B2PP/1PQ2P2/R3K2R w KQkq - bm d6; id "POS-02"; +r6k/pp4p1/2p1b3/3pP3/7q/P2B3r/1PP2Q1P/2K1R1R1 w - - bm Qc5; id "POS-03"; +r6k/pp4p1/2p1b3/3pP3/7q/P2B3r/1PP2Q1P/2K1R1R1 w - - bm Qc5; id "POS-04"; +r6k/pp4p1/2p1b3/3pP3/7q/P2B3r/1PP2Q1P/2K1R1R1 w - - bm Qc5; id "POS-05"; +r6k/pp4p1/2p1b3/3pP3/7q/P2B3r/1PP2Q1P/2K1R1R1 w - - bm Qc5; id "POS-06"; +r1b2r1k/pp2q1pp/2p2p2/2p1n2N/4P3/1PNP2QP/1PP2RP1/5RK1 w - - bm Nd1; id "POS-07"; +r2qrnk1/pp3ppb/3b1n1p/1Pp1p3/2P1P2N/P5P1/1B1NQPBP/R4RK1 w - - bm Bh3; id "POS-08"; +5nk1/Q4bpp/5p2/8/P1n1PN2/q4P2/6PP/1R4K1 w - - bm Qd4; id "POS-09"; +5nk1/Q4bpp/5p2/8/P1n1PN2/q4P2/6PP/1R4K1 w - - bm Qd4; id "POS-10"; +bn6/1q4n1/1p1p1kp1/2pPp1pp/1PP1P1P1/3N1P1P/4B1K1/2Q2N2 w - - bm h4; id "POS-11"; +bn6/1q4n1/1p1p1kp1/2pPp1pp/1PP1P1P1/3N1P1P/4B1K1/2Q2N2 w - - bm h4; id "POS-12"; +bn6/1q4n1/1p1p1kp1/2pPp1pp/1PP1P1P1/3N1P1P/4B1K1/2Q2N2 w - - bm h4; id "POS-13"; +r2qkb1r/1b3ppp/p3pn2/1p6/1n1P4/1BN2N2/PP2QPPP/R1BR2K1 w kq - bm d5; id "POS-14"; +8/1p3pp1/7p/5P1P/2k3P1/8/2K2P2/8 w - - bm f6; id "FIN-01"; +8/pp2r1k1/2p1p3/3pP2p/1P1P1P1P/P5KR/8/8 w - - bm f5; id "FIN-02"; +8/pp2r1k1/2p1p3/3pP2p/1P1P1P1P/P5KR/8/8 w - - bm f5; id "FIN-03"; +8/pp2r1k1/2p1p3/3pP2p/1P1P1P1P/P5KR/8/8 w - - bm f5; id "FIN-04"; +6k1/6p1/7p/P1N5/1r3p2/7P/1b3PP1/3bR1K1 w - - bm a6; id "FIN-05"; +6k1/6p1/7p/P1N5/1r3p2/7P/1b3PP1/3bR1K1 w - - bm a6; id "FIN-06"; +6k1/4pp1p/3p2p1/P1pPb3/R7/1r2P1PP/3B1P2/6K1 w - - bm Bb4; id "FIN-07"; +2k5/p7/Pp1p1b2/1P1P1p2/2P2P1p/3K3P/5B2/8 w - - bm c5; id "FIN-08"; +8/5Bp1/4P3/6pP/1b1k1P2/5K2/8/8 w - - bm Kg4; id "FIN-09"; +1r4k1/1q2bp2/3p2p1/2pP4/p1N4R/2P2QP1/1P3PK1/8 w - - bm Nd6; id "CMB-01"; +rn3rk1/pbppq1pp/1p2pb2/4N2Q/3PN3/3B4/PPP2PPP/R3K2R w KQ - bm Qh7; id "CMB-02"; +rn3rk1/pbppq1pp/1p2pb2/4N2Q/3PN3/3B4/PPP2PPP/R3K2R w KQ - bm Qh7; id "CMB-03"; +2k2b1r/1pq3p1/2p1pp2/p1n1PnNp/2P2B2/2N4P/PP2QPP1/3R2K1 w - - bm ef6; id "CMB-04"; +2r2r2/3qbpkp/p3n1p1/2ppP3/6Q1/1P1B3R/PBP3PP/5R1K w - - bm Rh7; id "CMB-05"; +2r1k2r/2pn1pp1/1p3n1p/p3PP2/4q2B/P1P5/2Q1N1PP/R4RK1 w k - bm ef6; id "CMB-06"; +2r1k2r/2pn1pp1/1p3n1p/p3PP2/4q2B/P1P5/2Q1N1PP/R4RK1 w k - bm ef6; id "CMB-07"; +2b1r1k1/r4ppp/p7/2pNP3/4Q3/q6P/2P2PP1/3RR1K1 w - - bm Nf6; id "CMB-08"; +2b1r1k1/r4ppp/p7/2pNP3/4Q3/q6P/2P2PP1/3RR1K1 w - - bm Nf6; id "CMB-09"; +rq2rbk1/6p1/p2p2Pp/1p1Rn3/4PB2/6Q1/PPP1B3/2K3R1 w - - bm Bh6; id "CMB-10"; +rnbq2k1/p1r2p1p/1p1p1Pp1/1BpPn1N1/P7/2P5/6PP/R1B1QRK1 w - - bm Nh7; id "CMB-11"; +r2qrb1k/1p1b2p1/p2ppn1p/8/3NP3/1BN5/PPP3QP/1K3RR1 w - - bm e5; id "CMB-12"; diff --git a/tests/arasan.epd b/tests/arasan.epd new file mode 100644 index 0000000..cf565fe --- /dev/null +++ b/tests/arasan.epd @@ -0,0 +1,140 @@ +8/1p2r1kp/1p1R2p1/4qp2/1P6/P1p1P1P1/5P1P/3Q2K1 w - - am Rxb6; id "arasan4.2"; +8/1p2r1kp/1p1R2p1/4qp2/1P6/P1p1P1P1/5P1P/3Q2K1 w - - am Rxb6; id "arasan4.3"; +8/1p2r1kp/1p1R2p1/4qp2/1P6/P1p1P1P1/5P1P/3Q2K1 w - - am Rxb6; id "arasan4.4"; +2r3k1/1b1nqppp/p3p3/8/1pQPn3/4PNP1/PP3PBP/RN4K1 w - - bm Qf1; id "arasan4.5"; +r3r1k1/6p1/1pqp2Np/2p1nP1P/N1PbPQ2/1P3PR1/P2K4/7R w - - bm f6; id "arasan4.6"; +r3r1k1/6p1/1pqp2Np/2p1nP1P/N1PbPQ2/1P3PR1/P2K4/7R w - - bm f6; id "arasan4.7"; +r3r1k1/6p1/1pqp2Np/2p1nP1P/N1PbPQ2/1P3PR1/P2K4/7R w - - bm f6; id "arasan4.8"; +4k3/5ppQ/1n3b2/3bp3/1B6/1P1R2NP/5PPK/1qr5 w - - bm Ba5; id "arasan4.9"; +r3r1k1/pb1n1p2/1p1p1n1p/q1pPpN2/2P4p/2PBPP2/P1Q3PP/1R3RK1 w - - bm Qf2; id "arasan4.10"; +r3r1k1/pb1n1p2/1p1p1n1p/q1pPpN2/2P4p/2PBPP2/P1Q3PP/1R3RK1 w - - bm Qf2; id "arasan4.11"; +q2r2k1/1bpn1ppp/1p1bp3/8/r2PP3/P4NP1/1BQ2PBP/3RR1K1 w - - bm e5; id "arasan4.12"; +q2r2k1/1bpn1ppp/1p1bp3/8/r2PP3/P4NP1/1BQ2PBP/3RR1K1 w - - bm e5; id "arasan4.13"; +rnbq1rk1/p3nppp/1p2p3/2ppP3/3P4/P1PB1N2/2P2PPP/R1BQK2R w KQ - bm Bxh7+; id "arasan4.14"; +4nr1k/r4p1p/2bq4/pp1pNP2/3P3Q/2P5/4PPB1/RR4K1 w - - bm c4; id "arasan4.15"; +4nr1k/r4p1p/2bq4/pp1pNP2/3P3Q/2P5/4PPB1/RR4K1 w - - bm c4; id "arasan4.16"; +1r1n3k/3qbppp/pr1p4/2pPpP2/2P1N1Q1/R6P/1P3PP1/2B1R1K1 w - - bm Bh6; id "arasan4.17"; +1r1n3k/3qbppp/pr1p4/2pPpP2/2P1N1Q1/R6P/1P3PP1/2B1R1K1 w - - bm Bh6; id "arasan4.18"; +1r1n3k/3qbppp/pr1p4/2pPpP2/2P1N1Q1/R6P/1P3PP1/2B1R1K1 w - - bm Bh6; id "arasan4.19"; +1r1n3k/3qbppp/pr1p4/2pPpP2/2P1N1Q1/R6P/1P3PP1/2B1R1K1 w - - bm Bh6; id "arasan4.20"; +1r1n3k/3qbppp/pr1p4/2pPpP2/2P1N1Q1/R6P/1P3PP1/2B1R1K1 w - - bm Bh6; id "arasan4.21"; +2q2k1r/1pbb1ppp/2n2n2/1B2p3/Q3P3/4BP1P/PP4P1/1KRR4 w - - bm Rxd7; id "arasan4.22"; +2q2k1r/1pbb1ppp/2n2n2/1B2p3/Q3P3/4BP1P/PP4P1/1KRR4 w - - bm Rxd7; id "arasan4.23"; +2q2k1r/1pbb1ppp/2n2n2/1B2p3/Q3P3/4BP1P/PP4P1/1KRR4 w - - bm Rxd7; id "arasan4.24"; +5q2/3Q1N1p/r4kp1/4p3/3nb3/1B5P/5PP1/1R4K1 w - - bm f4; id "arasan4.25"; +5rk1/1p1P1ppp/pBn1p1r1/3p4/6P1/RPP4K/7P/4R3 w - - bm Ra5; id "arasan4.26"; +5rk1/1p1P1ppp/pBn1p1r1/3p4/6P1/RPP4K/7P/4R3 w - - bm Ra5; id "arasan4.27"; +3r2k1/2qn1ppp/8/1pbrp3/pP1N4/P2P2P1/RB2RP1P/4QK2 w - - bm Nxb5; id "arasan4.28"; +3r2k1/2qn1ppp/8/1pbrp3/pP1N4/P2P2P1/RB2RP1P/4QK2 w - - bm Nxb5; id "arasan4.29"; +2Q5/8/8/8/3kbP1N/2pq3P/6PK/8 w - - bm f5; id "arasan4.30"; +2Q5/8/8/8/3kbP1N/2pq3P/6PK/8 w - - bm f5; id "arasan4.31"; +r1b2rk1/pp3pp1/4p2p/2ppP1b1/3Pq3/2P1PNP1/PP2Q2P/R3KB1R w KQ - bm Nxg5; id "arasan4.32"; +Qn3rk1/p5p1/1pnqp3/6p1/6P1/2P5/P4P1P/R1B2RK1 w - - bm Qb7; id "arasan4.33"; +Qn3rk1/p5p1/1pnqp3/6p1/6P1/2P5/P4P1P/R1B2RK1 w - - bm Qb7; id "arasan4.34"; +r1b2r2/pp3p1p/1q1p3k/2p1n2N/3N4/4P1P1/P1PP2BP/R4QK1 w - - bm Qf6+; id "arasan4.35"; +r1bq2k1/1p1n1r1p/3Qppp1/pP5N/2P1B3/8/P4P1P/2KR2R1 w - - bm Bxg6; id "arasan4.36"; +r1bq2k1/1p1n1r1p/3Qppp1/pP5N/2P1B3/8/P4P1P/2KR2R1 w - - bm Bxg6; id "arasan4.37"; +r4rk1/2qbbpp1/7p/2pPp3/ppN1P3/4Q1P1/PPPN4/2K3RR w - - bm Rxh6; id "arasan4.38"; +r2q1r1k/1p2bppp/pnb1p3/4P3/6R1/2N5/PPB1QPPP/R1B3K1 w - - bm Rxg7; id "arasan4.39"; +1r3k2/4q3/2Pp3b/3Bp3/2Q2p2/1p1P2P1/1P2KP2/3N4 w - - bm Be6; id "arasan4.40"; +r4rk1/pp1nqppp/2b1p3/6N1/4N3/6Q1/PPP2PPP/1K1RR3 w - - bm Rxd7; id "arasan4.41"; +r3k1nr/pp1b1ppp/4p3/3p4/q4B2/3B1Q2/PP3PPP/2R1R1K1 w kq - bm Qg3; id "arasan4.42"; +r3k1nr/pp1b1ppp/4p3/3p4/q4B2/3B1Q2/PP3PPP/2R1R1K1 w kq - bm Qg3; id "arasan4.43"; +r3k1nr/pp1b1ppp/4p3/3p4/q4B2/3B1Q2/PP3PPP/2R1R1K1 w kq - bm Qg3; id "arasan4.44"; +r1bk2nr/ppp2ppp/2np1b2/1N6/N4P1q/P3B3/1PP1B1PP/R2QR1K1 w - - bm Nxd6; id "arasan4.45"; +r5nr/ppp2kpp/3pbp2/1B6/PP5q/8/1BPQ1PPP/1R2R1K1 w - - bm Rxe6; id "arasan4.46"; +r5nr/ppp2kpp/3pbp2/1B6/PP5q/8/1BPQ1PPP/1R2R1K1 w - - bm Rxe6; id "arasan4.47"; +r5nr/ppp2kpp/3pbp2/1B6/PP5q/8/1BPQ1PPP/1R2R1K1 w - - bm Rxe6; id "arasan4.48"; +2r1k1nr/p1Pq4/1p3p2/4pn1p/1B1p4/1N3Q2/PP2P1RP/2R4K w - - bm Nd2; id "arasan4.49"; +r2qr1k1/pp1b2pp/2nBpp1n/6NQ/2B1N3/P3b3/1PP3PP/R4R1K w - - bm Nxf6+; id "arasan4.50"; +1n3rn1/3b4/rq1P1pkp/1p4p1/p1p1N1N1/2Q2B1P/1P3PP1/R3R1K1 w - - bm Nexf6 Ngxf6; id "arasan4.51"; +r1bq1rk1/ppp1bpp1/2np3p/3N3n/2P1PB2/3BQN2/PP3PPP/R3K2R w KQ - bm Bxh6; id "arasan4.52"; +2r3k1/5pp1/1p5p/p1n1P3/2B2P2/P3Q3/1PP4q/1K4R1 w - - bm Qd4; id "arasan4.53"; +2r3k1/5pp1/1p5p/p1n1P3/2B2P2/P3Q3/1PP4q/1K4R1 w - - bm Qd4; id "arasan4.54"; +2r3k1/5pp1/1p5p/p1n1P3/2B2P2/P3Q3/1PP4q/1K4R1 w - - bm Qd4; id "arasan4.55"; +2r3k1/5pp1/1p5p/p1n1P3/2B2P2/P3Q3/1PP4q/1K4R1 w - - bm Qd4; id "arasan4.56"; +r2r2k1/pbpq1ppp/1pn1pn2/8/P2PP3/B1R2NP1/P1Q2PBP/3R2K1 w - - bm d5; id "arasan4.57"; +r2r2k1/pbpq1ppp/1pn1pn2/8/P2PP3/B1R2NP1/P1Q2PBP/3R2K1 w - - bm d5; id "arasan4.58"; +1b6/4kPp1/Pp6/2p2K1B/2P5/3p4/8/8 w - - bm Ke4; id "arasan4.59"; +4r1k1/pppb3p/1n4p1/3P4/1bP2p2/qN3PPP/P1Q3B1/2R3KR w - - bm g4; id "arasan4.60"; +2r3k1/2r1b1p1/p1q3Pp/3pP3/1p6/1P2B2Q/2PR4/1K4R1 w - - bm Bxh6; id "arasan4.61"; +4R3/1k4p1/8/pp4P1/8/3K4/1b5P/8 w - - bm Re2; id "arasan4.62"; +r3k2r/pb3ppp/1p2pn2/1Nb1q3/4P3/P2B4/1PQ2PPP/R1B2RK1 w kq - bm b4; id "arasan4.63"; +2r1r1k1/1pn3qp/2pbn1p1/p2pN3/3P1P2/3BP1BP/PPQ3K1/2R2R2 w - - bm f5; id "arasan4.64"; +5Nk1/1p2n3/p2q1rp1/3p1pQP/5P2/2P2B2/b1PK2P1/4R3 w - - bm Nd7; id "arasan4.65"; +5Nk1/1p2n3/p2q1rp1/3p1pQP/5P2/2P2B2/b1PK2P1/4R3 w - - bm Nd7; id "arasan4.66"; +8/1B1r1b1k/3N2pp/p3Qp2/3P1P2/7P/1P1b1K2/2r5 w - - bm Nxf5; id "arasan4.67"; +8/1B1r1b1k/3N2pp/p3Qp2/3P1P2/7P/1P1b1K2/2r5 w - - bm Nxf5; id "arasan4.68"; +2kb4/r7/4p1r1/1RNn2p1/8/6P1/pB3PK1/7R w - - bm Be5; id "arasan4.69"; +2kb4/r7/4p1r1/1RNn2p1/8/6P1/pB3PK1/7R w - - bm Be5; id "arasan4.70"; +4rrk1/1bpn1qp1/1p1b3p/pP1Ppn2/4N3/P2Q1N1P/1BB2PP1/2R1R1K1 w - - bm g4; id "arasan4.71"; +4rrk1/1bpn1qp1/1p1b3p/pP1Ppn2/4N3/P2Q1N1P/1BB2PP1/2R1R1K1 w - - bm g4; id "arasan4.72"; +1r5k/pp5p/3Nn1p1/3R4/3b4/BP3rPP/P4P2/1R4K1 w - - bm Rxd4; id "arasan4.73"; +rn1r2k1/p4p2/1pp1pqp1/6Rp/3PB2P/8/PPPQ1P2/2KR4 w - - bm Bxg6; id "arasan4.74"; +r4rk1/1pp3q1/2np3p/p2Npb1B/2PbN1p1/3P2P1/PP4PP/R2Q1R1K w - - bm Ndf6+ Nef6+; id "arasan4.75"; +r5k1/p6r/1n2p2p/2BbPpp1/8/P2B4/5PPP/2RR2K1 w - - bm Bxf5; id "arasan4.76"; +5rk1/q4ppp/pp1bp1n1/6N1/4QP2/P3P3/1P1B2PP/2R3K1 w - - bm Nxe6; id "arasan4.77"; +r3kb1r/2R2bpp/p2p1p2/1p2pPP1/3qP3/5Q2/1PPB3P/2K2B1R w kq - bm Bc4; id "arasan4.78"; +r3kb1r/2R2bpp/p2p1p2/1p2pPP1/3qP3/5Q2/1PPB3P/2K2B1R w kq - bm Bc4; id "arasan4.79"; +6k1/3p2p1/1p1Npq2/3n3r/1P6/5PQ1/P4KP1/RNBR3r w - - bm Ne4; id "arasan4.80"; +6k1/3p2p1/1p1Npq2/3n3r/1P6/5PQ1/P4KP1/RNBR3r w - - bm Ne4; id "arasan4.81"; +2k4r/1q1bBQ2/2p1p3/1p2P2p/6r1/8/5PP1/R1R3K1 w - - bm Bf8; id "arasan4.82"; +2r2k1r/p1q3pp/1p3p2/3Bp3/2Pb2b1/P1Q5/1B1R1PPP/4R1K1 w - - bm Rxd4; id "arasan4.83"; +2r2k1r/p1q3pp/1p3p2/3Bp3/2Pb2b1/P1Q5/1B1R1PPP/4R1K1 w - - bm Rxd4; id "arasan4.84"; +3q1k2/8/1p1b1r1p/p2R2p1/P1BQ2P1/1P3P2/8/3K4 w - - bm f4; id "arasan4.85"; +2r2rk1/5qp1/1pN2p1p/pPnRp3/P1P5/5PP1/2Q1R1KP/8 w - - bm Rxc5; id "arasan4.86"; +3r1r2/pb3pkp/1pn1qNp1/2p1P3/5P2/P2BQ3/1P4PP/3R1R1K w - - bm f5; id "arasan4.87"; +r3rb1k/1b3pp1/3p2qp/p2P1N2/Pp1Qn3/4RN1P/1P3PP1/R1B3K1 w - - bm N3h4; id "arasan4.88"; +r3rb1k/1b3pp1/3p2qp/p2P1N2/Pp1Qn3/4RN1P/1P3PP1/R1B3K1 w - - bm N3h4; id "arasan4.89"; +r3rb1k/1b3pp1/3p2qp/p2P1N2/Pp1Qn3/4RN1P/1P3PP1/R1B3K1 w - - bm N3h4; id "4.90"; +r3rk2/ppq2pbQ/2p1b1p1/4p1B1/2P3P1/3P1B2/P3PPK1/1R5R w - - bm Qxg7+ Qh8+; id "4.91"; +r1b2rk1/1pqp1p1p/p3nBpQ/4p3/4P3/1N4P1/PbP2PBP/R4RK1 w - - bm Nd2; id "4.92"; +4r1k1/2P3pp/1n2q3/2pn1p2/8/6B1/1P1QBP1P/4R1K1 w - - bm Rd1; id "arasan4.93"; +r2q1rk1/p4p2/1p2pn1p/n2b2p1/3P3B/2R2N2/PP3PPP/1B1QR1K1 w - - bm Nxg5; id "arasan4.94"; +r2q1rk1/p4p2/1p2pn1p/n2b2p1/3P3B/2R2N2/PP3PPP/1B1QR1K1 w - - bm Nxg5; id "arasan4.95"; +r2q1rk1/p4p2/1p2pn1p/n2b2p1/3P3B/2R2N2/PP3PPP/1B1QR1K1 w - - bm Nxg5; id "arasan4.96"; +5rk1/3R1p2/ppp3r1/b1p1P2p/2P2B1q/2P2Q2/P5PP/3R3K w - - bm h3; id "arasan4.97"; +2r1r1k1/5p1p/p3qBp1/1ppbP3/2n5/2PB3P/P3QPP1/3RR1K1 w - - bm Bxc4; id "arasan4.98"; +r1br3k/pp2qn1p/4p2P/4Ppp1/2B5/P4NQ1/1P3PP1/3R1RK1 w - - bm Nxg5; id "arasan4.99"; +2r2rk1/3bq1p1/4p1Pp/3pP3/1p1N1PQ1/pP5R/P1P4R/4K3 w - - bm Rxh6; id "arasan4.100"; +2b2rk1/r3bp2/p3pp2/q2p4/5PPp/1RNB4/P1PQ3P/1R5K w - - bm Qf2; id "arasan4.101"; +2b2rk1/r3bp2/p3pp2/q2p4/5PPp/1RNB4/P1PQ3P/1R5K w - - bm Qf2; id "arasan4.102"; +2b2rk1/r3bp2/p3pp2/q2p4/5PPp/1RNB4/P1PQ3P/1R5K w - - bm Qf2; id "arasan4.103"; +2b2rk1/r3bp2/p3pp2/q2p4/5PPp/1RNB4/P1PQ3P/1R5K w - - bm Qf2; id "arasan4.104"; +2b2rk1/r3bp2/p3pp2/q2p4/5PPp/1RNB4/P1PQ3P/1R5K w - - bm Qf2; id "arasan4.105"; +4r1k1/p5qp/Pp1Rbb2/4pp1r/2P1p1p1/1PB1P3/1Q2BPPP/3R2K1 w - - bm c5; id "arasan4.106"; +8/4k1p1/8/5P1p/b1N4P/5PP1/1p1K4/1B1n4 w - - bm g4; id "arasan4.107"; +3q1r1k/1P1n2p1/4R2p/2QBp2P/3pPb2/R1p2P2/5P2/5K2 w - - bm Qxf8+; id "arasan4.108"; +3q1r1k/1P1n2p1/4R2p/2QBp2P/3pPb2/R1p2P2/5P2/5K2 w - - bm Qxf8+; id "arasan4.109"; +2rbk1r1/7R/p1n3p1/1p3q2/2n2N2/4pQ2/PP2B1PP/3R2K1 w - - bm g4; id "arasan4.110"; +8/8/3k4/1p1npP1p/pP2B2P/P7/5K2/8 w - - bm Bxd5; id "arasan4.111"; +5nk1/p2r1pp1/1p4bp/3B4/4PPP1/P6P/1B6/2R3K1 w - - bm f5; id "arasan4.112"; +5nk1/p2r1pp1/1p4bp/3B4/4PPP1/P6P/1B6/2R3K1 w - - bm f5; id "arasan4.113"; +5nk1/p2r1pp1/1p4bp/3B4/4PPP1/P6P/1B6/2R3K1 w - - bm f5; id "arasan4.114"; +2kr3r/Rbpnq3/1p1pp3/2P3p1/3P4/2P1P1p1/Q2N1PP1/4KB2 w - - bm Rxb7; id "arasan4.115"; +2R2b1r/3nkp2/B2pp1p1/1N4Pn/P3P3/4BP2/1r5q/3QK1R1 w - - bm Nd4 Na7; id "arasan4.116"; +r3r1k1/1p1b2pp/p2qpp2/3n4/Pn1P4/1BN2Q2/1P1B1PPP/R2R2K1 w - - bm Ne4; id "arasan5.1"; +r3r1k1/1p1b2pp/p2qpp2/3n4/Pn1P4/1BN2Q2/1P1B1PPP/R2R2K1 w - - bm Ne4; id "arasan5.2"; +8/6p1/1b4k1/1p1KP3/1p3PP1/pB6/8/8 w - - bm e6; id "arasan5.3"; +r4rk1/1bq2p2/p3p1p1/n3P2p/3NpP2/2P1B2R/2P3PP/R3Q1K1 w - - bm g4; id "arasan5.4"; +2rq1rk1/pb1n1p2/1p2pn1p/6p1/2BP3B/1QR2N2/PP3PPP/4R1K1 w - - bm Nxg5; id "arasan5.5"; +2r1qrk1/1b1nbppp/4p3/pB1nP1B1/Pp2N3/5N1P/1P1Q1PP1/R2R2K1 w - - bm Nf6+; id "arasan5.6"; +1q4k1/r4p1p/6p1/1p1Q3n/p3N3/P7/1P3PPP/4R1K1 w - - bm g4; id "arasan5.7"; +3rr1k1/1pq2p1p/p1n3p1/3Bb3/P7/2P1BQ2/1P3PKP/3RR3 w - - bm Bb6; id "arasan5.8"; +3rr1k1/1pq2p1p/p1n3p1/3Bb3/P7/2P1BQ2/1P3PKP/3RR3 w - - bm Bb6; id "arasan5.9"; +r2qr1k1/pb4b1/1pnP2pp/5p2/5PB1/B4NQ1/P5PP/2R1R1K1 w - - bm Bxf5; id "arasan5.10"; +r1b2rk1/p1q4p/1p4p1/2NP1p2/1PPB4/6P1/P6P/Q3R1K1 w - - bm Qc1; id "arasan5.11"; +8/3k4/1p4b1/3p1p1p/K2P1PpP/3B2P1/1P6/8 w - - bm Kb5; id "arasan5.12"; +r1bn1rk1/2q2ppN/7p/p2p4/R7/2PB4/3B1PPb/3QRK2 w - - bm Nf6+; id "arasan5.13"; +4qrk1/1p1nb1p1/2p1pn1p/r2p4/3P1BPP/P1NBP3/5P2/R2QK1R1 w - - bm g5; id "arasan5.14"; +4qrk1/1p1nb1p1/2p1pn1p/r2p4/3P1BPP/P1NBP3/5P2/R2QK1R1 w - - bm g5; id "arasan5.15"; +4qrk1/1p1nb1p1/2p1pn1p/r2p4/3P1BPP/P1NBP3/5P2/R2QK1R1 w - - bm g5; id "arasan5.16"; +r1bq1rk1/4ppbp/p2p1n1B/2p5/1p2p2Q/3P1N2/PPP1N1PP/R4RK1 w - - bm Ng5; id "arasan5.17"; +4rrk1/p2n2pp/npbp4/2p1p3/2P2P1q/PNB1P3/1P2B1PP/1R1Q1RK1 w - - am Qxd6; id "arasan5.18"; +4rrk1/p2n2pp/npbp4/2p1p3/2P2P1q/PNB1P3/1P2B1PP/1R1Q1RK1 w - - am Qxd6; id "arasan5.19"; +8/B3r1p1/8/P4k1p/1P6/5P2/5K2/8 w - - bm Bc5; id "arasan5.21"; +b2rn1k1/3r1ppp/3N2n1/1pB1P3/p5P1/P3KP2/B6P/1RR5 w - - bm e6; id "arasan5.24"; +8/4rq2/2Q1N1pk/p3R2p/3p1P2/2n4P/6P1/7K w - - bm g4; id "arasan5.25"; +4kb1r/3n1p1p/p1q1p1p1/1p1nP3/1prPN3/4BB2/P2Q1PPP/3R1RK1 w - - bm Bh6; id "arasan5.26"; +3q2k1/rbp2r1p/1p1p1pp1/p1nN4/2P1PP2/1P2QBPP/1P5K/3RR3 w - - bm e5; id "arasan5.27"; +3q2k1/rbp2r1p/1p1p1pp1/p1nN4/2P1PP2/1P2QBPP/1P5K/3RR3 w - - bm e5; id "arasan5.28"; diff --git a/tests/convert_epd.pl b/tests/convert_epd.pl index cdd774c..65355ad 100755 --- a/tests/convert_epd.pl +++ b/tests/convert_epd.pl @@ -2,6 +2,17 @@ # Yes, I never wrote real code to parse EPD files. This script converts # "normal" style EPDs into what typhoon wants to eat. +# +# SUPERSEDED: the engine now parses raw EPD directly -- `epd <file>` +# (see ParseEpdRecord in fen.c, EpdCommand in script.c) -- so this +# preprocessing step shouldn't be needed anymore. Left here rather than +# deleted since some workflow may still shell out to it, but it has a +# known bug: the bm/am regex's `[^b]+` filler between the board and +# "bm" breaks on every Black-to-move record (the side-to-move field is +# literally the character "b"), and $fen/$id/$solution are unscoped +# globals, so a failed match on one line silently carries the +# *previous* line's fen/solution forward instead of erroring. Prefer +# `epd` for any new suite. while(<>) { @lines = split(/;/); diff --git a/tests/ecm-gcp.epd b/tests/ecm-gcp.epd new file mode 100644 index 0000000..69855f1 --- /dev/null +++ b/tests/ecm-gcp.epd @@ -0,0 +1,181 @@ +2k4r/1pp2ppp/p1p1bn2/4N3/1q1rP3/2N1Q3/PPP2PPP/R4RK1 w - - bm Nd5; id "ECM.952"; +rn3rk1/4bppp/1q2p3/p2pP3/8/1PN2B1P/P4PP1/2RQ1RK1 w - - bm Bxd5; id "ECM.961"; +2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - bm Rxc8; id "ECM.973"; +2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - bm Rxc8; id "ECM.977"; +r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - bm Nxc6; id "ECM.978"; +r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - bm Nxc6; id "ECM.986"; +5rk1/1r1qbnnp/R2p2p1/1p1Pp3/1Pp1P1N1/2P1B1NP/5QP1/5R1K w - - bm Qxf7+; id "ECM.987"; +5rk1/1r1qbnnp/R2p2p1/1p1Pp3/1Pp1P1N1/2P1B1NP/5QP1/5R1K w - - bm Qxf7+; id "ECM.993"; +r4rk1/1b3ppp/p2q1n2/1p2N3/3P4/1B6/P1Q2PPP/2R1R1K1 w - - bm Nxf7; id "ECM.999"; +r4rk1/1b3ppp/p2q1n2/1p2N3/3P4/1B6/P1Q2PPP/2R1R1K1 w - - bm Nxf7; id "ECM.1004"; +3r4/p2nrpkp/2B1p3/2P2pP1/3R3Q/q7/6PP/6RK w - - bm g6; id "ECM.1007"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Kg2; id "ECM.1009"; +r1bqnrk1/pp2ppb1/1np3pp/4P1N1/5P2/2NBB3/PPP3PP/R2Q1RK1 w - - bm Nh7; id "ECM.1011"; +4rrk1/1bp2ppp/p1q2b1B/1pn2B2/4N1Q1/2P4P/PP3PP1/3RR1K1 w - - bm Nxc5; id "ECM.1016"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "ECM.1018"; +1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - - bm exf6; id "ECM.1020"; +2r1rbk1/1b3ppp/pp6/2q1pNP1/Pn1RP3/2N5/1PP2QBP/5R1K w - - bm Nh6+; id "ECM.1025"; +r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - - bm Re7; id "ECM.1028"; +r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - - bm Re7; id "ECM.1038"; +r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - - bm Re7; id "ECM.1041"; +r1k4r/ppp1b3/5Npp/4pb1Q/8/1B2B3/PqP2PPP/2RR2K1 w - - bm Qxf5+; id "ECM.1045"; +r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K - bm Nxh7; id "ECM.1053"; +2b2r2/1p2q1k1/r3pppp/4n2P/p3N3/1B4Q1/PPP3P1/3R1R1K w - - bm Rxf6; id "ECM.1057"; +rbbq1rk1/p3nppp/1p2p3/8/1B1pN3/P2B4/1P3PPP/2RQ1RK1 w - - bm Nf6+; id "ECM.1065"; +rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - - bm Nxh5; id "ECM.1066"; +r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - bm Rxe7; id "ECM.1068"; +r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - bm Rxe7; id "ECM.1076"; +r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - bm Rxe7; id "ECM.1080"; +2r3k1/pp2n3/6pQ/4q3/8/2P1p1P1/P5BP/3R2K1 w - - bm Bd5+; id "ECM.1082"; +8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - - bm Ba3; id "ECM.1084"; +r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - bm g6; id "ECM.1085"; +r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - bm g6; id "ECM.1093"; +8/p5Q1/2ppq2p/3n1ppk/3B4/2P2P1P/P5P1/6K1 w - - bm g4+; id "ECM.1096"; +1r2k2r/3q2pp/p3pp2/P7/2P1Q3/8/1nB3PP/1R3R1K w k - bm Ba4; id "ECM.1098"; +1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - bm Nxf7; id "ECM.1114"; +1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - bm Nxf7; id "ECM.1122"; +1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - bm Nxf7; id "ECM.1127"; +r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - bm Nb6; id "ECM.1131"; +r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - bm Nb6; id "ECM.1132"; +1rbr2k1/4qp2/p1n2bpp/1pp1p1N1/4P3/2P1BQ1P/PPB2PP1/3RR1K1 w - - bm Bxc5; id "ECM.1133"; +2r2rk1/1p1q1ppp/1p3n2/3p1N2/4n3/1N3Q2/PPP2PPP/R2R2K1 w - - bm Rxd5; id "ECM.1134"; +2r1r1k1/pp3pp1/3p3B/P2P1P2/2nb4/7R/1q3PQP/1B3R1K w - - bm Rb3; id "ECM.1147"; +1k1r2r1/pp3p1p/B2q1n2/8/3Pb1p1/2Q5/PR3PPP/2B1R1K1 w - - bm Bf4; id "ECM.1150"; +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.1151"; +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.1152"; +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.1160"; +5Bk1/pr2pp1p/2b3pQ/2p1q3/8/2P4P/PP4P1/1B1Rb1K1 w - - bm Bg7; id "ECM.1161"; +6k1/p4pq1/2n1p1p1/1p1pP1N1/3P1QPP/8/P3K3/8 w - - bm Qc1; id "ECM.1176"; +3r1rk1/1pq1nppp/p7/2pB3Q/P4P2/1P2P3/6PP/2RR2K1 w - - bm Rxc5; id "ECM.1177"; +8/p1r2q1k/1p1p3p/1Pp1nP2/P1P5/3R2PP/1Q4BK/8 w - - bm Rxd6; id "ECM.1178"; +8/p1r2q1k/1p1p3p/1Pp1nP2/P1P5/3R2PP/1Q4BK/8 w - - bm Rxd6; id "ECM.1179"; +r2qr1k1/1pnb1pp1/p1n1p2p/8/P2P3P/B2B1NP1/6P1/R2Q1RK1 w - - bm Bh7+; id "ECM.1185"; +2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - - bm Bxf7+; id "ECM.1188"; +1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - - bm Bb7; id "ECM.1189"; +5r1r/1pkb4/5pB1/2P5/p3R2P/Pq6/1PQ2Pn1/K2R4 w - - bm Rxd7; id "ECM.1193"; +2rq4/5rbk/3p1n1p/p2Pp2P/1p2b3/4BNR1/PP1Q1P2/3BK1R1 w - - bm Bxh6; id "ECM.1199"; +r2q1rkb/pp2p3/2p2pp1/3pPb2/3P3R/2N3P1/PPPQBPK1/3R4 w - - bm Rxh8+; id "ECM.1200"; +r1bqrnk1/p4p2/1p5p/3pB1p1/P2P2n1/1P1B2N1/2Q3PP/R4RK1 w - - bm Bh7+; id "ECM.1202"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.1204"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.1208"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.1214"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.1217"; +r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - bm Nxg7; id "ECM.1218"; +b6r/2q2k2/4pPp1/1p1n2Bp/2pPB1PP/2P2Q2/8/4R1K1 w - - bm Bxg6+; id "ECM.1223"; +r1b2r2/3pNpkp/3pn1p1/2pN3P/2PnP3/q3QP2/4BKP1/1R5R w - - bm Qh6+; id "ECM.1224"; +2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - - bm Nxg7; id "ECM.1227"; +2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - - bm Nxg7; id "ECM.1229"; +r2qnr2/pp3kbQ/2npb1p1/2pN1pP1/4P3/8/PPP1BP2/R1B1K1NR w KQ - bm Qxg6+; id "ECM.1232"; +r2qnr2/pp3kbQ/2npb1p1/2pN1pP1/4P3/8/PPP1BP2/R1B1K1NR w KQ - bm Qxg6+; id "ECM.1234"; +r3rk2/p2q1b1p/1pnP1Qp1/5pN1/2p2P2/P1P5/7P/4RRK1 w - - bm Re7; id "ECM.1249"; +r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - - bm R1b4; id "ECM.1254"; +r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - - bm R1b4; id "ECM.1257"; +rnb2rk1/pp2bppp/2p5/q7/4NN2/4B1QP/PPP3P1/2KR3R w - - bm Nd5; id "ECM.1259"; +5k1r/ppqnnp2/3b2p1/2pB2Qp/3p3N/1P1P2P1/P1P2P2/2B1R1K1 w - - bm Rxe7; id "ECM.1262"; +3r1rk1/pbqn1pp1/1pp2n1p/2b1p1B1/P1B1P2N/2N4P/1PP1QPP1/3R1RK1 w - - bm Rxd7; id "ECM.1265"; +1rr3k1/4ppb1/2q1bnp1/1p2B1Q1/6P1/2p2P2/2P1B2R/2K4R w - - bm Qh6; id "ECM.1267"; +3rqb2/1pR3pk/p3n1pp/3p4/3B4/PP6/1P4PP/4RQK1 w - - bm Rxe6; id "ECM.1269"; +rkb2qr1/1p5p/pQ1bp3/3p2B1/5n2/3B1N2/PP3PPP/2R2RK1 w - - bm Rxc8+; id "ECM.1270"; +2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - - bm Rxe4; id "ECM.1271"; +2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - - bm Rxe4; id "ECM.1273"; +2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - - bm Rxe4; id "ECM.1274"; +r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - bm Rxc5; id "ECM.1277"; +r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - bm Rxc5; id "ECM.1278"; +rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - - bm Nxe6; id "ECM.1281"; +rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - - bm Nxe6; id "ECM.1285"; +r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - - bm Rxd7; id "ECM.1293"; +r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - - bm Rxd7; id "ECM.1294"; +r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - bm Rxd4; id "ECM.1295"; +2rbr2k/1pq2ppp/p3bn2/4p1B1/P3P3/2N3Q1/1PP1B1PP/3R1R1K w - - bm Rxd8; id "ECM.1304"; +3nr1k1/p6p/2n1pRpB/3pP3/2pP2P1/q1P4P/6BK/5Q2 w - - bm Rxg6+; id "ECM.1306"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.1308"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.1314"; +r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - - bm Bxe5+; id "ECM.1317"; +r1b1qbk1/7p/4p1p1/1p2Bp2/p1B2Q2/P3P3/1P3PPP/3R2K1 w - - bm Bc3; id "ECM.1318"; +q1r3k1/2r4p/2p3pP/2Qp1p2/PRn5/4P1P1/5PB1/1R4K1 w - - bm Rxc4; id "ECM.1321"; +q1r3k1/2r4p/2p3pP/2Qp1p2/PRn5/4P1P1/5PB1/1R4K1 w - - bm Rxc4; id "ECM.1325"; +r3rbk1/p1q2pp1/1n5p/2pp4/4N3/1PQ3P1/PB2PP1P/3R1RK1 w - - bm Nf6+; id "ECM.1327"; +r3rbk1/p1q2pp1/1n5p/2pp4/4N3/1PQ3P1/PB2PP1P/3R1RK1 w - - bm Nf6+; id "ECM.1329"; +2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - - bm Rxa6; id "ECM.1332"; +2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - - bm Rxa6; id "ECM.1335"; +2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - - bm Rxd3; id "ECM.1336"; +r3nrk1/p1pb1qpp/3p1p2/2pP1N2/2P1PR2/P1PB4/4Q1PP/5RK1 w - - bm e5; id "ECM.1340"; +r1b2rk1/pp2qp2/2nRp1p1/6Pn/1Pp5/P1N1P3/1BQ2PP1/2K2B1R w - - bm Rxh5; id "ECM.1341"; +R2b2k1/2rq1n1p/3p2p1/1p1Ppp1n/1P6/1B1PQN1P/1B3PP1/6K1 w - - bm Nxe5; id "ECM.1344"; +6k1/5rb1/6pp/1p2p3/2b5/4B1P1/r4PBP/1RR3K1 w - - bm Rxc4; id "ECM.1346"; +4r1k1/1p5p/5ppP/1qnP4/r4R2/P6P/1B1Q2K1/5R2 w - - bm Rxf6; id "ECM.1347"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm e6; id "ECM.1348"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm e6; id "ECM.1350"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm e6; id "ECM.1352"; +r2q1rk1/p5pp/bn1p1p2/2pP4/1bP1NP2/3B1R2/PBQ3PP/R5K1 w - - bm Ng5; id "ECM.1354"; +1r1q2k1/7p/2p3p1/1P1n1b1r/2BQ4/4B3/P6P/1R3RK1 w - - bm bxc6; id "ECM.1355"; +r1b1qbk1/pp3r1p/2pR1np1/5p2/2P1pP2/1PN1Q1PP/PB2P1B1/5RK1 w - - bm Rxf6; id "ECM.1357"; +1n2n1r1/r3qppk/p2p3p/3PpP1P/1P2P3/3B2RQ/3B1P1K/6R1 w - - bm Bxh6; id "ECM.1371"; +3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - - bm Bh4; id "ECM.1376"; +r1r3kb/1pqbpp2/p2p1npB/n7/3NP3/1BN2P2/PPPQ2P1/2KR3R w - - bm Bf8; id "ECM.1377"; +4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - - bm Ng6+; id "ECM.1380"; +2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - - bm Qb2; id "ECM.1381"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.1383"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.1387"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.1394"; +3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - - bm Bxh5; id "ECM.1398"; +r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - - bm Rxd5; id "ECM.1403"; +r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - - bm Rf6; id "ECM.1405"; +r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - - bm Rf6; id "ECM.1408"; +2r4r/3bk1b1/1q2pp2/3pPp1p/1p1N1P1P/1P1R1BP1/P2Q4/1K1R4 w - - bm Nxf5+; id "ECM.1409"; +1rb3k1/2r2pbp/p2q1npn/P1pPp1N1/2B1P3/2P1B1NP/5QP1/3R1RK1 w - - bm Ne6; id "ECM.1410"; +r1bqn1r1/p2k1pp1/1p5p/n1pPpN2/2P1P3/P1PBB2P/4Q1P1/R4RK1 w - - bm Nxh6; id "ECM.1421"; +r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ - bm Bg5; id "ECM.1423"; +r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ - bm Bg5; id "ECM.1426"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.1433"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.1434"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.1438"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.1439"; +3r1qk1/5p1p/4b1pP/1pRp4/1P1Q4/r5P1/5P2/4RBK1 w - - bm Rxe6; id "ECM.1448"; +2rr1nk1/pp2q1b1/4p1p1/5p2/1nB5/2B1N1QP/PP4P1/4RRK1 w - - bm Nxf5; id "ECM.1450"; +2rr1nk1/pp2q1b1/4p1p1/5p2/1nB5/2B1N1QP/PP4P1/4RRK1 w - - bm Nxf5; id "ECM.1452"; +4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - - bm Bxf6; id "ECM.1454"; +4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - - bm Bxf6; id "ECM.1457"; +5r1n/r2q1pkp/3p1npN/NppPp2P/1P2P3/2P1Q1P1/5P2/R3K2R w KQ - bm Nf5+; id "ECM.1478"; +5r1n/r2q1pkp/3p1npN/NppPp2P/1P2P3/2P1Q1P1/5P2/R3K2R w KQ - bm Nf5+; id "ECM.1495"; +1r2r1k1/1bn2pbp/pp1q1np1/2pPN1B1/P1B5/2N4P/1P1Q1PP1/R3R1K1 w - - bm Nxf7; id "ECM.1503"; +1rb2bk1/2n2qp1/p2p3p/R1pP1p2/2B5/1PBQ1N1P/2P2PP1/6K1 w - - bm Rxc5; id "ECM.1504"; +2q1rk2/QR3ppp/1pPpb3/1P2p1b1/4P3/6P1/3N1PBP/6K1 w - - bm Bh3; id "ECM.1516"; +r2q1rk1/pb1nbpp1/1pp1pn1p/3pN3/2PPP3/2N1B1P1/PP3PBP/R2Q1RK1 w - - bm Nxc6; id "ECM.1525"; +2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - bm h3; id "ECM.1527"; +2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - bm h3; id "ECM.1529"; +2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - bm h3; id "ECM.1533"; +2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - bm h3; id "ECM.1536"; +6r1/1p3k2/pPp4R/K1P1p1p1/1P2Pp1p/5P1P/6P1/8 w - - bm Rxc6; id "ECM.1546"; +1k2b3/4bpp1/p2pp1P1/1p3P2/2q1P3/4B3/PPPQN2r/1K1R4 w - - bm f6; id "ECM.1547"; +6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - - bm e5; id "ECM.1551"; +6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - bm b5; id "ECM.1553"; +r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - bm Rxa6; id "ECM.1554"; +r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - bm Rxa6; id "ECM.1561"; +2r2rk1/p1N2p1p/2P1p1p1/1Pp3q1/3b4/5Q2/P1P3PP/4RR1K w - - bm Nxe6; id "ECM.1563"; +3r1r2/pp1P3k/4Rbp1/1BP2p1p/8/7P/P4KP1/3R4 w - - bm Ba6; id "ECM.1564"; +2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - bm Nxa7; id "ECM.1573"; +2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - bm Nxa7; id "ECM.1578"; +6k1/p4pp1/Pp2r3/1QPq3p/8/6P1/2P2P1P/1R4K1 w - - bm cxb6; id "ECM.1579"; +4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - - bm f5; id "ECM.1582"; +4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - - bm f5; id "ECM.1584"; +r1b2rk1/1p2qppp/p3p3/2n5/3N4/3B1R2/PPP1Q1PP/R5K1 w - - bm Bxh7+; id "ECM.1590"; +r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - bm Bxh7+; id "ECM.1592"; +1rb2rk1/3nqppp/p1n1p3/1p1pP3/5P2/2NBQN2/PPP3PP/2KR3R w - - bm Bxh7+; id "ECM.1594"; +r4rk1/1bq2ppp/p1p1p3/2b1P1B1/3p2Q1/3B4/PPP2PPP/R3R1K1 w - - bm Bxh7+; id "ECM.1597"; +2r2r2/p2qppkp/3p2p1/3P1P2/2n2R2/7R/P5PP/1B1Q2K1 w - - bm Rxh7+; id "ECM.1600"; +1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - - bm Rxh7; id "ECM.1601"; +4rrk1/2q1bppp/p2p4/1p1Pn3/3B1R2/P2B2Q1/1PP3PP/5R1K w - - bm Bxh7+; id "ECM.1602"; +5r1k/ppp2qnp/1n1p1N1Q/3Ppb2/2P4P/7B/PP6/2KR2R1 w - - bm Nxh7; id "ECM.1604"; +5r1k/ppp2qnp/1n1p1N1Q/3Ppb2/2P4P/7B/PP6/2KR2R1 w - - bm Nxh7; id "ECM.1605"; +b3r1k1/2rN1ppp/2n1p3/p7/P3BP2/1R6/q1P2QPP/3R2K1 w - - bm Bxh7+; id "ECM.1606"; +2r1qrk1/3n3p/b3pPp1/4P3/1pp1nBN1/pP4PQ/P1P2PK1/3RR3 w - - bm Qxh7+; id "ECM.1607"; +5rk1/pbrn1ppp/1ppN1q2/2P1p3/3P4/1PRB4/P3QPPP/5RK1 w - - bm Bxh7+; id "ECM.1610"; +r1b2r1k/ppppq1pp/2n1n3/6N1/2B2P2/4B3/PPP3PP/R2Q1RK1 w - - bm Nxh7; id "ECM.1612"; +r2r2k1/p1p2p1p/4pPp1/1Pqb4/8/7R/1PB2PPP/3QR1K1 w - - bm Rxh7; id "ECM.1614"; +rn3rk1/pp1bppbp/1qp3p1/4P1N1/PP1PB3/2P1B3/4Q1PP/R4RK1 w - - bm Nxh7; id "ECM.1617"; +3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - - bm Bxh7+; id "ECM.1618"; +2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - - bm Bxh7+; id "ECM.1620"; +2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - - bm Bxh7+; id "ECM.1621"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "ECM.1622"; +2rq1bk1/1br2p1p/p2p2p1/1p1P4/4Q3/PP3N2/1BP5/1K1R3R w - - bm Rxh7; id "ECM.1623"; diff --git a/tests/ecm-hard.epd b/tests/ecm-hard.epd new file mode 100644 index 0000000..3246146 --- /dev/null +++ b/tests/ecm-hard.epd @@ -0,0 +1,378 @@ +1r5r/3b1pk1/3p1np1/p1qPp3/p1N1PbP1/2P2PN1/1PB1Q1K1/R3R3 b - - bm Nxg4; id "ECM.011"; +2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - - bm Rxc5; id "ECM.016"; +r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - - bm Nxd6; id "ECM.018"; +b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - - bm Rxf6+; id "ECM.019"; +r1b2rk1/2q2ppp/2pbp3/p7/4Nn2/3B4/PPPBQ1PP/R4R1K w - - bm Rxf4; id "ECM.028"; +3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - - bm Rgxg6; id "ECM.029"; +2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - bm Rxc8; id "ECM.035"; +r1b1rnk1/1p3pb1/1qpp2p1/2n5/2PNP2p/1PN3PP/3R1PBK/BR1Q4 b - - bm Rxa1; id "ECM.039"; +r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - bm Nxc6; id "ECM.040"; +2rr4/5pk1/p1q3p1/3bpP1p/1p4nR/1N4Q1/PPP3PP/3NR2K b - - bm Bxg2+; id "ECM.043"; +r4rk1/pp4pp/2nqb3/3p4/8/2NB4/PP1Q1PPP/4RRK1 w - - bm Bxh7+; id "ECM.044"; +3rkb1r/1p3p2/p1n1p3/q5pp/2PpP3/1P4P1/P1Q1BPKP/R2N3R b k - bm d3; id "ECM.048"; +1k1r1b1r/p1p1q3/2p1p3/4Ppp1/4nP2/P2BQ3/1PP3PB/2KR3R b - - bm Rxh2; id "ECM.051"; +r1bq1rk1/pp3pbp/2pp1np1/2n3B1/2PNP3/2N2P2/PP1QB1PP/R4RK1 b - - bm Nfxe4; id "ECM.053"; +r4rk1/pp1b2pp/3bpq2/3p1p2/2PPn3/PP1B4/1BQN1PPP/R4RK1 b - - bm Bxh2+; id "ECM.060"; +4nk2/r1r1bppp/pN2p3/2np4/8/BPN3PP/P3PPK1/2RR4 w - - bm Ncxd5; id "ECM.063"; +3r1rk1/1b2bppp/2q1pn2/pp4Q1/3B1P2/PBN5/1PP3PP/R2R3K b - - bm Rxd4; id "ECM.066"; +r1b2rk1/1p2bppp/p3pn2/4B3/1qBR4/2N5/P3QPPP/R5K1 w - - bm Bd3; id "ECM.068"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Qh6; id "ECM.071"; +r1b2kr1/1p1p1pNp/p1n1p1p1/5P2/3QP3/2N5/PqP1B1PP/R4RK1 w - - bm fxg6; id "ECM.076"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "ECM.080"; +Q7/p1r1ppk1/1qP4p/2Rb2p1/8/3N2P1/4PP1P/6K1 b - - bm Qb1+; id "ECM.081"; +1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - - bm exf6; id "ECM.082"; +4r1k1/1b4pp/p7/1prP3q/2P1B3/5P2/P3Q2P/3RR2K w - - bm Bg6; id "ECM.084"; +rn1q1r2/4bpk1/p3p3/1pN1N1np/2pP4/4PpBb/PPQ4P/1B1RK1R1 w - - bm Nc6; id "ECM.091"; +6k1/1pqb1p2/5bpB/r2n4/4N1P1/1P3P2/1P1Q4/1K5R w - - bm Qxd5; id "ECM.099"; +2kr1r2/1pp3pp/1n2p1b1/pN2B3/P1q5/1Q1p3P/5PP1/R4R1K w - - bm Rac1; id "ECM.109"; +r1b1Q3/6pk/p6p/1pq1n3/4N3/8/PPP3PP/R6K b - - bm Qc6; id "ECM.112"; +r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K - bm Nxh7; id "ECM.115"; +4qbk1/1R5n/p2pr1p1/2pQpNPp/P1P1P3/2P2P2/3B4/5K2 w - - bm Ne7+; id "ECM.117"; +2b2r2/1p2q1k1/r3pppp/4n2P/p3N3/1B4Q1/PPP3P1/3R1R1K w - - bm Rxf6; id "ECM.119"; +2b1rr1k/1p5p/1Ppp2q1/p3bN2/2P1n3/5R2/PBQ3BP/3R2K1 w - - bm Nxd6; id "ECM.123"; +rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - - bm Nxh5; id "ECM.128"; +r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - bm Rxe7; id "ECM.130"; +2rq1rk1/pp2bppp/1npp1n2/3PpN1b/2P5/2N3PP/PP2PPB1/R1BQ1RK1 w - - bm c5; id "ECM.131"; +2n1rbk1/5pp1/7p/qP1pp3/4b1Q1/1B5P/1P1N1PP1/2B1R1K1 w - - bm Rxe4; id "ECM.133"; +4k3/2R2p2/5p1p/8/rb6/1N6/5PPP/5K2 w - - bm Rc4; id "ECM.134"; +2k3r1/pp2rp2/1np5/2Np1p2/P2P3p/1R2P1Pq/2Q2P1P/1R4K1 w - - bm Nxb7; id "ECM.135"; +8/1Qp3pk/7p/5p2/5Pqn/1P1r4/P5PP/2B2RK1 b - - bm c6; id "ECM.137"; +b3r3/q2B2k1/3Q2p1/1p5p/3pP3/5P2/1p4PP/5RK1 b - - bm d3+; id "ECM.142"; +2r3k1/pp2n3/6pQ/4q3/8/2P1p1P1/P5BP/3R2K1 w - - bm Bd5+; id "ECM.144"; +6k1/4ppbp/p5p1/1B1Q4/2P2Pn1/8/qr4PP/2B2RK1 b - - bm Bd4+; id "ECM.145"; +8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - - bm Ba3; id "ECM.146"; +r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - bm g6; id "ECM.147"; +5r2/1b3pk1/pqrpp1p1/4n1Nn/1p2PP1P/8/PPPQB3/1NKR2R1 b - - bm Rfc8; id "ECM.148"; +8/1bq3kp/p5p1/1pb1p3/4P2P/2PQ2P1/1P5B/5N1K b - - bm Qd8; id "ECM.153"; +4r3/Q2bppkp/3p2p1/3Nn3/4P3/6PP/1qr2PB1/R3R1K1 b - - bm Ra8; id "ECM.155"; +1r2k2r/3q2pp/p3pp2/P7/2P1Q3/8/1nB3PP/1R3R1K w k - bm Ba4; id "ECM.160"; +r1bq3k/ppp2Qp1/2n1p2p/6N1/2BPN3/2P1n3/PP4PP/R5K1 w - - bm Nf6; id "ECM.161"; +3R4/1p2kp2/p1b1nN2/6p1/8/6BP/2r1qPPK/Q7 w - - bm Rd7+; id "ECM.162"; +r1b3k1/ppp2r2/6p1/3n3p/6qP/3BQ3/PBP5/2KR3R w - - bm Bd4; id "ECM.180"; +1R3b2/3r3k/2p1bp1p/r1q1pNpQ/2PpP2P/6B1/P4PP1/1R4K1 w - - bm Nxh6; id "ECM.186"; +r1b4r/pp2ppk1/2np1np1/3N3p/2B1P3/q3BP2/P1PQ2PP/1R3RK1 w - - bm Nxe7; id "ECM.187"; +5rk1/Q2nqppp/5n2/2p5/8/1B2PP1P/Pr1B1P2/R3K2R b KQ - bm Ne4; id "ECM.189"; +5rk1/5pbp/b5p1/p1nNN3/1p2n3/1P4PP/P4PB1/2BR2K1 w - - bm Nd7; id "ECM.190"; +2k1r1r1/ppb2p2/6b1/2qP4/2P2P2/4pP1p/P3Q2P/2RBRN1K b - - bm Bd3; id "ECM.191"; +5r1k/pp1n1p1p/1b1qpP2/8/1PrN4/P1N1Q1P1/7P/3R1R1K w - - bm Qh6; id "ECM.192"; +r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - bm Nb6; id "ECM.193"; +r1k3r1/pppnb1p1/4N3/3QP2p/3P3q/4B3/PPP2P2/R3KB2 w Q - bm Ba6; id "ECM.198"; +r1bq1rk1/pppn2bp/3p2p1/3N1p2/8/BP1BRQ1P/P1PP1PP1/4R1K1 w - - bm Nxc7; id "ECM.206"; +2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - - bm Ndxf4; id "ECM.208"; +2r1r1k1/pp3pp1/3p3B/P2P1P2/2nb4/7R/1q3PQP/1B3R1K w - - bm Rb3; id "ECM.209"; +r2qr1n1/p4pk1/1p1p2p1/4p3/4PQ2/1PN2P2/1PP3P1/2KR3R w - - bm Rh7+; id "ECM.210"; +r4rk1/ppp3b1/3p1qp1/3Pp3/2P1Bn2/4BP2/PP1Q4/2K3RR w - - bm Rxg6; id "ECM.211"; +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.213"; +r4n1r/ppq1nk2/1bpRpN2/4PpQ1/8/2B4P/PPP2PP1/2KR4 w - - bm Rd7; id "ECM.215"; +3r2k1/p5pp/bpP1p3/3n1p2/2NQpP1q/P3P3/1B1R1R2/4KBr1 b - - bm Rxf1+; id "ECM.216"; +rnb1kr2/p4pQ1/8/1ppPpP2/2p1P3/N6P/Pq4B1/3R1RK1 w q - bm Nxb5; id "ECM.226"; +5r1k/2p3pp/3pQ3/3P1rN1/pp5q/5PR1/P4PKP/B7 w - - bm Bxg7+; id "ECM.227"; +8/pR3Bk1/3p2p1/5b1p/2P4P/6P1/P4bQK/4q3 b - - bm Bg1+; id "ECM.228"; +rq3r1k/p2n1p2/1pbb1np1/2p2BB1/8/2N2N2/PP3QPP/3R1RK1 w - - bm Rxd6; id "ECM.231"; +3rr1k1/1b5p/p6p/1p3N2/6Pb/P1Q1p3/1PP4P/R5K1 b - - bm Bf2+; id "ECM.237"; +6k1/p4pq1/2n1p1p1/1p1pP1N1/3P1QPP/8/P3K3/8 w - - bm Qc1; id "ECM.238"; +6k1/1pp2p2/p2p2q1/2PPb3/4r3/Pr4PK/2R5/2Q2NR1 b - - bm Rh4+; id "ECM.241"; +4rrk1/3b1ppp/pb6/1pqP4/P1p1PP2/1P2NK2/3QB2P/R2R4 b - - bm Rxe4; id "ECM.244"; +r2qr1k1/1pnb1pp1/p1n1p2p/8/P2P3P/B2B1NP1/6P1/R2Q1RK1 w - - bm Bh7+; id "ECM.247"; +2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - - bm Bxf7+; id "ECM.250"; +1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - - bm Bb7; id "ECM.251"; +2b3k1/p4ppp/7q/2Q5/8/P3r1P1/1r4BP/R3R1K1 b - - bm Rxg2+; id "ECM.259"; +r1b1rbk1/7p/2p1pBp1/p2pP1P1/5P2/1PqB4/P1P1Q3/1K4RR w - - bm Rxh7; id "ECM.260"; +r2q1rkb/pp2p3/2p2pp1/3pPb2/3P3R/2N3P1/PPPQBPK1/3R4 w - - bm Rxh8+; id "ECM.262"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.266"; +r1b1r1k1/1p1n1p2/p1nBp1p1/q2pP1Np/P7/R2B3Q/2P2PPP/5RK1 w - - bm Nxf7; id "ECM.267"; +4n1q1/1k1b4/2p4R/2Pp4/1p1N1rpQ/3B4/PPP2P2/2K5 w - - bm Nxc6; id "ECM.271"; +r3r1k1/pp3pp1/2bb1q2/3p4/4n1Pp/2P1BB1P/PP2NPK1/R1Q4R b - - bm Qxf3+; id "ECM.274"; +rn4k1/pp2p1b1/4b3/q2p2Q1/2B2P2/8/P1P1K1P1/R6R w - - bm Rh8+; id "ECM.277"; +2r2rk1/pp3qpp/8/3P1b2/3Q4/P1N1B3/5PKP/R2R4 b - - bm Rxc3; id "ECM.279"; +r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - bm Nxg7; id "ECM.280"; +4k3/p4ppp/nb1P4/4p3/1P6/P4BP1/3q1r1P/2R2QKR w - - bm Qb5+; id "ECM.287"; +2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - - bm Nxg7; id "ECM.289"; +1r3rk1/6p1/p1pb1qPp/3p4/4nPR1/2N4Q/PPP4P/2K1BR2 b - - bm Rxb2; id "ECM.291"; +5rk1/ppp1q2p/1n1p1np1/3P2N1/1P1R2P1/2Q4P/P3r1B1/5RK1 b - - bm Rxg2+; id "ECM.292"; +6k1/pp2p2p/3p2p1/4b1r1/2Pn1r1q/2B1N3/PP4B1/R3QRK1 b - - bm Qh2+; id "ECM.293"; +r2k3r/2pb1ppp/p1p1q3/2Q5/5B2/2N5/PPP2PPP/3R2K1 w - - bm Bxc7+; id "ECM.295"; +2r1qrk1/pp1b1ppp/4pn2/n1b5/8/2NQ1NP1/PP1BPPBP/R2R2K1 w - - bm b4; id "ECM.297"; +2b1qr1k/7p/p1pR2p1/1pP1p1Q1/4P3/1B6/PP4PP/6K1 w - - bm Re6; id "ECM.298"; +8/2b2k1p/2N2pp1/P2p4/3KnP2/6BP/P5P1/8 w - - bm Kxd5; id "ECM.300"; +3r1rk1/2p1qp1p/pnP3p1/4n3/PP1NpR2/1BQ4P/6P1/5RK1 w - - bm Ne6; id "ECM.307"; +r5rk/1p1bqpnp/3p1b1B/pBnPp2P/4P3/2N2Q2/PP3P2/R3KNR1 b Q - bm Nf5; id "ECM.310"; +r3r1k1/p1q2pp1/2p4p/7n/BPPP2N1/3Q1N2/P3n1P1/R1B4K b - - bm Nhg3+; id "ECM.312"; +r1b2rk1/p3bppp/2q5/8/2p1NR2/PnB1P3/1PB1Q1PP/3R2K1 w - - bm Rd6; id "ECM.315"; +1rb2rk1/p1p2ppp/2q5/3R4/2P1N3/bP4B1/P1Q2P1P/1K5R w - - bm Bd6; id "ECM.318"; +rnb2rk1/pp2bppp/2p5/q7/4NN2/4B1QP/PPP3P1/2KR3R w - - bm Rd5; id "ECM.321"; +3r1rk1/pbqn1pp1/1pp2n1p/2b1p1B1/P1B1P2N/2N4P/1PP1QPP1/3R1RK1 w - - bm Rxd7; id "ECM.327"; +1rr3k1/4ppb1/2q1bnp1/1p2B1Q1/6P1/2p2P2/2P1B2R/2K4R w - - bm Qh6; id "ECM.329"; +2r2r1k/1pq1b1p1/p1b1Qn1p/8/3B4/2NB4/PPP3PP/3R1R1K w - - bm Rxf6; id "ECM.330"; +rkb2qr1/1p5p/pQ1bp3/3p2B1/5n2/3B1N2/PP3PPP/2R2RK1 w - - bm Rxc8+; id "ECM.332"; +8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - - bm Rxd4; id "ECM.335"; +r1bqr1k1/pp3pp1/2p4p/3PN1n1/3P1b2/2NB4/PPQ2PPP/3R1RK1 b - - bm Rxe5; id "ECM.336"; +r3r1k1/pbqn1ppp/1p3n2/1Pb5/2p5/5N1P/PBQ1BPP1/1N1R1RK1 b - - bm Rxe2; id "ECM.337"; +2r2rbk/6bp/5qp1/1N1p1n2/4p3/1p5P/1P3PP1/RBBQ1RK1 b - - bm Ng3; id "ECM.338"; +r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - bm Rxc5; id "ECM.339"; +1k2r2r/1bpQN2p/1p6/P3p2q/4np2/2P2N2/2P2PPP/R3R1K1 b - - bm Rxe7; id "ECM.340"; +r1b2r1R/1p2bpk1/4p1p1/4P1N1/p2p4/5Q2/qPP2PP1/1NKR4 w - - bm Qf6+; id "ECM.342"; +rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - - bm Nxe6; id "ECM.343"; +2r1k2r/1pq1bppp/p3bn2/4N3/2pPN3/2P5/P3QPPP/R1B1R1K1 w k - bm Nxf6+; id "ECM.345"; +1r3k1r/4Rn1p/pb1p1P2/1p1q2P1/5p2/7Q/PPP1B1RP/2K5 w - - bm Rxf7+; id "ECM.346"; +r3r1k1/pp3ppp/1qp5/2bbNQ2/5B2/2P5/PP3PPP/3RR1K1 w - - bm Rxd5; id "ECM.349"; +r2qn1k1/1p1b3p/2pp1b2/6pQ/p1P1P3/P1N3PB/1P6/3R1R1K w - - bm Rxf6; id "ECM.351"; +r4k1r/pp2pp2/3p1b2/q2PnQpp/3N4/1BP3P1/PP3PP1/3RR1K1 w - - bm Rxe5; id "ECM.353"; +r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - - bm Rxd7; id "ECM.355"; +2r2rk1/p3p1bp/3qP1p1/1Q1p4/P4P2/3R4/1P4PP/2B2RK1 b - - bm Rxc1; id "ECM.356"; +r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - bm Rxd4; id "ECM.357"; +1r6/3b1pk1/pr1p1q1p/2pPb1p1/2B1P1P1/2N2PP1/1PQ3K1/RR6 b - - bm Rxb2; id "ECM.358"; +2r3k1/p1r1ppb1/2bp1np1/q5N1/1p1BP2Q/3P4/PP2N1PP/2R2R1K w - - bm Bxf6; id "ECM.360"; +2rbr2k/1pq2ppp/p3bn2/4p1B1/P3P3/2N3Q1/1PP1B1PP/3R1R1K w - - bm Rxd8; id "ECM.366"; +r4rk1/5p2/p1b1pQpq/8/1B2P3/2NR4/PPP3PP/1K6 w - - bm Rd5; id "ECM.367"; +3nr1k1/p6p/2n1pRpB/3pP3/2pP2P1/q1P4P/6BK/5Q2 w - - bm Rxg6+; id "ECM.368"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.370"; +1k2rb1r/pbp1q1pp/2pp4/2PnpP2/Q7/1P3NP1/PB5P/2KR1B1R w - - bm Rxd5; id "ECM.371"; +7k/p1p1r2p/1p1pnr1q/5pp1/2PPPp2/2PB1P1P/P2Q1PRK/7R b - - bm g4; id "ECM.372"; +5qk1/p4p2/1p3Pp1/2p4Q/3rr3/7R/PP6/6RK b - - bm Rh4; id "ECM.373"; +2b4B/1pp2k2/1p6/3P3n/5p1P/1P4p1/P2r2P1/R5KR b - - bm f3; id "ECM.375"; +r3k2N/pppbq1pp/5n2/3Ppn2/2BP4/2P3bP/PP2Q1P1/RNB2K1R b q - bm Bh2; id "ECM.376"; +r2q1r2/p1pbppbk/1p3npp/n2P2B1/7Q/2NB1N2/PPP3PP/4RRK1 w - - bm d6; id "ECM.377"; +r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - - bm Bxe5+; id "ECM.379"; +r4r1k/1bq4p/p4bp1/3pn3/NP6/Q1PBB2P/6P1/3R1RK1 b - - bm d4; id "ECM.387"; +2k1r3/Qp3pb1/2p4p/6q1/8/1P4PN/PBPn1P2/K2R4 b - - bm Qe5; id "ECM.390"; +2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - - bm Rxa6; id "ECM.394"; +r5kr/p3PR1p/1p1p2pq/4n3/8/3B4/P4QPP/4R1K1 w - - bm Rxe5; id "ECM.395"; +2bq1b2/1p3k2/1r1p1p1p/pNpP1PpP/P1P3P1/6B1/1P5Q/2K1R3 w - - bm Re6; id "ECM.396"; +2kr3r/pp3p1p/2b1p3/q3Q3/5P2/2P1B3/P1P3PP/1R3RK1 b - - bm Rhg8; id "ECM.397"; +2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - - bm Rxd3; id "ECM.398"; +2r2nk1/6pp/p1rPqp2/1pP1p3/1P6/2B3R1/1P2Q1PP/5RK1 w - - bm Rxf6; id "ECM.399"; +r2rnbk1/pp3ppp/1q4n1/3p1N2/5P2/1PQB4/PBP3PP/4RR1K w - - bm Nh6+; id "ECM.401"; +r3nrk1/p1pb1qpp/3p1p2/2pP1N2/2P1PR2/P1PB4/4Q1PP/5RK1 w - - bm e5; id "ECM.402"; +6k1/5rb1/6pp/1p2p3/2b5/4B1P1/r4PBP/1RR3K1 w - - bm Rxc4; id "ECM.408"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm e6; id "ECM.410"; +r4rk1/1b4bp/p1npq1P1/R3p3/8/1N2BP2/1PPQ2P1/4KB1R w K - bm Qxd6; id "ECM.411"; +6k1/pbq2pp1/4r2p/8/3prb2/1P1Q3P/PN2BPP1/3RRK2 b - - bm Bd2; id "ECM.412"; +r2q1rk1/p5pp/bn1p1p2/2pP4/1bP1NP2/3B1R2/PBQ3PP/R5K1 w - - bm Ng5; id "ECM.416"; +r3kbnr/1ppb3p/p1q1pp2/3p4/3P4/2N2N2/PPP2PPP/R1BQ1RK1 w kq - bm Ne5; id "ECM.418"; +r1b1qbk1/pp3r1p/2pR1np1/5p2/2P1pP2/1PN1Q1PP/PB2P1B1/5RK1 w - - bm Rxf6; id "ECM.419"; +3rr1k1/1p1qb2p/pP4p1/2p2p2/4RQ2/3P4/1PPB2PP/4R1K1 w - - bm Bc3; id "ECM.420"; +6k1/rnqb3p/5ppQ/2pPp3/p1N1P3/2PB3P/5PP1/1R4K1 w - - bm f4; id "ECM.422"; +7r/pp4k1/3pn1p1/q1pB1b2/2P5/5NR1/1P3PP1/2Q3K1 w - - bm b4; id "ECM.423"; +6k1/p4p1p/3pqp2/2p1r3/2Pnr1N1/P6P/1P1Q1PP1/3R1RK1 b - - bm Ne2+; id "ECM.427"; +r2b4/pb2q1k1/np1p2r1/1N1Pp2Q/PPN1Pp2/8/2R2BPp/2R4K w - - bm Ncxd6; id "ECM.434"; +r7/2qnb1kp/p2p1nP1/1p1Pp1p1/6N1/3BB2Q/PPP4P/5RK1 w - - bm Qxh7+; id "ECM.435"; +n1rqk3/1p2p3/1n1pP1p1/pP1P1p1r/3B3P/1BN3p1/3Q4/R3K2R w KQ - bm Qg5; id "ECM.436"; +3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - - bm Bh4; id "ECM.438"; +r1r3kb/1pqbpp2/p2p1npB/n7/3NP3/1BN2P2/PPPQ2P1/2KR3R w - - bm Bf8; id "ECM.439"; +4rr1k/pbp3bp/3p4/1p5q/3n4/1B1Q2B1/PP1N1N1P/4RRK1 b - - bm Rf3; id "ECM.440"; +4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - - bm Ng6+; id "ECM.442"; +2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - - bm Qb2; id "ECM.443"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.445"; +2k5/1p1b4/2n1p1r1/7q/4RP2/3BQN2/2P2K1P/8 w - - bm f5; id "ECM.447"; +2k3r1/1ppr3p/p1pB2q1/6n1/N3Pp2/8/PPP1Q1PP/3R1RK1 b - - bm f3; id "ECM.448"; +6r1/6rk/3p3p/p2Rp3/R1PqPp1b/2N2Q2/6PP/7K b - - bm Rxg2; id "ECM.450"; +2kr3r/p5b1/Pp2R1p1/2q2p1p/2p2Pn1/2P2BP1/1PQB2P1/5R1K b - - bm h4; id "ECM.456"; +6nk/p4rrp/1p1p1p2/1q1Pp2R/4B1P1/1PP2Q1R/P6P/7K w - - bm g5; id "ECM.458"; +r1b1k2r/6pp/p1p1p3/3np1B1/1b2N3/8/q1PQB1PP/3RK2R w Kkq - bm Qxb4; id "ECM.459"; +3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - - bm Bxh5; id "ECM.460"; +4r1kb/p2r4/1np1p1p1/3nP1Bp/1p3P1R/1B2qP2/PPPN3Q/2K4R w - - bm Rxh5; id "ECM.463"; +2rq2k1/pp1bpp1p/3p1np1/8/3NPPnQ/1BP5/P1P3P1/1K1R3R w - - bm e5; id "ECM.464"; +r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - - bm Rxd5; id "ECM.465"; +2r1kr2/p1qbbp1Q/3pp3/5p2/1p1N1PB1/6P1/PPP4P/K2RR3 w - - bm Bxf5; id "ECM.466"; +r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - - bm Rf6; id "ECM.467"; +2rr2k1/5pn1/1b2q1pp/pP1pP3/2pP1PP1/2R1B2P/2Q3B1/3R3K w - - bm f5; id "ECM.468"; +2Q2bkr/5p2/1rb5/1pN1n1qB/1P1pPN2/6P1/5P2/R1R3K1 w - - bm Nce6; id "ECM.469"; +2r4r/1q1kb1p1/4p2p/3pP3/np6/3RBP2/NPP2Q1P/1K2R3 b - - bm Nc3+; id "ECM.470"; +r7/pp4pk/2n3qp/5p2/3p4/P4QB1/1PP1RPPP/6K1 b - - bm d3; id "ECM.473"; +2r2r1k/1p3p1p/p2p1Pp1/3Pp3/1q2Bn1Q/8/1PP3PP/4RR1K w - - bm Rxf4; id "ECM.474"; +r4rk1/5ppp/p7/4PR2/P1qnp2Q/4B3/1P4PP/5RK1 w - - bm Rh5; id "ECM.475"; +4r3/pb3pk1/6p1/8/6P1/1PNrB2K/P4P1P/2R5 b - - bm Rexe3+; id "ECM.476"; +1r2k2r/1bq2pp1/pn2p2p/1p2P1b1/3N4/2N3Q1/PPP3PP/1K1R1BR1 w k - bm Bxb5+; id "ECM.482"; +2r2r2/p4p1k/1p2pBpn/2p5/6N1/8/P4P2/R3R1K1 w - - bm Kg2; id "ECM.484"; +r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ - bm Bg5; id "ECM.485"; +2kr2r1/2pqbp1p/p1n1b3/1P1pP3/4n3/1BP1BN2/1P4PP/RN1Q1RK1 b - - bm Bh3; id "ECM.488"; +2b3k1/5qp1/p2r1n1p/3p4/3B4/1RP3QP/P2Nr1P1/3R2K1 b - - bm Ne4; id "ECM.489"; +1r2r1k1/p4ppb/q1pbnn1p/4p3/N1P1P3/pPB2NP1/2Q1RPBP/R5K1 b - - bm Nxe4; id "ECM.491"; +r4r2/1pnqb2k/3p1p1p/p1pPpPpP/2P1N1P1/4BP2/PP1Q4/R2R2K1 w - - bm Bxc5; id "ECM.492"; +6kr/1p1r1p1p/p2pnPpQ/3Np2R/2q1P3/5P2/PPP5/2KR4 w - - bm Rxe5; id "ECM.494"; +rq1r2k1/3nbp1p/p2p2p1/1p1Pp1P1/3B1P2/3B3Q/PPP4P/2KR2R1 w - - bm f5; id "ECM.497"; +r4rk1/1bq1bppp/8/p2pPR2/3B4/1NnP3Q/1P4PP/4R1K1 w - - bm Rh5; id "ECM.498"; +r4rk1/1nqb1pbn/6pB/pppPp2p/8/1PP2NNP/P1BQ2P1/R4RK1 w - - bm Nxh5; id "ECM.499"; +r1b2rk1/pp4bp/2p3p1/4q2n/NQPN1p1P/1P5n/P3PPB1/2BRRK2 b - - bm f3; id "ECM.500"; +4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - - bm Nxf3; id "ECM.501"; +r3rk2/pb2bpp1/1n5p/q1pP1B2/1p3B2/5N2/PPQ2PPP/R2R2K1 w - - bm Bc8; id "ECM.503"; +r1bqr2k/ppp2p1p/5b2/3Pn1p1/1PP1Bp2/8/PB2N1PP/R2Q1RK1 w - - bm Nxf4; id "ECM.504"; +1q4k1/p3rppp/3b1n2/8/5P2/4P3/PP1B3P/RNQ3K1 b - - bm Bxf4; id "ECM.505"; +3r1qk1/5p1p/4b1pP/1pRp4/1P1Q4/r5P1/5P2/4RBK1 w - - bm Rxe6; id "ECM.510"; +2bk3r/3r2pp/p2nQ3/q2R2P1/1p6/8/PPP2P1P/1K3B1R b - - bm Qxd5; id "ECM.525"; +1kb3rr/1p2n2q/1Np2p2/1p6/1P1N1P1p/8/2P1RQPP/R6K w - - bm Nxb5; id "ECM.529"; +6k1/5qp1/pN5p/3pRp2/3QnP2/2r4P/r5P1/6RK b - - bm Qh5; id "ECM.539"; +r1b2rk1/ppp2ppp/2n3q1/b2N2N1/2BP4/4p2P/PPP3P1/R2Q1RK1 w - - bm Nxf7; id "ECM.553"; +r6r/pR1nqkpp/2p1p3/3p4/6Q1/2b4P/P1PP1PP1/2B1R1K1 w - - bm Rxe6; id "ECM.555"; +5rk1/p1p1br2/1p1p2qp/4p3/2PPn1pP/3Q2P1/PPN1P1K1/2RR2B1 b - - bm Bxh4; id "ECM.557"; +r1b2rk1/4bnpp/2p5/pp2q3/4N3/PQ2B1P1/1PP3BP/4RRK1 w - - bm Ng5; id "ECM.559"; +2rr2k1/1p3p2/p2n2p1/P2PnNq1/3QP1p1/1RN5/6PP/5RK1 b - - bm Nf3+; id "ECM.560"; +r3k1r1/pb1qpp1p/1pnp1n1B/2p2R2/3PP3/2P3PN/P1P3BP/R2Q3K b q - bm Nxe4; id "ECM.561"; +2r2rk1/pp2bppp/3q1n2/3nNRB1/3P4/1B5Q/PP4PP/3R2K1 w - - bm Nxf7; id "ECM.562"; +1rb2bk1/2n2qp1/p2p3p/R1pP1p2/2B5/1PBQ1N1P/2P2PP1/6K1 w - - bm Rxc5; id "ECM.566"; +2r1r1k1/pp1b1ppp/1q6/3P4/7N/Pn1Q4/1P3PPP/1RB2RK1 b - - bm Nxc1; id "ECM.569"; +5rk1/bp4p1/p2rp2p/8/8/2PN4/PP1R1PPP/3R2K1 b - - bm e5; id "ECM.577"; +2q1rk2/QR3ppp/1pPpb3/1P2p1b1/4P3/6P1/3N1PBP/6K1 w - - bm Bh3; id "ECM.578"; +r3r1k1/p2n4/3p1pp1/qnp3B1/1p2P1P1/1P3P2/PP2N2Q/1K1R1B2 w - - bm Nf4; id "ECM.580"; +r2q1rk1/pb1nbpp1/1pp1pn1p/3pN3/2PPP3/2N1B1P1/PP3PBP/R2Q1RK1 w - - bm Nxc6; id "ECM.587"; +2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - bm h3; id "ECM.589"; +4r1k1/r1q2p1p/p5pB/1pbBpN1n/1n2P3/5Q2/PP3PPP/R1R3K1 w - - bm Rxc5; id "ECM.592"; +r1r3k1/ppnbb1pp/2ppp1q1/1P3p2/P1PPn3/2N2NP1/2Q1PPBP/1RB2RK1 w - - bm Nxe4; id "ECM.593"; +1rb1r1k1/p1p1qppp/2pb4/8/2P3n1/4P1P1/PB2BP1P/R1QN1RK1 b - - bm Nxh2; id "ECM.595"; +rnb2rk1/pp4pp/2pb1n2/3N1p1q/2P5/3N2P1/P1Q1PPBP/R1B2RK1 w - - bm Bf4; id "ECM.597"; +8/8/1p1k4/5ppp/PPK1p3/6P1/5PP1/8 b - - bm f4; id "ECM.598"; +7k/8/1p1ppp1p/1Pp5/2P2P2/8/3P2PP/6K1 w - - bm f5; id "ECM.600"; +8/p5k1/2p2p2/4p1p1/1p2P3/1P4PP/1PP5/5K2 b - - bm g4; id "ECM.601"; +8/8/4b1p1/2Bp3p/5P1P/1pK1Pk2/8/8 b - - bm g5; id "ECM.605"; +r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - bm Bxg6; id "ECM.607"; +6r1/1p3k2/pPp4R/K1P1p1p1/1P2Pp1p/5P1P/6P1/8 w - - bm Rxc6; id "ECM.608"; +1k2b3/4bpp1/p2pp1P1/1p3P2/2q1P3/4B3/PPPQN2r/1K1R4 w - - bm f6; id "ECM.609"; +2kr3r/ppp1qpp1/2p5/2b2b2/2P1pPP1/1P2P1p1/PBQPB3/RN2K1R1 b Q - bm Rh1; id "ECM.610"; +6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - - bm e5; id "ECM.613"; +5r2/pp1RRrk1/4Qq1p/1PP3p1/8/4B3/1b3P1P/6K1 w - - bm Qxf7+; id "ECM.614"; +6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - bm b5; id "ECM.615"; +r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - bm Rxa6; id "ECM.616"; +3r2k1/p6p/b2r2p1/2qPQp2/2P2P2/8/6BP/R4R1K w - - bm Rxa6; id "ECM.617"; +6B1/2p2pp1/2p5/p3K3/1k6/nP4P1/5P1P/8 b - - bm Nc4+; id "ECM.621"; +6k1/p3b1pp/4p3/4Pp2/Pp1r1P1P/1P4P1/2p2R2/5RK1 b - - bm Rc4; id "ECM.623"; +4r2k/3n1Qpp/1pRP1p2/p4P2/1p1P2P1/6rP/P3q1B1/6RK w - - bm Qe6; id "ECM.624"; +3r1r2/pp1P3k/4Rbp1/1BP2p1p/8/7P/P4KP1/3R4 w - - bm Ba6; id "ECM.626"; +3rr1k1/pppRn1pp/4Pp2/1P5q/1QB5/4P3/P4P1P/4K1R1 w - - bm Qxe7; id "ECM.627"; +8/6Bp/6p1/2k1p3/4PPP1/1pb4P/8/2K5 b - - bm b2+; id "ECM.629"; +3qr1k1/p4ppp/1p1P4/2r1nN2/4P2n/P7/1B4P1/3QRRK1 w - - bm d7; id "ECM.632"; +4r3/p4pk1/6p1/P1pB2Pp/2P3b1/2p1N1P1/Qb1r1P2/6K1 b - - bm Rxe3; id "ECM.634"; +2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - bm Nxa7; id "ECM.635"; +r4rk1/ppq3pp/2p1Pn2/4p1Q1/8/2N5/PP4PP/2KR1R2 w - - bm Rxf6; id "ECM.636"; +r3qr1k/1b4pp/p2RQ3/Bp2p3/4p3/6P1/PPP2P1P/3R2K1 b - - bm Qh5; id "ECM.637"; +8/pR4pk/1b6/2p5/N1p5/8/PP1r2PP/6K1 b - - bm Rxb2; id "ECM.640"; +4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - - bm f5; id "ECM.644"; +8/2k5/2p5/2pb2K1/pp4P1/1P1R4/P7/8 b - - bm Bxb3; id "ECM.646"; +4r2k/p2qr1pp/1pp2p2/2p1nP1N/4R3/1P1P2RP/1PP2QP1/7K w - - bm Rxg7; id "ECM.648"; +8/1R2P3/6k1/3B4/2P2P2/1p2r3/1Kb4p/8 w - - bm Be6; id "ECM.650"; +3r1rk1/pp1q1ppp/3pn3/2pN4/5PP1/P5PQ/1PP1B3/1K1R4 w - - bm Bb5; id "ECM.653"; +r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - bm Bxh7+; id "ECM.654"; +1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - - bm Rxh7; id "ECM.663"; +r1b2rk1/2q1bppp/p1n1p3/1p1np1P1/5P2/1NNBBQ2/PPP4P/R4RK1 w - - bm Bxh7+; id "ECM.665"; +5r1k/ppp2qnp/1n1p1N1Q/3Ppb2/2P4P/7B/PP6/2KR2R1 w - - bm Nxh7; id "ECM.666"; +2rqr1k1/1p1bbppp/p3p3/n7/3P2Q1/2PB1N2/P4PPP/R1B1R1K1 w - - bm Bxh7+; id "ECM.673"; +r1b2r1k/ppppq1pp/2n1n3/6N1/2B2P2/4B3/PPP3PP/R2Q1RK1 w - - bm Nxh7; id "ECM.674"; +rn1q1rk1/pb1p1ppp/4p3/2pnP3/1bp5/2N2N2/PP3PPP/RBBQK2R w KQ - bm Bxh7+; id "ECM.675"; +r2r2k1/p1p2p1p/4pPp1/1Pqb4/8/7R/1PB2PPP/3QR1K1 w - - bm Rxh7; id "ECM.676"; +r1b2rk1/1pq2ppp/p1p1p3/2n1P3/2N2P2/3B4/PPP3PP/R2Q1RK1 w - - bm Bxh7+; id "ECM.677"; +rn3rk1/pp1bppbp/1qp3p1/4P1N1/PP1PB3/2P1B3/4Q1PP/R4RK1 w - - bm Nxh7; id "ECM.679"; +3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - - bm Bxh7+; id "ECM.680"; +1r2nrkb/2n2p1p/p2p1Pp1/P1pPp1P1/1pP1P1q1/1P1BB1N1/3Q4/2KR3R w - - bm Rxh7; id "ECM.681"; +2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - - bm Bxh7+; id "ECM.682"; +r2q3r/2pkb1p1/p2p1n2/4p1p1/Pp2P1P1/1QP5/1P1P2PP/RNB2RK1 b - - bm Rxh2; id "ECM.683"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "ECM.684"; +2rq1bk1/1br2p1p/p2p2p1/1p1P4/4Q3/PP3N2/1BP5/1K1R3R w - - bm Rxh7; id "ECM.685"; +r2qn1k1/pb4Pp/1pn5/2p5/2P2p2/P1PB4/5PPP/R2Q1RK1 w - - bm Bxh7+; id "ECM.686"; +r4rk1/pp1n1ppp/3qp3/3nN1P1/b2P4/P2B1Q2/3B1P1P/1R2R1K1 w - - bm Bxh7+; id "ECM.687"; +r2r2k1/ppqbbppp/4pn2/6N1/n1P4P/3B1N2/PP2QPP1/1KBR3R w - - bm Nxh7; id "ECM.688"; +r6r/4ppk1/p2p1bp1/B2p4/3P2p1/QP2P3/P1R1qPPP/2R3K1 b - - bm Rxh2; id "ECM.690"; +4nrk1/r4p1p/p2p2pQ/2pPpNPP/qpn1P3/5P1R/PPP1N3/2K3R1 w - - bm Qxh7+; id "ECM.691"; +r3k2r/1b1n1p2/pq1p1bp1/1p4p1/P3P3/1NN5/1PP3PP/R2QRB1K b kq - bm Rxh2+; id "ECM.692"; +r2qrnk1/4bppp/b1p5/1p1p2P1/p2P1N1P/2NBP3/PPQ2P2/2K3RR w - - bm Bxh7+; id "ECM.693"; +3r1rk1/4qp1p/p1bb2p1/2p5/3P4/1P6/PBQN1PPP/2R2RK1 b - - bm Bxh2+; id "ECM.696"; +r2q1rk1/3n1ppp/8/1pbP2P1/p1N4P/PnBBPQ2/5P2/R3K2R w KQ - bm Bxh7+; id "ECM.697"; +2k3r1/ppq2p1p/n1Pb1p2/8/6r1/4BN1b/PPQ2PPP/R3RBK1 b - - bm Bxh2+; id "ECM.698"; +3qr1k1/1br2ppp/p2b4/8/PpNp4/3P4/1PP2PPP/R1BQ1RK1 b - - bm Bxh2+; id "ECM.699"; +r1b4r/3p1kp1/pp3q1p/4RP2/8/B7/P5PP/4QRK1 w - - bm Qe4; id "ECM.701"; +1r2rnk1/2R2bpp/p2q4/1p1N2R1/5P2/1Q1B3P/PP4P1/7K w - - bm Rxg7+; id "ECM.702"; +2r2r1k/3b1pb1/p3pp1p/q2p1P1B/8/2N2RR1/P1PQ2PP/7K w - - bm Rxg7; id "ECM.706"; +r2qr1k1/1p3ppp/2pb4/2Np4/1P1P2bn/3BP3/2QN1PPP/1RR3K1 b - - bm Nxg2; id "ECM.712"; +r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - - bm Bxg7; id "ECM.713"; +r5k1/pn1q1rpp/2pp4/5R1N/bP6/4BQ2/P4PPP/2R3K1 w - - bm Nxg7; id "ECM.714"; +3r1rk1/5pp1/pq1n1n1p/2pPR3/2B2P2/1PBQ2RP/P5P1/6K1 w - - bm Rxg7+; id "ECM.715"; +rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - - bm Nxg7; id "ECM.716"; +r1qb1r1k/2p3pp/p1n1bp2/1p1Np2Q/P3P3/1BP3R1/1P3PPP/R1B3K1 w - - bm Rxg7; id "ECM.717"; +r4rk1/5ppp/p2pbb2/3B3Q/qp2p3/4B3/PPP2P1P/2KR2R1 w - - bm Rxg7+; id "ECM.718"; +4q1k1/1b3r1p/p4pp1/1p6/2P2n2/1P3N2/1B3PPP/R2Q3K b - - bm Nxg2; id "ECM.719"; +4rrk1/2pn2pb/p1p1qp2/1pb1pN2/P3P1PN/1P1P4/1BP2PK1/R2Q3R w - - bm Nxg7; id "ECM.721"; +r3r1k1/p3bppp/q1b2n2/5Q2/1p1B4/1BNR4/PPP3PP/2K2R2 w - - bm Rg3; id "ECM.722"; +4kbr1/pp1bpp1p/3p1p2/3N4/1PBQP3/q7/P1r2PPP/R4RK1 b - - bm Rxg2+; id "ECM.725"; +rq1r1bk1/1b3pp1/3pn2p/1n2BN1P/1P2P3/3R1NP1/3Q1PB1/2R3K1 w - - bm Bxg7; id "ECM.728"; +3q1r2/1p1b1pk1/pn5p/3pN1pQ/3P3P/2r3B1/P4PP1/3RR1K1 w - - bm Nxf7; id "ECM.730"; +2r3k1/pbq1np1p/1p1b1Bp1/8/6QP/2P2N2/B4PP1/4R1K1 w - - bm Bxf7+; id "ECM.733"; +r3r1k1/1bqn1ppp/1pp2p2/8/3P4/1B4N1/PP3PPP/R2QR1K1 w - - bm Bxf7+; id "ECM.734"; +r3r1k1/pp3ppp/8/1Nbp3q/3NnBn1/2P5/PPQ2PPP/3R1RK1 b - - bm Ngxf2; id "ECM.735"; +r2r2k1/1b2qpp1/1p2n3/p1b1p2p/4P1n1/PP1B2PP/1B1NQP2/R3NRK1 b - - bm Nxf2; id "ECM.736"; +r5k1/1pp3pp/1b1p1r2/pN1P1n2/P1P3nq/6N1/1P1B1PQP/4RRK1 b - - bm Nxf2; id "ECM.738"; +r2qr1k1/pb2bp1p/1pn1p1pB/8/2BP4/P1P2N2/4QPPP/3R1RK1 w - - bm d5; id "ECM.742"; +r2qr1k1/1b1nbp1p/p3pp2/1p2N3/3P4/3B1N2/PP2QPPP/R2R2K1 w - - bm Nxf7; id "ECM.745"; +r3kr2/1b2qp2/pp2p2N/4p2Q/8/2n5/P3B1PP/3R1R1K w q - bm Nxf7; id "ECM.752"; +rqb1k2r/1p1nbp1p/p4pp1/8/1PBN1P2/P1N1P3/7P/2RQ1RK1 w kq - bm Bxf7+; id "ECM.754"; +r2r2k1/4ppbp/5np1/p1q5/QnB1P3/5N2/1P3PPP/R1B2RK1 w - - bm Bxf7+; id "ECM.755"; +1r4k1/p4pp1/bqnrpn1p/2ppN3/2P2P1B/P3P3/1P2B1PP/1Q1R1RK1 w - - bm Bxf6; id "ECM.758"; +2rqr1k1/pp2nppp/3p2b1/6B1/2BNn1Q1/P7/1PP2PPP/2KRR3 w - - bm Bxf7+; id "ECM.761"; +r3r1k1/pbq1ppbp/1pp2np1/4N3/3P4/2P5/PPB1QPPP/R1B1R1K1 w - - bm Nxf7; id "ECM.762"; +r1b2rk1/p6p/2p3Pb/3pp1q1/8/2PB4/PP3PP1/RN1Q1K1R b - - bm Rxf2+; id "ECM.763"; +r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - - bm Nxf7; id "ECM.764"; +r1bqr1k1/1p1nnpb1/p5pp/2P1p1B1/B3N3/5N2/P4PPP/2RQR1K1 w - - bm Nd6; id "ECM.765"; +r1b1r1k1/pp2qpbp/2p3p1/2P5/3NnB2/7P/PPQ1PPB1/2RR2K1 b - - bm Nxf2; id "ECM.766"; +rn2r1k1/pp3p1p/3P2p1/2p1bbB1/2B5/2N5/Pq4PP/R2Q1RK1 w - - bm Bxf7+; id "ECM.767"; +1bq2k2/1b1n1pp1/pp5p/2pBpN2/P3P2B/3Q1P2/1PP3PP/4K3 w - - bm Bxf7; id "ECM.769"; +rnb2rk1/pp3pbp/2p3pB/2q5/4P3/1BN5/PPP3PP/R2Q1R1K w - - bm Rxf7; id "ECM.770"; +3qr1k1/1br1bp1p/p3p1pB/1p1nN3/3PB3/7Q/PP3PPP/3RR1K1 w - - bm Nxf7; id "ECM.771"; +rr1q2k1/1p2bpp1/2p1p2p/P1Pn4/2NP4/3Q1RP1/5PKP/2B1R3 w - - bm Bxh6; id "ECM.773"; +r2r2k1/pb1nbpp1/1qp1pn1p/1p2N3/3P1B2/P1N1P3/BPQ2PPP/2R2RK1 w - - bm Bxh6; id "ECM.774"; +r1b1r3/pp2Npbk/3pp2p/q5p1/2QNPP2/6P1/PPP3P1/2KR3R w - - bm Ndf5; id "ECM.776"; +1rbqnr2/5p1k/p1np3p/1p1Np3/4P2P/1Q2B3/PPP1BP2/2KR3R w - - bm Bxh6; id "ECM.779"; +r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - - bm Bxh6; id "ECM.780"; +3r1r1k/p5p1/n1p2p1p/1qp2b2/N1R4R/1PB1P1P1/P2P3P/3Q2K1 w - - bm Rxh6+; id "ECM.781"; +6rk/3b1n1p/1p1q3b/1PpNp3/2P1Pp2/2Q2NrP/5RP1/2R2B1K b - - bm Bxh3; id "ECM.783"; +2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - - bm Bxh6; id "ECM.789"; +2br2k1/4qppp/p5r1/2pBp3/2P1Pn2/4Q2P/RP3PPK/1N4R1 b - - bm Bxh3; id "ECM.791"; +r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - - bm Bxh6; id "ECM.792"; +6k1/p4ppp/1pn1b1rr/8/PBpPp2q/2P1P1NP/5PP1/RR3QK1 b - - bm Bxh3; id "ECM.795"; +r1b2rk1/1p3pp1/p5Pp/2bpPp1Q/3N4/1Pq1B1R1/2P4P/3R2K1 w - - bm Bxh6; id "ECM.796"; +2b1rk2/r6p/1pP1p1p1/p2pNnR1/5Q2/P1B4q/1PP2P1P/1K4R1 w - - bm Nxg6+; id "ECM.799"; +r6r/ppnqpk2/3pbpp1/5N2/1PP1P3/5RR1/P2QB1PP/6K1 w - - bm Nh6+; id "ECM.801"; +2b2r1k/2p3pp/2Nb4/pP5q/2PP4/P4pP1/5P1P/R1BQ2K1 b - - bm Bxg3; id "ECM.803"; +r1bq2k1/pp3r1p/2n1p1p1/3pP3/6Q1/2PB2P1/P4PK1/R1B4R w - - bm Bxg6; id "ECM.804"; +3q1rk1/2r4p/n1p1n1pQ/p2pP3/Np1P2R1/5PN1/PP3KP1/2R5 w - - bm Rxg6+; id "ECM.805"; +2rqr1k1/pb2bp1p/1pn1pnpB/4N3/3P4/P1N3R1/1P3PPP/RB1Q2K1 w - - bm Rxg6+; id "ECM.810"; +2r5/pp2qr1k/1nb3pp/2ppBp2/2P4P/3B2R1/P3QPP1/1R4K1 w - - bm Rxg6; id "ECM.811"; +3rr3/3q1p1k/p2P2pp/1bp1b3/5N2/6QP/P1B3P1/3RR1K1 w - - bm Bxg6+; id "ECM.812"; +1n1b1rk1/r4p1p/p1p2qpQ/P3Np2/2BP4/2P1R3/5PPP/R5K1 w - - bm Rb1; id "ECM.814"; +6rk/pb3p1p/3bpPq1/3P4/1p1B3r/1B4P1/PPRQ1R1P/6K1 b - - bm Bxg3; id "ECM.815"; +3rr1k1/pb2bp1p/3qp1pB/1p2N3/3P2Q1/2P1R3/P4PPP/4R1K1 w - - bm Nxg6; id "ECM.816"; +1Q4R1/r2qbp2/3p1kp1/3Bp2p/8/3PP1P1/5PKP/8 w - - bm Rxg6+; id "ECM.818"; +k2r3r/ppq2p1p/n1pb1Pp1/4p3/2Q5/1R2B1P1/PPP2PBP/R5K1 w - - bm Rxb7; id "ECM.821"; +1rb2rk1/p1p1qppp/2p2n2/3P4/1b3P2/2NB4/PPPBQ1PP/2KR3R b - - bm Ba3; id "ECM.822"; +4rrk1/p5pp/1p4q1/3p2n1/2pP2P1/P1P1PP2/3B2K1/1R2QR2 b - - bm Nxf3; id "ECM.824"; +1q1r3k/3P1pp1/ppBR1n1p/4Q2P/P4P2/8/5PK1/8 w - - bm Rxf6; id "ECM.825"; +1rbq2k1/b1p3pp/p1Pp4/3Ppr2/8/5N2/PPQ2PPP/R1B2RK1 b - - bm Rxf3; id "ECM.826"; +1r1q1r1k/2p3pp/1p1bQ3/p7/1PP5/Pn3B2/1B3PPP/R4RK1 b - - bm Rxf3; id "ECM.827"; +r1bq1rk1/1p2bppp/p3p3/n3P3/4N3/1P1P1N2/PB4PP/R3QR1K w - - bm Nf6+; id "ECM.829"; +1n2r3/p1pq1kp1/1b1pNpp1/3P4/5RP1/3Q3P/1B3P2/6K1 w - - bm Bxf6; id "ECM.830"; +r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - - bm Nf3+; id "ECM.831"; +3r1b2/p4bkp/1p1P1p2/r3p1p1/2q1N3/2N2P2/1P1R2PP/2QR3K w - - bm Nxf6; id "ECM.832"; +rqbn1rk1/1p3ppp/p3p3/8/4NP2/8/PPP1BQPP/1K1R3R w - - bm Nf6+; id "ECM.833"; +r1b1kb1r/1p4pp/p2ppn2/8/2qNP3/2N1B3/PPP3PP/R2Q1RK1 w kq - bm Rxf6; id "ECM.834"; +2nr2k1/1pq1bppp/p1p5/2p1P1PQ/2P1NP2/1PNR4/P6P/6K1 w - - bm Nf6+; id "ECM.836"; +6nk/pn2qr1r/1pbp1p1p/2p1pPpN/P1P1P1PP/2PP3R/7Q/2BBK2R w K - bm Nxf6; id "ECM.837"; +r1b1kb1r/1p1n1ppp/p2ppn2/6BB/2qNP3/2N5/PPP2PPP/R2Q1RK1 w kq - bm Nxe6; id "ECM.841"; +r1b1k1nr/3n1p1p/1qpBp1p1/pp2b3/4PN2/PBN2Q2/1PP2PPP/2KR3R w kq - bm Nxe6; id "ECM.842"; +2r2rk1/1b3ppp/pq2p3/1pbn2N1/3B3P/1B4P1/P1P1QP2/2KRR3 w - - bm Qh5; id "ECM.843"; +r3k2r/pp1n1pb1/1qn1p1p1/2p3Pp/4R2P/2NP2QB/PPPB1P2/2K1R3 w kq - bm Rxe6+; id "ECM.844"; +r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq - bm Nxe6; id "ECM.845"; +3qr1k1/rp3pbp/2p3p1/3p1b2/N1nP4/P2NP3/1PQ2PPP/1BRR2K1 b - - bm Rxe3; id "ECM.846"; +1r3rk1/5pbp/p2Pp1p1/q1n3P1/2p2P1P/2N1Q2R/PP6/1BKR4 b - - bm Rxb2; id "ECM.852"; +rr4k1/5p1p/n2p1npQ/q1pP4/6P1/2N2P1N/PP1R3P/2K4R b - - bm Rxb2; id "ECM.853"; +1k2bb1r/1p3p1p/p2qpP1p/3pN3/3P1Q2/2RB2P1/PP3P1P/6K1 w - - bm Qc1; id "ECM.854"; +5rk1/5rp1/p2qb3/R2Np2Q/3bP2B/7P/P5PK/1R6 b - - bm Rf1; id "ECM.856"; +3r1rk1/p3q1pp/2Rb4/3P4/8/1P2Qp2/PB3PPP/3R2K1 b - - bm Bxh2+; id "ECM.858"; +1r4k1/1q3pb1/r1b3p1/pp1Qp3/P3P3/1B2BP2/1PP3P1/1K1R3R w - - bm Qd8+; id "ECM.860"; +3r4/kb6/pp6/4R1pr/PPpq4/2N3Q1/2P3PP/3R3K b - - bm Rf8; id "ECM.862"; +8/2q1np1k/6p1/1PPn3p/8/P2Q3P/6P1/2R4K b - - bm Nf5; id "ECM.864"; +7R/1p1r4/2b2p2/2Pp1qk1/3P1bp1/3N4/2Q2PB1/6K1 w - - bm Rg8+; id "ECM.866"; +r6r/1pn1b1k1/2p1pq2/2Pp3p/p2P1Pp1/P2BP1P1/1P2QB2/3R2KR w - - bm Rxh5; id "ECM.867"; +1r4k1/pp4pp/2n1b3/1Rq1p3/2P2r2/P1B2P2/2Q1B1PP/3R1K2 b - - bm Rxf3+; id "ECM.868"; +2rq1rk1/5ppp/2b1pb2/np6/6N1/2NBB3/PP3PPP/R2Q2K1 w - - bm Bb6; id "ECM.872"; +5r2/p2p2kp/3PnNp1/1qr1Pp2/2p5/P1R5/6PP/2Q1R1K1 w - - bm Qh6+; id "ECM.873"; +2kr1br1/ppp2p1p/2n1p1q1/2Nn4/3P4/1Q2PB2/PP1B1P1P/2R1K2R b K - bm Qg1+; id "ECM.875"; +2kr3r/1Rp1bpp1/p6q/Q3P3/2P5/3p1NP1/P3P2P/1R4K1 b - - bm Qe3+; id "ECM.877"; +6k1/1R4pp/2p5/8/P1rNp3/6Pb/4PK2/8 w - - bm a5; id "ECM.878"; +r2r2k1/pp3ppp/2q5/2p5/2P1P1n1/P4P1b/1BQ1BP1P/R3R2K b - - bm Rd2; id "ECM.879"; diff --git a/tests/ecm.epd b/tests/ecm.epd new file mode 100644 index 0000000..0753b6f --- /dev/null +++ b/tests/ecm.epd @@ -0,0 +1,879 @@ +2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - bm f7+; id "ECM.001"; +7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - bm Bxf3+; id "ECM.002"; +4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - bm Qb5; id "ECM.003"; +2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - bm Rcxc5; id "ECM.004"; +6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - bm Bxf2+; id "ECM.005"; +3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - bm Bxf6+; id "ECM.006"; +3rr1k1/pb3pp1/1p1q1b1p/1P2NQ2/3P4/P1NB4/3K1P1P/2R3R1 w - - bm Rxg7+; id "ECM.007"; +r1b1r1k1/p1p3pp/2p2n2/2bp4/5P2/3BBQPq/PPPK3P/R4N1R b - - bm Bg4; id "ECM.008"; +3r4/1b2k3/1pq1pp2/p3n1pr/2P5/5PPN/PP1N1QP1/R2R2K1 b - - bm Rxh3; id "ECM.009"; +2r4k/pB4bp/6p1/6q1/1P1n4/2N5/P4PPP/2R1Q1K1 b - - bm Qxc1; id "ECM.010"; +1r5r/3b1pk1/3p1np1/p1qPp3/p1N1PbP1/2P2PN1/1PB1Q1K1/R3R3 b - - bm Nxg4; id "ECM.011"; +5rk1/7p/p1N5/3pNp2/2bPnqpQ/P7/1P3PPP/4R1K1 w - - bm Ne7+; id "ECM.012"; +rnb2rk1/pp2np1p/2p2q1b/8/2BPPN2/2P2Q2/PP4PP/R1B2RK1 w - - bm Nd5; id "ECM.013"; +2k4r/1pp2ppp/p1p1bn2/4N3/1q1rP3/2N1Q3/PPP2PPP/R4RK1 w - - bm Nd5; id "ECM.014"; +r3kb1r/pp2pppp/3q4/3Pn3/6b1/2N1BN2/PP3PPP/R2QKB1R w KQkq - bm Nxe5; id "ECM.015"; +2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - - bm Rxc5; id "ECM.016"; +r1b1k3/5p1p/p1p5/3np3/1b2N3/4B3/PPP1BPrP/2KR3R w q - bm Rxd5; id "ECM.017"; +r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - - bm Nxd6; id "ECM.018"; +b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - - bm Rxf6+; id "ECM.019"; +1rr1nbk1/5ppp/3p4/1q1PpN2/np2P3/5Q1P/P1BB1PP1/2R1R1K1 w - - bm Bxa4; id "ECM.020"; +r7/5kp1/2p1p2p/1p1n3P/2rP4/2P3R1/PK2RPP1/2B5 b - - bm Rxc3; id "ECM.021"; +r1r3k1/p3qpp1/b1P4p/3p4/3Nn3/4P3/P1Q2PPP/1BR1K2R b K - bm Qb4+; id "ECM.022"; +rn3rk1/4bppp/1q2p3/p2pP3/8/1PN2B1P/P4PP1/2RQ1RK1 w - - bm Bxd5; id "ECM.023"; +6rk/1p1br2p/pqp5/3pNP2/3Pp3/P5PR/5PKR/Q7 w - - bm Rxh7+; id "ECM.024"; +2b3k1/5p1p/7b/p2B3p/3P4/P2Q1N1P/1q3PP1/6K1 w - - bm Bxf7+; id "ECM.025"; +r1b5/4k3/p7/3p1n2/3Bp3/2P2r1P/PPBK1P2/4R2R w - - bm Bc5+; id "ECM.026"; +r4rk1/1b3Npp/p7/1p3Q2/3P4/1B2q3/P5PP/3n1R1K b - - bm Bxg2+; id "ECM.027"; +r1b2rk1/2q2ppp/2pbp3/p7/4Nn2/3B4/PPPBQ1PP/R4R1K w - - bm Rxf4; id "ECM.028"; +3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - - bm Rgxg6; id "ECM.029"; +r2q1rk1/p3b1pp/2p5/1pn5/1n1Bp1b1/1P6/PQ1PPP2/2RNKBNR b K - bm Bxe2; id "ECM.030"; +3r2k1/p2r1p1p/1p2p1p1/q4n2/3P4/PQ1R3P/1P2NPP1/3R2K1 b - - bm Nxd4; id "ECM.031"; +2bnr1k1/2q2ppp/p7/2p1b3/2N1B3/R7/1P2QPPP/2B3K1 w - - bm Nxe5; id "ECM.032"; +r1b2r1k/3nN2p/p2Q1p2/8/4PP2/1R6/q1PK2PP/4R3 w - - bm Qd5; id "ECM.033"; +1nk1r1r1/pp2n1pp/4p3/q2pPp1N/b1pP1P2/B1P2R2/2P1B1PP/R2Q2K1 w - - bm Nf6; id "ECM.034"; +2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - bm Rxc8; id "ECM.035"; +br1r2k1/1q4p1/p2ppb1p/2p2p2/2P1n3/Pn2P2P/QPR2PPB/2NRNBK1 b - - bm Nxc1; id "ECM.036"; +2k4r/ppp1n1p1/2n2qb1/2N5/Q1P3p1/P2r3P/1P3PB1/R1B2RK1 w - - bm Qb5; id "ECM.037"; +8/6bk/1B1R4/6p1/2bNP3/4KP2/1r6/8 b - - bm Be5; id "ECM.038"; +r1b1rnk1/1p3pb1/1qpp2p1/2n5/2PNP2p/1PN3PP/3R1PBK/BR1Q4 b - - bm Rxa1; id "ECM.039"; +r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - bm Nxc6; id "ECM.040"; +5rk1/1b3ppp/p3p3/1p1q2N1/4n3/6P1/PP2PPBP/2Q2RK1 b - - bm Nxg3; id "ECM.041"; +2kr3r/pppq2p1/1bn1R3/6N1/1P6/1QN1B1p1/P4PP1/R5K1 b - - bm gxf2+; id "ECM.042"; +2rr4/5pk1/p1q3p1/3bpP1p/1p4nR/1N4Q1/PPP3PP/3NR2K b - - bm Bxg2+; id "ECM.043"; +r4rk1/pp4pp/2nqb3/3p4/8/2NB4/PP1Q1PPP/4RRK1 w - - bm Bxh7+; id "ECM.044"; +3rk1r1/3b1p1p/p2BpQ2/8/2q5/2P5/PP3PPP/3R2K1 b - - bm Rxg2+; id "ECM.045"; +3r1rk1/4pp1p/p1Q1b1p1/3N4/3b4/5B2/Pq3PPP/R4RK1 b - - bm Bxd5; id "ECM.046"; +5bk1/1bqn1r1p/p3Q1p1/4p3/1PN1Pp2/P1N4P/5PP1/R1BR2K1 w - - bm Qxf7+; id "ECM.047"; +3rkb1r/1p3p2/p1n1p3/q5pp/2PpP3/1P4P1/P1Q1BPKP/R2N3R b k - bm d3; id "ECM.048"; +5rk1/1r1qbnnp/R2p2p1/1p1Pp3/1Pp1P1N1/2P1B1NP/5QP1/5R1K w - - bm Qxf7+; id "ECM.049"; +2kr1b1R/1b3pp1/p2pp3/1pq3P1/2nQPP2/P1N5/1PP1BB2/1K6 w - - bm Rxf8; id "ECM.050"; +1k1r1b1r/p1p1q3/2p1p3/4Ppp1/4nP2/P2BQ3/1PP3PB/2KR3R b - - bm Rxh2; id "ECM.051"; +r3nb1Q/p1q2kr1/2p3p1/2ppnpP1/1P3N2/4P3/PB1P4/1R2KB1R w K - bm Qxf8+; id "ECM.052"; +r1bq1rk1/pp3pbp/2pp1np1/2n3B1/2PNP3/2N2P2/PP1QB1PP/R4RK1 b - - bm Nfxe4; id "ECM.053"; +1rb1qn2/1p2nrbk/p2p2p1/P2Pp1Pp/NP2P2P/2RNB3/2QKB3/1R6 w - - bm Ba7; id "ECM.054"; +5r2/1b2k2p/3bp3/5PP1/Bn1Q3P/1N6/1Pr5/1K3R2 b - - bm Rxb2+; id "ECM.055"; +r1b1r1k1/pp4bp/5np1/2qPB3/8/6NP/PPP1Q1B1/R4R1K w - - bm Rxf6; id "ECM.056"; +r1b2r1k/1pq3bp/8/3Qp2n/1P1n1pp1/2NP2P1/3BPPBP/1R2NRK1 b - - bm Qxc3; id "ECM.057"; +4qk2/pp3pp1/1nbr3p/2p5/5N2/2P1Q3/PPB2PPP/2K1R3 w - - bm Ng6+; id "ECM.058"; +3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - bm Rd5; id "ECM.059"; +r4rk1/pp1b2pp/3bpq2/3p1p2/2PPn3/PP1B4/1BQN1PPP/R4RK1 b - - bm Bxh2+; id "ECM.060"; +r4rk1/1b3ppp/p2q1n2/1p2N3/3P4/1B6/P1Q2PPP/2R1R1K1 w - - bm Nxf7; id "ECM.061"; +2rq1r2/pp3pnk/2n1b1pp/3pQ3/3P1N2/P1N5/1P3PPP/1BR2RK1 w - - bm Bxg6+; id "ECM.062"; +4nk2/r1r1bppp/pN2p3/2np4/8/BPN3PP/P3PPK1/2RR4 w - - bm Ncxd5; id "ECM.063"; +r4r1k/2pqn1b1/p1bp2pp/1p2pn2/4N3/2PP1PPQ/PPB4P/R1B1RNK1 b - - bm Nd4; id "ECM.064"; +r1bQ1nk1/bp3ppp/p7/3B4/1P6/P3P1P1/2P4P/q1B2RK1 b - - bm Bxe3+; id "ECM.065"; +3r1rk1/1b2bppp/2q1pn2/pp4Q1/3B1P2/PBN5/1PP3PP/R2R3K b - - bm Rxd4; id "ECM.066"; +2nq2k1/2r3pp/p1p1rp2/PpQ1N3/1P1PR3/8/5PPP/2R3K1 w - - bm Nf7; id "ECM.067"; +r1b2rk1/1p2bppp/p3pn2/4B3/1qBR4/2N5/P3QPPP/R5K1 w - - bm Bd3; id "ECM.068"; +3r4/p2nrpkp/2B1p3/2P2pP1/3R3Q/q7/6PP/6RK w - - bm g6; id "ECM.069"; +5r1k/p6p/1p1p1qp1/2pQpr2/8/2PP2P1/PP2RPKP/5R2 b - - bm e4; id "ECM.070"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Qh6; id "ECM.071"; +2r2rk1/5pbp/p5p1/3P2q1/1QbN4/5P2/P4BPP/2RR2K1 b - - bm Bf1; id "ECM.072"; +r1bqnrk1/pp2ppb1/1np3pp/4P1N1/5P2/2NBB3/PPP3PP/R2Q1RK1 w - - bm Nh7; id "ECM.073"; +3nk3/3q1p2/1B3pr1/4p3/bP2P2p/r2B4/2Q2RPP/3R2K1 w - - bm Bb5; id "ECM.074"; +3rnr1k/pp3ppp/4b3/2p1qNP1/P2pPR2/1P1P2Q1/2P3BP/5RK1 w - - bm Nh6; id "ECM.075"; +r1b2kr1/1p1p1pNp/p1n1p1p1/5P2/3QP3/2N5/PqP1B1PP/R4RK1 w - - bm fxg6; id "ECM.076"; +5rk1/3r1p1p/3b2pQ/8/4q3/4B2P/3R1PP1/4R1K1 w - - bm Rxd6; id "ECM.077"; +4rrk1/1bp2ppp/p1q2b1B/1pn2B2/4N1Q1/2P4P/PP3PP1/3RR1K1 w - - bm Nxc5; id "ECM.078"; +2rnrbnk/3q1ppp/p1p5/3p1P2/1p1PPN2/4BQ1R/PP1N2PP/3R2K1 w - - bm Ng6+; id "ECM.079"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "ECM.080"; +Q7/p1r1ppk1/1qP4p/2Rb2p1/8/3N2P1/4PP1P/6K1 b - - bm Qb1+; id "ECM.081"; +1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - - bm exf6; id "ECM.082"; +r2qr1k1/pp3pbp/3p1np1/2pP1bB1/2P1N3/3Q1PN1/PP4PP/R4RK1 b - - bm Nxe4; id "ECM.083"; +4r1k1/1b4pp/p7/1prP3q/2P1B3/5P2/P3Q2P/3RR2K w - - bm Bg6; id "ECM.084"; +r1br2k1/ppb1qpp1/2P4p/2n1p3/4B3/P1N2N2/1P3PPP/2RQ1RK1 w - - bm Nd5; id "ECM.085"; +2r3k1/1nqbrp2/p5pp/1p1Pp1N1/8/1P5P/P1B2PP1/2RQR1K1 w - - bm Nxf7; id "ECM.086"; +2r1rbk1/1b3ppp/pp6/2q1pNP1/Pn1RP3/2N5/1PP2QBP/5R1K w - - bm Nh6+; id "ECM.087"; +r1b1rk2/3n1pbQ/2qp2p1/p2N2P1/2Bp3N/4P3/PP3PP1/2KR3R w - - bm Nxg6+; id "ECM.088"; +r1r2qkb/4pp1p/pBbp3P/3Nn1P1/4Q3/1B6/PPP5/1K1R2R1 w - - bm g6; id "ECM.089"; +r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - - bm Re7; id "ECM.090"; +rn1q1r2/4bpk1/p3p3/1pN1N1np/2pP4/4PpBb/PPQ4P/1B1RK1R1 w - - bm Nc6; id "ECM.091"; +5rk1/6pp/8/2Q4q/N2pP3/4b1Pb/4PP1K/1R3R2 b - - bm Bxf1+; id "ECM.092"; +2r4k/pp2Q1pp/5r2/P2P4/3Pb1P1/4Ppq1/1P1R3N/3R3K b - - bm Qe1+; id "ECM.093"; +1r1rb1k1/2p3pp/p2q1p2/3PpP1Q/Pp1bP2N/1B5R/1P4PP/2B4K w - - bm Qxh7+; id "ECM.094"; +r1b4k/p2n1Bpp/1p1Q1n2/5p2/3P4/P3BqP1/1P3P1P/R4RK1 b - - bm Bb7; id "ECM.095"; +rn1r2k1/p4ppp/2p3b1/3PQ3/1B2Np1q/1B3P2/P1P3PP/4R1K1 w - - bm Nf6+ Qe8+; id "ECM.096"; +4r2k/5R1p/pp1Bq1pN/2p1P3/1n1b3Q/3P4/1P4KP/8 w - - bm Rxh7+; id "ECM.097"; +r2nk1r1/pb3q1p/4p3/3p2pQ/8/BP6/P4PPP/2R1R1K1 w q - bm Rc7; id "ECM.098"; +6k1/1pqb1p2/5bpB/r2n4/4N1P1/1P3P2/1P1Q4/1K5R w - - bm Qxd5; id "ECM.099"; +rr4k1/2p1ppb1/3pbnpp/q1pP4/4P3/1PNNBP1P/P1KR2P1/2Q4R b - - bm Qxc3+; id "ECM.100"; +1r3rk1/3Q2pp/p3p3/6B1/3np3/6R1/PqP1B2P/3K2R1 w - - bm Qxg7+; id "ECM.101"; +2r5/p4Q2/k1bBp3/4P3/p1nq4/5B2/2Pr2P1/1R1RK3 w - - bm Qb7+; id "ECM.102"; +5rk1/p1pb2pp/2p5/3p3q/2P3n1/1Q4BN/PP1Np1KP/R3R3 b - - bm Qxh3+; id "ECM.103"; +2r1nk2/4qpbQ/4b3/1p2RpP1/4P3/p7/PBP5/1K5R w - - bm Qxg7+; id "ECM.104"; +2kr4/1bpr3p/4R3/1pQ5/8/6B1/3q2PP/2R4K w - - bm Qxc7+; id "ECM.105"; +r4rk1/1pbb2pp/p1p1p2q/2Pp4/1P1Pn3/P3B2P/2Q1BPP1/R4RNK b - - bm Qxe3; id "ECM.106"; +r1k4r/ppp1b3/5Npp/4pb1Q/8/1B2B3/PqP2PPP/2RR2K1 w - - bm Qxf5+; id "ECM.107"; +6r1/p4rkp/3RQ1n1/1pp1p1B1/2p1P3/2P3R1/P4qPK/8 w - - bm Qxe5+; id "ECM.108"; +2kr1r2/1pp3pp/1n2p1b1/pN2B3/P1q5/1Q1p3P/5PP1/R4R1K w - - bm Rac1; id "ECM.109"; +2kr1bnr/1ppq4/p3bp2/6pp/4p3/2N2NBP/PP3PP1/2RQ1RK1 w - - bm Na4; id "ECM.110"; +r2q2rk/p3bp1p/4b1p1/3pP2R/1p1B4/3BQ3/PPP3PP/5R1K w - - bm Rxf7; id "ECM.111"; +r1b1Q3/6pk/p6p/1pq1n3/4N3/8/PPP3PP/R6K b - - bm Qc6; id "ECM.112"; +q6r/pp3pkp/5np1/4Q3/4P3/6N1/P4PPP/5RK1 w - - bm Nh5+; id "ECM.113"; +r1b1rk2/pp3ppQ/1np5/4q3/2B4N/4P3/PP3PP1/2R2K1R w - - bm Qg8+; id "ECM.114"; +r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K - bm Nxh7; id "ECM.115"; +r3r1k1/p2N1pp1/1pn1p3/q1n5/2PQ4/P3B3/4PPKP/R5R1 w - - bm Nf6+; id "ECM.116"; +4qbk1/1R5n/p2pr1p1/2pQpNPp/P1P1P3/2P2P2/3B4/5K2 w - - bm Ne7+; id "ECM.117"; +3qr1k1/1p1bppbp/p2p2p1/2rPn3/P2N4/4BP2/1PPQ2PP/R2R1BK1 w - - bm Ne6; id "ECM.118"; +2b2r2/1p2q1k1/r3pppp/4n2P/p3N3/1B4Q1/PPP3P1/3R1R1K w - - bm Rxf6; id "ECM.119"; +8/R5p1/6k1/pr2p1b1/4K3/7P/5P2/6R1 w - - bm h4; id "ECM.120"; +5rk1/1b1r1p2/p1q1pQp1/1p2P2p/8/1BP1NR2/PP1n2PP/5R1K w - - bm Bxe6; id "ECM.121"; +6k1/p1p2r2/1p1p1P1Q/3P4/2P5/5qr1/PP4RP/6RK w - - bm Qh3; id "ECM.122"; +2b1rr1k/1p5p/1Ppp2q1/p3bN2/2P1n3/5R2/PBQ3BP/3R2K1 w - - bm Nxd6; id "ECM.123"; +3b2rk/7p/p7/2pbqNrn/Pp1p1R2/1P1Q2P1/1BPN1R1P/6K1 w - - bm Rxd4; id "ECM.124"; +1rbr2k1/1pq1bp1p/p1pNn1p1/2n1p3/2B1P2P/1NQ1BP2/PP4P1/1K1R3R w - - bm Nxf7; id "ECM.125"; +r4rk1/1pp1b1pp/p1q5/3pPp2/3Pn3/P3N3/1P3PPP/R1BQR1K1 w - - bm Qb3; id "ECM.126"; +rbbq1rk1/p3nppp/1p2p3/8/1B1pN3/P2B4/1P3PPP/2RQ1RK1 w - - bm Nf6+; id "ECM.127"; +rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - - bm Nxh5; id "ECM.128"; +5r1k/1p2qp1p/p4R1Q/P1p5/2Prp3/7P/1P4P1/5R1K w - - bm Re6; id "ECM.129"; +r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - bm Rxe7; id "ECM.130"; +2rq1rk1/pp2bppp/1npp1n2/3PpN1b/2P5/2N3PP/PP2PPB1/R1BQ1RK1 w - - bm c5; id "ECM.131"; +rnbq1rk1/pp2b1pp/5n2/2pPp3/2P1N3/3B1N2/PP4PP/R1BQK2R w KQ - bm d6; id "ECM.132"; +2n1rbk1/5pp1/7p/qP1pp3/4b1Q1/1B5P/1P1N1PP1/2B1R1K1 w - - bm Rxe4; id "ECM.133"; +4k3/2R2p2/5p1p/8/rb6/1N6/5PPP/5K2 w - - bm Rc4; id "ECM.134"; +2k3r1/pp2rp2/1np5/2Np1p2/P2P3p/1R2P1Pq/2Q2P1P/1R4K1 w - - bm Nxb7; id "ECM.135"; +2r1k3/p3nrR1/1p1p4/2p1p1p1/2P1B3/2PP1P2/P5K1/7R w - - bm Rh8+; id "ECM.136"; +8/1Qp3pk/7p/5p2/5Pqn/1P1r4/P5PP/2B2RK1 b - - bm c6; id "ECM.137"; +2rr1bk1/5p1p/pPN2np1/3Bp3/2Q1n3/1P2B1Pq/P3PP2/R2R2K1 b - - bm Rxd5; id "ECM.138"; +3r2k1/1p4pp/p1q1p3/3p1B2/bP1B2P1/P4Q2/5PKP/2b2R2 w - - bm Rxc1; id "ECM.139"; +rnb1r1k1/pp5p/2pp2p1/4b3/2P1P2q/1NN1BPp1/PP1QB1P1/3RR1K1 b - - bm Bf4; id "ECM.140"; +5n1r/1p2kp2/rB1Nb3/4p1Pp/4p2P/1PP5/8/1K1R1R2 w - - bm Rxf7+; id "ECM.141"; +b3r3/q2B2k1/3Q2p1/1p5p/3pP3/5P2/1p4PP/5RK1 b - - bm d3+; id "ECM.142"; +4r1k1/3R1ppp/p2p4/5PP1/2q2P2/2n2B2/P1P3QP/1r3R1K w - - bm Rxb1; id "ECM.143"; +2r3k1/pp2n3/6pQ/4q3/8/2P1p1P1/P5BP/3R2K1 w - - bm Bd5+; id "ECM.144"; +6k1/4ppbp/p5p1/1B1Q4/2P2Pn1/8/qr4PP/2B2RK1 b - - bm Bd4+; id "ECM.145"; +8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - - bm Ba3; id "ECM.146"; +r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - bm g6; id "ECM.147"; +5r2/1b3pk1/pqrpp1p1/4n1Nn/1p2PP1P/8/PPPQB3/1NKR2R1 b - - bm Rfc8; id "ECM.148"; +1r2k2r/p5bp/4p1p1/q2pn3/1p2N1P1/6QP/PPP5/1KBR3R w k - bm Bh6; id "ECM.149"; +rn1q1rk1/pp3p1p/2p5/3p4/5Q1P/2NP3R/PPP3P1/4RK2 w - - bm Rg3+; id "ECM.150"; +7r/kppQP1pp/p7/2qp1R2/4n3/1P2b2P/P1P3PK/R7 b - - bm Re8; id "ECM.151"; +r1b1kb1Q/qp2pp2/p3n1p1/2nN2Pp/2B4P/7N/PPP5/2KRR3 w q - bm Nc7+; id "ECM.152"; +8/1bq3kp/p5p1/1pb1p3/4P2P/2PQ2P1/1P5B/5N1K b - - bm Qd8; id "ECM.153"; +2r1q1r1/6bk/p2pN1pp/1p1N4/4P3/3R3Q/PnP4P/1K4R1 w - - bm Nf6+; id "ECM.154"; +4r3/Q2bppkp/3p2p1/3Nn3/4P3/6PP/1qr2PB1/R3R1K1 b - - bm Ra8; id "ECM.155"; +6k1/p1q2pp1/2n2b2/3B2Pp/2P2P2/5N1P/Pr1Q2K1/4R3 w - - bm Re8+; id "ECM.156"; +r1r3k1/p4n2/3p4/5NpR/8/2q2P2/P1PQ4/2K4R w - - bm Rh8+; id "ECM.157"; +8/p5Q1/2ppq2p/3n1ppk/3B4/2P2P1P/P5P1/6K1 w - - bm g4+; id "ECM.158"; +r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - - bm Nd6; id "ECM.159"; +1r2k2r/3q2pp/p3pp2/P7/2P1Q3/8/1nB3PP/1R3R1K w k - bm Ba4; id "ECM.160"; +r1bq3k/ppp2Qp1/2n1p2p/6N1/2BPN3/2P1n3/PP4PP/R5K1 w - - bm Nf6; id "ECM.161"; +3R4/1p2kp2/p1b1nN2/6p1/8/6BP/2r1qPPK/Q7 w - - bm Rd7+; id "ECM.162"; +6k1/p5p1/1p1p1nN1/1B1P4/4PK2/8/2r3b1/7R w - - bm Rh8+; id "ECM.163"; +8/5P2/4K1kP/4R3/8/8/8/5r2 w - - bm Rg5+; id "ECM.164"; +3r1rk1/p1p1qp1p/2p1b1p1/8/P2PRP2/2P1NQ2/6PP/R5K1 w - - bm f5; id "ECM.165"; +6k1/pr3ppp/1p3qn1/5NQ1/2p5/8/P4PPP/4R1K1 w - - bm Re8+; id "ECM.166"; +Q7/1pq2kpp/4bp2/3r4/2B5/P3P3/1r3PPP/2R1K2R b K - bm Rd1+; id "ECM.167"; +4r1k1/p4ppp/4q2r/1Q6/4p3/4P1P1/P4P1P/2RR2K1 w - - bm Rd6; id "ECM.168"; +8/5p1k/4p1p1/3p2K1/3P1Q1P/P4P2/7q/8 b - - bm f6+; id "ECM.169"; +r4r2/6k1/3p4/2pPp2p/4Pqp1/3P1P2/1R2Q1KP/5R2 b - - bm Ra1; id "ECM.170"; +4r1k1/1np1r1pp/1ppp1q2/6N1/1P3P2/4RQP1/7P/4R1K1 w - - bm Qh5; id "ECM.171"; +r4rk1/pp3p1p/3pq1p1/2nNp3/3R1P2/7Q/PP4PP/5RK1 w - - bm f5; id "ECM.172"; +3qn2k/1p3Bp1/rbn4p/2p5/p1P2p2/P2b2PP/1BQNRP2/1R4K1 w - - bm Qxd3; id "ECM.173"; +3r1rk1/1pp4p/1q3bp1/p3p3/P2n1P2/2BB3P/1PP2QP1/R4RK1 b - - bm Bh4; id "ECM.174"; +4rrk1/2p2ppp/p2b4/1p1P4/3P2nq/2P4P/PPQ1RPP1/RNB3K1 b - - bm Qxf2+; id "ECM.175"; +1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - bm Nxf7; id "ECM.176"; +r3kb1r/2q2p2/3p4/ppp1n1B1/P6P/1B3pQ1/1PP3b1/2KRR3 w kq - bm Bd5; id "ECM.177"; +r1b2rk1/1p4pp/p1n3q1/4ppN1/7Q/2P1B3/P1P2PPP/R2R2K1 w - - bm Rd6; id "ECM.178"; +1rb2r2/1pR1N2p/p2R2pk/5p2/4pP2/1P1nP3/P4P1P/5BK1 w - - bm Rf6; id "ECM.179"; +r1b3k1/ppp2r2/6p1/3n3p/6qP/3BQ3/PBP5/2KR3R w - - bm Bd4; id "ECM.180"; +3r2k1/p2q1r1p/1p1N2p1/1PpP4/3b1Bn1/1Q4Pb/1P2RP1P/R5KB b - - bm Qxd6; id "ECM.181"; +4r1k1/1pbb3p/2pp2q1/p1n5/2P2R2/1PN1n1P1/PB2Q1B1/5RK1 w - - bm Qxe3; id "ECM.182"; +3r2k1/p2r1p1p/1pR1p1qP/3P1pP1/3R4/1P2Q3/P4K2/8 w - - bm dxe6; id "ECM.183"; +3r3k/p1Q3bp/2p3p1/8/2P1BRn1/1P4Pb/P1N1q2P/6BK b - - bm Nf2+; id "ECM.184"; +r4k2/p1pr1ppp/2q5/3PR2P/3Q4/8/6P1/5RK1 w - - bm Re7; id "ECM.185"; +1R3b2/3r3k/2p1bp1p/r1q1pNpQ/2PpP2P/6B1/P4PP1/1R4K1 w - - bm Nxh6; id "ECM.186"; +r1b4r/pp2ppk1/2np1np1/3N3p/2B1P3/q3BP2/P1PQ2PP/1R3RK1 w - - bm Nxe7; id "ECM.187"; +r3k2r/pb1n1pbp/4p1p1/q1n1P3/Bp1N1N2/4B3/PP3PPP/R2Q1RK1 w kq - bm Ndxe6; id "ECM.188"; +5rk1/Q2nqppp/5n2/2p5/8/1B2PP1P/Pr1B1P2/R3K2R b KQ - bm Ne4; id "ECM.189"; +5rk1/5pbp/b5p1/p1nNN3/1p2n3/1P4PP/P4PB1/2BR2K1 w - - bm Nd7; id "ECM.190"; +2k1r1r1/ppb2p2/6b1/2qP4/2P2P2/4pP1p/P3Q2P/2RBRN1K b - - bm Bd3; id "ECM.191"; +5r1k/pp1n1p1p/1b1qpP2/8/1PrN4/P1N1Q1P1/7P/3R1R1K w - - bm Qh6; id "ECM.192"; +r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - bm Nb6; id "ECM.193"; +1r3rk1/p4pbp/q1p2pp1/3p1b2/1n1P1P1B/PB3N2/1PPQR1PP/2KR4 b - - bm Bxc2; id "ECM.194"; +1rbr2k1/4qp2/p1n2bpp/1pp1p1N1/4P3/2P1BQ1P/PPB2PP1/3RR1K1 w - - bm Bxc5; id "ECM.195"; +2r2rk1/1p1q1ppp/1p3n2/3p1N2/4n3/1N3Q2/PPP2PPP/R2R2K1 w - - bm Rxd5; id "ECM.196"; +rn3rk1/pp2ppbp/6p1/2R3N1/2B3b1/q3B3/P1P1Q1PP/5RK1 w - - bm Rxf7; id "ECM.197"; +r1k3r1/pppnb1p1/4N3/3QP2p/3P3q/4B3/PPP2P2/R3KB2 w Q - bm Ba6; id "ECM.198"; +r1nqr2k/1p1b1Q1p/p5p1/P1pPb3/5B2/2N5/BP4PP/R4RK1 w - - bm Qf8+; id "ECM.199"; +8/k3r1b1/Pp2rpp1/1qpQ4/4nB2/2P2NP1/7P/R4RK1 w - - bm Bb8+; id "ECM.200"; +1k1r4/ppq2p2/8/2pPb1r1/2P1Q1B1/6P1/PP3PK1/R4R2 b - - bm f5; id "ECM.201"; +r1b2nk1/2qn1p1p/1ppR2p1/8/1PP1NP2/4r1PP/1Q2N1B1/3R2K1 w - - bm b5; id "ECM.202"; +8/5pk1/3q2p1/8/7P/5Q1K/6B1/6b1 b - - bm Qh2+; id "ECM.203"; +6r1/ppp4k/3p2rp/3Pb3/PPP1Np1q/5P1b/3QRRBP/6K1 b - - bm Bd4; id "ECM.204"; +4br1k/pR4bp/2r1B1pN/4npB1/3p4/P7/5PPP/4R1K1 w - - bm Rxg7; id "ECM.205"; +r1bq1rk1/pppn2bp/3p2p1/3N1p2/8/BP1BRQ1P/P1PP1PP1/4R1K1 w - - bm Nxc7; id "ECM.206"; +r6r/1p2kp2/3p1b2/pPpPpQ1P/1nP1P2P/6R1/1P2K3/1B6 w - - bm Rg6; id "ECM.207"; +2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - - bm Ndxf4; id "ECM.208"; +2r1r1k1/pp3pp1/3p3B/P2P1P2/2nb4/7R/1q3PQP/1B3R1K w - - bm Rb3; id "ECM.209"; +r2qr1n1/p4pk1/1p1p2p1/4p3/4PQ2/1PN2P2/1PP3P1/2KR3R w - - bm Rh7+; id "ECM.210"; +r4rk1/ppp3b1/3p1qp1/3Pp3/2P1Bn2/4BP2/PP1Q4/2K3RR w - - bm Rxg6; id "ECM.211"; +1k1r2r1/pp3p1p/B2q1n2/8/3Pb1p1/2Q5/PR3PPP/2B1R1K1 w - - bm Bf4; id "ECM.212"; +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.213"; +1q3rk1/r5b1/pNp1bn1p/2Pp1n2/1P2p3/1N2P2P/PBQKB3/3R3R b - - bm Nxe3; id "ECM.214"; +r4n1r/ppq1nk2/1bpRpN2/4PpQ1/8/2B4P/PPP2PP1/2KR4 w - - bm Rd7; id "ECM.215"; +3r2k1/p5pp/bpP1p3/3n1p2/2NQpP1q/P3P3/1B1R1R2/4KBr1 b - - bm Rxf1+; id "ECM.216"; +1rq1r2k/5Rbp/p2p1p1B/2p1p3/2P1P2Q/1P6/P5PP/3b3K w - - bm Bxg7+; id "ECM.217"; +5Q2/5p1p/3p2p1/4p1k1/4P1P1/3R1P1K/r6P/4q3 w - - bm f4+; id "ECM.218"; +2b2r1k/ppq3pp/3b3r/n3NpN1/Q2PpP1B/2P1R3/PP5P/4R1K1 w - - bm Ngf7+; id "ECM.219"; +2r1r1k1/1R4bp/p5p1/2pqn3/8/2B5/1PQ1B1PP/5RK1 w - - bm Bc4; id "ECM.220"; +7k/pp1q2pp/3Nr1n1/3B2Q1/2pP4/B3P1Pb/P6P/6K1 w - - bm Qd8+; id "ECM.221"; +r5k1/5p1p/bq1p2p1/r2Pp3/1p2N1P1/1P3P2/1KPQ3P/3R3R b - - bm Ra2+; id "ECM.222"; +5Bk1/pr2pp1p/2b3pQ/2p1q3/8/2P4P/PP4P1/1B1Rb1K1 w - - bm Bg7; id "ECM.223"; +5nk1/2b1q1p1/2p5/3pP1pQ/1r1P2P1/3B1R2/5PP1/6K1 w - - bm Rxf8+; id "ECM.224"; +1k1r3r/1pp2p2/p2b4/4n1p1/N3q1P1/1B2B3/PP3RP1/4RQK1 b - - bm Rh1+; id "ECM.225"; +rnb1kr2/p4pQ1/8/1ppPpP2/2p1P3/N6P/Pq4B1/3R1RK1 w q - bm Nxb5; id "ECM.226"; +5r1k/2p3pp/3pQ3/3P1rN1/pp5q/5PR1/P4PKP/B7 w - - bm Bxg7+; id "ECM.227"; +8/pR3Bk1/3p2p1/5b1p/2P4P/6P1/P4bQK/4q3 b - - bm Bg1+; id "ECM.228"; +r1b1Rnk1/6pp/p4q2/1pp2P2/3r4/2NB4/PP1Q2PP/4R1K1 w - - bm Nd5; id "ECM.229"; +1Q6/pb3pk1/1p3qp1/1N3p1p/2Pr3P/3BR1PK/r7/6R1 b - - bm Rh2+; id "ECM.230"; +rq3r1k/p2n1p2/1pbb1np1/2p2BB1/8/2N2N2/PP3QPP/3R1RK1 w - - bm Rxd6; id "ECM.231"; +2kr3r/Qpp1n1p1/2b2pp1/4b3/8/6N1/PPP2P2/R1B2RK1 b - - bm Rh1+; id "ECM.232"; +8/2p2Q1p/1rp5/p3q1kp/P7/2P2RP1/5PK1/8 w - - bm Rf5+; id "ECM.233"; +1r2b3/1p2q1bk/p1p1p1p1/P1PpP2r/1P1KpPQP/4P2N/6R1/4B2R b - - bm Rxe5; id "ECM.234"; +6k1/3b1p1p/6p1/2BPR3/8/4Q2P/1q3rPK/8 w - - bm Re8+; id "ECM.235"; +2R5/4ppkp/6p1/p2P4/4P2P/p3B1P1/qbR2PK1/8 w - - bm Rg8+; id "ECM.236"; +3rr1k1/1b5p/p6p/1p3N2/6Pb/P1Q1p3/1PP4P/R5K1 b - - bm Bf2+; id "ECM.237"; +6k1/p4pq1/2n1p1p1/1p1pP1N1/3P1QPP/8/P3K3/8 w - - bm Qc1; id "ECM.238"; +3r1rk1/1pq1nppp/p7/2pB3Q/P4P2/1P2P3/6PP/2RR2K1 w - - bm Bf3 Rxc5; id "ECM.239"; +8/p1r2q1k/1p1p3p/1Pp1nP2/P1P5/3R2PP/1Q4BK/8 w - - bm Rxd6; id "ECM.240"; +6k1/1pp2p2/p2p2q1/2PPb3/4r3/Pr4PK/2R5/2Q2NR1 b - - bm Rh4+; id "ECM.241"; +3r4/1pQ4R/p1b2kp1/P6p/2q5/7P/2P3P1/6K1 b - - bm Rd1+; id "ECM.242"; +6rr/1b3k1p/pbqppPn1/1p5Q/4PN2/P6R/1PP3BP/2B2R1K w - - bm Qxh7+; id "ECM.243"; +4rrk1/3b1ppp/pb6/1pqP4/P1p1PP2/1P2NK2/3QB2P/R2R4 b - - bm Rxe4; id "ECM.244"; +2r1r1k1/1p4bp/p2p1qp1/1n1P4/2P1B2P/1N1Q4/PP2R3/1K5R b - - bm Rxc4; id "ECM.245"; +6rr/ppqb1pkp/2pb1pn1/3p3Q/3P1P1N/3B1RN1/PPP3PP/5RK1 w - - bm Qh6+; id "ECM.246"; +r2qr1k1/1pnb1pp1/p1n1p2p/8/P2P3P/B2B1NP1/6P1/R2Q1RK1 w - - bm Bh7+; id "ECM.247"; +r2q1rk1/1b1nbpp1/p1p1p2p/1pPpN3/3P1N2/P2BP3/1PQ2PPP/R4RK1 w - - bm Bh7+; id "ECM.248"; +2r2rk1/pb4pp/1p2p3/4Npq1/3P1n2/5P2/PP1R2PP/RB2Q1K1 b - - bm Rc1; id "ECM.249"; +2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - - bm Bxf7+; id "ECM.250"; +1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - - bm Bb7; id "ECM.251"; +r5k1/pp2ppb1/4qn2/r3B1p1/3P4/3QNP1R/PP2K1P1/7R w - - bm Bxf6; id "ECM.252"; +1R2br1k/5r1p/p2p1P2/6RQ/3p1P2/4p2B/q6P/5N1K w - - bm Rxe8; id "ECM.253"; +kr1r4/7p/2bqp1p1/p7/1Pp1PP1P/K1B1nNPB/PP5R/RN2Q3 b - - bm Qxb4+; id "ECM.254"; +5r1r/1pkb4/5pB1/2P5/p3R2P/Pq6/1PQ2Pn1/K2R4 w - - bm Rxd7+; id "ECM.255"; +kn5r/p2r2p1/1pqBp1np/1Q1pPp2/R2P4/1N6/2P2PPP/R5K1 w - - bm Rxa7+; id "ECM.256"; +4Rnk1/2p2pp1/3r3p/p2P4/P5Q1/1B5P/5PK1/q7 w - - bm Rxf8+; id "ECM.257"; +4r3/2k1p2q/pp1nR1p1/2pP1pP1/2P2P2/1P6/P1K3B1/4Q3 w - - bm Rxd6; id "ECM.258"; +2b3k1/p4ppp/7q/2Q5/8/P3r1P1/1r4BP/R3R1K1 b - - bm Rxg2+; id "ECM.259"; +r1b1rbk1/7p/2p1pBp1/p2pP1P1/5P2/1PqB4/P1P1Q3/1K4RR w - - bm Rxh7; id "ECM.260"; +2rq4/5rbk/3p1n1p/p2Pp2P/1p2b3/4BNR1/PP1Q1P2/3BK1R1 w - - bm Bxh6; id "ECM.261"; +r2q1rkb/pp2p3/2p2pp1/3pPb2/3P3R/2N3P1/PPPQBPK1/3R4 w - - bm Rxh8+; id "ECM.262"; +3r2k1/p4rPp/1b1q3Q/n1p1pP2/1p6/3B1NR1/P4P1P/6RK w - - bm Qxh7+; id "ECM.263"; +r1bqrnk1/p4p2/1p5p/3pB1p1/P2P2n1/1P1B2N1/2Q3PP/R4RK1 w - - bm Bh7+; id "ECM.264"; +r2rn1k1/1bqn1ppp/p7/2bpP1P1/1p1N1Q2/1P3B2/PBP1NR1P/3R2K1 w - - bm Qxf7+; id "ECM.265"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.266"; +r1b1r1k1/1p1n1p2/p1nBp1p1/q2pP1Np/P7/R2B3Q/2P2PPP/5RK1 w - - bm Nxf7; id "ECM.267"; +r1b1k2r/ppp3pp/1qp5/2b1Pp2/3Qn3/5N2/PPPBNPPP/2KR3R w kq - bm Qd8+; id "ECM.268"; +1k6/1p4p1/P1p5/5Q2/2q2r2/P7/8/4R2K w - - bm Re8+; id "ECM.269"; +6k1/1p3p2/4r1p1/1PPrbq1p/2QN4/P2R1P1P/R4KP1/8 b - - bm Bg3+; id "ECM.270"; +4n1q1/1k1b4/2p4R/2Pp4/1p1N1rpQ/3B4/PPP2P2/2K5 w - - bm Nxc6; id "ECM.271"; +r2qk2r/1pp2ppp/p3pnn1/6N1/1B1P2P1/1Q2P2P/PP3PK1/R6R b kq - bm Nh4+; id "ECM.272"; +2kr2r1/R2p3p/2n2p2/1R3P2/2P1p3/4BQ2/1Pq4P/4K3 w - - bm Ra8+; id "ECM.273"; +r3r1k1/pp3pp1/2bb1q2/3p4/4n1Pp/2P1BB1P/PP2NPK1/R1Q4R b - - bm Qxf3+; id "ECM.274"; +r1br4/ppq2pk1/3bpN2/8/2P5/3n2B1/PP2QPPP/R4K1R w - - bm Qg4+; id "ECM.275"; +6kb/B1p2p2/5r2/1r1p2pR/6q1/3P2P1/P1P2PP1/2KR3Q b - - bm Rb1+; id "ECM.276"; +rn4k1/pp2p1b1/4b3/q2p2Q1/2B2P2/8/P1P1K1P1/R6R w - - bm Rh8+; id "ECM.277"; +3k2r1/pp1b3Q/1b2pP1p/3pN2q/5B2/7B/PP2nP1K/2R5 b - - bm Rg2+; id "ECM.278"; +2r2rk1/pp3qpp/8/3P1b2/3Q4/P1N1B3/5PKP/R2R4 b - - bm Rxc3; id "ECM.279"; +r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - bm Nxg7; id "ECM.280"; +4k2r/1bqnbppp/p3p3/1p2P1N1/2r2BB1/8/PPP3PP/R2Q1R1K w k - bm Nxf7; id "ECM.281"; +5r1k/1pqb3p/2n5/p1pB4/2Pp1r1P/1P5P/R2N2K1/3Q1R2 b - - bm Bxh3+; id "ECM.282"; +r4r2/pp2qk2/4pnp1/3pQ3/2p2P2/3B4/PPP2P2/2KR3R w - - bm Bxg6+; id "ECM.283"; +3bq3/p1n2rk1/1pp1p1p1/3pPnPp/1P1P1N1P/2PN3K/P2BQR2/8 w - - bm Nxg6; id "ECM.284"; +b6r/2q2k2/4pPp1/1p1n2Bp/2pPB1PP/2P2Q2/8/4R1K1 w - - bm Bxg6+; id "ECM.285"; +r1b2r2/3pNpkp/3pn1p1/2pN3P/2PnP3/q3QP2/4BKP1/1R5R w - - bm Qh6+; id "ECM.286"; +4k3/p4ppp/nb1P4/4p3/1P6/P4BP1/3q1r1P/2R2QKR w - - bm Qb5+; id "ECM.287"; +r2q1rk1/pp2pp2/3pb3/3Qb2R/4P1p1/1BN1Bn2/PPP2P2/2K4R w - - bm Rh8+; id "ECM.288"; +2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - - bm Nxg7; id "ECM.289"; +1rbk2nr/p1pp2b1/7p/2qP1pp1/2Bn4/2NKBP2/PP2N1PP/R2Q3R b - - bm Qxc4+; id "ECM.290"; +1r3rk1/6p1/p1pb1qPp/3p4/4nPR1/2N4Q/PPP4P/2K1BR2 b - - bm Rxb2; id "ECM.291"; +5rk1/ppp1q2p/1n1p1np1/3P2N1/1P1R2P1/2Q4P/P3r1B1/5RK1 b - - bm Rxg2+; id "ECM.292"; +6k1/pp2p2p/3p2p1/4b1r1/2Pn1r1q/2B1N3/PP4B1/R3QRK1 b - - bm Qh2+; id "ECM.293"; +r2qnr2/pp3kbQ/2npb1p1/2pN1pP1/4P3/8/PPP1BP2/R1B1K1NR w KQ - bm Qxg6+; id "ECM.294"; +r2k3r/2pb1ppp/p1p1q3/2Q5/5B2/2N5/PPP2PPP/3R2K1 w - - bm Bxc7+; id "ECM.295"; +2r2r2/2N2pkp/2Q5/1N2p1b1/1p6/3P1qPb/PPR2P1P/4R1K1 b - - bm e4; id "ECM.296"; +2r1qrk1/pp1b1ppp/4pn2/n1b5/8/2NQ1NP1/PP1BPPBP/R2R2K1 w - - bm b4; id "ECM.297"; +2b1qr1k/7p/p1pR2p1/1pP1p1Q1/4P3/1B6/PP4PP/6K1 w - - bm Re6; id "ECM.298"; +1r2k2r/2p2p1b/q1Pppb1N/p2p2P1/Q2P4/P3B3/1P5P/2KRR3 b k - bm Rb4; id "ECM.299"; +8/2b2k1p/2N2pp1/P2p4/3KnP2/6BP/P5P1/8 w - - bm Kxd5; id "ECM.300"; +4b1r1/1p3ppk/3r3p/p1p1qP1B/3pPN2/3P3R/nPPQ3P/6RK w - - bm Ne6; id "ECM.301"; +4b2k/7p/3q3P/1p1pRpr1/1P1B4/2P2Q2/7K/8 w - - bm Qg3; id "ECM.302"; +2kr2r1/pbp4p/1p4p1/1NqpNp2/4nQ2/8/PPPR1PPP/2K1R3 w - - bm Nc6; id "ECM.303"; +1rr3k1/1p1bqpbp/1R1p2p1/pN1P4/P3P1n1/1Q6/3NB1PP/2B1R1K1 b - - bm Rc3; id "ECM.304"; +r1br4/1p3k2/p2q1p2/3N1Pp1/3Q4/8/PP4P1/4RR1K w - - bm Re6; id "ECM.305"; +r3kbnr/p4ppp/2p1p3/8/Q1B3b1/2N1B3/PP3PqP/R3K2R w KQkq - bm Bd5; id "ECM.306"; +3r1rk1/2p1qp1p/pnP3p1/4n3/PP1NpR2/1BQ4P/6P1/5RK1 w - - bm Ne6; id "ECM.307"; +r1bq1k2/5pb1/p2p1n2/2pPrP2/2p4B/3B2R1/PP1Q2PP/R5K1 w - - bm Qg5; id "ECM.308"; +2bq1rk1/p4pbp/p2p2p1/3P4/2p1QP2/2Pr3P/PP1N2P1/R1B2RK1 b - - bm Bd4+; id "ECM.309"; +r5rk/1p1bqpnp/3p1b1B/pBnPp2P/4P3/2N2Q2/PP3P2/R3KNR1 b Q - bm Nf5; id "ECM.310"; +r3rk2/p2q1b1p/1pnP1Qp1/5pN1/2p2P2/P1P5/7P/4RRK1 w - - bm Re7; id "ECM.311"; +r3r1k1/p1q2pp1/2p4p/7n/BPPP2N1/3Q1N2/P3n1P1/R1B4K b - - bm Nhg3+; id "ECM.312"; +r2qrbk1/1p4pb/2n2p1p/pNpn4/2N5/PP1PPQPB/1B5P/2R2RK1 w - - bm Nbd6; id "ECM.313"; +5r1k/1p1b1p1p/p2ppb2/5P1B/1q6/1Pr3R1/2PQ2PP/5R1K w - - bm Qh6; id "ECM.314"; +r1b2rk1/p3bppp/2q5/8/2p1NR2/PnB1P3/1PB1Q1PP/3R2K1 w - - bm Rd6; id "ECM.315"; +r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - - bm R1b4; id "ECM.316"; +4r3/pp1b3k/2p2qpp/2Pp4/1P6/PBbP1N1P/2R3P1/3Q3K b - - bm Re1+; id "ECM.317"; +1rb2rk1/p1p2ppp/2q5/3R4/2P1N3/bP4B1/P1Q2P1P/1K5R w - - bm Bd6; id "ECM.318"; +8/5k1p/5PpB/3PR3/2r4P/1p3K2/2b5/8 b - - bm Re4; id "ECM.319"; +4r2k/3b3p/p2p4/2pP1p2/q1B2Q1P/2PK1P2/Pr1R4/7R b - - bm Re4; id "ECM.320"; +rnb2rk1/pp2bppp/2p5/q7/4NN2/4B1QP/PPP3P1/2KR3R w - - bm Rd5; id "ECM.321"; +2R5/2R4p/5p1k/6n1/8/1P2QPPq/r7/6K1 w - - bm Rxh7+; id "ECM.322"; +r1b1r1kb/p1qn1pnp/2p1p1p1/4P1N1/2p1NPP1/4B3/PPPQ3P/3RK2R w K - bm Qxd7; id "ECM.323"; +5k1r/ppqnnp2/3b2p1/2pB2Qp/3p3N/1P1P2P1/P1P2P2/2B1R1K1 w - - bm Rxe7; id "ECM.324"; +5rk1/5p1p/8/3pNp2/RPrqn3/1Q5P/1P3PP1/4R1K1 w - - bm Rxe4; id "ECM.325"; +2rr2k1/4qppp/bn6/p1bB4/4N3/6P1/PB2PP1P/2RQ1RK1 w - - bm Rxc5; id "ECM.326"; +3r1rk1/pbqn1pp1/1pp2n1p/2b1p1B1/P1B1P2N/2N4P/1PP1QPP1/3R1RK1 w - - bm Rxd7; id "ECM.327"; +5rk1/r2nqpp1/p3p3/1p2P3/4N1pP/8/PPP3Q1/1K1R3R w - - bm Rxd7; id "ECM.328"; +1rr3k1/4ppb1/2q1bnp1/1p2B1Q1/6P1/2p2P2/2P1B2R/2K4R w - - bm Qh6; id "ECM.329"; +2r2r1k/1pq1b1p1/p1b1Qn1p/8/3B4/2NB4/PPP3PP/3R1R1K w - - bm Rxf6; id "ECM.330"; +3rqb2/1pR3pk/p3n1pp/3p4/3B4/PP6/1P4PP/4RQK1 w - - bm Rxe6; id "ECM.331"; +rkb2qr1/1p5p/pQ1bp3/3p2B1/5n2/3B1N2/PP3PPP/2R2RK1 w - - bm Rxc8+; id "ECM.332"; +2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - - bm Rxe4; id "ECM.333"; +r3r1k1/1p3pPp/p1p5/3bb2N/7q/1P1Q4/2PB2PP/4RRK1 w - - bm Rxe5; id "ECM.334"; +8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - - bm Rxd4; id "ECM.335"; +r1bqr1k1/pp3pp1/2p4p/3PN1n1/3P1b2/2NB4/PPQ2PPP/3R1RK1 b - - bm Rxe5; id "ECM.336"; +r3r1k1/pbqn1ppp/1p3n2/1Pb5/2p5/5N1P/PBQ1BPP1/1N1R1RK1 b - - bm Rxe2; id "ECM.337"; +2r2rbk/6bp/5qp1/1N1p1n2/4p3/1p5P/1P3PP1/RBBQ1RK1 b - - bm Ng3; id "ECM.338"; +r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - bm Rxc5; id "ECM.339"; +1k2r2r/1bpQN2p/1p6/P3p2q/4np2/2P2N2/2P2PPP/R3R1K1 b - - bm Rxe7; id "ECM.340"; +r1k2n1r/2pb4/1p1p1qpp/p2P1p2/3N1P1P/2Q3P1/PPP1R3/2K1RB2 w - - bm Re8+; id "ECM.341"; +r1b2r1R/1p2bpk1/4p1p1/4P1N1/p2p4/5Q2/qPP2PP1/1NKR4 w - - bm Qf6+; id "ECM.342"; +rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - - bm Nxe6; id "ECM.343"; +4q1r1/5kpp/2p1nb2/2PpQp2/r4P2/1N3P2/1BP1R2P/6RK w - - bm Rxg7+; id "ECM.344"; +2r1k2r/1pq1bppp/p3bn2/4N3/2pPN3/2P5/P3QPPP/R1B1R1K1 w k - bm Nxf6+; id "ECM.345"; +1r3k1r/4Rn1p/pb1p1P2/1p1q2P1/5p2/7Q/PPP1B1RP/2K5 w - - bm Rxf7+; id "ECM.346"; +4rrk1/ppn3pp/2pb1n1q/3p4/1P1P4/P3BNP1/2P1BPKP/R2Q1R2 b - - bm Rxe3; id "ECM.347"; +2b1r2k/2Q4p/4q3/1pp5/3b4/4NP2/1P3BP1/3R2K1 w - - bm Rxd4; id "ECM.348"; +r3r1k1/pp3ppp/1qp5/2bbNQ2/5B2/2P5/PP3PPP/3RR1K1 w - - bm Rxd5; id "ECM.349"; +7r/3qbk1r/3p1n2/p1pPp1p1/Pp1nPpP1/1P1Q1P1B/1NP3K1/R3B2R b - - bm Nxg4; id "ECM.350"; +r2qn1k1/1p1b3p/2pp1b2/6pQ/p1P1P3/P1N3PB/1P6/3R1R1K w - - bm Rxf6; id "ECM.351"; +2rq3r/5p2/p3pkbQ/3p4/3N4/2P4R/P4PP1/4R1K1 w - - bm Rf3+; id "ECM.352"; +r4k1r/pp2pp2/3p1b2/q2PnQpp/3N4/1BP3P1/PP3PP1/3RR1K1 w - - bm Rxe5; id "ECM.353"; +5rk1/2p3pp/p1p4r/2P1p3/3pPnq1/1P3R1P/PN1Q3K/R5N1 b - - bm Qxf3; id "ECM.354"; +r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - - bm Rxd7; id "ECM.355"; +2r2rk1/p3p1bp/3qP1p1/1Q1p4/P4P2/3R4/1P4PP/2B2RK1 b - - bm Rxc1; id "ECM.356"; +r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - bm Rxd4; id "ECM.357"; +1r6/3b1pk1/pr1p1q1p/2pPb1p1/2B1P1P1/2N2PP1/1PQ3K1/RR6 b - - bm Rxb2; id "ECM.358"; +2r2rk1/5ppp/1p2p3/p7/1n1R4/P1NnPN2/1P3PPP/1R4K1 b - - bm Nxb2; id "ECM.359"; +2r3k1/p1r1ppb1/2bp1np1/q5N1/1p1BP2Q/3P4/PP2N1PP/2R2R1K w - - bm Bxf6; id "ECM.360"; +r3r1k1/p4ppp/2pp1b2/8/q2n1P2/2BQ3P/PPP3P1/1K1R2NR b - - bm Re3; id "ECM.361"; +rn1kr3/pppb4/3p1q2/3P1pNn/2P2P1p/1P2Q2P/P2NR1B1/4R1K1 w - - bm Qxe8+; id "ECM.362"; +r2q1rk1/ppp1b1pp/1nn1p3/4P3/2PP4/2N1B2P/PP1Q4/2KR1B1R b - - bm Rxf1; id "ECM.363"; +r3k3/1pqb1p2/p3p3/4n2r/3N1Q2/2P5/PP4B1/4RRK1 w q - bm Rxe5; id "ECM.364"; +1rb2bk1/q4r2/pB1p1nn1/3Pp3/N3PpP1/8/1PQ1BNP1/R1R3K1 b - - bm Rxb6; id "ECM.365"; +2rbr2k/1pq2ppp/p3bn2/4p1B1/P3P3/2N3Q1/1PP1B1PP/3R1R1K w - - bm Rxd8; id "ECM.366"; +r4rk1/5p2/p1b1pQpq/8/1B2P3/2NR4/PPP3PP/1K6 w - - bm Rd5; id "ECM.367"; +3nr1k1/p6p/2n1pRpB/3pP3/2pP2P1/q1P4P/6BK/5Q2 w - - bm Rxg6+; id "ECM.368"; +2rr2k1/5ppp/p1b1pn2/q1p5/P1B1PQ2/R1PN1P2/6PP/1R4K1 b - - bm Rxd3; id "ECM.369"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.370"; +1k2rb1r/pbp1q1pp/2pp4/2PnpP2/Q7/1P3NP1/PB5P/2KR1B1R w - - bm Rxd5; id "ECM.371"; +7k/p1p1r2p/1p1pnr1q/5pp1/2PPPp2/2PB1P1P/P2Q1PRK/7R b - - bm g4; id "ECM.372"; +5qk1/p4p2/1p3Pp1/2p4Q/3rr3/7R/PP6/6RK b - - bm Rh4; id "ECM.373"; +5r1k/5Bb1/3p2Pp/p1pP4/1p2Q3/4P1P1/q7/3K3R w - - bm Rxh6+; id "ECM.374"; +2b4B/1pp2k2/1p6/3P3n/5p1P/1P4p1/P2r2P1/R5KR b - - bm f3; id "ECM.375"; +r3k2N/pppbq1pp/5n2/3Ppn2/2BP4/2P3bP/PP2Q1P1/RNB2K1R b q - bm Bh2; id "ECM.376"; +r2q1r2/p1pbppbk/1p3npp/n2P2B1/7Q/2NB1N2/PPP3PP/4RRK1 w - - bm d6; id "ECM.377"; +5n2/3bp1r1/1r1p3k/p1p2pNp/1nP2P1P/1PN1PB1K/P5R1/6R1 w - - bm Nf7+; id "ECM.378"; +r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - - bm Bxe5+; id "ECM.379"; +r1b1qbk1/7p/4p1p1/1p2Bp2/p1B2Q2/P3P3/1P3PPP/3R2K1 w - - bm Bc3; id "ECM.380"; +2r1k2r/3b1pb1/p2ppp2/2q2P2/2p1P2p/P1N2N2/1PP1Q1PP/3R1R1K w k - bm e5; id "ECM.381"; +3r1rk1/1pq1bppp/p7/n2RN3/P7/1P6/1B2QPPP/R5K1 w - - bm Nd7; id "ECM.382"; +q1r3k1/2r4p/2p3pP/2Qp1p2/PRn5/4P1P1/5PB1/1R4K1 w - - bm Rxc4; id "ECM.383"; +r3bknr/1p4pp/p3Q3/q4pb1/P1Bn4/8/1PP2PPP/R1B1R1K1 w - - bm Qd6+; id "ECM.384"; +r1b1nrk1/p2n3p/2pp4/8/2P2q1N/1PB4P/P4PB1/R2QR1K1 w - - bm Bd5+; id "ECM.385"; +7k/5rp1/p1bQB2p/1p4nN/4P3/1Pq5/P5PP/3R3K b - - bm Bxe4; id "ECM.386"; +r4r1k/1bq4p/p4bp1/3pn3/NP6/Q1PBB2P/6P1/3R1RK1 b - - bm d4; id "ECM.387"; +r2r2k1/1bq2pb1/6pp/2P1p3/1nBpN2N/6PP/2Q2P2/3RR1K1 w - - bm Nf6+; id "ECM.388"; +r3rbk1/p1q2pp1/1n5p/2pp4/4N3/1PQ3P1/PB2PP1P/3R1RK1 w - - bm Nf6+; id "ECM.389"; +2k1r3/Qp3pb1/2p4p/6q1/8/1P4PN/PBPn1P2/K2R4 b - - bm Qe5; id "ECM.390"; +r3r1k1/1pp2p1b/7p/2Q5/2PP2p1/2P1NpPq/P2R1P1P/6RK b - - bm Rxe3; id "ECM.391"; +5bk1/5p1p/Q5p1/1B4n1/8/2q1p3/6PP/3R2K1 b - - bm e2; id "ECM.392"; +r5k1/1p3pp1/1p3q1p/1P1bQ3/P2P3n/8/3B1PPP/R3R1K1 b - - bm Nf3+; id "ECM.393"; +2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - - bm Rxa6; id "ECM.394"; +r5kr/p3PR1p/1p1p2pq/4n3/8/3B4/P4QPP/4R1K1 w - - bm Rxe5; id "ECM.395"; +2bq1b2/1p3k2/1r1p1p1p/pNpP1PpP/P1P3P1/6B1/1P5Q/2K1R3 w - - bm Re6; id "ECM.396"; +2kr3r/pp3p1p/2b1p3/q3Q3/5P2/2P1B3/P1P3PP/1R3RK1 b - - bm Rhg8; id "ECM.397"; +2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - - bm Rxd3; id "ECM.398"; +2r2nk1/6pp/p1rPqp2/1pP1p3/1P6/2B3R1/1P2Q1PP/5RK1 w - - bm Rxf6; id "ECM.399"; +3r2k1/pb3p1p/1q4p1/2b1P3/1Pp5/2P1p1P1/P3Q1BP/R1B4K b - - bm Qc6; id "ECM.400"; +r2rnbk1/pp3ppp/1q4n1/3p1N2/5P2/1PQB4/PBP3PP/4RR1K w - - bm Nh6+; id "ECM.401"; +r3nrk1/p1pb1qpp/3p1p2/2pP1N2/2P1PR2/P1PB4/4Q1PP/5RK1 w - - bm e5; id "ECM.402"; +r1b2rk1/pp2qp2/2nRp1p1/6Pn/1Pp5/P1N1P3/1BQ2PP1/2K2B1R w - - bm Rxh5; id "ECM.403"; +5rr1/pp1kq1bp/2bppn2/2p3B1/4N3/2NP2P1/PPP4P/R3QRK1 b - - bm Nxe4; id "ECM.404"; +1r1q1k2/R4pp1/5p1r/1p1p1n1p/3Pb2N/1BP5/2P1Q1PP/4R1K1 w - - bm Qxe4; id "ECM.405"; +R2b2k1/2rq1n1p/3p2p1/1p1Ppp1n/1P6/1B1PQN1P/1B3PP1/6K1 w - - bm Nxe5; id "ECM.406"; +r1b3kr/bp3ppp/p1nNp3/4P3/P1Q2P2/BBP5/5qPP/R2R3K w - - bm Nxc8; id "ECM.407"; +6k1/5rb1/6pp/1p2p3/2b5/4B1P1/r4PBP/1RR3K1 w - - bm Rxc4; id "ECM.408"; +4r1k1/1p5p/5ppP/1qnP4/r4R2/P6P/1B1Q2K1/5R2 w - - bm Rxf6; id "ECM.409"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm e6; id "ECM.410"; +r4rk1/1b4bp/p1npq1P1/R3p3/8/1N2BP2/1PPQ2P1/4KB1R w K - bm Qxd6; id "ECM.411"; +6k1/pbq2pp1/4r2p/8/3prb2/1P1Q3P/PN2BPP1/3RRK2 b - - bm Bd2; id "ECM.412"; +6k1/2p3p1/2b4p/p4P2/2pR2PK/2P1r2P/1B6/8 b - - bm Bg2; id "ECM.413"; +r1b2rk1/pp2ppbp/2np1np1/q7/4P3/2N1BN2/PPPQBPPP/2KR3R b - - bm Nxe4; id "ECM.414"; +3r1rk1/p1q4p/1p3bp1/3bnp2/3B4/1NPB3P/P1PQ2P1/1R2R2K b - - bm Nf3; id "ECM.415"; +r2q1rk1/p5pp/bn1p1p2/2pP4/1bP1NP2/3B1R2/PBQ3PP/R5K1 w - - bm Ng5; id "ECM.416"; +1r1q2k1/7p/2p3p1/1P1n1b1r/2BQ4/4B3/P6P/1R3RK1 w - - bm bxc6; id "ECM.417"; +r3kbnr/1ppb3p/p1q1pp2/3p4/3P4/2N2N2/PPP2PPP/R1BQ1RK1 w kq - bm Ne5; id "ECM.418"; +r1b1qbk1/pp3r1p/2pR1np1/5p2/2P1pP2/1PN1Q1PP/PB2P1B1/5RK1 w - - bm Rxf6; id "ECM.419"; +3rr1k1/1p1qb2p/pP4p1/2p2p2/4RQ2/3P4/1PPB2PP/4R1K1 w - - bm Bc3; id "ECM.420"; +2b2r2/rpp2pkp/3pq3/2pR2P1/2n1P1N1/2P2B2/1P3Q1P/1K5R b - - bm Qxd5; id "ECM.421"; +6k1/rnqb3p/5ppQ/2pPp3/p1N1P3/2PB3P/5PP1/1R4K1 w - - bm f4; id "ECM.422"; +7r/pp4k1/3pn1p1/q1pB1b2/2P5/5NR1/1P3PP1/2Q3K1 w - - bm b4; id "ECM.423"; +5r2/4prkp/3q2p1/2pP1n2/N1Q2R2/1P4PP/P5K1/4R3 b - - bm g5; id "ECM.424"; +B1b1rbk1/5ppp/pq6/1p2n3/2p2P2/6PP/PPQ4K/R1BR4 b - - bm Ng4+; id "ECM.425"; +8/2R4p/2R3bk/8/5N1P/1p3PP1/2pqP1K1/8 w - - bm g4; id "ECM.426"; +6k1/p4p1p/3pqp2/2p1r3/2Pnr1N1/P6P/1P1Q1PP1/3R1RK1 b - - bm Ne2+; id "ECM.427"; +1kqr3r/p1p4p/RpQP4/2P1p3/4B3/4Bp2/P4P1P/6K1 b - - bm Rdg8+; id "ECM.428"; +6k1/3Q1pp1/4p2p/p2pP3/1p1P2P1/nP1R1N2/q1r2PKP/8 w - - bm Qe8+; id "ECM.429"; +6k1/5pp1/p5r1/3Np2q/4P2p/1r3P1Q/n4P1P/3R2RK w - - bm Rxg6; id "ECM.430"; +nr2rb2/3q1kpp/3p4/pnpPpNBP/2N1P3/3Q4/PP3P2/2K3RR w - - bm Nh6+; id "ECM.431"; +r3k1r1/1pp2ppp/pb1p1qn1/4p2b/2B1P3/N1PP1NPP/PP2QPK1/R4R2 b q - bm Nh4+; id "ECM.432"; +1n2n1r1/r3qppk/p2p3p/3PpP1P/1P2P3/3B2RQ/3B1P1K/6R1 w - - bm Bxh6; id "ECM.433"; +r2b4/pb2q1k1/np1p2r1/1N1Pp2Q/PPN1Pp2/8/2R2BPp/2R4K w - - bm Ncxd6; id "ECM.434"; +r7/2qnb1kp/p2p1nP1/1p1Pp1p1/6N1/3BB2Q/PPP4P/5RK1 w - - bm Qxh7+; id "ECM.435"; +n1rqk3/1p2p3/1n1pP1p1/pP1P1p1r/3B3P/1BN3p1/3Q4/R3K2R w KQ - bm Qg5; id "ECM.436"; +rn2kr2/pp1b1pQp/3Pp3/qB1n4/3N4/P7/1PP2PPP/2KR3R w q - bm Nxe6; id "ECM.437"; +3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - - bm Bh4; id "ECM.438"; +r1r3kb/1pqbpp2/p2p1npB/n7/3NP3/1BN2P2/PPPQ2P1/2KR3R w - - bm Bf8; id "ECM.439"; +4rr1k/pbp3bp/3p4/1p5q/3n4/1B1Q2B1/PP1N1N1P/4RRK1 b - - bm Rf3; id "ECM.440"; +r3k2r/pp2ppbp/1qp5/2n2b2/2P5/4BN2/PP1QBP1P/2KR3R b kq - bm Nb3+; id "ECM.441"; +4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - - bm Ng6+; id "ECM.442"; +2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - - bm Qb2; id "ECM.443"; +2r3k1/n3qppp/1B1r1n2/N7/N4P2/1Q4PP/P5B1/R1b4K b - - bm Qe1+; id "ECM.444"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.445"; +rnb2k2/ppbp2p1/2p2pB1/8/1PN5/2P5/P4PPP/R1B3K1 w - - bm Bf4; id "ECM.446"; +2k5/1p1b4/2n1p1r1/7q/4RP2/3BQN2/2P2K1P/8 w - - bm f5; id "ECM.447"; +2k3r1/1ppr3p/p1pB2q1/6n1/N3Pp2/8/PPP1Q1PP/3R1RK1 b - - bm f3; id "ECM.448"; +r3q2r/2p1k1p1/p5p1/1p2Nb2/1P2nB2/P7/2PNQbPP/R2R3K b - - bm Rxh2+; id "ECM.449"; +6r1/6rk/3p3p/p2Rp3/R1PqPp1b/2N2Q2/6PP/7K b - - bm Rxg2; id "ECM.450"; +4r1k1/1p2rq1p/2bQpp2/p1Pp4/3P4/P3RN2/5PPP/4R1K1 w - - bm Ne5; id "ECM.451"; +b2b1r1k/3R1ppp/4qP2/4p1PQ/4P3/5B2/4N1KP/8 w - - bm g6; id "ECM.452"; +1k4q1/1p2Rprp/p1p5/2Pp4/1P1Q3P/6P1/P5K1/8 w - - bm Qe5+; id "ECM.453"; +r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - bm Ng6+; id "ECM.454"; +r4r1k/p2bN2p/1p1p1p2/2q4P/3Q4/1P6/1PP3P1/1K2R2R w - - bm Ng6+; id "ECM.455"; +2kr3r/p5b1/Pp2R1p1/2q2p1p/2p2Pn1/2P2BP1/1PQB2P1/5R1K b - - bm h4; id "ECM.456"; +r1b2k1r/1p2qp2/pN1p1n2/2pP2pp/P2bP1P1/2N5/1P2BPP1/R2Q1RK1 b - - bm hxg4; id "ECM.457"; +6nk/p4rrp/1p1p1p2/1q1Pp2R/4B1P1/1PP2Q1R/P6P/7K w - - bm g5; id "ECM.458"; +r1b1k2r/6pp/p1p1p3/3np1B1/1b2N3/8/q1PQB1PP/3RK2R w Kkq - bm Qxb4; id "ECM.459"; +3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - - bm Bxh5; id "ECM.460"; +2r3k1/4qpp1/2p1r3/pbQpN1Pp/3P1P1P/4P3/PP6/1KR3R1 w - - bm Qxb5; id "ECM.461"; +4r2k/p2Q3p/2p1r1p1/4NpR1/3P4/2P1PP1b/P4q1P/6RK w - - bm Nxg6+; id "ECM.462"; +4r1kb/p2r4/1np1p1p1/3nP1Bp/1p3P1R/1B2qP2/PPPN3Q/2K4R w - - bm Rxh5; id "ECM.463"; +2rq2k1/pp1bpp1p/3p1np1/8/3NPPnQ/1BP5/P1P3P1/1K1R3R w - - bm e5; id "ECM.464"; +r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - - bm Rxd5; id "ECM.465"; +2r1kr2/p1qbbp1Q/3pp3/5p2/1p1N1PB1/6P1/PPP4P/K2RR3 w - - bm Bxf5; id "ECM.466"; +r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - - bm Rf6; id "ECM.467"; +2rr2k1/5pn1/1b2q1pp/pP1pP3/2pP1PP1/2R1B2P/2Q3B1/3R3K w - - bm f5; id "ECM.468"; +2Q2bkr/5p2/1rb5/1pN1n1qB/1P1pPN2/6P1/5P2/R1R3K1 w - - bm Nce6; id "ECM.469"; +2r4r/1q1kb1p1/4p2p/3pP3/np6/3RBP2/NPP2Q1P/1K2R3 b - - bm Nc3+; id "ECM.470"; +2r4r/3bk1b1/1q2pp2/3pPp1p/1p1N1P1P/1P1R1BP1/P2Q4/1K1R4 w - - bm Nxf5+; id "ECM.471"; +1rb3k1/2r2pbp/p2q1npn/P1pPp1N1/2B1P3/2P1B1NP/5QP1/3R1RK1 w - - bm Ne6; id "ECM.472"; +r7/pp4pk/2n3qp/5p2/3p4/P4QB1/1PP1RPPP/6K1 b - - bm d3; id "ECM.473"; +2r2r1k/1p3p1p/p2p1Pp1/3Pp3/1q2Bn1Q/8/1PP3PP/4RR1K w - - bm Rxf4; id "ECM.474"; +r4rk1/5ppp/p7/4PR2/P1qnp2Q/4B3/1P4PP/5RK1 w - - bm Rh5; id "ECM.475"; +4r3/pb3pk1/6p1/8/6P1/1PNrB2K/P4P1P/2R5 b - - bm Rexe3+; id "ECM.476"; +1r3kr1/p3q1b1/3p2Q1/2p2p2/2P2N2/4Pn2/PB6/K2R3R w - - bm Ne6+; id "ECM.477"; +5r1k/6bp/3p1q2/3Q1nP1/8/6P1/PP3BKP/R2N4 b - - bm Ne3+; id "ECM.478"; +1r1q1k1r/Q4ppp/2B2n2/8/Pbbp4/1P4P1/2PP1P1P/R1B1K2R b KQ - bm Qe8+; id "ECM.479"; +5rk1/p1p1R1p1/1p5p/8/2pP1P2/3n2P1/PP2Q2P/5KNq b - - bm Nxf4; id "ECM.480"; +r5k1/1N3ppp/4b3/1Nq5/Pn3pn1/5B2/1PPQ3P/R6K b - - bm Qxb5; id "ECM.481"; +1r2k2r/1bq2pp1/pn2p2p/1p2P1b1/3N4/2N3Q1/PPP3PP/1K1R1BR1 w k - bm Bxb5+; id "ECM.482"; +r1bqn1r1/p2k1pp1/1p5p/n1pPpN2/2P1P3/P1PBB2P/4Q1P1/R4RK1 w - - bm Nxh6; id "ECM.483"; +2r2r2/p4p1k/1p2pBpn/2p5/6N1/8/P4P2/R3R1K1 w - - bm Kg2; id "ECM.484"; +r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ - bm Bg5; id "ECM.485"; +3rn1k1/pp3ppp/6b1/2p1Q3/2P1P3/P4P2/1B1qBP1P/1R5K w - - bm Rd1; id "ECM.486"; +4r1k1/5ppp/p1q3b1/1ppNr3/2P1P3/1P4QP/P4PP1/4RRK1 w - - bm f4; id "ECM.487"; +2kr2r1/2pqbp1p/p1n1b3/1P1pP3/4n3/1BP1BN2/1P4PP/RN1Q1RK1 b - - bm Bh3; id "ECM.488"; +2b3k1/5qp1/p2r1n1p/3p4/3B4/1RP3QP/P2Nr1P1/3R2K1 b - - bm Ne4; id "ECM.489"; +6k1/5rp1/4Nb1p/2p5/4Q3/1r5P/q5P1/3R1R1K w - - bm Rxf6; id "ECM.490"; +1r2r1k1/p4ppb/q1pbnn1p/4p3/N1P1P3/pPB2NP1/2Q1RPBP/R5K1 b - - bm Nxe4; id "ECM.491"; +r4r2/1pnqb2k/3p1p1p/p1pPpPpP/2P1N1P1/4BP2/PP1Q4/R2R2K1 w - - bm Bxc5; id "ECM.492"; +rnb3kr/ppp2ppp/1b6/3q4/3pN3/Q4N2/PPP2KPP/R1B1R3 w - - bm Nf6+; id "ECM.493"; +6kr/1p1r1p1p/p2pnPpQ/3Np2R/2q1P3/5P2/PPP5/2KR4 w - - bm Rxe5; id "ECM.494"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.495"; +r2q1rk1/pp1n2pp/2pb4/1P1p3n/P1PPpP2/4P2b/1BNNBP1P/R2QR1K1 b - - bm Nxf4; id "ECM.496"; +rq1r2k1/3nbp1p/p2p2p1/1p1Pp1P1/3B1P2/3B3Q/PPP4P/2KR2R1 w - - bm f5; id "ECM.497"; +r4rk1/1bq1bppp/8/p2pPR2/3B4/1NnP3Q/1P4PP/4R1K1 w - - bm Rh5; id "ECM.498"; +r4rk1/1nqb1pbn/6pB/pppPp2p/8/1PP2NNP/P1BQ2P1/R4RK1 w - - bm Nxh5; id "ECM.499"; +r1b2rk1/pp4bp/2p3p1/4q2n/NQPN1p1P/1P5n/P3PPB1/2BRRK2 b - - bm f3; id "ECM.500"; +4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - - bm Nxf3; id "ECM.501"; +r2qkr2/1p3pQp/2p1b3/1B1pN3/1p6/8/1P1K1PPP/2B1R3 w q - bm Nxc6; id "ECM.502"; +r3rk2/pb2bpp1/1n5p/q1pP1B2/1p3B2/5N2/PPQ2PPP/R2R2K1 w - - bm Bc8; id "ECM.503"; +r1bqr2k/ppp2p1p/5b2/3Pn1p1/1PP1Bp2/8/PB2N1PP/R2Q1RK1 w - - bm Nxf4; id "ECM.504"; +1q4k1/p3rppp/3b1n2/8/5P2/4P3/PP1B3P/RNQ3K1 b - - bm Bxf4; id "ECM.505"; +r3k2r/1p1b1p2/p3p3/2b3p1/4N1n1/1B5P/PPP3P1/R1B2R1K b kq - bm Bc6; id "ECM.506"; +r3kb1r/npqbpp1p/p3n1p1/P3P3/6N1/3B1NB1/1PP3PP/R3QRK1 w kq - bm Ng5; id "ECM.507"; +7k/p6p/4bppb/1N6/P2p1p2/1PrP2P1/2r1P2P/1R1Q2K1 b - - bm f3; id "ECM.508"; +2kr4/pp1r1pp1/4n1p1/4R3/2Pp1qP1/3P2QP/5PB1/1R4K1 w - - bm Rc5+; id "ECM.509"; +3r1qk1/5p1p/4b1pP/1pRp4/1P1Q4/r5P1/5P2/4RBK1 w - - bm Rxe6; id "ECM.510"; +r2qkn1r/pb2bp2/1pp1p3/5p1p/2BPN3/5NQ1/PPP2PPP/1K1RR3 w kq - bm d5; id "ECM.511"; +2rr1nk1/pp2q1b1/4p1p1/5p2/1nB5/2B1N1QP/PP4P1/4RRK1 w - - bm Nxf5; id "ECM.512"; +3r3k/p4npp/1p2qpb1/4P3/5P2/P3N3/1B2QP1P/6RK w - - bm exf6; id "ECM.513"; +6rk/1b2bp1p/ppq1p3/2p1Pp2/P1Br1P2/1PNR2P1/2P1QK1P/6R1 b - - bm Rxf4+; id "ECM.514"; +r3r1k1/p1q2pp1/b1pb3p/n7/B3n3/2P1BN2/PP1N1PPP/R2QK2R b KQ - bm Nxc3; id "ECM.515"; +4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - - bm Bxf6; id "ECM.516"; +r5n1/pppb1B2/2k1pb2/3p2B1/5P2/2N5/PPP3P1/2KR4 w - - bm Nxd5; id "ECM.517"; +2b2q2/r2n2kp/1n1p1pp1/p1pP4/1pP1NPN1/1P1B4/P5PP/Q3R1K1 w - - bm Nexf6; id "ECM.518"; +1k1r2r1/p1p3q1/2p2p2/3pn3/1P1b2bB/1QN5/P4PPP/1R2RBK1 b - - bm Nf3+; id "ECM.519"; +r3k2r/1bq1bp1p/p2p1np1/1p2p3/3NP3/P1N2QB1/1PP2PPP/3RR1K1 w kq - bm Ndxb5; id "ECM.520"; +r2q4/5p1P/2p1bR2/ppk1p1P1/3pB2Q/8/PPP5/6K1 w - - bm g6; id "ECM.521"; +r3kb1r/pp1b1pp1/4p3/2q3Qp/5B2/2PB4/P4PPP/R3R1K1 w kq - bm Rxe6+; id "ECM.522"; +1rbr2k1/p4pp1/5b1p/2p1p3/3qPP2/1PNB2PP/PKP2Q2/5R1R b - - bm c4; id "ECM.523"; +r3r1k1/p6p/bp4p1/2bPN3/6n1/6P1/PB2RPB1/3R2K1 w - - bm d6; id "ECM.524"; +2bk3r/3r2pp/p2nQ3/q2R2P1/1p6/8/PPP2P1P/1K3B1R b - - bm Qxd5; id "ECM.525"; +3r1k2/1q1r1pp1/3p2bp/p2N4/8/2P1RQ1P/P4PP1/4R1K1 w - - bm Nf6; id "ECM.526"; +3q3r/p2r1pkp/bp1N1np1/n2p4/5Q2/B1P5/P4PPP/R3R1K1 w - - bm Nf5+; id "ECM.527"; +r4Nk1/1p2pp1p/p1np2p1/3N4/P3PPn1/8/1bPKBqPP/R2Q1R2 b - - bm Qd4+; id "ECM.528"; +1kb3rr/1p2n2q/1Np2p2/1p6/1P1N1P1p/8/2P1RQPP/R6K w - - bm Nxb5; id "ECM.529"; +r3r1k1/p3Rp1p/1qp1bQ2/8/1p1P4/3R4/PP3PPP/6K1 w - - bm Rg3+; id "ECM.530"; +rn4k1/pp2rpb1/2pNb1pp/4p3/P3Pq2/2P2N1P/1PB1QPP1/R3R1K1 w - - bm Nf5; id "ECM.531"; +3r1rk1/pp3ppp/8/2p5/4PB1n/P1P2qPP/Q3RP1K/6R1 b - - bm Qg2+; id "ECM.532"; +r4rn1/ppp1q3/2bp2kp/6P1/3QpP2/2N5/PPP1B3/2KR3R w - - bm f5+; id "ECM.533"; +3qr2r/1p1bppk1/3p2p1/p1nP1PQp/3N3R/1P4PP/P1P3BK/4R3 w - - bm Ne6+; id "ECM.534"; +2rq1rk1/1b1nbpp1/1p5p/p2pNB2/3p1N2/4P3/PPQ2PPP/2RR2K1 w - - bm Bh7+; id "ECM.535"; +8/5pkp/2pp2p1/4P3/1P2P3/2QBq2P/2PnNnPK/8 b - - bm Nf1+; id "ECM.536"; +r3r2k/pb2q1p1/1p2Nn1p/2b5/2B5/2P2P2/PPQ3PP/4RR1K w - - bm Nf4; id "ECM.537"; +r1b2nk1/ppq2ppp/8/1BP1p1NQ/5p2/8/PP3PPP/3R2K1 w - - bm Rd7; id "ECM.538"; +6k1/5qp1/pN5p/3pRp2/3QnP2/2r4P/r5P1/6RK b - - bm Qh5; id "ECM.539"; +5r1n/r2q1pkp/3p1npN/NppPp2P/1P2P3/2P1Q1P1/5P2/R3K2R w KQ - bm Nf5+; id "ECM.540"; +6rk/p2b4/3p1Nqp/2pPpn2/P1P4p/5P1P/Q2B1NP1/6RK b - - bm Ng3+; id "ECM.541"; +r4r1k/pppb2pp/8/3q4/2N5/P1P2nQ1/BP2R2P/R6K b - - bm Ne1+; id "ECM.542"; +r5rk/1pp1n1pp/p1n1b1q1/3p1p2/7R/2QB1N2/PB3PPP/4R1K1 w - - bm Rxe6; id "ECM.543"; +8/4Ppk1/6p1/1p6/1Pb1Q3/6pq/8/6K1 w - - bm Qe5+; id "ECM.544"; +3R4/4Qpk1/4p1p1/7p/7K/5rP1/5P2/2q5 w - - bm Qf8+; id "ECM.545"; +8/5pk1/p6p/2R5/3q2p1/6P1/2Q3PK/4r3 w - - bm Rg5+; id "ECM.546"; +1Q4R1/8/P1b2p2/2p2k2/2P5/5p2/1r5P/4R1K1 b - - bm f2+; id "ECM.547"; +5r1k/1q2R3/8/6Q1/8/8/6P1/7K b - - bm Rf1+; id "ECM.548"; +8/4p3/8/3P3p/P2pK3/6P1/7b/3k4 w - - bm d6; id "ECM.549"; +3Q4/k3K3/q7/2N1P3/1P6/5r2/8/8 b - - bm Rf7+; id "ECM.550"; +3k4/p1p5/8/2p1p3/4P3/PpPP2K1/1P6/8 b - - bm c4; id "ECM.551"; +6r1/5p1k/4p3/3pQp2/1p1P1P1q/1P3RR1/7r/5K2 w - - bm Rxg8; id "ECM.552"; +r1b2rk1/ppp2ppp/2n3q1/b2N2N1/2BP4/4p2P/PPP3P1/R2Q1RK1 w - - bm Nxf7; id "ECM.553"; +1r4k1/3qb2p/pr1pppn1/2p2N2/2P2PQ1/1P4P1/P2R2BP/R5K1 w - - bm Bd5; id "ECM.554"; +r6r/pR1nqkpp/2p1p3/3p4/6Q1/2b4P/P1PP1PP1/2B1R1K1 w - - bm Rxe6; id "ECM.555"; +1k1r3r/ppq2pnp/1npbb1p1/3p4/3P1NP1/2NBP2P/PPQ2P1B/1KR4R w - - bm Nb5; id "ECM.556"; +5rk1/p1p1br2/1p1p2qp/4p3/2PPn1pP/3Q2P1/PPN1P1K1/2RR2B1 b - - bm Bxh4; id "ECM.557"; +r5r1/4q2k/p2p3p/5p2/4p3/P2QR3/1PP2PPP/4R1K1 w - - bm Rxe4; id "ECM.558"; +r1b2rk1/4bnpp/2p5/pp2q3/4N3/PQ2B1P1/1PP3BP/4RRK1 w - - bm Ng5; id "ECM.559"; +2rr2k1/1p3p2/p2n2p1/P2PnNq1/3QP1p1/1RN5/6PP/5RK1 b - - bm Nf3+; id "ECM.560"; +r3k1r1/pb1qpp1p/1pnp1n1B/2p2R2/3PP3/2P3PN/P1P3BP/R2Q3K b q - bm Nxe4; id "ECM.561"; +2r2rk1/pp2bppp/3q1n2/3nNRB1/3P4/1B5Q/PP4PP/3R2K1 w - - bm Nxf7; id "ECM.562"; +r1bq1rk1/1pp2ppn/1pnp3p/3N4/2B1PN2/3P4/PPP3PP/R2Q1RK1 w - - bm Ng6; id "ECM.563"; +r1b2rk1/pp3p1p/2pq2pn/2nNN3/2B1QP2/8/P1PP2PP/R1B1K2R w KQ - bm Nxf7; id "ECM.564"; +1r2r1k1/1bn2pbp/pp1q1np1/2pPN1B1/P1B5/2N4P/1P1Q1PP1/R3R1K1 w - - bm Nxf7; id "ECM.565"; +1rb2bk1/2n2qp1/p2p3p/R1pP1p2/2B5/1PBQ1N1P/2P2PP1/6K1 w - - bm Rxc5; id "ECM.566"; +r1b3k1/2pq2pp/p4p2/1p1Nr3/2n2R2/1B6/PPQ2PPP/R5K1 w - - bm Rxc4; id "ECM.567"; +2rq1rk1/3bbppp/p3pn2/1p1pN3/2nP1B2/P1NBP2Q/1P3PPP/2R2RK1 w - - bm Nxd5; id "ECM.568"; +2r1r1k1/pp1b1ppp/1q6/3P4/7N/Pn1Q4/1P3PPP/1RB2RK1 b - - bm Nxc1; id "ECM.569"; +1r4nk/3b2bp/3p4/3P3p/2pNPq2/P1N2p1P/1P3Q2/1R4KR b - - bm Rxb2; id "ECM.570"; +2r5/p3kpp1/P2p4/1P2pP1p/1P2PqnP/6R1/r2N2P1/3RQ1K1 b - - bm Rxd2; id "ECM.571"; +2br2k1/1p2qppp/r1n1p3/pQ1nN3/P2P4/2B3P1/1P3PBP/2RR2K1 w - - bm Qxa6; id "ECM.572"; +5rk1/3q2bp/3pb2r/1p1n1p2/3p1P2/P2B1QN1/1P1B2PP/2R1R1K1 w - - bm Nxf5; id "ECM.573"; +4r1k1/1ppQr1p1/1p1p1pP1/3P3p/7P/1P3q2/P1P5/1KRR4 w - - bm Re1; id "ECM.574"; +2Rr2k1/7p/4pqp1/p4p2/1p1P1Q1P/8/PP3PP1/6K1 w - - bm Qe5; id "ECM.575"; +4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - - bm Rc1; id "ECM.576"; +5rk1/bp4p1/p2rp2p/8/8/2PN4/PP1R1PPP/3R2K1 b - - bm e5; id "ECM.577"; +2q1rk2/QR3ppp/1pPpb3/1P2p1b1/4P3/6P1/3N1PBP/6K1 w - - bm Bh3; id "ECM.578"; +n1bq3k/pp4bp/6p1/5pP1/3p1P2/1B1P4/PB3Q1P/4R1K1 w - - bm Bxd4; id "ECM.579"; +r3r1k1/p2n4/3p1pp1/qnp3B1/1p2P1P1/1P3P2/PP2N2Q/1K1R1B2 w - - bm Nf4; id "ECM.580"; +6k1/pb3ppp/1p2p3/4P3/5P2/P1r5/1q4PP/1B2Q1RK b - - bm Rc1; id "ECM.581"; +2rq1kbR/4R1p1/3p3r/pp1P1Pp1/6P1/3B4/PPP1Q3/6K1 w - - bm f6; id "ECM.582"; +2r5/5kb1/4ppp1/pp1qB3/2rP4/1RP2R1Q/P4PP1/6K1 b - - bm Rh8; id "ECM.583"; +4k3/4Bp2/1p2nP1P/2p5/2K1b1B1/8/P7/8 w - - bm Bf3; id "ECM.584"; +3rr1k1/ppp1qp1p/3b2p1/4np1P/1P1N1Pn1/P1P4R/1B1NB3/R2Q1K2 b - - bm Nf3; id "ECM.585"; +1k1r3r/ppqb4/5Ppp/3p4/P2np3/3BR1Q1/2PB1PPP/R5K1 w - - bm Rxe4; id "ECM.586"; +r2q1rk1/pb1nbpp1/1pp1pn1p/3pN3/2PPP3/2N1B1P1/PP3PBP/R2Q1RK1 w - - bm Nxc6; id "ECM.587"; +8/2R2pbk/6pp/1p2pq2/1P2Qn2/3P3P/3B1PP1/r3N1K1 b - - bm Nxd3; id "ECM.588"; +2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - bm h3; id "ECM.589"; +r2b1rnk/1p4qp/p1p1b1p1/2PpNp2/PP1PnP1Q/3BB2R/4N1PP/R6K w - - bm Qxh7+; id "ECM.590"; +r1b2rk1/1p3pbp/2p3p1/p1q5/1P6/1Q4P1/1P2PPBP/R1B1R1K1 b - - bm Be6; id "ECM.591"; +4r1k1/r1q2p1p/p5pB/1pbBpN1n/1n2P3/5Q2/PP3PPP/R1R3K1 w - - bm Rxc5; id "ECM.592"; +r1r3k1/ppnbb1pp/2ppp1q1/1P3p2/P1PPn3/2N2NP1/2Q1PPBP/1RB2RK1 w - - bm Nxe4; id "ECM.593"; +r1b1k2r/2q1bppp/p3p3/1p1nP1B1/3Q4/2N5/PPP1B1PP/2KR3R w kq - bm Bxe7; id "ECM.594"; +1rb1r1k1/p1p1qppp/2pb4/8/2P3n1/4P1P1/PB2BP1P/R1QN1RK1 b - - bm Nxh2; id "ECM.595"; +2rqk1nr/pp3ppp/2n1p3/2b5/3N4/2NQB1P1/PP2PPKP/R4R2 w k - bm Nxe6; id "ECM.596"; +rnb2rk1/pp4pp/2pb1n2/3N1p1q/2P5/3N2P1/P1Q1PPBP/R1B2RK1 w - - bm Bf4; id "ECM.597"; +8/8/1p1k4/5ppp/PPK1p3/6P1/5PP1/8 b - - bm f4; id "ECM.598"; +8/5pp1/7p/5P1P/2p3P1/2k5/5P2/2K5 w - - bm f6; id "ECM.599"; +7k/8/1p1ppp1p/1Pp5/2P2P2/8/3P2PP/6K1 w - - bm f5; id "ECM.600"; +8/p5k1/2p2p2/4p1p1/1p2P3/1P4PP/1PP5/5K2 b - - bm g4; id "ECM.601"; +8/5K2/kp6/p1p5/P2p4/1P3P2/2P5/8 b - - bm b5; id "ECM.602"; +8/2k3p1/2p4p/5P2/2K3PP/8/8/8 w - - bm g5; id "ECM.603"; +8/1kp1b3/1p4K1/4P2p/P1P3p1/5pP1/P4P2/4B3 b - - bm h4; id "ECM.604"; +8/8/4b1p1/2Bp3p/5P1P/1pK1Pk2/8/8 b - - bm g5; id "ECM.605"; +8/8/3K1k2/5p1p/4p1p1/4P1P1/5PP1/8 b - - bm f4; id "ECM.606"; +r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - bm Bxg6; id "ECM.607"; +6r1/1p3k2/pPp4R/K1P1p1p1/1P2Pp1p/5P1P/6P1/8 w - - bm Rxc6; id "ECM.608"; +1k2b3/4bpp1/p2pp1P1/1p3P2/2q1P3/4B3/PPPQN2r/1K1R4 w - - bm f6; id "ECM.609"; +2kr3r/ppp1qpp1/2p5/2b2b2/2P1pPP1/1P2P1p1/PBQPB3/RN2K1R1 b Q - bm Rh1; id "ECM.610"; +1r3qk1/pb3p1p/1pn2PpQ/2pN4/3r4/5B2/PPP4P/4RRK1 w - - bm Ne7+; id "ECM.611"; +4r1k1/5p1p/3q2p1/1p1P4/1P6/2p4P/2Q1nPB1/4RK2 b - - bm Ng3+; id "ECM.612"; +6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - - bm e5; id "ECM.613"; +5r2/pp1RRrk1/4Qq1p/1PP3p1/8/4B3/1b3P1P/6K1 w - - bm Qxf7+; id "ECM.614"; +6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - bm b5; id "ECM.615"; +r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - bm Rxa6; id "ECM.616"; +3r2k1/p6p/b2r2p1/2qPQp2/2P2P2/8/6BP/R4R1K w - - bm Rxa6; id "ECM.617"; +8/p3q1k1/6p1/1p3nP1/2pp1QBr/P2P4/1PP2K2/R7 b - - bm Qe3+; id "ECM.618"; +7k/4b2p/5p1P/5PP1/1pNp1P2/1P1B4/2P2K2/r7 w - - bm g6; id "ECM.619"; +5r1k/1p1b2rP/p2p4/3P3B/P2P4/5pP1/1P2pP2/R3R1K1 b - - bm Rxg3+; id "ECM.620"; +6B1/2p2pp1/2p5/p3K3/1k6/nP4P1/5P1P/8 b - - bm Nc4+; id "ECM.621"; +3q1k2/5p2/p5pN/1b2Q2P/8/8/5PPK/8 w - - bm Qh8+; id "ECM.622"; +6k1/p3b1pp/4p3/4Pp2/Pp1r1P1P/1P4P1/2p2R2/5RK1 b - - bm Rc4; id "ECM.623"; +4r2k/3n1Qpp/1pRP1p2/p4P2/1p1P2P1/6rP/P3q1B1/6RK w - - bm Qe6; id "ECM.624"; +2r2rk1/p1N2p1p/2P1p1p1/1Pp3q1/3b4/5Q2/P1P3PP/4RR1K w - - bm Nxe6; id "ECM.625"; +3r1r2/pp1P3k/4Rbp1/1BP2p1p/8/7P/P4KP1/3R4 w - - bm Ba6; id "ECM.626"; +3rr1k1/pppRn1pp/4Pp2/1P5q/1QB5/4P3/P4P1P/4K1R1 w - - bm Qxe7; id "ECM.627"; +rn1q2k1/pp3pb1/3p2pp/2pP2N1/3r1P2/7Q/PP4PP/R1B2RK1 w - - bm Nxf7; id "ECM.628"; +8/6Bp/6p1/2k1p3/4PPP1/1pb4P/8/2K5 b - - bm b2+; id "ECM.629"; +5bk1/r4ppp/1r1P1n2/2p2N2/b7/2B3P1/5PBP/R3R1K1 w - - bm Bxf6; id "ECM.630"; +8/8/8/P2k1p2/2N5/1pb2P2/4P3/2K5 w - - bm a6; id "ECM.631"; +3qr1k1/p4ppp/1p1P4/2r1nN2/4P2n/P7/1B4P1/3QRRK1 w - - bm d7; id "ECM.632"; +6k1/5pbp/6p1/2p1r3/1pPr4/3n2NP/1PB2PP1/1R1R2K1 b - - bm Nxb2; id "ECM.633"; +4r3/p4pk1/6p1/P1pB2Pp/2P3b1/2p1N1P1/Qb1r1P2/6K1 b - - bm Rxe3; id "ECM.634"; +2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - bm Nxa7; id "ECM.635"; +r4rk1/ppq3pp/2p1Pn2/4p1Q1/8/2N5/PP4PP/2KR1R2 w - - bm Rxf6; id "ECM.636"; +r3qr1k/1b4pp/p2RQ3/Bp2p3/4p3/6P1/PPP2P1P/3R2K1 b - - bm Qh5; id "ECM.637"; +8/6kP/6p1/1p1pP3/pP6/P1n2K2/2N5/8 w - - bm e6; id "ECM.638"; +8/Pb6/8/8/7K/5k1p/6pB/8 b - - bm g1=Q; id "ECM.639"; +8/pR4pk/1b6/2p5/N1p5/8/PP1r2PP/6K1 b - - bm Rxb2; id "ECM.640"; +6k1/p4pp1/Pp2r3/1QPq3p/8/6P1/2P2P1P/1R4K1 w - - bm cxb6; id "ECM.641"; +6k1/p4pbp/Bp2p1p1/n2P4/q3P3/B1rQP3/P5PP/5RK1 w - - bm dxe6; id "ECM.642"; +5r2/R4p2/5P1k/4PK2/1p6/8/8/8 w - - bm Rxf7; id "ECM.643"; +4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - - bm f5; id "ECM.644"; +1r6/3r1Pk1/p2p1np1/5q2/1p3P2/1B5R/PPP4Q/1K1R4 w - - bm Rh8; id "ECM.645"; +8/2k5/2p5/2pb2K1/pp4P1/1P1R4/P7/8 b - - bm Bxb3; id "ECM.646"; +2r5/1r5k/1P3p2/PR2pP1p/4P2p/2p1BP2/1p2n3/4R2K b - - bm Nd4; id "ECM.647"; +4r2k/p2qr1pp/1pp2p2/2p1nP1N/4R3/1P1P2RP/1PP2QP1/7K w - - bm Rxg7; id "ECM.648"; +6k1/p4p2/5Ppp/3RP3/Pr4P1/2p2K2/7P/8 w - - bm Rd8+; id "ECM.649"; +8/1R2P3/6k1/3B4/2P2P2/1p2r3/1Kb4p/8 w - - bm Be6; id "ECM.650"; +2kr2r1/pp2bQ1p/2b1P3/2qN4/8/1B2p2P/PPP3P1/3R1R1K b - - bm e2; id "ECM.651"; +r1b2rk1/1p2qppp/p3p3/2n5/3N4/3B1R2/PPP1Q1PP/R5K1 w - - bm Bxh7+; id "ECM.652"; +3r1rk1/pp1q1ppp/3pn3/2pN4/5PP1/P5PQ/1PP1B3/1K1R4 w - - bm Bb5; id "ECM.653"; +r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - bm Bxh7+; id "ECM.654"; +6rk/3nrpbp/p1bq1npB/1p2p1N1/4P1PQ/P2B3R/1PP1N2P/5R1K w - - bm Nxh7; id "ECM.655"; +1rb2rk1/3nqppp/p1n1p3/1p1pP3/5P2/2NBQN2/PPP3PP/2KR3R w - - bm Bxh7+; id "ECM.656"; +2k5/ppp3pp/8/NQ2n2q/2Pp1n2/R4bP1/1P3P1P/4R1K1 b - - bm Qxh2+; id "ECM.657"; +5rrk/1p3qpp/p3pn2/2PpBp2/3P1P1Q/P1P1R2R/2b1B1PP/6K1 w - - bm Qxh7+; id "ECM.658"; +r4rk1/1bq2ppp/p1p1p3/2b1P1B1/3p2Q1/3B4/PPP2PPP/R3R1K1 w - - bm Bxh7+; id "ECM.659"; +r4rk1/pb1q1ppp/2N1p3/2Rn4/3P4/3BPQ2/1P3PPP/2R3K1 w - - bm Bxh7+; id "ECM.660"; +r5rk/1p1q1p1p/5pn1/p2p1N1Q/3P2P1/PP2R3/5P1P/5RK1 w - - bm Qxh7+; id "ECM.661"; +2r2r2/p2qppkp/3p2p1/3P1P2/2n2R2/7R/P5PP/1B1Q2K1 w - - bm Rxh7+; id "ECM.662"; +1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - - bm Rxh7; id "ECM.663"; +4rrk1/2q1bppp/p2p4/1p1Pn3/3B1R2/P2B2Q1/1PP3PP/5R1K w - - bm Bxh7+; id "ECM.664"; +r1b2rk1/2q1bppp/p1n1p3/1p1np1P1/5P2/1NNBBQ2/PPP4P/R4RK1 w - - bm Bxh7+; id "ECM.665"; +5r1k/ppp2qnp/1n1p1N1Q/3Ppb2/2P4P/7B/PP6/2KR2R1 w - - bm Nxh7; id "ECM.666"; +r4rk1/pp2q1p1/4b2p/2ppb3/6n1/2P3N1/PPQBBPPP/R4RK1 b - - bm Nxh2; id "ECM.667"; +b3r1k1/2rN1ppp/2n1p3/p7/P3BP2/1R6/q1P2QPP/3R2K1 w - - bm Bxh7+; id "ECM.668"; +2r1qrk1/3n3p/b3pPp1/4P3/1pp1nBN1/pP4PQ/P1P2PK1/3RR3 w - - bm Qxh7+; id "ECM.669"; +r1b1rnk1/pp1nb1pp/2p1pp2/q3N3/2PP1P2/3BP1N1/PBQ3PP/R4RK1 w - - bm Bxh7+; id "ECM.670"; +4r1k1/2q2r1p/p3bQ2/1p4Bp/2np4/8/PPB2PP1/3RR1K1 w - - bm Bxh7+; id "ECM.671"; +5rk1/pbrn1ppp/1ppN1q2/2P1p3/3P4/1PRB4/P3QPPP/5RK1 w - - bm Bxh7+; id "ECM.672"; +2rqr1k1/1p1bbppp/p3p3/n7/3P2Q1/2PB1N2/P4PPP/R1B1R1K1 w - - bm Bxh7+; id "ECM.673"; +r1b2r1k/ppppq1pp/2n1n3/6N1/2B2P2/4B3/PPP3PP/R2Q1RK1 w - - bm Nxh7; id "ECM.674"; +rn1q1rk1/pb1p1ppp/4p3/2pnP3/1bp5/2N2N2/PP3PPP/RBBQK2R w KQ - bm Bxh7+; id "ECM.675"; +r2r2k1/p1p2p1p/4pPp1/1Pqb4/8/7R/1PB2PPP/3QR1K1 w - - bm Rxh7; id "ECM.676"; +r1b2rk1/1pq2ppp/p1p1p3/2n1P3/2N2P2/3B4/PPP3PP/R2Q1RK1 w - - bm Bxh7+; id "ECM.677"; +rnq3rk/4bp1p/p1p3pQ/1p1pP3/1P1N1B2/2P3R1/1P3PPP/R5K1 w - - bm e6; id "ECM.678"; +rn3rk1/pp1bppbp/1qp3p1/4P1N1/PP1PB3/2P1B3/4Q1PP/R4RK1 w - - bm Nxh7; id "ECM.679"; +3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - - bm Bxh7+; id "ECM.680"; +1r2nrkb/2n2p1p/p2p1Pp1/P1pPp1P1/1pP1P1q1/1P1BB1N1/3Q4/2KR3R w - - bm Rxh7; id "ECM.681"; +2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - - bm Bxh7+; id "ECM.682"; +r2q3r/2pkb1p1/p2p1n2/4p1p1/Pp2P1P1/1QP5/1P1P2PP/RNB2RK1 b - - bm Rxh2; id "ECM.683"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "ECM.684"; +2rq1bk1/1br2p1p/p2p2p1/1p1P4/4Q3/PP3N2/1BP5/1K1R3R w - - bm Rxh7; id "ECM.685"; +r2qn1k1/pb4Pp/1pn5/2p5/2P2p2/P1PB4/5PPP/R2Q1RK1 w - - bm Bxh7+; id "ECM.686"; +r4rk1/pp1n1ppp/3qp3/3nN1P1/b2P4/P2B1Q2/3B1P1P/1R2R1K1 w - - bm Bxh7+; id "ECM.687"; +r2r2k1/ppqbbppp/4pn2/6N1/n1P4P/3B1N2/PP2QPP1/1KBR3R w - - bm Nxh7; id "ECM.688"; +r5k1/6bp/2q1p1p1/p2pP3/3P4/1rP2QP1/3B1PK1/2R4R w - - bm Rxh7; id "ECM.689"; +r6r/4ppk1/p2p1bp1/B2p4/3P2p1/QP2P3/P1R1qPPP/2R3K1 b - - bm Rxh2; id "ECM.690"; +4nrk1/r4p1p/p2p2pQ/2pPpNPP/qpn1P3/5P1R/PPP1N3/2K3R1 w - - bm Qxh7+; id "ECM.691"; +r3k2r/1b1n1p2/pq1p1bp1/1p4p1/P3P3/1NN5/1PP3PP/R2QRB1K b kq - bm Rxh2+; id "ECM.692"; +r2qrnk1/4bppp/b1p5/1p1p2P1/p2P1N1P/2NBP3/PPQ2P2/2K3RR w - - bm Bxh7+; id "ECM.693"; +rn1q1rk1/pppbb1pp/4p3/3pP1p1/3P3P/2NB4/PPP2PP1/R2QK2R w KQ - bm Bxh7+; id "ECM.694"; +1r2nr1k/6pp/pp1p1p2/2pPnN2/q1P1PB2/5PR1/4K1P1/2Q4R w - - bm Bxe5; id "ECM.695"; +3r1rk1/4qp1p/p1bb2p1/2p5/3P4/1P6/PBQN1PPP/2R2RK1 b - - bm Bxh2+; id "ECM.696"; +r2q1rk1/3n1ppp/8/1pbP2P1/p1N4P/PnBBPQ2/5P2/R3K2R w KQ - bm Bxh7+; id "ECM.697"; +2k3r1/ppq2p1p/n1Pb1p2/8/6r1/4BN1b/PPQ2PPP/R3RBK1 b - - bm Bxh2+; id "ECM.698"; +3qr1k1/1br2ppp/p2b4/8/PpNp4/3P4/1PP2PPP/R1BQ1RK1 b - - bm Bxh2+; id "ECM.699"; +3r2k1/p1R2p2/4pQp1/1q5p/5P1P/1PR5/2Pr2P1/6K1 b - - bm Rxg2+; id "ECM.700"; +r1b4r/3p1kp1/pp3q1p/4RP2/8/B7/P5PP/4QRK1 w - - bm Qe4; id "ECM.701"; +1r2rnk1/2R2bpp/p2q4/1p1N2R1/5P2/1Q1B3P/PP4P1/7K w - - bm Rxg7+; id "ECM.702"; +3r2k1/pb5p/1p2qpp1/8/2p5/1P1nP3/P1N2PPP/1Q1R1R1K b - - bm Bxg2+; id "ECM.703"; +4rrk1/2qb2pp/p5P1/1p2p3/1b2P3/2N5/PPPQ4/1K1R2R1 w - - bm gxh7+; id "ECM.704"; +3q1k2/pp3ppn/2p1n2p/4pN1N/P3P2P/5Q2/1PP2PP1/6K1 w - - bm Nhxg7; id "ECM.705"; +2r2r1k/3b1pb1/p3pp1p/q2p1P1B/8/2N2RR1/P1PQ2PP/7K w - - bm Rxg7; id "ECM.706"; +5bk1/1p4p1/4N1R1/3p4/p1r2P1q/Pr1QP2P/1P6/1K4R1 w - - bm Rxg7+; id "ECM.707"; +2r1r1k1/5ppp/p3pn2/1pb1N3/2P5/1PQ3R1/PB2qPPP/3R2K1 w - - bm Rxg7+; id "ECM.708"; +7k/1bp1P1p1/3p2rp/1pb2p1q/5P2/1BP2N1P/1P4P1/R1B2R1K b - - bm Rxg2; id "ECM.709"; +r1q1bk1r/1p3pp1/4pn1p/p3Q3/P1P2N2/1B4R1/1P3PPP/4R1K1 w - - bm Rxg7; id "ECM.710"; +r4rk1/p2n2p1/1q1Qpn1p/1P6/P6B/2p5/2B1KP1P/R5R1 w - - bm Rxg7+; id "ECM.711"; +r2qr1k1/1p3ppp/2pb4/2Np4/1P1P2bn/3BP3/2QN1PPP/1RR3K1 b - - bm Nxg2; id "ECM.712"; +r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - - bm Bxg7; id "ECM.713"; +r5k1/pn1q1rpp/2pp4/5R1N/bP6/4BQ2/P4PPP/2R3K1 w - - bm Nxg7; id "ECM.714"; +3r1rk1/5pp1/pq1n1n1p/2pPR3/2B2P2/1PBQ2RP/P5P1/6K1 w - - bm Rxg7+; id "ECM.715"; +rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - - bm Nxg7; id "ECM.716"; +r1qb1r1k/2p3pp/p1n1bp2/1p1Np2Q/P3P3/1BP3R1/1P3PPP/R1B3K1 w - - bm Rxg7; id "ECM.717"; +r4rk1/5ppp/p2pbb2/3B3Q/qp2p3/4B3/PPP2P1P/2KR2R1 w - - bm Rxg7+; id "ECM.718"; +4q1k1/1b3r1p/p4pp1/1p6/2P2n2/1P3N2/1B3PPP/R2Q3K b - - bm Nxg2; id "ECM.719"; +r2r3k/5bp1/2p2N2/5P1p/3q3Q/3B2R1/n5PP/3R3K w - - bm Rxg7; id "ECM.720"; +4rrk1/2pn2pb/p1p1qp2/1pb1pN2/P3P1PN/1P1P4/1BP2PK1/R2Q3R w - - bm Nxg7; id "ECM.721"; +r3r1k1/p3bppp/q1b2n2/5Q2/1p1B4/1BNR4/PPP3PP/2K2R2 w - - bm Rg3; id "ECM.722"; +r4rk1/1p1q1ppp/p1b4B/8/2R3R1/P2P4/1b1N1QPP/6K1 w - - bm Bxg7; id "ECM.723"; +rq3rk1/3b1ppp/p2bp3/3pB2Q/8/1B5P/PP3PP1/2RR2K1 w - - bm Bxg7; id "ECM.724"; +4kbr1/pp1bpp1p/3p1p2/3N4/1PBQP3/q7/P1r2PPP/R4RK1 b - - bm Rxg2+; id "ECM.725"; +2r3k1/1p2R1p1/p3n2p/2pq4/7P/1P1P2P1/PB1Q3K/8 w - - bm Bxg7; id "ECM.726"; +2rr2k1/4bppp/p1n1p3/3q4/1p1P2N1/2P3R1/P3QPPP/2B2RK1 w - - bm Nh6+; id "ECM.727"; +rq1r1bk1/1b3pp1/3pn2p/1n2BN1P/1P2P3/3R1NP1/3Q1PB1/2R3K1 w - - bm Bxg7; id "ECM.728"; +r1b5/ppqn2bk/3R2pp/2p2p2/2P1rN2/4BN2/PPQ2PPP/4R1K1 w - - bm Rxg6; id "ECM.729"; +3q1r2/1p1b1pk1/pn5p/3pN1pQ/3P3P/2r3B1/P4PP1/3RR1K1 w - - bm Nxf7; id "ECM.730"; +r1bqkbnr/pp2ppp1/2p4p/3n2N1/2BP4/5N2/PPP2PPP/R1BQK2R w KQkq - bm Nxf7; id "ECM.731"; +r2qr1k1/1ppb1p1p/p1np2p1/7Q/3PP2b/1B2N2P/PP3PP1/R1B2RK1 w - - bm Bxf7+; id "ECM.732"; +2r3k1/pbq1np1p/1p1b1Bp1/8/6QP/2P2N2/B4PP1/4R1K1 w - - bm Bxf7+; id "ECM.733"; +r3r1k1/1bqn1ppp/1pp2p2/8/3P4/1B4N1/PP3PPP/R2QR1K1 w - - bm Bxf7+; id "ECM.734"; +r3r1k1/pp3ppp/8/1Nbp3q/3NnBn1/2P5/PPQ2PPP/3R1RK1 b - - bm Ngxf2; id "ECM.735"; +r2r2k1/1b2qpp1/1p2n3/p1b1p2p/4P1n1/PP1B2PP/1B1NQP2/R3NRK1 b - - bm Nxf2; id "ECM.736"; +r2qr1k1/1b2bp1p/p3p1p1/1p2N1Bn/3P4/P6Q/1P3PPP/RB2R1K1 w - - bm Nxf7; id "ECM.737"; +r5k1/1pp3pp/1b1p1r2/pN1P1n2/P1P3nq/6N1/1P1B1PQP/4RRK1 b - - bm Nxf2; id "ECM.738"; +2rqnk1r/pp2bpp1/2p1pn1p/2P1N2P/3P1BP1/3BQ3/PP6/2K2R1R w - - bm Nxf7; id "ECM.739"; +2rq1rk1/1b2bppp/p1n5/1p1BN3/5B2/P7/1P3PPP/R2Q1RK1 w - - bm Nd7; id "ECM.740"; +3r1qrk/p1p5/bbp3pp/4p3/4Pp1N/2Pn3P/PPQN1PPB/R4RK1 b - - bm Nxf2; id "ECM.741"; +r2qr1k1/pb2bp1p/1pn1p1pB/8/2BP4/P1P2N2/4QPPP/3R1RK1 w - - bm d5; id "ECM.742"; +r3r1k1/1bq1nppp/p1np4/1ppBpN2/4P3/2PP1N2/PP3PPP/R2QR1K1 w - - bm Bxf7+; id "ECM.743"; +r5k1/p4ppp/3qpb2/1P2N3/1nBP4/1P5P/4QPP1/4R1K1 w - - bm Nxf7; id "ECM.744"; +r2qr1k1/1b1nbp1p/p3pp2/1p2N3/3P4/3B1N2/PP2QPPP/R2R2K1 w - - bm Nxf7; id "ECM.745"; +r3k2r/p1qb1p2/1p2p2p/3pPpN1/P1nP3Q/8/2P2PPP/R1B1R1K1 w kq - bm Nxf7; id "ECM.746"; +3qNk2/5p1p/1r3p2/2p5/Q1pb4/3b2P1/P4PBP/4R1K1 b - - bm Bxf2+; id "ECM.747"; +2r1r1k1/1pq1bp1p/p3pnp1/P2n2N1/7R/2P4P/1PB1QPP1/2B1R1K1 w - - bm Nxf7; id "ECM.748"; +r1bq2k1/pp1n1ppp/3b1n2/PQ1B3r/3N1P2/2N5/1PP3PP/R1B2RK1 w - - bm Bxf7+; id "ECM.749"; +2r1r1k1/5ppp/pq3b2/2pB1P2/2p2B2/5Q1P/Pn3PP1/2R1R1K1 w - - bm Bxf7+; id "ECM.750"; +r4rk1/ppRn1p2/6pb/2P1pq1p/3N4/P1QPn1Pb/1B1NPP1P/4R1KB b - - bm Qxf2+; id "ECM.751"; +r3kr2/1b2qp2/pp2p2N/4p2Q/8/2n5/P3B1PP/3R1R1K w q - bm Nxf7; id "ECM.752"; +b2r1rk1/pq2bpp1/1p2p2p/4N2n/2P2R2/1PB2N2/1P2QPPP/4R1K1 w - - bm Rxf7; id "ECM.753"; +rqb1k2r/1p1nbp1p/p4pp1/8/1PBN1P2/P1N1P3/7P/2RQ1RK1 w kq - bm Bxf7+; id "ECM.754"; +r2r2k1/4ppbp/5np1/p1q5/QnB1P3/5N2/1P3PPP/R1B2RK1 w - - bm Bxf7+; id "ECM.755"; +1r2q1k1/p3pp2/3p1bp1/2pP2N1/8/P5PB/2Q2PK1/1rBR4 w - - bm Nxf7; id "ECM.756"; +2rqrbk1/pb1n1p1p/1p2pnp1/4N3/2BP1N2/1P2Q3/PB3PPP/3R1RK1 w - - bm Nxf7; id "ECM.757"; +1r4k1/p4pp1/bqnrpn1p/2ppN3/2P2P1B/P3P3/1P2B1PP/1Q1R1RK1 w - - bm Bxf6; id "ECM.758"; +r1bqrbk1/5p1p/2pp2nB/pp5Q/4P3/PBNPR2P/1P4P1/R5K1 w - - bm Bxf7+; id "ECM.759"; +r1bqkb1r/1p3ppp/pn1P1n2/4p3/2B5/2N2N2/PP3PPP/R1BQ1RK1 w kq - bm Bxf7+; id "ECM.760"; +2rqr1k1/pp2nppp/3p2b1/6B1/2BNn1Q1/P7/1PP2PPP/2KRR3 w - - bm Bxf7+; id "ECM.761"; +r3r1k1/pbq1ppbp/1pp2np1/4N3/3P4/2P5/PPB1QPPP/R1B1R1K1 w - - bm Nxf7; id "ECM.762"; +r1b2rk1/p6p/2p3Pb/3pp1q1/8/2PB4/PP3PP1/RN1Q1K1R b - - bm Rxf2+; id "ECM.763"; +r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - - bm Nxf7; id "ECM.764"; +r1bqr1k1/1p1nnpb1/p5pp/2P1p1B1/B3N3/5N2/P4PPP/2RQR1K1 w - - bm Nd6; id "ECM.765"; +r1b1r1k1/pp2qpbp/2p3p1/2P5/3NnB2/7P/PPQ1PPB1/2RR2K1 b - - bm Nxf2; id "ECM.766"; +rn2r1k1/pp3p1p/3P2p1/2p1bbB1/2B5/2N5/Pq4PP/R2Q1RK1 w - - bm Bxf7+; id "ECM.767"; +5rk1/r2qnppp/p1nN4/2Q5/3PB3/4P3/6PP/R4RK1 w - - bm Nxf7; id "ECM.768"; +1bq2k2/1b1n1pp1/pp5p/2pBpN2/P3P2B/3Q1P2/1PP3PP/4K3 w - - bm Bxf7; id "ECM.769"; +rnb2rk1/pp3pbp/2p3pB/2q5/4P3/1BN5/PPP3PP/R2Q1R1K w - - bm Rxf7; id "ECM.770"; +3qr1k1/1br1bp1p/p3p1pB/1p1nN3/3PB3/7Q/PP3PPP/3RR1K1 w - - bm Nxf7; id "ECM.771"; +1qr1b1k1/4bpp1/pn2p2p/1p1nN3/3P4/P2BBN1Q/1P3PPP/4R1K1 w - - bm Bxh6; id "ECM.772"; +rr1q2k1/1p2bpp1/2p1p2p/P1Pn4/2NP4/3Q1RP1/5PKP/2B1R3 w - - bm Bxh6; id "ECM.773"; +r2r2k1/pb1nbpp1/1qp1pn1p/1p2N3/3P1B2/P1N1P3/BPQ2PPP/2R2RK1 w - - bm Bxh6; id "ECM.774"; +2r5/1p4bk/3p2rp/4pN2/1P2P1pR/2P2q2/QP6/1K5R w - - bm Rxh6+; id "ECM.775"; +r1b1r3/pp2Npbk/3pp2p/q5p1/2QNPP2/6P1/PPP3P1/2KR3R w - - bm Ndf5; id "ECM.776"; +r1q3r1/1ppQ2pk/3bNp1p/p3pP2/P3P3/7R/1PP3PP/3R2K1 w - - bm Rxh6+; id "ECM.777"; +4r1k1/p1pq1pp1/2p5/3p1b2/Q7/2P1B2P/P1P1rPP1/2R2RK1 b - - bm Bxh3; id "ECM.778"; +1rbqnr2/5p1k/p1np3p/1p1Np3/4P2P/1Q2B3/PPP1BP2/2KR3R w - - bm Bxh6; id "ECM.779"; +r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - - bm Bxh6; id "ECM.780"; +3r1r1k/p5p1/n1p2p1p/1qp2b2/N1R4R/1PB1P1P1/P2P3P/3Q2K1 w - - bm Rxh6+; id "ECM.781"; +r4rk1/2q1b1p1/p4p1p/n3pP2/1p2Q1N1/4B3/PPP3PP/4RR1K w - - bm Nxh6+; id "ECM.782"; +6rk/3b1n1p/1p1q3b/1PpNp3/2P1Pp2/2Q2NrP/5RP1/2R2B1K b - - bm Bxh3; id "ECM.783"; +r2q1rk1/ppp2pp1/1b2b2p/3n3Q/2Bp4/3P1N2/PPP2PPP/R1B1R1K1 w - - bm Bxh6; id "ECM.784"; +r3rbk1/1bp1qpp1/p6p/np2p2Q/4P2N/1BP4P/PP3PP1/R1B1R1K1 w - - bm Bg5; id "ECM.785"; +4q3/p2r1ppk/R6p/3n4/3B1Q2/4P2P/5PP1/6K1 w - - bm Rxh6+; id "ECM.786"; +7r/1p2qk2/pQ1p2p1/3Ppp2/P4b2/2P2PrP/1P2R1B1/4R2K b - - bm Rhxh3+; id "ECM.787"; +5rk1/Qp5p/3pp1p1/4n3/2P1P2q/5r1P/P3NPP1/3R1RK1 b - - bm Rxh3; id "ECM.788"; +2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - - bm Bxh6; id "ECM.789"; +3q1rk1/p2bbpp1/1rn4p/1pp2P2/3pBBP1/3P3P/PPPQ3N/R4RK1 w - - bm Bxh6; id "ECM.790"; +2br2k1/4qppp/p5r1/2pBp3/2P1Pn2/4Q2P/RP3PPK/1N4R1 b - - bm Bxh3; id "ECM.791"; +r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - - bm Bxh6; id "ECM.792"; +r5r1/pbn4k/1p1p1Ppp/2pPn3/4BQq1/1PN3P1/PB3PK1/3R1R2 w - - bm Qxh6+; id "ECM.793"; +r1b2rk1/pp2bpp1/4p2p/2q4Q/5nNB/2PB4/PP3PPP/2KR3R w - - bm Nxh6+; id "ECM.794"; +6k1/p4ppp/1pn1b1rr/8/PBpPp2q/2P1P1NP/5PP1/RR3QK1 b - - bm Bxh3; id "ECM.795"; +r1b2rk1/1p3pp1/p5Pp/2bpPp1Q/3N4/1Pq1B1R1/2P4P/3R2K1 w - - bm Bxh6; id "ECM.796"; +r2r2k1/pp1n1bp1/2p2p1p/b4N2/q2BR3/2QB2PP/1PP5/2KR4 w - - bm Nxh6+; id "ECM.797"; +3r2bk/1q4p1/p2P1N1p/2p1rP2/pb5R/7P/1P4P1/2Q2RK1 w - - bm Rxh6+; id "ECM.798"; +2b1rk2/r6p/1pP1p1p1/p2pNnR1/5Q2/P1B4q/1PP2P1P/1K4R1 w - - bm Nxg6+; id "ECM.799"; +6R1/6Q1/3q2p1/5p1p/P3p1k1/1P1r2P1/5PK1/8 b - - bm Rxg3+; id "ECM.800"; +r6r/ppnqpk2/3pbpp1/5N2/1PP1P3/5RR1/P2QB1PP/6K1 w - - bm Nh6+; id "ECM.801"; +3r3r/p4pk1/5Rp1/3q4/1p1P2RQ/5N2/P1P4P/2b4K w - - bm Rfxg6+; id "ECM.802"; +2b2r1k/2p3pp/2Nb4/pP5q/2PP4/P4pP1/5P1P/R1BQ2K1 b - - bm Bxg3; id "ECM.803"; +r1bq2k1/pp3r1p/2n1p1p1/3pP3/6Q1/2PB2P1/P4PK1/R1B4R w - - bm Bxg6; id "ECM.804"; +3q1rk1/2r4p/n1p1n1pQ/p2pP3/Np1P2R1/5PN1/PP3KP1/2R5 w - - bm Rxg6+; id "ECM.805"; +2Nq1rk1/6pp/b1p2b2/p6Q/np1p4/6P1/PB3PBP/R3R1K1 w - - bm Be4; id "ECM.806"; +r2r4/p4pk1/2p3p1/1p1nPR2/5p1Q/2N5/PPPq4/1K4R1 w - - bm e6; id "ECM.807"; +2kr3r/pbq3p1/1p2pp2/2b4n/2P1B3/1P1N2Pp/PB2QP1P/R4RK1 b - - bm Nxg3; id "ECM.808"; +r5k1/1p2Rpb1/3p1np1/2nP2B1/1qP5/1pN1Q2P/P5P1/1B4K1 w - - bm Bxg6; id "ECM.809"; +2rqr1k1/pb2bp1p/1pn1pnpB/4N3/3P4/P1N3R1/1P3PPP/RB1Q2K1 w - - bm Rxg6+; id "ECM.810"; +2r5/pp2qr1k/1nb3pp/2ppBp2/2P4P/3B2R1/P3QPP1/1R4K1 w - - bm Rxg6; id "ECM.811"; +3rr3/3q1p1k/p2P2pp/1bp1b3/5N2/6QP/P1B3P1/3RR1K1 w - - bm Bxg6+; id "ECM.812"; +r2q1rk1/pp2ppb1/3pn1pQ/3R4/2P3B1/4BR2/PP4PP/6K1 w - - bm Qxg6; id "ECM.813"; +1n1b1rk1/r4p1p/p1p2qpQ/P3Np2/2BP4/2P1R3/5PPP/R5K1 w - - bm Rb1; id "ECM.814"; +6rk/pb3p1p/3bpPq1/3P4/1p1B3r/1B4P1/PPRQ1R1P/6K1 b - - bm Bxg3; id "ECM.815"; +3rr1k1/pb2bp1p/3qp1pB/1p2N3/3P2Q1/2P1R3/P4PPP/4R1K1 w - - bm Nxg6; id "ECM.816"; +r2q1rk1/pb1nbp1p/1p2p1p1/4N1BQ/2PP4/P7/5PPP/RB2R1K1 w - - bm Nxg6; id "ECM.817"; +1Q4R1/r2qbp2/3p1kp1/3Bp2p/8/3PP1P1/5PKP/8 w - - bm Rxg6+; id "ECM.818"; +r3r1k1/b1p2pn1/p2q1Bp1/1p1bN1Qp/3P4/2P4P/PPB2PP1/R3R1K1 w - - bm Nxg6; id "ECM.819"; +3r2k1/p1rn1p1p/1p2pp2/6q1/3PQNP1/5P2/P1P4R/R5K1 w - - bm Nxe6; id "ECM.820"; +k2r3r/ppq2p1p/n1pb1Pp1/4p3/2Q5/1R2B1P1/PPP2PBP/R5K1 w - - bm Rxb7; id "ECM.821"; +1rb2rk1/p1p1qppp/2p2n2/3P4/1b3P2/2NB4/PPPBQ1PP/2KR3R b - - bm Ba3; id "ECM.822"; +k7/pp1N4/4P3/5P2/8/5p2/1R6/B4Knq w - - bm Nb6+; id "ECM.823"; +4rrk1/p5pp/1p4q1/3p2n1/2pP2P1/P1P1PP2/3B2K1/1R2QR2 b - - bm Nxf3; id "ECM.824"; +1q1r3k/3P1pp1/ppBR1n1p/4Q2P/P4P2/8/5PK1/8 w - - bm Rxf6; id "ECM.825"; +1rbq2k1/b1p3pp/p1Pp4/3Ppr2/8/5N2/PPQ2PPP/R1B2RK1 b - - bm Rxf3; id "ECM.826"; +1r1q1r1k/2p3pp/1p1bQ3/p7/1PP5/Pn3B2/1B3PPP/R4RK1 b - - bm Rxf3; id "ECM.827"; +r4rk1/2p1qpp1/p1p5/2Ppn2b/2PQ1N1p/4P3/PB3PPP/R4RK1 b - - bm Nf3+; id "ECM.828"; +r1bq1rk1/1p2bppp/p3p3/n3P3/4N3/1P1P1N2/PB4PP/R3QR1K w - - bm Nf6+; id "ECM.829"; +1n2r3/p1pq1kp1/1b1pNpp1/3P4/5RP1/3Q3P/1B3P2/6K1 w - - bm Bxf6; id "ECM.830"; +r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - - bm Nf3+; id "ECM.831"; +3r1b2/p4bkp/1p1P1p2/r3p1p1/2q1N3/2N2P2/1P1R2PP/2QR3K w - - bm Nxf6; id "ECM.832"; +rqbn1rk1/1p3ppp/p3p3/8/4NP2/8/PPP1BQPP/1K1R3R w - - bm Nf6+; id "ECM.833"; +r1b1kb1r/1p4pp/p2ppn2/8/2qNP3/2N1B3/PPP3PP/R2Q1RK1 w kq - bm Rxf6; id "ECM.834"; +1rn5/p3Bk1p/1pq1bpp1/P3p3/1Q2P2P/2P3P1/5PB1/1R4K1 w - - bm Bxf6; id "ECM.835"; +2nr2k1/1pq1bppp/p1p5/2p1P1PQ/2P1NP2/1PNR4/P6P/6K1 w - - bm Nf6+; id "ECM.836"; +6nk/pn2qr1r/1pbp1p1p/2p1pPpN/P1P1P1PP/2PP3R/7Q/2BBK2R w K - bm Nxf6; id "ECM.837"; +7r/4p1k1/p3Pppp/1p6/3N1R2/3PQ2P/qr4b1/5RK1 w - - bm Rxf6; id "ECM.838"; +r3k2r/1bq1bp2/p3p1pp/1p2P3/3NpP2/4B1Q1/PPP3PP/1K1R3R w kq - bm Nxe6; id "ECM.839"; +rnbqkb1r/pp1n1p2/4p1p1/1N1pP2p/1P4Q1/3B1N2/P1PB1PPP/R3K2R w KQkq - bm Qxe6+; id "ECM.840"; +r1b1kb1r/1p1n1ppp/p2ppn2/6BB/2qNP3/2N5/PPP2PPP/R2Q1RK1 w kq - bm Nxe6; id "ECM.841"; +r1b1k1nr/3n1p1p/1qpBp1p1/pp2b3/4PN2/PBN2Q2/1PP2PPP/2KR3R w kq - bm Nxe6; id "ECM.842"; +2r2rk1/1b3ppp/pq2p3/1pbn2N1/3B3P/1B4P1/P1P1QP2/2KRR3 w - - bm Qh5; id "ECM.843"; +r3k2r/pp1n1pb1/1qn1p1p1/2p3Pp/4R2P/2NP2QB/PPPB1P2/2K1R3 w kq - bm Rxe6+; id "ECM.844"; +r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq - bm Nxe6; id "ECM.845"; +3qr1k1/rp3pbp/2p3p1/3p1b2/N1nP4/P2NP3/1PQ2PPP/1BRR2K1 b - - bm Rxe3; id "ECM.846"; +rnbqkb1r/1p1n1pp1/p3p2p/3pP3/3p1NQP/2N5/P1PB1PP1/R3KB1R w KQkq - bm Nxe6; id "ECM.847"; +3r1b1R/3bkpp1/1p1np3/1BqpPPP1/PQ1N4/8/1PP5/1K6 w - - bm f6+; id "ECM.848"; +4r1k1/pp2n2p/1r1n1bp1/q2p1pB1/3P3N/P1NQ1P1P/1PP3R1/1K5R b - - bm Rxb2+; id "ECM.849"; +3r2k1/2p1bppp/4b3/p2pP3/qr1N1B1P/8/1PPQ2P1/1K1RR3 b - - bm Rxb2+; id "ECM.850"; +1k1r3r/ppR2ppp/1q2b3/1N6/4Q3/8/PP3PPP/4R1K1 w - - bm Rxb7+; id "ECM.851"; +1r3rk1/5pbp/p2Pp1p1/q1n3P1/2p2P1P/2N1Q2R/PP6/1BKR4 b - - bm Rxb2; id "ECM.852"; +rr4k1/5p1p/n2p1npQ/q1pP4/6P1/2N2P1N/PP1R3P/2K4R b - - bm Rxb2; id "ECM.853"; +1k2bb1r/1p3p1p/p2qpP1p/3pN3/3P1Q2/2RB2P1/PP3P1P/6K1 w - - bm Qc1; id "ECM.854"; +1r4k1/1r3p2/p1p1b1pQ/q3P3/P7/bPN1R1P1/2P4P/1K1R1B2 b - - bm Bxb3; id "ECM.855"; +5rk1/5rp1/p2qb3/R2Np2Q/3bP2B/7P/P5PK/1R6 b - - bm Rf1; id "ECM.856"; +6k1/5p2/R3p1p1/1pq1PpB1/4nP2/5Q1P/P2r2PK/8 w - - bm Ra8+; id "ECM.857"; +3r1rk1/p3q1pp/2Rb4/3P4/8/1P2Qp2/PB3PPP/3R2K1 b - - bm Bxh2+; id "ECM.858"; +1r6/5pk1/p1b2qpp/P1P1n3/1N6/Q5NP/5PP1/3R2K1 b - - bm Bxg2; id "ECM.859"; +1r4k1/1q3pb1/r1b3p1/pp1Qp3/P3P3/1B2BP2/1PP3P1/1K1R3R w - - bm Qd8+; id "ECM.860"; +2R5/p3q1kp/6p1/3p4/b2P2p1/Pr4N1/5Q2/3K3R w - - bm Nf5+; id "ECM.861"; +3r4/kb6/pp6/4R1pr/PPpq4/2N3Q1/2P3PP/3R3K b - - bm Rf8; id "ECM.862"; +4r1k1/5p1p/4q1p1/8/Q5n1/3B2P1/P4P1P/2R3K1 b - - bm Nxf2; id "ECM.863"; +8/2q1np1k/6p1/1PPn3p/8/P2Q3P/6P1/2R4K b - - bm Nf5; id "ECM.864"; +r1bq1rk1/ppp1n1bn/3p2p1/3Pp1Pp/1PP1Pp1P/2NN1P2/P3B3/R1BQ1RK1 b - - bm Nxg5; id "ECM.865"; +7R/1p1r4/2b2p2/2Pp1qk1/3P1bp1/3N4/2Q2PB1/6K1 w - - bm Rg8+; id "ECM.866"; +r6r/1pn1b1k1/2p1pq2/2Pp3p/p2P1Pp1/P2BP1P1/1P2QB2/3R2KR w - - bm Rxh5; id "ECM.867"; +1r4k1/pp4pp/2n1b3/1Rq1p3/2P2r2/P1B2P2/2Q1B1PP/3R1K2 b - - bm Rxf3+; id "ECM.868"; +7k/1p4p1/2p4r/5p2/p1QP1q2/2P2PR1/r4P1P/4R2K b - - bm Rxh2+; id "ECM.869"; +1r3r2/6kp/3p1pp1/qnp1pP2/1p2P2N/3P4/PPPQ1P1P/1K1R2R1 w - - bm fxg6; id "ECM.870"; +5rk1/1rP3pp/p4n2/3Pp3/1P2Pq2/2Q4P/P5P1/R3R1K1 b - - bm Rxc7; id "ECM.871"; +2rq1rk1/5ppp/2b1pb2/np6/6N1/2NBB3/PP3PPP/R2Q2K1 w - - bm Bb6; id "ECM.872"; +5r2/p2p2kp/3PnNp1/1qr1Pp2/2p5/P1R5/6PP/2Q1R1K1 w - - bm Qh6+; id "ECM.873"; +2Qbq1k1/6p1/1p4Np/4p2P/3rP3/8/3p2PK/3R4 w - - bm Rf1; id "ECM.874"; +2kr1br1/ppp2p1p/2n1p1q1/2Nn4/3P4/1Q2PB2/PP1B1P1P/2R1K2R b K - bm Qg1+; id "ECM.875"; +2K5/6p1/kp2P3/1p6/1P6/2P1P2p/8/1r6 w - - bm e7; id "ECM.876"; +2kr3r/1Rp1bpp1/p6q/Q3P3/2P5/3p1NP1/P3P2P/1R4K1 b - - bm Qe3+; id "ECM.877"; +6k1/1R4pp/2p5/8/P1rNp3/6Pb/4PK2/8 w - - bm a5; id "ECM.878"; +r2r2k1/pp3ppp/2q5/2p5/2P1P1n1/P4P1b/1BQ1BP1P/R3R2K b - - bm Rd2; id "ECM.879"; diff --git a/tests/ecm016_only.epd b/tests/ecm016_only.epd new file mode 100644 index 0000000..cf370f2 --- /dev/null +++ b/tests/ecm016_only.epd @@ -0,0 +1 @@ +2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - - bm Rxc5; id "ECM.016"; diff --git a/tests/ecm_confident.epd b/tests/ecm_confident.epd new file mode 100644 index 0000000..5cdf188 --- /dev/null +++ b/tests/ecm_confident.epd @@ -0,0 +1,535 @@ +2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - bm f7+; id "ECM.001"; +7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - bm Bxf3+; id "ECM.002"; +4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - bm Qb5; id "ECM.003"; +2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - bm Rcxc5; id "ECM.004"; +6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - bm Bxf2+; id "ECM.005"; +3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - bm Bxf6+; id "ECM.006"; +3rr1k1/pb3pp1/1p1q1b1p/1P2NQ2/3P4/P1NB4/3K1P1P/2R3R1 w - - bm Rxg7+; id "ECM.007"; +r1b1r1k1/p1p3pp/2p2n2/2bp4/5P2/3BBQPq/PPPK3P/R4N1R b - - bm Bg4; id "ECM.008"; +3r4/1b2k3/1pq1pp2/p3n1pr/2P5/5PPN/PP1N1QP1/R2R2K1 b - - bm Rxh3; id "ECM.009"; +2r4k/pB4bp/6p1/6q1/1P1n4/2N5/P4PPP/2R1Q1K1 b - - bm Qxc1; id "ECM.010"; +5rk1/7p/p1N5/3pNp2/2bPnqpQ/P7/1P3PPP/4R1K1 w - - bm Ne7+; id "ECM.012"; +rnb2rk1/pp2np1p/2p2q1b/8/2BPPN2/2P2Q2/PP4PP/R1B2RK1 w - - bm Nd5; id "ECM.013"; +r3kb1r/pp2pppp/3q4/3Pn3/6b1/2N1BN2/PP3PPP/R2QKB1R w KQkq - bm Nxe5; id "ECM.015"; +r1b1k3/5p1p/p1p5/3np3/1b2N3/4B3/PPP1BPrP/2KR3R w q - bm Rxd5; id "ECM.017"; +1rr1nbk1/5ppp/3p4/1q1PpN2/np2P3/5Q1P/P1BB1PP1/2R1R1K1 w - - bm Bxa4; id "ECM.020"; +r7/5kp1/2p1p2p/1p1n3P/2rP4/2P3R1/PK2RPP1/2B5 b - - bm Rxc3; id "ECM.021"; +r1r3k1/p3qpp1/b1P4p/3p4/3Nn3/4P3/P1Q2PPP/1BR1K2R b K - bm Qb4+; id "ECM.022"; +rn3rk1/4bppp/1q2p3/p2pP3/8/1PN2B1P/P4PP1/2RQ1RK1 w - - bm Bxd5; id "ECM.023"; +2b3k1/5p1p/7b/p2B3p/3P4/P2Q1N1P/1q3PP1/6K1 w - - bm Bxf7+; id "ECM.025"; +r1b5/4k3/p7/3p1n2/3Bp3/2P2r1P/PPBK1P2/4R2R w - - bm Bc5+; id "ECM.026"; +r4rk1/1b3Npp/p7/1p3Q2/3P4/1B2q3/P5PP/3n1R1K b - - bm Bxg2+; id "ECM.027"; +r2q1rk1/p3b1pp/2p5/1pn5/1n1Bp1b1/1P6/PQ1PPP2/2RNKBNR b K - bm Bxe2; id "ECM.030"; +3r2k1/p2r1p1p/1p2p1p1/q4n2/3P4/PQ1R3P/1P2NPP1/3R2K1 b - - bm Nxd4; id "ECM.031"; +2bnr1k1/2q2ppp/p7/2p1b3/2N1B3/R7/1P2QPPP/2B3K1 w - - bm Nxe5; id "ECM.032"; +r1b2r1k/3nN2p/p2Q1p2/8/4PP2/1R6/q1PK2PP/4R3 w - - bm Qd5; id "ECM.033"; +1nk1r1r1/pp2n1pp/4p3/q2pPp1N/b1pP1P2/B1P2R2/2P1B1PP/R2Q2K1 w - - bm Nf6; id "ECM.034"; +2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - bm Rxc8; id "ECM.035"; +br1r2k1/1q4p1/p2ppb1p/2p2p2/2P1n3/Pn2P2P/QPR2PPB/2NRNBK1 b - - bm Nxc1; id "ECM.036"; +2k4r/ppp1n1p1/2n2qb1/2N5/Q1P3p1/P2r3P/1P3PB1/R1B2RK1 w - - bm Qb5; id "ECM.037"; +8/6bk/1B1R4/6p1/2bNP3/4KP2/1r6/8 b - - bm Be5; id "ECM.038"; +r1b1rnk1/1p3pb1/1qpp2p1/2n5/2PNP2p/1PN3PP/3R1PBK/BR1Q4 b - - bm Rxa1; id "ECM.039"; +5rk1/1b3ppp/p3p3/1p1q2N1/4n3/6P1/PP2PPBP/2Q2RK1 b - - bm Nxg3; id "ECM.041"; +2kr3r/pppq2p1/1bn1R3/6N1/1P6/1QN1B1p1/P4PP1/R5K1 b - - bm gxf2+; id "ECM.042"; +r4rk1/pp4pp/2nqb3/3p4/8/2NB4/PP1Q1PPP/4RRK1 w - - bm Bxh7+; id "ECM.044"; +3rk1r1/3b1p1p/p2BpQ2/8/2q5/2P5/PP3PPP/3R2K1 b - - bm Rxg2+; id "ECM.045"; +3r1rk1/4pp1p/p1Q1b1p1/3N4/3b4/5B2/Pq3PPP/R4RK1 b - - bm Bxd5; id "ECM.046"; +5bk1/1bqn1r1p/p3Q1p1/4p3/1PN1Pp2/P1N4P/5PP1/R1BR2K1 w - - bm Qxf7+; id "ECM.047"; +3rkb1r/1p3p2/p1n1p3/q5pp/2PpP3/1P4P1/P1Q1BPKP/R2N3R b k - bm d3; id "ECM.048"; +5rk1/1r1qbnnp/R2p2p1/1p1Pp3/1Pp1P1N1/2P1B1NP/5QP1/5R1K w - - bm Qxf7+; id "ECM.049"; +2kr1b1R/1b3pp1/p2pp3/1pq3P1/2nQPP2/P1N5/1PP1BB2/1K6 w - - bm Rxf8; id "ECM.050"; +r3nb1Q/p1q2kr1/2p3p1/2ppnpP1/1P3N2/4P3/PB1P4/1R2KB1R w K - bm Qxf8+; id "ECM.052"; +r1bq1rk1/pp3pbp/2pp1np1/2n3B1/2PNP3/2N2P2/PP1QB1PP/R4RK1 b - - bm Nfxe4; id "ECM.053"; +5r2/1b2k2p/3bp3/5PP1/Bn1Q3P/1N6/1Pr5/1K3R2 b - - bm Rxb2+; id "ECM.055"; +r1b2r1k/1pq3bp/8/3Qp2n/1P1n1pp1/2NP2P1/3BPPBP/1R2NRK1 b - - bm Qxc3; id "ECM.057"; +4qk2/pp3pp1/1nbr3p/2p5/5N2/2P1Q3/PPB2PPP/2K1R3 w - - bm Ng6+; id "ECM.058"; +3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - bm Rd5; id "ECM.059"; +r4rk1/1b3ppp/p2q1n2/1p2N3/3P4/1B6/P1Q2PPP/2R1R1K1 w - - bm Nxf7; id "ECM.061"; +2rq1r2/pp3pnk/2n1b1pp/3pQ3/3P1N2/P1N5/1P3PPP/1BR2RK1 w - - bm Bxg6+; id "ECM.062"; +4nk2/r1r1bppp/pN2p3/2np4/8/BPN3PP/P3PPK1/2RR4 w - - bm Ncxd5; id "ECM.063"; +r4r1k/2pqn1b1/p1bp2pp/1p2pn2/4N3/2PP1PPQ/PPB4P/R1B1RNK1 b - - bm Nd4; id "ECM.064"; +r1bQ1nk1/bp3ppp/p7/3B4/1P6/P3P1P1/2P4P/q1B2RK1 b - - bm Bxe3+; id "ECM.065"; +3r1rk1/1b2bppp/2q1pn2/pp4Q1/3B1P2/PBN5/1PP3PP/R2R3K b - - bm Rxd4; id "ECM.066"; +2nq2k1/2r3pp/p1p1rp2/PpQ1N3/1P1PR3/8/5PPP/2R3K1 w - - bm Nf7; id "ECM.067"; +3r4/p2nrpkp/2B1p3/2P2pP1/3R3Q/q7/6PP/6RK w - - bm g6; id "ECM.069"; +5r1k/p6p/1p1p1qp1/2pQpr2/8/2PP2P1/PP2RPKP/5R2 b - - bm e4; id "ECM.070"; +2r2rk1/5pbp/p5p1/3P2q1/1QbN4/5P2/P4BPP/2RR2K1 b - - bm Bf1; id "ECM.072"; +r1bqnrk1/pp2ppb1/1np3pp/4P1N1/5P2/2NBB3/PPP3PP/R2Q1RK1 w - - bm Nh7; id "ECM.073"; +3nk3/3q1p2/1B3pr1/4p3/bP2P2p/r2B4/2Q2RPP/3R2K1 w - - bm Bb5; id "ECM.074"; +3rnr1k/pp3ppp/4b3/2p1qNP1/P2pPR2/1P1P2Q1/2P3BP/5RK1 w - - bm Nh6; id "ECM.075"; +5rk1/3r1p1p/3b2pQ/8/4q3/4B2P/3R1PP1/4R1K1 w - - bm Rxd6; id "ECM.077"; +4rrk1/1bp2ppp/p1q2b1B/1pn2B2/4N1Q1/2P4P/PP3PP1/3RR1K1 w - - bm Nxc5; id "ECM.078"; +2rnrbnk/3q1ppp/p1p5/3p1P2/1p1PPN2/4BQ1R/PP1N2PP/3R2K1 w - - bm Ng6+; id "ECM.079"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "ECM.080"; +1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - - bm exf6; id "ECM.082"; +r2qr1k1/pp3pbp/3p1np1/2pP1bB1/2P1N3/3Q1PN1/PP4PP/R4RK1 b - - bm Nxe4; id "ECM.083"; +r1br2k1/ppb1qpp1/2P4p/2n1p3/4B3/P1N2N2/1P3PPP/2RQ1RK1 w - - bm Nd5; id "ECM.085"; +2r3k1/1nqbrp2/p5pp/1p1Pp1N1/8/1P5P/P1B2PP1/2RQR1K1 w - - bm Nxf7; id "ECM.086"; +2r1rbk1/1b3ppp/pp6/2q1pNP1/Pn1RP3/2N5/1PP2QBP/5R1K w - - bm Nh6+; id "ECM.087"; +r1r2qkb/4pp1p/pBbp3P/3Nn1P1/4Q3/1B6/PPP5/1K1R2R1 w - - bm g6; id "ECM.089"; +r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - - bm Re7; id "ECM.090"; +5rk1/6pp/8/2Q4q/N2pP3/4b1Pb/4PP1K/1R3R2 b - - bm Bxf1+; id "ECM.092"; +1r1rb1k1/2p3pp/p2q1p2/3PpP1Q/Pp1bP2N/1B5R/1P4PP/2B4K w - - bm Qxh7+; id "ECM.094"; +r1b4k/p2n1Bpp/1p1Q1n2/5p2/3P4/P3BqP1/1P3P1P/R4RK1 b - - bm Bb7; id "ECM.095"; +r2nk1r1/pb3q1p/4p3/3p2pQ/8/BP6/P4PPP/2R1R1K1 w q - bm Rc7; id "ECM.098"; +rr4k1/2p1ppb1/3pbnpp/q1pP4/4P3/1PNNBP1P/P1KR2P1/2Q4R b - - bm Qxc3+; id "ECM.100"; +1r3rk1/3Q2pp/p3p3/6B1/3np3/6R1/PqP1B2P/3K2R1 w - - bm Qxg7+; id "ECM.101"; +2r5/p4Q2/k1bBp3/4P3/p1nq4/5B2/2Pr2P1/1R1RK3 w - - bm Qb7+; id "ECM.102"; +5rk1/p1pb2pp/2p5/3p3q/2P3n1/1Q4BN/PP1Np1KP/R3R3 b - - bm Qxh3+; id "ECM.103"; +2r1nk2/4qpbQ/4b3/1p2RpP1/4P3/p7/PBP5/1K5R w - - bm Qxg7+; id "ECM.104"; +2kr4/1bpr3p/4R3/1pQ5/8/6B1/3q2PP/2R4K w - - bm Qxc7+; id "ECM.105"; +r4rk1/1pbb2pp/p1p1p2q/2Pp4/1P1Pn3/P3B2P/2Q1BPP1/R4RNK b - - bm Qxe3; id "ECM.106"; +r1k4r/ppp1b3/5Npp/4pb1Q/8/1B2B3/PqP2PPP/2RR2K1 w - - bm Qxf5+; id "ECM.107"; +2kr1r2/1pp3pp/1n2p1b1/pN2B3/P1q5/1Q1p3P/5PP1/R4R1K w - - bm Rac1; id "ECM.109"; +2kr1bnr/1ppq4/p3bp2/6pp/4p3/2N2NBP/PP3PP1/2RQ1RK1 w - - bm Na4; id "ECM.110"; +r2q2rk/p3bp1p/4b1p1/3pP2R/1p1B4/3BQ3/PPP3PP/5R1K w - - bm Rxf7; id "ECM.111"; +r1b1Q3/6pk/p6p/1pq1n3/4N3/8/PPP3PP/R6K b - - bm Qc6; id "ECM.112"; +q6r/pp3pkp/5np1/4Q3/4P3/6N1/P4PPP/5RK1 w - - bm Nh5+; id "ECM.113"; +r1b1rk2/pp3ppQ/1np5/4q3/2B4N/4P3/PP3PP1/2R2K1R w - - bm Qg8+; id "ECM.114"; +r3r1k1/p2N1pp1/1pn1p3/q1n5/2PQ4/P3B3/4PPKP/R5R1 w - - bm Nf6+; id "ECM.116"; +3qr1k1/1p1bppbp/p2p2p1/2rPn3/P2N4/4BP2/1PPQ2PP/R2R1BK1 w - - bm Ne6; id "ECM.118"; +8/R5p1/6k1/pr2p1b1/4K3/7P/5P2/6R1 w - - bm h4; id "ECM.120"; +5rk1/1b1r1p2/p1q1pQp1/1p2P2p/8/1BP1NR2/PP1n2PP/5R1K w - - bm Bxe6; id "ECM.121"; +6k1/p1p2r2/1p1p1P1Q/3P4/2P5/5qr1/PP4RP/6RK w - - bm Qh3; id "ECM.122"; +3b2rk/7p/p7/2pbqNrn/Pp1p1R2/1P1Q2P1/1BPN1R1P/6K1 w - - bm Rxd4; id "ECM.124"; +1rbr2k1/1pq1bp1p/p1pNn1p1/2n1p3/2B1P2P/1NQ1BP2/PP4P1/1K1R3R w - - bm Nxf7; id "ECM.125"; +r4rk1/1pp1b1pp/p1q5/3pPp2/3Pn3/P3N3/1P3PPP/R1BQR1K1 w - - bm Qb3; id "ECM.126"; +rbbq1rk1/p3nppp/1p2p3/8/1B1pN3/P2B4/1P3PPP/2RQ1RK1 w - - bm Nf6+; id "ECM.127"; +5r1k/1p2qp1p/p4R1Q/P1p5/2Prp3/7P/1P4P1/5R1K w - - bm Re6; id "ECM.129"; +rnbq1rk1/pp2b1pp/5n2/2pPp3/2P1N3/3B1N2/PP4PP/R1BQK2R w KQ - bm d6; id "ECM.132"; +2n1rbk1/5pp1/7p/qP1pp3/4b1Q1/1B5P/1P1N1PP1/2B1R1K1 w - - bm Rxe4; id "ECM.133"; +4k3/2R2p2/5p1p/8/rb6/1N6/5PPP/5K2 w - - bm Rc4; id "ECM.134"; +2r1k3/p3nrR1/1p1p4/2p1p1p1/2P1B3/2PP1P2/P5K1/7R w - - bm Rh8+; id "ECM.136"; +2rr1bk1/5p1p/pPN2np1/3Bp3/2Q1n3/1P2B1Pq/P3PP2/R2R2K1 b - - bm Rxd5; id "ECM.138"; +3r2k1/1p4pp/p1q1p3/3p1B2/bP1B2P1/P4Q2/5PKP/2b2R2 w - - bm Rxc1; id "ECM.139"; +rnb1r1k1/pp5p/2pp2p1/4b3/2P1P2q/1NN1BPp1/PP1QB1P1/3RR1K1 b - - bm Bf4; id "ECM.140"; +4r1k1/3R1ppp/p2p4/5PP1/2q2P2/2n2B2/P1P3QP/1r3R1K w - - bm Rxb1; id "ECM.143"; +2r3k1/pp2n3/6pQ/4q3/8/2P1p1P1/P5BP/3R2K1 w - - bm Bd5+; id "ECM.144"; +r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - bm g6; id "ECM.147"; +5r2/1b3pk1/pqrpp1p1/4n1Nn/1p2PP1P/8/PPPQB3/1NKR2R1 b - - bm Rfc8; id "ECM.148"; +1r2k2r/p5bp/4p1p1/q2pn3/1p2N1P1/6QP/PPP5/1KBR3R w k - bm Bh6; id "ECM.149"; +7r/kppQP1pp/p7/2qp1R2/4n3/1P2b2P/P1P3PK/R7 b - - bm Re8; id "ECM.151"; +8/1bq3kp/p5p1/1pb1p3/4P2P/2PQ2P1/1P5B/5N1K b - - bm Qd8; id "ECM.153"; +6k1/p1q2pp1/2n2b2/3B2Pp/2P2P2/5N1P/Pr1Q2K1/4R3 w - - bm Re8+; id "ECM.156"; +r1r3k1/p4n2/3p4/5NpR/8/2q2P2/P1PQ4/2K4R w - - bm Rh8+; id "ECM.157"; +8/p5Q1/2ppq2p/3n1ppk/3B4/2P2P1P/P5P1/6K1 w - - bm g4+; id "ECM.158"; +r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - - bm Nd6; id "ECM.159"; +1r2k2r/3q2pp/p3pp2/P7/2P1Q3/8/1nB3PP/1R3R1K w k - bm Ba4; id "ECM.160"; +r1bq3k/ppp2Qp1/2n1p2p/6N1/2BPN3/2P1n3/PP4PP/R5K1 w - - bm Nf6; id "ECM.161"; +3r1rk1/p1p1qp1p/2p1b1p1/8/P2PRP2/2P1NQ2/6PP/R5K1 w - - bm f5; id "ECM.165"; +4r1k1/p4ppp/4q2r/1Q6/4p3/4P1P1/P4P1P/2RR2K1 w - - bm Rd6; id "ECM.168"; +8/5p1k/4p1p1/3p2K1/3P1Q1P/P4P2/7q/8 b - - bm f6+; id "ECM.169"; +r4r2/6k1/3p4/2pPp2p/4Pqp1/3P1P2/1R2Q1KP/5R2 b - - bm Ra1; id "ECM.170"; +4r1k1/1np1r1pp/1ppp1q2/6N1/1P3P2/4RQP1/7P/4R1K1 w - - bm Qh5; id "ECM.171"; +r4rk1/pp3p1p/3pq1p1/2nNp3/3R1P2/7Q/PP4PP/5RK1 w - - bm f5; id "ECM.172"; +3qn2k/1p3Bp1/rbn4p/2p5/p1P2p2/P2b2PP/1BQNRP2/1R4K1 w - - bm Qxd3; id "ECM.173"; +3r1rk1/1pp4p/1q3bp1/p3p3/P2n1P2/2BB3P/1PP2QP1/R4RK1 b - - bm Bh4; id "ECM.174"; +1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - bm Nxf7; id "ECM.176"; +r3kb1r/2q2p2/3p4/ppp1n1B1/P6P/1B3pQ1/1PP3b1/2KRR3 w kq - bm Bd5; id "ECM.177"; +r1b2rk1/1p4pp/p1n3q1/4ppN1/7Q/2P1B3/P1P2PPP/R2R2K1 w - - bm Rd6; id "ECM.178"; +1rb2r2/1pR1N2p/p2R2pk/5p2/4pP2/1P1nP3/P4P1P/5BK1 w - - bm Rf6; id "ECM.179"; +3r2k1/p2q1r1p/1p1N2p1/1PpP4/3b1Bn1/1Q4Pb/1P2RP1P/R5KB b - - bm Qxd6; id "ECM.181"; +3r2k1/p2r1p1p/1pR1p1qP/3P1pP1/3R4/1P2Q3/P4K2/8 w - - bm dxe6; id "ECM.183"; +r4k2/p1pr1ppp/2q5/3PR2P/3Q4/8/6P1/5RK1 w - - bm Re7; id "ECM.185"; +r3k2r/pb1n1pbp/4p1p1/q1n1P3/Bp1N1N2/4B3/PP3PPP/R2Q1RK1 w kq - bm Ndxe6; id "ECM.188"; +5rk1/Q2nqppp/5n2/2p5/8/1B2PP1P/Pr1B1P2/R3K2R b KQ - bm Ne4; id "ECM.189"; +5r1k/pp1n1p1p/1b1qpP2/8/1PrN4/P1N1Q1P1/7P/3R1R1K w - - bm Qh6; id "ECM.192"; +1r3rk1/p4pbp/q1p2pp1/3p1b2/1n1P1P1B/PB3N2/1PPQR1PP/2KR4 b - - bm Bxc2; id "ECM.194"; +1rbr2k1/4qp2/p1n2bpp/1pp1p1N1/4P3/2P1BQ1P/PPB2PP1/3RR1K1 w - - bm Bxc5; id "ECM.195"; +2r2rk1/1p1q1ppp/1p3n2/3p1N2/4n3/1N3Q2/PPP2PPP/R2R2K1 w - - bm Rxd5; id "ECM.196"; +rn3rk1/pp2ppbp/6p1/2R3N1/2B3b1/q3B3/P1P1Q1PP/5RK1 w - - bm Rxf7; id "ECM.197"; +r1nqr2k/1p1b1Q1p/p5p1/P1pPb3/5B2/2N5/BP4PP/R4RK1 w - - bm Qf8+; id "ECM.199"; +8/k3r1b1/Pp2rpp1/1qpQ4/4nB2/2P2NP1/7P/R4RK1 w - - bm Bb8+; id "ECM.200"; +1k1r4/ppq2p2/8/2pPb1r1/2P1Q1B1/6P1/PP3PK1/R4R2 b - - bm f5; id "ECM.201"; +r1b2nk1/2qn1p1p/1ppR2p1/8/1PP1NP2/4r1PP/1Q2N1B1/3R2K1 w - - bm b5; id "ECM.202"; +6r1/ppp4k/3p2rp/3Pb3/PPP1Np1q/5P1b/3QRRBP/6K1 b - - bm Bd4; id "ECM.204"; +4br1k/pR4bp/2r1B1pN/4npB1/3p4/P7/5PPP/4R1K1 w - - bm Rxg7; id "ECM.205"; +r6r/1p2kp2/3p1b2/pPpPpQ1P/1nP1P2P/6R1/1P2K3/1B6 w - - bm Rg6; id "ECM.207"; +2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - - bm Ndxf4; id "ECM.208"; +2r1r1k1/pp3pp1/3p3B/P2P1P2/2nb4/7R/1q3PQP/1B3R1K w - - bm Rb3; id "ECM.209"; +r2qr1n1/p4pk1/1p1p2p1/4p3/4PQ2/1PN2P2/1PP3P1/2KR3R w - - bm Rh7+; id "ECM.210"; +1k1r2r1/pp3p1p/B2q1n2/8/3Pb1p1/2Q5/PR3PPP/2B1R1K1 w - - bm Bf4; id "ECM.212"; +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.213"; +1q3rk1/r5b1/pNp1bn1p/2Pp1n2/1P2p3/1N2P2P/PBQKB3/3R3R b - - bm Nxe3; id "ECM.214"; +3r2k1/p5pp/bpP1p3/3n1p2/2NQpP1q/P3P3/1B1R1R2/4KBr1 b - - bm Rxf1+; id "ECM.216"; +5Q2/5p1p/3p2p1/4p1k1/4P1P1/3R1P1K/r6P/4q3 w - - bm f4+; id "ECM.218"; +2b2r1k/ppq3pp/3b3r/n3NpN1/Q2PpP1B/2P1R3/PP5P/4R1K1 w - - bm Ngf7+; id "ECM.219"; +2r1r1k1/1R4bp/p5p1/2pqn3/8/2B5/1PQ1B1PP/5RK1 w - - bm Bc4; id "ECM.220"; +7k/pp1q2pp/3Nr1n1/3B2Q1/2pP4/B3P1Pb/P6P/6K1 w - - bm Qd8+; id "ECM.221"; +r5k1/5p1p/bq1p2p1/r2Pp3/1p2N1P1/1P3P2/1KPQ3P/3R3R b - - bm Ra2+; id "ECM.222"; +5Bk1/pr2pp1p/2b3pQ/2p1q3/8/2P4P/PP4P1/1B1Rb1K1 w - - bm Bg7; id "ECM.223"; +r1b1Rnk1/6pp/p4q2/1pp2P2/3r4/2NB4/PP1Q2PP/4R1K1 w - - bm Nd5; id "ECM.229"; +8/2p2Q1p/1rp5/p3q1kp/P7/2P2RP1/5PK1/8 w - - bm Rf5+; id "ECM.233"; +1r2b3/1p2q1bk/p1p1p1p1/P1PpP2r/1P1KpPQP/4P2N/6R1/4B2R b - - bm Rxe5; id "ECM.234"; +6k1/3b1p1p/6p1/2BPR3/8/4Q2P/1q3rPK/8 w - - bm Re8+; id "ECM.235"; +2R5/4ppkp/6p1/p2P4/4P2P/p3B1P1/qbR2PK1/8 w - - bm Rg8+; id "ECM.236"; +6k1/p4pq1/2n1p1p1/1p1pP1N1/3P1QPP/8/P3K3/8 w - - bm Qc1; id "ECM.238"; +3r1rk1/1pq1nppp/p7/2pB3Q/P4P2/1P2P3/6PP/2RR2K1 w - - bm Bf3 Rxc5; id "ECM.239"; +8/p1r2q1k/1p1p3p/1Pp1nP2/P1P5/3R2PP/1Q4BK/8 w - - bm Rxd6; id "ECM.240"; +6rr/1b3k1p/pbqppPn1/1p5Q/4PN2/P6R/1PP3BP/2B2R1K w - - bm Qxh7+; id "ECM.243"; +4rrk1/3b1ppp/pb6/1pqP4/P1p1PP2/1P2NK2/3QB2P/R2R4 b - - bm Rxe4; id "ECM.244"; +2r1r1k1/1p4bp/p2p1qp1/1n1P4/2P1B2P/1N1Q4/PP2R3/1K5R b - - bm Rxc4; id "ECM.245"; +2r2rk1/pb4pp/1p2p3/4Npq1/3P1n2/5P2/PP1R2PP/RB2Q1K1 b - - bm Rc1; id "ECM.249"; +2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - - bm Bxf7+; id "ECM.250"; +r5k1/pp2ppb1/4qn2/r3B1p1/3P4/3QNP1R/PP2K1P1/7R w - - bm Bxf6; id "ECM.252"; +1R2br1k/5r1p/p2p1P2/6RQ/3p1P2/4p2B/q6P/5N1K w - - bm Rxe8; id "ECM.253"; +5r1r/1pkb4/5pB1/2P5/p3R2P/Pq6/1PQ2Pn1/K2R4 w - - bm Rxd7+; id "ECM.255"; +kn5r/p2r2p1/1pqBp1np/1Q1pPp2/R2P4/1N6/2P2PPP/R5K1 w - - bm Rxa7+; id "ECM.256"; +4Rnk1/2p2pp1/3r3p/p2P4/P5Q1/1B5P/5PK1/q7 w - - bm Rxf8+; id "ECM.257"; +4r3/2k1p2q/pp1nR1p1/2pP1pP1/2P2P2/1P6/P1K3B1/4Q3 w - - bm Rxd6; id "ECM.258"; +2rq4/5rbk/3p1n1p/p2Pp2P/1p2b3/4BNR1/PP1Q1P2/3BK1R1 w - - bm Bxh6; id "ECM.261"; +r2q1rkb/pp2p3/2p2pp1/3pPb2/3P3R/2N3P1/PPPQBPK1/3R4 w - - bm Rxh8+; id "ECM.262"; +r1bqrnk1/p4p2/1p5p/3pB1p1/P2P2n1/1P1B2N1/2Q3PP/R4RK1 w - - bm Bh7+; id "ECM.264"; +r2rn1k1/1bqn1ppp/p7/2bpP1P1/1p1N1Q2/1P3B2/PBP1NR1P/3R2K1 w - - bm Qxf7+; id "ECM.265"; +r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - bm Nxf7; id "ECM.266"; +1k6/1p4p1/P1p5/5Q2/2q2r2/P7/8/4R2K w - - bm Re8+; id "ECM.269"; +6k1/1p3p2/4r1p1/1PPrbq1p/2QN4/P2R1P1P/R4KP1/8 b - - bm Bg3+; id "ECM.270"; +r2qk2r/1pp2ppp/p3pnn1/6N1/1B1P2P1/1Q2P2P/PP3PK1/R6R b kq - bm Nh4+; id "ECM.272"; +r1br4/ppq2pk1/3bpN2/8/2P5/3n2B1/PP2QPPP/R4K1R w - - bm Qg4+; id "ECM.275"; +3k2r1/pp1b3Q/1b2pP1p/3pN2q/5B2/7B/PP2nP1K/2R5 b - - bm Rg2+; id "ECM.278"; +2r2rk1/pp3qpp/8/3P1b2/3Q4/P1N1B3/5PKP/R2R4 b - - bm Rxc3; id "ECM.279"; +r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - bm Nxg7; id "ECM.280"; +4k2r/1bqnbppp/p3p3/1p2P1N1/2r2BB1/8/PPP3PP/R2Q1R1K w k - bm Nxf7; id "ECM.281"; +5r1k/1pqb3p/2n5/p1pB4/2Pp1r1P/1P5P/R2N2K1/3Q1R2 b - - bm Bxh3+; id "ECM.282"; +r4r2/pp2qk2/4pnp1/3pQ3/2p2P2/3B4/PPP2P2/2KR3R w - - bm Bxg6+; id "ECM.283"; +3bq3/p1n2rk1/1pp1p1p1/3pPnPp/1P1P1N1P/2PN3K/P2BQR2/8 w - - bm Nxg6; id "ECM.284"; +b6r/2q2k2/4pPp1/1p1n2Bp/2pPB1PP/2P2Q2/8/4R1K1 w - - bm Bxg6+; id "ECM.285"; +1rbk2nr/p1pp2b1/7p/2qP1pp1/2Bn4/2NKBP2/PP2N1PP/R2Q3R b - - bm Qxc4+; id "ECM.290"; +r2k3r/2pb1ppp/p1p1q3/2Q5/5B2/2N5/PPP2PPP/3R2K1 w - - bm Bxc7+; id "ECM.295"; +2r2r2/2N2pkp/2Q5/1N2p1b1/1p6/3P1qPb/PPR2P1P/4R1K1 b - - bm e4; id "ECM.296"; +1r2k2r/2p2p1b/q1Pppb1N/p2p2P1/Q2P4/P3B3/1P5P/2KRR3 b k - bm Rb4; id "ECM.299"; +4b1r1/1p3ppk/3r3p/p1p1qP1B/3pPN2/3P3R/nPPQ3P/6RK w - - bm Ne6; id "ECM.301"; +4b2k/7p/3q3P/1p1pRpr1/1P1B4/2P2Q2/7K/8 w - - bm Qg3; id "ECM.302"; +2kr2r1/pbp4p/1p4p1/1NqpNp2/4nQ2/8/PPPR1PPP/2K1R3 w - - bm Nc6; id "ECM.303"; +1rr3k1/1p1bqpbp/1R1p2p1/pN1P4/P3P1n1/1Q6/3NB1PP/2B1R1K1 b - - bm Rc3; id "ECM.304"; +r1br4/1p3k2/p2q1p2/3N1Pp1/3Q4/8/PP4P1/4RR1K w - - bm Re6; id "ECM.305"; +r3kbnr/p4ppp/2p1p3/8/Q1B3b1/2N1B3/PP3PqP/R3K2R w KQkq - bm Bd5; id "ECM.306"; +3r1rk1/2p1qp1p/pnP3p1/4n3/PP1NpR2/1BQ4P/6P1/5RK1 w - - bm Ne6; id "ECM.307"; +r1bq1k2/5pb1/p2p1n2/2pPrP2/2p4B/3B2R1/PP1Q2PP/R5K1 w - - bm Qg5; id "ECM.308"; +2bq1rk1/p4pbp/p2p2p1/3P4/2p1QP2/2Pr3P/PP1N2P1/R1B2RK1 b - - bm Bd4+; id "ECM.309"; +r5rk/1p1bqpnp/3p1b1B/pBnPp2P/4P3/2N2Q2/PP3P2/R3KNR1 b Q - bm Nf5; id "ECM.310"; +r3rk2/p2q1b1p/1pnP1Qp1/5pN1/2p2P2/P1P5/7P/4RRK1 w - - bm Re7; id "ECM.311"; +r2qrbk1/1p4pb/2n2p1p/pNpn4/2N5/PP1PPQPB/1B5P/2R2RK1 w - - bm Nbd6; id "ECM.313"; +r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - - bm R1b4; id "ECM.316"; +4r3/pp1b3k/2p2qpp/2Pp4/1P6/PBbP1N1P/2R3P1/3Q3K b - - bm Re1+; id "ECM.317"; +8/5k1p/5PpB/3PR3/2r4P/1p3K2/2b5/8 b - - bm Re4; id "ECM.319"; +4r2k/3b3p/p2p4/2pP1p2/q1B2Q1P/2PK1P2/Pr1R4/7R b - - bm Re4; id "ECM.320"; +5k1r/ppqnnp2/3b2p1/2pB2Qp/3p3N/1P1P2P1/P1P2P2/2B1R1K1 w - - bm Rxe7; id "ECM.324"; +5rk1/5p1p/8/3pNp2/RPrqn3/1Q5P/1P3PP1/4R1K1 w - - bm Rxe4; id "ECM.325"; +2rr2k1/4qppp/bn6/p1bB4/4N3/6P1/PB2PP1P/2RQ1RK1 w - - bm Rxc5; id "ECM.326"; +5rk1/r2nqpp1/p3p3/1p2P3/4N1pP/8/PPP3Q1/1K1R3R w - - bm Rxd7; id "ECM.328"; +3rqb2/1pR3pk/p3n1pp/3p4/3B4/PP6/1P4PP/4RQK1 w - - bm Rxe6; id "ECM.331"; +2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - - bm Rxe4; id "ECM.333"; +r3r1k1/1p3pPp/p1p5/3bb2N/7q/1P1Q4/2PB2PP/4RRK1 w - - bm Rxe5; id "ECM.334"; +8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - - bm Rxd4; id "ECM.335"; +r3r1k1/pbqn1ppp/1p3n2/1Pb5/2p5/5N1P/PBQ1BPP1/1N1R1RK1 b - - bm Rxe2; id "ECM.337"; +r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - bm Rxc5; id "ECM.339"; +1k2r2r/1bpQN2p/1p6/P3p2q/4np2/2P2N2/2P2PPP/R3R1K1 b - - bm Rxe7; id "ECM.340"; +r1k2n1r/2pb4/1p1p1qpp/p2P1p2/3N1P1P/2Q3P1/PPP1R3/2K1RB2 w - - bm Re8+; id "ECM.341"; +4q1r1/5kpp/2p1nb2/2PpQp2/r4P2/1N3P2/1BP1R2P/6RK w - - bm Rxg7+; id "ECM.344"; +4rrk1/ppn3pp/2pb1n1q/3p4/1P1P4/P3BNP1/2P1BPKP/R2Q1R2 b - - bm Rxe3; id "ECM.347"; +2b1r2k/2Q4p/4q3/1pp5/3b4/4NP2/1P3BP1/3R2K1 w - - bm Rxd4; id "ECM.348"; +7r/3qbk1r/3p1n2/p1pPp1p1/Pp1nPpP1/1P1Q1P1B/1NP3K1/R3B2R b - - bm Nxg4; id "ECM.350"; +r2qn1k1/1p1b3p/2pp1b2/6pQ/p1P1P3/P1N3PB/1P6/3R1R1K w - - bm Rxf6; id "ECM.351"; +2rq3r/5p2/p3pkbQ/3p4/3N4/2P4R/P4PP1/4R1K1 w - - bm Rf3+; id "ECM.352"; +r4k1r/pp2pp2/3p1b2/q2PnQpp/3N4/1BP3P1/PP3PP1/3RR1K1 w - - bm Rxe5; id "ECM.353"; +5rk1/2p3pp/p1p4r/2P1p3/3pPnq1/1P3R1P/PN1Q3K/R5N1 b - - bm Qxf3; id "ECM.354"; +r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - - bm Rxd7; id "ECM.355"; +2r2rk1/p3p1bp/3qP1p1/1Q1p4/P4P2/3R4/1P4PP/2B2RK1 b - - bm Rxc1; id "ECM.356"; +r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - bm Rxd4; id "ECM.357"; +2r2rk1/5ppp/1p2p3/p7/1n1R4/P1NnPN2/1P3PPP/1R4K1 b - - bm Nxb2; id "ECM.359"; +r3r1k1/p4ppp/2pp1b2/8/q2n1P2/2BQ3P/PPP3P1/1K1R2NR b - - bm Re3; id "ECM.361"; +rn1kr3/pppb4/3p1q2/3P1pNn/2P2P1p/1P2Q2P/P2NR1B1/4R1K1 w - - bm Qxe8+; id "ECM.362"; +r2q1rk1/ppp1b1pp/1nn1p3/4P3/2PP4/2N1B2P/PP1Q4/2KR1B1R b - - bm Rxf1; id "ECM.363"; +r3k3/1pqb1p2/p3p3/4n2r/3N1Q2/2P5/PP4B1/4RRK1 w q - bm Rxe5; id "ECM.364"; +1rb2bk1/q4r2/pB1p1nn1/3Pp3/N3PpP1/8/1PQ1BNP1/R1R3K1 b - - bm Rxb6; id "ECM.365"; +3nr1k1/p6p/2n1pRpB/3pP3/2pP2P1/q1P4P/6BK/5Q2 w - - bm Rxg6+; id "ECM.368"; +2rr2k1/5ppp/p1b1pn2/q1p5/P1B1PQ2/R1PN1P2/6PP/1R4K1 b - - bm Rxd3; id "ECM.369"; +7k/p1p1r2p/1p1pnr1q/5pp1/2PPPp2/2PB1P1P/P2Q1PRK/7R b - - bm g4; id "ECM.372"; +2b4B/1pp2k2/1p6/3P3n/5p1P/1P4p1/P2r2P1/R5KR b - - bm f3; id "ECM.375"; +5n2/3bp1r1/1r1p3k/p1p2pNp/1nP2P1P/1PN1PB1K/P5R1/6R1 w - - bm Nf7+; id "ECM.378"; +r1b1qbk1/7p/4p1p1/1p2Bp2/p1B2Q2/P3P3/1P3PPP/3R2K1 w - - bm Bc3; id "ECM.380"; +2r1k2r/3b1pb1/p2ppp2/2q2P2/2p1P2p/P1N2N2/1PP1Q1PP/3R1R1K w k - bm e5; id "ECM.381"; +3r1rk1/1pq1bppp/p7/n2RN3/P7/1P6/1B2QPPP/R5K1 w - - bm Nd7; id "ECM.382"; +q1r3k1/2r4p/2p3pP/2Qp1p2/PRn5/4P1P1/5PB1/1R4K1 w - - bm Rxc4; id "ECM.383"; +r1b1nrk1/p2n3p/2pp4/8/2P2q1N/1PB4P/P4PB1/R2QR1K1 w - - bm Bd5+; id "ECM.385"; +7k/5rp1/p1bQB2p/1p4nN/4P3/1Pq5/P5PP/3R3K b - - bm Bxe4; id "ECM.386"; +r4r1k/1bq4p/p4bp1/3pn3/NP6/Q1PBB2P/6P1/3R1RK1 b - - bm d4; id "ECM.387"; +r2r2k1/1bq2pb1/6pp/2P1p3/1nBpN2N/6PP/2Q2P2/3RR1K1 w - - bm Nf6+; id "ECM.388"; +r3rbk1/p1q2pp1/1n5p/2pp4/4N3/1PQ3P1/PB2PP1P/3R1RK1 w - - bm Nf6+; id "ECM.389"; +r3r1k1/1pp2p1b/7p/2Q5/2PP2p1/2P1NpPq/P2R1P1P/6RK b - - bm Rxe3; id "ECM.391"; +5bk1/5p1p/Q5p1/1B4n1/8/2q1p3/6PP/3R2K1 b - - bm e2; id "ECM.392"; +r5k1/1p3pp1/1p3q1p/1P1bQ3/P2P3n/8/3B1PPP/R3R1K1 b - - bm Nf3+; id "ECM.393"; +2bq1b2/1p3k2/1r1p1p1p/pNpP1PpP/P1P3P1/6B1/1P5Q/2K1R3 w - - bm Re6; id "ECM.396"; +3r2k1/pb3p1p/1q4p1/2b1P3/1Pp5/2P1p1P1/P3Q1BP/R1B4K b - - bm Qc6; id "ECM.400"; +r2rnbk1/pp3ppp/1q4n1/3p1N2/5P2/1PQB4/PBP3PP/4RR1K w - - bm Nh6+; id "ECM.401"; +r1b2rk1/pp2qp2/2nRp1p1/6Pn/1Pp5/P1N1P3/1BQ2PP1/2K2B1R w - - bm Rxh5; id "ECM.403"; +5rr1/pp1kq1bp/2bppn2/2p3B1/4N3/2NP2P1/PPP4P/R3QRK1 b - - bm Nxe4; id "ECM.404"; +1r1q1k2/R4pp1/5p1r/1p1p1n1p/3Pb2N/1BP5/2P1Q1PP/4R1K1 w - - bm Qxe4; id "ECM.405"; +R2b2k1/2rq1n1p/3p2p1/1p1Ppp1n/1P6/1B1PQN1P/1B3PP1/6K1 w - - bm Nxe5; id "ECM.406"; +r1b3kr/bp3ppp/p1nNp3/4P3/P1Q2P2/BBP5/5qPP/R2R3K w - - bm Nxc8; id "ECM.407"; +6k1/5rb1/6pp/1p2p3/2b5/4B1P1/r4PBP/1RR3K1 w - - bm Rxc4; id "ECM.408"; +4r1k1/1p5p/5ppP/1qnP4/r4R2/P6P/1B1Q2K1/5R2 w - - bm Rxf6; id "ECM.409"; +r1b2rk1/pp2ppbp/2np1np1/q7/4P3/2N1BN2/PPPQBPPP/2KR3R b - - bm Nxe4; id "ECM.414"; +3r1rk1/p1q4p/1p3bp1/3bnp2/3B4/1NPB3P/P1PQ2P1/1R2R2K b - - bm Nf3; id "ECM.415"; +1r1q2k1/7p/2p3p1/1P1n1b1r/2BQ4/4B3/P6P/1R3RK1 w - - bm bxc6; id "ECM.417"; +r3kbnr/1ppb3p/p1q1pp2/3p4/3P4/2N2N2/PPP2PPP/R1BQ1RK1 w kq - bm Ne5; id "ECM.418"; +r1b1qbk1/pp3r1p/2pR1np1/5p2/2P1pP2/1PN1Q1PP/PB2P1B1/5RK1 w - - bm Rxf6; id "ECM.419"; +2b2r2/rpp2pkp/3pq3/2pR2P1/2n1P1N1/2P2B2/1P3Q1P/1K5R b - - bm Qxd5; id "ECM.421"; +7r/pp4k1/3pn1p1/q1pB1b2/2P5/5NR1/1P3PP1/2Q3K1 w - - bm b4; id "ECM.423"; +B1b1rbk1/5ppp/pq6/1p2n3/2p2P2/6PP/PPQ4K/R1BR4 b - - bm Ng4+; id "ECM.425"; +8/2R4p/2R3bk/8/5N1P/1p3PP1/2pqP1K1/8 w - - bm g4; id "ECM.426"; +6k1/5pp1/p5r1/3Np2q/4P2p/1r3P1Q/n4P1P/3R2RK w - - bm Rxg6; id "ECM.430"; +r3k1r1/1pp2ppp/pb1p1qn1/4p2b/2B1P3/N1PP1NPP/PP2QPK1/R4R2 b q - bm Nh4+; id "ECM.432"; +1n2n1r1/r3qppk/p2p3p/3PpP1P/1P2P3/3B2RQ/3B1P1K/6R1 w - - bm Bxh6; id "ECM.433"; +rn2kr2/pp1b1pQp/3Pp3/qB1n4/3N4/P7/1PP2PPP/2KR3R w q - bm Nxe6; id "ECM.437"; +r3k2r/pp2ppbp/1qp5/2n2b2/2P5/4BN2/PP1QBP1P/2KR3R b kq - bm Nb3+; id "ECM.441"; +2r3k1/n3qppp/1B1r1n2/N7/N4P2/1Q4PP/P5B1/R1b4K b - - bm Qe1+; id "ECM.444"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.445"; +rnb2k2/ppbp2p1/2p2pB1/8/1PN5/2P5/P4PPP/R1B3K1 w - - bm Bf4; id "ECM.446"; +2k3r1/1ppr3p/p1pB2q1/6n1/N3Pp2/8/PPP1Q1PP/3R1RK1 b - - bm f3; id "ECM.448"; +6r1/6rk/3p3p/p2Rp3/R1PqPp1b/2N2Q2/6PP/7K b - - bm Rxg2; id "ECM.450"; +4r1k1/1p2rq1p/2bQpp2/p1Pp4/3P4/P3RN2/5PPP/4R1K1 w - - bm Ne5; id "ECM.451"; +b2b1r1k/3R1ppp/4qP2/4p1PQ/4P3/5B2/4N1KP/8 w - - bm g6; id "ECM.452"; +1k4q1/1p2Rprp/p1p5/2Pp4/1P1Q3P/6P1/P5K1/8 w - - bm Qe5+; id "ECM.453"; +r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - bm Ng6+; id "ECM.454"; +r4r1k/p2bN2p/1p1p1p2/2q4P/3Q4/1P6/1PP3P1/1K2R2R w - - bm Ng6+; id "ECM.455"; +r1b2k1r/1p2qp2/pN1p1n2/2pP2pp/P2bP1P1/2N5/1P2BPP1/R2Q1RK1 b - - bm hxg4; id "ECM.457"; +6nk/p4rrp/1p1p1p2/1q1Pp2R/4B1P1/1PP2Q1R/P6P/7K w - - bm g5; id "ECM.458"; +r1b1k2r/6pp/p1p1p3/3np1B1/1b2N3/8/q1PQB1PP/3RK2R w Kkq - bm Qxb4; id "ECM.459"; +3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - - bm Bxh5; id "ECM.460"; +2r3k1/4qpp1/2p1r3/pbQpN1Pp/3P1P1P/4P3/PP6/1KR3R1 w - - bm Qxb5; id "ECM.461"; +4r1kb/p2r4/1np1p1p1/3nP1Bp/1p3P1R/1B2qP2/PPPN3Q/2K4R w - - bm Rxh5; id "ECM.463"; +2Q2bkr/5p2/1rb5/1pN1n1qB/1P1pPN2/6P1/5P2/R1R3K1 w - - bm Nce6; id "ECM.469"; +2r4r/1q1kb1p1/4p2p/3pP3/np6/3RBP2/NPP2Q1P/1K2R3 b - - bm Nc3+; id "ECM.470"; +2r4r/3bk1b1/1q2pp2/3pPp1p/1p1N1P1P/1P1R1BP1/P2Q4/1K1R4 w - - bm Nxf5+; id "ECM.471"; +1rb3k1/2r2pbp/p2q1npn/P1pPp1N1/2B1P3/2P1B1NP/5QP1/3R1RK1 w - - bm Ne6; id "ECM.472"; +r7/pp4pk/2n3qp/5p2/3p4/P4QB1/1PP1RPPP/6K1 b - - bm d3; id "ECM.473"; +2r2r1k/1p3p1p/p2p1Pp1/3Pp3/1q2Bn1Q/8/1PP3PP/4RR1K w - - bm Rxf4; id "ECM.474"; +1r3kr1/p3q1b1/3p2Q1/2p2p2/2P2N2/4Pn2/PB6/K2R3R w - - bm Ne6+; id "ECM.477"; +5r1k/6bp/3p1q2/3Q1nP1/8/6P1/PP3BKP/R2N4 b - - bm Ne3+; id "ECM.478"; +5rk1/p1p1R1p1/1p5p/8/2pP1P2/3n2P1/PP2Q2P/5KNq b - - bm Nxf4; id "ECM.480"; +r5k1/1N3ppp/4b3/1Nq5/Pn3pn1/5B2/1PPQ3P/R6K b - - bm Qxb5; id "ECM.481"; +1r2k2r/1bq2pp1/pn2p2p/1p2P1b1/3N4/2N3Q1/PPP3PP/1K1R1BR1 w k - bm Bxb5+; id "ECM.482"; +r1bqn1r1/p2k1pp1/1p5p/n1pPpN2/2P1P3/P1PBB2P/4Q1P1/R4RK1 w - - bm Nxh6; id "ECM.483"; +r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ - bm Bg5; id "ECM.485"; +3rn1k1/pp3ppp/6b1/2p1Q3/2P1P3/P4P2/1B1qBP1P/1R5K w - - bm Rd1; id "ECM.486"; +4r1k1/5ppp/p1q3b1/1ppNr3/2P1P3/1P4QP/P4PP1/4RRK1 w - - bm f4; id "ECM.487"; +6k1/5rp1/4Nb1p/2p5/4Q3/1r5P/q5P1/3R1R1K w - - bm Rxf6; id "ECM.490"; +6kr/1p1r1p1p/p2pnPpQ/3Np2R/2q1P3/5P2/PPP5/2KR4 w - - bm Rxe5; id "ECM.494"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.495"; +r2q1rk1/pp1n2pp/2pb4/1P1p3n/P1PPpP2/4P2b/1BNNBP1P/R2QR1K1 b - - bm Nxf4; id "ECM.496"; +r4rk1/1nqb1pbn/6pB/pppPp2p/8/1PP2NNP/P1BQ2P1/R4RK1 w - - bm Nxh5; id "ECM.499"; +4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - - bm Nxf3; id "ECM.501"; +r2qkr2/1p3pQp/2p1b3/1B1pN3/1p6/8/1P1K1PPP/2B1R3 w q - bm Nxc6; id "ECM.502"; +r3k2r/1p1b1p2/p3p3/2b3p1/4N1n1/1B5P/PPP3P1/R1B2R1K b kq - bm Bc6; id "ECM.506"; +r3kb1r/npqbpp1p/p3n1p1/P3P3/6N1/3B1NB1/1PP3PP/R3QRK1 w kq - bm Ng5; id "ECM.507"; +7k/p6p/4bppb/1N6/P2p1p2/1PrP2P1/2r1P2P/1R1Q2K1 b - - bm f3; id "ECM.508"; +2kr4/pp1r1pp1/4n1p1/4R3/2Pp1qP1/3P2QP/5PB1/1R4K1 w - - bm Rc5+; id "ECM.509"; +r2qkn1r/pb2bp2/1pp1p3/5p1p/2BPN3/5NQ1/PPP2PPP/1K1RR3 w kq - bm d5; id "ECM.511"; +3r3k/p4npp/1p2qpb1/4P3/5P2/P3N3/1B2QP1P/6RK w - - bm exf6; id "ECM.513"; +6rk/1b2bp1p/ppq1p3/2p1Pp2/P1Br1P2/1PNR2P1/2P1QK1P/6R1 b - - bm Rxf4+; id "ECM.514"; +r3r1k1/p1q2pp1/b1pb3p/n7/B3n3/2P1BN2/PP1N1PPP/R2QK2R b KQ - bm Nxc3; id "ECM.515"; +2b2q2/r2n2kp/1n1p1pp1/p1pP4/1pP1NPN1/1P1B4/P5PP/Q3R1K1 w - - bm Nexf6; id "ECM.518"; +1k1r2r1/p1p3q1/2p2p2/3pn3/1P1b2bB/1QN5/P4PPP/1R2RBK1 b - - bm Nf3+; id "ECM.519"; +r3k2r/1bq1bp1p/p2p1np1/1p2p3/3NP3/P1N2QB1/1PP2PPP/3RR1K1 w kq - bm Ndxb5; id "ECM.520"; +r2q4/5p1P/2p1bR2/ppk1p1P1/3pB2Q/8/PPP5/6K1 w - - bm g6; id "ECM.521"; +r3kb1r/pp1b1pp1/4p3/2q3Qp/5B2/2PB4/P4PPP/R3R1K1 w kq - bm Rxe6+; id "ECM.522"; +1rbr2k1/p4pp1/5b1p/2p1p3/3qPP2/1PNB2PP/PKP2Q2/5R1R b - - bm c4; id "ECM.523"; +r3r1k1/p6p/bp4p1/2bPN3/6n1/6P1/PB2RPB1/3R2K1 w - - bm d6; id "ECM.524"; +3r1k2/1q1r1pp1/3p2bp/p2N4/8/2P1RQ1P/P4PP1/4R1K1 w - - bm Nf6; id "ECM.526"; +r4Nk1/1p2pp1p/p1np2p1/3N4/P3PPn1/8/1bPKBqPP/R2Q1R2 b - - bm Qd4+; id "ECM.528"; +rn4k1/pp2rpb1/2pNb1pp/4p3/P3Pq2/2P2N1P/1PB1QPP1/R3R1K1 w - - bm Nf5; id "ECM.531"; +3qr2r/1p1bppk1/3p2p1/p1nP1PQp/3N3R/1P4PP/P1P3BK/4R3 w - - bm Ne6+; id "ECM.534"; +r3r2k/pb2q1p1/1p2Nn1p/2b5/2B5/2P2P2/PPQ3PP/4RR1K w - - bm Nf4; id "ECM.537"; +r1b2nk1/ppq2ppp/8/1BP1p1NQ/5p2/8/PP3PPP/3R2K1 w - - bm Rd7; id "ECM.538"; +6k1/5qp1/pN5p/3pRp2/3QnP2/2r4P/r5P1/6RK b - - bm Qh5; id "ECM.539"; +5r1n/r2q1pkp/3p1npN/NppPp2P/1P2P3/2P1Q1P1/5P2/R3K2R w KQ - bm Nf5+; id "ECM.540"; +r5rk/1pp1n1pp/p1n1b1q1/3p1p2/7R/2QB1N2/PB3PPP/4R1K1 w - - bm Rxe6; id "ECM.543"; +3R4/4Qpk1/4p1p1/7p/7K/5rP1/5P2/2q5 w - - bm Qf8+; id "ECM.545"; +8/5pk1/p6p/2R5/3q2p1/6P1/2Q3PK/4r3 w - - bm Rg5+; id "ECM.546"; +1Q4R1/8/P1b2p2/2p2k2/2P5/5p2/1r5P/4R1K1 b - - bm f2+; id "ECM.547"; +5r1k/1q2R3/8/6Q1/8/8/6P1/7K b - - bm Rf1+; id "ECM.548"; +8/4p3/8/3P3p/P2pK3/6P1/7b/3k4 w - - bm d6; id "ECM.549"; +3Q4/k3K3/q7/2N1P3/1P6/5r2/8/8 b - - bm Rf7+; id "ECM.550"; +3k4/p1p5/8/2p1p3/4P3/PpPP2K1/1P6/8 b - - bm c4; id "ECM.551"; +6r1/5p1k/4p3/3pQp2/1p1P1P1q/1P3RR1/7r/5K2 w - - bm Rxg8; id "ECM.552"; +1r4k1/3qb2p/pr1pppn1/2p2N2/2P2PQ1/1P4P1/P2R2BP/R5K1 w - - bm Bd5; id "ECM.554"; +r6r/pR1nqkpp/2p1p3/3p4/6Q1/2b4P/P1PP1PP1/2B1R1K1 w - - bm Rxe6; id "ECM.555"; +1k1r3r/ppq2pnp/1npbb1p1/3p4/3P1NP1/2NBP2P/PPQ2P1B/1KR4R w - - bm Nb5; id "ECM.556"; +r5r1/4q2k/p2p3p/5p2/4p3/P2QR3/1PP2PPP/4R1K1 w - - bm Rxe4; id "ECM.558"; +2r2rk1/pp2bppp/3q1n2/3nNRB1/3P4/1B5Q/PP4PP/3R2K1 w - - bm Nxf7; id "ECM.562"; +r1bq1rk1/1pp2ppn/1pnp3p/3N4/2B1PN2/3P4/PPP3PP/R2Q1RK1 w - - bm Ng6; id "ECM.563"; +r1b2rk1/pp3p1p/2pq2pn/2nNN3/2B1QP2/8/P1PP2PP/R1B1K2R w KQ - bm Nxf7; id "ECM.564"; +1r2r1k1/1bn2pbp/pp1q1np1/2pPN1B1/P1B5/2N4P/1P1Q1PP1/R3R1K1 w - - bm Nxf7; id "ECM.565"; +1rb2bk1/2n2qp1/p2p3p/R1pP1p2/2B5/1PBQ1N1P/2P2PP1/6K1 w - - bm Rxc5; id "ECM.566"; +r1b3k1/2pq2pp/p4p2/1p1Nr3/2n2R2/1B6/PPQ2PPP/R5K1 w - - bm Rxc4; id "ECM.567"; +2rq1rk1/3bbppp/p3pn2/1p1pN3/2nP1B2/P1NBP2Q/1P3PPP/2R2RK1 w - - bm Nxd5; id "ECM.568"; +1r4nk/3b2bp/3p4/3P3p/2pNPq2/P1N2p1P/1P3Q2/1R4KR b - - bm Rxb2; id "ECM.570"; +2r5/p3kpp1/P2p4/1P2pP1p/1P2PqnP/6R1/r2N2P1/3RQ1K1 b - - bm Rxd2; id "ECM.571"; +2br2k1/1p2qppp/r1n1p3/pQ1nN3/P2P4/2B3P1/1P3PBP/2RR2K1 w - - bm Qxa6; id "ECM.572"; +5rk1/3q2bp/3pb2r/1p1n1p2/3p1P2/P2B1QN1/1P1B2PP/2R1R1K1 w - - bm Nxf5; id "ECM.573"; +4r1k1/1ppQr1p1/1p1p1pP1/3P3p/7P/1P3q2/P1P5/1KRR4 w - - bm Re1; id "ECM.574"; +2Rr2k1/7p/4pqp1/p4p2/1p1P1Q1P/8/PP3PP1/6K1 w - - bm Qe5; id "ECM.575"; +4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - - bm Rc1; id "ECM.576"; +5rk1/bp4p1/p2rp2p/8/8/2PN4/PP1R1PPP/3R2K1 b - - bm e5; id "ECM.577"; +2q1rk2/QR3ppp/1pPpb3/1P2p1b1/4P3/6P1/3N1PBP/6K1 w - - bm Bh3; id "ECM.578"; +n1bq3k/pp4bp/6p1/5pP1/3p1P2/1B1P4/PB3Q1P/4R1K1 w - - bm Bxd4; id "ECM.579"; +6k1/pb3ppp/1p2p3/4P3/5P2/P1r5/1q4PP/1B2Q1RK b - - bm Rc1; id "ECM.581"; +2rq1kbR/4R1p1/3p3r/pp1P1Pp1/6P1/3B4/PPP1Q3/6K1 w - - bm f6; id "ECM.582"; +2r5/5kb1/4ppp1/pp1qB3/2rP4/1RP2R1Q/P4PP1/6K1 b - - bm Rh8; id "ECM.583"; +4k3/4Bp2/1p2nP1P/2p5/2K1b1B1/8/P7/8 w - - bm Bf3; id "ECM.584"; +3rr1k1/ppp1qp1p/3b2p1/4np1P/1P1N1Pn1/P1P4R/1B1NB3/R2Q1K2 b - - bm Nf3; id "ECM.585"; +1k1r3r/ppqb4/5Ppp/3p4/P2np3/3BR1Q1/2PB1PPP/R5K1 w - - bm Rxe4; id "ECM.586"; +8/2R2pbk/6pp/1p2pq2/1P2Qn2/3P3P/3B1PP1/r3N1K1 b - - bm Nxd3; id "ECM.588"; +r2b1rnk/1p4qp/p1p1b1p1/2PpNp2/PP1PnP1Q/3BB2R/4N1PP/R6K w - - bm Qxh7+; id "ECM.590"; +r1b2rk1/1p3pbp/2p3p1/p1q5/1P6/1Q4P1/1P2PPBP/R1B1R1K1 b - - bm Be6; id "ECM.591"; +r1r3k1/ppnbb1pp/2ppp1q1/1P3p2/P1PPn3/2N2NP1/2Q1PPBP/1RB2RK1 w - - bm Nxe4; id "ECM.593"; +r1b1k2r/2q1bppp/p3p3/1p1nP1B1/3Q4/2N5/PPP1B1PP/2KR3R w kq - bm Bxe7; id "ECM.594"; +2rqk1nr/pp3ppp/2n1p3/2b5/3N4/2NQB1P1/PP2PPKP/R4R2 w k - bm Nxe6; id "ECM.596"; +8/5pp1/7p/5P1P/2p3P1/2k5/5P2/2K5 w - - bm f6; id "ECM.599"; +7k/8/1p1ppp1p/1Pp5/2P2P2/8/3P2PP/6K1 w - - bm f5; id "ECM.600"; +8/5K2/kp6/p1p5/P2p4/1P3P2/2P5/8 b - - bm b5; id "ECM.602"; +8/1kp1b3/1p4K1/4P2p/P1P3p1/5pP1/P4P2/4B3 b - - bm h4; id "ECM.604"; +8/8/3K1k2/5p1p/4p1p1/4P1P1/5PP1/8 b - - bm f4; id "ECM.606"; +2kr3r/ppp1qpp1/2p5/2b2b2/2P1pPP1/1P2P1p1/PBQPB3/RN2K1R1 b Q - bm Rh1; id "ECM.610"; +1r3qk1/pb3p1p/1pn2PpQ/2pN4/3r4/5B2/PPP4P/4RRK1 w - - bm Ne7+; id "ECM.611"; +4r1k1/5p1p/3q2p1/1p1P4/1P6/2p4P/2Q1nPB1/4RK2 b - - bm Ng3+; id "ECM.612"; +8/p3q1k1/6p1/1p3nP1/2pp1QBr/P2P4/1PP2K2/R7 b - - bm Qe3+; id "ECM.618"; +7k/4b2p/5p1P/5PP1/1pNp1P2/1P1B4/2P2K2/r7 w - - bm g6; id "ECM.619"; +5r1k/1p1b2rP/p2p4/3P3B/P2P4/5pP1/1P2pP2/R3R1K1 b - - bm Rxg3+; id "ECM.620"; +3q1k2/5p2/p5pN/1b2Q2P/8/8/5PPK/8 w - - bm Qh8+; id "ECM.622"; +6k1/p3b1pp/4p3/4Pp2/Pp1r1P1P/1P4P1/2p2R2/5RK1 b - - bm Rc4; id "ECM.623"; +2r2rk1/p1N2p1p/2P1p1p1/1Pp3q1/3b4/5Q2/P1P3PP/4RR1K w - - bm Nxe6; id "ECM.625"; +3r1r2/pp1P3k/4Rbp1/1BP2p1p/8/7P/P4KP1/3R4 w - - bm Ba6; id "ECM.626"; +rn1q2k1/pp3pb1/3p2pp/2pP2N1/3r1P2/7Q/PP4PP/R1B2RK1 w - - bm Nxf7; id "ECM.628"; +5bk1/r4ppp/1r1P1n2/2p2N2/b7/2B3P1/5PBP/R3R1K1 w - - bm Bxf6; id "ECM.630"; +3qr1k1/p4ppp/1p1P4/2r1nN2/4P2n/P7/1B4P1/3QRRK1 w - - bm d7; id "ECM.632"; +6k1/5pbp/6p1/2p1r3/1pPr4/3n2NP/1PB2PP1/1R1R2K1 b - - bm Nxb2; id "ECM.633"; +8/6kP/6p1/1p1pP3/pP6/P1n2K2/2N5/8 w - - bm e6; id "ECM.638"; +8/Pb6/8/8/7K/5k1p/6pB/8 b - - bm g1=Q; id "ECM.639"; +6k1/p4pp1/Pp2r3/1QPq3p/8/6P1/2P2P1P/1R4K1 w - - bm cxb6; id "ECM.641"; +6k1/p4pbp/Bp2p1p1/n2P4/q3P3/B1rQP3/P5PP/5RK1 w - - bm dxe6; id "ECM.642"; +5r2/R4p2/5P1k/4PK2/1p6/8/8/8 w - - bm Rxf7; id "ECM.643"; +4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - - bm f5; id "ECM.644"; +1r6/3r1Pk1/p2p1np1/5q2/1p3P2/1B5R/PPP4Q/1K1R4 w - - bm Rh8; id "ECM.645"; +6k1/p4p2/5Ppp/3RP3/Pr4P1/2p2K2/7P/8 w - - bm Rd8+; id "ECM.649"; +2kr2r1/pp2bQ1p/2b1P3/2qN4/8/1B2p2P/PPP3P1/3R1R1K b - - bm e2; id "ECM.651"; +r1b2rk1/1p2qppp/p3p3/2n5/3N4/3B1R2/PPP1Q1PP/R5K1 w - - bm Bxh7+; id "ECM.652"; +6rk/3nrpbp/p1bq1npB/1p2p1N1/4P1PQ/P2B3R/1PP1N2P/5R1K w - - bm Nxh7; id "ECM.655"; +1rb2rk1/3nqppp/p1n1p3/1p1pP3/5P2/2NBQN2/PPP3PP/2KR3R w - - bm Bxh7+; id "ECM.656"; +r4rk1/pb1q1ppp/2N1p3/2Rn4/3P4/3BPQ2/1P3PPP/2R3K1 w - - bm Bxh7+; id "ECM.660"; +2r2r2/p2qppkp/3p2p1/3P1P2/2n2R2/7R/P5PP/1B1Q2K1 w - - bm Rxh7+; id "ECM.662"; +1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - - bm Rxh7; id "ECM.663"; +4rrk1/2q1bppp/p2p4/1p1Pn3/3B1R2/P2B2Q1/1PP3PP/5R1K w - - bm Bxh7+; id "ECM.664"; +r4rk1/pp2q1p1/4b2p/2ppb3/6n1/2P3N1/PPQBBPPP/R4RK1 b - - bm Nxh2; id "ECM.667"; +b3r1k1/2rN1ppp/2n1p3/p7/P3BP2/1R6/q1P2QPP/3R2K1 w - - bm Bxh7+; id "ECM.668"; +r1b1rnk1/pp1nb1pp/2p1pp2/q3N3/2PP1P2/3BP1N1/PBQ3PP/R4RK1 w - - bm Bxh7+; id "ECM.670"; +4r1k1/2q2r1p/p3bQ2/1p4Bp/2np4/8/PPB2PP1/3RR1K1 w - - bm Bxh7+; id "ECM.671"; +5rk1/pbrn1ppp/1ppN1q2/2P1p3/3P4/1PRB4/P3QPPP/5RK1 w - - bm Bxh7+; id "ECM.672"; +r2r2k1/p1p2p1p/4pPp1/1Pqb4/8/7R/1PB2PPP/3QR1K1 w - - bm Rxh7; id "ECM.676"; +rnq3rk/4bp1p/p1p3pQ/1p1pP3/1P1N1B2/2P3R1/1P3PPP/R5K1 w - - bm e6; id "ECM.678"; +2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - - bm Bxh7+; id "ECM.682"; +r5k1/6bp/2q1p1p1/p2pP3/3P4/1rP2QP1/3B1PK1/2R4R w - - bm Rxh7; id "ECM.689"; +1r2nr1k/6pp/pp1p1p2/2pPnN2/q1P1PB2/5PR1/4K1P1/2Q4R w - - bm Bxe5; id "ECM.695"; +1r2rnk1/2R2bpp/p2q4/1p1N2R1/5P2/1Q1B3P/PP4P1/7K w - - bm Rxg7+; id "ECM.702"; +4rrk1/2qb2pp/p5P1/1p2p3/1b2P3/2N5/PPPQ4/1K1R2R1 w - - bm gxh7+; id "ECM.704"; +3q1k2/pp3ppn/2p1n2p/4pN1N/P3P2P/5Q2/1PP2PP1/6K1 w - - bm Nhxg7; id "ECM.705"; +2r1r1k1/5ppp/p3pn2/1pb1N3/2P5/1PQ3R1/PB2qPPP/3R2K1 w - - bm Rxg7+; id "ECM.708"; +7k/1bp1P1p1/3p2rp/1pb2p1q/5P2/1BP2N1P/1P4P1/R1B2R1K b - - bm Rxg2; id "ECM.709"; +r1q1bk1r/1p3pp1/4pn1p/p3Q3/P1P2N2/1B4R1/1P3PPP/4R1K1 w - - bm Rxg7; id "ECM.710"; +r4rk1/p2n2p1/1q1Qpn1p/1P6/P6B/2p5/2B1KP1P/R5R1 w - - bm Rxg7+; id "ECM.711"; +3r1rk1/5pp1/pq1n1n1p/2pPR3/2B2P2/1PBQ2RP/P5P1/6K1 w - - bm Rxg7+; id "ECM.715"; +rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - - bm Nxg7; id "ECM.716"; +r1qb1r1k/2p3pp/p1n1bp2/1p1Np2Q/P3P3/1BP3R1/1P3PPP/R1B3K1 w - - bm Rxg7; id "ECM.717"; +4rrk1/2pn2pb/p1p1qp2/1pb1pN2/P3P1PN/1P1P4/1BP2PK1/R2Q3R w - - bm Nxg7; id "ECM.721"; +r4rk1/1p1q1ppp/p1b4B/8/2R3R1/P2P4/1b1N1QPP/6K1 w - - bm Bxg7; id "ECM.723"; +rq3rk1/3b1ppp/p2bp3/3pB2Q/8/1B5P/PP3PP1/2RR2K1 w - - bm Bxg7; id "ECM.724"; +2r3k1/1p2R1p1/p3n2p/2pq4/7P/1P1P2P1/PB1Q3K/8 w - - bm Bxg7; id "ECM.726"; +2rr2k1/4bppp/p1n1p3/3q4/1p1P2N1/2P3R1/P3QPPP/2B2RK1 w - - bm Nh6+; id "ECM.727"; +rq1r1bk1/1b3pp1/3pn2p/1n2BN1P/1P2P3/3R1NP1/3Q1PB1/2R3K1 w - - bm Bxg7; id "ECM.728"; +r1b5/ppqn2bk/3R2pp/2p2p2/2P1rN2/4BN2/PPQ2PPP/4R1K1 w - - bm Rxg6; id "ECM.729"; +r1bqkbnr/pp2ppp1/2p4p/3n2N1/2BP4/5N2/PPP2PPP/R1BQK2R w KQkq - bm Nxf7; id "ECM.731"; +r2qr1k1/1ppb1p1p/p1np2p1/7Q/3PP2b/1B2N2P/PP3PP1/R1B2RK1 w - - bm Bxf7+; id "ECM.732"; +2r3k1/pbq1np1p/1p1b1Bp1/8/6QP/2P2N2/B4PP1/4R1K1 w - - bm Bxf7+; id "ECM.733"; +r2r2k1/1b2qpp1/1p2n3/p1b1p2p/4P1n1/PP1B2PP/1B1NQP2/R3NRK1 b - - bm Nxf2; id "ECM.736"; +r2qr1k1/1b2bp1p/p3p1p1/1p2N1Bn/3P4/P6Q/1P3PPP/RB2R1K1 w - - bm Nxf7; id "ECM.737"; +r5k1/1pp3pp/1b1p1r2/pN1P1n2/P1P3nq/6N1/1P1B1PQP/4RRK1 b - - bm Nxf2; id "ECM.738"; +2rqnk1r/pp2bpp1/2p1pn1p/2P1N2P/3P1BP1/3BQ3/PP6/2K2R1R w - - bm Nxf7; id "ECM.739"; +2rq1rk1/1b2bppp/p1n5/1p1BN3/5B2/P7/1P3PPP/R2Q1RK1 w - - bm Nd7; id "ECM.740"; +3r1qrk/p1p5/bbp3pp/4p3/4Pp1N/2Pn3P/PPQN1PPB/R4RK1 b - - bm Nxf2; id "ECM.741"; +r2qr1k1/pb2bp1p/1pn1p1pB/8/2BP4/P1P2N2/4QPPP/3R1RK1 w - - bm d5; id "ECM.742"; +r3r1k1/1bq1nppp/p1np4/1ppBpN2/4P3/2PP1N2/PP3PPP/R2QR1K1 w - - bm Bxf7+; id "ECM.743"; +r5k1/p4ppp/3qpb2/1P2N3/1nBP4/1P5P/4QPP1/4R1K1 w - - bm Nxf7; id "ECM.744"; +r2qr1k1/1b1nbp1p/p3pp2/1p2N3/3P4/3B1N2/PP2QPPP/R2R2K1 w - - bm Nxf7; id "ECM.745"; +r3k2r/p1qb1p2/1p2p2p/3pPpN1/P1nP3Q/8/2P2PPP/R1B1R1K1 w kq - bm Nxf7; id "ECM.746"; +3qNk2/5p1p/1r3p2/2p5/Q1pb4/3b2P1/P4PBP/4R1K1 b - - bm Bxf2+; id "ECM.747"; +2r1r1k1/1pq1bp1p/p3pnp1/P2n2N1/7R/2P4P/1PB1QPP1/2B1R1K1 w - - bm Nxf7; id "ECM.748"; +r1bq2k1/pp1n1ppp/3b1n2/PQ1B3r/3N1P2/2N5/1PP3PP/R1B2RK1 w - - bm Bxf7+; id "ECM.749"; +2r1r1k1/5ppp/pq3b2/2pB1P2/2p2B2/5Q1P/Pn3PP1/2R1R1K1 w - - bm Bxf7+; id "ECM.750"; +r3kr2/1b2qp2/pp2p2N/4p2Q/8/2n5/P3B1PP/3R1R1K w q - bm Nxf7; id "ECM.752"; +b2r1rk1/pq2bpp1/1p2p2p/4N2n/2P2R2/1PB2N2/1P2QPPP/4R1K1 w - - bm Rxf7; id "ECM.753"; +1r2q1k1/p3pp2/3p1bp1/2pP2N1/8/P5PB/2Q2PK1/1rBR4 w - - bm Nxf7; id "ECM.756"; +2rqrbk1/pb1n1p1p/1p2pnp1/4N3/2BP1N2/1P2Q3/PB3PPP/3R1RK1 w - - bm Nxf7; id "ECM.757"; +r1bqrbk1/5p1p/2pp2nB/pp5Q/4P3/PBNPR2P/1P4P1/R5K1 w - - bm Bxf7+; id "ECM.759"; +r1bqkb1r/1p3ppp/pn1P1n2/4p3/2B5/2N2N2/PP3PPP/R1BQ1RK1 w kq - bm Bxf7+; id "ECM.760"; +r1bqr1k1/1p1nnpb1/p5pp/2P1p1B1/B3N3/5N2/P4PPP/2RQR1K1 w - - bm Nd6; id "ECM.765"; +5rk1/r2qnppp/p1nN4/2Q5/3PB3/4P3/6PP/R4RK1 w - - bm Nxf7; id "ECM.768"; +1qr1b1k1/4bpp1/pn2p2p/1p1nN3/3P4/P2BBN1Q/1P3PPP/4R1K1 w - - bm Bxh6; id "ECM.772"; +4r1k1/p1pq1pp1/2p5/3p1b2/Q7/2P1B2P/P1P1rPP1/2R2RK1 b - - bm Bxh3; id "ECM.778"; +3r1r1k/p5p1/n1p2p1p/1qp2b2/N1R4R/1PB1P1P1/P2P3P/3Q2K1 w - - bm Rxh6+; id "ECM.781"; +6rk/3b1n1p/1p1q3b/1PpNp3/2P1Pp2/2Q2NrP/5RP1/2R2B1K b - - bm Bxh3; id "ECM.783"; +r2q1rk1/ppp2pp1/1b2b2p/3n3Q/2Bp4/3P1N2/PPP2PPP/R1B1R1K1 w - - bm Bxh6; id "ECM.784"; +r3rbk1/1bp1qpp1/p6p/np2p2Q/4P2N/1BP4P/PP3PP1/R1B1R1K1 w - - bm Bg5; id "ECM.785"; +4q3/p2r1ppk/R6p/3n4/3B1Q2/4P2P/5PP1/6K1 w - - bm Rxh6+; id "ECM.786"; +5rk1/Qp5p/3pp1p1/4n3/2P1P2q/5r1P/P3NPP1/3R1RK1 b - - bm Rxh3; id "ECM.788"; +3q1rk1/p2bbpp1/1rn4p/1pp2P2/3pBBP1/3P3P/PPPQ3N/R4RK1 w - - bm Bxh6; id "ECM.790"; +2br2k1/4qppp/p5r1/2pBp3/2P1Pn2/4Q2P/RP3PPK/1N4R1 b - - bm Bxh3; id "ECM.791"; +r1b2rk1/pp2bpp1/4p2p/2q4Q/5nNB/2PB4/PP3PPP/2KR3R w - - bm Nxh6+; id "ECM.794"; +6k1/p4ppp/1pn1b1rr/8/PBpPp2q/2P1P1NP/5PP1/RR3QK1 b - - bm Bxh3; id "ECM.795"; +r1b2rk1/1p3pp1/p5Pp/2bpPp1Q/3N4/1Pq1B1R1/2P4P/3R2K1 w - - bm Bxh6; id "ECM.796"; +r2r2k1/pp1n1bp1/2p2p1p/b4N2/q2BR3/2QB2PP/1PP5/2KR4 w - - bm Nxh6+; id "ECM.797"; +3r2bk/1q4p1/p2P1N1p/2p1rP2/pb5R/7P/1P4P1/2Q2RK1 w - - bm Rxh6+; id "ECM.798"; +r6r/ppnqpk2/3pbpp1/5N2/1PP1P3/5RR1/P2QB1PP/6K1 w - - bm Nh6+; id "ECM.801"; +3r3r/p4pk1/5Rp1/3q4/1p1P2RQ/5N2/P1P4P/2b4K w - - bm Rfxg6+; id "ECM.802"; +2Nq1rk1/6pp/b1p2b2/p6Q/np1p4/6P1/PB3PBP/R3R1K1 w - - bm Be4; id "ECM.806"; +r2r4/p4pk1/2p3p1/1p1nPR2/5p1Q/2N5/PPPq4/1K4R1 w - - bm e6; id "ECM.807"; +2kr3r/pbq3p1/1p2pp2/2b4n/2P1B3/1P1N2Pp/PB2QP1P/R4RK1 b - - bm Nxg3; id "ECM.808"; +3rr3/3q1p1k/p2P2pp/1bp1b3/5N2/6QP/P1B3P1/3RR1K1 w - - bm Bxg6+; id "ECM.812"; +r2q1rk1/pp2ppb1/3pn1pQ/3R4/2P3B1/4BR2/PP4PP/6K1 w - - bm Qxg6; id "ECM.813"; +1n1b1rk1/r4p1p/p1p2qpQ/P3Np2/2BP4/2P1R3/5PPP/R5K1 w - - bm Rb1; id "ECM.814"; +6rk/pb3p1p/3bpPq1/3P4/1p1B3r/1B4P1/PPRQ1R1P/6K1 b - - bm Bxg3; id "ECM.815"; +r2q1rk1/pb1nbp1p/1p2p1p1/4N1BQ/2PP4/P7/5PPP/RB2R1K1 w - - bm Nxg6; id "ECM.817"; +r3r1k1/b1p2pn1/p2q1Bp1/1p1bN1Qp/3P4/2P4P/PPB2PP1/R3R1K1 w - - bm Nxg6; id "ECM.819"; +3r2k1/p1rn1p1p/1p2pp2/6q1/3PQNP1/5P2/P1P4R/R5K1 w - - bm Nxe6; id "ECM.820"; +k2r3r/ppq2p1p/n1pb1Pp1/4p3/2Q5/1R2B1P1/PPP2PBP/R5K1 w - - bm Rxb7; id "ECM.821"; +k7/pp1N4/4P3/5P2/8/5p2/1R6/B4Knq w - - bm Nb6+; id "ECM.823"; +4rrk1/p5pp/1p4q1/3p2n1/2pP2P1/P1P1PP2/3B2K1/1R2QR2 b - - bm Nxf3; id "ECM.824"; +1rbq2k1/b1p3pp/p1Pp4/3Ppr2/8/5N2/PPQ2PPP/R1B2RK1 b - - bm Rxf3; id "ECM.826"; +1r1q1r1k/2p3pp/1p1bQ3/p7/1PP5/Pn3B2/1B3PPP/R4RK1 b - - bm Rxf3; id "ECM.827"; +r4rk1/2p1qpp1/p1p5/2Ppn2b/2PQ1N1p/4P3/PB3PPP/R4RK1 b - - bm Nf3+; id "ECM.828"; +1n2r3/p1pq1kp1/1b1pNpp1/3P4/5RP1/3Q3P/1B3P2/6K1 w - - bm Bxf6; id "ECM.830"; +1rn5/p3Bk1p/1pq1bpp1/P3p3/1Q2P2P/2P3P1/5PB1/1R4K1 w - - bm Bxf6; id "ECM.835"; +r3k2r/1bq1bp2/p3p1pp/1p2P3/3NpP2/4B1Q1/PPP3PP/1K1R3R w kq - bm Nxe6; id "ECM.839"; +rnbqkb1r/pp1n1p2/4p1p1/1N1pP2p/1P4Q1/3B1N2/P1PB1PPP/R3K2R w KQkq - bm Qxe6+; id "ECM.840"; +r1b1k1nr/3n1p1p/1qpBp1p1/pp2b3/4PN2/PBN2Q2/1PP2PPP/2KR3R w kq - bm Nxe6; id "ECM.842"; +r3k2r/pp1n1pb1/1qn1p1p1/2p3Pp/4R2P/2NP2QB/PPPB1P2/2K1R3 w kq - bm Rxe6+; id "ECM.844"; +r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq - bm Nxe6; id "ECM.845"; +rnbqkb1r/1p1n1pp1/p3p2p/3pP3/3p1NQP/2N5/P1PB1PP1/R3KB1R w KQkq - bm Nxe6; id "ECM.847"; +3r1b1R/3bkpp1/1p1np3/1BqpPPP1/PQ1N4/8/1PP5/1K6 w - - bm f6+; id "ECM.848"; +3r2k1/2p1bppp/4b3/p2pP3/qr1N1B1P/8/1PPQ2P1/1K1RR3 b - - bm Rxb2+; id "ECM.850"; +1k1r3r/ppR2ppp/1q2b3/1N6/4Q3/8/PP3PPP/4R1K1 w - - bm Rxb7+; id "ECM.851"; +1r4k1/1r3p2/p1p1b1pQ/q3P3/P7/bPN1R1P1/2P4P/1K1R1B2 b - - bm Bxb3; id "ECM.855"; +6k1/5p2/R3p1p1/1pq1PpB1/4nP2/5Q1P/P2r2PK/8 w - - bm Ra8+; id "ECM.857"; +1r6/5pk1/p1b2qpp/P1P1n3/1N6/Q5NP/5PP1/3R2K1 b - - bm Bxg2; id "ECM.859"; +2R5/p3q1kp/6p1/3p4/b2P2p1/Pr4N1/5Q2/3K3R w - - bm Nf5+; id "ECM.861"; +3r4/kb6/pp6/4R1pr/PPpq4/2N3Q1/2P3PP/3R3K b - - bm Rf8; id "ECM.862"; +4r1k1/5p1p/4q1p1/8/Q5n1/3B2P1/P4P1P/2R3K1 b - - bm Nxf2; id "ECM.863"; +r1bq1rk1/ppp1n1bn/3p2p1/3Pp1Pp/1PP1Pp1P/2NN1P2/P3B3/R1BQ1RK1 b - - bm Nxg5; id "ECM.865"; +1r4k1/pp4pp/2n1b3/1Rq1p3/2P2r2/P1B2P2/2Q1B1PP/3R1K2 b - - bm Rxf3+; id "ECM.868"; +7k/1p4p1/2p4r/5p2/p1QP1q2/2P2PR1/r4P1P/4R2K b - - bm Rxh2+; id "ECM.869"; +1r3r2/6kp/3p1pp1/qnp1pP2/1p2P2N/3P4/PPPQ1P1P/1K1R2R1 w - - bm fxg6; id "ECM.870"; +5rk1/1rP3pp/p4n2/3Pp3/1P2Pq2/2Q4P/P5P1/R3R1K1 b - - bm Rxc7; id "ECM.871"; +2rq1rk1/5ppp/2b1pb2/np6/6N1/2NBB3/PP3PPP/R2Q2K1 w - - bm Bb6; id "ECM.872"; +2Qbq1k1/6p1/1p4Np/4p2P/3rP3/8/3p2PK/3R4 w - - bm Rf1; id "ECM.874"; +2K5/6p1/kp2P3/1p6/1P6/2P1P2p/8/1r6 w - - bm e7; id "ECM.876"; diff --git a/tests/ecm_confident_quick.epd b/tests/ecm_confident_quick.epd new file mode 100644 index 0000000..1a90c75 --- /dev/null +++ b/tests/ecm_confident_quick.epd @@ -0,0 +1,90 @@ +2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - bm Rxc8; id "ECM.035"; +r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - bm g6; id "ECM.147"; +r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - bm Nxg7; id "ECM.280"; +r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - bm Rxc5; id "ECM.339"; +3r1rk1/1pq1bppp/p7/n2RN3/P7/1P6/1B2QPPP/R5K1 w - - bm Nd7; id "ECM.382"; +r1b2rk1/1p3pbp/2p3p1/p1q5/1P6/1Q4P1/1P2PPBP/R1B1R1K1 b - - bm Be6; id "ECM.591"; +2kr3r/ppp1qpp1/2p5/2b2b2/2P1pPP1/1P2P1p1/PBQPB3/RN2K1R1 b Q - bm Rh1; id "ECM.610"; +5rk1/pbrn1ppp/1ppN1q2/2P1p3/3P4/1PRB4/P3QPPP/5RK1 w - - bm Bxh7+; id "ECM.672"; +rq1r1bk1/1b3pp1/3pn2p/1n2BN1P/1P2P3/3R1NP1/3Q1PB1/2R3K1 w - - bm Bxg7; id "ECM.728"; +2r3k1/pbq1np1p/1p1b1Bp1/8/6QP/2P2N2/B4PP1/4R1K1 w - - bm Bxf7+; id "ECM.733"; +6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - bm Bxf2+; id "ECM.005"; +r1b1r1k1/p1p3pp/2p2n2/2bp4/5P2/3BBQPq/PPPK3P/R4N1R b - - bm Bg4; id "ECM.008"; +3r4/1b2k3/1pq1pp2/p3n1pr/2P5/5PPN/PP1N1QP1/R2R2K1 b - - bm Rxh3; id "ECM.009"; +r1b2r1k/3nN2p/p2Q1p2/8/4PP2/1R6/q1PK2PP/4R3 w - - bm Qd5; id "ECM.033"; +2k4r/ppp1n1p1/2n2qb1/2N5/Q1P3p1/P2r3P/1P3PB1/R1B2RK1 w - - bm Qb5; id "ECM.037"; +r1b1rnk1/1p3pb1/1qpp2p1/2n5/2PNP2p/1PN3PP/3R1PBK/BR1Q4 b - - bm Rxa1; id "ECM.039"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "ECM.080"; +1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - - bm exf6; id "ECM.082"; +r1k4r/ppp1b3/5Npp/4pb1Q/8/1B2B3/PqP2PPP/2RR2K1 w - - bm Qxf5+; id "ECM.107"; +r1b1rk2/pp3ppQ/1np5/4q3/2B4N/4P3/PP3PP1/2R2K1R w - - bm Qg8+; id "ECM.114"; +rnb1r1k1/pp5p/2pp2p1/4b3/2P1P2q/1NN1BPp1/PP1QB1P1/3RR1K1 b - - bm Bf4; id "ECM.140"; +1r2k2r/p5bp/4p1p1/q2pn3/1p2N1P1/6QP/PPP5/1KBR3R w k - bm Bh6; id "ECM.149"; +3qn2k/1p3Bp1/rbn4p/2p5/p1P2p2/P2b2PP/1BQNRP2/1R4K1 w - - bm Qxd3; id "ECM.173"; +1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - bm Nxf7; id "ECM.176"; +3r2k1/p2r1p1p/1pR1p1qP/3P1pP1/3R4/1P2Q3/P4K2/8 w - - bm dxe6; id "ECM.183"; +1r3rk1/p4pbp/q1p2pp1/3p1b2/1n1P1P1B/PB3N2/1PPQR1PP/2KR4 b - - bm Bxc2; id "ECM.194"; +2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - - bm Ndxf4; id "ECM.208"; +8/2p2Q1p/1rp5/p3q1kp/P7/2P2RP1/5PK1/8 w - - bm Rf5+; id "ECM.233"; +6k1/3b1p1p/6p1/2BPR3/8/4Q2P/1q3rPK/8 w - - bm Re8+; id "ECM.235"; +6rr/1b3k1p/pbqppPn1/1p5Q/4PN2/P6R/1PP3BP/2B2R1K w - - bm Qxh7+; id "ECM.243"; +2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - - bm Bxf7+; id "ECM.250"; +r5k1/pp2ppb1/4qn2/r3B1p1/3P4/3QNP1R/PP2K1P1/7R w - - bm Bxf6; id "ECM.252"; +1R2br1k/5r1p/p2p1P2/6RQ/3p1P2/4p2B/q6P/5N1K w - - bm Rxe8; id "ECM.253"; +4Rnk1/2p2pp1/3r3p/p2P4/P5Q1/1B5P/5PK1/q7 w - - bm Rxf8+; id "ECM.257"; +r2qk2r/1pp2ppp/p3pnn1/6N1/1B1P2P1/1Q2P2P/PP3PK1/R6R b kq - bm Nh4+; id "ECM.272"; +5r1k/1pqb3p/2n5/p1pB4/2Pp1r1P/1P5P/R2N2K1/3Q1R2 b - - bm Bxh3+; id "ECM.282"; +r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - - bm R1b4; id "ECM.316"; +r3r1k1/pbqn1ppp/1p3n2/1Pb5/2p5/5N1P/PBQ1BPP1/1N1R1RK1 b - - bm Rxe2; id "ECM.337"; +1k2r2r/1bpQN2p/1p6/P3p2q/4np2/2P2N2/2P2PPP/R3R1K1 b - - bm Rxe7; id "ECM.340"; +2b1r2k/2Q4p/4q3/1pp5/3b4/4NP2/1P3BP1/3R2K1 w - - bm Rxd4; id "ECM.348"; +2rq3r/5p2/p3pkbQ/3p4/3N4/2P4R/P4PP1/4R1K1 w - - bm Rf3+; id "ECM.352"; +r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - bm Rxd4; id "ECM.357"; +r3k3/1pqb1p2/p3p3/4n2r/3N1Q2/2P5/PP4B1/4RRK1 w q - bm Rxe5; id "ECM.364"; +7k/p1p1r2p/1p1pnr1q/5pp1/2PPPp2/2PB1P1P/P2Q1PRK/7R b - - bm g4; id "ECM.372"; +7k/5rp1/p1bQB2p/1p4nN/4P3/1Pq5/P5PP/3R3K b - - bm Bxe4; id "ECM.386"; +r3r1k1/1pp2p1b/7p/2Q5/2PP2p1/2P1NpPq/P2R1P1P/6RK b - - bm Rxe3; id "ECM.391"; +3r2k1/pb3p1p/1q4p1/2b1P3/1Pp5/2P1p1P1/P3Q1BP/R1B4K b - - bm Qc6; id "ECM.400"; +1r1q1k2/R4pp1/5p1r/1p1p1n1p/3Pb2N/1BP5/2P1Q1PP/4R1K1 w - - bm Qxe4; id "ECM.405"; +8/2R4p/2R3bk/8/5N1P/1p3PP1/2pqP1K1/8 w - - bm g4; id "ECM.426"; +2r3k1/n3qppp/1B1r1n2/N7/N4P2/1Q4PP/P5B1/R1b4K b - - bm Qe1+; id "ECM.444"; +7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - bm Qxg5+; id "ECM.445"; +6r1/6rk/3p3p/p2Rp3/R1PqPp1b/2N2Q2/6PP/7K b - - bm Rxg2; id "ECM.450"; +r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - bm Ng6+; id "ECM.454"; +r2q1rk1/pp1n2pp/2pb4/1P1p3n/P1PPpP2/4P2b/1BNNBP1P/R2QR1K1 b - - bm Nxf4; id "ECM.496"; +r2qkr2/1p3pQp/2p1b3/1B1pN3/1p6/8/1P1K1PPP/2B1R3 w q - bm Nxc6; id "ECM.502"; +1k1r2r1/p1p3q1/2p2p2/3pn3/1P1b2bB/1QN5/P4PPP/1R2RBK1 b - - bm Nf3+; id "ECM.519"; +r2q4/5p1P/2p1bR2/ppk1p1P1/3pB2Q/8/PPP5/6K1 w - - bm g6; id "ECM.521"; +5r1k/1q2R3/8/6Q1/8/8/6P1/7K b - - bm Rf1+; id "ECM.548"; +r5r1/4q2k/p2p3p/5p2/4p3/P2QR3/1PP2PPP/4R1K1 w - - bm Rxe4; id "ECM.558"; +1r4nk/3b2bp/3p4/3P3p/2pNPq2/P1N2p1P/1P3Q2/1R4KR b - - bm Rxb2; id "ECM.570"; +4r1k1/1ppQr1p1/1p1p1pP1/3P3p/7P/1P3q2/P1P5/1KRR4 w - - bm Re1; id "ECM.574"; +4k3/4Bp2/1p2nP1P/2p5/2K1b1B1/8/P7/8 w - - bm Bf3; id "ECM.584"; +1r3qk1/pb3p1p/1pn2PpQ/2pN4/3r4/5B2/PPP4P/4RRK1 w - - bm Ne7+; id "ECM.611"; +8/p3q1k1/6p1/1p3nP1/2pp1QBr/P2P4/1PP2K2/R7 b - - bm Qe3+; id "ECM.618"; +3q1k2/5p2/p5pN/1b2Q2P/8/8/5PPK/8 w - - bm Qh8+; id "ECM.622"; +8/6kP/6p1/1p1pP3/pP6/P1n2K2/2N5/8 w - - bm e6; id "ECM.638"; +5r2/R4p2/5P1k/4PK2/1p6/8/8/8 w - - bm Rxf7; id "ECM.643"; +1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - - bm Rxh7; id "ECM.663"; +1r2rnk1/2R2bpp/p2q4/1p1N2R1/5P2/1Q1B3P/PP4P1/7K w - - bm Rxg7+; id "ECM.702"; +4rrk1/2qb2pp/p5P1/1p2p3/1b2P3/2N5/PPPQ4/1K1R2R1 w - - bm gxh7+; id "ECM.704"; +3r1rk1/5pp1/pq1n1n1p/2pPR3/2B2P2/1PBQ2RP/P5P1/6K1 w - - bm Rxg7+; id "ECM.715"; +rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - - bm Nxg7; id "ECM.716"; +r4rk1/1p1q1ppp/p1b4B/8/2R3R1/P2P4/1b1N1QPP/6K1 w - - bm Bxg7; id "ECM.723"; +r1bqkbnr/pp2ppp1/2p4p/3n2N1/2BP4/5N2/PPP2PPP/R1BQK2R w KQkq - bm Nxf7; id "ECM.731"; +r2qr1k1/1ppb1p1p/p1np2p1/7Q/3PP2b/1B2N2P/PP3PP1/R1B2RK1 w - - bm Bxf7+; id "ECM.732"; +r2r2k1/1b2qpp1/1p2n3/p1b1p2p/4P1n1/PP1B2PP/1B1NQP2/R3NRK1 b - - bm Nxf2; id "ECM.736"; +2r1r1k1/1pq1bp1p/p3pnp1/P2n2N1/7R/2P4P/1PB1QPP1/2B1R1K1 w - - bm Nxf7; id "ECM.748"; +2rqrbk1/pb1n1p1p/1p2pnp1/4N3/2BP1N2/1P2Q3/PB3PPP/3R1RK1 w - - bm Nxf7; id "ECM.757"; +r1bqrbk1/5p1p/2pp2nB/pp5Q/4P3/PBNPR2P/1P4P1/R5K1 w - - bm Bxf7+; id "ECM.759"; +r2r4/p4pk1/2p3p1/1p1nPR2/5p1Q/2N5/PPPq4/1K4R1 w - - bm e6; id "ECM.807"; +r2q1rk1/pp2ppb1/3pn1pQ/3R4/2P3B1/4BR2/PP4PP/6K1 w - - bm Qxg6; id "ECM.813"; +r2q1rk1/pb1nbp1p/1p2p1p1/4N1BQ/2PP4/P7/5PPP/RB2R1K1 w - - bm Nxg6; id "ECM.817"; +k7/pp1N4/4P3/5P2/8/5p2/1R6/B4Knq w - - bm Nb6+; id "ECM.823"; +1rbq2k1/b1p3pp/p1Pp4/3Ppr2/8/5N2/PPQ2PPP/R1B2RK1 b - - bm Rxf3; id "ECM.826"; +1n2r3/p1pq1kp1/1b1pNpp1/3P4/5RP1/3Q3P/1B3P2/6K1 w - - bm Bxf6; id "ECM.830"; +r1b1k1nr/3n1p1p/1qpBp1p1/pp2b3/4PN2/PBN2Q2/1PP2PPP/2KR3R w kq - bm Nxe6; id "ECM.842"; +r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq - bm Nxe6; id "ECM.845"; +1r6/5pk1/p1b2qpp/P1P1n3/1N6/Q5NP/5PP1/3R2K1 b - - bm Bxg2; id "ECM.859"; +2R5/p3q1kp/6p1/3p4/b2P2p1/Pr4N1/5Q2/3K3R w - - bm Nf5+; id "ECM.861"; +1r3r2/6kp/3p1pp1/qnp1pP2/1p2P2N/3P4/PPPQ1P1P/1K1R2R1 w - - bm fxg6; id "ECM.870"; diff --git a/tests/ecm_confident_sample2.epd b/tests/ecm_confident_sample2.epd new file mode 100644 index 0000000..c5f49f8 --- /dev/null +++ b/tests/ecm_confident_sample2.epd @@ -0,0 +1,40 @@ +r3kb1r/pp2pppp/3q4/3Pn3/6b1/2N1BN2/PP3PPP/R2QKB1R w KQkq - bm Nxe5; id "ECM.015"; +5rk1/3r1p1p/3b2pQ/8/4q3/4B2P/3R1PP1/4R1K1 w - - bm Rxd6; id "ECM.077"; +2kr1bnr/1ppq4/p3bp2/6pp/4p3/2N2NBP/PP3PP1/2RQ1RK1 w - - bm Na4; id "ECM.110"; +r1b1rk2/pp3ppQ/1np5/4q3/2B4N/4P3/PP3PP1/2R2K1R w - - bm Qg8+; id "ECM.114"; +rnb1r1k1/pp5p/2pp2p1/4b3/2P1P2q/1NN1BPp1/PP1QB1P1/3RR1K1 b - - bm Bf4; id "ECM.140"; +8/1bq3kp/p5p1/1pb1p3/4P2P/2PQ2P1/1P5B/5N1K b - - bm Qd8; id "ECM.153"; +r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - - bm Nd6; id "ECM.159"; +8/5p1k/4p1p1/3p2K1/3P1Q1P/P4P2/7q/8 b - - bm f6+; id "ECM.169"; +4r1k1/1np1r1pp/1ppp1q2/6N1/1P3P2/4RQP1/7P/4R1K1 w - - bm Qh5; id "ECM.171"; +2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - - bm Ndxf4; id "ECM.208"; +7k/pp1q2pp/3Nr1n1/3B2Q1/2pP4/B3P1Pb/P6P/6K1 w - - bm Qd8+; id "ECM.221"; +6k1/3b1p1p/6p1/2BPR3/8/4Q2P/1q3rPK/8 w - - bm Re8+; id "ECM.235"; +2r2rk1/pb4pp/1p2p3/4Npq1/3P1n2/5P2/PP1R2PP/RB2Q1K1 b - - bm Rc1; id "ECM.249"; +r5k1/pp2ppb1/4qn2/r3B1p1/3P4/3QNP1R/PP2K1P1/7R w - - bm Bxf6; id "ECM.252"; +6k1/1p3p2/4r1p1/1PPrbq1p/2QN4/P2R1P1P/R4KP1/8 b - - bm Bg3+; id "ECM.270"; +r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - bm Nxg7; id "ECM.280"; +8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - - bm Rxd4; id "ECM.335"; +4q1r1/5kpp/2p1nb2/2PpQp2/r4P2/1N3P2/1BP1R2P/6RK w - - bm Rxg7+; id "ECM.344"; +r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - bm Rxd4; id "ECM.357"; +r1b1nrk1/p2n3p/2pp4/8/2P2q1N/1PB4P/P4PB1/R2QR1K1 w - - bm Bd5+; id "ECM.385"; +7k/5rp1/p1bQB2p/1p4nN/4P3/1Pq5/P5PP/3R3K b - - bm Bxe4; id "ECM.386"; +7r/pp4k1/3pn1p1/q1pB1b2/2P5/5NR1/1P3PP1/2Q3K1 w - - bm b4; id "ECM.423"; +1n2n1r1/r3qppk/p2p3p/3PpP1P/1P2P3/3B2RQ/3B1P1K/6R1 w - - bm Bxh6; id "ECM.433"; +r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - bm Ng6+; id "ECM.454"; +3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - - bm Bxh5; id "ECM.460"; +r5k1/1N3ppp/4b3/1Nq5/Pn3pn1/5B2/1PPQ3P/R6K b - - bm Qxb5; id "ECM.481"; +r1bqn1r1/p2k1pp1/1p5p/n1pPpN2/2P1P3/P1PBB2P/4Q1P1/R4RK1 w - - bm Nxh6; id "ECM.483"; +3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - bm Nd6; id "ECM.495"; +4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - - bm Nxf3; id "ECM.501"; +1r4nk/3b2bp/3p4/3P3p/2pNPq2/P1N2p1P/1P3Q2/1R4KR b - - bm Rxb2; id "ECM.570"; +4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - - bm Rc1; id "ECM.576"; +7k/4b2p/5p1P/5PP1/1pNp1P2/1P1B4/2P2K2/r7 w - - bm g6; id "ECM.619"; +3qr1k1/p4ppp/1p1P4/2r1nN2/4P2n/P7/1B4P1/3QRRK1 w - - bm d7; id "ECM.632"; +b3r1k1/2rN1ppp/2n1p3/p7/P3BP2/1R6/q1P2QPP/3R2K1 w - - bm Bxh7+; id "ECM.668"; +7k/1bp1P1p1/3p2rp/1pb2p1q/5P2/1BP2N1P/1P4P1/R1B2R1K b - - bm Rxg2; id "ECM.709"; +rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - - bm Nxg7; id "ECM.716"; +2rr2k1/4bppp/p1n1p3/3q4/1p1P2N1/2P3R1/P3QPPP/2B2RK1 w - - bm Nh6+; id "ECM.727"; +r3r1k1/b1p2pn1/p2q1Bp1/1p1bN1Qp/3P4/2P4P/PPB2PP1/R3R1K1 w - - bm Nxg6; id "ECM.819"; +k2r3r/ppq2p1p/n1pb1Pp1/4p3/2Q5/1R2B1P1/PPP2PBP/R5K1 w - - bm Rxb7; id "ECM.821"; +r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq - bm Nxe6; id "ECM.845"; diff --git a/tests/ecm_hard.epd b/tests/ecm_hard.epd new file mode 100644 index 0000000..f73a630 --- /dev/null +++ b/tests/ecm_hard.epd @@ -0,0 +1,232 @@ +2k4r/1pp2ppp/p1p1bn2/4N3/1q1rP3/2N1Q3/PPP2PPP/R4RK1 w - - bm Nd5; id "ECM.014"; +r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - - bm Nxd6; id "ECM.018"; +b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - - bm Rxf6+; id "ECM.019"; +r1b2rk1/2q2ppp/2pbp3/p7/4Nn2/3B4/PPPBQ1PP/R4R1K w - - bm Rxf4; id "ECM.028"; +3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - - bm Rgxg6; id "ECM.029"; +r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - bm Nxc6; id "ECM.040"; +2rr4/5pk1/p1q3p1/3bpP1p/1p4nR/1N4Q1/PPP3PP/3NR2K b - - bm Bxg2+; id "ECM.043"; +1k1r1b1r/p1p1q3/2p1p3/4Ppp1/4nP2/P2BQ3/1PP3PB/2KR3R b - - bm Rxh2; id "ECM.051"; +r1b1r1k1/pp4bp/5np1/2qPB3/8/6NP/PPP1Q1B1/R4R1K w - - bm Rxf6; id "ECM.056"; +r4rk1/pp1b2pp/3bpq2/3p1p2/2PPn3/PP1B4/1BQN1PPP/R4RK1 b - - bm Bxh2+; id "ECM.060"; +r1b2rk1/1p2bppp/p3pn2/4B3/1qBR4/2N5/P3QPPP/R5K1 w - - bm Bd3; id "ECM.068"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Qh6; id "ECM.071"; +r1b2kr1/1p1p1pNp/p1n1p1p1/5P2/3QP3/2N5/PqP1B1PP/R4RK1 w - - bm fxg6; id "ECM.076"; +Q7/p1r1ppk1/1qP4p/2Rb2p1/8/3N2P1/4PP1P/6K1 b - - bm Qb1+; id "ECM.081"; +4r1k1/1b4pp/p7/1prP3q/2P1B3/5P2/P3Q2P/3RR2K w - - bm Bg6; id "ECM.084"; +rn1q1r2/4bpk1/p3p3/1pN1N1np/2pP4/4PpBb/PPQ4P/1B1RK1R1 w - - bm Nc6; id "ECM.091"; +6k1/1pqb1p2/5bpB/r2n4/4N1P1/1P3P2/1P1Q4/1K5R w - - bm Qxd5; id "ECM.099"; +r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K - bm Nxh7; id "ECM.115"; +4qbk1/1R5n/p2pr1p1/2pQpNPp/P1P1P3/2P2P2/3B4/5K2 w - - bm Ne7+; id "ECM.117"; +2b2r2/1p2q1k1/r3pppp/4n2P/p3N3/1B4Q1/PPP3P1/3R1R1K w - - bm Rxf6; id "ECM.119"; +rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - - bm Nxh5; id "ECM.128"; +r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - bm Rxe7; id "ECM.130"; +2rq1rk1/pp2bppp/1npp1n2/3PpN1b/2P5/2N3PP/PP2PPB1/R1BQ1RK1 w - - bm c5; id "ECM.131"; +8/1Qp3pk/7p/5p2/5Pqn/1P1r4/P5PP/2B2RK1 b - - bm c6; id "ECM.137"; +b3r3/q2B2k1/3Q2p1/1p5p/3pP3/5P2/1p4PP/5RK1 b - - bm d3+; id "ECM.142"; +6k1/4ppbp/p5p1/1B1Q4/2P2Pn1/8/qr4PP/2B2RK1 b - - bm Bd4+; id "ECM.145"; +8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - - bm Ba3; id "ECM.146"; +4r3/Q2bppkp/3p2p1/3Nn3/4P3/6PP/1qr2PB1/R3R1K1 b - - bm Ra8; id "ECM.155"; +3R4/1p2kp2/p1b1nN2/6p1/8/6BP/2r1qPPK/Q7 w - - bm Rd7+; id "ECM.162"; +r1b3k1/ppp2r2/6p1/3n3p/6qP/3BQ3/PBP5/2KR3R w - - bm Bd4; id "ECM.180"; +4r1k1/1pbb3p/2pp2q1/p1n5/2P2R2/1PN1n1P1/PB2Q1B1/5RK1 w - - bm Qxe3; id "ECM.182"; +1R3b2/3r3k/2p1bp1p/r1q1pNpQ/2PpP2P/6B1/P4PP1/1R4K1 w - - bm Nxh6; id "ECM.186"; +r1b4r/pp2ppk1/2np1np1/3N3p/2B1P3/q3BP2/P1PQ2PP/1R3RK1 w - - bm Nxe7; id "ECM.187"; +5rk1/5pbp/b5p1/p1nNN3/1p2n3/1P4PP/P4PB1/2BR2K1 w - - bm Nd7; id "ECM.190"; +2k1r1r1/ppb2p2/6b1/2qP4/2P2P2/4pP1p/P3Q2P/2RBRN1K b - - bm Bd3; id "ECM.191"; +r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - bm Nb6; id "ECM.193"; +r1k3r1/pppnb1p1/4N3/3QP2p/3P3q/4B3/PPP2P2/R3KB2 w Q - bm Ba6; id "ECM.198"; +r1bq1rk1/pppn2bp/3p2p1/3N1p2/8/BP1BRQ1P/P1PP1PP1/4R1K1 w - - bm Nxc7; id "ECM.206"; +r4rk1/ppp3b1/3p1qp1/3Pp3/2P1Bn2/4BP2/PP1Q4/2K3RR w - - bm Rxg6; id "ECM.211"; +r4n1r/ppq1nk2/1bpRpN2/4PpQ1/8/2B4P/PPP2PP1/2KR4 w - - bm Rd7; id "ECM.215"; +rnb1kr2/p4pQ1/8/1ppPpP2/2p1P3/N6P/Pq4B1/3R1RK1 w q - bm Nxb5; id "ECM.226"; +8/pR3Bk1/3p2p1/5b1p/2P4P/6P1/P4bQK/4q3 b - - bm Bg1+; id "ECM.228"; +rq3r1k/p2n1p2/1pbb1np1/2p2BB1/8/2N2N2/PP3QPP/3R1RK1 w - - bm Rxd6; id "ECM.231"; +3rr1k1/1b5p/p6p/1p3N2/6Pb/P1Q1p3/1PP4P/R5K1 b - - bm Bf2+; id "ECM.237"; +r2qr1k1/1pnb1pp1/p1n1p2p/8/P2P3P/B2B1NP1/6P1/R2Q1RK1 w - - bm Bh7+; id "ECM.247"; +1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - - bm Bb7; id "ECM.251"; +4n1q1/1k1b4/2p4R/2Pp4/1p1N1rpQ/3B4/PPP2P2/2K5 w - - bm Nxc6; id "ECM.271"; +r3r1k1/pp3pp1/2bb1q2/3p4/4n1Pp/2P1BB1P/PP2NPK1/R1Q4R b - - bm Qxf3+; id "ECM.274"; +rn4k1/pp2p1b1/4b3/q2p2Q1/2B2P2/8/P1P1K1P1/R6R w - - bm Rh8+; id "ECM.277"; +4k3/p4ppp/nb1P4/4p3/1P6/P4BP1/3q1r1P/2R2QKR w - - bm Qb5+; id "ECM.287"; +2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - - bm Nxg7; id "ECM.289"; +1r3rk1/6p1/p1pb1qPp/3p4/4nPR1/2N4Q/PPP4P/2K1BR2 b - - bm Rxb2; id "ECM.291"; +2r1qrk1/pp1b1ppp/4pn2/n1b5/8/2NQ1NP1/PP1BPPBP/R2R2K1 w - - bm b4; id "ECM.297"; +2b1qr1k/7p/p1pR2p1/1pP1p1Q1/4P3/1B6/PP4PP/6K1 w - - bm Re6; id "ECM.298"; +8/2b2k1p/2N2pp1/P2p4/3KnP2/6BP/P5P1/8 w - - bm Kxd5; id "ECM.300"; +r3r1k1/p1q2pp1/2p4p/7n/BPPP2N1/3Q1N2/P3n1P1/R1B4K b - - bm Nhg3+; id "ECM.312"; +r1b2rk1/p3bppp/2q5/8/2p1NR2/PnB1P3/1PB1Q1PP/3R2K1 w - - bm Rd6; id "ECM.315"; +1rb2rk1/p1p2ppp/2q5/3R4/2P1N3/bP4B1/P1Q2P1P/1K5R w - - bm Bd6; id "ECM.318"; +rnb2rk1/pp2bppp/2p5/q7/4NN2/4B1QP/PPP3P1/2KR3R w - - bm Rd5; id "ECM.321"; +3r1rk1/pbqn1pp1/1pp2n1p/2b1p1B1/P1B1P2N/2N4P/1PP1QPP1/3R1RK1 w - - bm Rxd7; id "ECM.327"; +2r2r1k/1pq1b1p1/p1b1Qn1p/8/3B4/2NB4/PPP3PP/3R1R1K w - - bm Rxf6; id "ECM.330"; +r1bqr1k1/pp3pp1/2p4p/3PN1n1/3P1b2/2NB4/PPQ2PPP/3R1RK1 b - - bm Rxe5; id "ECM.336"; +2r2rbk/6bp/5qp1/1N1p1n2/4p3/1p5P/1P3PP1/RBBQ1RK1 b - - bm Ng3; id "ECM.338"; +rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - - bm Nxe6; id "ECM.343"; +2r1k2r/1pq1bppp/p3bn2/4N3/2pPN3/2P5/P3QPPP/R1B1R1K1 w k - bm Nxf6+; id "ECM.345"; +r3r1k1/pp3ppp/1qp5/2bbNQ2/5B2/2P5/PP3PPP/3RR1K1 w - - bm Rxd5; id "ECM.349"; +1r6/3b1pk1/pr1p1q1p/2pPb1p1/2B1P1P1/2N2PP1/1PQ3K1/RR6 b - - bm Rxb2; id "ECM.358"; +2r3k1/p1r1ppb1/2bp1np1/q5N1/1p1BP2Q/3P4/PP2N1PP/2R2R1K w - - bm Bxf6; id "ECM.360"; +2rbr2k/1pq2ppp/p3bn2/4p1B1/P3P3/2N3Q1/1PP1B1PP/3R1R1K w - - bm Rxd8; id "ECM.366"; +r4rk1/5p2/p1b1pQpq/8/1B2P3/2NR4/PPP3PP/1K6 w - - bm Rd5; id "ECM.367"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.370"; +1k2rb1r/pbp1q1pp/2pp4/2PnpP2/Q7/1P3NP1/PB5P/2KR1B1R w - - bm Rxd5; id "ECM.371"; +5qk1/p4p2/1p3Pp1/2p4Q/3rr3/7R/PP6/6RK b - - bm Rh4; id "ECM.373"; +r3k2N/pppbq1pp/5n2/3Ppn2/2BP4/2P3bP/PP2Q1P1/RNB2K1R b q - bm Bh2; id "ECM.376"; +r2q1r2/p1pbppbk/1p3npp/n2P2B1/7Q/2NB1N2/PPP3PP/4RRK1 w - - bm d6; id "ECM.377"; +r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - - bm Bxe5+; id "ECM.379"; +2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - - bm Rxa6; id "ECM.394"; +r5kr/p3PR1p/1p1p2pq/4n3/8/3B4/P4QPP/4R1K1 w - - bm Rxe5; id "ECM.395"; +2kr3r/pp3p1p/2b1p3/q3Q3/5P2/2P1B3/P1P3PP/1R3RK1 b - - bm Rhg8; id "ECM.397"; +2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - - bm Rxd3; id "ECM.398"; +r3nrk1/p1pb1qpp/3p1p2/2pP1N2/2P1PR2/P1PB4/4Q1PP/5RK1 w - - bm e5; id "ECM.402"; +r4rk1/1b4bp/p1npq1P1/R3p3/8/1N2BP2/1PPQ2P1/4KB1R w K - bm Qxd6; id "ECM.411"; +6k1/2p3p1/2b4p/p4P2/2pR2PK/2P1r2P/1B6/8 b - - bm Bg2; id "ECM.413"; +3rr1k1/1p1qb2p/pP4p1/2p2p2/4RQ2/3P4/1PPB2PP/4R1K1 w - - bm Bc3; id "ECM.420"; +6k1/rnqb3p/5ppQ/2pPp3/p1N1P3/2PB3P/5PP1/1R4K1 w - - bm f4; id "ECM.422"; +6k1/p4p1p/3pqp2/2p1r3/2Pnr1N1/P6P/1P1Q1PP1/3R1RK1 b - - bm Ne2+; id "ECM.427"; +r2b4/pb2q1k1/np1p2r1/1N1Pp2Q/PPN1Pp2/8/2R2BPp/2R4K w - - bm Ncxd6; id "ECM.434"; +3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - - bm Bh4; id "ECM.438"; +r1r3kb/1pqbpp2/p2p1npB/n7/3NP3/1BN2P2/PPPQ2P1/2KR3R w - - bm Bf8; id "ECM.439"; +4rr1k/pbp3bp/3p4/1p5q/3n4/1B1Q2B1/PP1N1N1P/4RRK1 b - - bm Rf3; id "ECM.440"; +4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - - bm Ng6+; id "ECM.442"; +2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - - bm Qb2; id "ECM.443"; +2k5/1p1b4/2n1p1r1/7q/4RP2/3BQN2/2P2K1P/8 w - - bm f5; id "ECM.447"; +2kr3r/p5b1/Pp2R1p1/2q2p1p/2p2Pn1/2P2BP1/1PQB2P1/5R1K b - - bm h4; id "ECM.456"; +2rq2k1/pp1bpp1p/3p1np1/8/3NPPnQ/1BP5/P1P3P1/1K1R3R w - - bm e5; id "ECM.464"; +r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - - bm Rxd5; id "ECM.465"; +2r1kr2/p1qbbp1Q/3pp3/5p2/1p1N1PB1/6P1/PPP4P/K2RR3 w - - bm Bxf5; id "ECM.466"; +r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - - bm Rf6; id "ECM.467"; +2rr2k1/5pn1/1b2q1pp/pP1pP3/2pP1PP1/2R1B2P/2Q3B1/3R3K w - - bm f5; id "ECM.468"; +r4rk1/5ppp/p7/4PR2/P1qnp2Q/4B3/1P4PP/5RK1 w - - bm Rh5; id "ECM.475"; +4r3/pb3pk1/6p1/8/6P1/1PNrB2K/P4P1P/2R5 b - - bm Rexe3+; id "ECM.476"; +2kr2r1/2pqbp1p/p1n1b3/1P1pP3/4n3/1BP1BN2/1P4PP/RN1Q1RK1 b - - bm Bh3; id "ECM.488"; +2b3k1/5qp1/p2r1n1p/3p4/3B4/1RP3QP/P2Nr1P1/3R2K1 b - - bm Ne4; id "ECM.489"; +1r2r1k1/p4ppb/q1pbnn1p/4p3/N1P1P3/pPB2NP1/2Q1RPBP/R5K1 b - - bm Nxe4; id "ECM.491"; +r4r2/1pnqb2k/3p1p1p/p1pPpPpP/2P1N1P1/4BP2/PP1Q4/R2R2K1 w - - bm Bxc5; id "ECM.492"; +rq1r2k1/3nbp1p/p2p2p1/1p1Pp1P1/3B1P2/3B3Q/PPP4P/2KR2R1 w - - bm f5; id "ECM.497"; +r4rk1/1bq1bppp/8/p2pPR2/3B4/1NnP3Q/1P4PP/4R1K1 w - - bm Rh5; id "ECM.498"; +r1b2rk1/pp4bp/2p3p1/4q2n/NQPN1p1P/1P5n/P3PPB1/2BRRK2 b - - bm f3; id "ECM.500"; +r3rk2/pb2bpp1/1n5p/q1pP1B2/1p3B2/5N2/PPQ2PPP/R2R2K1 w - - bm Bc8; id "ECM.503"; +r1bqr2k/ppp2p1p/5b2/3Pn1p1/1PP1Bp2/8/PB2N1PP/R2Q1RK1 w - - bm Nxf4; id "ECM.504"; +1q4k1/p3rppp/3b1n2/8/5P2/4P3/PP1B3P/RNQ3K1 b - - bm Bxf4; id "ECM.505"; +3r1qk1/5p1p/4b1pP/1pRp4/1P1Q4/r5P1/5P2/4RBK1 w - - bm Rxe6; id "ECM.510"; +4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - - bm Bxf6; id "ECM.516"; +r5n1/pppb1B2/2k1pb2/3p2B1/5P2/2N5/PPP3P1/2KR4 w - - bm Nxd5; id "ECM.517"; +2bk3r/3r2pp/p2nQ3/q2R2P1/1p6/8/PPP2P1P/1K3B1R b - - bm Qxd5; id "ECM.525"; +8/4Ppk1/6p1/1p6/1Pb1Q3/6pq/8/6K1 w - - bm Qe5+; id "ECM.544"; +r1b2rk1/ppp2ppp/2n3q1/b2N2N1/2BP4/4p2P/PPP3P1/R2Q1RK1 w - - bm Nxf7; id "ECM.553"; +r1b2rk1/4bnpp/2p5/pp2q3/4N3/PQ2B1P1/1PP3BP/4RRK1 w - - bm Ng5; id "ECM.559"; +2rr2k1/1p3p2/p2n2p1/P2PnNq1/3QP1p1/1RN5/6PP/5RK1 b - - bm Nf3+; id "ECM.560"; +r3k1r1/pb1qpp1p/1pnp1n1B/2p2R2/3PP3/2P3PN/P1P3BP/R2Q3K b q - bm Nxe4; id "ECM.561"; +2r1r1k1/pp1b1ppp/1q6/3P4/7N/Pn1Q4/1P3PPP/1RB2RK1 b - - bm Nxc1; id "ECM.569"; +r3r1k1/p2n4/3p1pp1/qnp3B1/1p2P1P1/1P3P2/PP2N2Q/1K1R1B2 w - - bm Nf4; id "ECM.580"; +4r1k1/r1q2p1p/p5pB/1pbBpN1n/1n2P3/5Q2/PP3PPP/R1R3K1 w - - bm Rxc5; id "ECM.592"; +1rb1r1k1/p1p1qppp/2pb4/8/2P3n1/4P1P1/PB2BP1P/R1QN1RK1 b - - bm Nxh2; id "ECM.595"; +rnb2rk1/pp4pp/2pb1n2/3N1p1q/2P5/3N2P1/P1Q1PPBP/R1B2RK1 w - - bm Bf4; id "ECM.597"; +8/8/1p1k4/5ppp/PPK1p3/6P1/5PP1/8 b - - bm f4; id "ECM.598"; +8/p5k1/2p2p2/4p1p1/1p2P3/1P4PP/1PP5/5K2 b - - bm g4; id "ECM.601"; +8/8/4b1p1/2Bp3p/5P1P/1pK1Pk2/8/8 b - - bm g5; id "ECM.605"; +r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - bm Bxg6; id "ECM.607"; +6r1/1p3k2/pPp4R/K1P1p1p1/1P2Pp1p/5P1P/6P1/8 w - - bm Rxc6; id "ECM.608"; +1k2b3/4bpp1/p2pp1P1/1p3P2/2q1P3/4B3/PPPQN2r/1K1R4 w - - bm f6; id "ECM.609"; +6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - - bm e5; id "ECM.613"; +5r2/pp1RRrk1/4Qq1p/1PP3p1/8/4B3/1b3P1P/6K1 w - - bm Qxf7+; id "ECM.614"; +6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - bm b5; id "ECM.615"; +r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - bm Rxa6; id "ECM.616"; +3r2k1/p6p/b2r2p1/2qPQp2/2P2P2/8/6BP/R4R1K w - - bm Rxa6; id "ECM.617"; +6B1/2p2pp1/2p5/p3K3/1k6/nP4P1/5P1P/8 b - - bm Nc4+; id "ECM.621"; +4r2k/3n1Qpp/1pRP1p2/p4P2/1p1P2P1/6rP/P3q1B1/6RK w - - bm Qe6; id "ECM.624"; +3rr1k1/pppRn1pp/4Pp2/1P5q/1QB5/4P3/P4P1P/4K1R1 w - - bm Qxe7; id "ECM.627"; +8/6Bp/6p1/2k1p3/4PPP1/1pb4P/8/2K5 b - - bm b2+; id "ECM.629"; +2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - bm Nxa7; id "ECM.635"; +r4rk1/ppq3pp/2p1Pn2/4p1Q1/8/2N5/PP4PP/2KR1R2 w - - bm Rxf6; id "ECM.636"; +r3qr1k/1b4pp/p2RQ3/Bp2p3/4p3/6P1/PPP2P1P/3R2K1 b - - bm Qh5; id "ECM.637"; +8/pR4pk/1b6/2p5/N1p5/8/PP1r2PP/6K1 b - - bm Rxb2; id "ECM.640"; +8/2k5/2p5/2pb2K1/pp4P1/1P1R4/P7/8 b - - bm Bxb3; id "ECM.646"; +2r5/1r5k/1P3p2/PR2pP1p/4P2p/2p1BP2/1p2n3/4R2K b - - bm Nd4; id "ECM.647"; +4r2k/p2qr1pp/1pp2p2/2p1nP1N/4R3/1P1P2RP/1PP2QP1/7K w - - bm Rxg7; id "ECM.648"; +8/1R2P3/6k1/3B4/2P2P2/1p2r3/1Kb4p/8 w - - bm Be6; id "ECM.650"; +3r1rk1/pp1q1ppp/3pn3/2pN4/5PP1/P5PQ/1PP1B3/1K1R4 w - - bm Bb5; id "ECM.653"; +r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - bm Bxh7+; id "ECM.654"; +r1b2rk1/2q1bppp/p1n1p3/1p1np1P1/5P2/1NNBBQ2/PPP4P/R4RK1 w - - bm Bxh7+; id "ECM.665"; +2rqr1k1/1p1bbppp/p3p3/n7/3P2Q1/2PB1N2/P4PPP/R1B1R1K1 w - - bm Bxh7+; id "ECM.673"; +r1b2r1k/ppppq1pp/2n1n3/6N1/2B2P2/4B3/PPP3PP/R2Q1RK1 w - - bm Nxh7; id "ECM.674"; +rn1q1rk1/pb1p1ppp/4p3/2pnP3/1bp5/2N2N2/PP3PPP/RBBQK2R w KQ - bm Bxh7+; id "ECM.675"; +r1b2rk1/1pq2ppp/p1p1p3/2n1P3/2N2P2/3B4/PPP3PP/R2Q1RK1 w - - bm Bxh7+; id "ECM.677"; +rn3rk1/pp1bppbp/1qp3p1/4P1N1/PP1PB3/2P1B3/4Q1PP/R4RK1 w - - bm Nxh7; id "ECM.679"; +3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - - bm Bxh7+; id "ECM.680"; +1r2nrkb/2n2p1p/p2p1Pp1/P1pPp1P1/1pP1P1q1/1P1BB1N1/3Q4/2KR3R w - - bm Rxh7; id "ECM.681"; +r2q3r/2pkb1p1/p2p1n2/4p1p1/Pp2P1P1/1QP5/1P1P2PP/RNB2RK1 b - - bm Rxh2; id "ECM.683"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "ECM.684"; +2rq1bk1/1br2p1p/p2p2p1/1p1P4/4Q3/PP3N2/1BP5/1K1R3R w - - bm Rxh7; id "ECM.685"; +r2qn1k1/pb4Pp/1pn5/2p5/2P2p2/P1PB4/5PPP/R2Q1RK1 w - - bm Bxh7+; id "ECM.686"; +r4rk1/pp1n1ppp/3qp3/3nN1P1/b2P4/P2B1Q2/3B1P1P/1R2R1K1 w - - bm Bxh7+; id "ECM.687"; +r2r2k1/ppqbbppp/4pn2/6N1/n1P4P/3B1N2/PP2QPP1/1KBR3R w - - bm Nxh7; id "ECM.688"; +4nrk1/r4p1p/p2p2pQ/2pPpNPP/qpn1P3/5P1R/PPP1N3/2K3R1 w - - bm Qxh7+; id "ECM.691"; +r3k2r/1b1n1p2/pq1p1bp1/1p4p1/P3P3/1NN5/1PP3PP/R2QRB1K b kq - bm Rxh2+; id "ECM.692"; +r2qrnk1/4bppp/b1p5/1p1p2P1/p2P1N1P/2NBP3/PPQ2P2/2K3RR w - - bm Bxh7+; id "ECM.693"; +3r1rk1/4qp1p/p1bb2p1/2p5/3P4/1P6/PBQN1PPP/2R2RK1 b - - bm Bxh2+; id "ECM.696"; +r2q1rk1/3n1ppp/8/1pbP2P1/p1N4P/PnBBPQ2/5P2/R3K2R w KQ - bm Bxh7+; id "ECM.697"; +2k3r1/ppq2p1p/n1Pb1p2/8/6r1/4BN1b/PPQ2PPP/R3RBK1 b - - bm Bxh2+; id "ECM.698"; +3qr1k1/1br2ppp/p2b4/8/PpNp4/3P4/1PP2PPP/R1BQ1RK1 b - - bm Bxh2+; id "ECM.699"; +r1b4r/3p1kp1/pp3q1p/4RP2/8/B7/P5PP/4QRK1 w - - bm Qe4; id "ECM.701"; +2r2r1k/3b1pb1/p3pp1p/q2p1P1B/8/2N2RR1/P1PQ2PP/7K w - - bm Rxg7; id "ECM.706"; +r2qr1k1/1p3ppp/2pb4/2Np4/1P1P2bn/3BP3/2QN1PPP/1RR3K1 b - - bm Nxg2; id "ECM.712"; +r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - - bm Bxg7; id "ECM.713"; +r5k1/pn1q1rpp/2pp4/5R1N/bP6/4BQ2/P4PPP/2R3K1 w - - bm Nxg7; id "ECM.714"; +r4rk1/5ppp/p2pbb2/3B3Q/qp2p3/4B3/PPP2P1P/2KR2R1 w - - bm Rxg7+; id "ECM.718"; +4q1k1/1b3r1p/p4pp1/1p6/2P2n2/1P3N2/1B3PPP/R2Q3K b - - bm Nxg2; id "ECM.719"; +r3r1k1/p3bppp/q1b2n2/5Q2/1p1B4/1BNR4/PPP3PP/2K2R2 w - - bm Rg3; id "ECM.722"; +4kbr1/pp1bpp1p/3p1p2/3N4/1PBQP3/q7/P1r2PPP/R4RK1 b - - bm Rxg2+; id "ECM.725"; +3q1r2/1p1b1pk1/pn5p/3pN1pQ/3P3P/2r3B1/P4PP1/3RR1K1 w - - bm Nxf7; id "ECM.730"; +r3r1k1/1bqn1ppp/1pp2p2/8/3P4/1B4N1/PP3PPP/R2QR1K1 w - - bm Bxf7+; id "ECM.734"; +r3r1k1/pp3ppp/8/1Nbp3q/3NnBn1/2P5/PPQ2PPP/3R1RK1 b - - bm Ngxf2; id "ECM.735"; +rqb1k2r/1p1nbp1p/p4pp1/8/1PBN1P2/P1N1P3/7P/2RQ1RK1 w kq - bm Bxf7+; id "ECM.754"; +r2r2k1/4ppbp/5np1/p1q5/QnB1P3/5N2/1P3PPP/R1B2RK1 w - - bm Bxf7+; id "ECM.755"; +2rqr1k1/pp2nppp/3p2b1/6B1/2BNn1Q1/P7/1PP2PPP/2KRR3 w - - bm Bxf7+; id "ECM.761"; +r1b2rk1/p6p/2p3Pb/3pp1q1/8/2PB4/PP3PP1/RN1Q1K1R b - - bm Rxf2+; id "ECM.763"; +r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - - bm Nxf7; id "ECM.764"; +r1b1r1k1/pp2qpbp/2p3p1/2P5/3NnB2/7P/PPQ1PPB1/2RR2K1 b - - bm Nxf2; id "ECM.766"; +rn2r1k1/pp3p1p/3P2p1/2p1bbB1/2B5/2N5/Pq4PP/R2Q1RK1 w - - bm Bxf7+; id "ECM.767"; +1bq2k2/1b1n1pp1/pp5p/2pBpN2/P3P2B/3Q1P2/1PP3PP/4K3 w - - bm Bxf7; id "ECM.769"; +rnb2rk1/pp3pbp/2p3pB/2q5/4P3/1BN5/PPP3PP/R2Q1R1K w - - bm Rxf7; id "ECM.770"; +3qr1k1/1br1bp1p/p3p1pB/1p1nN3/3PB3/7Q/PP3PPP/3RR1K1 w - - bm Nxf7; id "ECM.771"; +rr1q2k1/1p2bpp1/2p1p2p/P1Pn4/2NP4/3Q1RP1/5PKP/2B1R3 w - - bm Bxh6; id "ECM.773"; +r2r2k1/pb1nbpp1/1qp1pn1p/1p2N3/3P1B2/P1N1P3/BPQ2PPP/2R2RK1 w - - bm Bxh6; id "ECM.774"; +r1b1r3/pp2Npbk/3pp2p/q5p1/2QNPP2/6P1/PPP3P1/2KR3R w - - bm Ndf5; id "ECM.776"; +1rbqnr2/5p1k/p1np3p/1p1Np3/4P2P/1Q2B3/PPP1BP2/2KR3R w - - bm Bxh6; id "ECM.779"; +r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - - bm Bxh6; id "ECM.780"; +r4rk1/2q1b1p1/p4p1p/n3pP2/1p2Q1N1/4B3/PPP3PP/4RR1K w - - bm Nxh6+; id "ECM.782"; +2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - - bm Bxh6; id "ECM.789"; +r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - - bm Bxh6; id "ECM.792"; +2b1rk2/r6p/1pP1p1p1/p2pNnR1/5Q2/P1B4q/1PP2P1P/1K4R1 w - - bm Nxg6+; id "ECM.799"; +2b2r1k/2p3pp/2Nb4/pP5q/2PP4/P4pP1/5P1P/R1BQ2K1 b - - bm Bxg3; id "ECM.803"; +r1bq2k1/pp3r1p/2n1p1p1/3pP3/6Q1/2PB2P1/P4PK1/R1B4R w - - bm Bxg6; id "ECM.804"; +3q1rk1/2r4p/n1p1n1pQ/p2pP3/Np1P2R1/5PN1/PP3KP1/2R5 w - - bm Rxg6+; id "ECM.805"; +2rqr1k1/pb2bp1p/1pn1pnpB/4N3/3P4/P1N3R1/1P3PPP/RB1Q2K1 w - - bm Rxg6+; id "ECM.810"; +3rr1k1/pb2bp1p/3qp1pB/1p2N3/3P2Q1/2P1R3/P4PPP/4R1K1 w - - bm Nxg6; id "ECM.816"; +1Q4R1/r2qbp2/3p1kp1/3Bp2p/8/3PP1P1/5PKP/8 w - - bm Rxg6+; id "ECM.818"; +1rb2rk1/p1p1qppp/2p2n2/3P4/1b3P2/2NB4/PPPBQ1PP/2KR3R b - - bm Ba3; id "ECM.822"; +1q1r3k/3P1pp1/ppBR1n1p/4Q2P/P4P2/8/5PK1/8 w - - bm Rxf6; id "ECM.825"; +r1bq1rk1/1p2bppp/p3p3/n3P3/4N3/1P1P1N2/PB4PP/R3QR1K w - - bm Nf6+; id "ECM.829"; +r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - - bm Nf3+; id "ECM.831"; +3r1b2/p4bkp/1p1P1p2/r3p1p1/2q1N3/2N2P2/1P1R2PP/2QR3K w - - bm Nxf6; id "ECM.832"; +rqbn1rk1/1p3ppp/p3p3/8/4NP2/8/PPP1BQPP/1K1R3R w - - bm Nf6+; id "ECM.833"; +r1b1kb1r/1p4pp/p2ppn2/8/2qNP3/2N1B3/PPP3PP/R2Q1RK1 w kq - bm Rxf6; id "ECM.834"; +2nr2k1/1pq1bppp/p1p5/2p1P1PQ/2P1NP2/1PNR4/P6P/6K1 w - - bm Nf6+; id "ECM.836"; +6nk/pn2qr1r/1pbp1p1p/2p1pPpN/P1P1P1PP/2PP3R/7Q/2BBK2R w K - bm Nxf6; id "ECM.837"; +r1b1kb1r/1p1n1ppp/p2ppn2/6BB/2qNP3/2N5/PPP2PPP/R2Q1RK1 w kq - bm Nxe6; id "ECM.841"; +2r2rk1/1b3ppp/pq2p3/1pbn2N1/3B3P/1B4P1/P1P1QP2/2KRR3 w - - bm Qh5; id "ECM.843"; +3qr1k1/rp3pbp/2p3p1/3p1b2/N1nP4/P2NP3/1PQ2PPP/1BRR2K1 b - - bm Rxe3; id "ECM.846"; +rr4k1/5p1p/n2p1npQ/q1pP4/6P1/2N2P1N/PP1R3P/2K4R b - - bm Rxb2; id "ECM.853"; +1k2bb1r/1p3p1p/p2qpP1p/3pN3/3P1Q2/2RB2P1/PP3P1P/6K1 w - - bm Qc1; id "ECM.854"; +5rk1/5rp1/p2qb3/R2Np2Q/3bP2B/7P/P5PK/1R6 b - - bm Rf1; id "ECM.856"; +3r1rk1/p3q1pp/2Rb4/3P4/8/1P2Qp2/PB3PPP/3R2K1 b - - bm Bxh2+; id "ECM.858"; +1r4k1/1q3pb1/r1b3p1/pp1Qp3/P3P3/1B2BP2/1PP3P1/1K1R3R w - - bm Qd8+; id "ECM.860"; +8/2q1np1k/6p1/1PPn3p/8/P2Q3P/6P1/2R4K b - - bm Nf5; id "ECM.864"; +7R/1p1r4/2b2p2/2Pp1qk1/3P1bp1/3N4/2Q2PB1/6K1 w - - bm Rg8+; id "ECM.866"; +r6r/1pn1b1k1/2p1pq2/2Pp3p/p2P1Pp1/P2BP1P1/1P2QB2/3R2KR w - - bm Rxh5; id "ECM.867"; +2kr1br1/ppp2p1p/2n1p1q1/2Nn4/3P4/1Q2PB2/PP1B1P1P/2R1K2R b K - bm Qg1+; id "ECM.875"; +2kr3r/1Rp1bpp1/p6q/Q3P3/2P5/3p1NP1/P3P2P/1R4K1 b - - bm Qe3+; id "ECM.877"; +6k1/1R4pp/2p5/8/P1rNp3/6Pb/4PK2/8 w - - bm a5; id "ECM.878"; +r2r2k1/pp3ppp/2q5/2p5/2P1P1n1/P4P1b/1BQ1BP1P/R3R2K b - - bm Rd2; id "ECM.879"; diff --git a/tests/ecm_hard_quick.epd b/tests/ecm_hard_quick.epd new file mode 100644 index 0000000..8c5ac84 --- /dev/null +++ b/tests/ecm_hard_quick.epd @@ -0,0 +1,90 @@ +r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - - bm Nxd6; id "ECM.018"; +b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - - bm Rxf6+; id "ECM.019"; +3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - - bm Rgxg6; id "ECM.029"; +r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - bm Nxc6; id "ECM.040"; +r1b2rk1/1p2bppp/p3pn2/4B3/1qBR4/2N5/P3QPPP/R5K1 w - - bm Bd3; id "ECM.068"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Qh6; id "ECM.071"; +4r1k1/1b4pp/p7/1prP3q/2P1B3/5P2/P3Q2P/3RR2K w - - bm Bg6; id "ECM.084"; +r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K - bm Nxh7; id "ECM.115"; +rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - - bm Nxh5; id "ECM.128"; +2rq1rk1/pp2bppp/1npp1n2/3PpN1b/2P5/2N3PP/PP2PPB1/R1BQ1RK1 w - - bm c5; id "ECM.131"; +b3r3/q2B2k1/3Q2p1/1p5p/3pP3/5P2/1p4PP/5RK1 b - - bm d3+; id "ECM.142"; +6k1/4ppbp/p5p1/1B1Q4/2P2Pn1/8/qr4PP/2B2RK1 b - - bm Bd4+; id "ECM.145"; +1R3b2/3r3k/2p1bp1p/r1q1pNpQ/2PpP2P/6B1/P4PP1/1R4K1 w - - bm Nxh6; id "ECM.186"; +5rk1/5pbp/b5p1/p1nNN3/1p2n3/1P4PP/P4PB1/2BR2K1 w - - bm Nd7; id "ECM.190"; +r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - bm Nb6; id "ECM.193"; +r1k3r1/pppnb1p1/4N3/3QP2p/3P3q/4B3/PPP2P2/R3KB2 w Q - bm Ba6; id "ECM.198"; +r1bq1rk1/pppn2bp/3p2p1/3N1p2/8/BP1BRQ1P/P1PP1PP1/4R1K1 w - - bm Nxc7; id "ECM.206"; +3rr1k1/1b5p/p6p/1p3N2/6Pb/P1Q1p3/1PP4P/R5K1 b - - bm Bf2+; id "ECM.237"; +1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - - bm Bb7; id "ECM.251"; +4n1q1/1k1b4/2p4R/2Pp4/1p1N1rpQ/3B4/PPP2P2/2K5 w - - bm Nxc6; id "ECM.271"; +r3r1k1/pp3pp1/2bb1q2/3p4/4n1Pp/2P1BB1P/PP2NPK1/R1Q4R b - - bm Qxf3+; id "ECM.274"; +rn4k1/pp2p1b1/4b3/q2p2Q1/2B2P2/8/P1P1K1P1/R6R w - - bm Rh8+; id "ECM.277"; +2b1qr1k/7p/p1pR2p1/1pP1p1Q1/4P3/1B6/PP4PP/6K1 w - - bm Re6; id "ECM.298"; +r1b2rk1/p3bppp/2q5/8/2p1NR2/PnB1P3/1PB1Q1PP/3R2K1 w - - bm Rd6; id "ECM.315"; +r1bqr1k1/pp3pp1/2p4p/3PN1n1/3P1b2/2NB4/PPQ2PPP/3R1RK1 b - - bm Rxe5; id "ECM.336"; +2r2rbk/6bp/5qp1/1N1p1n2/4p3/1p5P/1P3PP1/RBBQ1RK1 b - - bm Ng3; id "ECM.338"; +2r3k1/p1r1ppb1/2bp1np1/q5N1/1p1BP2Q/3P4/PP2N1PP/2R2R1K w - - bm Bxf6; id "ECM.360"; +r4rk1/5p2/p1b1pQpq/8/1B2P3/2NR4/PPP3PP/1K6 w - - bm Rd5; id "ECM.367"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.370"; +3rr1k1/1p1qb2p/pP4p1/2p2p2/4RQ2/3P4/1PPB2PP/4R1K1 w - - bm Bc3; id "ECM.420"; +6k1/rnqb3p/5ppQ/2pPp3/p1N1P3/2PB3P/5PP1/1R4K1 w - - bm f4; id "ECM.422"; +6k1/p4p1p/3pqp2/2p1r3/2Pnr1N1/P6P/1P1Q1PP1/3R1RK1 b - - bm Ne2+; id "ECM.427"; +4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - - bm Ng6+; id "ECM.442"; +2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - - bm Qb2; id "ECM.443"; +2k5/1p1b4/2n1p1r1/7q/4RP2/3BQN2/2P2K1P/8 w - - bm f5; id "ECM.447"; +2rq2k1/pp1bpp1p/3p1np1/8/3NPPnQ/1BP5/P1P3P1/1K1R3R w - - bm e5; id "ECM.464"; +r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - - bm Rxd5; id "ECM.465"; +2rr2k1/5pn1/1b2q1pp/pP1pP3/2pP1PP1/2R1B2P/2Q3B1/3R3K w - - bm f5; id "ECM.468"; +4r3/pb3pk1/6p1/8/6P1/1PNrB2K/P4P1P/2R5 b - - bm Rexe3+; id "ECM.476"; +2b3k1/5qp1/p2r1n1p/3p4/3B4/1RP3QP/P2Nr1P1/3R2K1 b - - bm Ne4; id "ECM.489"; +1r2r1k1/p4ppb/q1pbnn1p/4p3/N1P1P3/pPB2NP1/2Q1RPBP/R5K1 b - - bm Nxe4; id "ECM.491"; +rq1r2k1/3nbp1p/p2p2p1/1p1Pp1P1/3B1P2/3B3Q/PPP4P/2KR2R1 w - - bm f5; id "ECM.497"; +r3rk2/pb2bpp1/1n5p/q1pP1B2/1p3B2/5N2/PPQ2PPP/R2R2K1 w - - bm Bc8; id "ECM.503"; +4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - - bm Bxf6; id "ECM.516"; +r5n1/pppb1B2/2k1pb2/3p2B1/5P2/2N5/PPP3P1/2KR4 w - - bm Nxd5; id "ECM.517"; +8/4Ppk1/6p1/1p6/1Pb1Q3/6pq/8/6K1 w - - bm Qe5+; id "ECM.544"; +r1b2rk1/ppp2ppp/2n3q1/b2N2N1/2BP4/4p2P/PPP3P1/R2Q1RK1 w - - bm Nxf7; id "ECM.553"; +2rr2k1/1p3p2/p2n2p1/P2PnNq1/3QP1p1/1RN5/6PP/5RK1 b - - bm Nf3+; id "ECM.560"; +rnb2rk1/pp4pp/2pb1n2/3N1p1q/2P5/3N2P1/P1Q1PPBP/R1B2RK1 w - - bm Bf4; id "ECM.597"; +8/p5k1/2p2p2/4p1p1/1p2P3/1P4PP/1PP5/5K2 b - - bm g4; id "ECM.601"; +8/8/4b1p1/2Bp3p/5P1P/1pK1Pk2/8/8 b - - bm g5; id "ECM.605"; +6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - - bm e5; id "ECM.613"; +6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - bm b5; id "ECM.615"; +3rr1k1/pppRn1pp/4Pp2/1P5q/1QB5/4P3/P4P1P/4K1R1 w - - bm Qxe7; id "ECM.627"; +r3qr1k/1b4pp/p2RQ3/Bp2p3/4p3/6P1/PPP2P1P/3R2K1 b - - bm Qh5; id "ECM.637"; +8/pR4pk/1b6/2p5/N1p5/8/PP1r2PP/6K1 b - - bm Rxb2; id "ECM.640"; +r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - bm Bxh7+; id "ECM.654"; +2rqr1k1/1p1bbppp/p3p3/n7/3P2Q1/2PB1N2/P4PPP/R1B1R1K1 w - - bm Bxh7+; id "ECM.673"; +rn1q1rk1/pb1p1ppp/4p3/2pnP3/1bp5/2N2N2/PP3PPP/RBBQK2R w KQ - bm Bxh7+; id "ECM.675"; +3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - - bm Bxh7+; id "ECM.680"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "ECM.684"; +r4rk1/pp1n1ppp/3qp3/3nN1P1/b2P4/P2B1Q2/3B1P1P/1R2R1K1 w - - bm Bxh7+; id "ECM.687"; +r2qrnk1/4bppp/b1p5/1p1p2P1/p2P1N1P/2NBP3/PPQ2P2/2K3RR w - - bm Bxh7+; id "ECM.693"; +3qr1k1/1br2ppp/p2b4/8/PpNp4/3P4/1PP2PPP/R1BQ1RK1 b - - bm Bxh2+; id "ECM.699"; +r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - - bm Bxg7; id "ECM.713"; +r5k1/pn1q1rpp/2pp4/5R1N/bP6/4BQ2/P4PPP/2R3K1 w - - bm Nxg7; id "ECM.714"; +r3r1k1/p3bppp/q1b2n2/5Q2/1p1B4/1BNR4/PPP3PP/2K2R2 w - - bm Rg3; id "ECM.722"; +3q1r2/1p1b1pk1/pn5p/3pN1pQ/3P3P/2r3B1/P4PP1/3RR1K1 w - - bm Nxf7; id "ECM.730"; +r3r1k1/1bqn1ppp/1pp2p2/8/3P4/1B4N1/PP3PPP/R2QR1K1 w - - bm Bxf7+; id "ECM.734"; +r3r1k1/pp3ppp/8/1Nbp3q/3NnBn1/2P5/PPQ2PPP/3R1RK1 b - - bm Ngxf2; id "ECM.735"; +rqb1k2r/1p1nbp1p/p4pp1/8/1PBN1P2/P1N1P3/7P/2RQ1RK1 w kq - bm Bxf7+; id "ECM.754"; +r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - - bm Nxf7; id "ECM.764"; +rnb2rk1/pp3pbp/2p3pB/2q5/4P3/1BN5/PPP3PP/R2Q1R1K w - - bm Rxf7; id "ECM.770"; +3qr1k1/1br1bp1p/p3p1pB/1p1nN3/3PB3/7Q/PP3PPP/3RR1K1 w - - bm Nxf7; id "ECM.771"; +r2r2k1/pb1nbpp1/1qp1pn1p/1p2N3/3P1B2/P1N1P3/BPQ2PPP/2R2RK1 w - - bm Bxh6; id "ECM.774"; +1rbqnr2/5p1k/p1np3p/1p1Np3/4P2P/1Q2B3/PPP1BP2/2KR3R w - - bm Bxh6; id "ECM.779"; +r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - - bm Bxh6; id "ECM.780"; +2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - - bm Bxh6; id "ECM.789"; +r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - - bm Bxh6; id "ECM.792"; +2b2r1k/2p3pp/2Nb4/pP5q/2PP4/P4pP1/5P1P/R1BQ2K1 b - - bm Bxg3; id "ECM.803"; +1rb2rk1/p1p1qppp/2p2n2/3P4/1b3P2/2NB4/PPPBQ1PP/2KR3R b - - bm Ba3; id "ECM.822"; +r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - - bm Nf3+; id "ECM.831"; +rqbn1rk1/1p3ppp/p3p3/8/4NP2/8/PPP1BQPP/1K1R3R w - - bm Nf6+; id "ECM.833"; +3qr1k1/rp3pbp/2p3p1/3p1b2/N1nP4/P2NP3/1PQ2PPP/1BRR2K1 b - - bm Rxe3; id "ECM.846"; +3r1rk1/p3q1pp/2Rb4/3P4/8/1P2Qp2/PB3PPP/3R2K1 b - - bm Bxh2+; id "ECM.858"; +1r4k1/1q3pb1/r1b3p1/pp1Qp3/P3P3/1B2BP2/1PP3P1/1K1R3R w - - bm Qd8+; id "ECM.860"; +8/2q1np1k/6p1/1PPn3p/8/P2Q3P/6P1/2R4K b - - bm Nf5; id "ECM.864"; +7R/1p1r4/2b2p2/2Pp1qk1/3P1bp1/3N4/2Q2PB1/6K1 w - - bm Rg8+; id "ECM.866"; +2kr1br1/ppp2p1p/2n1p1q1/2Nn4/3P4/1Q2PB2/PP1B1P1P/2R1K2R b K - bm Qg1+; id "ECM.875"; +r2r2k1/pp3ppp/2q5/2p5/2P1P1n1/P4P1b/1BQ1BP1P/R3R2K b - - bm Rd2; id "ECM.879"; diff --git a/tests/ecm_late.epd b/tests/ecm_late.epd new file mode 100644 index 0000000..0b050fa --- /dev/null +++ b/tests/ecm_late.epd @@ -0,0 +1,25 @@ +2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - - bm Rxc5; id "ECM.016"; +8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - - bm Ba3; id "ECM.146"; +2r2rk1/1p1q1ppp/1p3n2/3p1N2/4n3/1N3Q2/PPP2PPP/R2R2K1 w - - bm Rxd5; id "ECM.196"; +2r1qrk1/pp1b1ppp/4pn2/n1b5/8/2NQ1NP1/PP1BPPBP/R2R2K1 w - - bm b4; id "ECM.297"; +r2qrbk1/1p4pb/2n2p1p/pNpn4/2N5/PP1PPQPB/1B5P/2R2RK1 w - - bm Nbd6; id "ECM.313"; +rkb2qr1/1p5p/pQ1bp3/3p2B1/5n2/3B1N2/PP3PPP/2R2RK1 w - - bm Rxc8+; id "ECM.332"; +1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - bm Bd8; id "ECM.370"; +r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - - bm Bxe5+; id "ECM.379"; +3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - - bm Bh4; id "ECM.438"; +2k3r1/1ppr3p/p1pB2q1/6n1/N3Pp2/8/PPP1Q1PP/3R1RK1 b - - bm f3; id "ECM.448"; +r1bqr2k/ppp2p1p/5b2/3Pn1p1/1PP1Bp2/8/PB2N1PP/R2Q1RK1 w - - bm Nxf4; id "ECM.504"; +r3k2r/1p1b1p2/p3p3/2b3p1/4N1n1/1B5P/PPP3P1/R1B2R1K b kq - bm Bc6; id "ECM.506"; +6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - bm b5; id "ECM.615"; +r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - bm Rxa6; id "ECM.616"; +2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - bm Nxa7; id "ECM.635"; +r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - bm Bxh7+; id "ECM.654"; +r2q1rk1/3n1ppp/8/1pbP2P1/p1N4P/PnBBPQ2/5P2/R3K2R w KQ - bm Bxh7+; id "ECM.697"; +r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - - bm Bxg7; id "ECM.713"; +r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - - bm Nxf7; id "ECM.764"; +rn2r1k1/pp3p1p/3P2p1/2p1bbB1/2B5/2N5/Pq4PP/R2Q1RK1 w - - bm Bxf7+; id "ECM.767"; +2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - - bm Bxh6; id "ECM.789"; +4rrk1/p5pp/1p4q1/3p2n1/2pP2P1/P1P1PP2/3B2K1/1R2QR2 b - - bm Nxf3; id "ECM.824"; +r1bq1rk1/1p2bppp/p3p3/n3P3/4N3/1P1P1N2/PB4PP/R3QR1K w - - bm Nf6+; id "ECM.829"; +r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - - bm Nf3+; id "ECM.831"; +6k1/1R4pp/2p5/8/P1rNp3/6Pb/4PK2/8 w - - bm a5; id "ECM.878"; diff --git a/tests/ecm_quick.epd b/tests/ecm_quick.epd new file mode 100644 index 0000000..2246099 --- /dev/null +++ b/tests/ecm_quick.epd @@ -0,0 +1,30 @@ +2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - bm f7+; id "ECM.001"; +7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - bm Bxf3+; id "ECM.002"; +4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - bm Qb5; id "ECM.003"; +2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - bm Rcxc5; id "ECM.004"; +6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - bm Bxf2+; id "ECM.005"; +3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - bm Bxf6+; id "ECM.006"; +3rr1k1/pb3pp1/1p1q1b1p/1P2NQ2/3P4/P1NB4/3K1P1P/2R3R1 w - - bm Rxg7+; id "ECM.007"; +r1b1r1k1/p1p3pp/2p2n2/2bp4/5P2/3BBQPq/PPPK3P/R4N1R b - - bm Bg4; id "ECM.008"; +3r4/1b2k3/1pq1pp2/p3n1pr/2P5/5PPN/PP1N1QP1/R2R2K1 b - - bm Rxh3; id "ECM.009"; +2r4k/pB4bp/6p1/6q1/1P1n4/2N5/P4PPP/2R1Q1K1 b - - bm Qxc1; id "ECM.010"; +1r5r/3b1pk1/3p1np1/p1qPp3/p1N1PbP1/2P2PN1/1PB1Q1K1/R3R3 b - - bm Nxg4; id "ECM.011"; +5rk1/7p/p1N5/3pNp2/2bPnqpQ/P7/1P3PPP/4R1K1 w - - bm Ne7+; id "ECM.012"; +rnb2rk1/pp2np1p/2p2q1b/8/2BPPN2/2P2Q2/PP4PP/R1B2RK1 w - - bm Nd5; id "ECM.013"; +2k4r/1pp2ppp/p1p1bn2/4N3/1q1rP3/2N1Q3/PPP2PPP/R4RK1 w - - bm Nd5; id "ECM.014"; +r3kb1r/pp2pppp/3q4/3Pn3/6b1/2N1BN2/PP3PPP/R2QKB1R w KQkq - bm Nxe5; id "ECM.015"; +2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - - bm Rxc5; id "ECM.016"; +r1b1k3/5p1p/p1p5/3np3/1b2N3/4B3/PPP1BPrP/2KR3R w q - bm Rxd5; id "ECM.017"; +r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - - bm Nxd6; id "ECM.018"; +b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - - bm Rxf6+; id "ECM.019"; +1rr1nbk1/5ppp/3p4/1q1PpN2/np2P3/5Q1P/P1BB1PP1/2R1R1K1 w - - bm Bxa4; id "ECM.020"; +r7/5kp1/2p1p2p/1p1n3P/2rP4/2P3R1/PK2RPP1/2B5 b - - bm Rxc3; id "ECM.021"; +r1r3k1/p3qpp1/b1P4p/3p4/3Nn3/4P3/P1Q2PPP/1BR1K2R b K - bm Qb4+; id "ECM.022"; +rn3rk1/4bppp/1q2p3/p2pP3/8/1PN2B1P/P4PP1/2RQ1RK1 w - - bm Bxd5; id "ECM.023"; +6rk/1p1br2p/pqp5/3pNP2/3Pp3/P5PR/5PKR/Q7 w - - bm Rxh7+; id "ECM.024"; +2b3k1/5p1p/7b/p2B3p/3P4/P2Q1N1P/1q3PP1/6K1 w - - bm Bxf7+; id "ECM.025"; +r1b5/4k3/p7/3p1n2/3Bp3/2P2r1P/PPBK1P2/4R2R w - - bm Bc5+; id "ECM.026"; +r4rk1/1b3Npp/p7/1p3Q2/3P4/1B2q3/P5PP/3n1R1K b - - bm Bxg2+; id "ECM.027"; +r1b2rk1/2q2ppp/2pbp3/p7/4Nn2/3B4/PPPBQ1PP/R4R1K w - - bm Rxf4; id "ECM.028"; +3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - - bm Rgxg6; id "ECM.029"; +r2q1rk1/p3b1pp/2p5/1pn5/1n1Bp1b1/1P6/PQ1PPP2/2RNKBNR b K - bm Bxe2; id "ECM.030"; diff --git a/tests/ecm_ringers.epd b/tests/ecm_ringers.epd new file mode 100644 index 0000000..a0dce6a --- /dev/null +++ b/tests/ecm_ringers.epd @@ -0,0 +1,11 @@ +k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - bm Re7; id "ECM.213"; +6k1/1p3p2/4r1p1/1PPrbq1p/2QN4/P2R1P1P/R4KP1/8 b - - bm Bg3+; id "ECM.270"; +8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - - bm Rxd4; id "ECM.335"; +4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - - bm Nxf3; id "ECM.501"; +R2b2k1/2rq1n1p/3p2p1/1p1Ppp1n/1P6/1B1PQN1P/1B3PP1/6K1 w - - bm Nxe5; id "ECM.406"; +r1qb1r1k/2p3pp/p1n1bp2/1p1Np2Q/P3P3/1BP3R1/1P3PPP/R1B3K1 w - - bm Rxg7; id "ECM.717"; +4rrk1/2pn2pb/p1p1qp2/1pb1pN2/P3P1PN/1P1P4/1BP2PK1/R2Q3R w - - bm Nxg7; id "ECM.721"; +r3k2r/p1qb1p2/1p2p2p/3pPpN1/P1nP3Q/8/2P2PPP/R1B1R1K1 w kq - bm Nxf7; id "ECM.746"; +2r1r1k1/5ppp/pq3b2/2pB1P2/2p2B2/5Q1P/Pn3PP1/2R1R1K1 w - - bm Bxf7+; id "ECM.750"; +6rk/3b1n1p/1p1q3b/1PpNp3/2P1Pp2/2Q2NrP/5RP1/2R2B1K b - - bm Bxh3; id "ECM.783"; +r6r/ppnqpk2/3pbpp1/5N2/1PP1P3/5RR1/P2QB1PP/6K1 w - - bm Nh6+; id "ECM.801"; diff --git a/tests/ep_to_epd.pl b/tests/ep_to_epd.pl new file mode 100644 index 0000000..f419a0a --- /dev/null +++ b/tests/ep_to_epd.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl +# +# Reverse of convert_epd.pl: turns typhoon's setboard/solution|avoid/ +# id/go script-format suites back into real EPD, one record per line, +# now that the engine can read EPD directly (`epd <file>` -- see +# ParseEpdRecord in fen.c, EpdCommand in script.c). Written to retire +# the setboard/solution/go intermediate format for suites that are +# just EPD underneath, so there's one suite format instead of two. +# +# Mirrors ScriptCommand's own state machine: track the most recent +# setboard/id/solution/avoid seen and emit one EPD record per "go", +# ignoring any other command in between (sd, st, easy, version, +# quit, ...) -- those belong to scripts that aren't really EPD suites +# (bench.ep_, trial.ep_) and shouldn't be fed to this converter. +use strict; +use warnings; + +my $fen; +my $id; +my @sol; +my @avoid; + +while (my $line = <>) { + chomp $line; + $line =~ s/\r$//; + if ($line =~ /^\s*setboard\s+(.*?)\s*$/i) { + $fen = $1; + } elsif ($line =~ /^\s*id\s+(.*?)\s*$/i) { + $id = $1; + $id =~ s/^"|"$//g; + } elsif ($line =~ /^\s*solution\s+(.*?)\s*$/i) { + push @sol, split(/\s+/, $1); + } elsif ($line =~ /^\s*avoid\s+(.*?)\s*$/i) { + push @avoid, split(/\s+/, $1); + } elsif ($line =~ /^\s*go\s*$/i) { + if (defined($fen) && (@sol || @avoid)) { + my ($opcode, @moves) = @sol ? ('bm', @sol) : ('am', @avoid); + print "$fen $opcode " . join(' ', @moves) . ';'; + print " id \"$id\";" if defined $id; + print "\n"; + } else { + warn "ep_to_epd.pl: skipping a 'go' with no fen/solution " . + "in scope (non-suite script line?)\n"; + } + @sol = (); + @avoid = (); + $id = undef; + # $fen deliberately survives a record with no solution/avoid + # (mirrors ScriptCommand: a bare setboard+go with no solution + # just plays a move, it doesn't reset anything) -- but since we + # skip printing when there's no solution anyway, this only + # matters for a same-fen "go" that follows one with a solution, + # which none of the real suites in tests/ do. + } + # everything else (sd, st, easy, version, quit, ...) ignored. +} diff --git a/tests/mes400.epd b/tests/mes400.epd new file mode 100644 index 0000000..6d8fa19 --- /dev/null +++ b/tests/mes400.epd @@ -0,0 +1,400 @@ +8/6p1/7k/8/1K6/8/1P6/8 w - - bm Kc5; id "MES.0001"; +8/8/8/2p5/8/8/1kP5/3K4 w - - bm c4; id "MES.0002"; +7K/8/k1P5/7p/8/8/8/8 w - - bm Kg7; id "MES.0003"; +8/8/1p6/8/8/P7/8/5k1K w - - bm Kh2; id "MES.0004"; +8/8/8/8/8/P4p2/k6K/8 w - - bm a4; id "MES.0005"; +8/8/6p1/1k6/4K3/8/5P2/8 w - - bm Kd4; id "MES.0006"; +5k2/6p1/7p/8/7P/7K/8/8 w - - bm Kg3; id "MES.0007"; +8/8/1kpp4/8/2P5/2K5/8/8 w - - bm Kc2; id "MES.0008"; +8/5p2/1p6/1P2K2k/8/8/8/8 w - - bm Kf5; id "MES.0009"; +8/8/8/4p1p1/8/5P2/6K1/3k4 w - - bm Kh1; id "MES.0010"; +8/2p4K/8/7k/8/8/6PP/8 w - - bm g4+; id "MES.0011"; +4k3/4p3/4P3/4P3/8/8/2K5/8 w - - bm Kd3; id "MES.0012"; +K7/8/1k6/1p6/8/2P5/1P6/8 w - - bm b3; id "MES.0013"; +7k/5K2/7P/6pP/8/8/8/8 w - - bm Kf6; id "MES.0014"; +8/p7/P7/8/8/4k3/4P3/4K3 w - - bm Kf1; id "MES.0015"; +8/k7/3p4/6K1/2P1P3/8/8/8 w - - bm Kg6; id "MES.0016"; +K1k5/7p/8/2P5/8/8/P7/8 w - - bm c6; id "MES.0017"; +8/5p2/5p2/5p2/8/4K3/7P/7k w - - bm h4; id "MES.0018"; +8/6p1/k1P2p1p/7K/8/8/8/8 w - - bm Kg6; id "MES.0019"; +2k5/3p4/P7/Pp6/8/4K3/8/8 w - - bm Kd4; id "MES.0020"; +8/1p2pk2/1P6/8/4P3/8/6K1/8 w - - bm Kg3; id "MES.0021"; +8/3Pk1p1/8/1K3Pp1/8/8/8/8 w - - bm Kc6; id "MES.0022"; +8/5p2/7k/6p1/5P1P/8/8/7K w - - bm hxg5+; id "MES.0023"; +4k3/8/3p4/p6K/P5P1/8/8/8 w - - bm Kg5; id "MES.0024"; +8/2p1Pk2/5P2/8/3p1K2/8/8/8 w - - bm Kf3; id "MES.0025"; +1k1K4/1p5P/1P6/8/8/8/p7/8 w - - bm h8=Q; id "MES.0026"; +k7/5K2/8/8/7p/p6P/P7/8 w - - bm Ke6; id "MES.0027"; +8/p2p4/8/8/8/k7/5P1P/7K w - - bm f4; id "MES.0028"; +8/8/1k1p4/8/P1P5/p7/8/3K4 w - - bm Kc2; id "MES.0029"; +8/K3p3/5p2/5P2/8/8/2k1P3/8 w - - bm Kb6; id "MES.0030"; +8/2K5/1p6/1P4k1/5p2/8/6P1/8 w - - bm Kc6; id "MES.0031"; +8/5p2/5p2/8/5KP1/8/6P1/3k4 w - - bm Kf5; id "MES.0032"; +8/8/4k1P1/4p1p1/4K3/3P4/8/8 w - - bm g7; id "MES.0033"; +8/8/7p/p7/k1P2K2/8/P7/8 w - - bm a3; id "MES.0034"; +8/8/1p1K4/Pp6/2k1p3/8/1P6/8 w - - bm a6; id "MES.0035"; +3k4/3p3p/3p4/PK6/4P3/8/8/8 w - - bm Kb6; id "MES.0036"; +7k/3p2p1/2p5/5P2/2P5/K7/8/8 w - - bm Kb4; id "MES.0037"; +8/7p/3p4/8/6pP/8/4PK2/7k w - - bm Kg3; id "MES.0038"; +8/8/K7/2p1k3/8/1p1p4/1P1P4/8 w - - bm Kb5; id "MES.0039"; +8/8/2p5/k1p1K3/p1P5/P7/8/8 w - - bm Kf5; id "MES.0040"; +8/8/1p1p3p/3P4/4K3/8/4P2k/8 w - - bm Kf3; id "MES.0041"; +6K1/8/pp5p/8/7k/3PP3/8/8 w - - bm d4; id "MES.0042"; +K7/8/k7/6p1/6Pp/7p/7P/8 w - - bm Kb8; id "MES.0043"; +2k5/3p2p1/2p5/2K5/5P2/8/2P5/8 w - - bm Kd6; id "MES.0044"; +6k1/p7/3K2p1/1P5p/7P/8/8/8 w - - bm Kd5; id "MES.0045"; +8/1K6/8/k4p2/4pp2/8/4PP2/8 w - - bm Kc6; id "MES.0046"; +8/6p1/4K3/6k1/6P1/6pP/6P1/8 w - - bm Ke5; id "MES.0047"; +8/K7/3pk3/8/p3P3/P7/1P6/8 w - - bm Kb8; id "MES.0048"; +1k6/1p6/3p4/1P6/1P6/1P6/8/7K w - - bm Kg2; id "MES.0049"; +8/6p1/8/5p1P/5P2/6P1/8/5K1k w - - bm Ke1; id "MES.0050"; +8/2p5/3k4/1p1p1K2/8/1P1P4/2P5/8 w - - bm b4; id "MES.0051"; +4K3/pk6/2p5/2P5/1pP4P/1P6/8/8 w - - bm Kd7; id "MES.0052"; +8/2p5/3k3P/5pp1/5p2/1p5K/8/8 w - - bm h7; id "MES.0053"; +8/8/6K1/k2p4/2p5/2P4p/3P3P/8 w - - bm Kf7; id "MES.0054"; +8/8/1p3P1k/4P3/8/1p6/pK2P3/8 w - - bm e6; id "MES.0055"; +8/4Pk2/5p2/8/K7/3p2p1/3P2P1/8 w - - bm Kb5; id "MES.0056"; +8/1p6/8/5k1p/P1P3p1/8/5PK1/8 w - - bm a5; id "MES.0057"; +4k3/5p1p/1p5P/6P1/P7/8/8/4K3 w - - bm Kd2; id "MES.0058"; +5k2/5p1p/7P/6P1/p7/P7/8/1K6 w - - bm Kc2; id "MES.0059"; +K7/3p3p/3k4/8/6pP/8/P5P1/8 w - - bm Kb7; id "MES.0060"; +1k6/1P6/2P5/P7/5ppp/8/6K1/8 w - - bm Kg1; id "MES.0061"; +8/6p1/6pp/8/k4P2/6K1/6PP/8 w - - bm f5; id "MES.0062"; +1k6/p3pp2/p7/P2KP3/P7/8/8/8 w - - bm e6; id "MES.0063"; +8/1p6/8/P7/7p/1P2p2P/4P1k1/4K3 w - - bm b4; id "MES.0064"; +k7/P2K4/p7/1p4p1/1P4P1/6P1/8/8 w - - bm Kd6; id "MES.0065"; +8/2p2p2/1p6/3P1k1K/P1P2P2/8/8/8 w - - bm c5; id "MES.0066"; +2k2K2/2p5/P7/Pp1P4/8/7p/7P/8 w - - bm Ke7; id "MES.0067"; +8/2pp4/8/2PP3k/4pPp1/4P1K1/8/8 w - - bm d6; id "MES.0068"; +8/3p4/3P4/3p2pp/3P4/k4K1P/7P/8 w - - bm h4; id "MES.0069"; +8/2p5/pp6/kP1P4/p3K3/P1P5/8/8 w - - bm d6; id "MES.0070"; +8/5pp1/8/k2p1Pp1/P5P1/3P4/8/3K4 w - - bm Kc2; id "MES.0071"; +8/2pp1k2/2p1pP2/4P3/5P2/6K1/5P2/8 w - - bm f5; id "MES.0072"; +8/8/7p/2p2PP1/p1P5/p1K5/k2P4/8 w - - bm Kc2; id "MES.0073"; +8/1p6/1p6/1k2K3/2p1p3/PpP1P3/1P6/8 w - - bm a4+; id "MES.0074"; +7k/8/5PpK/Pp1P2pp/3P4/8/5p2/8 w - - bm a6; id "MES.0075"; +8/1p5k/1P1p4/3p4/3Pp2p/2K1P2p/7P/8 w - - bm Kb2; id "MES.0076"; +8/2pp2pp/8/2PP1P2/1p5k/8/PP4p1/6K1 w - - bm f6; id "MES.0077"; +8/5k2/2p5/1pPp4/p2P2p1/P2P2P1/P5K1/8 w - - bm Kf1; id "MES.0078"; +8/4p1p1/1k2p1p1/p3P1P1/P1p2P2/2P5/5P2/4K3 w - - bm Kd1; id "MES.0079"; +3k4/1pp5/p4P1p/P1p1KP1P/2P4p/7P/2P5/8 w - - bm Ke6; id "MES.0080"; +8/pp1pppp1/3p2p1/PP2P1P1/K1P4P/8/k7/8 w - - bm h5; id "MES.0081"; +K7/8/8/7p/N2k4/8/8/8 w - - bm Nb2; id "MES.0082"; +7N/2K5/8/8/7p/2k5/8/8 w - - bm Nf7; id "MES.0083"; +8/4k2N/7p/8/1p6/8/4K3/8 w - - bm Kd3; id "MES.0084"; +7K/3k4/8/pN6/8/8/1P6/8 w - - bm Nd4; id "MES.0085"; +8/8/8/8/5p2/4k1p1/4N1P1/5K2 w - - bm Ng1; id "MES.0086"; +8/8/8/8/3p4/2k1p3/2N1P3/3K4 w - - bm Ne1; id "MES.0087"; +5K2/5P2/8/8/kp3n2/8/P7/8 w - - bm Ke7; id "MES.0088"; +8/8/8/4P3/3pp1K1/N2k4/8/8 w - - bm e6; id "MES.0089"; +8/7K/6p1/7P/p7/8/3kN3/8 w - - bm h6; id "MES.0090"; +8/8/5N2/6P1/5k2/5pp1/8/4K3 w - - bm g6; id "MES.0091"; +8/3p4/3k1Np1/P4p2/5K2/8/8/8 w - - bm a6; id "MES.0092"; +8/2p5/1p6/1K6/7k/7P/7P/6N1 w - - bm Kc6; id "MES.0093"; +8/2kp1K2/6N1/3P4/p6P/8/8/8 w - - bm d6+; id "MES.0094"; +4k3/7N/4P3/6P1/8/4p1p1/8/6K1 w - - bm Kf1; id "MES.0095"; +8/8/p6k/8/3N4/PP1K4/7p/8 w - - bm Nf5+; id "MES.0096"; +8/8/8/4N3/5p2/p4p2/5P1p/5K1k w - - bm Nd3; id "MES.0097"; +1k6/p7/8/1p5P/8/2pK4/1P5n/8 w - - bm h6; id "MES.0098"; +2k5/2P4K/1P3p2/6p1/6n1/8/5P2/8 w - - bm f3; id "MES.0099"; +2n5/1k6/4pP2/4P3/2K5/7p/6P1/8 w - - bm f7; id "MES.0100"; +2n5/8/1PkP4/P4p2/1K6/7P/8/8 w - - bm d7; id "MES.0101"; +4k3/4Pp1p/3P1K2/6P1/8/p2n4/8/8 w - - bm g6; id "MES.0102"; +8/6p1/6Pp/5p2/5P1K/2p5/3k3P/7N w - - bm Ng3; id "MES.0103"; +4n2k/7P/5P1p/6p1/2K3P1/5P2/8/8 w - - bm Kd5; id "MES.0104"; +6K1/p7/4ppkp/7p/2PP1P1p/7P/P2P4/4n3 w - - bm d5; id "MES.0105"; +8/7K/7P/1P6/2n4k/4n3/1P6/8 w - - bm Kg6; id "MES.0106"; +8/p2P4/k7/P4P2/nKPn4/8/8/8 w - - bm d8=N; id "MES.0107"; +8/5N1N/8/8/1P6/2K4k/6p1/8 w - - bm Nhg5+; id "MES.0108"; +1K6/N7/k7/8/6N1/1pp5/1P6/8 w - - bm Ne5; id "MES.0109"; +5K2/7k/8/6P1/8/pp1N3N/8/8 w - - bm Ndf4; id "MES.0110"; +8/3N4/5p2/8/4PK2/8/5Pp1/1N2k3 w - - bm Nd2; id "MES.0111"; +8/8/7p/3KNN1k/2p4p/8/3P2p1/8 w - - bm Kc6; id "MES.0112"; +8/6p1/7p/6PN/3NK1k1/6Pp/6p1/8 w - - bm gxh6; id "MES.0113"; +8/1p3p2/8/1KP1P3/3NkpP1/7p/2N2P2/8 w - - bm e6; id "MES.0114"; +8/8/8/6K1/8/4N2p/5n1k/8 w - - bm Kh4; id "MES.0115"; +K2n4/8/P7/8/2k5/8/2N5/8 w - - bm Ka7; id "MES.0116"; +8/1K6/P7/kn6/4N3/8/8/8 w - - bm Nc5; id "MES.0117"; +8/K7/8/2P1N3/n3k3/2p5/8/8 w - - bm c6; id "MES.0118"; +7k/4np2/8/4K2p/8/4N3/P7/8 w - - bm Kd6; id "MES.0119"; +8/N1k1n3/6P1/1P2K3/8/1p6/8/8 w - - bm b6+; id "MES.0120"; +8/2Pp4/1n1N4/8/8/K4Pk1/8/8 w - - bm Kb2; id "MES.0121"; +K7/8/1Np5/8/6k1/n7/P5P1/8 w - - bm Kb7; id "MES.0122"; +3n4/8/2P5/8/5p2/p2N3k/7p/5K2 w - - bm Nf2+; id "MES.0123"; +8/6N1/p5k1/3K4/1p1p4/1P6/8/2n5 w - - bm Ne6; id "MES.0124"; +2n5/8/Pp5p/5N2/8/5k2/3P4/7K w - - bm d4; id "MES.0125"; +7n/8/6pP/6P1/k1K5/p7/8/1N6 w - - bm Kd5; id "MES.0126"; +3n4/3K4/8/1p6/pkN5/1P6/PP6/8 w - - bm Ne5; id "MES.0127"; +4Nn2/8/3P4/kP2P3/5p2/5p2/8/2K5 w - - bm Kd1; id "MES.0128"; +4k3/2p2nKP/3p4/3Ppp1N/8/8/8/8 w - - bm Nf6+; id "MES.0129"; +1n4N1/8/4p1P1/kp2p3/p3P3/8/K7/8 w - - bm Ne7; id "MES.0130"; +n7/K5PP/2k5/8/8/1P1p2Np/6p1/8 w - - bm Ne2; id "MES.0131"; +6N1/8/3P4/3n1P2/5p2/3K1k2/6n1/8 w - - bm f6; id "MES.0132"; +4NN2/8/8/6Pk/8/5nK1/8/8 w - - bm g6; id "MES.0133"; +8/8/2n1n3/8/6N1/5N2/K3p3/5k2 w - - bm Nf6; id "MES.0134"; +7k/3NN3/8/4K3/8/nP1p4/1n4P1/8 w - - bm Kf6; id "MES.0135"; +6K1/3p4/7k/3N4/4N2P/5nP1/8/4n3 w - - bm Nf4; id "MES.0136"; +4k1N1/5n2/1P1p2P1/2n5/3N4/p7/8/3K4 w - - bm b7; id "MES.0137"; +8/8/8/2k5/p1b5/8/1P1K4/8 w - - bm Kc2; id "MES.0138"; +5K2/k7/4P1p1/8/8/8/4b3/8 w - - bm Ke7; id "MES.0139"; +8/6b1/5k2/8/P3K1P1/8/8/8 w - - bm a5; id "MES.0140"; +5K2/8/7P/5p2/1P6/8/3b4/k7 w - - bm h7; id "MES.0141"; +3b4/5k2/3P1p1P/3K4/8/8/8/8 w - - bm Kc6; id "MES.0142"; +8/8/1b5P/kP6/8/5K2/1P6/8 w - - bm Ke4; id "MES.0143"; +1b6/5K2/7P/1kp5/1p6/8/3P4/8 w - - bm Ke6; id "MES.0144"; +K7/1P6/1kP5/3P4/8/8/1p5b/8 w - - bm d6; id "MES.0145"; +8/1p6/8/P1K5/1P6/5b1P/4k3/8 w - - bm Kd4; id "MES.0146"; +8/p7/8/1P2K3/P6P/5b2/5k2/8 w - - bm Kf5; id "MES.0147"; +K7/2P5/b4k1p/3P4/6P1/8/8/8 w - - bm d6; id "MES.0148"; +8/p3p3/K2PkP2/1P6/5b2/8/8/8 w - - bm f7; id "MES.0149"; +8/3k2K1/2p1p3/b5P1/3P1P2/8/8/8 w - - bm Kf7; id "MES.0150"; +8/3Pb1p1/8/3P2P1/5P2/7k/4K3/8 w - - bm Kd3; id "MES.0151"; +8/2p1p3/4Pb2/1P1P3k/4K2P/8/8/8 w - - bm d6; id "MES.0152"; +8/b7/3K1p2/7P/1p5k/1P6/1PP4P/8 w - - bm h6; id "MES.0153"; +5k2/8/5PP1/8/1p3p2/6P1/P4PpK/7b w - - bm Kg1; id "MES.0154"; +4k1K1/3p2pP/p2P3P/P7/8/1p6/1p6/b7 w - - bm h8=R; id "MES.0155"; +8/8/2PK2p1/7p/p1b2P2/P5P1/2P2kP1/8 w - - bm g4; id "MES.0156"; +7k/3K2pP/pb4P1/8/P6p/2p1p3/2P1P1P1/8 w - - bm Kd6; id "MES.0157"; +8/5p1b/4pPkp/3pP2p/1p1P3P/1p2K2P/1P6/8 w - - bm Ke2; id "MES.0158"; +6k1/3p4/8/8/8/B7/P7/7K w - - bm Bb4; id "MES.0159"; +5k2/4p2p/6P1/3K4/8/4B3/8/8 w - - bm Bh6+; id "MES.0160"; +8/5p1B/7P/1K6/1p6/p7/1k6/8 w - - bm Bc2; id "MES.0161"; +5B2/p7/3p4/PPk5/8/8/4K3/8 w - - bm b6; id "MES.0162"; +8/2p2B2/5PK1/3Pk3/8/7p/8/8 w - - bm d6; id "MES.0163"; +8/B1p2p1P/8/4p3/8/k7/p2K4/8 w - - bm Bd4; id "MES.0164"; +8/8/3p4/8/3B4/p7/p1P4p/5K1k w - - bm Ba1; id "MES.0165"; +8/8/5p2/3P4/p1PK4/p7/k7/3B4 w - - bm Kc3; id "MES.0166"; +8/8/5p2/5p2/5P2/3p3B/5k1P/3K4 w - - bm Bg2; id "MES.0167"; +8/8/2pp4/2p2kp1/2K5/6P1/6P1/2B5 w - - bm Be3; id "MES.0168"; +8/7p/6pP/1B4P1/pp6/1k1K4/8/8 w - - bm Be8; id "MES.0169"; +k7/pp1K4/P2B4/p7/P7/P7/8/8 w - - bm Kc8; id "MES.0170"; +8/1p6/1P1p4/1K1p2B1/P2P4/6pp/1P6/5k2 w - - bm Bd2; id "MES.0171"; +1k6/1p1p4/PK2p3/5p1p/6pP/8/8/5B2 w - - bm a7+; id "MES.0172"; +5kB1/3p1P2/7K/2Pp1P1P/p6p/4P3/7P/8 w - - bm Kg6; id "MES.0173"; +3k4/3p4/3P1P2/P6B/1p1p4/1KPP3p/1P3p2/8 w - - bm a6; id "MES.0174"; +8/1p6/1P6/3p1p1p/p2PpPpk/2p1P2P/2P1B1P1/6K1 w - - bm Kf2; id "MES.0175"; +8/8/8/2P4B/8/5K2/3k4/5b2 w - - bm c6; id "MES.0176"; +8/8/2B5/7b/7k/2K5/1P6/8 w - - bm b4; id "MES.0177"; +8/8/8/1P6/7b/7k/7B/7K w - - bm b6; id "MES.0178"; +B3K3/8/8/P1p5/8/8/2b4k/8 w - - bm a6; id "MES.0179"; +8/8/B3P3/3k4/5K2/2P4b/8/8 w - - bm Bc8; id "MES.0180"; +1K6/3p4/3P4/8/k7/1p6/8/1b5B w - - bm Bc6+; id "MES.0181"; +8/8/7B/2P5/1p4p1/3k4/7K/4b3 w - - bm c6; id "MES.0182"; +k7/8/8/1p2P1p1/bK6/8/B7/8 w - - bm Bf7; id "MES.0183"; +3B4/6b1/6P1/2p5/P1k5/8/8/5K2 w - - bm Ba5; id "MES.0184"; +8/pB4Pb/4k3/8/K2P4/8/8/8 w - - bm Be4; id "MES.0185"; +8/8/p7/p3b1B1/8/p7/1p2k3/1K6 w - - bm Be7; id "MES.0186"; +k2K4/8/6P1/2B5/5P2/p7/4p2b/8 w - - bm g7; id "MES.0187"; +B6k/6p1/2K3PP/8/4p3/8/6b1/8 w - - bm Kd6; id "MES.0188"; +8/4k3/6b1/2p5/2BP4/p4K2/4P3/8 w - - bm Kf4; id "MES.0189"; +8/8/2p2K2/5B1p/k7/8/2P1P3/1b6 w - - bm e4; id "MES.0190"; +8/p7/P7/P7/P4B2/8/5k2/6bK w - - bm Bc7; id "MES.0191"; +8/KPb5/8/P5p1/5p2/3k4/7P/2B5 w - - bm Ba3; id "MES.0192"; +8/1k6/1b6/p3p2P/1B5p/P7/5P2/2K5 w - - bm h6; id "MES.0193"; +5k2/P4P1K/1Pb2PB1/8/3p3p/8/8/8 w - - bm Bf5; id "MES.0194"; +8/3p4/pp1B4/k7/p1P5/P1bp4/8/3K4 w - - bm Kc1; id "MES.0195"; +1B6/3k4/3p4/1P6/p4b2/Pp6/1P1pK3/8 w - - bm b6; id "MES.0196"; +1b6/3k3p/P1p5/2Pp3p/K2P3P/8/8/6B1 w - - bm a7; id "MES.0197"; +8/8/8/3pk1K1/1p1p4/1PpP3b/2P1B2P/8 w - - bm Bg4; id "MES.0198"; +7k/2b5/6P1/2p2P1K/2Pp4/p2P4/2p5/2B5 w - - bm f6; id "MES.0199"; +6k1/4b2p/7B/6p1/3p2P1/3Pp1p1/2K1P1P1/8 w - - bm Kb3; id "MES.0200"; +8/2p2b2/Pp1p4/4pp2/k7/2P5/1P2BPK1/8 w - - bm b3+; id "MES.0201"; +B4k1K/4pP1p/PP2P2P/8/8/p7/1p6/3b4 w - - bm Be4; id "MES.0202"; +5k1K/7p/1Pb2P2/5P1B/p2Pp3/4P3/4P3/8 w - - bm Be8; id "MES.0203"; +8/6p1/4ppb1/P1p1p3/1k6/3PP3/1PK3P1/5B2 w - - bm a6; id "MES.0204"; +8/p1p2pp1/1pP3p1/7k/3PPb2/5P1P/8/3K2B1 w - - bm d5; id "MES.0205"; +8/5b1P/8/4K1B1/1k6/8/p7/8 w - - bm Bd2+; id "MES.0206"; +5b2/1B6/1P4k1/4P3/8/8/8/K7 w - - bm Be4+; id "MES.0207"; +7B/7k/3p1Kp1/6P1/8/8/8/1b6 w - - bm Bg7; id "MES.0208"; +8/1p6/8/8/4p3/1k1P4/5b2/KB6 w - - bm Ba2+; id "MES.0209"; +3k4/1K6/1P6/5p2/B1p5/8/3b4/8 w - - bm Ka6; id "MES.0210"; +b7/8/3p4/P7/6p1/8/4KBk1/8 w - - bm Be3; id "MES.0211"; +8/pkP3P1/3B4/8/3K4/1b6/8/8 w - - bm Kc3; id "MES.0212"; +3k4/8/1p1P4/1B6/7b/5K2/7P/8 w - - bm Kf4; id "MES.0213"; +4B3/8/4k3/P5p1/1PK5/8/8/4b3 w - - bm Kc5; id "MES.0214"; +3K1k2/8/2P5/2p5/5P2/8/1B4p1/3b4 w - - bm c7; id "MES.0215"; +8/2B3k1/2P5/6P1/4b2p/7K/7P/8 w - - bm Be5+; id "MES.0216"; +8/1K6/1P6/8/4P3/1p1k4/5P2/6bB w - - bm Ka8; id "MES.0217"; +3K4/3P1p1B/4k1p1/7p/5P2/b7/8/8 w - - bm f5+; id "MES.0218"; +8/K3p3/8/1k1P1b2/1P6/BP6/1P6/8 w - - bm Kb8; id "MES.0219"; +8/3pk3/6P1/P5Pp/5B2/1p5b/pP6/K7 w - - bm a6; id "MES.0220"; +8/B4p2/2p5/P2p4/5P2/1K1k1P2/3P4/5b2 w - - bm a6; id "MES.0221"; +8/2KB4/5pp1/1Pk1p1p1/4p3/7P/4P3/2b5 w - - bm b6; id "MES.0222"; +8/3p3p/3B3k/P1Pp1p1P/8/8/5P2/1b5K w - - bm c6; id "MES.0223"; +8/3p2p1/3P4/p1PkpP1P/K7/6B1/8/5b2 w - - bm h6; id "MES.0224"; +8/5pp1/3k2p1/1p6/pPB5/P4Kb1/5PP1/8 w - - bm fxg3; id "MES.0225"; +7b/1K2p3/7P/p4P2/1pk5/4P2p/1PP5/3B4 w - - bm Kc6; id "MES.0226"; +8/pp3pb1/P1p5/2K1k2B/5p1p/3P4/3P2P1/8 w - - bm d4+; id "MES.0227"; +1b6/5p1p/3k4/8/2Bp1pP1/1p1P4/1KPP3P/8 w - - bm Ba6; id "MES.0228"; +8/p2p1Bp1/P2p4/1Pp3pP/4K1kp/8/6P1/6b1 w - - bm h6; id "MES.0229"; +8/4B1pp/8/pp1PppP1/b3p3/P7/P3KP1P/2k5 w - - bm g6; id "MES.0230"; +4B2K/6B1/8/8/8/8/2p5/3k4 w - - bm Bh5+; id "MES.0231"; +3k2B1/p7/1p2K3/8/6P1/2P1p2p/1B6/8 w - - bm c4; id "MES.0232"; +8/2B5/1p2p1B1/1P6/2K5/8/2p1pP2/2k5 w - - bm Kb3; id "MES.0233"; +Bk6/1Pp5/1p2p3/4P3/P7/1pK4p/8/B7 w - - bm a5; id "MES.0234"; +1K6/2Pb4/1B5k/7P/5b2/2p5/8/8 w - - bm Bd4; id "MES.0235"; +8/8/P2K1k2/7b/8/5B2/4P2p/2b5 w - - bm a7; id "MES.0236"; +b7/2k5/P5P1/8/8/b2B1p1K/7P/8 w - - bm g7; id "MES.0237"; +8/3PP1P1/2b3P1/8/8/5kPp/5p1p/5BbK w - - bm d8=N; id "MES.0238"; +8/8/7k/5K1P/8/B1b5/B7/8 w - - bm Bc1+; id "MES.0239"; +2b5/K7/4p1p1/1p6/1B2B3/8/8/3k4 w - - bm Kb8; id "MES.0240"; +8/2B5/7k/3p4/8/1p2P3/6K1/b6B w - - bm Bf4+; id "MES.0241"; +8/6p1/6p1/5k1P/3Bp3/4PPP1/3p1PBK/4b3 w - - bm h6; id "MES.0242"; +8/6k1/1B6/4n3/8/7p/8/3K4 w - - bm Bg1; id "MES.0243"; +n6k/8/8/6P1/3K4/3B4/8/8 w - - bm Kc5; id "MES.0244"; +6B1/5P2/5Knk/8/7P/8/8/8 w - - bm Ke6; id "MES.0245"; +4k1B1/8/4P2p/3K4/7P/6np/8/8 w - - bm e7; id "MES.0246"; +8/8/4p3/3k1P2/3p4/8/2P5/Bn3K2 w - - bm f6; id "MES.0247"; +8/b7/k7/2P3pP/4p3/3N4/2K5/8 w - - bm h6; id "MES.0248"; +K6k/1p5B/6P1/1p6/8/4n3/2P5/8 w - - bm c3; id "MES.0249"; +8/2P2n1B/8/5K2/8/3p4/3Pkp2/8 w - - bm Ke6; id "MES.0250"; +8/B1p4p/2p5/8/P6k/8/2n2pK1/8 w - - bm Bc5; id "MES.0251"; +6nk/2p4p/3B1P1P/5KpP/8/8/8/8 w - g6 bm hxg6; id "MES.0252"; +B1k5/5n1P/3P3P/4p2K/4p3/4p3/8/8 w - - bm Bb7+; id "MES.0253"; +3B4/pp6/5p2/1P5n/k1K1pp2/7p/1P6/8 w - - bm Be7; id "MES.0254"; +4nk2/2p2p2/7P/4B2p/2K2P1p/7p/5P2/8 w - - bm h7; id "MES.0255"; +8/2p1p1pp/2P1P2k/6pP/p7/P4Bp1/1P4P1/n5K1 w - - bm Bd1; id "MES.0256"; +3N4/8/8/3b3K/5p2/8/8/7k w - - bm Kg4; id "MES.0257"; +8/2K5/bP4k1/3p4/3N4/8/8/8 w - - bm Nc6; id "MES.0258"; +2b5/4N3/5P2/8/2k1K3/8/3p4/8 w - - bm Nd5; id "MES.0259"; +b7/2K5/8/N2P4/pk6/8/8/8 w - - bm d6; id "MES.0260"; +N2k4/p7/8/8/4K3/8/P7/6b1 w - - bm Kd5; id "MES.0261"; +5b1N/8/5k2/8/K1P1nP2/8/8/8 w - - bm f5; id "MES.0262"; +8/1p6/1Pb5/8/8/N5pk/8/6K1 w - - bm Nc2; id "MES.0263"; +8/8/4p3/2bP4/8/8/p7/k2KN3 w - - bm Kc1; id "MES.0264"; +8/8/2k4b/P7/8/8/2N2PKp/8 w - - bm Nd4+; id "MES.0265"; +4k3/3p1N2/8/P1P4b/8/8/7K/8 w - - bm c6; id "MES.0266"; +8/2k5/8/2P5/6N1/2K2p2/5P2/6b1 w - - bm Kd3; id "MES.0267"; +8/pk6/pp6/5b2/2P5/8/3N1K2/8 w - - bm Nb3; id "MES.0268"; +8/N4k2/2P2p1P/8/7p/5K2/2b5/8 w - - bm c7; id "MES.0269"; +K2b4/3P2pp/8/5PN1/8/6k1/8/8 w - - bm f6; id "MES.0270"; +8/1pN2p2/1P6/8/2P5/5k2/b7/6K1 w - - bm c5; id "MES.0271"; +8/8/8/P5PN/8/8/2bPK2p/6k1 w - - bm Ng3; id "MES.0272"; +7k/7b/1P5N/6P1/7p/6pp/8/6K1 w - - bm Nf7+; id "MES.0273"; +8/3k1p2/P1p4P/1p6/8/N1b5/5K2/8 w - - bm Nxb5; id "MES.0274"; +7N/1pp5/8/P1P1k3/1p6/4K3/8/1b6 w - - bm c6; id "MES.0275"; +8/2p3Kp/1p2P3/8/k7/8/1PN3b1/8 w - - bm b3+; id "MES.0276"; +8/3pk3/5p2/P1P1P3/8/1b6/N7/6K1 w - - bm c6; id "MES.0277"; +7k/7P/1p1P4/1p4pp/8/5P2/3N4/b1K5 w - - bm f4; id "MES.0278"; +5b1k/4p1pP/4P1P1/1p6/8/1N6/2pP4/2K5 w - - bm d4; id "MES.0279"; +8/5p2/p3p1P1/7b/Pk6/1p6/8/1KN5 w - - bm g7; id "MES.0280"; +8/3pPp2/3p1k1K/5p2/1b1P3N/2P5/5p2/8 w - - bm Ng6; id "MES.0281"; +8/8/P1p3N1/2Pb4/6p1/1P3pPp/8/2k2K2 w - - bm Ne5; id "MES.0282"; +8/8/5b1P/1p1Pk3/1Pp1P3/6p1/3N2p1/6K1 w - - bm h7; id "MES.0283"; +1k6/2p1NbP1/PpP5/1K6/2p3p1/3P4/8/8 w - - bm Nc8; id "MES.0284"; +8/2k4N/p6p/5p1P/5p2/2p1pP1b/2P1P2P/6K1 w - - bm Ng5; id "MES.0285"; +8/3k4/1K6/PP6/2b5/8/8/5n2 w - - bm Kb7; id "MES.0286"; +1b2K3/1P6/6n1/1P2k3/8/8/8/8 w - - bm Kd8; id "MES.0287"; +3n4/6k1/6P1/1KP5/8/8/8/3b4 w - - bm c6; id "MES.0288"; +1n6/2k4K/5P2/3P1P2/8/8/8/4b3 w - - bm d6+; id "MES.0289"; +8/P1n1kP2/4P3/2K5/8/8/8/3b4 w - - bm Kb6; id "MES.0290"; +8/3n4/P4P2/4p3/K1p5/8/2k4b/8 w - - bm a7; id "MES.0291"; +8/7P/2n1P1KP/3k4/8/3P4/1b6/8 w - - bm d4; id "MES.0292"; +8/4K3/8/3k4/8/1N1B4/6p1/8 w - - bm Bc4+; id "MES.0293"; +1NBk4/p2p4/8/3K4/8/8/8/8 w - - bm Bb7; id "MES.0294"; +8/6B1/8/8/8/2N1p3/p7/k5K1 w - - bm Kf1; id "MES.0295"; +8/6B1/8/1N6/8/4p3/p1k3K1/8 w - - bm Kf3; id "MES.0296"; +N7/1K6/8/8/2p5/5k1p/3B3P/8 w - - bm Kc6; id "MES.0297"; +8/8/5N2/B1pK4/1p6/k7/8/8 w - - bm Ke4; id "MES.0298"; +8/1p6/8/5N2/p1K4B/p7/2k5/8 w - - bm Nd4+; id "MES.0299"; +8/1B6/8/8/6pp/7p/4K2k/1N6 w - - bm Ke1; id "MES.0300"; +8/8/4k3/8/1p6/3BP3/2K3Np/8 w - - bm Nf4+; id "MES.0301"; +8/8/8/1p6/2k3N1/4B3/p2PK3/8 w - - bm d3+; id "MES.0302"; +8/8/8/3N4/8/p4K2/1pP5/3B2k1 w - - bm Nc3; id "MES.0303"; +8/8/2P5/p7/K2p4/3k2N1/B1p5/8 w - - bm Bc4+; id "MES.0304"; +8/1p1K4/1P4NB/6p1/8/4k3/6p1/8 w - - bm Bf8; id "MES.0305"; +1N6/8/K7/3k4/3p3B/p7/2PP4/8 w - - bm Nc6; id "MES.0306"; +2K2N2/2B5/p1p4p/2k5/2P5/7p/8/8 w - - bm Kb7; id "MES.0307"; +8/8/B7/4p2N/5pp1/1kpK4/6P1/8 w - - bm Ng3; id "MES.0308"; +8/8/8/4N3/8/B1k2p1p/4Pp1P/2K5 w - - bm Bb4+; id "MES.0309"; +8/4B2p/8/3p3P/8/3Pk1K1/p7/6N1 w - - bm Bf6; id "MES.0310"; +8/1kpB1p2/3p4/4pK2/N1P3p1/7p/5P2/8 w - - bm Nc5+; id "MES.0311"; +8/4KBp1/1pp3p1/4k1P1/PP3p1N/P2p4/3P1pPP/8 w - - bm Nf3+; id "MES.0312"; +7k/4p3/5p2/1p1p1p2/1PpP1PpB/1pP3P1/7P/6NK w - - bm Bxf6+; id "MES.0313"; +b7/7P/4P1kb/3PK3/8/n7/8/8 w - - bm h8=N+; id "MES.0314"; +1k1K2n1/2p5/2PP1P2/bP6/P7/2n5/8/8 w - - bm b6; id "MES.0315"; +4N3/2n5/1b6/8/k5p1/8/6P1/7K w - - bm Nf6; id "MES.0316"; +5k2/1K4b1/5np1/P7/8/8/8/6N1 w - - bm a6; id "MES.0317"; +b6k/4n3/5P1K/3p4/5N2/8/8/8 w - - bm f7; id "MES.0318"; +8/3b3p/pn2p3/6PP/PN3k1K/5P2/8/8 w - - bm g6; id "MES.0319"; +N7/P4n1P/p7/k4p2/1p2p1p1/7b/2P2K2/8 w - - bm Nb6; id "MES.0320"; +3n4/8/4P3/7p/P3PP1p/3Pbk1P/2p4P/2N1K3 w - - bm e7; id "MES.0321"; +8/8/8/7N/P5bb/K7/8/2k5 w - - bm Nf4; id "MES.0322"; +8/8/1p6/k5P1/1p6/1p1N2b1/bK6/8 w - - bm Ka1; id "MES.0323"; +8/4p3/P3p1NP/7p/K1kb4/7b/P4P2/8 w - - bm Nh4; id "MES.0324"; +8/8/b5pn/4K3/8/5k2/B7/8 w - - bm Kf6; id "MES.0325"; +K6b/8/8/k3P3/7B/8/4n3/8 w - - bm e6; id "MES.0326"; +5k2/3B2bK/6P1/8/2n5/8/6P1/8 w - - bm g3; id "MES.0327"; +1kb5/3p4/P6p/1KB5/8/7P/8/n7 w - - bm Bd6+; id "MES.0328"; +8/6p1/n4b1P/7P/p7/B3K3/8/4k3 w - - bm h7; id "MES.0329"; +8/1B3pk1/3P4/6pP/n7/5K2/8/2b5 w - - bm d7; id "MES.0330"; +B5k1/6P1/7P/n3K2p/2b4P/8/8/8 w - - bm Kf6; id "MES.0331"; +8/5P1K/3b4/8/6k1/1n4P1/1P4PB/8 w - - bm Kg8; id "MES.0332"; +7b/B7/p2P4/7P/7k/8/P1n2KP1/8 w - - bm d7; id "MES.0333"; +2b5/1pkp4/P1P1p3/1P3n2/8/6pp/6P1/6K1 w - - bm a7; id "MES.0334"; +7B/1p3p1P/7n/7p/3K2p1/1P2P1Pp/1k2b3/8 w - - bm Kc5+; id "MES.0335"; +8/pp5P/1p1p1P2/1K3b2/P2k4/8/p1pP4/1nB5 w - - bm f7; id "MES.0336"; +2b5/P1n1Ppp1/P2p4/3P2PK/5k1P/8/4B2P/8 w - - bm g6; id "MES.0337"; +8/2n2b1B/4p1pP/PP4p1/p5P1/3p2PK/3P4/7k w - - bm Bg8; id "MES.0338"; +6k1/6pb/N5p1/K5N1/8/8/8/8 w - - bm Kb4; id "MES.0339"; +8/8/N2b4/8/K2N4/pPk5/8/8 w - - bm Nb5+; id "MES.0340"; +K3b2N/8/2k3Np/7P/8/8/8/8 w - - bm Nf7; id "MES.0341"; +k4N2/8/1p3P2/pp6/8/K4b2/1N6/8 w - - bm Nc4; id "MES.0342"; +1k6/2b5/p1Kpp3/P3PN2/8/2N5/8/8 w - - bm exd6; id "MES.0343"; +8/7N/4p2P/p3p2P/P3P1k1/2p5/7p/2b1K2N w - - bm Nf6+; id "MES.0344"; +1k4B1/8/8/n1K3N1/8/8/8/8 w - - bm Kb6; id "MES.0345"; +8/8/8/8/1B2N3/8/k1K1n3/8 w - - bm Bc5; id "MES.0346"; +8/8/4N1k1/8/5K2/8/B2n4/8 w - - bm Nd4; id "MES.0347"; +8/8/7p/8/8/2N2K2/8/1B3nk1 w - - bm Ne2+; id "MES.0348"; +8/8/8/NB6/8/5k2/2np3K/8 w - - bm Be8; id "MES.0349"; +n7/7k/4p3/B7/6N1/8/8/6K1 w - - bm Ne5; id "MES.0350"; +8/8/8/8/8/p5pK/5B2/1Nn4k w - - bm Bd4; id "MES.0351"; +8/4K2p/6kP/8/4N3/7B/8/n7 w - - bm Be6; id "MES.0352"; +8/3N4/8/5K2/5B2/8/5Pp1/k3n3 w - - bm Bh2; id "MES.0353"; +3N2n1/4p3/3P4/4k3/6K1/8/2B5/8 w - - bm Nf7+; id "MES.0354"; +8/2N1k3/8/n7/B7/6p1/6Pp/7K w - - bm Ne8; id "MES.0355"; +5B1k/7p/6P1/4NnP1/8/8/K4p2/8 w - - bm g7+; id "MES.0356"; +8/8/p7/Pk6/p6p/3P1N2/8/K1n3B1 w - - bm Kb2; id "MES.0357"; +B7/1P1p2p1/k2n1P2/8/N5K1/8/6p1/8 w - - bm b8=N+; id "MES.0358"; +8/3pB3/n4K1k/6N1/1p2P2p/1p6/1P4Pp/8 w - - bm Bf8+; id "MES.0359"; +2n5/1P1p4/3P4/2B1P3/3P4/6p1/pp4P1/Nk5K w - - bm Ba3; id "MES.0360"; +nK6/2p3pk/1pp5/1P3NP1/5P2/1P4P1/p1B5/8 w - - bm Ne3+; id "MES.0361"; +8/6B1/8/8/3N4/4k3/8/2b1K3 w - - bm Kd1; id "MES.0362"; +1b5B/8/8/1N6/8/3k4/2p5/2K5 w - - bm Nc7; id "MES.0363"; +3K4/8/8/4k3/8/N2bB3/p7/8 w - - bm Nb5; id "MES.0364"; +1b6/8/1N4Pk/8/8/B6K/8/8 w - - bm Nd7; id "MES.0365"; +7K/1b6/8/8/3P4/4k3/1B1N2p1/8 w - - bm d5; id "MES.0366"; +b6k/7p/2p5/8/8/2N5/3B4/1K6 w - - bm Bh6; id "MES.0367"; +8/8/7k/8/7P/2p5/4KN2/3B2b1 w - - bm Nd3; id "MES.0368"; +8/6P1/8/8/4k2K/8/2b4p/2N1B3 w - - bm g8=Q; id "MES.0369"; +k7/8/B3P3/8/1K5b/8/4N2p/8 w - - bm Ng3; id "MES.0370"; +8/5b2/8/6B1/3k4/K7/1P4p1/1N6 w - - bm Nd2; id "MES.0371"; +1k6/2p5/B7/4Np2/8/8/6p1/6Kb w - - bm Nc6+; id "MES.0372"; +8/4K1p1/3N4/5P2/4B3/1k6/3pb3/8 w - - bm f6; id "MES.0373"; +K7/2b5/3p1p2/4k3/4P3/4N3/8/2B5 w - - bm Kb7; id "MES.0374"; +8/8/pp6/8/kb3Np1/7P/1K6/4B3 w - - bm Bxb4; id "MES.0375"; +8/5N2/5pP1/7b/p7/8/1Pk5/4BK2 w - - bm Nh8; id "MES.0376"; +8/8/6p1/7p/pb6/k6P/2P1pB2/NK6 w - - bm c3; id "MES.0377"; +4K3/2k1Bp1N/6p1/5PP1/8/7p/b7/8 w - - bm Bf6; id "MES.0378"; +4Bk2/1pp2p1K/3p4/P5Pb/4P3/5N2/8/8 w - - bm Bc6; id "MES.0379"; +1b6/4P3/1P2PN2/8/2P5/P1k5/P1p2P2/K5B1 w - - bm Ne4+; id "MES.0380"; +6b1/2p1B1P1/p1K5/k7/p6p/p1Np2p1/8/8 w - - bm Na2; id "MES.0381"; +3k4/3p4/P2P2P1/p1p1P3/K3p3/3P3B/P3p2P/3N3b w - - bm Nc3; id "MES.0382"; +8/1p1p4/1p1PPp2/1P1K1k1P/2PP4/4B2P/5pp1/6Nb w - - bm e7; id "MES.0383"; +8/5BK1/8/8/p7/4B3/pn6/1k6 w - - bm Bg6+; id "MES.0384"; +6K1/8/6B1/8/8/2B5/pP6/k2n4 w - - bm Bh8; id "MES.0385"; +8/8/8/3kp3/3p4/P2B4/K1N3Np/8 w - - bm Nf4+; id "MES.0386"; +8/B4p2/4Np2/8/3K1P2/7N/4p2k/8 w - - bm Ng1; id "MES.0387"; +2N1k3/4p3/3pKp2/5p2/4NB2/pp6/8/8 w - - bm Nexd6+; id "MES.0388"; +5N2/8/7B/8/2K5/1p1B4/p7/k7 w - - bm Bd2; id "MES.0389"; +8/8/6bk/8/4nP2/4K3/4N3/4n3 w - - bm f5; id "MES.0390"; +3kn1K1/1p6/P4b2/N2Pn3/8/6P1/8/8 w - - bm a7; id "MES.0391"; +8/8/7N/1k5b/3P4/K3P3/2P5/n5b1 w - - bm Kb2; id "MES.0392"; +8/8/P6P/5p2/8/1b6/nN4P1/k3b2K w - - bm Nd1; id "MES.0393"; +2N2n2/8/1P4P1/1P3KP1/1b6/p7/8/k6b w - - bm g7; id "MES.0394"; +2nn4/B7/KP1P4/8/3p3k/8/8/4b3 w - - bm b7; id "MES.0395"; +6K1/8/Pp3p1k/1Pb4P/p2p3N/3P1PP1/4P3/3b4 w - - bm Nf5+; id "MES.0396"; +b7/7P/2p3np/2P3p1/1P4PP/2B3Pk/7p/6bK w - - bm h5; id "MES.0397"; +3n2k1/3N4/7P/6N1/8/K7/7P/4b3 w - - bm Nf6+; id "MES.0398"; +8/8/p5Pb/1kpbP3/5p2/1N6/1KPN4/8 w - - bm c4+; id "MES.0399"; +2N5/5B2/8/4nk1K/6n1/4p3/8/8 w - - bm Ne7+; id "MES.0400"; diff --git a/tests/newiq.epd b/tests/newiq.epd new file mode 100644 index 0000000..f14fdd5 --- /dev/null +++ b/tests/newiq.epd @@ -0,0 +1,360 @@ +r3rnk1/4qpp1/p5np/4pQ2/Pb2N3/1B5P/1P3PP1/R1BR2K1 w - - bm Bxh6; id "IQ.894"; +r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - - bm Bxh6; id "IQ.895"; +6rk/1p1br2p/pqp5/3pNP2/1P1Pp3/P5PR/5PKR/Q7 w - - bm Rxh7+; id "IQ.915"; +r4rk1/pb1q1ppp/2N1p3/2Rn4/3P4/3BPQ2/5PPP/2R3K1 w - - bm Bxh7+; id "IQ.916"; +3rk1nr/1p3q2/p1n2P1p/P1ppp3/3b4/2N2QPB/1PP4P/R1B2R1K w k - bm Nxd5; id "IQ.917"; +3rk1nr/1p3q2/p1n2P1p/P1ppp3/3b4/2N2QPB/1PP4P/R1B2R1K w k - bm Nxd5; id "IQ.918"; +6rk/2nbNq1p/3p1PpR/2pPp1P1/1nBbP3/2N3K1/1P6/2B4Q w - - bm Rxh7+; id "IQ.919"; +6rk/2nbNq1p/3p1PpR/2pPp1P1/1nBbP3/2N3K1/1P6/2B4Q w - - bm Rxh7+; id "IQ.920"; +6rk/2nbNq1p/3p1PpR/2pPp1P1/1nBbP3/2N3K1/1P6/2B4Q w - - bm Rxh7+; id "IQ.921"; +r4r2/2q2pkp/p3pnp1/1p1b2Q1/2nN1N2/P4P2/BPP3PP/R4R1K w - - bm Nf5+; id "IQ.922"; +r4r2/2q2pkp/p3pnp1/1p1b2Q1/2nN1N2/P4P2/BPP3PP/R4R1K w - - bm Nf5+; id "IQ.923"; +r4r2/2q2pkp/p3pnp1/1p1b2Q1/2nN1N2/P4P2/BPP3PP/R4R1K w - - bm Nf5+; id "IQ.924"; +3r2k1/5pp1/R2B3q/2Q5/1p2rP2/6Pp/1bP2K1P/3R4 w - - bm Be5; id "IQ.925"; +1rb2r2/1p1nppk1/2p1n1p1/p3P2p/2qP3R/2N3NP/PP1Q2B1/5RK1 w - - bm Bd5; id "IQ.926"; +3r4/p2nrpkp/2B1p3/2P2pP1/3R3Q/q7/6PP/6RK w - - bm g6; id "IQ.927"; +2qrrb2/pb3ppk/1npp3p/5N2/1p2n3/1P3NPB/PBPQ1P1P/3RR1K1 w - - bm Rxe4 Qf4; id "IQ.928"; +3r2k1/1p3pp1/1p6/7p/q2NP1P1/2Q2P1b/rP5P/2RR2K1 w - - bm Nf5; id "IQ.929"; +3r2k1/1p3pp1/1p6/7p/q2NP1P1/2Q2P1b/rP5P/2RR2K1 w - - bm Nf5; id "IQ.930"; +2q1r2k/5R1p/pp1B2pN/2p1P3/1n1b4/3P2Q1/1P4K1/8 w - - bm Qh4; id "IQ.931"; +2rr2k1/pb3p1p/1pq3p1/4R1N1/2n5/P4P2/BP2Q1PP/4R2K w - - bm Nxf7 Re7; id "IQ.932"; +2r1b1k1/p1q1brp1/1p2p1QB/4p3/4N3/2PBR3/P4PPP/6K1 w - - bm Qh7+; id "IQ.933"; +2r1b1k1/p1q1brp1/1p2p1QB/4p3/4N3/2PBR3/P4PPP/6K1 w - - bm Qh7+; id "IQ.934"; +r1b1rnk1/pp3ppp/3qp3/2pnNPB1/2BP4/2P5/P1P1Q1PP/3R1RK1 w - - bm Nxf7; id "IQ.935"; +2k1r2r/ppn3pq/b7/5p2/5Qn1/2N1B1P1/1P3PB1/2RR2K1 w - - bm Qxc7+; id "IQ.936"; +2k1r2r/ppn3pq/b7/5p2/5Qn1/2N1B1P1/1P3PB1/2RR2K1 w - - bm Qxc7+; id "IQ.937"; +2k1r2r/ppn3pq/b7/5p2/5Qn1/2N1B1P1/1P3PB1/2RR2K1 w - - bm Qxc7+; id "IQ.938"; +r1bq1rk1/pp1n1pp1/5n1p/2b1pN2/2B4B/2N1P3/PPQ2PPP/2KR3R w - - bm Nxh6+; id "IQ.939"; +5r1k/1p2qp1p/p4R1Q/P1p5/2Prp3/7P/1P4P1/5R1K w - - bm Re6; id "IQ.940"; +5r1k/1p2qp1p/p4R1Q/P1p5/2Prp3/7P/1P4P1/5R1K w - - bm Re6; id "IQ.941"; +5rk1/q5pp/4p3/r1bp1p2/1p1B1P2/1P1QP3/P4RPP/2R3K1 w - - bm Rxc5; id "IQ.943"; +5rk1/q5pp/4p3/r1bp1p2/1p1B1P2/1P1QP3/P4RPP/2R3K1 w - - bm Rxc5; id "IQ.944"; +2R4Q/pp1bkp2/4p1r1/qN1p4/Pb6/4B3/1P3PPP/6K1 w - - bm Bb6; id "IQ.945"; +2R4Q/pp1bkp2/4p1r1/qN1p4/Pb6/4B3/1P3PPP/6K1 w - - bm Bb6; id "IQ.946"; +6k1/6p1/p3br2/1p2Q3/5r2/1P1B2R1/1P3qPP/2R4K w - - bm Rc8+; id "IQ.947"; +6k1/6p1/p3br2/1p2Q3/5r2/1P1B2R1/1P3qPP/2R4K w - - bm Rc8+; id "IQ.948"; +5r1k/1b1P3p/4Q1pb/8/P7/4N1PP/1P2r3/R2R2K1 w - - bm Qf6+; id "IQ.949"; +5r1k/1b1P3p/4Q1pb/8/P7/4N1PP/1P2r3/R2R2K1 w - - bm Qf6+; id "IQ.950"; +4k3/1bQ3p1/pp2P3/2nP1qp1/8/2P3P1/P6P/5BK1 w - - bm Bd3; id "IQ.951"; +4k3/1bQ3p1/pp2P3/2nP1qp1/8/2P3P1/P6P/5BK1 w - - bm Bd3; id "IQ.952"; +4k3/1bQ3p1/pp2P3/2nP1qp1/8/2P3P1/P6P/5BK1 w - - bm Bd3; id "IQ.953"; +2rq1r2/pp1b1pkp/8/P2Q2P1/n1nN4/2P5/2P3BP/R1B2RK1 w - - bm Rxa4; id "IQ.954"; +2rq1r2/pp1b1pkp/8/P2Q2P1/n1nN4/2P5/2P3BP/R1B2RK1 w - - bm Rxa4; id "IQ.955"; +2qr1r2/p2n1ppk/1p2p2p/5b2/2PP2NQ/1B4R1/P4PPP/R5K1 w - - bm Bc2; id "IQ.956"; +2qr1r2/p2n1ppk/1p2p2p/5b2/2PP2NQ/1B4R1/P4PPP/R5K1 w - - bm Bc2; id "IQ.957"; +1r2q1k1/1p6/pN2p1p1/P3p3/2PbQ3/1P5P/6P1/5R1K w - - bm Nd7; id "IQ.958"; +1r2q1k1/1p6/pN2p1p1/P3p3/2PbQ3/1P5P/6P1/5R1K w - - bm Nd7; id "IQ.959"; +6k1/pp2q2r/2r1p3/1RPpPpp1/3P4/P5P1/3Q1PK1/7R w - - bm Rxb7; id "IQ.960"; +k7/p1r4p/1pP1bq2/1P4p1/1Qn1B3/2b1P2P/P1P2PP1/3R2K1 w - - bm Qxc3; id "IQ.961"; +k7/p1r4p/1pP1bq2/1P4p1/1Qn1B3/2b1P2P/P1P2PP1/3R2K1 w - - bm Qxc3; id "IQ.962"; +k7/p1r4p/1pP1bq2/1P4p1/1Qn1B3/2b1P2P/P1P2PP1/3R2K1 w - - bm Qxc3; id "IQ.963"; +2r1k1nr/3bbpp1/p2p2P1/4pP2/1pqNP3/2N1B3/PPP3Q1/1K1R2R1 w k - bm b3 Nd5; id "IQ.964"; +r6r/p1kn4/2p1b3/q3p1Qp/4P3/2PBB2P/P5P1/3R1RK1 w - - bm Bc4; id "IQ.965"; +1k1r2r1/pp3p1p/B2q1n2/8/3Pb1p1/2Q5/PR3PPP/2B1R1K1 w - - bm Bf4; id "IQ.966"; +4rk2/1p3r2/3q1nQp/1R1P2p1/P2pp3/3B2PP/1P3P2/2R3K1 w - - bm Qxh6+ Rxb7; id "IQ.967"; +r5k1/1p3pbp/2q1p1p1/p1p1P3/n1P5/P1B2N1P/1P2QPP1/3R2K1 w - - bm Bxa5; id "IQ.968"; +1rb1r2k/3nq1b1/2p2pp1/p3p2p/P1B1P3/1P1RB1N1/2P2QPP/3R3K w - - bm Nf5 Rd6; id "IQ.969"; +1rb1r2k/3nq1b1/2p2pp1/p3p2p/P1B1P3/1P1RB1N1/2P2QPP/3R3K w - - bm Nf5 Rd6; id "IQ.970"; +4q1k1/p6p/1p2n2B/2p2rp1/2P5/2P2P2/P2Q2PP/4R1K1 w - - bm Rxe6; id "IQ.971"; +4q1k1/p6p/1p2n2B/2p2rp1/2P5/2P2P2/P2Q2PP/4R1K1 w - - bm Rxe6; id "IQ.972"; +4rbk1/1q3ppp/2Rr4/1p1P1B2/2b1PR2/p5P1/5P1P/B1Q3K1 w - - bm Bxh7+ Rxd6 Rh4 Bxg7; id "IQ.973"; +6k1/p1p2pp1/2p1n1q1/1r2P3/4N1PQ/5P2/P6P/3R3K w - - bm Rd8+; id "IQ.974"; +r1b2r2/4ppkp/p2p1np1/qpn5/2PNP1P1/2N2P2/PP1QB2P/R3K2R w KQ - bm g5 cxb5; id "IQ.975"; +r2qrn2/1p2nbkp/2p1pp2/p7/3PP1BN/2N4R/PP1Q1P2/2KR4 w - - bm Qh6+; id "IQ.976"; +r2qrn2/1p2nbkp/2p1pp2/p7/3PP1BN/2N4R/PP1Q1P2/2KR4 w - - bm Qh6+; id "IQ.977"; +r2qrn2/1p2nbkp/2p1pp2/p7/3PP1BN/2N4R/PP1Q1P2/2KR4 w - - bm Qh6+; id "IQ.978"; +2r3k1/pR5p/2ppNb2/1Q1P1ppP/4q3/4P1P1/5P2/6K1 w - - bm Rg7+ Qa6; id "IQ.979"; +7R/5Q2/6pp/4rp1k/P3P3/5Pb1/4KPq1/3R4 w - - bm Rxh6+; id "IQ.980"; +rnb4r/p1pq1Pkp/1pn1p1p1/3p2N1/3P4/P1PB3Q/2P2PPP/R1B1K2R w KQ - bm Qh6+; id "IQ.981"; +r1r5/p2qnkbp/bp2ppp1/3p4/3P1P2/1Q1N1N1B/PP2PP1P/2R2RK1 w - - bm Nde5+; id "IQ.982"; +r1b2rk1/1p3pbn/p2p2p1/q1nPp2p/P3P3/2NBBPN1/1P1Q2PP/R4RK1 w - - bm b4; id "IQ.983"; +b3k3/2q1b1p1/p3p2r/1pPpP2p/1P1N3P/6P1/P3Q3/1BR3K1 w - - bm Bg6+; id "IQ.984"; +8/2bP1Q1p/6pk/p3p3/P1Bp4/1P1R2KP/5PP1/2q4r w - - bm Re3; id "IQ.985"; +8/2bP1Q1p/6pk/p3p3/P1Bp4/1P1R2KP/5PP1/2q4r w - - bm Re3; id "IQ.987"; +2b1rqk1/2R2ppp/1p1P4/p3Q3/7P/P7/B4PP1/6K1 w - - bm Qxe8; id "IQ.989"; +r3k2r/pppqnpbp/4p1p1/3nP1B1/Q2PN2P/5P2/PP2BP2/2R1K1R1 w - - bm Nd6+; id "IQ.990"; +r3r1k1/1p3pPp/p1p5/3bb2N/7q/1P1Q4/2PB2PP/4RRK1 w - - bm Rxe5; id "IQ.991"; +1q1rr1k1/pn5p/1p3pp1/1Q2b1B1/1P6/5B1P/P4PP1/2R1R1K1 w - - bm Rxe5 Bxf6; id "IQ.992"; +r2qrbk1/p2b2pp/1pn1pn2/3p4/2pP1P2/2P2NN1/PPQ3PP/RBB2RK1 w - - bm Ng5; id "IQ.993"; +r3r1k1/2qb1pbp/n1p2np1/N3p1B1/1P2P3/P1N5/2Q1BPPP/3R1RK1 w - - bm Bxa6 Bxf6; id "IQ.994"; +r3r1k1/2qb1pbp/n1p2np1/N3p1B1/1P2P3/P1N5/2Q1BPPP/3R1RK1 w - - bm Bxa6 Bxf6; id "IQ.995"; +r3r1k1/2qb1pbp/n1p2np1/N3p1B1/1P2P3/P1N5/2Q1BPPP/3R1RK1 w - - bm Bxa6 Bxf6; id "IQ.996"; +r3r1k1/2qb1pbp/n1p2np1/N3p1B1/1P2P3/P1N5/2Q1BPPP/3R1RK1 w - - bm Bxa6 Bxf6; id "IQ.997"; +r1b2rk1/1p2qppp/2pb1n2/p3n1N1/2BR4/1PN1P3/PBQ2PPP/2K4R w - - bm Rxd6; id "IQ.998"; +r1b2rk1/1p2qppp/2pb1n2/p3n1N1/2BR4/1PN1P3/PBQ2PPP/2K4R w - - bm Rxd6; id "IQ.999"; +r1b2rk1/1p2qppp/2pb1n2/p3n1N1/2BR4/1PN1P3/PBQ2PPP/2K4R w - - bm Rxd6; id "IQ.1000"; +r4rk1/5pp1/p2R1Bb1/1pq1Pp1p/7Q/1Bn5/P5PP/5R1K w - - bm Bxg7; id "IQ.1001"; +r4rk1/5pp1/p2R1Bb1/1pq1Pp1p/7Q/1Bn5/P5PP/5R1K w - - bm Bxg7; id "IQ.1002"; +5r2/p4pkp/3bpNp1/q3n3/1r3B1Q/3p4/PPP2PPP/R4K1R w - - bm Qh6+; id "IQ.1003"; +r3r3/pp2bBkp/6p1/q3p2Q/4n3/2N2R2/PPP3PP/2KR4 w - - bm Bxg6; id "IQ.1005"; +r3r3/pp2bBkp/6p1/q3p2Q/4n3/2N2R2/PPP3PP/2KR4 w - - bm Bxg6; id "IQ.1006"; +5n2/3bp1r1/1r1p3k/p1p2pNp/1nP2P1P/1PN1PB1K/P5R1/6R1 w - - bm Nf7+; id "IQ.1007"; +r2q1rk1/1p1bbppp/p1n1p3/2p1P2Q/4N3/6P1/PPPB1PBP/3RR1K1 w - - bm Nf6+; id "IQ.1008"; +r2q1rk1/1p1bbppp/p1n1p3/2p1P2Q/4N3/6P1/PPPB1PBP/3RR1K1 w - - bm Nf6+; id "IQ.1009"; +r5k1/pq2pn2/3pN1pp/n2P4/1rp1PQ2/1P3PP1/PN4K1/2R4R w - - bm Rxh6 Nd3; id "IQ.1010"; +r5k1/pq2pn2/3pN1pp/n2P4/1rp1PQ2/1P3PP1/PN4K1/2R4R w - - bm Rxh6 Nd3; id "IQ.1011"; +r5k1/pq2pn2/3pN1pp/n2P4/1rp1PQ2/1P3PP1/PN4K1/2R4R w - - bm Rxh6 Nd3; id "IQ.1012"; +r1b1rb2/1p3kpQ/p1p1p3/q1P1P3/3P4/4P1R1/PP4PP/R1B3K1 w - - bm Bd2; id "IQ.1013"; +3r1r2/p4pk1/bp2p1P1/4P2p/Pq1N1P2/2p4Q/2P3P1/3RK2R w - - bm Qxh5; id "IQ.1014"; +4Q2r/1b4pk/p1n1pr1p/1p2P2B/1qn5/5N2/PPP2PP1/2KRR3 w - - bm Ng5+; id "IQ.1015"; +3q1rk1/p1r2pp1/1p2p2p/6bn/3PNn2/1B2BP2/PP1Q1P1R/6RK w - - bm Rxh5; id "IQ.1016"; +rr4k1/2q2ppp/p1b1p3/2b1pPPN/1p2P1R1/3B3Q/PPP4P/1K1R4 w - - bm Nf6+; id "IQ.1017"; +4r3/1r2ppk1/p2p1np1/2qP4/PpP5/1P1Q4/2B1R1PP/5R1K w - - bm Rxf6; id "IQ.1018"; +4r3/1r2ppk1/p2p1np1/2qP4/PpP5/1P1Q4/2B1R1PP/5R1K w - - bm Rxf6; id "IQ.1019"; +r4rk1/1nqb1pbn/6pB/pppPp2p/8/1PP2NNP/P1BQ2P1/R4RK1 w - - bm Nxh5; id "IQ.1020"; +2r1qrk1/3n3p/b3pPp1/4P3/1pp1nBN1/pP4PQ/P1P2PK1/3RR3 w - - bm Qxh7+; id "IQ.1021"; +r1r2k2/1q1n1p2/3PpPp1/4P2p/pbpN3R/2N3K1/1P2Q2P/3R4 w - - bm Rxh5; id "IQ.1022"; +6k1/1p3r1p/r2q1Pp1/2p1n1P1/p1PpP3/P2P2Q1/1P4B1/4RRK1 w - - bm Rf5; id "IQ.1023"; +6k1/1p3r1p/r2q1Pp1/2p1n1P1/p1PpP3/P2P2Q1/1P4B1/4RRK1 w - - bm Rf5; id "IQ.1024"; +6k1/1p3r1p/r2q1Pp1/2p1n1P1/p1PpP3/P2P2Q1/1P4B1/4RRK1 w - - bm Rf5; id "IQ.1025"; +4rrk1/1b3p1p/pp2p1p1/2qnN1Pn/3N1P2/2P4R/PPB1Q2P/5RK1 w - - bm Rxh5; id "IQ.1026"; +4rrk1/1b3p1p/pp2p1p1/2qnN1Pn/3N1P2/2P4R/PPB1Q2P/5RK1 w - - bm Rxh5; id "IQ.1027"; +4rrk1/1b3p1p/pp2p1p1/2qnN1Pn/3N1P2/2P4R/PPB1Q2P/5RK1 w - - bm Rxh5; id "IQ.1028"; +4rrk1/1b3p1p/pp2p1p1/2qnN1Pn/3N1P2/2P4R/PPB1Q2P/5RK1 w - - bm Rxh5; id "IQ.1029"; +4rrk1/1b3p1p/pp2p1p1/2qnN1Pn/3N1P2/2P4R/PPB1Q2P/5RK1 w - - bm Rxh5; id "IQ.1030"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "IQ.1031"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "IQ.1032"; +2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - bm Nxh7; id "IQ.1033"; +r2qrnk1/1b2bppp/2p5/1p1pN1Pn/p2P1B2/3BP2P/PPQ2P2/2K3RR w - - bm Bxh7+; id "IQ.1034"; +3r2k1/2nqprb1/1p2p1Np/p2nP3/3pBP2/PP4RQ/1B5P/6RK w - - bm Nf8 Nh8; id "IQ.1035"; +r4rk1/pppq2pp/1nbpp3/6B1/2PP2P1/3B3P/P1P2P2/1R1QR1K1 w - - bm d5; id "IQ.1036"; +r4rk1/pppq2pp/1nbpp3/6B1/2PP2P1/3B3P/P1P2P2/1R1QR1K1 w - - bm d5; id "IQ.1037"; +r1r1q2k/pp3pbp/4p3/2npPp1Q/3P1P1N/2P2RR1/P1P3PP/6K1 w - - bm Rxg7; id "IQ.1038"; +r1r1q2k/pp3pbp/4p3/2npPp1Q/3P1P1N/2P2RR1/P1P3PP/6K1 w - - bm Rxg7; id "IQ.1039"; +r4r1k/pbpq1p1B/1p2pp2/8/1b1P2Q1/8/PPP2PPP/2KR3R w - - bm d5; id "IQ.1040"; +r4r1k/pbpq1p1B/1p2pp2/8/1b1P2Q1/8/PPP2PPP/2KR3R w - - bm d5; id "IQ.1041"; +2R5/r3b1k1/p2p4/P1pPp2p/6q1/2P2N1r/4Q1P1/5RK1 w - - bm Nxe5; id "IQ.1042"; +rq6/1r1k4/1pRp1p1p/1P1Pp1pP/p1R1P1P1/PpQ2P2/1K6/8 w - - bm f4; id "IQ.1043"; +rq6/1r1k4/1pRp1p1p/1P1Pp1pP/p1R1P1P1/PpQ2P2/1K6/8 w - - bm f4; id "IQ.1044"; +rq6/1r1k4/1pRp1p1p/1P1Pp1pP/p1R1P1P1/PpQ2P2/1K6/8 w - - bm f4; id "IQ.1045"; +rq6/1r1k4/1pRp1p1p/1P1Pp1pP/p1R1P1P1/PpQ2P2/1K6/8 w - - bm f4; id "IQ.1046"; +2q3k1/1p3pp1/4rbn1/r1pp1Np1/p2P4/4PN1R/PPQ2PP1/2K4R w - - bm Ne7+; id "IQ.1047"; +2q3k1/1p3pp1/4rbn1/r1pp1Np1/p2P4/4PN1R/PPQ2PP1/2K4R w - - bm Ne7+; id "IQ.1048"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm Rxh7+ e6; id "IQ.1049"; +r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - bm Rxh7+ e6; id "IQ.1050"; +4r3/pbrq1p1k/1p3Bpp/3pPn2/5PQ1/P6R/1P4PP/1B3RK1 w - - bm Rh5 Qg5; id "IQ.1051"; +r1bn1r2/1pp3k1/p2p3p/6p1/2qNB3/2P2PP1/P1Q2KP1/1R5R w - - bm Rxh6; id "IQ.1052"; +r1bn1r2/1pp3k1/p2p3p/6p1/2qNB3/2P2PP1/P1Q2KP1/1R5R w - - bm Rxh6; id "IQ.1053"; +r4rk1/3bpp1p/pqp3p1/4P2n/2B5/1P6/PBPbQ1PP/4RR1K w - - bm e6; id "IQ.1054"; +r4rk1/3bpp1p/pqp3p1/4P2n/2B5/1P6/PBPbQ1PP/4RR1K w - - bm e6; id "IQ.1055"; +2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - - bm Rxd3; id "IQ.1056"; +r3qrk1/1b3p2/1p1npnp1/2b1N1N1/p1P5/P1B5/1PB1QP1P/R2R2K1 w - - bm Nd7; id "IQ.1057"; +r3nrk1/pp1q2pp/4R3/6p1/2PP4/1B3Q2/P4P1P/3R2K1 w - - bm c5; id "IQ.1058"; +r5k1/4p2p/pp1qNnp1/2pPb3/2P1p1P1/4B3/PP1Q2P1/5R1K w - - bm Bxc5; id "IQ.1059"; +r7/pp2pkbp/2pq2p1/8/2P2N2/1P2R1PP/P3QPK1/8 w - - bm c5; id "IQ.1060"; +2krb2r/p1q5/np2pPpp/n2pP3/2pP2P1/2P1N1B1/2P1Q1BK/RR6 w - - bm Nxd5; id "IQ.1061"; +2krb2r/p1q5/np2pPpp/n2pP3/2pP2P1/2P1N1B1/2P1Q1BK/RR6 w - - bm Nxd5; id "IQ.1062"; +r7/1pqbr1pk/p1n4p/5p1P/2P1p3/2B3R1/PP1Q1PP1/1B2R1K1 w - - bm Rxe4; id "IQ.1063"; +2rq1r2/pb4k1/1p1p1p1p/n1pP1RpQ/2P1P2B/P1PB4/6PP/R5K1 w - - bm e5; id "IQ.1064"; +r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - - bm Nd6; id "IQ.1065"; +r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - - bm Nd6; id "IQ.1066"; +5Bk1/pr2pp1p/2b3pQ/2p1q3/8/2P4P/PP4P1/1B1Rb1K1 w - - bm Bg7; id "IQ.1067"; +5qk1/2p2r1p/p1p4P/1p6/3P4/1Q6/P1P3P1/5RK1 w - - bm Qg3+; id "IQ.1068"; +r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - bm Ng6+; id "IQ.1069"; +r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - bm Ng6+; id "IQ.1070"; +r3b1rk/1p1qn1p1/p3p1np/3pPpBQ/3P4/3B1N1P/PP3PP1/2R2RK1 w - - bm Bf6; id "IQ.1071"; +r3b1rk/1p1qn1p1/p3p1np/3pPpBQ/3P4/3B1N1P/PP3PP1/2R2RK1 w - - bm Bf6; id "IQ.1072"; +r3b1rk/1p1qn1p1/p3p1np/3pPpBQ/3P4/3B1N1P/PP3PP1/2R2RK1 w - - bm Bf6; id "IQ.1073"; +2b2rk1/pp2R1bp/1qpp2p1/6N1/2P2PP1/3Q1B2/PP4PK/8 w - - bm Bd5+; id "IQ.1074"; +1q3rnk/5p2/3p1P1p/p3n3/Np1r2P1/1P1B4/1PP4Q/1K1R3R w - - bm Qxh6+; id "IQ.1075"; +2r3k1/1rq2p1p/pp1p1bp1/2pP2N1/2P1R3/1Q6/PP3PP1/4R1K1 w - - bm Nxh7; id "IQ.1076"; +3r3k/p5qp/bp2B1p1/n2P1p2/5N2/Q1R5/P4PPP/6K1 w - - bm Qb2; id "IQ.1077"; +3r3k/p5qp/bp2B1p1/n2P1p2/5N2/Q1R5/P4PPP/6K1 w - - bm Qb2; id "IQ.1078"; +4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - - bm Rc1; id "IQ.1079"; +4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - - bm Rc1; id "IQ.1080"; +4k3/pp2pp2/4n1p1/3RP1P1/2r1N3/P1P5/1P2q3/1K5Q w - - bm Nc5; id "IQ.1081"; +5rk1/1b3p1p/4pb2/2p1N2Q/1pP2p2/1P1R3P/qB3PP1/6K1 w - - bm Rd8; id "IQ.1082"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "IQ.1083"; +5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - bm Rd4; id "IQ.1084"; +k1n1r3/p2R2bb/2p2qpp/4pp2/2P5/2B1Q1P1/PP3PBP/6K1 w - - bm Qc5 Bxe5; id "IQ.1085"; +rr4k1/3nbp1p/p3p1p1/q2pPPP1/bp1B3R/1B2Q3/PPP4P/2K3R1 w - - bm fxe6; id "IQ.1086"; +7k/p2rq2p/1p3R1P/2p5/2P2P1Q/8/6PK/8 w - - bm Qe1; id "IQ.1087"; +7k/p2rq2p/1p3R1P/2p5/2P2P1Q/8/6PK/8 w - - bm Qe1; id "IQ.1088"; +b1R2nk1/5ppp/1p3n2/5N2/1b2p3/1P2BP2/q3BQPP/6K1 w - - bm Bc5; id "IQ.1089"; +6k1/1p3ppp/1PbNp3/3rP1q1/2Q5/8/5PPP/1R4K1 w - - bm Qxc6; id "IQ.1090"; +6k1/1p3ppp/1PbNp3/3rP1q1/2Q5/8/5PPP/1R4K1 w - - bm Qxc6; id "IQ.1091"; +3r2k1/pqrP1p1p/6p1/1p6/n2Qp3/B1P1P3/P5PP/3R1RK1 w - - bm Qf6 Bf8; id "IQ.1092"; +4rrk1/4Qppp/p2P1n2/1p6/3p4/PB6/1PP3Pq/1K1RR3 w - - bm Bxf7+; id "IQ.1093"; +4rrk1/4Qppp/p2P1n2/1p6/3p4/PB6/1PP3Pq/1K1RR3 w - - bm Bxf7+; id "IQ.1094"; +4rrk1/4Qppp/p2P1n2/1p6/3p4/PB6/1PP3Pq/1K1RR3 w - - bm Bxf7+; id "IQ.1095"; +2b1r1k1/1r1n1pp1/q2p3p/1p1P4/1P1N1RPP/2Q1P3/5PBK/2R5 w - - bm Qxc8; id "IQ.1096"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Qh6 Kg2; id "IQ.1097"; +b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - bm Qh6 Kg2; id "IQ.1098"; +4r1k1/p4ppp/1p2q3/n2R4/2r1p3/Pn2B1P1/1Q2PPBP/3R2K1 w - - bm Re5; id "IQ.1099"; +rnb3k1/6pp/p4q2/3p1N2/1p3Q2/1P6/1PP3PP/5R1K w - - bm Nh6+; id "IQ.1100"; +r1b2r1k/2q2pp1/2pb3p/p1n1NB2/1pP5/1P5P/PBQ2PP1/3RR1K1 w - - bm Rxd6; id "IQ.1101"; +r1b2r1k/2q2pp1/2pb3p/p1n1NB2/1pP5/1P5P/PBQ2PP1/3RR1K1 w - - bm Rxd6; id "IQ.1102"; +2k1r2r/2p2pb1/1pN4p/1P2P1p1/R1N5/2n5/5PPP/3R2K1 w - - bm Ra8+; id "IQ.1103"; +2k1r2r/2p2pb1/1pN4p/1P2P1p1/R1N5/2n5/5PPP/3R2K1 w - - bm Ra8+; id "IQ.1104"; +2k1r2r/2p2pb1/1pN4p/1P2P1p1/R1N5/2n5/5PPP/3R2K1 w - - bm Ra8+; id "IQ.1105"; +1q4r1/3Q1Npk/p6p/1p5N/8/7P/Pn3PP1/6K1 w - - bm Qf5+; id "IQ.1106"; +1q4r1/3Q1Npk/p6p/1p5N/8/7P/Pn3PP1/6K1 w - - bm Qf5+; id "IQ.1107"; +r1q1r1k1/p1n1R1bp/1pp2pp1/5b2/2P2P1Q/P4NN1/1P1B2PP/2KR4 w - - bm Nxf5; id "IQ.1108"; +r1q1r1k1/p1n1R1bp/1pp2pp1/5b2/2P2P1Q/P4NN1/1P1B2PP/2KR4 w - - bm Nxf5; id "IQ.1109"; +2r1k2r/1p2pp1p/2bp1p1b/p1qN4/4P3/6Q1/PPPR1PPP/1K3B1R w k - bm Qh3; id "IQ.1110"; +2r1k2r/1p2pp1p/2bp1p1b/p1qN4/4P3/6Q1/PPPR1PPP/1K3B1R w k - bm Qh3; id "IQ.1111"; +r1br2k1/1pq2ppp/p3pP2/8/1n3PP1/1NpB4/PPP2Q1P/2KR2R1 w - - bm Bxh7+; id "IQ.1112"; +5k2/1pp2b1p/2p5/r3PPR1/pr6/2N5/1PP4P/2KR4 w - - bm f6; id "IQ.1113"; +r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - bm Bxg6; id "IQ.1114"; +r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - bm Bxg6; id "IQ.1115"; +r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - bm Bxg6; id "IQ.1116"; +8/8/pp1pPkpp/3P4/2P1K1P1/8/P7/8 w - - bm g5+; id "IQ.1117"; +8/8/pp1pPkpp/3P4/2P1K1P1/8/P7/8 w - - bm g5+; id "IQ.1118"; +8/8/pp1pPkpp/3P4/2P1K1P1/8/P7/8 w - - bm g5+; id "IQ.1119"; +8/8/pp1pPkpp/3P4/2P1K1P1/8/P7/8 w - - bm g5+; id "IQ.1120"; +8/8/pp1pPkpp/3P4/2P1K1P1/8/P7/8 w - - bm g5+; id "IQ.1121"; +6k1/p4pp1/Pp2r3/1QPq3p/8/6P1/2P2P1P/1R4K1 w - - bm cxb6; id "IQ.1122"; +5b2/pr4pk/4P1Rp/1pppBPP1/8/1P2P3/P6K/8 w - - bm Rxh6+ gxh6; id "IQ.1123"; +5b2/pr4pk/4P1Rp/1pppBPP1/8/1P2P3/P6K/8 w - - bm Rxh6+ gxh6; id "IQ.1124"; +8/kp6/4R3/1P2K3/8/3pp3/8/8 w - - bm Kd6; id "IQ.1125"; +5rk1/2rnqp1p/b3p1pP/2ppP3/1p3QN1/pP1P1BP1/P1P2P2/R3R1K1 w - - bm Bxd5; id "IQ.1126"; +5r1k/p5bp/1p6/4P3/P2B4/3n2PB/1PR4K/8 w - - bm e6; id "IQ.1127"; +4R3/5Bq1/7p/5p2/1n3k1B/7P/6PK/8 w - - bm g3+; id "IQ.1128"; +8/8/8/P2k1p2/2N5/1pb2P2/4P3/2K5 w - - bm a6; id "IQ.1129"; +1r1q1rk1/Nb1n1pbp/p5p1/3P4/PPB2p2/4B3/6PP/2RQ1RK1 w - - bm Nc6; id "IQ.1130"; +b2rr1k1/P3pp2/3p2p1/1Q1Pb2p/2P4P/1R2B1P1/4qPBK/1R6 w - - bm Qxe8+; id "IQ.1131"; +8/5pk1/3P2p1/pQ6/P2p4/5pP1/3rqP1P/5RK1 w - - bm d7; id "IQ.1132"; +3n4/8/1P6/4k2P/n2p4/4pB2/1B6/3K4 w - - bm Bxd4+; id "IQ.1133"; +3n4/8/1P6/4k2P/n2p4/4pB2/1B6/3K4 w - - bm Bxd4+; id "IQ.1134"; +3n4/8/1P6/4k2P/n2p4/4pB2/1B6/3K4 w - - bm Bxd4+; id "IQ.1135"; +3n4/8/1P6/4k2P/n2p4/4pB2/1B6/3K4 w - - bm Bxd4+; id "IQ.1136"; +3n4/8/1P6/4k2P/n2p4/4pB2/1B6/3K4 w - - bm Bxd4+; id "IQ.1137"; +3n4/8/1P6/4k2P/n2p4/4pB2/1B6/3K4 w - - bm Bxd4+; id "IQ.1138"; +8/5p1p/1n2p2P/1k1pPpP1/3K4/4N3/2P5/8 w - - bm Nxf5; id "IQ.1139"; +8/1p1b4/4p1k1/1PPp4/P4P1p/4n1p1/8/4BBK1 w - - bm a5; id "IQ.1140"; +8/1p1b4/4p1k1/1PPp4/P4P1p/4n1p1/8/4BBK1 w - - bm a5; id "IQ.1141"; +2q1n1kr/6b1/1r1p2B1/2p2pP1/2P1bP1N/1P1QB2P/6RK/1R6 w - - bm Qxe4; id "IQ.1142"; +5brk/2q2p1p/p3pP1B/4Pp2/8/1P1R1Q1K/P6P/8 w - - bm Bxf8; id "IQ.1143"; +1q4rk/6r1/2RP3p/1NR3p1/p3Qn2/P6P/6P1/6K1 w - - bm d7; id "IQ.1144"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1145"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1146"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1147"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1148"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1149"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1150"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1151"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1152"; +r3k2r/1nqb1pp1/p3p3/1p1pP1P1/3R1P2/2N2Q2/PPP3B1/2KR4 w kq - bm Nxd5; id "IQ.1153"; +8/1b6/p2k2P1/2Rp1B2/PKp5/2P5/6r1/8 w - - bm Bc8; id "IQ.1154"; +8/1b6/p2k2P1/2Rp1B2/PKp5/2P5/6r1/8 w - - bm Bc8; id "IQ.1155"; +8/1b6/p2k2P1/2Rp1B2/PKp5/2P5/6r1/8 w - - bm Bc8; id "IQ.1156"; +8/1b6/p2k2P1/2Rp1B2/PKp5/2P5/6r1/8 w - - bm Bc8; id "IQ.1157"; +8/1b6/p2k2P1/2Rp1B2/PKp5/2P5/6r1/8 w - - bm Bc8; id "IQ.1158"; +8/1b6/p2k2P1/2Rp1B2/PKp5/2P5/6r1/8 w - - bm Bc8; id "IQ.1159"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1160"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1163"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1164"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1165"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1166"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1168"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1169"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1170"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1171"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1172"; +k5r1/p5Qp/8/3q4/8/8/P4NPP/1R4K1 w - - bm Rb5; id "IQ.1173"; +3r2k1/pp2qppp/4bn2/4p3/4P3/P1Nr4/1PQN1PPP/R4RK1 w - - am Nd5; id "IQ.1175"; +3r2k1/pp2qppp/4bn2/4p3/4P3/P1Nr4/1PQN1PPP/R4RK1 w - - am Nd5; id "IQ.1178"; +r2q1rk1/3nbppp/p1bpp3/6PQ/1p1BP3/1BN5/PPP2P1P/2KR2R1 w - - bm Rd3; id "IQ.1179"; +r3r1k1/1pq2pp1/p2pbb1p/P3n3/3NP3/2N5/1PP1B1PP/R2Q1R1K w - - bm Rxf6; id "IQ.1180"; +r3r1k1/1pq2pp1/p2pbb1p/P3n3/3NP3/2N5/1PP1B1PP/R2Q1R1K w - - bm Rxf6; id "IQ.1181"; +1rb1r1k1/3n1ppp/p1p1p3/q3P3/7P/2N1Q1R1/PPP3P1/2KR1B2 w - - bm Rxd7; id "IQ.1182"; +r2q1rk1/pp1n1p1p/2p2np1/4bQB1/3pNP2/1B5P/PP4P1/R3R1K1 w - - bm Qxe5; id "IQ.1183"; +2rnr2k/2qbp3/pp1p2p1/3P1p1p/1PPN1P2/5B1P/P2Q2P1/2R1R1K1 w - - bm Bxh5; id "IQ.1184"; +2r1r3/3qppkp/pp1p2p1/3PnP2/2PN4/1P5P/P2Q2P1/4RRK1 w - - bm Rxe5; id "IQ.1185"; +1n2rk2/1qr1pp2/pp1p1npp/3P4/1PPN1P2/P2QR1P1/7P/4RBK1 w - - bm Ne6+; id "IQ.1186"; +1r1r1n2/5pkp/4pNp1/2PpP1P1/p1bP1PP1/1qB1K3/p2Q4/3R3R w - - bm f5; id "IQ.1187"; +1r1r1n2/5pkp/4pNp1/2PpP1P1/p1bP1PP1/1qB1K3/p2Q4/3R3R w - - bm f5; id "IQ.1188"; +3r2k1/3rppb1/p1R1b1p1/qp1NP3/8/1P2QB2/P5PP/5RK1 w - - bm Rxe6; id "IQ.1190"; +r2qnrk1/pp2ppb1/3p3B/2p5/7Q/1PNP3b/1PP3PP/R4RK1 w - - bm Ne4; id "IQ.1191"; +r4bk1/pbq2pp1/1pn1p2p/8/4N3/1P2P1P1/PB2QPBP/3R2K1 w - - bm Nf6+; id "IQ.1192"; +r4bk1/pbq2pp1/1pn1p2p/8/4N3/1P2P1P1/PB2QPBP/3R2K1 w - - bm Nf6+; id "IQ.1194"; +rq2r1k1/pp2RNp1/1bp2n1p/8/1Q6/7P/PPB2PP1/5RK1 w - - bm Nxh6+; id "IQ.1195"; +r4rk1/p1p2pp1/1bp1b2p/3q2B1/Pn1PN3/5N2/1P1Q1PPP/R3R1K1 w - - bm Bxh6 Be7; id "IQ.1196"; +r4rk1/p1p2pp1/1bp1b2p/3q2B1/Pn1PN3/5N2/1P1Q1PPP/R3R1K1 w - - bm Bxh6 Be7; id "IQ.1197"; +r1b2rk1/2q1bppp/p2pp3/2n3PQ/1p1BP3/1BN5/PPP2P1P/2KR2R1 w - - bm Bf6; id "IQ.1198"; +r3k2r/1bqnBppp/p3p3/1p2P3/3N2Q1/3B4/PPP3PP/2KnR3 w kq - bm Nxe6; id "IQ.1199"; +r1bqkn1r/p3bpp1/1p2pn1p/2pPN1B1/2P5/3B2N1/PP3PPP/R2QR1K1 w kq - bm Nf5 Nh5 dxe6; id "IQ.1200"; +r3kb1r/2q2ppp/pn2p3/4P3/pPPN4/P3BQ2/6PP/R4RK1 w kq - bm Nxe6 Rf2 Rad1; id "IQ.1201"; +r4k1r/pp3pb1/2p3p1/3nNb1q/7p/1BB1Q2P/PP3PP1/3RR1K1 w - - bm Rxd5 Bxd5 Qc5+; id "IQ.1202"; +4k1r1/1q1r1p2/4pQp1/3pP1B1/2p3P1/1nP2BP1/1P5K/3R4 w - - bm Bxd5; id "IQ.1203"; +4k1r1/1q1r1p2/4pQp1/3pP1B1/2p3P1/1nP2BP1/1P5K/3R4 w - - bm Bxd5; id "IQ.1204"; +2b2k1r/5ppp/1b6/q1p1PP2/3Np1Q1/1PP5/6PP/1N3RK1 w - - bm Ne6+; id "IQ.1205"; +1r5r/p2bbk1p/4pnp1/q1ppQ1B1/7P/2N3P1/PPP2PB1/1K1R3R w - - bm Nxd5; id "IQ.1206"; +r2qk2r/1b1n1p2/p6n/1pp1p1Np/4P2P/2QBNP2/PPP5/2KR2R1 w kq - bm Bxb5 Bc4 Bf1; id "IQ.1210"; +rn1qk2r/pbp2p2/1p3ppb/7p/2BP1N1P/2N1P3/PP3PP1/R2QK2R w KQkq - bm Bxf7+; id "IQ.1211"; +r1b2k1r/p2n1pp1/1q2p3/2ppP1B1/1b1N1Q1P/2N5/PPP2P2/R3K1R1 w Q - bm Bd8; id "IQ.1212"; +r4b1r/pp3kpp/1qp1Rn2/8/8/5Q1P/PPPB1PP1/2KR4 w - - bm Rxf6+; id "IQ.1213"; +7r/1Qrk1pbp/p2pp1p1/6P1/5PB1/1P6/q1P4P/2KR2BR w - - bm Rxd6+; id "IQ.1214"; +r3k2r/2pb1npp/ppp5/2q1p3/2N1P3/1QP2N1P/PP3PP1/R2R2K1 w kq - bm Rxd7 Qb4; id "IQ.1215"; +r3kb1r/pp3p1p/4pp2/q2pN3/2P5/8/PP3PPP/R2QR1K1 w kq - bm Nxf7; id "IQ.1216"; +r3kbnr/p4p2/1p2p2p/3qP1p1/3Nn1QB/8/PP2NPPP/R4RK1 w kq - bm Nxe6; id "IQ.1217"; +r1b1k1nr/2R1b1pp/1p2pp2/1N2p3/q3P3/3Q1N2/PP3PPP/3R2K1 w kq - bm b3 Nd6+; id "IQ.1218"; +r1b1k1nr/2R1b1pp/1p2pp2/1N2p3/q3P3/3Q1N2/PP3PPP/3R2K1 w kq - bm b3 Nd6+; id "IQ.1219"; +r1b1k1nr/2R1b1pp/1p2pp2/1N2p3/q3P3/3Q1N2/PP3PPP/3R2K1 w kq - bm b3 Nd6+; id "IQ.1221"; +r1bqr1k1/1p1nbppp/p1n1p3/3pP2Q/3N1P2/1BN1B3/PPP3PP/R4RK1 w - - bm Nxd5; id "IQ.1222"; +2r1r1k1/5ppp/pq3b2/2pB1P2/2p2B2/5Q1P/Pn3PP1/2R1R1K1 w - - bm Bxf7+; id "IQ.1223"; +rn1q1rk1/1b2bppp/p3p3/1pn1P2Q/3N4/1BN1B3/PPP3PP/R4RK1 w - - bm Rxf7; id "IQ.1224"; +2r1r3/pbq1bpk1/1pn3p1/6Bp/4Q3/PB3N2/1P3PPP/R3R1K1 w - - bm Bxf7; id "IQ.1225"; +2rq1rk1/1b3pb1/5np1/1pn1p1Np/4P2Q/2N1B3/BPP3PP/R4R1K w - - bm Nxf7; id "IQ.1226"; +4r3/p2qppkp/3p2b1/1p1N4/2r1P1RQ/2P4P/PP4P1/5RK1 w - - bm Rxg6+; id "IQ.1227"; +4r3/p2qppkp/3p2b1/1p1N4/2r1P1RQ/2P4P/PP4P1/5RK1 w - - bm Rxg6+; id "IQ.1228"; +4r3/p2qppkp/3p2b1/1p1N4/2r1P1RQ/2P4P/PP4P1/5RK1 w - - bm Rxg6+; id "IQ.1229"; +r5k1/1p3p1p/p1pqrPp1/3bN3/8/P1P3Q1/1P4PP/4RRK1 w - - bm Nxf7; id "IQ.1231"; +rnb2rk1/pp3p1p/3q2pQ/3pN3/2pP4/2PB4/P1P2PPP/4RRK1 w - - bm Nxf7; id "IQ.1232"; +r2r1bk1/1ppq2pp/2p2B2/p1n2N1b/P3P1R1/3PN3/2P3PP/R2Q2K1 w - - bm Ne7+; id "IQ.1233"; +r2r1bk1/1ppq2pp/2p2B2/p1n2N1b/P3P1R1/3PN3/2P3PP/R2Q2K1 w - - bm Ne7+; id "IQ.1234"; +r4rk1/pp2bpp1/1qp1b2p/4B2Q/n7/3B4/PPP2PPP/3RR1K1 w - - bm Bxg7; id "IQ.1236"; +r4rk1/pp2bpp1/1qp1b2p/4B2Q/n7/3B4/PPP2PPP/3RR1K1 w - - bm Bxg7; id "IQ.1237"; +5Q2/pp1b2pk/1n1p2rp/2pP1p2/2P2P2/q1BB4/6PP/4R1K1 w - - bm Bxg7; id "IQ.1238"; +5Q2/pp1b2pk/1n1p2rp/2pP1p2/2P2P2/q1BB4/6PP/4R1K1 w - - bm Bxg7; id "IQ.1239"; +1nb2r1k/2r1qppp/p3p2n/1p1BP3/3N1Q2/2N5/PPP4P/2KR2R1 w - - bm Rxg7; id "IQ.1240"; +1nb2r1k/2r1qppp/p3p2n/1p1BP3/3N1Q2/2N5/PPP4P/2KR2R1 w - - bm Rxg7; id "IQ.1241"; +1nb2r1k/2r1qppp/p3p2n/1p1BP3/3N1Q2/2N5/PPP4P/2KR2R1 w - - bm Rxg7; id "IQ.1242"; +1nb2r1k/2r1qppp/p3p2n/1p1BP3/3N1Q2/2N5/PPP4P/2KR2R1 w - - bm Rxg7; id "IQ.1243"; +r1b2k1r/1p4pp/p4B2/2bpN3/8/q2n4/P1P2PPP/1R1QR1K1 w - - bm Bxg7+ Qh5; id "IQ.1244"; +1r3r1k/1b2bppp/p1qp4/5PP1/1p1B3Q/1PN2R2/1PP4P/5RK1 w - - bm Bxg7+; id "IQ.1245"; +r2b1rk1/2q2ppp/p3b3/1pn1pNB1/4Pn1Q/P1NB4/1PP3PP/R4R1K w - - bm Nxg7; id "IQ.1246"; +6k1/5rpp/8/2Np4/1Pn3R1/4Q2P/q2r1PP1/5RK1 w - - bm Qe8+; id "IQ.1247"; +r4rk1/1bpq1ppp/3p1b2/2nP1N2/8/1p3Q1P/PPB2PP1/R1B1R1K1 w - - bm Nxg7; id "IQ.1248"; +r2q1rk1/pp1b1Rp1/4p2p/4PnNQ/2pP4/2P1B3/P5PP/5RK1 w - - bm R1xf5; id "IQ.1249"; +r4r1k/pbq2pp1/1p2p2p/4P3/2pP3Q/P1P3RP/R4P1P/1B4K1 w - - bm Rxg7; id "IQ.1250"; +2r2bk1/1bq1rppp/pp1p4/4n1P1/Pn1BP1N1/2N3Q1/1PP2RBP/5RK1 w - - bm Bxe5; id "IQ.1251"; +r1b2rk1/pppn2bp/3p1qp1/3p2N1/3P4/3BB3/PPP2PPP/R2QR1K1 w - - bm Nxh7; id "IQ.1252"; +rnb3kr/1p1nqppp/p3p3/2ppP3/3P1N2/2NB1Q2/PPP2PP1/R3K2R w KQ - bm Bxh7+; id "IQ.1253"; +r1qr2k1/p3bppp/b1p5/3nN3/NP1P4/P3B3/5PPP/1B1QR1K1 w - - bm Bxh7+; id "IQ.1254"; +3r1rk1/1bq1bp1p/p3p1p1/3pP3/3N1P2/2PBB2R/n1P1Q1PP/5RK1 w - - bm Rxh7; id "IQ.1255"; +r1qb1rk1/5ppp/p1n5/1ppNP1P1/2p2P1P/P4Q2/1P6/1B1R1RK1 w - - bm Bxh7+; id "IQ.1256"; +2r1r1k1/pbq2ppp/1p2pn2/2b1N3/2P5/2B5/PPB1QPPP/3RR1K1 w - - bm Bxh7+; id "IQ.1257"; +1q1r2k1/pb2b1pp/1p3p2/3P4/1n1QB3/5N2/PB3PPP/2R4K w - - bm Bxh7+; id "IQ.1258"; +1q1r2k1/pb2b1pp/1p3p2/3P4/1n1QB3/5N2/PB3PPP/2R4K w - - bm Bxh7+; id "IQ.1259"; +2r5/3nr1pk/p2qpp1p/1p5Q/3P1PN1/2P3RP/P5PK/4R3 w - - bm Nxh6; id "IQ.1260"; +r1q2r1k/p1ppb1p1/1p2p1Qp/3n3P/3PN3/2P1B3/PP3PP1/3R1RK1 w - - bm Bxh6; id "IQ.1261"; +r2qrn2/1p2nbkp/2p1pp2/p7/3PP1BN/2N4R/PP1Q1P2/2KR4 w - - bm Qh6+; id "IQ.1262"; +r4rk1/pp2qpp1/2p1bn1p/8/1bP4Q/5N1P/PPB2PP1/R1BR2K1 w - - bm Bxh6; id "IQ.1263"; +2r5/1p4bk/3p2rp/4pN2/1P2P1pR/2P2q2/QP6/1K5R w - - bm Rxh6+; id "IQ.1264"; +2r2rk1/1bq1bpp1/pn2p2p/1pn3P1/3NNP1Q/P6R/1PP3BP/R1B4K w - - bm Nf6+; id "IQ.1265"; +4rb2/1p1q1ppk/p1n1p2p/2p1Pn2/3PNR2/2P2K2/P2QBP2/6R1 w - - bm Rxf5; id "IQ.1266"; +r6r/pb1R1pk1/1p2p1pp/3nP3/4N2Q/4B3/P3qPPP/3R2K1 w - - bm Bxh6+; id "IQ.1267"; +rq1n1bk1/3b1pp1/3p3p/pppP3N/8/1P4PP/PBPQ1PB1/4R1K1 w - - bm Qxh6; id "IQ.1268"; +2rq1rk1/pp3pp1/4pb1p/3bN3/3P4/PnPB3R/2Q2PPP/R1B3K1 w - - bm Bh7+; id "IQ.1269"; +2r2rk1/p1n3pp/1p2p3/1q1pQP2/3Pn3/6N1/PP4PP/R1B2RK1 w - - bm Bh6; id "IQ.1270"; +4rr1k/pp4b1/4P2p/5p1R/3q4/3B2P1/PP1R4/1K5Q w - - bm Rxh6+; id "IQ.1271"; +1r2b3/pp1rqppk/3b3p/3Bp2Q/4P1N1/5R1P/PP3PP1/3R2K1 w - - bm Rf6; id "IQ.1272"; +r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - - bm Bxh6; id "IQ.1273"; +r2q1rk1/3nbpp1/4p2p/p1p1P3/1p1P3P/3B1b1R/PPQB1PP1/R3K3 w - - bm Bxh6; id "IQ.1274"; +r1r1n3/5p1k/1n1P2pp/ppq1pN2/2p1P3/1PP1R2P/P1B2QPK/5R2 w - - bm Nxh6; id "IQ.1275"; +r1n1nrk1/p4p1p/1q4pQ/2p1pN2/1pB1P1P1/5P2/PPP4P/1K1R3R w - - bm Rd6 Rhg1; id "IQ.1276"; +r3r3/2qn1Qbk/b2p2pp/1npP4/1p6/3NB1NP/1P1R2P1/1B2R1K1 w - - bm Qxg6+; id "IQ.1277"; +1b4k1/1pnq1r1p/4p1p1/1pPpP2Q/1P5B/3BPP2/7P/6RK w - - bm Bxg6; id "IQ.1278"; +2r2rn1/p3q1bk/n2p2pp/1b1PPp2/1pp2P1N/1P2N1P1/P1QB2BP/4RRK1 w - - bm Nxg6; id "IQ.1279"; +r2q1r1k/p3pn1p/3p2pQ/1ppP1p1n/4P3/2N2P2/PPP1BP2/2K3RR w - - bm Qxg6; id "IQ.1280"; +4Q3/p4pk1/2p3p1/8/3P1N2/4PBR1/q4P1K/r3r3 w - - bm Rxg6+ Qe5+; id "IQ.1281"; +2r1r1k1/4qpb1/p2p2p1/1p1Pn1P1/3BB3/P1P5/1P4Q1/1K2R2R w - - bm Bxg6 Qh2 Qh3; id "IQ.1282"; +2r1r1k1/4qpb1/p2p2p1/1p1Pn1P1/3BB3/P1P5/1P4Q1/1K2R2R w - - bm Bxg6 Qh2 Qh3; id "IQ.1283"; +5r2/1pr1ppk1/1n1q2p1/p2P3p/5R2/1BP1RQ2/5PP1/6K1 w - - bm Re6; id "IQ.1284"; +4rbk1/n2n3p/b1q1p1p1/1p1pP1B1/1PrP1N2/1R3NP1/3Q1PB1/R5K1 w - - bm Nxg6 Bf1; id "IQ.1285"; +4rbk1/n2n3p/b1q1p1p1/1p1pP1B1/1PrP1N2/1R3NP1/3Q1PB1/R5K1 w - - bm Nxg6 Bf1; id "IQ.1286"; +r3r1k1/bpp1q1pp/p3bp2/2p4Q/4N3/1P2PP2/PB3P1P/R2R3K w - - bm Nxf6+ Rg1; id "IQ.1287"; +r3r1k1/bpp1q1pp/p3bp2/2p4Q/4N3/1P2PP2/PB3P1P/R2R3K w - - bm Nxf6+ Rg1; id "IQ.1288"; +r3r1k1/bpp1q1pp/p3bp2/2p4Q/4N3/1P2PP2/PB3P1P/R2R3K w - - bm Nxf6+ Rg1; id "IQ.1289"; +r3r1k1/bpp1q1pp/p3bp2/2p4Q/4N3/1P2PP2/PB3P1P/R2R3K w - - bm Nxf6+ Rg1; id "IQ.1290"; diff --git a/tests/quick.epd b/tests/quick.epd new file mode 100644 index 0000000..fb9eee2 --- /dev/null +++ b/tests/quick.epd @@ -0,0 +1,24 @@ +1n1r1rk1/ppq2ppp/3p2b1/3B1NP1/4PB1R/bP2P2P/P1P5/3KQ1R1 w - - bm Qc3; id "Quick-01"; +1n1r1rk1/ppq2ppp/3p2b1/3B1NP1/4PB1R/bP2P2P/P1P5/3KQ1R1 w - - bm Qc3; id "Quick-02"; +3Q4/3p4/P2p4/N2b4/8/4P3/5p1p/5Kbk w - - bm Qa8; id "Quick-03"; +4qrk1/3nppb1/R1Np2p1/3P2P1/1Pr5/4B3/5Q1P/5R1K w - - bm Ra8; id "Quick-04"; +r3r3/2R2pk1/p2p1bpp/3P4/q2pQ3/5N1P/5PP1/1R4K1 w - - bm Rxf7+; id "Quick-05"; +r3r3/2R2pk1/p2p1bpp/3P4/q2pQ3/5N1P/5PP1/1R4K1 w - - bm Rxf7+; id "Quick-06"; +r5k1/Rb4p1/2q2pBp/1pp5/1b4QN/1P2P2P/5PP1/6K1 w - - bm Rxb7; id "Quick-07"; +3R4/5r1p/5ppk/8/1Q3PPq/5P2/6K1/8 w - - bm Rg8; id "Quick-08"; +2kr3r/ppp3pp/2pbbn2/4N3/3Pp3/2P3Pq/PP1NQP1P/R1B2RK1 w - - am Nxe4; id "Quick-09"; +2r3k1/pp1bpp1p/3p1npQ/q1r5/4P1P1/2NR1P2/PPP1N3/2K4R w - - bm g5; id "Quick-10"; +r1b2rk1/pp3p2/2p2bpQ/8/1q1P4/2N2N2/Pn3PPP/1B1RR1K1 w - - bm Bxg6; id "Quick-11"; +r2qk2r/1p1bbp2/1P2p3/p2pPp2/n2N1N1p/3PB3/5QPP/R4RK1 w kq - bm Rxa4; id "Quick-12"; +3r1n1r/1p2q1k1/p1p1P1p1/3n4/5Pp1/P5N1/1P3QP1/1BR1R1K1 w - - bm Bxg6; id "Quick-13"; +r2q1rk1/p1p3pp/b2bp3/2pp4/6p1/2NPPN2/PPP2PP1/R1BQR1K1 w - - bm Ne5; id "Quick-14"; +r2q1rk1/p1p3pp/b2bp3/2pp4/6p1/2NPPN2/PPP2PP1/R1BQR1K1 w - - bm Ne5; id "Quick-15"; +3k4/p7/K3BP2/8/7p/8/2P4P/8 w - - bm Kb7; id "Quick-16"; +rq4k1/pp1nrppp/4bn2/6R1/3QP3/P4PN1/4B1PP/2B2RK1 w - - bm Rxg7+; id "Quick-17"; +2r4k/pb2q2P/1p6/3Pp3/4p3/1P2R3/PBrQ2PP/5RK1 w - - bm Qb4; id "Quick-18"; +2r4k/pb2q2P/1p6/3Pp3/4p3/1P2R3/PBrQ2PP/5RK1 w - - bm Qb4; id "Quick-19"; +2r4k/pb2q2P/1p6/3Pp3/4p3/1P2R3/PBrQ2PP/5RK1 w - - bm Qb4; id "Quick-20"; +r1b1kb1r/2q2ppp/p2ppP2/1pn3P1/3NP3/2N2Q2/PPP4P/2KR1B1R w kq - bm Bxb5+; id "Quick-21"; +r1b1kb1r/2q2ppp/p2ppP2/1pn3P1/3NP3/2N2Q2/PPP4P/2KR1B1R w kq - bm Bxb5+; id "Quick-22"; +r1b1kb1r/2q2ppp/p2ppP2/1pn3P1/3NP3/2N2Q2/PPP4P/2KR1B1R w kq - bm Bxb5+; id "Quick-23"; +3B4/1R3p1k/2p4p/2Pp3r/3P4/4Q1K1/6P1/3b1q2 w - - bm Bf6; id "Quick-24"; diff --git a/tests/swiss.epd b/tests/swiss.epd new file mode 100644 index 0000000..36bf03f --- /dev/null +++ b/tests/swiss.epd @@ -0,0 +1,60 @@ +r2qr1k1/pp3pbp/2n3p1/1N1p4/2P2Pb1/5N2/PP1QBPPP/2KR3R w - - am cxd5; id "ST3_05 - Koenigssicherheit"; +r2qr1k1/pp3pbp/2n3p1/1N1p4/2P2Pb1/5N2/PP1QBPPP/2KR3R w - - am cxd5; id "ST3_06 - Koenigssicherheit"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_07 - Koenigssicherheit"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_08 - Koenigssicherheit"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_09 - Koenigssicherheit"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_10 - Trojaner"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_11 - Trojaner"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_12 - Vergifteter Bauer"; +2kr1nr1/pbp1qp2/1p2pn1p/8/3Pp2Q/P1P3N1/2PBBPPP/R3K2R w KQ - am O-O; id "ST3_13 - Vergifteter Bauer"; +3r1rk1/4bppp/p1pq1n2/3p1P2/4p2B/2N5/PPP1QPPP/R3R1K1 w - - am Qxa6; id "ST3_14 - Vergifteter Bauer"; +r2q1r1k/1p2b1pp/p3Bn2/3N4/P2pP3/4p3/1PP3PP/R2Q1RK1 w - - am Qxd4; id "ST3_15 - Vergifteter Bauer"; +r2q1r1k/1p2b1pp/p3Bn2/3N4/P2pP3/4p3/1PP3PP/R2Q1RK1 w - - am Qxd4; id "ST3_16 - Vergifteter Bauer"; +r2q1r1k/1p2b1pp/p3Bn2/3N4/P2pP3/4p3/1PP3PP/R2Q1RK1 w - - am Qxd4; id "ST3_17 - Vergifteter Bauer"; +r2q1r1k/1p2b1pp/p3Bn2/3N4/P2pP3/4p3/1PP3PP/R2Q1RK1 w - - am Qxd4; id "ST3_18 - Vergifteter Bauer"; +r1bq1rk1/ppp1n1bp/3p4/3Ppnp1/2P1N3/1Q4BP/PP1NBPP1/R3K2R w KQ - am Nxg5; id "ST3_19 - Vergifteter Bauer"; +rn2r1k1/p1pq2pp/bp2p3/5p2/2PPQ3/B1PB4/P4PPP/R3K2R w KQ f6 am Qxa8; id "ST3_20 - Dame vs Tuerme"; +rn2r1k1/p1pq2pp/bp2p3/5p2/2PPQ3/B1PB4/P4PPP/R3K2R w KQ f6 am Qxa8; id "ST3_21 - Dame vs Tuerme"; +rn2r1k1/p1pq2pp/bp2p3/5p2/2PPQ3/B1PB4/P4PPP/R3K2R w KQ f6 am Qxa8; id "ST3_22 - Laeuferopfer"; +rn2r1k1/p1pq2pp/bp2p3/5p2/2PPQ3/B1PB4/P4PPP/R3K2R w KQ f6 am Qxa8; id "ST3_23 - Laeuferopfer"; +rn2r1k1/p1pq2pp/bp2p3/5p2/2PPQ3/B1PB4/P4PPP/R3K2R w KQ f6 am Qxa8; id "ST3_24 - Springeropfer"; +rn2r1k1/p1pq2pp/bp2p3/5p2/2PPQ3/B1PB4/P4PPP/R3K2R w KQ f6 am Qxa8; id "ST3_25 - Springeropfer"; +r5k1/1qr1bpp1/3pb1n1/4p1Pp/Np2P2P/1P1B1P2/P1P1Q3/BK1R3R w - - am Qe3; id "ST3_26 - Qualitaetsopfer"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_27 - Qualitaetsopfer"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_28 - Qualitaetsopfer"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_29 - Verteidigung"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_30 - Verteidigung"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_31 - Verteidigung"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_32 - Verteidigung"; +rn2kb1r/pp3p1p/2p2np1/3p1b2/3q1B2/1QN5/PP1NPPPP/R3KB1R w KQkq - am Qxb7; id "ST3_33 - Verteidigung"; +2r1qrk1/p3b1pp/4b3/1pP5/PQpP1p2/4B3/4BPPP/R4RK1 w - - am Bd2; id "ST3_34 - Verteidigung"; +1r5r/4qp1k/pn2p1b1/4P3/P4Q2/1R5P/1P2NPP1/3R2K1 w - - am Nd4 Qg4; id "ST3_35 - Verteidigung"; +r1bqkb1r/ppp2p1p/2n3p1/3np1NQ/2B5/8/PPPP1PPP/RNB1K2R w KQkq - am Qf3; id "ST3_36 - Verteidigung"; +N4bk1/5pp1/6qp/2n5/6b1/6P1/PP3KBP/2R1Q3 w - - am Qe3; id "ST3_37 - Verteidigung"; +4rrk1/q6p/8/p2P1p2/2PbB3/8/PPQ2N1P/5RK1 w - - am Bd3; id "ST3_38 - Verteidigung"; +2kr1b1r/pp1b3p/1qn1pp2/3p3n/2pPP1p1/2P2NB1/PPBN1PPP/RQ2K2R w KQ - am Nh4; id "ST3_39 - Verteidigung"; +3r1rk1/2q3p1/8/1p1bp3/8/PP4P1/4Q2P/R1B1R1K1 w - - am Bg5; id "ST3_40 - Verteidigung"; +1r2r1k1/Nb1n1ppp/4q3/8/2p1n3/P4Q2/BB3PPP/1R1R2K1 w - - am Nb5; id "ST3_41 - Verteidigung"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_42 - Verteidigung"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_43 - Verteidigung"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_44 - Endspiel B vs B"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_45 - Endspiel B vs B"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_46 - Endspiel B vs S"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_47 - Endspiel D vs D"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_48 - Endspiel D vs D"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_49 - Endspiel D&T vs D&T"; +r2qr1k1/pp3pp1/5n1p/2pPn3/2b5/1QP1B1PP/P3NPB1/R3R1K1 w - - am Qa3; id "ST3_50 - Endspiel L vs B"; +8/8/2p1K1p1/2k5/p7/P4BpP/1Pb3P1/8 w - - am Kd7; id "ST3_51 - Endspiel L vs L"; +8/8/2p1K1p1/2k5/p7/P4BpP/1Pb3P1/8 w - - am Kd7; id "ST3_52 - Endspiel L vs L"; +8/8/2p1K1p1/2k5/p7/P4BpP/1Pb3P1/8 w - - am Kd7; id "ST3_53 - Endspiel L vs L"; +6k1/4b3/4p1p1/8/6pP/4PN2/5K2/8 w - - am Ng5; id "ST3_54 - Endspiel S vs L"; +6k1/4b3/4p1p1/8/6pP/4PN2/5K2/8 w - - am Ng5; id "ST3_55 - Endspiel S&B vs L&S"; +6k1/4b3/4p1p1/8/6pP/4PN2/5K2/8 w - - am Ng5; id "ST3_56 - Endspiel T vs T"; +8/4k3/1R6/5p1p/3K1Pp1/P5r1/1P6/8 w - - am Rh6; id "ST3_57 - Endspiel T vs T"; +8/4k3/1R6/5p1p/3K1Pp1/P5r1/1P6/8 w - - am Rh6; id "ST3_58 - Endspiel T vs T"; +8/4k3/1R6/5p1p/3K1Pp1/P5r1/1P6/8 w - - am Rh6; id "ST3_59 - Endspiel T vs T"; +2r5/1R3PK1/p7/7p/8/1pk4P/8/8 w - - am f8=Q; id "ST3_60 - Endspiel T vs T"; +2r5/1R3PK1/p7/7p/8/1pk4P/8/8 w - - am f8=Q; id "ST3_61 - Endspiel T vs T"; +2r5/1R3PK1/p7/7p/8/1pk4P/8/8 w - - am f8=Q; id "ST3_62 - Endspiel T&L vs T&L"; +8/3b1p2/3Pk3/R1K4p/8/6r1/8/2B5 w - - am Ra3; id "ST3_63 - Endspiel T&L vs T&L"; +8/3b1p2/3Pk3/R1K4p/8/6r1/8/2B5 w - - am Ra3; id "ST3_64 - Endspiel T&L vs T&S"; diff --git a/tests/wac.epd b/tests/wac.epd new file mode 100644 index 0000000..524ead7 --- /dev/null +++ b/tests/wac.epd @@ -0,0 +1,300 @@ +2rr3k/pp3pp1/1nnqbN1p/3pN3/2pP4/2P3Q1/PPB4P/R4RK1 w - - bm Qg6; id "WAC.001"; +8/7p/5k2/5p2/p1p2P2/Pr1pPK2/1P1R3P/8 b - - bm Rxb2; id "WAC.002"; +5rk1/1ppb3p/p1pb4/6q1/3P1p1r/2P1R2P/PP1BQ1P1/5RKN w - - bm Rg3; id "WAC.003"; +r1bq2rk/pp3pbp/2p1p1pQ/7P/3P4/2PB1N2/PP3PPR/2KR4 w - - bm Qxh7+; id "WAC.004"; +5k2/6pp/p1qN4/1p1p4/3P4/2PKP2Q/PP3r2/3R4 b - - bm Qc4+; id "WAC.005"; +7k/p7/1R5K/6r1/6p1/6P1/8/8 w - - bm Rb7; id "WAC.006"; +rnbqkb1r/pppp1ppp/8/4P3/6n1/7P/PPPNPPP1/R1BQKBNR b KQkq - bm Ne3; id "WAC.007"; +r4q1k/p2bR1rp/2p2Q1N/5p2/5p2/2P5/PP3PPP/R5K1 w - - bm Rf7; id "WAC.008"; +3q1rk1/p4pp1/2pb3p/3p4/6Pr/1PNQ4/P1PB1PP1/4RRK1 b - - bm Bh2+; id "WAC.009"; +2br2k1/2q3rn/p2NppQ1/2p1P3/Pp5R/4P3/1P3PPP/3R2K1 w - - bm Rxh7; id "WAC.010"; +r1b1kb1r/3q1ppp/pBp1pn2/8/Np3P2/5B2/PPP3PP/R2Q1RK1 w kq - bm Bxc6; id "WAC.011"; +4k1r1/2p3r1/1pR1p3/3pP2p/3P2qP/P4N2/1PQ4P/5R1K b - - bm Qxf3+; id "WAC.012"; +5rk1/pp4p1/2n1p2p/2Npq3/2p5/6P1/P3P1BP/R4Q1K w - - bm Qxf8+; id "WAC.013"; +r2rb1k1/pp1q1p1p/2n1p1p1/2bp4/5P2/PP1BPR1Q/1BPN2PP/R5K1 w - - bm Qxh7+; id "WAC.014"; +1R6/1brk2p1/4p2p/p1P1Pp2/P7/6P1/1P4P1/2R3K1 w - - bm Rxb7; id "WAC.015"; +r4rk1/ppp2ppp/2n5/2bqp3/8/P2PB3/1PP1NPPP/R2Q1RK1 w - - bm Nc3; id "WAC.016"; +1k5r/pppbn1pp/4q1r1/1P3p2/2NPp3/1QP5/P4PPP/R1B1R1K1 w - - bm Ne5; id "WAC.017"; +R7/P4k2/8/8/8/8/r7/6K1 w - - bm Rh8; id "WAC.018"; +r1b2rk1/ppbn1ppp/4p3/1QP4q/3P4/N4N2/5PPP/R1B2RK1 w - - bm c6; id "WAC.019"; +r2qkb1r/1ppb1ppp/p7/4p3/P1Q1P3/2P5/5PPP/R1B2KNR b kq - bm Bb5; id "WAC.020"; +5rk1/1b3p1p/pp3p2/3n1N2/1P6/P1qB1PP1/3Q3P/4R1K1 w - - bm Qh6; id "WAC.021"; +r1bqk2r/ppp1nppp/4p3/n5N1/2BPp3/P1P5/2P2PPP/R1BQK2R w KQkq - bm Ba2 Nxf7; id "WAC.022"; +r3nrk1/2p2p1p/p1p1b1p1/2NpPq2/3R4/P1N1Q3/1PP2PPP/4R1K1 w - - bm g4; id "WAC.023"; +6k1/1b1nqpbp/pp4p1/5P2/1PN5/4Q3/P5PP/1B2B1K1 b - - bm Bd4; id "WAC.024"; +3R1rk1/8/5Qpp/2p5/2P1p1q1/P3P3/1P2PK2/8 b - - bm Qh4+; id "WAC.025"; +3r2k1/1p1b1pp1/pq5p/8/3NR3/2PQ3P/PP3PP1/6K1 b - - bm Bf5; id "WAC.026"; +7k/pp4np/2p3p1/3pN1q1/3P4/Q7/1r3rPP/2R2RK1 w - - bm Qf8+; id "WAC.027"; +1r1r2k1/4pp1p/2p1b1p1/p3R3/RqBP4/4P3/1PQ2PPP/6K1 b - - bm Qe1+; id "WAC.028"; +r2q2k1/pp1rbppp/4pn2/2P5/1P3B2/6P1/P3QPBP/1R3RK1 w - - bm c6; id "WAC.029"; +1r3r2/4q1kp/b1pp2p1/5p2/pPn1N3/6P1/P3PPBP/2QRR1K1 w - - bm Nxd6; id "WAC.030"; +rb3qk1/pQ3ppp/4p3/3P4/8/1P3N2/1P3PPP/3R2K1 w - - bm Qxa8 d6 dxe6; id "WAC.031"; +6k1/p4p1p/1p3np1/2q5/4p3/4P1N1/PP3PPP/3Q2K1 w - - bm Qd8+; id "WAC.032"; +8/p1q2pkp/2Pr2p1/8/P3Q3/6P1/5P1P/2R3K1 w - - bm Qe5+ Qf4; id "WAC.033"; +7k/1b1r2p1/p6p/1p2qN2/3bP3/3Q4/P5PP/1B1R3K b - - bm Bg1; id "WAC.034"; +r3r2k/2R3pp/pp1q1p2/8/3P3R/7P/PP3PP1/3Q2K1 w - - bm Rxh7+; id "WAC.035"; +3r4/2p1rk2/1pQq1pp1/7p/1P1P4/P4P2/6PP/R1R3K1 b - - bm Re1+; id "WAC.036"; +2r5/2rk2pp/1pn1pb2/pN1p4/P2P4/1N2B3/nPR1KPPP/3R4 b - - bm Nxd4+; id "WAC.037"; +4k3/p4prp/1p6/2b5/8/2Q3P1/P2R1PKP/4q3 w - - bm Rd8+; id "WAC.038"; +r1br2k1/pp2bppp/2nppn2/8/2P1PB2/2N2P2/PqN1B1PP/R2Q1R1K w - - bm Na4; id "WAC.039"; +3r1r1k/1p4pp/p4p2/8/1PQR4/6Pq/P3PP2/2R3K1 b - - bm Rc8; id "WAC.040"; +1k6/5RP1/1P6/1K6/6r1/8/8/8 w - - bm Ka5 Kc5; id "WAC.041"; +r1b1r1k1/pp1n1pbp/1qp3p1/3p4/1B1P4/Q3PN2/PP2BPPP/R4RK1 w - - bm Ba5; id "WAC.042"; +r2q3k/p2P3p/1p3p2/3QP1r1/8/B7/P5PP/2R3K1 w - - bm Be7 Qxa8; id "WAC.043"; +3rb1k1/pq3pbp/4n1p1/3p4/2N5/2P2QB1/PP3PPP/1B1R2K1 b - - bm dxc4; id "WAC.044"; +7k/2p1b1pp/8/1p2P3/1P3r2/2P3Q1/1P5P/R4qBK b - - bm Qxa1; id "WAC.045"; +r1bqr1k1/pp1nb1p1/4p2p/3p1p2/3P4/P1N1PNP1/1PQ2PP1/3RKB1R w K - bm Nb5; id "WAC.046"; +r1b2rk1/pp2bppp/2n1pn2/q5B1/2BP4/2N2N2/PP2QPPP/2R2RK1 b - - bm Nxd4; id "WAC.047"; +1rbq1rk1/p1p1bppp/2p2n2/8/Q1BP4/2N5/PP3PPP/R1B2RK1 b - - bm Rb4; id "WAC.048"; +2b3k1/4rrpp/p2p4/2pP2RQ/1pP1Pp1N/1P3P1P/1q6/6RK w - - bm Qxh7+; id "WAC.049"; +k4r2/1R4pb/1pQp1n1p/3P4/5p1P/3P2P1/r1q1R2K/8 w - - bm Rxb6+; id "WAC.050"; +r1bq1r2/pp4k1/4p2p/3pPp1Q/3N1R1P/2PB4/6P1/6K1 w - - bm Rg4+; id "WAC.051"; +r1k5/1p3q2/1Qpb4/3N1p2/5Pp1/3P2Pp/PPPK3P/4R3 w - - bm Re7; id "WAC.052"; +6k1/6p1/p7/3Pn3/5p2/4rBqP/P4RP1/5QK1 b - - bm Re1; id "WAC.053"; +r3kr2/1pp4p/1p1p4/7q/4P1n1/2PP2Q1/PP4P1/R1BB2K1 b q - bm Qh1+; id "WAC.054"; +r3r1k1/pp1q1pp1/4b1p1/3p2B1/3Q1R2/8/PPP3PP/4R1K1 w - - bm Qxg7+; id "WAC.055"; +r1bqk2r/pppp1ppp/5n2/2b1n3/4P3/1BP3Q1/PP3PPP/RNB1K1NR b KQkq - bm Bxf2+; id "WAC.056"; +r3q1kr/ppp5/3p2pQ/8/3PP1b1/5R2/PPP3P1/5RK1 w - - bm Rf8+; id "WAC.057"; +8/8/2R5/1p2qp1k/1P2r3/2PQ2P1/5K2/8 w - - bm Qd1+; id "WAC.058"; +r1b2rk1/2p1qnbp/p1pp2p1/5p2/2PQP3/1PN2N1P/PB3PP1/3R1RK1 w - - bm Nd5; id "WAC.059"; +rn1qr1k1/1p2np2/2p3p1/8/1pPb4/7Q/PB1P1PP1/2KR1B1R w - - bm Qh8+; id "WAC.060"; +3qrbk1/ppp1r2n/3pP2p/3P4/2P4P/1P3Q2/PB6/R4R1K w - - bm Qf7+; id "WAC.061"; +6r1/3Pn1qk/p1p1P1rp/2Q2p2/2P5/1P4P1/P3R2P/5RK1 b - - bm Rxg3+; id "WAC.062"; +r1brnbk1/ppq2pp1/4p2p/4N3/3P4/P1PB1Q2/3B1PPP/R3R1K1 w - - bm Nxf7; id "WAC.063"; +8/6pp/3q1p2/3n1k2/1P6/3NQ2P/5PP1/6K1 w - - bm g4+; id "WAC.064"; +1r1r1qk1/p2n1p1p/bp1Pn1pQ/2pNp3/2P2P1N/1P5B/P6P/3R1RK1 w - - bm Ne7+; id "WAC.065"; +1k1r2r1/ppq5/1bp4p/3pQ3/8/2P2N2/PP4P1/R4R1K b - - bm Qxe5; id "WAC.066"; +3r2k1/p2q4/1p4p1/3rRp1p/5P1P/6PK/P3R3/3Q4 w - - bm Rxd5; id "WAC.067"; +6k1/5ppp/1q6/2b5/8/2R1pPP1/1P2Q2P/7K w - - bm Qxe3; id "WAC.068"; +2k5/pppr4/4R3/4Q3/2pp2q1/8/PPP2PPP/6K1 w - - bm f3 h3; id "WAC.069"; +2kr3r/pppq1ppp/3p1n2/bQ2p3/1n1PP3/1PN1BN1P/1PP2PP1/2KR3R b - - bm Na2+; id "WAC.070"; +2kr3r/pp1q1ppp/5n2/1Nb5/2Pp1B2/7Q/P4PPP/1R3RK1 w - - bm Nxa7+; id "WAC.071"; +r3r1k1/pp1n1ppp/2p5/4Pb2/2B2P2/B1P5/P5PP/R2R2K1 w - - bm e6; id "WAC.072"; +r1q3rk/1ppbb1p1/4Np1p/p3pP2/P3P3/2N4R/1PP1Q1PP/3R2K1 w - - bm Qd2; id "WAC.073"; +5r1k/pp4pp/2p5/2b1P3/4Pq2/1PB1p3/P3Q1PP/3N2K1 b - - bm Qf1+; id "WAC.074"; +r3r1k1/pppq1ppp/8/8/1Q4n1/7P/PPP2PP1/RNB1R1K1 b - - bm Qd6; id "WAC.075"; +r1b1qrk1/2p2ppp/pb1pnn2/1p2pNB1/3PP3/1BP5/PP2QPPP/RN1R2K1 w - - bm Bxf6; id "WAC.076"; +3r2k1/ppp2ppp/6q1/b4n2/3nQB2/2p5/P4PPP/RN3RK1 b - - bm Ng3; id "WAC.077"; +r2q3r/ppp2k2/4nbp1/5Q1p/2P1NB2/8/PP3P1P/3RR1K1 w - - bm Ng5+; id "WAC.078"; +r3k2r/pbp2pp1/3b1n2/1p6/3P3p/1B2N1Pq/PP1PQP1P/R1B2RK1 b kq - bm Qxh2+; id "WAC.079"; +r4rk1/p1B1bpp1/1p2pn1p/8/2PP4/3B1P2/qP2QP1P/3R1RK1 w - - bm Ra1; id "WAC.080"; +r4rk1/1bR1bppp/4pn2/1p2N3/1P6/P3P3/4BPPP/3R2K1 b - - bm Bd6; id "WAC.081"; +3rr1k1/pp3pp1/4b3/8/2P1B2R/6QP/P3q1P1/5R1K w - - bm Bh7+; id "WAC.082"; +3rr1k1/ppqbRppp/2p5/8/3Q1n2/2P3N1/PPB2PPP/3R2K1 w - - bm Qxd7; id "WAC.083"; +r2q1r1k/2p1b1pp/p1n5/1p1Q1bN1/4n3/1BP1B3/PP3PPP/R4RK1 w - - bm Qg8+; id "WAC.084"; +kr2R3/p4r2/2pq4/2N2p1p/3P2p1/Q5P1/5P1P/5BK1 w - - bm Na6; id "WAC.085"; +8/p7/1ppk1n2/5ppp/P1PP4/2P1K1P1/5N1P/8 b - - bm Ng4+; id "WAC.086"; +8/p3k1p1/4r3/2ppNpp1/PP1P4/2P3KP/5P2/8 b - - bm Rxe5; id "WAC.087"; +r6k/p1Q4p/2p1b1rq/4p3/B3P3/4P3/PPP3P1/4RRK1 b - - bm Rxg2+; id "WAC.088"; +1r3b1k/p4rpp/4pp2/3q4/2ppbPPQ/6RK/PP5P/2B1NR2 b - - bm g5; id "WAC.089"; +3qrrk1/1pp2pp1/1p2bn1p/5N2/2P5/P1P3B1/1P4PP/2Q1RRK1 w - - bm Nxg7; id "WAC.090"; +2qr2k1/4b1p1/2p2p1p/1pP1p3/p2nP3/PbQNB1PP/1P3PK1/4RB2 b - - bm Be6; id "WAC.091"; +r4rk1/1p2ppbp/p2pbnp1/q7/3BPPP1/2N2B2/PPP4P/R2Q1RK1 b - - bm Bxg4; id "WAC.092"; +r1b1k1nr/pp3pQp/4pq2/3pn3/8/P1P5/2P2PPP/R1B1KBNR w KQkq - bm Bh6; id "WAC.093"; +8/k7/p7/3Qp2P/n1P5/3KP3/1q6/8 b - - bm e4+; id "WAC.094"; +2r5/1r6/4pNpk/3pP1qp/8/2P1QP2/5PK1/R7 w - - bm Ng4+; id "WAC.095"; +r1b4k/ppp2Bb1/6Pp/3pP3/1qnP1p1Q/8/PPP3P1/1K1R3R w - - bm Qd8+; id "WAC.096"; +6k1/5p2/p5np/4B3/3P4/1PP1q3/P3r1QP/6RK w - - bm Qa8+; id "WAC.097"; +1r3rk1/5pb1/p2p2p1/Q1n1q2p/1NP1P3/3p1P1B/PP1R3P/1K2R3 b - - bm Nxe4; id "WAC.098"; +r1bq1r1k/1pp1Np1p/p2p2pQ/4R3/n7/8/PPPP1PPP/R1B3K1 w - - bm Rh5; id "WAC.099"; +8/k1b5/P4p2/1Pp2p1p/K1P2P1P/8/3B4/8 w - - bm b6+; id "WAC.100"; +5rk1/p5pp/8/8/2Pbp3/1P4P1/7P/4RN1K b - - bm Bc3; id "WAC.101"; +2Q2n2/2R4p/1p1qpp1k/8/3P3P/3B2P1/5PK1/r7 w - - bm Qxf8+; id "WAC.102"; +6k1/2pb1r1p/3p1PpQ/p1nPp3/1q2P3/2N2P2/PrB5/2K3RR w - - bm Qxg6+; id "WAC.103"; +b4r1k/pq2rp2/1p1bpn1p/3PN2n/2P2P2/P2B3K/1B2Q2N/3R2R1 w - - bm Qxh5; id "WAC.104"; +r2r2k1/pb3ppp/1p1bp3/7q/3n2nP/PP1B2P1/1B1N1P2/RQ2NRK1 b - - bm Qxh4; id "WAC.105"; +4rrk1/pppb4/7p/3P2pq/3Qn3/P5P1/1PP4P/R3RNNK b - - bm Nf2+; id "WAC.106"; +5n2/pRrk2p1/P4p1p/4p3/3N4/5P2/6PP/6K1 w - - bm Nb5; id "WAC.107"; +r5k1/1q4pp/2p5/p1Q5/2P5/5R2/4RKPP/r7 w - - bm Qe5; id "WAC.108"; +rn2k1nr/pbp2ppp/3q4/1p2N3/2p5/QP6/PB1PPPPP/R3KB1R b KQkq - bm c3; id "WAC.109"; +2kr4/bp3p2/p2p2b1/P7/2q5/1N4B1/1PPQ2P1/2KR4 b - - bm Be3; id "WAC.110"; +6k1/p5p1/5p2/2P2Q2/3pN2p/3PbK1P/7P/6q1 b - - bm Qf1+; id "WAC.111"; +r4kr1/ppp5/4bq1b/7B/2PR1Q1p/2N3P1/PP3P1P/2K1R3 w - - bm Rxe6; id "WAC.112"; +rnbqkb1r/1p3ppp/5N2/1p2p1B1/2P5/8/PP2PPPP/R2QKB1R b KQkq - bm Qxf6; id "WAC.113"; +r1b1rnk1/1p4pp/p1p2p2/3pN2n/3P1PPq/2NBPR1P/PPQ5/2R3K1 w - - bm Bxh7+; id "WAC.114"; +4N2k/5rpp/1Q6/p3q3/8/P5P1/1P3P1P/5K2 w - - bm Nd6; id "WAC.115"; +r2r2k1/2p2ppp/p7/1p2P1n1/P6q/5P2/1PB1QP1P/R5RK b - - bm Rd2; id "WAC.116"; +3r1rk1/q4ppp/p1Rnp3/8/1p6/1N3P2/PP3QPP/3R2K1 b - - bm Ne4; id "WAC.117"; +r5k1/pb2rpp1/1p6/2p4q/5R2/2PB2Q1/P1P3PP/5R1K w - - bm Rh4; id "WAC.118"; +r2qr1k1/p1p2ppp/2p5/2b5/4nPQ1/3B4/PPP3PP/R1B2R1K b - - bm Qxd3; id "WAC.119"; +r4rk1/1bn2qnp/3p1B1Q/p2P1pP1/1pp5/5N1P/PPB2P2/2KR3R w - - bm g6; id "WAC.120"; +6k1/5p1p/2bP2pb/4p3/2P5/1p1pNPPP/1P1Q1BK1/1q6 b - - bm Bxf3+; id "WAC.121"; +1k6/ppp4p/1n2pq2/1N2Rb2/2P2Q2/8/P4KPP/3r1B2 b - - bm Rxf1+; id "WAC.122"; +6k1/1b2rp2/1p4p1/3P4/PQ4P1/2N2q2/5P2/3R2K1 b - - bm Bxd5 Rc7; id "WAC.123"; +6k1/3r4/2R5/P5P1/1P4p1/8/4rB2/6K1 b - - bm g3; id "WAC.124"; +r1bqr1k1/pp3ppp/1bp5/3n4/3B4/2N2P1P/PPP1B1P1/R2Q1RK1 b - - bm Bxd4+; id "WAC.125"; +r5r1/pQ5p/1qp2R2/2k1p3/4P3/2PP4/P1P3PP/6K1 w - - bm Rxc6+; id "WAC.126"; +2k4r/1pr1n3/p1p1q2p/5pp1/3P1P2/P1P1P3/1R2Q1PP/1RB3K1 w - - bm Rxb7; id "WAC.127"; +6rk/1pp2Qrp/3p1B2/1pb1p2R/3n1q2/3P4/PPP3PP/R6K w - - bm Qg6; id "WAC.128"; +3r1r1k/1b2b1p1/1p5p/2p1Pp2/q1B2P2/4P2P/1BR1Q2K/6R1 b - - bm Bf3; id "WAC.129"; +6k1/1pp3q1/5r2/1PPp4/3P1pP1/3Qn2P/3B4/4R1K1 b - - bm Qh6 Qh8; id "WAC.130"; +2rq1bk1/p4p1p/1p4p1/3b4/3B1Q2/8/P4PpP/3RR1K1 w - - bm Re8; id "WAC.131"; +4r1k1/5bpp/2p5/3pr3/8/1B3pPq/PPR2P2/2R2QK1 b - - bm Re1; id "WAC.132"; +r1b1k2r/1pp1q2p/p1n3p1/3QPp2/8/1BP3B1/P5PP/3R1RK1 w kq - bm Bh4; id "WAC.133"; +3r2k1/p6p/2Q3p1/4q3/2P1p3/P3Pb2/1P3P1P/2K2BR1 b - - bm Rd1+; id "WAC.134"; +3r1r1k/N2qn1pp/1p2np2/2p5/2Q1P2N/3P4/PP4PP/3R1RK1 b - - bm Nd4; id "WAC.135"; +6kr/1q2r1p1/1p2N1Q1/5p2/1P1p4/6R1/7P/2R3K1 w - - bm Rc8+; id "WAC.136"; +3b1rk1/1bq3pp/5pn1/1p2rN2/2p1p3/2P1B2Q/1PB2PPP/R2R2K1 w - - bm Rd7; id "WAC.137"; +r1bq3r/ppppR1p1/5n1k/3P4/6pP/3Q4/PP1N1PP1/5K1R w - - bm h5; id "WAC.138"; +rnb3kr/ppp2ppp/1b6/3q4/3pN3/Q4N2/PPP2KPP/R1B1R3 w - - bm Nf6+; id "WAC.139"; +r2b1rk1/pq4p1/4ppQP/3pB1p1/3P4/2R5/PP3PP1/5RK1 w - - bm Rc7; id "WAC.140"; +4r1k1/p1qr1p2/2pb1Bp1/1p5p/3P1n1R/1B3P2/PP3PK1/2Q4R w - - bm Qxf4; id "WAC.141"; +r2q3n/ppp2pk1/3p4/5Pr1/2NP1Qp1/2P2pP1/PP3K2/4R2R w - - bm Re8 f6+; id "WAC.142"; +5b2/pp2r1pk/2pp1pRp/4rP1N/2P1P3/1P4QP/P3q1P1/5R1K w - - bm Rxh6+; id "WAC.143"; +r2q1rk1/pp3ppp/2p2b2/8/B2pPPb1/7P/PPP1N1P1/R2Q1RK1 b - - bm d3; id "WAC.144"; +r1bq4/1p4kp/3p1n2/p4pB1/2pQ4/8/1P4PP/4RRK1 w - - bm Re8; id "WAC.145"; +8/8/2Kp4/3P1B2/2P2k2/5p2/8/8 w - - bm Bc8; id "WAC.146"; +r2r2k1/ppqbppbp/2n2np1/2pp4/6P1/1P1PPNNP/PBP2PB1/R2QK2R b KQ - bm Nxg4; id "WAC.147"; +2r1k3/6pr/p1nBP3/1p3p1p/2q5/2P5/P1R4P/K2Q2R1 w - - bm Rxg7; id "WAC.148"; +6k1/6p1/2p4p/4Pp2/4b1qP/2Br4/1P2RQPK/8 b - - bm Bxg2; id "WAC.149"; +r3r1k1/5p2/pQ1b2pB/1p6/4p3/6P1/Pq2BP1P/2R3K1 b - - bm Ba3 Bf8 e3; id "WAC.150"; +8/3b2kp/4p1p1/pr1n4/N1N4P/1P4P1/1K3P2/3R4 w - - bm Nc3; id "WAC.151"; +1br2rk1/1pqb1ppp/p3pn2/8/1P6/P1N1PN1P/1B3PP1/1QRR2K1 w - - bm Ne4; id "WAC.152"; +2r3k1/q4ppp/p3p3/pnNp4/2rP4/2P2P2/4R1PP/2R1Q1K1 b - - bm Nxd4; id "WAC.153"; +r1b2rk1/2p2ppp/p7/1p6/3P3q/1BP3bP/PP3QP1/RNB1R1K1 w - - bm Qxf7+; id "WAC.154"; +5bk1/1rQ4p/5pp1/2pP4/3n1PP1/7P/1q3BB1/4R1K1 w - - bm d6; id "WAC.155"; +r1b1qN1k/1pp3p1/p2p3n/4p1B1/8/1BP4Q/PP3KPP/8 w - - bm Qxh6+; id "WAC.156"; +5rk1/p4ppp/2p1b3/3Nq3/4P1n1/1p1B2QP/1PPr2P1/1K2R2R w - - bm Ne7+; id "WAC.157"; +5rk1/n1p1R1bp/p2p4/1qpP1QB1/7P/2P3P1/PP3P2/6K1 w - - bm Rxg7+; id "WAC.158"; +r1b2r2/5P1p/ppn3pk/2p1p1Nq/1bP1PQ2/3P4/PB4BP/1R3RK1 w - - bm Ne6+; id "WAC.159"; +qn1kr2r/1pRbb3/pP5p/P2pP1pP/3N1pQ1/3B4/3B1PP1/R5K1 w - - bm Qxd7+; id "WAC.160"; +3r3k/3r1P1p/pp1Nn3/2pp4/7Q/6R1/Pq4PP/5RK1 w - - bm Qxd8+; id "WAC.161"; +r3kbnr/p4ppp/2p1p3/8/Q1B3b1/2N1B3/PP3PqP/R3K2R w KQkq - bm Bd5; id "WAC.162"; +5rk1/2p4p/2p4r/3P4/4p1b1/1Q2NqPp/PP3P1K/R4R2 b - - bm Qg2+; id "WAC.163"; +8/6pp/4p3/1p1n4/1NbkN1P1/P4P1P/1PR3K1/r7 w - - bm Rxc4+; id "WAC.164"; +1r5k/p1p3pp/8/8/4p3/P1P1R3/1P1Q1qr1/2KR4 w - - bm Re2; id "WAC.165"; +r3r1k1/5pp1/p1p4p/2Pp4/8/q1NQP1BP/5PP1/4K2R b K - bm d4; id "WAC.166"; +7Q/ppp2q2/3p2k1/P2Ppr1N/1PP5/7R/5rP1/6K1 b - - bm Rxg2+; id "WAC.167"; +r3k2r/pb1q1p2/8/2p1pP2/4p1p1/B1P1Q1P1/P1P3K1/R4R2 b kq - bm Qd2+; id "WAC.168"; +5rk1/1pp3bp/3p2p1/2PPp3/1P2P3/2Q1B3/4q1PP/R5K1 b - - bm Bh6; id "WAC.169"; +5r1k/6Rp/1p2p3/p2pBp2/1qnP4/4P3/Q4PPP/6K1 w - - bm Qxc4; id "WAC.170"; +2rq4/1b2b1kp/p3p1p1/1p1nNp2/7P/1B2B1Q1/PP3PP1/3R2K1 w - - bm Bh6+; id "WAC.171"; +5r1k/p5pp/8/1P1pq3/P1p2nR1/Q7/5BPP/6K1 b - - bm Qe1+; id "WAC.172"; +2r1b3/1pp1qrk1/p1n1P1p1/7R/2B1p3/4Q1P1/PP3PP1/3R2K1 w - - bm Qh6+; id "WAC.173"; +2r2rk1/6p1/p3pq1p/1p1b1p2/3P1n2/PP3N2/3N1PPP/1Q2RR1K b - - bm Nxg2; id "WAC.174"; +r5k1/pppb3p/2np1n2/8/3PqNpP/3Q2P1/PPP5/R4RK1 w - - bm Nh5; id "WAC.175"; +r1bq3r/ppp2pk1/3p1pp1/8/2BbPQ2/2NP2P1/PPP4P/R4R1K b - - bm Rxh2+; id "WAC.176"; +r1b3r1/4qk2/1nn1p1p1/3pPp1P/p4P2/1p3BQN/PKPBN3/3R3R b - - bm Qa3+; id "WAC.177"; +3r2k1/p1rn1p1p/1p2pp2/6q1/3PQNP1/5P2/P1P4R/R5K1 w - - bm Nxe6; id "WAC.178"; +r1b2r1k/pp4pp/3p4/3B4/8/1QN3Pn/PP3q1P/R3R2K b - - bm Qg1+; id "WAC.179"; +r1q2rk1/p3bppb/3p1n1p/2nPp3/1p2P1P1/6NP/PP2QPB1/R1BNK2R b KQ - bm Nxd5; id "WAC.180"; +r3k2r/2p2p2/p2p1n2/1p2p3/4P2p/1PPPPp1q/1P5P/R1N2QRK b kq - bm Ng4; id "WAC.181"; +r1b2rk1/ppqn1p1p/2n1p1p1/2b3N1/2N5/PP1BP3/1B3PPP/R2QK2R w KQ - bm Qh5; id "WAC.182"; +1r2k1r1/5p2/b3p3/1p2b1B1/3p3P/3B4/PP2KP2/2R3R1 w - - bm Bf6; id "WAC.183"; +4kn2/r4p1r/p3bQ2/q1nNP1Np/1p5P/8/PPP3P1/2KR3R w - - bm Qe7+; id "WAC.184"; +1r1rb1k1/2p3pp/p2q1p2/3PpP1Q/Pp1bP2N/1B5R/1P4PP/2B4K w - - bm Qxh7+; id "WAC.185"; +r5r1/p1q2p1k/1p1R2pB/3pP3/6bQ/2p5/P1P1NPPP/6K1 w - - bm Bf8+; id "WAC.186"; +6k1/5p2/p3p3/1p3qp1/2p1Qn2/2P1R3/PP1r1PPP/4R1K1 b - - bm Nh3+; id "WAC.187"; +3RNbk1/pp3p2/4rQpp/8/1qr5/7P/P4P2/3R2K1 w - - bm Qg7+; id "WAC.188"; +3r1k2/1ppPR1n1/p2p1rP1/3P3p/4Rp1N/5K2/P1P2P2/8 w - - bm Re8+; id "WAC.189"; +8/p2b2kp/1q1p2p1/1P1Pp3/4P3/3B2P1/P2Q3P/2Nn3K b - - bm Bh3; id "WAC.190"; +2r1Rn1k/1p1q2pp/p7/5p2/3P4/1B4P1/P1P1QP1P/6K1 w - - bm Qc4; id "WAC.191"; +r3k3/ppp2Npp/4Bn2/2b5/1n1pp3/N4P2/PPP3qP/R2QKR2 b Qq - bm Nd3+; id "WAC.192"; +5bk1/p4ppp/Qp6/4B3/1P6/Pq2P1P1/2rr1P1P/R4RK1 b - - bm Qxe3; id "WAC.193"; +5rk1/ppq2ppp/2p5/4bN2/4P3/6Q1/PPP2PPP/3R2K1 w - - bm Nh6+; id "WAC.194"; +3r1rk1/1p3p2/p3pnnp/2p3p1/2P2q2/1P5P/PB2QPPN/3RR1K1 w - - bm g3; id "WAC.195"; +rr4k1/p1pq2pp/Q1n1pn2/2bpp3/4P3/2PP1NN1/PP3PPP/R1B1K2R b KQ - bm Nb4; id "WAC.196"; +7k/1p4p1/7p/3P1n2/4Q3/2P2P2/PP3qRP/7K b - - bm Qf1+; id "WAC.197"; +2br2k1/ppp2p1p/4p1p1/4P2q/2P1Bn2/2Q5/PP3P1P/4R1RK b - - bm Rd3; id "WAC.198"; +r1br2k1/pp2nppp/2n5/1B1q4/Q7/4BN2/PP3PPP/2R2RK1 w - - bm Bxc6 Rfd1; id "WAC.199"; +2rqrn1k/pb4pp/1p2pp2/n2P4/2P3N1/P2B2Q1/1B3PPP/2R1R1K1 w - - bm Bxf6; id "WAC.200"; +2b2r1k/4q2p/3p2pQ/2pBp3/8/6P1/1PP2P1P/R5K1 w - - bm Ra7; id "WAC.201"; +QR2rq1k/2p3p1/3p1pPp/8/4P3/8/P1r3PP/1R4K1 b - - bm Rxa2; id "WAC.202"; +r4rk1/5ppp/p3q1n1/2p2NQ1/4n3/P3P3/1B3PPP/1R3RK1 w - - bm Qh6; id "WAC.203"; +r1b1qrk1/1p3ppp/p1p5/3Nb3/5N2/P7/1P4PQ/K1R1R3 w - - bm Rxe5; id "WAC.204"; +r3rnk1/1pq2bb1/p4p2/3p1Pp1/3B2P1/1NP4R/P1PQB3/2K4R w - - bm Qxg5; id "WAC.205"; +1Qq5/2P1p1kp/3r1pp1/8/8/7P/p4PP1/2R3K1 b - - bm Rc6; id "WAC.206"; +r1bq2kr/p1pp1ppp/1pn1p3/4P3/2Pb2Q1/BR6/P4PPP/3K1BNR w - - bm Qxg7+; id "WAC.207"; +3r1bk1/ppq3pp/2p5/2P2Q1B/8/1P4P1/P6P/5RK1 w - - bm Bf7+; id "WAC.208"; +4kb1r/2q2p2/r2p4/pppBn1B1/P6P/6Q1/1PP5/2KRR3 w k - bm Rxe5+; id "WAC.209"; +3r1rk1/pp1q1ppp/3pn3/2pN4/5PP1/P5PQ/1PP1B3/1K1R4 w - - bm Rh1; id "WAC.210"; +r1bqrk2/pp1n1n1p/3p1p2/P1pP1P1Q/2PpP1NP/6R1/2PB4/4RBK1 w - - bm Qxf7+; id "WAC.211"; +rn1qr2Q/pbppk1p1/1p2pb2/4N3/3P4/2N5/PPP3PP/R4RK1 w - - bm Qxg7+; id "WAC.212"; +3r1r1k/1b4pp/ppn1p3/4Pp1R/Pn5P/3P4/4QP2/1qB1NKR1 w - - bm Rxh7+; id "WAC.213"; +r2r2k1/1p2qpp1/1np1p1p1/p3N3/2PPN3/bP5R/4QPPP/4R1K1 w - - bm Ng5; id "WAC.214"; +3r2k1/pb1q1pp1/1p2pb1p/8/3N4/P2QB3/1P3PPP/1Br1R1K1 w - - bm Qh7+; id "WAC.215"; +r2qr1k1/1b1nbppp/p3pn2/1p1pN3/3P1B2/2PB1N2/PP2QPPP/R4RK1 w - - bm Nxf7; id "WAC.216"; +r3kb1r/1pp3p1/p3bp1p/5q2/3QN3/1P6/PBP3P1/3RR1K1 w kq - bm Qd7+; id "WAC.217"; +6k1/pp5p/2p3q1/6BP/2nPr1Q1/8/PP3R1K/8 w - - bm Bh6; id "WAC.218"; +7k/p4q1p/1pb5/2p5/4B2Q/2P1B3/P6P/7K b - - bm Qf1+; id "WAC.219"; +3rr1k1/ppp2ppp/8/5Q2/4n3/1B5R/PPP1qPP1/5RK1 b - - bm Qxf1+; id "WAC.220"; +r3k3/P5bp/2N1bp2/4p3/2p5/6NP/1PP2PP1/3R2K1 w q - bm Rd8+; id "WAC.221"; +2r1r2k/1q3ppp/p2Rp3/2p1P3/6QB/p3P3/bP3PPP/3R2K1 w - - bm Bf6; id "WAC.222"; +r1bqk2r/pp3ppp/5n2/8/1b1npB2/2N5/PP1Q2PP/1K2RBNR w kq - bm Nxe4; id "WAC.223"; +5rk1/p1q3pp/1p1r4/2p1pp1Q/1PPn1P2/3B3P/P2R2P1/3R2K1 b - - bm Rh6 e4; id "WAC.224"; +4R3/4q1kp/6p1/1Q3b2/1P1b1P2/6KP/8/8 b - - bm Qh4+; id "WAC.225"; +2b2rk1/p1p4p/2p1p1p1/br2N1Q1/1p2q3/8/PB3PPP/3R1RK1 w - - bm Nf7; id "WAC.226"; +2k1rb1r/ppp3pp/2np1q2/5b2/2B2P2/2P1BQ2/PP1N1P1P/2KR3R b - - bm d5; id "WAC.227"; +r4rk1/1bq1bp1p/4p1p1/p2p4/3BnP2/1N1B3R/PPP3PP/R2Q2K1 w - - bm Bxe4; id "WAC.228"; +8/8/8/1p5r/p1p1k1pN/P2pBpP1/1P1K1P2/8 b - - bm Rxh4 b4; id "WAC.229"; +2b5/1r6/2kBp1p1/p2pP1P1/2pP4/1pP3K1/1R3P2/8 b - - bm Rb4; id "WAC.230"; +r4rk1/1b1nqp1p/p5p1/1p2PQ2/2p5/5N2/PP3PPP/R1BR2K1 w - - bm Bg5; id "WAC.231"; +1R2rq1k/2p3p1/Q2p1pPp/8/4P3/8/P1r3PP/1R4K1 w - - bm Qb5 Rxe8; id "WAC.232"; +5rk1/p1p2r1p/2pp2p1/4p3/PPPnP3/3Pq1P1/1Q1R1R1P/4NK2 b - - bm Nb3; id "WAC.233"; +2kr1r2/p6p/5Pp1/2p5/1qp2Q1P/7R/PP6/1KR5 w - - bm Rb3; id "WAC.234"; +5r2/1p1RRrk1/4Qq1p/1PP3p1/8/4B3/1b3P1P/6K1 w - - bm Qxf7+ Rxf7+; id "WAC.235"; +1R6/p5pk/4p2p/4P3/8/2r3qP/P3R1b1/4Q1K1 b - - bm Rc1; id "WAC.236"; +r5k1/pQp2qpp/8/4pbN1/3P4/6P1/PPr4P/1K1R3R b - - bm Rc1+; id "WAC.237"; +1k1r4/pp1r1pp1/4n1p1/2R5/2Pp1qP1/3P2QP/P4PB1/1R4K1 w - - bm Bxb7; id "WAC.238"; +8/6k1/5pp1/Q6p/5P2/6PK/P4q1P/8 b - - bm Qf1+; id "WAC.239"; +2b4k/p1b2p2/2p2q2/3p1PNp/3P2R1/3B4/P1Q2PKP/4r3 w - - bm Qxc6; id "WAC.240"; +2rq1rk1/pp3ppp/2n2b2/4NR2/3P4/PB5Q/1P4PP/3R2K1 w - - bm Qxh7+; id "WAC.241"; +r1b1r1k1/pp1nqp2/2p1p1pp/8/4N3/P1Q1P3/1P3PPP/1BRR2K1 w - - bm Rxd7; id "WAC.242"; +1r3r1k/3p4/1p1Nn1R1/4Pp1q/pP3P1p/P7/5Q1P/6RK w - - bm Qe2; id "WAC.243"; +r6r/pp3ppp/3k1b2/2pb4/B4Pq1/2P1Q3/P5PP/1RBR2K1 w - - bm Qxc5+; id "WAC.244"; +4rrn1/ppq3bk/3pPnpp/2p5/2PB4/2NQ1RPB/PP5P/5R1K w - - bm Qxg6+; id "WAC.245"; +6R1/4qp1p/ppr1n1pk/8/1P2P1QP/6N1/P4PP1/6K1 w - - bm Qh5+; id "WAC.246"; +2k1r3/1p2Bq2/p2Qp3/Pb1p1p1P/2pP1P2/2P5/2P2KP1/1R6 w - - bm Rxb5; id "WAC.247"; +5r1k/1p4pp/3q4/3Pp1R1/8/8/PP4PP/4Q1K1 b - - bm Qc5+; id "WAC.248"; +r4rk1/pbq2pp1/1ppbpn1p/8/2PP4/1P1Q1N2/PBB2PPP/R3R1K1 w - - bm c5 d5; id "WAC.249"; +1b5k/7P/p1p2np1/2P2p2/PP3P2/4RQ1R/q2r3P/6K1 w - - bm Re8+; id "WAC.250"; +k7/p4p2/P1q1b1p1/3p3p/3Q4/7P/5PP1/1R4K1 w - - bm Qe5 Qf4; id "WAC.251"; +1rb1r1k1/p1p2ppp/5n2/2pP4/5P2/2QB4/qNP3PP/2KRB2R b - - bm Re2; id "WAC.252"; +k5r1/p4b2/2P5/5p2/3P1P2/4QBrq/P5P1/4R1K1 w - - bm Qe8+; id "WAC.253"; +r6k/pp3p1p/2p1bp1q/b3p3/4Pnr1/2PP2NP/PP1Q1PPN/R2B2RK b - - bm Nxh3; id "WAC.254"; +3r3r/p4pk1/5Rp1/3q4/1p1P2RQ/5N2/P1P4P/2b4K w - - bm Rfxg6+; id "WAC.255"; +3r1rk1/1pb1qp1p/2p3p1/p7/P2Np2R/1P5P/1BP2PP1/3Q1BK1 w - - bm Nf5; id "WAC.256"; +4r1k1/pq3p1p/2p1r1p1/2Q1p3/3nN1P1/1P6/P1P2P1P/3RR1K1 w - - bm Rxd4; id "WAC.257"; +r3brkn/1p5p/2p2Ppq/2Pp3B/3Pp2Q/4P1R1/6PP/5R1K w - - bm Bxg6; id "WAC.258"; +r1bq1rk1/ppp2ppp/2np4/2bN1PN1/2B1P3/3p4/PPP2nPP/R1BQ1K1R w - - bm Qh5; id "WAC.259"; +2r2b1r/p1Nk2pp/3p1p2/N2Qn3/4P3/q6P/P4PP1/1R3K1R w - - bm Qe6+; id "WAC.260"; +r5k1/1bp3pp/p2p4/1p6/5p2/1PBP1nqP/1PP3Q1/R4R1K b - - bm Nd4; id "WAC.261"; +6k1/p1B1b2p/2b3r1/2p5/4p3/1PP1N1Pq/P2R1P2/3Q2K1 b - - bm Rh6; id "WAC.262"; +rnbqr2k/pppp1Qpp/8/b2NN3/2B1n3/8/PPPP1PPP/R1B1K2R w KQ - bm Qg8+; id "WAC.263"; +r2r2k1/1R2qp2/p5pp/2P5/b1PN1b2/P7/1Q3PPP/1B1R2K1 b - - bm Rab8; id "WAC.264"; +2r1k2r/2pn1pp1/1p3n1p/p3PP2/4q2B/P1P5/2Q1N1PP/R4RK1 w k - bm exf6; id "WAC.265"; +r3q2r/2p1k1p1/p5p1/1p2Nb2/1P2nB2/P7/2PNQbPP/R2R3K b - - bm Rxh2+; id "WAC.266"; +2r1kb1r/pp3ppp/2n1b3/1q1N2B1/1P2Q3/8/P4PPP/3RK1NR w Kk - bm Nc7+; id "WAC.267"; +2r3kr/ppp2n1p/7B/5q1N/1bp5/2Pp4/PP2RPPP/R2Q2K1 w - - bm Re8+; id "WAC.268"; +2kr2nr/pp1n1ppp/2p1p3/q7/1b1P1B2/P1N2Q1P/1PP1BPP1/R3K2R w KQ - bm axb4; id "WAC.269"; +2r1r1k1/pp1q1ppp/3p1b2/3P4/3Q4/5N2/PP2RPPP/4R1K1 w - - bm Qg4; id "WAC.270"; +2kr4/ppp3Pp/4RP1B/2r5/5P2/1P6/P2p4/3K4 w - - bm Rd6; id "WAC.271"; +nrq4r/2k1p3/1p1pPnp1/pRpP1p2/P1P2P2/2P1BB2/1R2Q1P1/6K1 w - - bm Bxc5; id "WAC.272"; +2k4B/bpp1qp2/p1b5/7p/1PN1n1p1/2Pr4/P5PP/R3QR1K b - - bm Ng3+; id "WAC.273"; +8/1p6/p5R1/k7/Prpp4/K7/1NP5/8 w - - bm Rb6; id "WAC.274"; +r1b2rk1/1p1n1ppp/p1p2q2/4p3/P1B1Pn2/1QN2N2/1P3PPP/3R1RK1 b - - bm Nxg2 b5; id "WAC.275"; +r5k1/pp1RR1pp/1b6/6r1/2p5/B6P/P4qPK/3Q4 w - - bm Qd5+; id "WAC.276"; +1r4r1/p2kb2p/bq2p3/3p1p2/5P2/2BB3Q/PP4PP/3RKR2 b - - bm Rg3 Rxg2; id "WAC.277"; +r2qkb1r/pppb2pp/2np1n2/5pN1/2BQP3/2N5/PPP2PPP/R1B1K2R w KQkq - bm Bf7+; id "WAC.278"; +r7/4b3/2p1r1k1/1p1pPp1q/1P1P1P1p/PR2NRpP/2Q3K1/8 w - - bm Nxf5; id "WAC.279"; +r1r2bk1/5p1p/pn4p1/N2b4/3Pp3/B3P3/2q1BPPP/RQ3RK1 b - - bm Bxa3; id "WAC.280"; +2R5/2R4p/5p1k/6n1/8/1P2QPPq/r7/6K1 w - - bm Rxh7+; id "WAC.281"; +6k1/2p3p1/1p1p1nN1/1B1P4/4PK2/8/2r3b1/7R w - - bm Rh8+; id "WAC.282"; +3q1rk1/4bp1p/1n2P2Q/3p1p2/6r1/Pp2R2N/1B4PP/7K w - - bm Ng5; id "WAC.283"; +3r3k/pp4pp/8/1P6/3N4/Pn2P1qb/1B1Q2B1/2R3K1 w - - bm Nf5; id "WAC.284"; +2rr3k/1b2bppP/p2p1n2/R7/3P4/1qB2P2/1P4Q1/1K5R w - - bm Qxg7+; id "WAC.285"; +3r1k2/1p6/p4P2/2pP2Qb/8/1P1KB3/P6r/8 b - - bm Rxd5+; id "WAC.286"; +rn3k1r/pp2bBpp/2p2n2/q5N1/3P4/1P6/P1P3PP/R1BQ1RK1 w - - bm Qh5; id "WAC.287"; +r1b2rk1/p4ppp/1p1Qp3/4P2N/1P6/8/P3qPPP/3R1RK1 w - - bm Nf6+; id "WAC.288"; +2r3k1/5p1p/p3q1p1/2n3P1/1p1QP2P/1P4N1/PK6/2R5 b - - bm Qe5; id "WAC.289"; +2k2r2/2p5/1pq5/p1p1n3/P1P2n1B/1R4Pp/2QR4/6K1 b - - bm Ne2+; id "WAC.290"; +5r1k/3b2p1/p6p/1pRpR3/1P1P2q1/P4pP1/5QnP/1B4K1 w - - bm h3; id "WAC.291"; +4r3/1Q1qk2p/p4pp1/3Pb3/P7/6PP/5P2/4R1K1 w - - bm d6+; id "WAC.292"; +1nbq1r1k/3rbp1p/p1p1pp1Q/1p6/P1pPN3/5NP1/1P2PPBP/R4RK1 w - - bm Nfg5; id "WAC.293"; +3r3k/1r3p1p/p1pB1p2/8/p1qNP1Q1/P6P/1P4P1/3R3K w - - bm Bf8 Nf5 Qf4; id "WAC.294"; +4r3/p4r1p/R1p2pp1/1p1bk3/4pNPP/2P1K3/2P2P2/3R4 w - - bm Rxd5+; id "WAC.295"; +3r4/1p2k2p/p1b1p1p1/4Q1Pn/2B3KP/4pP2/PP2R1N1/6q1 b - - bm Rd4+ Rf8; id "WAC.296"; +3r1rk1/p3qp1p/2bb2p1/2p5/3P4/1P6/PBQN1PPP/2R2RK1 b - - bm Bxg2 Bxh2+; id "WAC.297"; +3Q4/p3b1k1/2p2rPp/2q5/4B3/P2P4/7P/6RK w - - bm Qh8+; id "WAC.298"; +1n2rr2/1pk3pp/pNn2p2/2N1p3/8/6P1/PP2PPKP/2RR4 w - - bm Nca4; id "WAC.299"; +b2b1r1k/3R1ppp/4qP2/4p1PQ/4P3/5B2/4N1K1/8 w - - bm g6; id "WAC.300"; diff --git a/tests/zugzwang.epd b/tests/zugzwang.epd new file mode 100644 index 0000000..df86e39 --- /dev/null +++ b/tests/zugzwang.epd @@ -0,0 +1,5 @@ +8/8/p1p5/1p5p/1P5p/8/PPP2K1p/4R1rk w - - 0 1 bm Rf1; id "zugzwang.001"; +1q1k4/2Rr4/8/2Q3K1/8/8/8/8 w - - 0 1 bm Kh6; id "zugzwang.002"; +7k/5K2/5P1p/3p4/6P1/3p4/8/8 w - - 0 1 bm g5; id "zugzwang.003"; +8/6B1/p5p1/Pp4kp/1P5r/5P1Q/4q1PK/8 w - - 0 32 bm Qxh4; id "zugzwang.004"; +8/8/1p1r1k2/p1pPN1p1/P3KnP1/1P6/8/3R4 b - - 0 1 bm Nxd5; id "zugzwang.005"; |
