👁️
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

import route

+1630 -681
+1
CLAUDE.md
··· 193 193 - **Avoid unnecessary try/catch blocks** - Don't wrap code in try/catch without a specific reason. It's not defensive coding—it's noisy and masks real errors. If a function can return null/undefined, use that instead of throwing. Let exceptions bubble naturally unless you have a specific recovery strategy 194 194 - **Check `typelex/*.tsp` for DeckBelcher data models** - When confused about deck structure or app schemas, read the `.tsp` files. For card data, see `src/lib/scryfall-types.ts` 195 195 - **NEVER use `-f` flag with rm/git/etc without justification** - Force flags suppress errors and can hide problems. Use `rm -r` not `rm -rf`, let commands fail naturally 196 + - **Prefer type-safe refactors over backward compatibility** - Don't make parameters optional or accept looser types just to avoid updating call sites. If an API change improves type safety (e.g., making a previously-implicit parameter explicit and required), update all callers. The type system catching mistakes at compile time is worth more than avoiding a few edits 196 197 - **ALWAYS run `npm run check` and `npm run typecheck` before considering work complete** - Verify linting, formatting, and types pass 197 198 - **NEVER manually fix formatting issues** - Always use `npm run format -- --write` to apply formatting fixes automatically. Manual formatting edits are error-prone and waste time 198 199 - `src/routeTree.gen.ts` is auto-generated - never edit manually
+601 -601
src/lib/deck-formats/__tests__/__snapshots__/snapshots.test.ts.snap
··· 14241 14241 "collectorNumber": "290", 14242 14242 "name": "Ashling, Rekindled // Ashling, Rimebound", 14243 14243 "quantity": 1, 14244 - "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290", 14244 + "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290 [Commander{top}]", 14245 14245 "setCode": "ECL", 14246 14246 "tags": [], 14247 14247 }, ··· 14252 14252 "collectorNumber": "33", 14253 14253 "name": "Caldera Pyremaw", 14254 14254 "quantity": 1, 14255 - "raw": "1x Caldera Pyremaw (tdc) 33", 14255 + "raw": "1x Caldera Pyremaw (tdc) 33 [Burn]", 14256 14256 "setCode": "TDC", 14257 14257 "tags": [ 14258 14258 "Burn", ··· 14262 14262 "collectorNumber": "119", 14263 14263 "name": "Exalted Flamer of Tzeentch", 14264 14264 "quantity": 1, 14265 - "raw": "1x Exalted Flamer of Tzeentch (40k) 119", 14265 + "raw": "1x Exalted Flamer of Tzeentch (40k) 119 [Burn,Recursion]", 14266 14266 "setCode": "40K", 14267 14267 "tags": [ 14268 14268 "Burn", ··· 14273 14273 "collectorNumber": "463", 14274 14274 "name": "Flash Photography", 14275 14275 "quantity": 1, 14276 - "raw": "1x Flash Photography (fic) 463", 14276 + "raw": "1x Flash Photography (fic) 463 [Copy]", 14277 14277 "setCode": "FIC", 14278 14278 "tags": [ 14279 14279 "Copy", ··· 14283 14283 "collectorNumber": "67", 14284 14284 "name": "Relm's Sketching", 14285 14285 "quantity": 1, 14286 - "raw": "1x Relm's Sketching (fin) 67", 14286 + "raw": "1x Relm's Sketching (fin) 67 [Copy]", 14287 14287 "setCode": "FIN", 14288 14288 "tags": [ 14289 14289 "Copy", ··· 14293 14293 "collectorNumber": "192", 14294 14294 "name": "Replication Technique", 14295 14295 "quantity": 1, 14296 - "raw": "1x Replication Technique (m3c) 192", 14296 + "raw": "1x Replication Technique (m3c) 192 [Copy]", 14297 14297 "setCode": "M3C", 14298 14298 "tags": [ 14299 14299 "Copy", ··· 14303 14303 "collectorNumber": "145", 14304 14304 "name": "Archmage Emeritus", 14305 14305 "quantity": 1, 14306 - "raw": "1x Archmage Emeritus (tdc) 145", 14306 + "raw": "1x Archmage Emeritus (tdc) 145 [Draw]", 14307 14307 "setCode": "TDC", 14308 14308 "tags": [ 14309 14309 "Draw", ··· 14313 14313 "collectorNumber": "30", 14314 14314 "name": "Archmage of Runes", 14315 14315 "quantity": 1, 14316 - "raw": "1x Archmage of Runes (fdn) 30", 14316 + "raw": "1x Archmage of Runes (fdn) 30 [Draw]", 14317 14317 "setCode": "FDN", 14318 14318 "tags": [ 14319 14319 "Draw", ··· 14323 14323 "collectorNumber": "205", 14324 14324 "name": "Ashling's Command", 14325 14325 "quantity": 1, 14326 - "raw": "1x Ashling's Command (ecl) 205", 14326 + "raw": "1x Ashling's Command (ecl) 205 [Draw]", 14327 14327 "setCode": "ECL", 14328 14328 "tags": [ 14329 14329 "Draw", ··· 14333 14333 "collectorNumber": "206", 14334 14334 "name": "Big Score", 14335 14335 "quantity": 1, 14336 - "raw": "1x Big Score (tdc) 206", 14336 + "raw": "1x Big Score (tdc) 206 [Draw]", 14337 14337 "setCode": "TDC", 14338 14338 "tags": [ 14339 14339 "Draw", ··· 14343 14343 "collectorNumber": "150", 14344 14344 "name": "Deep Analysis", 14345 14345 "quantity": 1, 14346 - "raw": "1x Deep Analysis (tdc) 150", 14346 + "raw": "1x Deep Analysis (tdc) 150 [Draw]", 14347 14347 "setCode": "TDC", 14348 14348 "tags": [ 14349 14349 "Draw", ··· 14353 14353 "collectorNumber": "115", 14354 14354 "name": "Dig Through Time", 14355 14355 "quantity": 1, 14356 - "raw": "1x Dig Through Time (dsc) 115", 14356 + "raw": "1x Dig Through Time (dsc) 115 [Draw]", 14357 14357 "setCode": "DSC", 14358 14358 "tags": [ 14359 14359 "Draw", ··· 14363 14363 "collectorNumber": "220", 14364 14364 "name": "Drawn from Dreams", 14365 14365 "quantity": 1, 14366 - "raw": "1x Drawn from Dreams (ncc) 220", 14366 + "raw": "1x Drawn from Dreams (ncc) 220 [Draw]", 14367 14367 "setCode": "NCC", 14368 14368 "tags": [ 14369 14369 "Draw", ··· 14373 14373 "collectorNumber": "203", 14374 14374 "name": "Flame of Anor", 14375 14375 "quantity": 1, 14376 - "raw": "1x Flame of Anor (ltr) 203", 14376 + "raw": "1x Flame of Anor (ltr) 203 [Draw]", 14377 14377 "setCode": "LTR", 14378 14378 "tags": [ 14379 14379 "Draw", ··· 14383 14383 "collectorNumber": "GRN-178", 14384 14384 "name": "Hypothesizzle", 14385 14385 "quantity": 1, 14386 - "raw": "1x Hypothesizzle (plst) GRN-178", 14386 + "raw": "1x Hypothesizzle (plst) GRN-178 [Draw,Removal]", 14387 14387 "setCode": "PLST", 14388 14388 "tags": [ 14389 14389 "Draw", ··· 14394 14394 "collectorNumber": "60", 14395 14395 "name": "Lórien Revealed", 14396 14396 "quantity": 1, 14397 - "raw": "1x Lórien Revealed (ltr) 60", 14397 + "raw": "1x Lórien Revealed (ltr) 60 [Draw]", 14398 14398 "setCode": "LTR", 14399 14399 "tags": [ 14400 14400 "Draw", ··· 14404 14404 "collectorNumber": "63", 14405 14405 "name": "Memories Returning", 14406 14406 "quantity": 1, 14407 - "raw": "1x Memories Returning (fin) 63", 14407 + "raw": "1x Memories Returning (fin) 63 [Draw]", 14408 14408 "setCode": "FIN", 14409 14409 "tags": [ 14410 14410 "Draw", ··· 14414 14414 "collectorNumber": "75", 14415 14415 "name": "Memory Deluge", 14416 14416 "quantity": 1, 14417 - "raw": "1x Memory Deluge (inr) 75", 14417 + "raw": "1x Memory Deluge (inr) 75 [Draw]", 14418 14418 "setCode": "INR", 14419 14419 "tags": [ 14420 14420 "Draw", ··· 14424 14424 "collectorNumber": "120", 14425 14425 "name": "Pirate's Pillage", 14426 14426 "quantity": 1, 14427 - "raw": "1x Pirate's Pillage (2x2) 120", 14427 + "raw": "1x Pirate's Pillage (2x2) 120 [Draw]", 14428 14428 "setCode": "2X2", 14429 14429 "tags": [ 14430 14430 "Draw", ··· 14434 14434 "collectorNumber": "74", 14435 14435 "name": "Scattered Thoughts", 14436 14436 "quantity": 1, 14437 - "raw": "1x Scattered Thoughts (vow) 74", 14437 + "raw": "1x Scattered Thoughts (vow) 74 [Draw]", 14438 14438 "setCode": "VOW", 14439 14439 "tags": [ 14440 14440 "Draw", ··· 14444 14444 "collectorNumber": "76", 14445 14445 "name": "Sea Gate Restoration // Sea Gate, Reborn", 14446 14446 "quantity": 1, 14447 - "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76", 14447 + "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76 [Draw]", 14448 14448 "setCode": "ZNR", 14449 14449 "tags": [ 14450 14450 "Draw", ··· 14454 14454 "collectorNumber": "80", 14455 14455 "name": "Silundi Vision // Silundi Isle", 14456 14456 "quantity": 1, 14457 - "raw": "1x Silundi Vision // Silundi Isle (znr) 80", 14457 + "raw": "1x Silundi Vision // Silundi Isle (znr) 80 [Draw]", 14458 14458 "setCode": "ZNR", 14459 14459 "tags": [ 14460 14460 "Draw", ··· 14464 14464 "collectorNumber": "244", 14465 14465 "name": "Tellah, Great Sage", 14466 14466 "quantity": 1, 14467 - "raw": "1x Tellah, Great Sage (fin) 244", 14467 + "raw": "1x Tellah, Great Sage (fin) 244 [Draw]", 14468 14468 "setCode": "FIN", 14469 14469 "tags": [ 14470 14470 "Draw", ··· 14474 14474 "collectorNumber": "164", 14475 14475 "name": "Unexpected Windfall", 14476 14476 "quantity": 1, 14477 - "raw": "1x Unexpected Windfall (afr) 164", 14477 + "raw": "1x Unexpected Windfall (afr) 164 [Draw]", 14478 14478 "setCode": "AFR", 14479 14479 "tags": [ 14480 14480 "Draw", ··· 14484 14484 "collectorNumber": "ZNR-174", 14485 14485 "name": "Valakut Awakening // Valakut Stoneforge", 14486 14486 "quantity": 1, 14487 - "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174", 14487 + "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174 [Draw]", 14488 14488 "setCode": "PLST", 14489 14489 "tags": [ 14490 14490 "Draw", ··· 14494 14494 "collectorNumber": "154", 14495 14495 "name": "Arcane Bombardment", 14496 14496 "quantity": 1, 14497 - "raw": "1x Arcane Bombardment (otc) 154", 14497 + "raw": "1x Arcane Bombardment (otc) 154 [Greed]", 14498 14498 "setCode": "OTC", 14499 14499 "tags": [ 14500 14500 "Greed", ··· 14504 14504 "collectorNumber": "249", 14505 14505 "name": "Chimil, the Inner Sun", 14506 14506 "quantity": 1, 14507 - "raw": "1x Chimil, the Inner Sun (lci) 249", 14507 + "raw": "1x Chimil, the Inner Sun (lci) 249 [Greed]", 14508 14508 "setCode": "LCI", 14509 14509 "tags": [ 14510 14510 "Greed", ··· 14514 14514 "collectorNumber": "267", 14515 14515 "name": "Double Vision", 14516 14516 "quantity": 1, 14517 - "raw": "1x Double Vision (ncc) 267", 14517 + "raw": "1x Double Vision (ncc) 267 [Greed]", 14518 14518 "setCode": "NCC", 14519 14519 "tags": [ 14520 14520 "Greed", ··· 14524 14524 "collectorNumber": "22", 14525 14525 "name": "Fury Storm", 14526 14526 "quantity": 1, 14527 - "raw": "1x Fury Storm (c18) 22", 14527 + "raw": "1x Fury Storm (c18) 22 [Greed]", 14528 14528 "setCode": "C18", 14529 14529 "tags": [ 14530 14530 "Greed", ··· 14534 14534 "collectorNumber": "132", 14535 14535 "name": "Harmonic Prodigy", 14536 14536 "quantity": 1, 14537 - "raw": "1x Harmonic Prodigy (mh2) 132", 14537 + "raw": "1x Harmonic Prodigy (mh2) 132 [Greed]", 14538 14538 "setCode": "MH2", 14539 14539 "tags": [ 14540 14540 "Greed", ··· 14544 14544 "collectorNumber": "59", 14545 14545 "name": "Jin-Gitaxias, Progress Tyrant", 14546 14546 "quantity": 1, 14547 - "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59", 14547 + "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59 [Greed]", 14548 14548 "setCode": "NEO", 14549 14549 "tags": [ 14550 14550 "Greed", ··· 14554 14554 "collectorNumber": "223", 14555 14555 "name": "Mana Geyser", 14556 14556 "quantity": 1, 14557 - "raw": "1x Mana Geyser (tdc) 223", 14557 + "raw": "1x Mana Geyser (tdc) 223 [Greed]", 14558 14558 "setCode": "TDC", 14559 14559 "tags": [ 14560 14560 "Greed", ··· 14564 14564 "collectorNumber": "162", 14565 14565 "name": "Summon: G.F. Cerberus", 14566 14566 "quantity": 1, 14567 - "raw": "1x Summon: G.F. Cerberus (fin) 162", 14567 + "raw": "1x Summon: G.F. Cerberus (fin) 162 [Greed]", 14568 14568 "setCode": "FIN", 14569 14569 "tags": [ 14570 14570 "Greed", ··· 14574 14574 "collectorNumber": "180", 14575 14575 "name": "Sunbird's Invocation", 14576 14576 "quantity": 1, 14577 - "raw": "1x Sunbird's Invocation (c21) 180", 14577 + "raw": "1x Sunbird's Invocation (c21) 180 [Greed]", 14578 14578 "setCode": "C21", 14579 14579 "tags": [ 14580 14580 "Greed", ··· 14584 14584 "collectorNumber": "153", 14585 14585 "name": "Cascade Bluffs", 14586 14586 "quantity": 1, 14587 - "raw": "1x Cascade Bluffs (eoc) 153", 14587 + "raw": "1x Cascade Bluffs (eoc) 153 [Land]", 14588 14588 "setCode": "EOC", 14589 14589 "tags": [ 14590 14590 "Land", ··· 14594 14594 "collectorNumber": "59", 14595 14595 "name": "Command Tower", 14596 14596 "quantity": 1, 14597 - "raw": "1x Command Tower (ecc) 59", 14597 + "raw": "1x Command Tower (ecc) 59 [Land]", 14598 14598 "setCode": "ECC", 14599 14599 "tags": [ 14600 14600 "Land", ··· 14604 14604 "collectorNumber": "238", 14605 14605 "name": "Fiery Islet", 14606 14606 "quantity": 1, 14607 - "raw": "1x Fiery Islet (mh1) 238", 14607 + "raw": "1x Fiery Islet (mh1) 238 [Land]", 14608 14608 "setCode": "MH1", 14609 14609 "tags": [ 14610 14610 "Land", ··· 14614 14614 "collectorNumber": "158", 14615 14615 "name": "Frostboil Snarl", 14616 14616 "quantity": 1, 14617 - "raw": "1x Frostboil Snarl (drc) 158", 14617 + "raw": "1x Frostboil Snarl (drc) 158 [Land]", 14618 14618 "setCode": "DRC", 14619 14619 "tags": [ 14620 14620 "Land", ··· 14624 14624 "collectorNumber": "270", 14625 14625 "name": "Island", 14626 14626 "quantity": 9, 14627 - "raw": "9x Island (ecl) 270", 14627 + "raw": "9x Island (ecl) 270 [Land]", 14628 14628 "setCode": "ECL", 14629 14629 "tags": [ 14630 14630 "Land", ··· 14634 14634 "collectorNumber": "350", 14635 14635 "name": "Izzet Boilerworks", 14636 14636 "quantity": 1, 14637 - "raw": "1x Izzet Boilerworks (m3c) 350", 14637 + "raw": "1x Izzet Boilerworks (m3c) 350 [Land]", 14638 14638 "setCode": "M3C", 14639 14639 "tags": [ 14640 14640 "Land", ··· 14644 14644 "collectorNumber": "261", 14645 14645 "name": "Mistrise Village", 14646 14646 "quantity": 1, 14647 - "raw": "1x Mistrise Village (tdm) 261", 14647 + "raw": "1x Mistrise Village (tdm) 261 [Land]", 14648 14648 "setCode": "TDM", 14649 14649 "tags": [ 14650 14650 "Land", ··· 14654 14654 "collectorNumber": "272", 14655 14655 "name": "Mountain", 14656 14656 "quantity": 9, 14657 - "raw": "9x Mountain (ecl) 272", 14657 + "raw": "9x Mountain (ecl) 272 [Land]", 14658 14658 "setCode": "ECL", 14659 14659 "tags": [ 14660 14660 "Land", ··· 14664 14664 "collectorNumber": "386", 14665 14665 "name": "Reliquary Tower", 14666 14666 "quantity": 1, 14667 - "raw": "1x Reliquary Tower (tdc) 386", 14667 + "raw": "1x Reliquary Tower (tdc) 386 [Land]", 14668 14668 "setCode": "TDC", 14669 14669 "tags": [ 14670 14670 "Land", ··· 14674 14674 "collectorNumber": "ZNR-264", 14675 14675 "name": "Riverglide Pathway // Lavaglide Pathway", 14676 14676 "quantity": 1, 14677 - "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264", 14677 + "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264 [Land]", 14678 14678 "setCode": "PLST", 14679 14679 "tags": [ 14680 14680 "Land", ··· 14684 14684 "collectorNumber": "260", 14685 14685 "name": "Riverpyre Verge", 14686 14686 "quantity": 1, 14687 - "raw": "1x Riverpyre Verge (dft) 260", 14687 + "raw": "1x Riverpyre Verge (dft) 260 [Land]", 14688 14688 "setCode": "DFT", 14689 14689 "tags": [ 14690 14690 "Land", ··· 14694 14694 "collectorNumber": "254", 14695 14695 "name": "Scalding Tarn", 14696 14696 "quantity": 1, 14697 - "raw": "1x Scalding Tarn (mh2) 254", 14697 + "raw": "1x Scalding Tarn (mh2) 254 [Land]", 14698 14698 "setCode": "MH2", 14699 14699 "tags": [ 14700 14700 "Land", ··· 14704 14704 "collectorNumber": "287", 14705 14705 "name": "Scavenger Grounds", 14706 14706 "quantity": 1, 14707 - "raw": "1x Scavenger Grounds (mkc) 287", 14707 + "raw": "1x Scavenger Grounds (mkc) 287 [Land]", 14708 14708 "setCode": "MKC", 14709 14709 "tags": [ 14710 14710 "Land", ··· 14714 14714 "collectorNumber": "179", 14715 14715 "name": "Shivan Reef", 14716 14716 "quantity": 1, 14717 - "raw": "1x Shivan Reef (eoc) 179", 14717 + "raw": "1x Shivan Reef (eoc) 179 [Land]", 14718 14718 "setCode": "EOC", 14719 14719 "tags": [ 14720 14720 "Land", ··· 14724 14724 "collectorNumber": "267", 14725 14725 "name": "Steam Vents", 14726 14726 "quantity": 1, 14727 - "raw": "1x Steam Vents (ecl) 267", 14727 + "raw": "1x Steam Vents (ecl) 267 [Land]", 14728 14728 "setCode": "ECL", 14729 14729 "tags": [ 14730 14730 "Land", ··· 14734 14734 "collectorNumber": "285", 14735 14735 "name": "Stormcarved Coast", 14736 14736 "quantity": 1, 14737 - "raw": "1x Stormcarved Coast (inr) 285", 14737 + "raw": "1x Stormcarved Coast (inr) 285 [Land]", 14738 14738 "setCode": "INR", 14739 14739 "tags": [ 14740 14740 "Land", ··· 14744 14744 "collectorNumber": "184", 14745 14745 "name": "Sulfur Falls", 14746 14746 "quantity": 1, 14747 - "raw": "1x Sulfur Falls (eoc) 184", 14747 + "raw": "1x Sulfur Falls (eoc) 184 [Land]", 14748 14748 "setCode": "EOC", 14749 14749 "tags": [ 14750 14750 "Land", ··· 14754 14754 "collectorNumber": "434", 14755 14755 "name": "Training Center", 14756 14756 "quantity": 1, 14757 - "raw": "1x Training Center (cmm) 434", 14757 + "raw": "1x Training Center (cmm) 434 [Land]", 14758 14758 "setCode": "CMM", 14759 14759 "tags": [ 14760 14760 "Land", ··· 14764 14764 "collectorNumber": "161", 14765 14765 "name": "Omniscience", 14766 14766 "quantity": 1, 14767 - "raw": "1x Omniscience (fdn) 161", 14767 + "raw": "1x Omniscience (fdn) 161 [Okay Pal]", 14768 14768 "setCode": "FDN", 14769 14769 "tags": [ 14770 14770 "Okay Pal", ··· 14774 14774 "collectorNumber": "171", 14775 14775 "name": "Creative Outburst", 14776 14776 "quantity": 1, 14777 - "raw": "1x Creative Outburst (stx) 171", 14777 + "raw": "1x Creative Outburst (stx) 171 [Ramp,Removal,Draw]", 14778 14778 "setCode": "STX", 14779 14779 "tags": [ 14780 14780 "Ramp", ··· 14786 14786 "collectorNumber": "182", 14787 14787 "name": "Elemental Masterpiece", 14788 14788 "quantity": 1, 14789 - "raw": "1x Elemental Masterpiece (stx) 182", 14789 + "raw": "1x Elemental Masterpiece (stx) 182 [Ramp,Tokens]", 14790 14790 "setCode": "STX", 14791 14791 "tags": [ 14792 14792 "Ramp", ··· 14797 14797 "collectorNumber": "275", 14798 14798 "name": "Hedron Archive", 14799 14799 "quantity": 1, 14800 - "raw": "1x Hedron Archive (blc) 275", 14800 + "raw": "1x Hedron Archive (blc) 275 [Ramp]", 14801 14801 "setCode": "BLC", 14802 14802 "tags": [ 14803 14803 "Ramp", ··· 14807 14807 "collectorNumber": "296", 14808 14808 "name": "Magma Opus", 14809 14809 "quantity": 1, 14810 - "raw": "1x Magma Opus (tdc) 296", 14810 + "raw": "1x Magma Opus (tdc) 296 [Ramp,Draw,Tokens,Removal]", 14811 14811 "setCode": "TDC", 14812 14812 "tags": [ 14813 14813 "Ramp", ··· 14820 14820 "collectorNumber": "340", 14821 14821 "name": "Sisay's Ring", 14822 14822 "quantity": 1, 14823 - "raw": "1x Sisay's Ring (cmr) 340", 14823 + "raw": "1x Sisay's Ring (cmr) 340 [Ramp]", 14824 14824 "setCode": "CMR", 14825 14825 "tags": [ 14826 14826 "Ramp", ··· 14830 14830 "collectorNumber": "57", 14831 14831 "name": "Sol Ring", 14832 14832 "quantity": 1, 14833 - "raw": "1x Sol Ring (ecc) 57", 14833 + "raw": "1x Sol Ring (ecc) 57 [Ramp]", 14834 14834 "setCode": "ECC", 14835 14835 "tags": [ 14836 14836 "Ramp", ··· 14840 14840 "collectorNumber": "338", 14841 14841 "name": "Stonespeaker Crystal", 14842 14842 "quantity": 1, 14843 - "raw": "1x Stonespeaker Crystal (clb) 338", 14843 + "raw": "1x Stonespeaker Crystal (clb) 338 [Ramp,Removal]", 14844 14844 "setCode": "CLB", 14845 14845 "tags": [ 14846 14846 "Ramp", ··· 14851 14851 "collectorNumber": "290", 14852 14852 "name": "Thran Dynamo", 14853 14853 "quantity": 1, 14854 - "raw": "1x Thran Dynamo (blc) 290", 14854 + "raw": "1x Thran Dynamo (blc) 290 [Ramp]", 14855 14855 "setCode": "BLC", 14856 14856 "tags": [ 14857 14857 "Ramp", ··· 14861 14861 "collectorNumber": "280", 14862 14862 "name": "Ur-Golem's Eye", 14863 14863 "quantity": 1, 14864 - "raw": "1x Ur-Golem's Eye (c14) 280", 14864 + "raw": "1x Ur-Golem's Eye (c14) 280 [Ramp]", 14865 14865 "setCode": "C14", 14866 14866 "tags": [ 14867 14867 "Ramp", ··· 14871 14871 "collectorNumber": "285", 14872 14872 "name": "Archaeomancer", 14873 14873 "quantity": 1, 14874 - "raw": "1x Archaeomancer (j25) 285", 14874 + "raw": "1x Archaeomancer (j25) 285 [Recursion]", 14875 14875 "setCode": "J25", 14876 14876 "tags": [ 14877 14877 "Recursion", ··· 14881 14881 "collectorNumber": "128", 14882 14882 "name": "Ardent Elementalist", 14883 14883 "quantity": 1, 14884 - "raw": "1x Ardent Elementalist (mid) 128", 14884 + "raw": "1x Ardent Elementalist (mid) 128 [Recursion]", 14885 14885 "setCode": "MID", 14886 14886 "tags": [ 14887 14887 "Recursion", ··· 14891 14891 "collectorNumber": "175", 14892 14892 "name": "Mizzix's Mastery", 14893 14893 "quantity": 1, 14894 - "raw": "1x Mizzix's Mastery (otc) 175", 14894 + "raw": "1x Mizzix's Mastery (otc) 175 [Recursion]", 14895 14895 "setCode": "OTC", 14896 14896 "tags": [ 14897 14897 "Recursion", ··· 14901 14901 "collectorNumber": "246", 14902 14902 "name": "Pinnacle Monk // Mystic Peak", 14903 14903 "quantity": 1, 14904 - "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246", 14904 + "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246 [Recursion]", 14905 14905 "setCode": "MH3", 14906 14906 "tags": [ 14907 14907 "Recursion", ··· 14911 14911 "collectorNumber": "109", 14912 14912 "name": "Aether Gale", 14913 14913 "quantity": 1, 14914 - "raw": "1x Aether Gale (dsc) 109", 14914 + "raw": "1x Aether Gale (dsc) 109 [Removal]", 14915 14915 "setCode": "DSC", 14916 14916 "tags": [ 14917 14917 "Removal", ··· 14921 14921 "collectorNumber": "152", 14922 14922 "name": "All Is Dust", 14923 14923 "quantity": 1, 14924 - "raw": "1x All Is Dust (m3c) 152", 14924 + "raw": "1x All Is Dust (m3c) 152 [Removal]", 14925 14925 "setCode": "M3C", 14926 14926 "tags": [ 14927 14927 "Removal", ··· 14931 14931 "collectorNumber": "146", 14932 14932 "name": "Baral's Expertise", 14933 14933 "quantity": 1, 14934 - "raw": "1x Baral's Expertise (tdc) 146", 14934 + "raw": "1x Baral's Expertise (tdc) 146 [Removal]", 14935 14935 "setCode": "TDC", 14936 14936 "tags": [ 14937 14937 "Removal", ··· 14941 14941 "collectorNumber": "160", 14942 14942 "name": "Blasphemous Act", 14943 14943 "quantity": 1, 14944 - "raw": "1x Blasphemous Act (dsc) 160", 14944 + "raw": "1x Blasphemous Act (dsc) 160 [Removal]", 14945 14945 "setCode": "DSC", 14946 14946 "tags": [ 14947 14947 "Removal", ··· 14951 14951 "collectorNumber": "509", 14952 14952 "name": "Call Forth the Tempest", 14953 14953 "quantity": 1, 14954 - "raw": "1x Call Forth the Tempest (ltc) 509", 14954 + "raw": "1x Call Forth the Tempest (ltc) 509 [Removal]", 14955 14955 "setCode": "LTC", 14956 14956 "tags": [ 14957 14957 "Removal", ··· 14961 14961 "collectorNumber": "160", 14962 14962 "name": "Chaos Warp", 14963 14963 "quantity": 1, 14964 - "raw": "1x Chaos Warp (otc) 160", 14964 + "raw": "1x Chaos Warp (otc) 160 [Removal]", 14965 14965 "setCode": "OTC", 14966 14966 "tags": [ 14967 14967 "Removal", ··· 14971 14971 "collectorNumber": "114", 14972 14972 "name": "Counterspell", 14973 14973 "quantity": 1, 14974 - "raw": "1x Counterspell (dsc) 114", 14974 + "raw": "1x Counterspell (dsc) 114 [Removal]", 14975 14975 "setCode": "DSC", 14976 14976 "tags": [ 14977 14977 "Removal", ··· 14981 14981 "collectorNumber": "226", 14982 14982 "name": "Fiery Confluence", 14983 14983 "quantity": 1, 14984 - "raw": "1x Fiery Confluence (lcc) 226", 14984 + "raw": "1x Fiery Confluence (lcc) 226 [Removal]", 14985 14985 "setCode": "LCC", 14986 14986 "tags": [ 14987 14987 "Removal", ··· 14991 14991 "collectorNumber": "104", 14992 14992 "name": "Flood of Tears", 14993 14993 "quantity": 1, 14994 - "raw": "1x Flood of Tears (voc) 104", 14994 + "raw": "1x Flood of Tears (voc) 104 [Removal]", 14995 14995 "setCode": "VOC", 14996 14996 "tags": [ 14997 14997 "Removal", ··· 15001 15001 "collectorNumber": "207", 15002 15002 "name": "Ill-Timed Explosion", 15003 15003 "quantity": 1, 15004 - "raw": "1x Ill-Timed Explosion (mkm) 207", 15004 + "raw": "1x Ill-Timed Explosion (mkm) 207 [Removal]", 15005 15005 "setCode": "MKM", 15006 15006 "tags": [ 15007 15007 "Removal", ··· 15011 15011 "collectorNumber": "108", 15012 15012 "name": "Mystic Confluence", 15013 15013 "quantity": 1, 15014 - "raw": "1x Mystic Confluence (cmm) 108", 15014 + "raw": "1x Mystic Confluence (cmm) 108 [Removal]", 15015 15015 "setCode": "CMM", 15016 15016 "tags": [ 15017 15017 "Removal", ··· 15021 15021 "collectorNumber": "265", 15022 15022 "name": "Prophetic Bolt", 15023 15023 "quantity": 1, 15024 - "raw": "1x Prophetic Bolt (2x2) 265", 15024 + "raw": "1x Prophetic Bolt (2x2) 265 [Removal,Draw]", 15025 15025 "setCode": "2X2", 15026 15026 "tags": [ 15027 15027 "Removal", ··· 15032 15032 "collectorNumber": "212", 15033 15033 "name": "Ral's Outburst", 15034 15034 "quantity": 1, 15035 - "raw": "1x Ral's Outburst (war) 212", 15035 + "raw": "1x Ral's Outburst (war) 212 [Removal]", 15036 15036 "setCode": "WAR", 15037 15037 "tags": [ 15038 15038 "Removal", ··· 15042 15042 "collectorNumber": "33", 15043 15043 "name": "Reckless Endeavor", 15044 15044 "quantity": 1, 15045 - "raw": "1x Reckless Endeavor (afc) 33", 15045 + "raw": "1x Reckless Endeavor (afc) 33 [Removal]", 15046 15046 "setCode": "AFC", 15047 15047 "tags": [ 15048 15048 "Removal", ··· 15052 15052 "collectorNumber": "241", 15053 15053 "name": "Sink into Stupor // Soporific Springs", 15054 15054 "quantity": 1, 15055 - "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241", 15055 + "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241 [Removal]", 15056 15056 "setCode": "MH3", 15057 15057 "tags": [ 15058 15058 "Removal", ··· 15062 15062 "collectorNumber": "182", 15063 15063 "name": "Volcanic Vision", 15064 15064 "quantity": 1, 15065 - "raw": "1x Volcanic Vision (c21) 182", 15065 + "raw": "1x Volcanic Vision (c21) 182 [Removal,Recursion]", 15066 15066 "setCode": "C21", 15067 15067 "tags": [ 15068 15068 "Removal", ··· 15073 15073 "collectorNumber": "92", 15074 15074 "name": "Rite of the Dragoncaller", 15075 15075 "quantity": 1, 15076 - "raw": "1x Rite of the Dragoncaller (fdn) 92", 15076 + "raw": "1x Rite of the Dragoncaller (fdn) 92 [Tokens]", 15077 15077 "setCode": "FDN", 15078 15078 "tags": [ 15079 15079 "Tokens", ··· 15083 15083 "collectorNumber": "127", 15084 15084 "name": "Shark Typhoon", 15085 15085 "quantity": 1, 15086 - "raw": "1x Shark Typhoon (dsc) 127", 15086 + "raw": "1x Shark Typhoon (dsc) 127 [Tokens]", 15087 15087 "setCode": "DSC", 15088 15088 "tags": [ 15089 15089 "Tokens", ··· 15102 15102 "collectorNumber": "290", 15103 15103 "name": "Ashling, Rekindled // Ashling, Rimebound", 15104 15104 "quantity": 1, 15105 - "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290", 15105 + "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290 [Commander{top}]", 15106 15106 "setCode": "ECL", 15107 15107 "tags": [], 15108 15108 }, ··· 15113 15113 "collectorNumber": "109", 15114 15114 "name": "Aether Gale", 15115 15115 "quantity": 1, 15116 - "raw": "1x Aether Gale (dsc) 109", 15116 + "raw": "1x Aether Gale (dsc) 109 [Removal]", 15117 15117 "setCode": "DSC", 15118 15118 "tags": [ 15119 15119 "Removal", ··· 15123 15123 "collectorNumber": "152", 15124 15124 "name": "All Is Dust", 15125 15125 "quantity": 1, 15126 - "raw": "1x All Is Dust (m3c) 152", 15126 + "raw": "1x All Is Dust (m3c) 152 [Removal]", 15127 15127 "setCode": "M3C", 15128 15128 "tags": [ 15129 15129 "Removal", ··· 15133 15133 "collectorNumber": "154", 15134 15134 "name": "Arcane Bombardment", 15135 15135 "quantity": 1, 15136 - "raw": "1x Arcane Bombardment (otc) 154", 15136 + "raw": "1x Arcane Bombardment (otc) 154 [Greed]", 15137 15137 "setCode": "OTC", 15138 15138 "tags": [ 15139 15139 "Greed", ··· 15143 15143 "collectorNumber": "285", 15144 15144 "name": "Archaeomancer", 15145 15145 "quantity": 1, 15146 - "raw": "1x Archaeomancer (j25) 285", 15146 + "raw": "1x Archaeomancer (j25) 285 [Recursion]", 15147 15147 "setCode": "J25", 15148 15148 "tags": [ 15149 15149 "Recursion", ··· 15153 15153 "collectorNumber": "145", 15154 15154 "name": "Archmage Emeritus", 15155 15155 "quantity": 1, 15156 - "raw": "1x Archmage Emeritus (tdc) 145", 15156 + "raw": "1x Archmage Emeritus (tdc) 145 [Draw]", 15157 15157 "setCode": "TDC", 15158 15158 "tags": [ 15159 15159 "Draw", ··· 15163 15163 "collectorNumber": "30", 15164 15164 "name": "Archmage of Runes", 15165 15165 "quantity": 1, 15166 - "raw": "1x Archmage of Runes (fdn) 30", 15166 + "raw": "1x Archmage of Runes (fdn) 30 [Draw]", 15167 15167 "setCode": "FDN", 15168 15168 "tags": [ 15169 15169 "Draw", ··· 15173 15173 "collectorNumber": "128", 15174 15174 "name": "Ardent Elementalist", 15175 15175 "quantity": 1, 15176 - "raw": "1x Ardent Elementalist (mid) 128", 15176 + "raw": "1x Ardent Elementalist (mid) 128 [Recursion]", 15177 15177 "setCode": "MID", 15178 15178 "tags": [ 15179 15179 "Recursion", ··· 15183 15183 "collectorNumber": "205", 15184 15184 "name": "Ashling's Command", 15185 15185 "quantity": 1, 15186 - "raw": "1x Ashling's Command (ecl) 205", 15186 + "raw": "1x Ashling's Command (ecl) 205 [Draw]", 15187 15187 "setCode": "ECL", 15188 15188 "tags": [ 15189 15189 "Draw", ··· 15193 15193 "collectorNumber": "146", 15194 15194 "name": "Baral's Expertise", 15195 15195 "quantity": 1, 15196 - "raw": "1x Baral's Expertise (tdc) 146", 15196 + "raw": "1x Baral's Expertise (tdc) 146 [Removal]", 15197 15197 "setCode": "TDC", 15198 15198 "tags": [ 15199 15199 "Removal", ··· 15203 15203 "collectorNumber": "206", 15204 15204 "name": "Big Score", 15205 15205 "quantity": 1, 15206 - "raw": "1x Big Score (tdc) 206", 15206 + "raw": "1x Big Score (tdc) 206 [Draw]", 15207 15207 "setCode": "TDC", 15208 15208 "tags": [ 15209 15209 "Draw", ··· 15213 15213 "collectorNumber": "160", 15214 15214 "name": "Blasphemous Act", 15215 15215 "quantity": 1, 15216 - "raw": "1x Blasphemous Act (dsc) 160", 15216 + "raw": "1x Blasphemous Act (dsc) 160 [Removal]", 15217 15217 "setCode": "DSC", 15218 15218 "tags": [ 15219 15219 "Removal", ··· 15223 15223 "collectorNumber": "33", 15224 15224 "name": "Caldera Pyremaw", 15225 15225 "quantity": 1, 15226 - "raw": "1x Caldera Pyremaw (tdc) 33", 15226 + "raw": "1x Caldera Pyremaw (tdc) 33 [Burn]", 15227 15227 "setCode": "TDC", 15228 15228 "tags": [ 15229 15229 "Burn", ··· 15233 15233 "collectorNumber": "509", 15234 15234 "name": "Call Forth the Tempest", 15235 15235 "quantity": 1, 15236 - "raw": "1x Call Forth the Tempest (ltc) 509", 15236 + "raw": "1x Call Forth the Tempest (ltc) 509 [Removal]", 15237 15237 "setCode": "LTC", 15238 15238 "tags": [ 15239 15239 "Removal", ··· 15243 15243 "collectorNumber": "153", 15244 15244 "name": "Cascade Bluffs", 15245 15245 "quantity": 1, 15246 - "raw": "1x Cascade Bluffs (eoc) 153", 15246 + "raw": "1x Cascade Bluffs (eoc) 153 [Land]", 15247 15247 "setCode": "EOC", 15248 15248 "tags": [ 15249 15249 "Land", ··· 15253 15253 "collectorNumber": "160", 15254 15254 "name": "Chaos Warp", 15255 15255 "quantity": 1, 15256 - "raw": "1x Chaos Warp (otc) 160", 15256 + "raw": "1x Chaos Warp (otc) 160 [Removal]", 15257 15257 "setCode": "OTC", 15258 15258 "tags": [ 15259 15259 "Removal", ··· 15263 15263 "collectorNumber": "249", 15264 15264 "name": "Chimil, the Inner Sun", 15265 15265 "quantity": 1, 15266 - "raw": "1x Chimil, the Inner Sun (lci) 249", 15266 + "raw": "1x Chimil, the Inner Sun (lci) 249 [Greed]", 15267 15267 "setCode": "LCI", 15268 15268 "tags": [ 15269 15269 "Greed", ··· 15273 15273 "collectorNumber": "59", 15274 15274 "name": "Command Tower", 15275 15275 "quantity": 1, 15276 - "raw": "1x Command Tower (ecc) 59", 15276 + "raw": "1x Command Tower (ecc) 59 [Land]", 15277 15277 "setCode": "ECC", 15278 15278 "tags": [ 15279 15279 "Land", ··· 15283 15283 "collectorNumber": "114", 15284 15284 "name": "Counterspell", 15285 15285 "quantity": 1, 15286 - "raw": "1x Counterspell (dsc) 114", 15286 + "raw": "1x Counterspell (dsc) 114 [Removal]", 15287 15287 "setCode": "DSC", 15288 15288 "tags": [ 15289 15289 "Removal", ··· 15293 15293 "collectorNumber": "171", 15294 15294 "name": "Creative Outburst", 15295 15295 "quantity": 1, 15296 - "raw": "1x Creative Outburst (stx) 171", 15296 + "raw": "1x Creative Outburst (stx) 171 [Ramp,Removal,Draw]", 15297 15297 "setCode": "STX", 15298 15298 "tags": [ 15299 15299 "Ramp", ··· 15305 15305 "collectorNumber": "150", 15306 15306 "name": "Deep Analysis", 15307 15307 "quantity": 1, 15308 - "raw": "1x Deep Analysis (tdc) 150", 15308 + "raw": "1x Deep Analysis (tdc) 150 [Draw]", 15309 15309 "setCode": "TDC", 15310 15310 "tags": [ 15311 15311 "Draw", ··· 15315 15315 "collectorNumber": "115", 15316 15316 "name": "Dig Through Time", 15317 15317 "quantity": 1, 15318 - "raw": "1x Dig Through Time (dsc) 115", 15318 + "raw": "1x Dig Through Time (dsc) 115 [Draw]", 15319 15319 "setCode": "DSC", 15320 15320 "tags": [ 15321 15321 "Draw", ··· 15325 15325 "collectorNumber": "267", 15326 15326 "name": "Double Vision", 15327 15327 "quantity": 1, 15328 - "raw": "1x Double Vision (ncc) 267", 15328 + "raw": "1x Double Vision (ncc) 267 [Greed]", 15329 15329 "setCode": "NCC", 15330 15330 "tags": [ 15331 15331 "Greed", ··· 15335 15335 "collectorNumber": "220", 15336 15336 "name": "Drawn from Dreams", 15337 15337 "quantity": 1, 15338 - "raw": "1x Drawn from Dreams (ncc) 220", 15338 + "raw": "1x Drawn from Dreams (ncc) 220 [Draw]", 15339 15339 "setCode": "NCC", 15340 15340 "tags": [ 15341 15341 "Draw", ··· 15345 15345 "collectorNumber": "182", 15346 15346 "name": "Elemental Masterpiece", 15347 15347 "quantity": 1, 15348 - "raw": "1x Elemental Masterpiece (stx) 182", 15348 + "raw": "1x Elemental Masterpiece (stx) 182 [Ramp,Tokens]", 15349 15349 "setCode": "STX", 15350 15350 "tags": [ 15351 15351 "Ramp", ··· 15356 15356 "collectorNumber": "119", 15357 15357 "name": "Exalted Flamer of Tzeentch", 15358 15358 "quantity": 1, 15359 - "raw": "1x Exalted Flamer of Tzeentch (40k) 119", 15359 + "raw": "1x Exalted Flamer of Tzeentch (40k) 119 [Burn,Recursion]", 15360 15360 "setCode": "40K", 15361 15361 "tags": [ 15362 15362 "Burn", ··· 15367 15367 "collectorNumber": "226", 15368 15368 "name": "Fiery Confluence", 15369 15369 "quantity": 1, 15370 - "raw": "1x Fiery Confluence (lcc) 226", 15370 + "raw": "1x Fiery Confluence (lcc) 226 [Removal]", 15371 15371 "setCode": "LCC", 15372 15372 "tags": [ 15373 15373 "Removal", ··· 15377 15377 "collectorNumber": "238", 15378 15378 "name": "Fiery Islet", 15379 15379 "quantity": 1, 15380 - "raw": "1x Fiery Islet (mh1) 238", 15380 + "raw": "1x Fiery Islet (mh1) 238 [Land]", 15381 15381 "setCode": "MH1", 15382 15382 "tags": [ 15383 15383 "Land", ··· 15387 15387 "collectorNumber": "203", 15388 15388 "name": "Flame of Anor", 15389 15389 "quantity": 1, 15390 - "raw": "1x Flame of Anor (ltr) 203", 15390 + "raw": "1x Flame of Anor (ltr) 203 [Draw]", 15391 15391 "setCode": "LTR", 15392 15392 "tags": [ 15393 15393 "Draw", ··· 15397 15397 "collectorNumber": "463", 15398 15398 "name": "Flash Photography", 15399 15399 "quantity": 1, 15400 - "raw": "1x Flash Photography (fic) 463", 15400 + "raw": "1x Flash Photography (fic) 463 [Copy]", 15401 15401 "setCode": "FIC", 15402 15402 "tags": [ 15403 15403 "Copy", ··· 15407 15407 "collectorNumber": "104", 15408 15408 "name": "Flood of Tears", 15409 15409 "quantity": 1, 15410 - "raw": "1x Flood of Tears (voc) 104", 15410 + "raw": "1x Flood of Tears (voc) 104 [Removal]", 15411 15411 "setCode": "VOC", 15412 15412 "tags": [ 15413 15413 "Removal", ··· 15417 15417 "collectorNumber": "158", 15418 15418 "name": "Frostboil Snarl", 15419 15419 "quantity": 1, 15420 - "raw": "1x Frostboil Snarl (drc) 158", 15420 + "raw": "1x Frostboil Snarl (drc) 158 [Land]", 15421 15421 "setCode": "DRC", 15422 15422 "tags": [ 15423 15423 "Land", ··· 15427 15427 "collectorNumber": "22", 15428 15428 "name": "Fury Storm", 15429 15429 "quantity": 1, 15430 - "raw": "1x Fury Storm (c18) 22", 15430 + "raw": "1x Fury Storm (c18) 22 [Greed]", 15431 15431 "setCode": "C18", 15432 15432 "tags": [ 15433 15433 "Greed", ··· 15437 15437 "collectorNumber": "132", 15438 15438 "name": "Harmonic Prodigy", 15439 15439 "quantity": 1, 15440 - "raw": "1x Harmonic Prodigy (mh2) 132", 15440 + "raw": "1x Harmonic Prodigy (mh2) 132 [Greed]", 15441 15441 "setCode": "MH2", 15442 15442 "tags": [ 15443 15443 "Greed", ··· 15447 15447 "collectorNumber": "275", 15448 15448 "name": "Hedron Archive", 15449 15449 "quantity": 1, 15450 - "raw": "1x Hedron Archive (blc) 275", 15450 + "raw": "1x Hedron Archive (blc) 275 [Ramp]", 15451 15451 "setCode": "BLC", 15452 15452 "tags": [ 15453 15453 "Ramp", ··· 15457 15457 "collectorNumber": "GRN-178", 15458 15458 "name": "Hypothesizzle", 15459 15459 "quantity": 1, 15460 - "raw": "1x Hypothesizzle (plst) GRN-178", 15460 + "raw": "1x Hypothesizzle (plst) GRN-178 [Draw,Removal]", 15461 15461 "setCode": "PLST", 15462 15462 "tags": [ 15463 15463 "Draw", ··· 15468 15468 "collectorNumber": "207", 15469 15469 "name": "Ill-Timed Explosion", 15470 15470 "quantity": 1, 15471 - "raw": "1x Ill-Timed Explosion (mkm) 207", 15471 + "raw": "1x Ill-Timed Explosion (mkm) 207 [Removal]", 15472 15472 "setCode": "MKM", 15473 15473 "tags": [ 15474 15474 "Removal", ··· 15478 15478 "collectorNumber": "270", 15479 15479 "name": "Island", 15480 15480 "quantity": 9, 15481 - "raw": "9x Island (ecl) 270", 15481 + "raw": "9x Island (ecl) 270 [Land]", 15482 15482 "setCode": "ECL", 15483 15483 "tags": [ 15484 15484 "Land", ··· 15488 15488 "collectorNumber": "350", 15489 15489 "name": "Izzet Boilerworks", 15490 15490 "quantity": 1, 15491 - "raw": "1x Izzet Boilerworks (m3c) 350", 15491 + "raw": "1x Izzet Boilerworks (m3c) 350 [Land]", 15492 15492 "setCode": "M3C", 15493 15493 "tags": [ 15494 15494 "Land", ··· 15498 15498 "collectorNumber": "59", 15499 15499 "name": "Jin-Gitaxias, Progress Tyrant", 15500 15500 "quantity": 1, 15501 - "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59", 15501 + "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59 [Greed]", 15502 15502 "setCode": "NEO", 15503 15503 "tags": [ 15504 15504 "Greed", ··· 15508 15508 "collectorNumber": "60", 15509 15509 "name": "Lórien Revealed", 15510 15510 "quantity": 1, 15511 - "raw": "1x Lórien Revealed (ltr) 60", 15511 + "raw": "1x Lórien Revealed (ltr) 60 [Draw]", 15512 15512 "setCode": "LTR", 15513 15513 "tags": [ 15514 15514 "Draw", ··· 15518 15518 "collectorNumber": "296", 15519 15519 "name": "Magma Opus", 15520 15520 "quantity": 1, 15521 - "raw": "1x Magma Opus (tdc) 296", 15521 + "raw": "1x Magma Opus (tdc) 296 [Ramp,Draw,Tokens,Removal]", 15522 15522 "setCode": "TDC", 15523 15523 "tags": [ 15524 15524 "Ramp", ··· 15531 15531 "collectorNumber": "223", 15532 15532 "name": "Mana Geyser", 15533 15533 "quantity": 1, 15534 - "raw": "1x Mana Geyser (tdc) 223", 15534 + "raw": "1x Mana Geyser (tdc) 223 [Greed]", 15535 15535 "setCode": "TDC", 15536 15536 "tags": [ 15537 15537 "Greed", ··· 15541 15541 "collectorNumber": "63", 15542 15542 "name": "Memories Returning", 15543 15543 "quantity": 1, 15544 - "raw": "1x Memories Returning (fin) 63", 15544 + "raw": "1x Memories Returning (fin) 63 [Draw]", 15545 15545 "setCode": "FIN", 15546 15546 "tags": [ 15547 15547 "Draw", ··· 15551 15551 "collectorNumber": "75", 15552 15552 "name": "Memory Deluge", 15553 15553 "quantity": 1, 15554 - "raw": "1x Memory Deluge (inr) 75", 15554 + "raw": "1x Memory Deluge (inr) 75 [Draw]", 15555 15555 "setCode": "INR", 15556 15556 "tags": [ 15557 15557 "Draw", ··· 15561 15561 "collectorNumber": "261", 15562 15562 "name": "Mistrise Village", 15563 15563 "quantity": 1, 15564 - "raw": "1x Mistrise Village (tdm) 261", 15564 + "raw": "1x Mistrise Village (tdm) 261 [Land]", 15565 15565 "setCode": "TDM", 15566 15566 "tags": [ 15567 15567 "Land", ··· 15571 15571 "collectorNumber": "175", 15572 15572 "name": "Mizzix's Mastery", 15573 15573 "quantity": 1, 15574 - "raw": "1x Mizzix's Mastery (otc) 175", 15574 + "raw": "1x Mizzix's Mastery (otc) 175 [Recursion]", 15575 15575 "setCode": "OTC", 15576 15576 "tags": [ 15577 15577 "Recursion", ··· 15581 15581 "collectorNumber": "272", 15582 15582 "name": "Mountain", 15583 15583 "quantity": 9, 15584 - "raw": "9x Mountain (ecl) 272", 15584 + "raw": "9x Mountain (ecl) 272 [Land]", 15585 15585 "setCode": "ECL", 15586 15586 "tags": [ 15587 15587 "Land", ··· 15591 15591 "collectorNumber": "108", 15592 15592 "name": "Mystic Confluence", 15593 15593 "quantity": 1, 15594 - "raw": "1x Mystic Confluence (cmm) 108", 15594 + "raw": "1x Mystic Confluence (cmm) 108 [Removal]", 15595 15595 "setCode": "CMM", 15596 15596 "tags": [ 15597 15597 "Removal", ··· 15601 15601 "collectorNumber": "161", 15602 15602 "name": "Omniscience", 15603 15603 "quantity": 1, 15604 - "raw": "1x Omniscience (fdn) 161", 15604 + "raw": "1x Omniscience (fdn) 161 [Okay Pal]", 15605 15605 "setCode": "FDN", 15606 15606 "tags": [ 15607 15607 "Okay Pal", ··· 15611 15611 "collectorNumber": "246", 15612 15612 "name": "Pinnacle Monk // Mystic Peak", 15613 15613 "quantity": 1, 15614 - "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246", 15614 + "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246 [Recursion]", 15615 15615 "setCode": "MH3", 15616 15616 "tags": [ 15617 15617 "Recursion", ··· 15621 15621 "collectorNumber": "120", 15622 15622 "name": "Pirate's Pillage", 15623 15623 "quantity": 1, 15624 - "raw": "1x Pirate's Pillage (2x2) 120", 15624 + "raw": "1x Pirate's Pillage (2x2) 120 [Draw]", 15625 15625 "setCode": "2X2", 15626 15626 "tags": [ 15627 15627 "Draw", ··· 15631 15631 "collectorNumber": "265", 15632 15632 "name": "Prophetic Bolt", 15633 15633 "quantity": 1, 15634 - "raw": "1x Prophetic Bolt (2x2) 265", 15634 + "raw": "1x Prophetic Bolt (2x2) 265 [Removal,Draw]", 15635 15635 "setCode": "2X2", 15636 15636 "tags": [ 15637 15637 "Removal", ··· 15642 15642 "collectorNumber": "212", 15643 15643 "name": "Ral's Outburst", 15644 15644 "quantity": 1, 15645 - "raw": "1x Ral's Outburst (war) 212", 15645 + "raw": "1x Ral's Outburst (war) 212 [Removal]", 15646 15646 "setCode": "WAR", 15647 15647 "tags": [ 15648 15648 "Removal", ··· 15652 15652 "collectorNumber": "33", 15653 15653 "name": "Reckless Endeavor", 15654 15654 "quantity": 1, 15655 - "raw": "1x Reckless Endeavor (afc) 33", 15655 + "raw": "1x Reckless Endeavor (afc) 33 [Removal]", 15656 15656 "setCode": "AFC", 15657 15657 "tags": [ 15658 15658 "Removal", ··· 15662 15662 "collectorNumber": "386", 15663 15663 "name": "Reliquary Tower", 15664 15664 "quantity": 1, 15665 - "raw": "1x Reliquary Tower (tdc) 386", 15665 + "raw": "1x Reliquary Tower (tdc) 386 [Land]", 15666 15666 "setCode": "TDC", 15667 15667 "tags": [ 15668 15668 "Land", ··· 15672 15672 "collectorNumber": "67", 15673 15673 "name": "Relm's Sketching", 15674 15674 "quantity": 1, 15675 - "raw": "1x Relm's Sketching (fin) 67", 15675 + "raw": "1x Relm's Sketching (fin) 67 [Copy]", 15676 15676 "setCode": "FIN", 15677 15677 "tags": [ 15678 15678 "Copy", ··· 15682 15682 "collectorNumber": "192", 15683 15683 "name": "Replication Technique", 15684 15684 "quantity": 1, 15685 - "raw": "1x Replication Technique (m3c) 192", 15685 + "raw": "1x Replication Technique (m3c) 192 [Copy]", 15686 15686 "setCode": "M3C", 15687 15687 "tags": [ 15688 15688 "Copy", ··· 15692 15692 "collectorNumber": "92", 15693 15693 "name": "Rite of the Dragoncaller", 15694 15694 "quantity": 1, 15695 - "raw": "1x Rite of the Dragoncaller (fdn) 92", 15695 + "raw": "1x Rite of the Dragoncaller (fdn) 92 [Tokens]", 15696 15696 "setCode": "FDN", 15697 15697 "tags": [ 15698 15698 "Tokens", ··· 15702 15702 "collectorNumber": "ZNR-264", 15703 15703 "name": "Riverglide Pathway // Lavaglide Pathway", 15704 15704 "quantity": 1, 15705 - "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264", 15705 + "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264 [Land]", 15706 15706 "setCode": "PLST", 15707 15707 "tags": [ 15708 15708 "Land", ··· 15712 15712 "collectorNumber": "260", 15713 15713 "name": "Riverpyre Verge", 15714 15714 "quantity": 1, 15715 - "raw": "1x Riverpyre Verge (dft) 260", 15715 + "raw": "1x Riverpyre Verge (dft) 260 [Land]", 15716 15716 "setCode": "DFT", 15717 15717 "tags": [ 15718 15718 "Land", ··· 15722 15722 "collectorNumber": "254", 15723 15723 "name": "Scalding Tarn", 15724 15724 "quantity": 1, 15725 - "raw": "1x Scalding Tarn (mh2) 254", 15725 + "raw": "1x Scalding Tarn (mh2) 254 [Land]", 15726 15726 "setCode": "MH2", 15727 15727 "tags": [ 15728 15728 "Land", ··· 15732 15732 "collectorNumber": "74", 15733 15733 "name": "Scattered Thoughts", 15734 15734 "quantity": 1, 15735 - "raw": "1x Scattered Thoughts (vow) 74", 15735 + "raw": "1x Scattered Thoughts (vow) 74 [Draw]", 15736 15736 "setCode": "VOW", 15737 15737 "tags": [ 15738 15738 "Draw", ··· 15742 15742 "collectorNumber": "287", 15743 15743 "name": "Scavenger Grounds", 15744 15744 "quantity": 1, 15745 - "raw": "1x Scavenger Grounds (mkc) 287", 15745 + "raw": "1x Scavenger Grounds (mkc) 287 [Land]", 15746 15746 "setCode": "MKC", 15747 15747 "tags": [ 15748 15748 "Land", ··· 15752 15752 "collectorNumber": "76", 15753 15753 "name": "Sea Gate Restoration // Sea Gate, Reborn", 15754 15754 "quantity": 1, 15755 - "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76", 15755 + "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76 [Draw]", 15756 15756 "setCode": "ZNR", 15757 15757 "tags": [ 15758 15758 "Draw", ··· 15762 15762 "collectorNumber": "127", 15763 15763 "name": "Shark Typhoon", 15764 15764 "quantity": 1, 15765 - "raw": "1x Shark Typhoon (dsc) 127", 15765 + "raw": "1x Shark Typhoon (dsc) 127 [Tokens]", 15766 15766 "setCode": "DSC", 15767 15767 "tags": [ 15768 15768 "Tokens", ··· 15772 15772 "collectorNumber": "179", 15773 15773 "name": "Shivan Reef", 15774 15774 "quantity": 1, 15775 - "raw": "1x Shivan Reef (eoc) 179", 15775 + "raw": "1x Shivan Reef (eoc) 179 [Land]", 15776 15776 "setCode": "EOC", 15777 15777 "tags": [ 15778 15778 "Land", ··· 15782 15782 "collectorNumber": "80", 15783 15783 "name": "Silundi Vision // Silundi Isle", 15784 15784 "quantity": 1, 15785 - "raw": "1x Silundi Vision // Silundi Isle (znr) 80", 15785 + "raw": "1x Silundi Vision // Silundi Isle (znr) 80 [Draw]", 15786 15786 "setCode": "ZNR", 15787 15787 "tags": [ 15788 15788 "Draw", ··· 15792 15792 "collectorNumber": "241", 15793 15793 "name": "Sink into Stupor // Soporific Springs", 15794 15794 "quantity": 1, 15795 - "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241", 15795 + "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241 [Removal]", 15796 15796 "setCode": "MH3", 15797 15797 "tags": [ 15798 15798 "Removal", ··· 15802 15802 "collectorNumber": "340", 15803 15803 "name": "Sisay's Ring", 15804 15804 "quantity": 1, 15805 - "raw": "1x Sisay's Ring (cmr) 340", 15805 + "raw": "1x Sisay's Ring (cmr) 340 [Ramp]", 15806 15806 "setCode": "CMR", 15807 15807 "tags": [ 15808 15808 "Ramp", ··· 15812 15812 "collectorNumber": "57", 15813 15813 "name": "Sol Ring", 15814 15814 "quantity": 1, 15815 - "raw": "1x Sol Ring (ecc) 57", 15815 + "raw": "1x Sol Ring (ecc) 57 [Ramp]", 15816 15816 "setCode": "ECC", 15817 15817 "tags": [ 15818 15818 "Ramp", ··· 15822 15822 "collectorNumber": "267", 15823 15823 "name": "Steam Vents", 15824 15824 "quantity": 1, 15825 - "raw": "1x Steam Vents (ecl) 267", 15825 + "raw": "1x Steam Vents (ecl) 267 [Land]", 15826 15826 "setCode": "ECL", 15827 15827 "tags": [ 15828 15828 "Land", ··· 15832 15832 "collectorNumber": "338", 15833 15833 "name": "Stonespeaker Crystal", 15834 15834 "quantity": 1, 15835 - "raw": "1x Stonespeaker Crystal (clb) 338", 15835 + "raw": "1x Stonespeaker Crystal (clb) 338 [Ramp,Removal]", 15836 15836 "setCode": "CLB", 15837 15837 "tags": [ 15838 15838 "Ramp", ··· 15843 15843 "collectorNumber": "285", 15844 15844 "name": "Stormcarved Coast", 15845 15845 "quantity": 1, 15846 - "raw": "1x Stormcarved Coast (inr) 285", 15846 + "raw": "1x Stormcarved Coast (inr) 285 [Land]", 15847 15847 "setCode": "INR", 15848 15848 "tags": [ 15849 15849 "Land", ··· 15853 15853 "collectorNumber": "184", 15854 15854 "name": "Sulfur Falls", 15855 15855 "quantity": 1, 15856 - "raw": "1x Sulfur Falls (eoc) 184", 15856 + "raw": "1x Sulfur Falls (eoc) 184 [Land]", 15857 15857 "setCode": "EOC", 15858 15858 "tags": [ 15859 15859 "Land", ··· 15863 15863 "collectorNumber": "162", 15864 15864 "name": "Summon: G.F. Cerberus", 15865 15865 "quantity": 1, 15866 - "raw": "1x Summon: G.F. Cerberus (fin) 162", 15866 + "raw": "1x Summon: G.F. Cerberus (fin) 162 [Greed]", 15867 15867 "setCode": "FIN", 15868 15868 "tags": [ 15869 15869 "Greed", ··· 15873 15873 "collectorNumber": "180", 15874 15874 "name": "Sunbird's Invocation", 15875 15875 "quantity": 1, 15876 - "raw": "1x Sunbird's Invocation (c21) 180", 15876 + "raw": "1x Sunbird's Invocation (c21) 180 [Greed]", 15877 15877 "setCode": "C21", 15878 15878 "tags": [ 15879 15879 "Greed", ··· 15883 15883 "collectorNumber": "244", 15884 15884 "name": "Tellah, Great Sage", 15885 15885 "quantity": 1, 15886 - "raw": "1x Tellah, Great Sage (fin) 244", 15886 + "raw": "1x Tellah, Great Sage (fin) 244 [Draw]", 15887 15887 "setCode": "FIN", 15888 15888 "tags": [ 15889 15889 "Draw", ··· 15893 15893 "collectorNumber": "290", 15894 15894 "name": "Thran Dynamo", 15895 15895 "quantity": 1, 15896 - "raw": "1x Thran Dynamo (blc) 290", 15896 + "raw": "1x Thran Dynamo (blc) 290 [Ramp]", 15897 15897 "setCode": "BLC", 15898 15898 "tags": [ 15899 15899 "Ramp", ··· 15903 15903 "collectorNumber": "434", 15904 15904 "name": "Training Center", 15905 15905 "quantity": 1, 15906 - "raw": "1x Training Center (cmm) 434", 15906 + "raw": "1x Training Center (cmm) 434 [Land]", 15907 15907 "setCode": "CMM", 15908 15908 "tags": [ 15909 15909 "Land", ··· 15913 15913 "collectorNumber": "164", 15914 15914 "name": "Unexpected Windfall", 15915 15915 "quantity": 1, 15916 - "raw": "1x Unexpected Windfall (afr) 164", 15916 + "raw": "1x Unexpected Windfall (afr) 164 [Draw]", 15917 15917 "setCode": "AFR", 15918 15918 "tags": [ 15919 15919 "Draw", ··· 15923 15923 "collectorNumber": "280", 15924 15924 "name": "Ur-Golem's Eye", 15925 15925 "quantity": 1, 15926 - "raw": "1x Ur-Golem's Eye (c14) 280", 15926 + "raw": "1x Ur-Golem's Eye (c14) 280 [Ramp]", 15927 15927 "setCode": "C14", 15928 15928 "tags": [ 15929 15929 "Ramp", ··· 15933 15933 "collectorNumber": "ZNR-174", 15934 15934 "name": "Valakut Awakening // Valakut Stoneforge", 15935 15935 "quantity": 1, 15936 - "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174", 15936 + "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174 [Draw]", 15937 15937 "setCode": "PLST", 15938 15938 "tags": [ 15939 15939 "Draw", ··· 15943 15943 "collectorNumber": "182", 15944 15944 "name": "Volcanic Vision", 15945 15945 "quantity": 1, 15946 - "raw": "1x Volcanic Vision (c21) 182", 15946 + "raw": "1x Volcanic Vision (c21) 182 [Removal,Recursion]", 15947 15947 "setCode": "C21", 15948 15948 "tags": [ 15949 15949 "Removal", ··· 15956 15956 "collectorNumber": "151", 15957 15957 "name": "Aetherize", 15958 15958 "quantity": 1, 15959 - "raw": "1x Aetherize (fdn) 151", 15959 + "raw": "1x Aetherize (fdn) 151 [Maybeboard{noDeck}{noPrice}]", 15960 15960 "setCode": "FDN", 15961 15961 "tags": [], 15962 15962 }, ··· 15964 15964 "collectorNumber": "71", 15965 15965 "name": "Aminatou's Augury", 15966 15966 "quantity": 1, 15967 - "raw": "1x Aminatou's Augury (dsc) 71", 15967 + "raw": "1x Aminatou's Augury (dsc) 71 [Maybeboard{noDeck}{noPrice}]", 15968 15968 "setCode": "DSC", 15969 15969 "tags": [], 15970 15970 }, ··· 15972 15972 "collectorNumber": "162", 15973 15973 "name": "Charmbreaker Devils", 15974 15974 "quantity": 1, 15975 - "raw": "1x Charmbreaker Devils (c21) 162", 15975 + "raw": "1x Charmbreaker Devils (c21) 162 [Maybeboard{noDeck}{noPrice}]", 15976 15976 "setCode": "C21", 15977 15977 "tags": [], 15978 15978 }, ··· 15980 15980 "collectorNumber": "5", 15981 15981 "name": "Eris, Roar of the Storm", 15982 15982 "quantity": 1, 15983 - "raw": "1x Eris, Roar of the Storm (otc) 5 *F*", 15983 + "raw": "1x Eris, Roar of the Storm (otc) 5 *F* [Maybeboard{noDeck}{noPrice}]", 15984 15984 "setCode": "OTC", 15985 15985 "tags": [], 15986 15986 }, ··· 15988 15988 "collectorNumber": "90", 15989 15989 "name": "Fact or Fiction", 15990 15990 "quantity": 1, 15991 - "raw": "1x Fact or Fiction (woc) 90", 15991 + "raw": "1x Fact or Fiction (woc) 90 [Maybeboard{noDeck}{noPrice}]", 15992 15992 "setCode": "WOC", 15993 15993 "tags": [], 15994 15994 }, ··· 15996 15996 "collectorNumber": "63", 15997 15997 "name": "Mindsplice Apparatus", 15998 15998 "quantity": 1, 15999 - "raw": "1x Mindsplice Apparatus (one) 63", 15999 + "raw": "1x Mindsplice Apparatus (one) 63 [Maybeboard{noDeck}{noPrice}]", 16000 16000 "setCode": "ONE", 16001 16001 "tags": [], 16002 16002 }, ··· 16004 16004 "collectorNumber": "247", 16005 16005 "name": "Palantír of Orthanc", 16006 16006 "quantity": 1, 16007 - "raw": "1x Palantír of Orthanc (ltr) 247", 16007 + "raw": "1x Palantír of Orthanc (ltr) 247 [Maybeboard{noDeck}{noPrice}]", 16008 16008 "setCode": "LTR", 16009 16009 "tags": [], 16010 16010 }, ··· 16012 16012 "collectorNumber": "269", 16013 16013 "name": "Ring of the Lucii", 16014 16014 "quantity": 1, 16015 - "raw": "1x Ring of the Lucii (fin) 269", 16015 + "raw": "1x Ring of the Lucii (fin) 269 [Maybeboard{noDeck}{noPrice}]", 16016 16016 "setCode": "FIN", 16017 16017 "tags": [], 16018 16018 }, ··· 16020 16020 "collectorNumber": "595", 16021 16021 "name": "River's Rebuke", 16022 16022 "quantity": 1, 16023 - "raw": "1x River's Rebuke (fdn) 595", 16023 + "raw": "1x River's Rebuke (fdn) 595 [Maybeboard{noDeck}{noPrice}]", 16024 16024 "setCode": "FDN", 16025 16025 "tags": [], 16026 16026 }, ··· 16028 16028 "collectorNumber": "126", 16029 16029 "name": "Structural Assault", 16030 16030 "quantity": 1, 16031 - "raw": "1x Structural Assault (snc) 126", 16031 + "raw": "1x Structural Assault (snc) 126 [Maybeboard{noDeck}{noPrice}]", 16032 16032 "setCode": "SNC", 16033 16033 "tags": [], 16034 16034 }, ··· 16036 16036 "collectorNumber": "M21-74", 16037 16037 "name": "Sublime Epiphany", 16038 16038 "quantity": 1, 16039 - "raw": "1x Sublime Epiphany (plst) M21-74", 16039 + "raw": "1x Sublime Epiphany (plst) M21-74 [Maybeboard{noDeck}{noPrice}]", 16040 16040 "setCode": "PLST", 16041 16041 "tags": [], 16042 16042 }, ··· 16044 16044 "collectorNumber": "146", 16045 16045 "name": "Tzaangor Shaman", 16046 16046 "quantity": 1, 16047 - "raw": "1x Tzaangor Shaman (40k) 146", 16047 + "raw": "1x Tzaangor Shaman (40k) 146 [Maybeboard{noDeck}{noPrice}]", 16048 16048 "setCode": "40K", 16049 16049 "tags": [], 16050 16050 }, ··· 16052 16052 "collectorNumber": "62", 16053 16053 "name": "Ultimate Magic: Meteor", 16054 16054 "quantity": 1, 16055 - "raw": "1x Ultimate Magic: Meteor (fic) 62", 16055 + "raw": "1x Ultimate Magic: Meteor (fic) 62 [Maybeboard{noDeck}{noPrice}]", 16056 16056 "setCode": "FIC", 16057 16057 "tags": [], 16058 16058 }, ··· 16060 16060 "collectorNumber": "4", 16061 16061 "name": "Zaffai, Thunder Conductor", 16062 16062 "quantity": 1, 16063 - "raw": "1x Zaffai, Thunder Conductor (c21) 4 *F*", 16063 + "raw": "1x Zaffai, Thunder Conductor (c21) 4 *F* [Maybeboard{noDeck}{noPrice}]", 16064 16064 "setCode": "C21", 16065 16065 "tags": [], 16066 16066 }, ··· 16076 16076 "collectorNumber": "290", 16077 16077 "name": "Ashling, Rekindled // Ashling, Rimebound", 16078 16078 "quantity": 1, 16079 - "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290", 16079 + "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290 [Commander{top}]", 16080 16080 "setCode": "ECL", 16081 16081 "tags": [], 16082 16082 }, ··· 16087 16087 "collectorNumber": "109", 16088 16088 "name": "Aether Gale", 16089 16089 "quantity": 1, 16090 - "raw": "1x Aether Gale (dsc) 109", 16090 + "raw": "1x Aether Gale (dsc) 109 [Removal]", 16091 16091 "setCode": "DSC", 16092 16092 "tags": [ 16093 16093 "Removal", ··· 16097 16097 "collectorNumber": "152", 16098 16098 "name": "All Is Dust", 16099 16099 "quantity": 1, 16100 - "raw": "1x All Is Dust (m3c) 152", 16100 + "raw": "1x All Is Dust (m3c) 152 [Removal]", 16101 16101 "setCode": "M3C", 16102 16102 "tags": [ 16103 16103 "Removal", ··· 16107 16107 "collectorNumber": "154", 16108 16108 "name": "Arcane Bombardment", 16109 16109 "quantity": 1, 16110 - "raw": "1x Arcane Bombardment (otc) 154", 16110 + "raw": "1x Arcane Bombardment (otc) 154 [Greed]", 16111 16111 "setCode": "OTC", 16112 16112 "tags": [ 16113 16113 "Greed", ··· 16117 16117 "collectorNumber": "285", 16118 16118 "name": "Archaeomancer", 16119 16119 "quantity": 1, 16120 - "raw": "1x Archaeomancer (j25) 285", 16120 + "raw": "1x Archaeomancer (j25) 285 [Recursion]", 16121 16121 "setCode": "J25", 16122 16122 "tags": [ 16123 16123 "Recursion", ··· 16127 16127 "collectorNumber": "145", 16128 16128 "name": "Archmage Emeritus", 16129 16129 "quantity": 1, 16130 - "raw": "1x Archmage Emeritus (tdc) 145", 16130 + "raw": "1x Archmage Emeritus (tdc) 145 [Draw]", 16131 16131 "setCode": "TDC", 16132 16132 "tags": [ 16133 16133 "Draw", ··· 16137 16137 "collectorNumber": "30", 16138 16138 "name": "Archmage of Runes", 16139 16139 "quantity": 1, 16140 - "raw": "1x Archmage of Runes (fdn) 30", 16140 + "raw": "1x Archmage of Runes (fdn) 30 [Draw]", 16141 16141 "setCode": "FDN", 16142 16142 "tags": [ 16143 16143 "Draw", ··· 16147 16147 "collectorNumber": "128", 16148 16148 "name": "Ardent Elementalist", 16149 16149 "quantity": 1, 16150 - "raw": "1x Ardent Elementalist (mid) 128", 16150 + "raw": "1x Ardent Elementalist (mid) 128 [Recursion]", 16151 16151 "setCode": "MID", 16152 16152 "tags": [ 16153 16153 "Recursion", ··· 16157 16157 "collectorNumber": "205", 16158 16158 "name": "Ashling's Command", 16159 16159 "quantity": 1, 16160 - "raw": "1x Ashling's Command (ecl) 205", 16160 + "raw": "1x Ashling's Command (ecl) 205 [Draw]", 16161 16161 "setCode": "ECL", 16162 16162 "tags": [ 16163 16163 "Draw", ··· 16167 16167 "collectorNumber": "146", 16168 16168 "name": "Baral's Expertise", 16169 16169 "quantity": 1, 16170 - "raw": "1x Baral's Expertise (tdc) 146", 16170 + "raw": "1x Baral's Expertise (tdc) 146 [Removal]", 16171 16171 "setCode": "TDC", 16172 16172 "tags": [ 16173 16173 "Removal", ··· 16177 16177 "collectorNumber": "206", 16178 16178 "name": "Big Score", 16179 16179 "quantity": 1, 16180 - "raw": "1x Big Score (tdc) 206", 16180 + "raw": "1x Big Score (tdc) 206 [Draw]", 16181 16181 "setCode": "TDC", 16182 16182 "tags": [ 16183 16183 "Draw", ··· 16187 16187 "collectorNumber": "160", 16188 16188 "name": "Blasphemous Act", 16189 16189 "quantity": 1, 16190 - "raw": "1x Blasphemous Act (dsc) 160", 16190 + "raw": "1x Blasphemous Act (dsc) 160 [Removal]", 16191 16191 "setCode": "DSC", 16192 16192 "tags": [ 16193 16193 "Removal", ··· 16197 16197 "collectorNumber": "33", 16198 16198 "name": "Caldera Pyremaw", 16199 16199 "quantity": 1, 16200 - "raw": "1x Caldera Pyremaw (tdc) 33", 16200 + "raw": "1x Caldera Pyremaw (tdc) 33 [Burn]", 16201 16201 "setCode": "TDC", 16202 16202 "tags": [ 16203 16203 "Burn", ··· 16207 16207 "collectorNumber": "509", 16208 16208 "name": "Call Forth the Tempest", 16209 16209 "quantity": 1, 16210 - "raw": "1x Call Forth the Tempest (ltc) 509", 16210 + "raw": "1x Call Forth the Tempest (ltc) 509 [Removal]", 16211 16211 "setCode": "LTC", 16212 16212 "tags": [ 16213 16213 "Removal", ··· 16217 16217 "collectorNumber": "153", 16218 16218 "name": "Cascade Bluffs", 16219 16219 "quantity": 1, 16220 - "raw": "1x Cascade Bluffs (eoc) 153", 16220 + "raw": "1x Cascade Bluffs (eoc) 153 [Land]", 16221 16221 "setCode": "EOC", 16222 16222 "tags": [ 16223 16223 "Land", ··· 16227 16227 "collectorNumber": "160", 16228 16228 "name": "Chaos Warp", 16229 16229 "quantity": 1, 16230 - "raw": "1x Chaos Warp (otc) 160", 16230 + "raw": "1x Chaos Warp (otc) 160 [Removal]", 16231 16231 "setCode": "OTC", 16232 16232 "tags": [ 16233 16233 "Removal", ··· 16237 16237 "collectorNumber": "249", 16238 16238 "name": "Chimil, the Inner Sun", 16239 16239 "quantity": 1, 16240 - "raw": "1x Chimil, the Inner Sun (lci) 249", 16240 + "raw": "1x Chimil, the Inner Sun (lci) 249 [Greed]", 16241 16241 "setCode": "LCI", 16242 16242 "tags": [ 16243 16243 "Greed", ··· 16247 16247 "collectorNumber": "59", 16248 16248 "name": "Command Tower", 16249 16249 "quantity": 1, 16250 - "raw": "1x Command Tower (ecc) 59", 16250 + "raw": "1x Command Tower (ecc) 59 [Land]", 16251 16251 "setCode": "ECC", 16252 16252 "tags": [ 16253 16253 "Land", ··· 16257 16257 "collectorNumber": "114", 16258 16258 "name": "Counterspell", 16259 16259 "quantity": 1, 16260 - "raw": "1x Counterspell (dsc) 114", 16260 + "raw": "1x Counterspell (dsc) 114 [Removal]", 16261 16261 "setCode": "DSC", 16262 16262 "tags": [ 16263 16263 "Removal", ··· 16267 16267 "collectorNumber": "171", 16268 16268 "name": "Creative Outburst", 16269 16269 "quantity": 1, 16270 - "raw": "1x Creative Outburst (stx) 171", 16270 + "raw": "1x Creative Outburst (stx) 171 [Ramp,Removal,Draw]", 16271 16271 "setCode": "STX", 16272 16272 "tags": [ 16273 16273 "Ramp", ··· 16279 16279 "collectorNumber": "150", 16280 16280 "name": "Deep Analysis", 16281 16281 "quantity": 1, 16282 - "raw": "1x Deep Analysis (tdc) 150", 16282 + "raw": "1x Deep Analysis (tdc) 150 [Draw]", 16283 16283 "setCode": "TDC", 16284 16284 "tags": [ 16285 16285 "Draw", ··· 16289 16289 "collectorNumber": "115", 16290 16290 "name": "Dig Through Time", 16291 16291 "quantity": 1, 16292 - "raw": "1x Dig Through Time (dsc) 115", 16292 + "raw": "1x Dig Through Time (dsc) 115 [Draw]", 16293 16293 "setCode": "DSC", 16294 16294 "tags": [ 16295 16295 "Draw", ··· 16299 16299 "collectorNumber": "267", 16300 16300 "name": "Double Vision", 16301 16301 "quantity": 1, 16302 - "raw": "1x Double Vision (ncc) 267", 16302 + "raw": "1x Double Vision (ncc) 267 [Greed]", 16303 16303 "setCode": "NCC", 16304 16304 "tags": [ 16305 16305 "Greed", ··· 16309 16309 "collectorNumber": "220", 16310 16310 "name": "Drawn from Dreams", 16311 16311 "quantity": 1, 16312 - "raw": "1x Drawn from Dreams (ncc) 220", 16312 + "raw": "1x Drawn from Dreams (ncc) 220 [Draw]", 16313 16313 "setCode": "NCC", 16314 16314 "tags": [ 16315 16315 "Draw", ··· 16319 16319 "collectorNumber": "182", 16320 16320 "name": "Elemental Masterpiece", 16321 16321 "quantity": 1, 16322 - "raw": "1x Elemental Masterpiece (stx) 182", 16322 + "raw": "1x Elemental Masterpiece (stx) 182 [Ramp,Tokens]", 16323 16323 "setCode": "STX", 16324 16324 "tags": [ 16325 16325 "Ramp", ··· 16330 16330 "collectorNumber": "119", 16331 16331 "name": "Exalted Flamer of Tzeentch", 16332 16332 "quantity": 1, 16333 - "raw": "1x Exalted Flamer of Tzeentch (40k) 119", 16333 + "raw": "1x Exalted Flamer of Tzeentch (40k) 119 [Burn,Recursion]", 16334 16334 "setCode": "40K", 16335 16335 "tags": [ 16336 16336 "Burn", ··· 16341 16341 "collectorNumber": "226", 16342 16342 "name": "Fiery Confluence", 16343 16343 "quantity": 1, 16344 - "raw": "1x Fiery Confluence (lcc) 226", 16344 + "raw": "1x Fiery Confluence (lcc) 226 [Removal]", 16345 16345 "setCode": "LCC", 16346 16346 "tags": [ 16347 16347 "Removal", ··· 16351 16351 "collectorNumber": "238", 16352 16352 "name": "Fiery Islet", 16353 16353 "quantity": 1, 16354 - "raw": "1x Fiery Islet (mh1) 238", 16354 + "raw": "1x Fiery Islet (mh1) 238 [Land]", 16355 16355 "setCode": "MH1", 16356 16356 "tags": [ 16357 16357 "Land", ··· 16361 16361 "collectorNumber": "203", 16362 16362 "name": "Flame of Anor", 16363 16363 "quantity": 1, 16364 - "raw": "1x Flame of Anor (ltr) 203", 16364 + "raw": "1x Flame of Anor (ltr) 203 [Draw]", 16365 16365 "setCode": "LTR", 16366 16366 "tags": [ 16367 16367 "Draw", ··· 16371 16371 "collectorNumber": "463", 16372 16372 "name": "Flash Photography", 16373 16373 "quantity": 1, 16374 - "raw": "1x Flash Photography (fic) 463", 16374 + "raw": "1x Flash Photography (fic) 463 [Copy]", 16375 16375 "setCode": "FIC", 16376 16376 "tags": [ 16377 16377 "Copy", ··· 16381 16381 "collectorNumber": "104", 16382 16382 "name": "Flood of Tears", 16383 16383 "quantity": 1, 16384 - "raw": "1x Flood of Tears (voc) 104", 16384 + "raw": "1x Flood of Tears (voc) 104 [Removal]", 16385 16385 "setCode": "VOC", 16386 16386 "tags": [ 16387 16387 "Removal", ··· 16391 16391 "collectorNumber": "158", 16392 16392 "name": "Frostboil Snarl", 16393 16393 "quantity": 1, 16394 - "raw": "1x Frostboil Snarl (drc) 158", 16394 + "raw": "1x Frostboil Snarl (drc) 158 [Land]", 16395 16395 "setCode": "DRC", 16396 16396 "tags": [ 16397 16397 "Land", ··· 16401 16401 "collectorNumber": "22", 16402 16402 "name": "Fury Storm", 16403 16403 "quantity": 1, 16404 - "raw": "1x Fury Storm (c18) 22", 16404 + "raw": "1x Fury Storm (c18) 22 [Greed]", 16405 16405 "setCode": "C18", 16406 16406 "tags": [ 16407 16407 "Greed", ··· 16411 16411 "collectorNumber": "132", 16412 16412 "name": "Harmonic Prodigy", 16413 16413 "quantity": 1, 16414 - "raw": "1x Harmonic Prodigy (mh2) 132", 16414 + "raw": "1x Harmonic Prodigy (mh2) 132 [Greed]", 16415 16415 "setCode": "MH2", 16416 16416 "tags": [ 16417 16417 "Greed", ··· 16421 16421 "collectorNumber": "275", 16422 16422 "name": "Hedron Archive", 16423 16423 "quantity": 1, 16424 - "raw": "1x Hedron Archive (blc) 275", 16424 + "raw": "1x Hedron Archive (blc) 275 [Ramp]", 16425 16425 "setCode": "BLC", 16426 16426 "tags": [ 16427 16427 "Ramp", ··· 16431 16431 "collectorNumber": "GRN-178", 16432 16432 "name": "Hypothesizzle", 16433 16433 "quantity": 1, 16434 - "raw": "1x Hypothesizzle (plst) GRN-178", 16434 + "raw": "1x Hypothesizzle (plst) GRN-178 [Draw,Removal]", 16435 16435 "setCode": "PLST", 16436 16436 "tags": [ 16437 16437 "Draw", ··· 16442 16442 "collectorNumber": "207", 16443 16443 "name": "Ill-Timed Explosion", 16444 16444 "quantity": 1, 16445 - "raw": "1x Ill-Timed Explosion (mkm) 207", 16445 + "raw": "1x Ill-Timed Explosion (mkm) 207 [Removal]", 16446 16446 "setCode": "MKM", 16447 16447 "tags": [ 16448 16448 "Removal", ··· 16452 16452 "collectorNumber": "270", 16453 16453 "name": "Island", 16454 16454 "quantity": 9, 16455 - "raw": "9x Island (ecl) 270", 16455 + "raw": "9x Island (ecl) 270 [Land]", 16456 16456 "setCode": "ECL", 16457 16457 "tags": [ 16458 16458 "Land", ··· 16462 16462 "collectorNumber": "350", 16463 16463 "name": "Izzet Boilerworks", 16464 16464 "quantity": 1, 16465 - "raw": "1x Izzet Boilerworks (m3c) 350", 16465 + "raw": "1x Izzet Boilerworks (m3c) 350 [Land]", 16466 16466 "setCode": "M3C", 16467 16467 "tags": [ 16468 16468 "Land", ··· 16472 16472 "collectorNumber": "59", 16473 16473 "name": "Jin-Gitaxias, Progress Tyrant", 16474 16474 "quantity": 1, 16475 - "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59", 16475 + "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59 [Greed]", 16476 16476 "setCode": "NEO", 16477 16477 "tags": [ 16478 16478 "Greed", ··· 16482 16482 "collectorNumber": "60", 16483 16483 "name": "Lórien Revealed", 16484 16484 "quantity": 1, 16485 - "raw": "1x Lórien Revealed (ltr) 60", 16485 + "raw": "1x Lórien Revealed (ltr) 60 [Draw]", 16486 16486 "setCode": "LTR", 16487 16487 "tags": [ 16488 16488 "Draw", ··· 16492 16492 "collectorNumber": "296", 16493 16493 "name": "Magma Opus", 16494 16494 "quantity": 1, 16495 - "raw": "1x Magma Opus (tdc) 296", 16495 + "raw": "1x Magma Opus (tdc) 296 [Ramp,Draw,Tokens,Removal]", 16496 16496 "setCode": "TDC", 16497 16497 "tags": [ 16498 16498 "Ramp", ··· 16505 16505 "collectorNumber": "223", 16506 16506 "name": "Mana Geyser", 16507 16507 "quantity": 1, 16508 - "raw": "1x Mana Geyser (tdc) 223", 16508 + "raw": "1x Mana Geyser (tdc) 223 [Greed]", 16509 16509 "setCode": "TDC", 16510 16510 "tags": [ 16511 16511 "Greed", ··· 16515 16515 "collectorNumber": "63", 16516 16516 "name": "Memories Returning", 16517 16517 "quantity": 1, 16518 - "raw": "1x Memories Returning (fin) 63", 16518 + "raw": "1x Memories Returning (fin) 63 [Draw]", 16519 16519 "setCode": "FIN", 16520 16520 "tags": [ 16521 16521 "Draw", ··· 16525 16525 "collectorNumber": "75", 16526 16526 "name": "Memory Deluge", 16527 16527 "quantity": 1, 16528 - "raw": "1x Memory Deluge (inr) 75", 16528 + "raw": "1x Memory Deluge (inr) 75 [Draw]", 16529 16529 "setCode": "INR", 16530 16530 "tags": [ 16531 16531 "Draw", ··· 16535 16535 "collectorNumber": "261", 16536 16536 "name": "Mistrise Village", 16537 16537 "quantity": 1, 16538 - "raw": "1x Mistrise Village (tdm) 261", 16538 + "raw": "1x Mistrise Village (tdm) 261 [Land]", 16539 16539 "setCode": "TDM", 16540 16540 "tags": [ 16541 16541 "Land", ··· 16545 16545 "collectorNumber": "175", 16546 16546 "name": "Mizzix's Mastery", 16547 16547 "quantity": 1, 16548 - "raw": "1x Mizzix's Mastery (otc) 175", 16548 + "raw": "1x Mizzix's Mastery (otc) 175 [Recursion]", 16549 16549 "setCode": "OTC", 16550 16550 "tags": [ 16551 16551 "Recursion", ··· 16555 16555 "collectorNumber": "272", 16556 16556 "name": "Mountain", 16557 16557 "quantity": 9, 16558 - "raw": "9x Mountain (ecl) 272", 16558 + "raw": "9x Mountain (ecl) 272 [Land]", 16559 16559 "setCode": "ECL", 16560 16560 "tags": [ 16561 16561 "Land", ··· 16565 16565 "collectorNumber": "108", 16566 16566 "name": "Mystic Confluence", 16567 16567 "quantity": 1, 16568 - "raw": "1x Mystic Confluence (cmm) 108", 16568 + "raw": "1x Mystic Confluence (cmm) 108 [Removal]", 16569 16569 "setCode": "CMM", 16570 16570 "tags": [ 16571 16571 "Removal", ··· 16575 16575 "collectorNumber": "161", 16576 16576 "name": "Omniscience", 16577 16577 "quantity": 1, 16578 - "raw": "1x Omniscience (fdn) 161", 16578 + "raw": "1x Omniscience (fdn) 161 [Okay Pal]", 16579 16579 "setCode": "FDN", 16580 16580 "tags": [ 16581 16581 "Okay Pal", ··· 16585 16585 "collectorNumber": "246", 16586 16586 "name": "Pinnacle Monk // Mystic Peak", 16587 16587 "quantity": 1, 16588 - "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246", 16588 + "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246 [Recursion]", 16589 16589 "setCode": "MH3", 16590 16590 "tags": [ 16591 16591 "Recursion", ··· 16595 16595 "collectorNumber": "120", 16596 16596 "name": "Pirate's Pillage", 16597 16597 "quantity": 1, 16598 - "raw": "1x Pirate's Pillage (2x2) 120", 16598 + "raw": "1x Pirate's Pillage (2x2) 120 [Draw]", 16599 16599 "setCode": "2X2", 16600 16600 "tags": [ 16601 16601 "Draw", ··· 16605 16605 "collectorNumber": "265", 16606 16606 "name": "Prophetic Bolt", 16607 16607 "quantity": 1, 16608 - "raw": "1x Prophetic Bolt (2x2) 265", 16608 + "raw": "1x Prophetic Bolt (2x2) 265 [Removal,Draw]", 16609 16609 "setCode": "2X2", 16610 16610 "tags": [ 16611 16611 "Removal", ··· 16616 16616 "collectorNumber": "212", 16617 16617 "name": "Ral's Outburst", 16618 16618 "quantity": 1, 16619 - "raw": "1x Ral's Outburst (war) 212", 16619 + "raw": "1x Ral's Outburst (war) 212 [Removal]", 16620 16620 "setCode": "WAR", 16621 16621 "tags": [ 16622 16622 "Removal", ··· 16626 16626 "collectorNumber": "33", 16627 16627 "name": "Reckless Endeavor", 16628 16628 "quantity": 1, 16629 - "raw": "1x Reckless Endeavor (afc) 33", 16629 + "raw": "1x Reckless Endeavor (afc) 33 [Removal]", 16630 16630 "setCode": "AFC", 16631 16631 "tags": [ 16632 16632 "Removal", ··· 16636 16636 "collectorNumber": "386", 16637 16637 "name": "Reliquary Tower", 16638 16638 "quantity": 1, 16639 - "raw": "1x Reliquary Tower (tdc) 386", 16639 + "raw": "1x Reliquary Tower (tdc) 386 [Land]", 16640 16640 "setCode": "TDC", 16641 16641 "tags": [ 16642 16642 "Land", ··· 16646 16646 "collectorNumber": "67", 16647 16647 "name": "Relm's Sketching", 16648 16648 "quantity": 1, 16649 - "raw": "1x Relm's Sketching (fin) 67", 16649 + "raw": "1x Relm's Sketching (fin) 67 [Copy]", 16650 16650 "setCode": "FIN", 16651 16651 "tags": [ 16652 16652 "Copy", ··· 16656 16656 "collectorNumber": "192", 16657 16657 "name": "Replication Technique", 16658 16658 "quantity": 1, 16659 - "raw": "1x Replication Technique (m3c) 192", 16659 + "raw": "1x Replication Technique (m3c) 192 [Copy]", 16660 16660 "setCode": "M3C", 16661 16661 "tags": [ 16662 16662 "Copy", ··· 16666 16666 "collectorNumber": "92", 16667 16667 "name": "Rite of the Dragoncaller", 16668 16668 "quantity": 1, 16669 - "raw": "1x Rite of the Dragoncaller (fdn) 92", 16669 + "raw": "1x Rite of the Dragoncaller (fdn) 92 [Tokens]", 16670 16670 "setCode": "FDN", 16671 16671 "tags": [ 16672 16672 "Tokens", ··· 16676 16676 "collectorNumber": "ZNR-264", 16677 16677 "name": "Riverglide Pathway // Lavaglide Pathway", 16678 16678 "quantity": 1, 16679 - "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264", 16679 + "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264 [Land]", 16680 16680 "setCode": "PLST", 16681 16681 "tags": [ 16682 16682 "Land", ··· 16686 16686 "collectorNumber": "260", 16687 16687 "name": "Riverpyre Verge", 16688 16688 "quantity": 1, 16689 - "raw": "1x Riverpyre Verge (dft) 260", 16689 + "raw": "1x Riverpyre Verge (dft) 260 [Land]", 16690 16690 "setCode": "DFT", 16691 16691 "tags": [ 16692 16692 "Land", ··· 16696 16696 "collectorNumber": "254", 16697 16697 "name": "Scalding Tarn", 16698 16698 "quantity": 1, 16699 - "raw": "1x Scalding Tarn (mh2) 254", 16699 + "raw": "1x Scalding Tarn (mh2) 254 [Land]", 16700 16700 "setCode": "MH2", 16701 16701 "tags": [ 16702 16702 "Land", ··· 16706 16706 "collectorNumber": "74", 16707 16707 "name": "Scattered Thoughts", 16708 16708 "quantity": 1, 16709 - "raw": "1x Scattered Thoughts (vow) 74", 16709 + "raw": "1x Scattered Thoughts (vow) 74 [Draw]", 16710 16710 "setCode": "VOW", 16711 16711 "tags": [ 16712 16712 "Draw", ··· 16716 16716 "collectorNumber": "287", 16717 16717 "name": "Scavenger Grounds", 16718 16718 "quantity": 1, 16719 - "raw": "1x Scavenger Grounds (mkc) 287", 16719 + "raw": "1x Scavenger Grounds (mkc) 287 [Land]", 16720 16720 "setCode": "MKC", 16721 16721 "tags": [ 16722 16722 "Land", ··· 16726 16726 "collectorNumber": "76", 16727 16727 "name": "Sea Gate Restoration // Sea Gate, Reborn", 16728 16728 "quantity": 1, 16729 - "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76", 16729 + "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76 [Draw]", 16730 16730 "setCode": "ZNR", 16731 16731 "tags": [ 16732 16732 "Draw", ··· 16736 16736 "collectorNumber": "127", 16737 16737 "name": "Shark Typhoon", 16738 16738 "quantity": 1, 16739 - "raw": "1x Shark Typhoon (dsc) 127", 16739 + "raw": "1x Shark Typhoon (dsc) 127 [Tokens]", 16740 16740 "setCode": "DSC", 16741 16741 "tags": [ 16742 16742 "Tokens", ··· 16746 16746 "collectorNumber": "179", 16747 16747 "name": "Shivan Reef", 16748 16748 "quantity": 1, 16749 - "raw": "1x Shivan Reef (eoc) 179", 16749 + "raw": "1x Shivan Reef (eoc) 179 [Land]", 16750 16750 "setCode": "EOC", 16751 16751 "tags": [ 16752 16752 "Land", ··· 16756 16756 "collectorNumber": "80", 16757 16757 "name": "Silundi Vision // Silundi Isle", 16758 16758 "quantity": 1, 16759 - "raw": "1x Silundi Vision // Silundi Isle (znr) 80", 16759 + "raw": "1x Silundi Vision // Silundi Isle (znr) 80 [Draw]", 16760 16760 "setCode": "ZNR", 16761 16761 "tags": [ 16762 16762 "Draw", ··· 16766 16766 "collectorNumber": "241", 16767 16767 "name": "Sink into Stupor // Soporific Springs", 16768 16768 "quantity": 1, 16769 - "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241", 16769 + "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241 [Removal]", 16770 16770 "setCode": "MH3", 16771 16771 "tags": [ 16772 16772 "Removal", ··· 16776 16776 "collectorNumber": "340", 16777 16777 "name": "Sisay's Ring", 16778 16778 "quantity": 1, 16779 - "raw": "1x Sisay's Ring (cmr) 340", 16779 + "raw": "1x Sisay's Ring (cmr) 340 [Ramp]", 16780 16780 "setCode": "CMR", 16781 16781 "tags": [ 16782 16782 "Ramp", ··· 16786 16786 "collectorNumber": "57", 16787 16787 "name": "Sol Ring", 16788 16788 "quantity": 1, 16789 - "raw": "1x Sol Ring (ecc) 57", 16789 + "raw": "1x Sol Ring (ecc) 57 [Ramp]", 16790 16790 "setCode": "ECC", 16791 16791 "tags": [ 16792 16792 "Ramp", ··· 16796 16796 "collectorNumber": "267", 16797 16797 "name": "Steam Vents", 16798 16798 "quantity": 1, 16799 - "raw": "1x Steam Vents (ecl) 267", 16799 + "raw": "1x Steam Vents (ecl) 267 [Land]", 16800 16800 "setCode": "ECL", 16801 16801 "tags": [ 16802 16802 "Land", ··· 16806 16806 "collectorNumber": "338", 16807 16807 "name": "Stonespeaker Crystal", 16808 16808 "quantity": 1, 16809 - "raw": "1x Stonespeaker Crystal (clb) 338", 16809 + "raw": "1x Stonespeaker Crystal (clb) 338 [Ramp,Removal]", 16810 16810 "setCode": "CLB", 16811 16811 "tags": [ 16812 16812 "Ramp", ··· 16817 16817 "collectorNumber": "285", 16818 16818 "name": "Stormcarved Coast", 16819 16819 "quantity": 1, 16820 - "raw": "1x Stormcarved Coast (inr) 285", 16820 + "raw": "1x Stormcarved Coast (inr) 285 [Land]", 16821 16821 "setCode": "INR", 16822 16822 "tags": [ 16823 16823 "Land", ··· 16827 16827 "collectorNumber": "184", 16828 16828 "name": "Sulfur Falls", 16829 16829 "quantity": 1, 16830 - "raw": "1x Sulfur Falls (eoc) 184", 16830 + "raw": "1x Sulfur Falls (eoc) 184 [Land]", 16831 16831 "setCode": "EOC", 16832 16832 "tags": [ 16833 16833 "Land", ··· 16837 16837 "collectorNumber": "162", 16838 16838 "name": "Summon: G.F. Cerberus", 16839 16839 "quantity": 1, 16840 - "raw": "1x Summon: G.F. Cerberus (fin) 162", 16840 + "raw": "1x Summon: G.F. Cerberus (fin) 162 [Greed]", 16841 16841 "setCode": "FIN", 16842 16842 "tags": [ 16843 16843 "Greed", ··· 16847 16847 "collectorNumber": "180", 16848 16848 "name": "Sunbird's Invocation", 16849 16849 "quantity": 1, 16850 - "raw": "1x Sunbird's Invocation (c21) 180", 16850 + "raw": "1x Sunbird's Invocation (c21) 180 [Greed]", 16851 16851 "setCode": "C21", 16852 16852 "tags": [ 16853 16853 "Greed", ··· 16857 16857 "collectorNumber": "244", 16858 16858 "name": "Tellah, Great Sage", 16859 16859 "quantity": 1, 16860 - "raw": "1x Tellah, Great Sage (fin) 244", 16860 + "raw": "1x Tellah, Great Sage (fin) 244 [Draw]", 16861 16861 "setCode": "FIN", 16862 16862 "tags": [ 16863 16863 "Draw", ··· 16867 16867 "collectorNumber": "290", 16868 16868 "name": "Thran Dynamo", 16869 16869 "quantity": 1, 16870 - "raw": "1x Thran Dynamo (blc) 290", 16870 + "raw": "1x Thran Dynamo (blc) 290 [Ramp]", 16871 16871 "setCode": "BLC", 16872 16872 "tags": [ 16873 16873 "Ramp", ··· 16877 16877 "collectorNumber": "434", 16878 16878 "name": "Training Center", 16879 16879 "quantity": 1, 16880 - "raw": "1x Training Center (cmm) 434", 16880 + "raw": "1x Training Center (cmm) 434 [Land]", 16881 16881 "setCode": "CMM", 16882 16882 "tags": [ 16883 16883 "Land", ··· 16887 16887 "collectorNumber": "164", 16888 16888 "name": "Unexpected Windfall", 16889 16889 "quantity": 1, 16890 - "raw": "1x Unexpected Windfall (afr) 164", 16890 + "raw": "1x Unexpected Windfall (afr) 164 [Draw]", 16891 16891 "setCode": "AFR", 16892 16892 "tags": [ 16893 16893 "Draw", ··· 16897 16897 "collectorNumber": "280", 16898 16898 "name": "Ur-Golem's Eye", 16899 16899 "quantity": 1, 16900 - "raw": "1x Ur-Golem's Eye (c14) 280", 16900 + "raw": "1x Ur-Golem's Eye (c14) 280 [Ramp]", 16901 16901 "setCode": "C14", 16902 16902 "tags": [ 16903 16903 "Ramp", ··· 16907 16907 "collectorNumber": "ZNR-174", 16908 16908 "name": "Valakut Awakening // Valakut Stoneforge", 16909 16909 "quantity": 1, 16910 - "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174", 16910 + "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174 [Draw]", 16911 16911 "setCode": "PLST", 16912 16912 "tags": [ 16913 16913 "Draw", ··· 16917 16917 "collectorNumber": "182", 16918 16918 "name": "Volcanic Vision", 16919 16919 "quantity": 1, 16920 - "raw": "1x Volcanic Vision (c21) 182", 16920 + "raw": "1x Volcanic Vision (c21) 182 [Removal,Recursion]", 16921 16921 "setCode": "C21", 16922 16922 "tags": [ 16923 16923 "Removal", ··· 16937 16937 "collectorNumber": "290", 16938 16938 "name": "Ashling, Rekindled // Ashling, Rimebound", 16939 16939 "quantity": 1, 16940 - "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290", 16940 + "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290 [Commander{top}]", 16941 16941 "setCode": "ECL", 16942 16942 "tags": [], 16943 16943 }, ··· 16948 16948 "collectorNumber": "33", 16949 16949 "name": "Caldera Pyremaw", 16950 16950 "quantity": 1, 16951 - "raw": "1x Caldera Pyremaw (tdc) 33", 16951 + "raw": "1x Caldera Pyremaw (tdc) 33 [Burn]", 16952 16952 "setCode": "TDC", 16953 16953 "tags": [ 16954 16954 "Burn", ··· 16958 16958 "collectorNumber": "119", 16959 16959 "name": "Exalted Flamer of Tzeentch", 16960 16960 "quantity": 1, 16961 - "raw": "1x Exalted Flamer of Tzeentch (40k) 119", 16961 + "raw": "1x Exalted Flamer of Tzeentch (40k) 119 [Burn,Recursion]", 16962 16962 "setCode": "40K", 16963 16963 "tags": [ 16964 16964 "Burn", ··· 16969 16969 "collectorNumber": "463", 16970 16970 "name": "Flash Photography", 16971 16971 "quantity": 1, 16972 - "raw": "1x Flash Photography (fic) 463", 16972 + "raw": "1x Flash Photography (fic) 463 [Copy]", 16973 16973 "setCode": "FIC", 16974 16974 "tags": [ 16975 16975 "Copy", ··· 16979 16979 "collectorNumber": "67", 16980 16980 "name": "Relm's Sketching", 16981 16981 "quantity": 1, 16982 - "raw": "1x Relm's Sketching (fin) 67", 16982 + "raw": "1x Relm's Sketching (fin) 67 [Copy]", 16983 16983 "setCode": "FIN", 16984 16984 "tags": [ 16985 16985 "Copy", ··· 16989 16989 "collectorNumber": "192", 16990 16990 "name": "Replication Technique", 16991 16991 "quantity": 1, 16992 - "raw": "1x Replication Technique (m3c) 192", 16992 + "raw": "1x Replication Technique (m3c) 192 [Copy]", 16993 16993 "setCode": "M3C", 16994 16994 "tags": [ 16995 16995 "Copy", ··· 16999 16999 "collectorNumber": "145", 17000 17000 "name": "Archmage Emeritus", 17001 17001 "quantity": 1, 17002 - "raw": "1x Archmage Emeritus (tdc) 145", 17002 + "raw": "1x Archmage Emeritus (tdc) 145 [Draw]", 17003 17003 "setCode": "TDC", 17004 17004 "tags": [ 17005 17005 "Draw", ··· 17009 17009 "collectorNumber": "30", 17010 17010 "name": "Archmage of Runes", 17011 17011 "quantity": 1, 17012 - "raw": "1x Archmage of Runes (fdn) 30", 17012 + "raw": "1x Archmage of Runes (fdn) 30 [Draw]", 17013 17013 "setCode": "FDN", 17014 17014 "tags": [ 17015 17015 "Draw", ··· 17019 17019 "collectorNumber": "205", 17020 17020 "name": "Ashling's Command", 17021 17021 "quantity": 1, 17022 - "raw": "1x Ashling's Command (ecl) 205", 17022 + "raw": "1x Ashling's Command (ecl) 205 [Draw]", 17023 17023 "setCode": "ECL", 17024 17024 "tags": [ 17025 17025 "Draw", ··· 17029 17029 "collectorNumber": "206", 17030 17030 "name": "Big Score", 17031 17031 "quantity": 1, 17032 - "raw": "1x Big Score (tdc) 206", 17032 + "raw": "1x Big Score (tdc) 206 [Draw]", 17033 17033 "setCode": "TDC", 17034 17034 "tags": [ 17035 17035 "Draw", ··· 17039 17039 "collectorNumber": "150", 17040 17040 "name": "Deep Analysis", 17041 17041 "quantity": 1, 17042 - "raw": "1x Deep Analysis (tdc) 150", 17042 + "raw": "1x Deep Analysis (tdc) 150 [Draw]", 17043 17043 "setCode": "TDC", 17044 17044 "tags": [ 17045 17045 "Draw", ··· 17049 17049 "collectorNumber": "115", 17050 17050 "name": "Dig Through Time", 17051 17051 "quantity": 1, 17052 - "raw": "1x Dig Through Time (dsc) 115", 17052 + "raw": "1x Dig Through Time (dsc) 115 [Draw]", 17053 17053 "setCode": "DSC", 17054 17054 "tags": [ 17055 17055 "Draw", ··· 17059 17059 "collectorNumber": "220", 17060 17060 "name": "Drawn from Dreams", 17061 17061 "quantity": 1, 17062 - "raw": "1x Drawn from Dreams (ncc) 220", 17062 + "raw": "1x Drawn from Dreams (ncc) 220 [Draw]", 17063 17063 "setCode": "NCC", 17064 17064 "tags": [ 17065 17065 "Draw", ··· 17069 17069 "collectorNumber": "203", 17070 17070 "name": "Flame of Anor", 17071 17071 "quantity": 1, 17072 - "raw": "1x Flame of Anor (ltr) 203", 17072 + "raw": "1x Flame of Anor (ltr) 203 [Draw]", 17073 17073 "setCode": "LTR", 17074 17074 "tags": [ 17075 17075 "Draw", ··· 17079 17079 "collectorNumber": "GRN-178", 17080 17080 "name": "Hypothesizzle", 17081 17081 "quantity": 1, 17082 - "raw": "1x Hypothesizzle (plst) GRN-178", 17082 + "raw": "1x Hypothesizzle (plst) GRN-178 [Draw,Removal]", 17083 17083 "setCode": "PLST", 17084 17084 "tags": [ 17085 17085 "Draw", ··· 17090 17090 "collectorNumber": "60", 17091 17091 "name": "Lórien Revealed", 17092 17092 "quantity": 1, 17093 - "raw": "1x Lórien Revealed (ltr) 60", 17093 + "raw": "1x Lórien Revealed (ltr) 60 [Draw]", 17094 17094 "setCode": "LTR", 17095 17095 "tags": [ 17096 17096 "Draw", ··· 17100 17100 "collectorNumber": "63", 17101 17101 "name": "Memories Returning", 17102 17102 "quantity": 1, 17103 - "raw": "1x Memories Returning (fin) 63", 17103 + "raw": "1x Memories Returning (fin) 63 [Draw]", 17104 17104 "setCode": "FIN", 17105 17105 "tags": [ 17106 17106 "Draw", ··· 17110 17110 "collectorNumber": "75", 17111 17111 "name": "Memory Deluge", 17112 17112 "quantity": 1, 17113 - "raw": "1x Memory Deluge (inr) 75", 17113 + "raw": "1x Memory Deluge (inr) 75 [Draw]", 17114 17114 "setCode": "INR", 17115 17115 "tags": [ 17116 17116 "Draw", ··· 17120 17120 "collectorNumber": "120", 17121 17121 "name": "Pirate's Pillage", 17122 17122 "quantity": 1, 17123 - "raw": "1x Pirate's Pillage (2x2) 120", 17123 + "raw": "1x Pirate's Pillage (2x2) 120 [Draw]", 17124 17124 "setCode": "2X2", 17125 17125 "tags": [ 17126 17126 "Draw", ··· 17130 17130 "collectorNumber": "74", 17131 17131 "name": "Scattered Thoughts", 17132 17132 "quantity": 1, 17133 - "raw": "1x Scattered Thoughts (vow) 74", 17133 + "raw": "1x Scattered Thoughts (vow) 74 [Draw]", 17134 17134 "setCode": "VOW", 17135 17135 "tags": [ 17136 17136 "Draw", ··· 17140 17140 "collectorNumber": "76", 17141 17141 "name": "Sea Gate Restoration // Sea Gate, Reborn", 17142 17142 "quantity": 1, 17143 - "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76", 17143 + "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76 [Draw]", 17144 17144 "setCode": "ZNR", 17145 17145 "tags": [ 17146 17146 "Draw", ··· 17150 17150 "collectorNumber": "80", 17151 17151 "name": "Silundi Vision // Silundi Isle", 17152 17152 "quantity": 1, 17153 - "raw": "1x Silundi Vision // Silundi Isle (znr) 80", 17153 + "raw": "1x Silundi Vision // Silundi Isle (znr) 80 [Draw]", 17154 17154 "setCode": "ZNR", 17155 17155 "tags": [ 17156 17156 "Draw", ··· 17160 17160 "collectorNumber": "244", 17161 17161 "name": "Tellah, Great Sage", 17162 17162 "quantity": 1, 17163 - "raw": "1x Tellah, Great Sage (fin) 244", 17163 + "raw": "1x Tellah, Great Sage (fin) 244 [Draw]", 17164 17164 "setCode": "FIN", 17165 17165 "tags": [ 17166 17166 "Draw", ··· 17170 17170 "collectorNumber": "164", 17171 17171 "name": "Unexpected Windfall", 17172 17172 "quantity": 1, 17173 - "raw": "1x Unexpected Windfall (afr) 164", 17173 + "raw": "1x Unexpected Windfall (afr) 164 [Draw]", 17174 17174 "setCode": "AFR", 17175 17175 "tags": [ 17176 17176 "Draw", ··· 17180 17180 "collectorNumber": "ZNR-174", 17181 17181 "name": "Valakut Awakening // Valakut Stoneforge", 17182 17182 "quantity": 1, 17183 - "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174", 17183 + "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174 [Draw]", 17184 17184 "setCode": "PLST", 17185 17185 "tags": [ 17186 17186 "Draw", ··· 17190 17190 "collectorNumber": "154", 17191 17191 "name": "Arcane Bombardment", 17192 17192 "quantity": 1, 17193 - "raw": "1x Arcane Bombardment (otc) 154", 17193 + "raw": "1x Arcane Bombardment (otc) 154 [Greed]", 17194 17194 "setCode": "OTC", 17195 17195 "tags": [ 17196 17196 "Greed", ··· 17200 17200 "collectorNumber": "249", 17201 17201 "name": "Chimil, the Inner Sun", 17202 17202 "quantity": 1, 17203 - "raw": "1x Chimil, the Inner Sun (lci) 249", 17203 + "raw": "1x Chimil, the Inner Sun (lci) 249 [Greed]", 17204 17204 "setCode": "LCI", 17205 17205 "tags": [ 17206 17206 "Greed", ··· 17210 17210 "collectorNumber": "267", 17211 17211 "name": "Double Vision", 17212 17212 "quantity": 1, 17213 - "raw": "1x Double Vision (ncc) 267", 17213 + "raw": "1x Double Vision (ncc) 267 [Greed]", 17214 17214 "setCode": "NCC", 17215 17215 "tags": [ 17216 17216 "Greed", ··· 17220 17220 "collectorNumber": "22", 17221 17221 "name": "Fury Storm", 17222 17222 "quantity": 1, 17223 - "raw": "1x Fury Storm (c18) 22", 17223 + "raw": "1x Fury Storm (c18) 22 [Greed]", 17224 17224 "setCode": "C18", 17225 17225 "tags": [ 17226 17226 "Greed", ··· 17230 17230 "collectorNumber": "132", 17231 17231 "name": "Harmonic Prodigy", 17232 17232 "quantity": 1, 17233 - "raw": "1x Harmonic Prodigy (mh2) 132", 17233 + "raw": "1x Harmonic Prodigy (mh2) 132 [Greed]", 17234 17234 "setCode": "MH2", 17235 17235 "tags": [ 17236 17236 "Greed", ··· 17240 17240 "collectorNumber": "59", 17241 17241 "name": "Jin-Gitaxias, Progress Tyrant", 17242 17242 "quantity": 1, 17243 - "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59", 17243 + "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59 [Greed]", 17244 17244 "setCode": "NEO", 17245 17245 "tags": [ 17246 17246 "Greed", ··· 17250 17250 "collectorNumber": "223", 17251 17251 "name": "Mana Geyser", 17252 17252 "quantity": 1, 17253 - "raw": "1x Mana Geyser (tdc) 223", 17253 + "raw": "1x Mana Geyser (tdc) 223 [Greed]", 17254 17254 "setCode": "TDC", 17255 17255 "tags": [ 17256 17256 "Greed", ··· 17260 17260 "collectorNumber": "162", 17261 17261 "name": "Summon: G.F. Cerberus", 17262 17262 "quantity": 1, 17263 - "raw": "1x Summon: G.F. Cerberus (fin) 162", 17263 + "raw": "1x Summon: G.F. Cerberus (fin) 162 [Greed]", 17264 17264 "setCode": "FIN", 17265 17265 "tags": [ 17266 17266 "Greed", ··· 17270 17270 "collectorNumber": "180", 17271 17271 "name": "Sunbird's Invocation", 17272 17272 "quantity": 1, 17273 - "raw": "1x Sunbird's Invocation (c21) 180", 17273 + "raw": "1x Sunbird's Invocation (c21) 180 [Greed]", 17274 17274 "setCode": "C21", 17275 17275 "tags": [ 17276 17276 "Greed", ··· 17280 17280 "collectorNumber": "153", 17281 17281 "name": "Cascade Bluffs", 17282 17282 "quantity": 1, 17283 - "raw": "1x Cascade Bluffs (eoc) 153", 17283 + "raw": "1x Cascade Bluffs (eoc) 153 [Land]", 17284 17284 "setCode": "EOC", 17285 17285 "tags": [ 17286 17286 "Land", ··· 17290 17290 "collectorNumber": "59", 17291 17291 "name": "Command Tower", 17292 17292 "quantity": 1, 17293 - "raw": "1x Command Tower (ecc) 59", 17293 + "raw": "1x Command Tower (ecc) 59 [Land]", 17294 17294 "setCode": "ECC", 17295 17295 "tags": [ 17296 17296 "Land", ··· 17300 17300 "collectorNumber": "238", 17301 17301 "name": "Fiery Islet", 17302 17302 "quantity": 1, 17303 - "raw": "1x Fiery Islet (mh1) 238", 17303 + "raw": "1x Fiery Islet (mh1) 238 [Land]", 17304 17304 "setCode": "MH1", 17305 17305 "tags": [ 17306 17306 "Land", ··· 17310 17310 "collectorNumber": "158", 17311 17311 "name": "Frostboil Snarl", 17312 17312 "quantity": 1, 17313 - "raw": "1x Frostboil Snarl (drc) 158", 17313 + "raw": "1x Frostboil Snarl (drc) 158 [Land]", 17314 17314 "setCode": "DRC", 17315 17315 "tags": [ 17316 17316 "Land", ··· 17320 17320 "collectorNumber": "270", 17321 17321 "name": "Island", 17322 17322 "quantity": 9, 17323 - "raw": "9x Island (ecl) 270", 17323 + "raw": "9x Island (ecl) 270 [Land]", 17324 17324 "setCode": "ECL", 17325 17325 "tags": [ 17326 17326 "Land", ··· 17330 17330 "collectorNumber": "350", 17331 17331 "name": "Izzet Boilerworks", 17332 17332 "quantity": 1, 17333 - "raw": "1x Izzet Boilerworks (m3c) 350", 17333 + "raw": "1x Izzet Boilerworks (m3c) 350 [Land]", 17334 17334 "setCode": "M3C", 17335 17335 "tags": [ 17336 17336 "Land", ··· 17340 17340 "collectorNumber": "261", 17341 17341 "name": "Mistrise Village", 17342 17342 "quantity": 1, 17343 - "raw": "1x Mistrise Village (tdm) 261", 17343 + "raw": "1x Mistrise Village (tdm) 261 [Land]", 17344 17344 "setCode": "TDM", 17345 17345 "tags": [ 17346 17346 "Land", ··· 17350 17350 "collectorNumber": "272", 17351 17351 "name": "Mountain", 17352 17352 "quantity": 9, 17353 - "raw": "9x Mountain (ecl) 272", 17353 + "raw": "9x Mountain (ecl) 272 [Land]", 17354 17354 "setCode": "ECL", 17355 17355 "tags": [ 17356 17356 "Land", ··· 17360 17360 "collectorNumber": "386", 17361 17361 "name": "Reliquary Tower", 17362 17362 "quantity": 1, 17363 - "raw": "1x Reliquary Tower (tdc) 386", 17363 + "raw": "1x Reliquary Tower (tdc) 386 [Land]", 17364 17364 "setCode": "TDC", 17365 17365 "tags": [ 17366 17366 "Land", ··· 17370 17370 "collectorNumber": "ZNR-264", 17371 17371 "name": "Riverglide Pathway // Lavaglide Pathway", 17372 17372 "quantity": 1, 17373 - "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264", 17373 + "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264 [Land]", 17374 17374 "setCode": "PLST", 17375 17375 "tags": [ 17376 17376 "Land", ··· 17380 17380 "collectorNumber": "260", 17381 17381 "name": "Riverpyre Verge", 17382 17382 "quantity": 1, 17383 - "raw": "1x Riverpyre Verge (dft) 260", 17383 + "raw": "1x Riverpyre Verge (dft) 260 [Land]", 17384 17384 "setCode": "DFT", 17385 17385 "tags": [ 17386 17386 "Land", ··· 17390 17390 "collectorNumber": "254", 17391 17391 "name": "Scalding Tarn", 17392 17392 "quantity": 1, 17393 - "raw": "1x Scalding Tarn (mh2) 254", 17393 + "raw": "1x Scalding Tarn (mh2) 254 [Land]", 17394 17394 "setCode": "MH2", 17395 17395 "tags": [ 17396 17396 "Land", ··· 17400 17400 "collectorNumber": "287", 17401 17401 "name": "Scavenger Grounds", 17402 17402 "quantity": 1, 17403 - "raw": "1x Scavenger Grounds (mkc) 287", 17403 + "raw": "1x Scavenger Grounds (mkc) 287 [Land]", 17404 17404 "setCode": "MKC", 17405 17405 "tags": [ 17406 17406 "Land", ··· 17410 17410 "collectorNumber": "179", 17411 17411 "name": "Shivan Reef", 17412 17412 "quantity": 1, 17413 - "raw": "1x Shivan Reef (eoc) 179", 17413 + "raw": "1x Shivan Reef (eoc) 179 [Land]", 17414 17414 "setCode": "EOC", 17415 17415 "tags": [ 17416 17416 "Land", ··· 17420 17420 "collectorNumber": "267", 17421 17421 "name": "Steam Vents", 17422 17422 "quantity": 1, 17423 - "raw": "1x Steam Vents (ecl) 267", 17423 + "raw": "1x Steam Vents (ecl) 267 [Land]", 17424 17424 "setCode": "ECL", 17425 17425 "tags": [ 17426 17426 "Land", ··· 17430 17430 "collectorNumber": "285", 17431 17431 "name": "Stormcarved Coast", 17432 17432 "quantity": 1, 17433 - "raw": "1x Stormcarved Coast (inr) 285", 17433 + "raw": "1x Stormcarved Coast (inr) 285 [Land]", 17434 17434 "setCode": "INR", 17435 17435 "tags": [ 17436 17436 "Land", ··· 17440 17440 "collectorNumber": "184", 17441 17441 "name": "Sulfur Falls", 17442 17442 "quantity": 1, 17443 - "raw": "1x Sulfur Falls (eoc) 184", 17443 + "raw": "1x Sulfur Falls (eoc) 184 [Land]", 17444 17444 "setCode": "EOC", 17445 17445 "tags": [ 17446 17446 "Land", ··· 17450 17450 "collectorNumber": "434", 17451 17451 "name": "Training Center", 17452 17452 "quantity": 1, 17453 - "raw": "1x Training Center (cmm) 434", 17453 + "raw": "1x Training Center (cmm) 434 [Land]", 17454 17454 "setCode": "CMM", 17455 17455 "tags": [ 17456 17456 "Land", ··· 17460 17460 "collectorNumber": "161", 17461 17461 "name": "Omniscience", 17462 17462 "quantity": 1, 17463 - "raw": "1x Omniscience (fdn) 161", 17463 + "raw": "1x Omniscience (fdn) 161 [Okay Pal]", 17464 17464 "setCode": "FDN", 17465 17465 "tags": [ 17466 17466 "Okay Pal", ··· 17470 17470 "collectorNumber": "171", 17471 17471 "name": "Creative Outburst", 17472 17472 "quantity": 1, 17473 - "raw": "1x Creative Outburst (stx) 171", 17473 + "raw": "1x Creative Outburst (stx) 171 [Ramp,Removal,Draw]", 17474 17474 "setCode": "STX", 17475 17475 "tags": [ 17476 17476 "Ramp", ··· 17482 17482 "collectorNumber": "182", 17483 17483 "name": "Elemental Masterpiece", 17484 17484 "quantity": 1, 17485 - "raw": "1x Elemental Masterpiece (stx) 182", 17485 + "raw": "1x Elemental Masterpiece (stx) 182 [Ramp,Tokens]", 17486 17486 "setCode": "STX", 17487 17487 "tags": [ 17488 17488 "Ramp", ··· 17493 17493 "collectorNumber": "275", 17494 17494 "name": "Hedron Archive", 17495 17495 "quantity": 1, 17496 - "raw": "1x Hedron Archive (blc) 275", 17496 + "raw": "1x Hedron Archive (blc) 275 [Ramp]", 17497 17497 "setCode": "BLC", 17498 17498 "tags": [ 17499 17499 "Ramp", ··· 17503 17503 "collectorNumber": "296", 17504 17504 "name": "Magma Opus", 17505 17505 "quantity": 1, 17506 - "raw": "1x Magma Opus (tdc) 296", 17506 + "raw": "1x Magma Opus (tdc) 296 [Ramp,Draw,Tokens,Removal]", 17507 17507 "setCode": "TDC", 17508 17508 "tags": [ 17509 17509 "Ramp", ··· 17516 17516 "collectorNumber": "340", 17517 17517 "name": "Sisay's Ring", 17518 17518 "quantity": 1, 17519 - "raw": "1x Sisay's Ring (cmr) 340", 17519 + "raw": "1x Sisay's Ring (cmr) 340 [Ramp]", 17520 17520 "setCode": "CMR", 17521 17521 "tags": [ 17522 17522 "Ramp", ··· 17526 17526 "collectorNumber": "57", 17527 17527 "name": "Sol Ring", 17528 17528 "quantity": 1, 17529 - "raw": "1x Sol Ring (ecc) 57", 17529 + "raw": "1x Sol Ring (ecc) 57 [Ramp]", 17530 17530 "setCode": "ECC", 17531 17531 "tags": [ 17532 17532 "Ramp", ··· 17536 17536 "collectorNumber": "338", 17537 17537 "name": "Stonespeaker Crystal", 17538 17538 "quantity": 1, 17539 - "raw": "1x Stonespeaker Crystal (clb) 338", 17539 + "raw": "1x Stonespeaker Crystal (clb) 338 [Ramp,Removal]", 17540 17540 "setCode": "CLB", 17541 17541 "tags": [ 17542 17542 "Ramp", ··· 17547 17547 "collectorNumber": "290", 17548 17548 "name": "Thran Dynamo", 17549 17549 "quantity": 1, 17550 - "raw": "1x Thran Dynamo (blc) 290", 17550 + "raw": "1x Thran Dynamo (blc) 290 [Ramp]", 17551 17551 "setCode": "BLC", 17552 17552 "tags": [ 17553 17553 "Ramp", ··· 17557 17557 "collectorNumber": "280", 17558 17558 "name": "Ur-Golem's Eye", 17559 17559 "quantity": 1, 17560 - "raw": "1x Ur-Golem's Eye (c14) 280", 17560 + "raw": "1x Ur-Golem's Eye (c14) 280 [Ramp]", 17561 17561 "setCode": "C14", 17562 17562 "tags": [ 17563 17563 "Ramp", ··· 17567 17567 "collectorNumber": "285", 17568 17568 "name": "Archaeomancer", 17569 17569 "quantity": 1, 17570 - "raw": "1x Archaeomancer (j25) 285", 17570 + "raw": "1x Archaeomancer (j25) 285 [Recursion]", 17571 17571 "setCode": "J25", 17572 17572 "tags": [ 17573 17573 "Recursion", ··· 17577 17577 "collectorNumber": "128", 17578 17578 "name": "Ardent Elementalist", 17579 17579 "quantity": 1, 17580 - "raw": "1x Ardent Elementalist (mid) 128", 17580 + "raw": "1x Ardent Elementalist (mid) 128 [Recursion]", 17581 17581 "setCode": "MID", 17582 17582 "tags": [ 17583 17583 "Recursion", ··· 17587 17587 "collectorNumber": "175", 17588 17588 "name": "Mizzix's Mastery", 17589 17589 "quantity": 1, 17590 - "raw": "1x Mizzix's Mastery (otc) 175", 17590 + "raw": "1x Mizzix's Mastery (otc) 175 [Recursion]", 17591 17591 "setCode": "OTC", 17592 17592 "tags": [ 17593 17593 "Recursion", ··· 17597 17597 "collectorNumber": "246", 17598 17598 "name": "Pinnacle Monk // Mystic Peak", 17599 17599 "quantity": 1, 17600 - "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246", 17600 + "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246 [Recursion]", 17601 17601 "setCode": "MH3", 17602 17602 "tags": [ 17603 17603 "Recursion", ··· 17607 17607 "collectorNumber": "109", 17608 17608 "name": "Aether Gale", 17609 17609 "quantity": 1, 17610 - "raw": "1x Aether Gale (dsc) 109", 17610 + "raw": "1x Aether Gale (dsc) 109 [Removal]", 17611 17611 "setCode": "DSC", 17612 17612 "tags": [ 17613 17613 "Removal", ··· 17617 17617 "collectorNumber": "152", 17618 17618 "name": "All Is Dust", 17619 17619 "quantity": 1, 17620 - "raw": "1x All Is Dust (m3c) 152", 17620 + "raw": "1x All Is Dust (m3c) 152 [Removal]", 17621 17621 "setCode": "M3C", 17622 17622 "tags": [ 17623 17623 "Removal", ··· 17627 17627 "collectorNumber": "146", 17628 17628 "name": "Baral's Expertise", 17629 17629 "quantity": 1, 17630 - "raw": "1x Baral's Expertise (tdc) 146", 17630 + "raw": "1x Baral's Expertise (tdc) 146 [Removal]", 17631 17631 "setCode": "TDC", 17632 17632 "tags": [ 17633 17633 "Removal", ··· 17637 17637 "collectorNumber": "160", 17638 17638 "name": "Blasphemous Act", 17639 17639 "quantity": 1, 17640 - "raw": "1x Blasphemous Act (dsc) 160", 17640 + "raw": "1x Blasphemous Act (dsc) 160 [Removal]", 17641 17641 "setCode": "DSC", 17642 17642 "tags": [ 17643 17643 "Removal", ··· 17647 17647 "collectorNumber": "509", 17648 17648 "name": "Call Forth the Tempest", 17649 17649 "quantity": 1, 17650 - "raw": "1x Call Forth the Tempest (ltc) 509", 17650 + "raw": "1x Call Forth the Tempest (ltc) 509 [Removal]", 17651 17651 "setCode": "LTC", 17652 17652 "tags": [ 17653 17653 "Removal", ··· 17657 17657 "collectorNumber": "160", 17658 17658 "name": "Chaos Warp", 17659 17659 "quantity": 1, 17660 - "raw": "1x Chaos Warp (otc) 160", 17660 + "raw": "1x Chaos Warp (otc) 160 [Removal]", 17661 17661 "setCode": "OTC", 17662 17662 "tags": [ 17663 17663 "Removal", ··· 17667 17667 "collectorNumber": "114", 17668 17668 "name": "Counterspell", 17669 17669 "quantity": 1, 17670 - "raw": "1x Counterspell (dsc) 114", 17670 + "raw": "1x Counterspell (dsc) 114 [Removal]", 17671 17671 "setCode": "DSC", 17672 17672 "tags": [ 17673 17673 "Removal", ··· 17677 17677 "collectorNumber": "226", 17678 17678 "name": "Fiery Confluence", 17679 17679 "quantity": 1, 17680 - "raw": "1x Fiery Confluence (lcc) 226", 17680 + "raw": "1x Fiery Confluence (lcc) 226 [Removal]", 17681 17681 "setCode": "LCC", 17682 17682 "tags": [ 17683 17683 "Removal", ··· 17687 17687 "collectorNumber": "104", 17688 17688 "name": "Flood of Tears", 17689 17689 "quantity": 1, 17690 - "raw": "1x Flood of Tears (voc) 104", 17690 + "raw": "1x Flood of Tears (voc) 104 [Removal]", 17691 17691 "setCode": "VOC", 17692 17692 "tags": [ 17693 17693 "Removal", ··· 17697 17697 "collectorNumber": "207", 17698 17698 "name": "Ill-Timed Explosion", 17699 17699 "quantity": 1, 17700 - "raw": "1x Ill-Timed Explosion (mkm) 207", 17700 + "raw": "1x Ill-Timed Explosion (mkm) 207 [Removal]", 17701 17701 "setCode": "MKM", 17702 17702 "tags": [ 17703 17703 "Removal", ··· 17707 17707 "collectorNumber": "108", 17708 17708 "name": "Mystic Confluence", 17709 17709 "quantity": 1, 17710 - "raw": "1x Mystic Confluence (cmm) 108", 17710 + "raw": "1x Mystic Confluence (cmm) 108 [Removal]", 17711 17711 "setCode": "CMM", 17712 17712 "tags": [ 17713 17713 "Removal", ··· 17717 17717 "collectorNumber": "265", 17718 17718 "name": "Prophetic Bolt", 17719 17719 "quantity": 1, 17720 - "raw": "1x Prophetic Bolt (2x2) 265", 17720 + "raw": "1x Prophetic Bolt (2x2) 265 [Removal,Draw]", 17721 17721 "setCode": "2X2", 17722 17722 "tags": [ 17723 17723 "Removal", ··· 17728 17728 "collectorNumber": "212", 17729 17729 "name": "Ral's Outburst", 17730 17730 "quantity": 1, 17731 - "raw": "1x Ral's Outburst (war) 212", 17731 + "raw": "1x Ral's Outburst (war) 212 [Removal]", 17732 17732 "setCode": "WAR", 17733 17733 "tags": [ 17734 17734 "Removal", ··· 17738 17738 "collectorNumber": "33", 17739 17739 "name": "Reckless Endeavor", 17740 17740 "quantity": 1, 17741 - "raw": "1x Reckless Endeavor (afc) 33", 17741 + "raw": "1x Reckless Endeavor (afc) 33 [Removal]", 17742 17742 "setCode": "AFC", 17743 17743 "tags": [ 17744 17744 "Removal", ··· 17748 17748 "collectorNumber": "241", 17749 17749 "name": "Sink into Stupor // Soporific Springs", 17750 17750 "quantity": 1, 17751 - "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241", 17751 + "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241 [Removal]", 17752 17752 "setCode": "MH3", 17753 17753 "tags": [ 17754 17754 "Removal", ··· 17758 17758 "collectorNumber": "182", 17759 17759 "name": "Volcanic Vision", 17760 17760 "quantity": 1, 17761 - "raw": "1x Volcanic Vision (c21) 182", 17761 + "raw": "1x Volcanic Vision (c21) 182 [Removal,Recursion]", 17762 17762 "setCode": "C21", 17763 17763 "tags": [ 17764 17764 "Removal", ··· 17769 17769 "collectorNumber": "92", 17770 17770 "name": "Rite of the Dragoncaller", 17771 17771 "quantity": 1, 17772 - "raw": "1x Rite of the Dragoncaller (fdn) 92", 17772 + "raw": "1x Rite of the Dragoncaller (fdn) 92 [Tokens]", 17773 17773 "setCode": "FDN", 17774 17774 "tags": [ 17775 17775 "Tokens", ··· 17779 17779 "collectorNumber": "127", 17780 17780 "name": "Shark Typhoon", 17781 17781 "quantity": 1, 17782 - "raw": "1x Shark Typhoon (dsc) 127", 17782 + "raw": "1x Shark Typhoon (dsc) 127 [Tokens]", 17783 17783 "setCode": "DSC", 17784 17784 "tags": [ 17785 17785 "Tokens", ··· 17791 17791 "collectorNumber": "151", 17792 17792 "name": "Aetherize", 17793 17793 "quantity": 1, 17794 - "raw": "1x Aetherize (fdn) 151", 17794 + "raw": "1x Aetherize (fdn) 151 [Maybeboard{noDeck}{noPrice}]", 17795 17795 "setCode": "FDN", 17796 17796 "tags": [], 17797 17797 }, ··· 17799 17799 "collectorNumber": "71", 17800 17800 "name": "Aminatou's Augury", 17801 17801 "quantity": 1, 17802 - "raw": "1x Aminatou's Augury (dsc) 71", 17802 + "raw": "1x Aminatou's Augury (dsc) 71 [Maybeboard{noDeck}{noPrice}]", 17803 17803 "setCode": "DSC", 17804 17804 "tags": [], 17805 17805 }, ··· 17807 17807 "collectorNumber": "162", 17808 17808 "name": "Charmbreaker Devils", 17809 17809 "quantity": 1, 17810 - "raw": "1x Charmbreaker Devils (c21) 162", 17810 + "raw": "1x Charmbreaker Devils (c21) 162 [Maybeboard{noDeck}{noPrice}]", 17811 17811 "setCode": "C21", 17812 17812 "tags": [], 17813 17813 }, ··· 17815 17815 "collectorNumber": "5", 17816 17816 "name": "Eris, Roar of the Storm", 17817 17817 "quantity": 1, 17818 - "raw": "1x Eris, Roar of the Storm (otc) 5 *F*", 17818 + "raw": "1x Eris, Roar of the Storm (otc) 5 *F* [Maybeboard{noDeck}{noPrice}]", 17819 17819 "setCode": "OTC", 17820 17820 "tags": [], 17821 17821 }, ··· 17823 17823 "collectorNumber": "90", 17824 17824 "name": "Fact or Fiction", 17825 17825 "quantity": 1, 17826 - "raw": "1x Fact or Fiction (woc) 90", 17826 + "raw": "1x Fact or Fiction (woc) 90 [Maybeboard{noDeck}{noPrice}]", 17827 17827 "setCode": "WOC", 17828 17828 "tags": [], 17829 17829 }, ··· 17831 17831 "collectorNumber": "63", 17832 17832 "name": "Mindsplice Apparatus", 17833 17833 "quantity": 1, 17834 - "raw": "1x Mindsplice Apparatus (one) 63", 17834 + "raw": "1x Mindsplice Apparatus (one) 63 [Maybeboard{noDeck}{noPrice}]", 17835 17835 "setCode": "ONE", 17836 17836 "tags": [], 17837 17837 }, ··· 17839 17839 "collectorNumber": "247", 17840 17840 "name": "Palantír of Orthanc", 17841 17841 "quantity": 1, 17842 - "raw": "1x Palantír of Orthanc (ltr) 247", 17842 + "raw": "1x Palantír of Orthanc (ltr) 247 [Maybeboard{noDeck}{noPrice}]", 17843 17843 "setCode": "LTR", 17844 17844 "tags": [], 17845 17845 }, ··· 17847 17847 "collectorNumber": "269", 17848 17848 "name": "Ring of the Lucii", 17849 17849 "quantity": 1, 17850 - "raw": "1x Ring of the Lucii (fin) 269", 17850 + "raw": "1x Ring of the Lucii (fin) 269 [Maybeboard{noDeck}{noPrice}]", 17851 17851 "setCode": "FIN", 17852 17852 "tags": [], 17853 17853 }, ··· 17855 17855 "collectorNumber": "595", 17856 17856 "name": "River's Rebuke", 17857 17857 "quantity": 1, 17858 - "raw": "1x River's Rebuke (fdn) 595", 17858 + "raw": "1x River's Rebuke (fdn) 595 [Maybeboard{noDeck}{noPrice}]", 17859 17859 "setCode": "FDN", 17860 17860 "tags": [], 17861 17861 }, ··· 17863 17863 "collectorNumber": "126", 17864 17864 "name": "Structural Assault", 17865 17865 "quantity": 1, 17866 - "raw": "1x Structural Assault (snc) 126", 17866 + "raw": "1x Structural Assault (snc) 126 [Maybeboard{noDeck}{noPrice}]", 17867 17867 "setCode": "SNC", 17868 17868 "tags": [], 17869 17869 }, ··· 17871 17871 "collectorNumber": "M21-74", 17872 17872 "name": "Sublime Epiphany", 17873 17873 "quantity": 1, 17874 - "raw": "1x Sublime Epiphany (plst) M21-74", 17874 + "raw": "1x Sublime Epiphany (plst) M21-74 [Maybeboard{noDeck}{noPrice}]", 17875 17875 "setCode": "PLST", 17876 17876 "tags": [], 17877 17877 }, ··· 17879 17879 "collectorNumber": "146", 17880 17880 "name": "Tzaangor Shaman", 17881 17881 "quantity": 1, 17882 - "raw": "1x Tzaangor Shaman (40k) 146", 17882 + "raw": "1x Tzaangor Shaman (40k) 146 [Maybeboard{noDeck}{noPrice}]", 17883 17883 "setCode": "40K", 17884 17884 "tags": [], 17885 17885 }, ··· 17887 17887 "collectorNumber": "62", 17888 17888 "name": "Ultimate Magic: Meteor", 17889 17889 "quantity": 1, 17890 - "raw": "1x Ultimate Magic: Meteor (fic) 62", 17890 + "raw": "1x Ultimate Magic: Meteor (fic) 62 [Maybeboard{noDeck}{noPrice}]", 17891 17891 "setCode": "FIC", 17892 17892 "tags": [], 17893 17893 }, ··· 17895 17895 "collectorNumber": "4", 17896 17896 "name": "Zaffai, Thunder Conductor", 17897 17897 "quantity": 1, 17898 - "raw": "1x Zaffai, Thunder Conductor (c21) 4 *F*", 17898 + "raw": "1x Zaffai, Thunder Conductor (c21) 4 *F* [Maybeboard{noDeck}{noPrice}]", 17899 17899 "setCode": "C21", 17900 17900 "tags": [], 17901 17901 }, ··· 17911 17911 "collectorNumber": "290", 17912 17912 "name": "Ashling, Rekindled // Ashling, Rimebound", 17913 17913 "quantity": 1, 17914 - "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290", 17914 + "raw": "1x Ashling, Rekindled // Ashling, Rimebound (ecl) 290 [Commander{top}]", 17915 17915 "setCode": "ECL", 17916 17916 "tags": [], 17917 17917 }, ··· 17922 17922 "collectorNumber": "33", 17923 17923 "name": "Caldera Pyremaw", 17924 17924 "quantity": 1, 17925 - "raw": "1x Caldera Pyremaw (tdc) 33", 17925 + "raw": "1x Caldera Pyremaw (tdc) 33 [Burn]", 17926 17926 "setCode": "TDC", 17927 17927 "tags": [ 17928 17928 "Burn", ··· 17932 17932 "collectorNumber": "119", 17933 17933 "name": "Exalted Flamer of Tzeentch", 17934 17934 "quantity": 1, 17935 - "raw": "1x Exalted Flamer of Tzeentch (40k) 119", 17935 + "raw": "1x Exalted Flamer of Tzeentch (40k) 119 [Burn,Recursion]", 17936 17936 "setCode": "40K", 17937 17937 "tags": [ 17938 17938 "Burn", ··· 17943 17943 "collectorNumber": "463", 17944 17944 "name": "Flash Photography", 17945 17945 "quantity": 1, 17946 - "raw": "1x Flash Photography (fic) 463", 17946 + "raw": "1x Flash Photography (fic) 463 [Copy]", 17947 17947 "setCode": "FIC", 17948 17948 "tags": [ 17949 17949 "Copy", ··· 17953 17953 "collectorNumber": "67", 17954 17954 "name": "Relm's Sketching", 17955 17955 "quantity": 1, 17956 - "raw": "1x Relm's Sketching (fin) 67", 17956 + "raw": "1x Relm's Sketching (fin) 67 [Copy]", 17957 17957 "setCode": "FIN", 17958 17958 "tags": [ 17959 17959 "Copy", ··· 17963 17963 "collectorNumber": "192", 17964 17964 "name": "Replication Technique", 17965 17965 "quantity": 1, 17966 - "raw": "1x Replication Technique (m3c) 192", 17966 + "raw": "1x Replication Technique (m3c) 192 [Copy]", 17967 17967 "setCode": "M3C", 17968 17968 "tags": [ 17969 17969 "Copy", ··· 17973 17973 "collectorNumber": "145", 17974 17974 "name": "Archmage Emeritus", 17975 17975 "quantity": 1, 17976 - "raw": "1x Archmage Emeritus (tdc) 145", 17976 + "raw": "1x Archmage Emeritus (tdc) 145 [Draw]", 17977 17977 "setCode": "TDC", 17978 17978 "tags": [ 17979 17979 "Draw", ··· 17983 17983 "collectorNumber": "30", 17984 17984 "name": "Archmage of Runes", 17985 17985 "quantity": 1, 17986 - "raw": "1x Archmage of Runes (fdn) 30", 17986 + "raw": "1x Archmage of Runes (fdn) 30 [Draw]", 17987 17987 "setCode": "FDN", 17988 17988 "tags": [ 17989 17989 "Draw", ··· 17993 17993 "collectorNumber": "205", 17994 17994 "name": "Ashling's Command", 17995 17995 "quantity": 1, 17996 - "raw": "1x Ashling's Command (ecl) 205", 17996 + "raw": "1x Ashling's Command (ecl) 205 [Draw]", 17997 17997 "setCode": "ECL", 17998 17998 "tags": [ 17999 17999 "Draw", ··· 18003 18003 "collectorNumber": "206", 18004 18004 "name": "Big Score", 18005 18005 "quantity": 1, 18006 - "raw": "1x Big Score (tdc) 206", 18006 + "raw": "1x Big Score (tdc) 206 [Draw]", 18007 18007 "setCode": "TDC", 18008 18008 "tags": [ 18009 18009 "Draw", ··· 18013 18013 "collectorNumber": "150", 18014 18014 "name": "Deep Analysis", 18015 18015 "quantity": 1, 18016 - "raw": "1x Deep Analysis (tdc) 150", 18016 + "raw": "1x Deep Analysis (tdc) 150 [Draw]", 18017 18017 "setCode": "TDC", 18018 18018 "tags": [ 18019 18019 "Draw", ··· 18023 18023 "collectorNumber": "115", 18024 18024 "name": "Dig Through Time", 18025 18025 "quantity": 1, 18026 - "raw": "1x Dig Through Time (dsc) 115", 18026 + "raw": "1x Dig Through Time (dsc) 115 [Draw]", 18027 18027 "setCode": "DSC", 18028 18028 "tags": [ 18029 18029 "Draw", ··· 18033 18033 "collectorNumber": "220", 18034 18034 "name": "Drawn from Dreams", 18035 18035 "quantity": 1, 18036 - "raw": "1x Drawn from Dreams (ncc) 220", 18036 + "raw": "1x Drawn from Dreams (ncc) 220 [Draw]", 18037 18037 "setCode": "NCC", 18038 18038 "tags": [ 18039 18039 "Draw", ··· 18043 18043 "collectorNumber": "203", 18044 18044 "name": "Flame of Anor", 18045 18045 "quantity": 1, 18046 - "raw": "1x Flame of Anor (ltr) 203", 18046 + "raw": "1x Flame of Anor (ltr) 203 [Draw]", 18047 18047 "setCode": "LTR", 18048 18048 "tags": [ 18049 18049 "Draw", ··· 18053 18053 "collectorNumber": "GRN-178", 18054 18054 "name": "Hypothesizzle", 18055 18055 "quantity": 1, 18056 - "raw": "1x Hypothesizzle (plst) GRN-178", 18056 + "raw": "1x Hypothesizzle (plst) GRN-178 [Draw,Removal]", 18057 18057 "setCode": "PLST", 18058 18058 "tags": [ 18059 18059 "Draw", ··· 18064 18064 "collectorNumber": "60", 18065 18065 "name": "Lórien Revealed", 18066 18066 "quantity": 1, 18067 - "raw": "1x Lórien Revealed (ltr) 60", 18067 + "raw": "1x Lórien Revealed (ltr) 60 [Draw]", 18068 18068 "setCode": "LTR", 18069 18069 "tags": [ 18070 18070 "Draw", ··· 18074 18074 "collectorNumber": "63", 18075 18075 "name": "Memories Returning", 18076 18076 "quantity": 1, 18077 - "raw": "1x Memories Returning (fin) 63", 18077 + "raw": "1x Memories Returning (fin) 63 [Draw]", 18078 18078 "setCode": "FIN", 18079 18079 "tags": [ 18080 18080 "Draw", ··· 18084 18084 "collectorNumber": "75", 18085 18085 "name": "Memory Deluge", 18086 18086 "quantity": 1, 18087 - "raw": "1x Memory Deluge (inr) 75", 18087 + "raw": "1x Memory Deluge (inr) 75 [Draw]", 18088 18088 "setCode": "INR", 18089 18089 "tags": [ 18090 18090 "Draw", ··· 18094 18094 "collectorNumber": "120", 18095 18095 "name": "Pirate's Pillage", 18096 18096 "quantity": 1, 18097 - "raw": "1x Pirate's Pillage (2x2) 120", 18097 + "raw": "1x Pirate's Pillage (2x2) 120 [Draw]", 18098 18098 "setCode": "2X2", 18099 18099 "tags": [ 18100 18100 "Draw", ··· 18104 18104 "collectorNumber": "74", 18105 18105 "name": "Scattered Thoughts", 18106 18106 "quantity": 1, 18107 - "raw": "1x Scattered Thoughts (vow) 74", 18107 + "raw": "1x Scattered Thoughts (vow) 74 [Draw]", 18108 18108 "setCode": "VOW", 18109 18109 "tags": [ 18110 18110 "Draw", ··· 18114 18114 "collectorNumber": "76", 18115 18115 "name": "Sea Gate Restoration // Sea Gate, Reborn", 18116 18116 "quantity": 1, 18117 - "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76", 18117 + "raw": "1x Sea Gate Restoration // Sea Gate, Reborn (znr) 76 [Draw]", 18118 18118 "setCode": "ZNR", 18119 18119 "tags": [ 18120 18120 "Draw", ··· 18124 18124 "collectorNumber": "80", 18125 18125 "name": "Silundi Vision // Silundi Isle", 18126 18126 "quantity": 1, 18127 - "raw": "1x Silundi Vision // Silundi Isle (znr) 80", 18127 + "raw": "1x Silundi Vision // Silundi Isle (znr) 80 [Draw]", 18128 18128 "setCode": "ZNR", 18129 18129 "tags": [ 18130 18130 "Draw", ··· 18134 18134 "collectorNumber": "244", 18135 18135 "name": "Tellah, Great Sage", 18136 18136 "quantity": 1, 18137 - "raw": "1x Tellah, Great Sage (fin) 244", 18137 + "raw": "1x Tellah, Great Sage (fin) 244 [Draw]", 18138 18138 "setCode": "FIN", 18139 18139 "tags": [ 18140 18140 "Draw", ··· 18144 18144 "collectorNumber": "164", 18145 18145 "name": "Unexpected Windfall", 18146 18146 "quantity": 1, 18147 - "raw": "1x Unexpected Windfall (afr) 164", 18147 + "raw": "1x Unexpected Windfall (afr) 164 [Draw]", 18148 18148 "setCode": "AFR", 18149 18149 "tags": [ 18150 18150 "Draw", ··· 18154 18154 "collectorNumber": "ZNR-174", 18155 18155 "name": "Valakut Awakening // Valakut Stoneforge", 18156 18156 "quantity": 1, 18157 - "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174", 18157 + "raw": "1x Valakut Awakening // Valakut Stoneforge (plst) ZNR-174 [Draw]", 18158 18158 "setCode": "PLST", 18159 18159 "tags": [ 18160 18160 "Draw", ··· 18164 18164 "collectorNumber": "154", 18165 18165 "name": "Arcane Bombardment", 18166 18166 "quantity": 1, 18167 - "raw": "1x Arcane Bombardment (otc) 154", 18167 + "raw": "1x Arcane Bombardment (otc) 154 [Greed]", 18168 18168 "setCode": "OTC", 18169 18169 "tags": [ 18170 18170 "Greed", ··· 18174 18174 "collectorNumber": "249", 18175 18175 "name": "Chimil, the Inner Sun", 18176 18176 "quantity": 1, 18177 - "raw": "1x Chimil, the Inner Sun (lci) 249", 18177 + "raw": "1x Chimil, the Inner Sun (lci) 249 [Greed]", 18178 18178 "setCode": "LCI", 18179 18179 "tags": [ 18180 18180 "Greed", ··· 18184 18184 "collectorNumber": "267", 18185 18185 "name": "Double Vision", 18186 18186 "quantity": 1, 18187 - "raw": "1x Double Vision (ncc) 267", 18187 + "raw": "1x Double Vision (ncc) 267 [Greed]", 18188 18188 "setCode": "NCC", 18189 18189 "tags": [ 18190 18190 "Greed", ··· 18194 18194 "collectorNumber": "22", 18195 18195 "name": "Fury Storm", 18196 18196 "quantity": 1, 18197 - "raw": "1x Fury Storm (c18) 22", 18197 + "raw": "1x Fury Storm (c18) 22 [Greed]", 18198 18198 "setCode": "C18", 18199 18199 "tags": [ 18200 18200 "Greed", ··· 18204 18204 "collectorNumber": "132", 18205 18205 "name": "Harmonic Prodigy", 18206 18206 "quantity": 1, 18207 - "raw": "1x Harmonic Prodigy (mh2) 132", 18207 + "raw": "1x Harmonic Prodigy (mh2) 132 [Greed]", 18208 18208 "setCode": "MH2", 18209 18209 "tags": [ 18210 18210 "Greed", ··· 18214 18214 "collectorNumber": "59", 18215 18215 "name": "Jin-Gitaxias, Progress Tyrant", 18216 18216 "quantity": 1, 18217 - "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59", 18217 + "raw": "1x Jin-Gitaxias, Progress Tyrant (neo) 59 [Greed]", 18218 18218 "setCode": "NEO", 18219 18219 "tags": [ 18220 18220 "Greed", ··· 18224 18224 "collectorNumber": "223", 18225 18225 "name": "Mana Geyser", 18226 18226 "quantity": 1, 18227 - "raw": "1x Mana Geyser (tdc) 223", 18227 + "raw": "1x Mana Geyser (tdc) 223 [Greed]", 18228 18228 "setCode": "TDC", 18229 18229 "tags": [ 18230 18230 "Greed", ··· 18234 18234 "collectorNumber": "162", 18235 18235 "name": "Summon: G.F. Cerberus", 18236 18236 "quantity": 1, 18237 - "raw": "1x Summon: G.F. Cerberus (fin) 162", 18237 + "raw": "1x Summon: G.F. Cerberus (fin) 162 [Greed]", 18238 18238 "setCode": "FIN", 18239 18239 "tags": [ 18240 18240 "Greed", ··· 18244 18244 "collectorNumber": "180", 18245 18245 "name": "Sunbird's Invocation", 18246 18246 "quantity": 1, 18247 - "raw": "1x Sunbird's Invocation (c21) 180", 18247 + "raw": "1x Sunbird's Invocation (c21) 180 [Greed]", 18248 18248 "setCode": "C21", 18249 18249 "tags": [ 18250 18250 "Greed", ··· 18254 18254 "collectorNumber": "153", 18255 18255 "name": "Cascade Bluffs", 18256 18256 "quantity": 1, 18257 - "raw": "1x Cascade Bluffs (eoc) 153", 18257 + "raw": "1x Cascade Bluffs (eoc) 153 [Land]", 18258 18258 "setCode": "EOC", 18259 18259 "tags": [ 18260 18260 "Land", ··· 18264 18264 "collectorNumber": "59", 18265 18265 "name": "Command Tower", 18266 18266 "quantity": 1, 18267 - "raw": "1x Command Tower (ecc) 59", 18267 + "raw": "1x Command Tower (ecc) 59 [Land]", 18268 18268 "setCode": "ECC", 18269 18269 "tags": [ 18270 18270 "Land", ··· 18274 18274 "collectorNumber": "238", 18275 18275 "name": "Fiery Islet", 18276 18276 "quantity": 1, 18277 - "raw": "1x Fiery Islet (mh1) 238", 18277 + "raw": "1x Fiery Islet (mh1) 238 [Land]", 18278 18278 "setCode": "MH1", 18279 18279 "tags": [ 18280 18280 "Land", ··· 18284 18284 "collectorNumber": "158", 18285 18285 "name": "Frostboil Snarl", 18286 18286 "quantity": 1, 18287 - "raw": "1x Frostboil Snarl (drc) 158", 18287 + "raw": "1x Frostboil Snarl (drc) 158 [Land]", 18288 18288 "setCode": "DRC", 18289 18289 "tags": [ 18290 18290 "Land", ··· 18294 18294 "collectorNumber": "270", 18295 18295 "name": "Island", 18296 18296 "quantity": 9, 18297 - "raw": "9x Island (ecl) 270", 18297 + "raw": "9x Island (ecl) 270 [Land]", 18298 18298 "setCode": "ECL", 18299 18299 "tags": [ 18300 18300 "Land", ··· 18304 18304 "collectorNumber": "350", 18305 18305 "name": "Izzet Boilerworks", 18306 18306 "quantity": 1, 18307 - "raw": "1x Izzet Boilerworks (m3c) 350", 18307 + "raw": "1x Izzet Boilerworks (m3c) 350 [Land]", 18308 18308 "setCode": "M3C", 18309 18309 "tags": [ 18310 18310 "Land", ··· 18314 18314 "collectorNumber": "261", 18315 18315 "name": "Mistrise Village", 18316 18316 "quantity": 1, 18317 - "raw": "1x Mistrise Village (tdm) 261", 18317 + "raw": "1x Mistrise Village (tdm) 261 [Land]", 18318 18318 "setCode": "TDM", 18319 18319 "tags": [ 18320 18320 "Land", ··· 18324 18324 "collectorNumber": "272", 18325 18325 "name": "Mountain", 18326 18326 "quantity": 9, 18327 - "raw": "9x Mountain (ecl) 272", 18327 + "raw": "9x Mountain (ecl) 272 [Land]", 18328 18328 "setCode": "ECL", 18329 18329 "tags": [ 18330 18330 "Land", ··· 18334 18334 "collectorNumber": "386", 18335 18335 "name": "Reliquary Tower", 18336 18336 "quantity": 1, 18337 - "raw": "1x Reliquary Tower (tdc) 386", 18337 + "raw": "1x Reliquary Tower (tdc) 386 [Land]", 18338 18338 "setCode": "TDC", 18339 18339 "tags": [ 18340 18340 "Land", ··· 18344 18344 "collectorNumber": "ZNR-264", 18345 18345 "name": "Riverglide Pathway // Lavaglide Pathway", 18346 18346 "quantity": 1, 18347 - "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264", 18347 + "raw": "1x Riverglide Pathway // Lavaglide Pathway (plst) ZNR-264 [Land]", 18348 18348 "setCode": "PLST", 18349 18349 "tags": [ 18350 18350 "Land", ··· 18354 18354 "collectorNumber": "260", 18355 18355 "name": "Riverpyre Verge", 18356 18356 "quantity": 1, 18357 - "raw": "1x Riverpyre Verge (dft) 260", 18357 + "raw": "1x Riverpyre Verge (dft) 260 [Land]", 18358 18358 "setCode": "DFT", 18359 18359 "tags": [ 18360 18360 "Land", ··· 18364 18364 "collectorNumber": "254", 18365 18365 "name": "Scalding Tarn", 18366 18366 "quantity": 1, 18367 - "raw": "1x Scalding Tarn (mh2) 254", 18367 + "raw": "1x Scalding Tarn (mh2) 254 [Land]", 18368 18368 "setCode": "MH2", 18369 18369 "tags": [ 18370 18370 "Land", ··· 18374 18374 "collectorNumber": "287", 18375 18375 "name": "Scavenger Grounds", 18376 18376 "quantity": 1, 18377 - "raw": "1x Scavenger Grounds (mkc) 287", 18377 + "raw": "1x Scavenger Grounds (mkc) 287 [Land]", 18378 18378 "setCode": "MKC", 18379 18379 "tags": [ 18380 18380 "Land", ··· 18384 18384 "collectorNumber": "179", 18385 18385 "name": "Shivan Reef", 18386 18386 "quantity": 1, 18387 - "raw": "1x Shivan Reef (eoc) 179", 18387 + "raw": "1x Shivan Reef (eoc) 179 [Land]", 18388 18388 "setCode": "EOC", 18389 18389 "tags": [ 18390 18390 "Land", ··· 18394 18394 "collectorNumber": "267", 18395 18395 "name": "Steam Vents", 18396 18396 "quantity": 1, 18397 - "raw": "1x Steam Vents (ecl) 267", 18397 + "raw": "1x Steam Vents (ecl) 267 [Land]", 18398 18398 "setCode": "ECL", 18399 18399 "tags": [ 18400 18400 "Land", ··· 18404 18404 "collectorNumber": "285", 18405 18405 "name": "Stormcarved Coast", 18406 18406 "quantity": 1, 18407 - "raw": "1x Stormcarved Coast (inr) 285", 18407 + "raw": "1x Stormcarved Coast (inr) 285 [Land]", 18408 18408 "setCode": "INR", 18409 18409 "tags": [ 18410 18410 "Land", ··· 18414 18414 "collectorNumber": "184", 18415 18415 "name": "Sulfur Falls", 18416 18416 "quantity": 1, 18417 - "raw": "1x Sulfur Falls (eoc) 184", 18417 + "raw": "1x Sulfur Falls (eoc) 184 [Land]", 18418 18418 "setCode": "EOC", 18419 18419 "tags": [ 18420 18420 "Land", ··· 18424 18424 "collectorNumber": "434", 18425 18425 "name": "Training Center", 18426 18426 "quantity": 1, 18427 - "raw": "1x Training Center (cmm) 434", 18427 + "raw": "1x Training Center (cmm) 434 [Land]", 18428 18428 "setCode": "CMM", 18429 18429 "tags": [ 18430 18430 "Land", ··· 18434 18434 "collectorNumber": "161", 18435 18435 "name": "Omniscience", 18436 18436 "quantity": 1, 18437 - "raw": "1x Omniscience (fdn) 161", 18437 + "raw": "1x Omniscience (fdn) 161 [Okay Pal]", 18438 18438 "setCode": "FDN", 18439 18439 "tags": [ 18440 18440 "Okay Pal", ··· 18444 18444 "collectorNumber": "171", 18445 18445 "name": "Creative Outburst", 18446 18446 "quantity": 1, 18447 - "raw": "1x Creative Outburst (stx) 171", 18447 + "raw": "1x Creative Outburst (stx) 171 [Ramp,Removal,Draw]", 18448 18448 "setCode": "STX", 18449 18449 "tags": [ 18450 18450 "Ramp", ··· 18456 18456 "collectorNumber": "182", 18457 18457 "name": "Elemental Masterpiece", 18458 18458 "quantity": 1, 18459 - "raw": "1x Elemental Masterpiece (stx) 182", 18459 + "raw": "1x Elemental Masterpiece (stx) 182 [Ramp,Tokens]", 18460 18460 "setCode": "STX", 18461 18461 "tags": [ 18462 18462 "Ramp", ··· 18467 18467 "collectorNumber": "275", 18468 18468 "name": "Hedron Archive", 18469 18469 "quantity": 1, 18470 - "raw": "1x Hedron Archive (blc) 275", 18470 + "raw": "1x Hedron Archive (blc) 275 [Ramp]", 18471 18471 "setCode": "BLC", 18472 18472 "tags": [ 18473 18473 "Ramp", ··· 18477 18477 "collectorNumber": "296", 18478 18478 "name": "Magma Opus", 18479 18479 "quantity": 1, 18480 - "raw": "1x Magma Opus (tdc) 296", 18480 + "raw": "1x Magma Opus (tdc) 296 [Ramp,Draw,Tokens,Removal]", 18481 18481 "setCode": "TDC", 18482 18482 "tags": [ 18483 18483 "Ramp", ··· 18490 18490 "collectorNumber": "340", 18491 18491 "name": "Sisay's Ring", 18492 18492 "quantity": 1, 18493 - "raw": "1x Sisay's Ring (cmr) 340", 18493 + "raw": "1x Sisay's Ring (cmr) 340 [Ramp]", 18494 18494 "setCode": "CMR", 18495 18495 "tags": [ 18496 18496 "Ramp", ··· 18500 18500 "collectorNumber": "57", 18501 18501 "name": "Sol Ring", 18502 18502 "quantity": 1, 18503 - "raw": "1x Sol Ring (ecc) 57", 18503 + "raw": "1x Sol Ring (ecc) 57 [Ramp]", 18504 18504 "setCode": "ECC", 18505 18505 "tags": [ 18506 18506 "Ramp", ··· 18510 18510 "collectorNumber": "338", 18511 18511 "name": "Stonespeaker Crystal", 18512 18512 "quantity": 1, 18513 - "raw": "1x Stonespeaker Crystal (clb) 338", 18513 + "raw": "1x Stonespeaker Crystal (clb) 338 [Ramp,Removal]", 18514 18514 "setCode": "CLB", 18515 18515 "tags": [ 18516 18516 "Ramp", ··· 18521 18521 "collectorNumber": "290", 18522 18522 "name": "Thran Dynamo", 18523 18523 "quantity": 1, 18524 - "raw": "1x Thran Dynamo (blc) 290", 18524 + "raw": "1x Thran Dynamo (blc) 290 [Ramp]", 18525 18525 "setCode": "BLC", 18526 18526 "tags": [ 18527 18527 "Ramp", ··· 18531 18531 "collectorNumber": "280", 18532 18532 "name": "Ur-Golem's Eye", 18533 18533 "quantity": 1, 18534 - "raw": "1x Ur-Golem's Eye (c14) 280", 18534 + "raw": "1x Ur-Golem's Eye (c14) 280 [Ramp]", 18535 18535 "setCode": "C14", 18536 18536 "tags": [ 18537 18537 "Ramp", ··· 18541 18541 "collectorNumber": "285", 18542 18542 "name": "Archaeomancer", 18543 18543 "quantity": 1, 18544 - "raw": "1x Archaeomancer (j25) 285", 18544 + "raw": "1x Archaeomancer (j25) 285 [Recursion]", 18545 18545 "setCode": "J25", 18546 18546 "tags": [ 18547 18547 "Recursion", ··· 18551 18551 "collectorNumber": "128", 18552 18552 "name": "Ardent Elementalist", 18553 18553 "quantity": 1, 18554 - "raw": "1x Ardent Elementalist (mid) 128", 18554 + "raw": "1x Ardent Elementalist (mid) 128 [Recursion]", 18555 18555 "setCode": "MID", 18556 18556 "tags": [ 18557 18557 "Recursion", ··· 18561 18561 "collectorNumber": "175", 18562 18562 "name": "Mizzix's Mastery", 18563 18563 "quantity": 1, 18564 - "raw": "1x Mizzix's Mastery (otc) 175", 18564 + "raw": "1x Mizzix's Mastery (otc) 175 [Recursion]", 18565 18565 "setCode": "OTC", 18566 18566 "tags": [ 18567 18567 "Recursion", ··· 18571 18571 "collectorNumber": "246", 18572 18572 "name": "Pinnacle Monk // Mystic Peak", 18573 18573 "quantity": 1, 18574 - "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246", 18574 + "raw": "1x Pinnacle Monk // Mystic Peak (mh3) 246 [Recursion]", 18575 18575 "setCode": "MH3", 18576 18576 "tags": [ 18577 18577 "Recursion", ··· 18581 18581 "collectorNumber": "109", 18582 18582 "name": "Aether Gale", 18583 18583 "quantity": 1, 18584 - "raw": "1x Aether Gale (dsc) 109", 18584 + "raw": "1x Aether Gale (dsc) 109 [Removal]", 18585 18585 "setCode": "DSC", 18586 18586 "tags": [ 18587 18587 "Removal", ··· 18591 18591 "collectorNumber": "152", 18592 18592 "name": "All Is Dust", 18593 18593 "quantity": 1, 18594 - "raw": "1x All Is Dust (m3c) 152", 18594 + "raw": "1x All Is Dust (m3c) 152 [Removal]", 18595 18595 "setCode": "M3C", 18596 18596 "tags": [ 18597 18597 "Removal", ··· 18601 18601 "collectorNumber": "146", 18602 18602 "name": "Baral's Expertise", 18603 18603 "quantity": 1, 18604 - "raw": "1x Baral's Expertise (tdc) 146", 18604 + "raw": "1x Baral's Expertise (tdc) 146 [Removal]", 18605 18605 "setCode": "TDC", 18606 18606 "tags": [ 18607 18607 "Removal", ··· 18611 18611 "collectorNumber": "160", 18612 18612 "name": "Blasphemous Act", 18613 18613 "quantity": 1, 18614 - "raw": "1x Blasphemous Act (dsc) 160", 18614 + "raw": "1x Blasphemous Act (dsc) 160 [Removal]", 18615 18615 "setCode": "DSC", 18616 18616 "tags": [ 18617 18617 "Removal", ··· 18621 18621 "collectorNumber": "509", 18622 18622 "name": "Call Forth the Tempest", 18623 18623 "quantity": 1, 18624 - "raw": "1x Call Forth the Tempest (ltc) 509", 18624 + "raw": "1x Call Forth the Tempest (ltc) 509 [Removal]", 18625 18625 "setCode": "LTC", 18626 18626 "tags": [ 18627 18627 "Removal", ··· 18631 18631 "collectorNumber": "160", 18632 18632 "name": "Chaos Warp", 18633 18633 "quantity": 1, 18634 - "raw": "1x Chaos Warp (otc) 160", 18634 + "raw": "1x Chaos Warp (otc) 160 [Removal]", 18635 18635 "setCode": "OTC", 18636 18636 "tags": [ 18637 18637 "Removal", ··· 18641 18641 "collectorNumber": "114", 18642 18642 "name": "Counterspell", 18643 18643 "quantity": 1, 18644 - "raw": "1x Counterspell (dsc) 114", 18644 + "raw": "1x Counterspell (dsc) 114 [Removal]", 18645 18645 "setCode": "DSC", 18646 18646 "tags": [ 18647 18647 "Removal", ··· 18651 18651 "collectorNumber": "226", 18652 18652 "name": "Fiery Confluence", 18653 18653 "quantity": 1, 18654 - "raw": "1x Fiery Confluence (lcc) 226", 18654 + "raw": "1x Fiery Confluence (lcc) 226 [Removal]", 18655 18655 "setCode": "LCC", 18656 18656 "tags": [ 18657 18657 "Removal", ··· 18661 18661 "collectorNumber": "104", 18662 18662 "name": "Flood of Tears", 18663 18663 "quantity": 1, 18664 - "raw": "1x Flood of Tears (voc) 104", 18664 + "raw": "1x Flood of Tears (voc) 104 [Removal]", 18665 18665 "setCode": "VOC", 18666 18666 "tags": [ 18667 18667 "Removal", ··· 18671 18671 "collectorNumber": "207", 18672 18672 "name": "Ill-Timed Explosion", 18673 18673 "quantity": 1, 18674 - "raw": "1x Ill-Timed Explosion (mkm) 207", 18674 + "raw": "1x Ill-Timed Explosion (mkm) 207 [Removal]", 18675 18675 "setCode": "MKM", 18676 18676 "tags": [ 18677 18677 "Removal", ··· 18681 18681 "collectorNumber": "108", 18682 18682 "name": "Mystic Confluence", 18683 18683 "quantity": 1, 18684 - "raw": "1x Mystic Confluence (cmm) 108", 18684 + "raw": "1x Mystic Confluence (cmm) 108 [Removal]", 18685 18685 "setCode": "CMM", 18686 18686 "tags": [ 18687 18687 "Removal", ··· 18691 18691 "collectorNumber": "265", 18692 18692 "name": "Prophetic Bolt", 18693 18693 "quantity": 1, 18694 - "raw": "1x Prophetic Bolt (2x2) 265", 18694 + "raw": "1x Prophetic Bolt (2x2) 265 [Removal,Draw]", 18695 18695 "setCode": "2X2", 18696 18696 "tags": [ 18697 18697 "Removal", ··· 18702 18702 "collectorNumber": "212", 18703 18703 "name": "Ral's Outburst", 18704 18704 "quantity": 1, 18705 - "raw": "1x Ral's Outburst (war) 212", 18705 + "raw": "1x Ral's Outburst (war) 212 [Removal]", 18706 18706 "setCode": "WAR", 18707 18707 "tags": [ 18708 18708 "Removal", ··· 18712 18712 "collectorNumber": "33", 18713 18713 "name": "Reckless Endeavor", 18714 18714 "quantity": 1, 18715 - "raw": "1x Reckless Endeavor (afc) 33", 18715 + "raw": "1x Reckless Endeavor (afc) 33 [Removal]", 18716 18716 "setCode": "AFC", 18717 18717 "tags": [ 18718 18718 "Removal", ··· 18722 18722 "collectorNumber": "241", 18723 18723 "name": "Sink into Stupor // Soporific Springs", 18724 18724 "quantity": 1, 18725 - "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241", 18725 + "raw": "1x Sink into Stupor // Soporific Springs (mh3) 241 [Removal]", 18726 18726 "setCode": "MH3", 18727 18727 "tags": [ 18728 18728 "Removal", ··· 18732 18732 "collectorNumber": "182", 18733 18733 "name": "Volcanic Vision", 18734 18734 "quantity": 1, 18735 - "raw": "1x Volcanic Vision (c21) 182", 18735 + "raw": "1x Volcanic Vision (c21) 182 [Removal,Recursion]", 18736 18736 "setCode": "C21", 18737 18737 "tags": [ 18738 18738 "Removal", ··· 18743 18743 "collectorNumber": "92", 18744 18744 "name": "Rite of the Dragoncaller", 18745 18745 "quantity": 1, 18746 - "raw": "1x Rite of the Dragoncaller (fdn) 92", 18746 + "raw": "1x Rite of the Dragoncaller (fdn) 92 [Tokens]", 18747 18747 "setCode": "FDN", 18748 18748 "tags": [ 18749 18749 "Tokens", ··· 18753 18753 "collectorNumber": "127", 18754 18754 "name": "Shark Typhoon", 18755 18755 "quantity": 1, 18756 - "raw": "1x Shark Typhoon (dsc) 127", 18756 + "raw": "1x Shark Typhoon (dsc) 127 [Tokens]", 18757 18757 "setCode": "DSC", 18758 18758 "tags": [ 18759 18759 "Tokens", ··· 18772 18772 "collectorNumber": "567", 18773 18773 "name": "Tifa Lockhart", 18774 18774 "quantity": 1, 18775 - "raw": "1x Tifa Lockhart (fin) 567 *F* ^Have,#37d67a^", 18775 + "raw": "1x Tifa Lockhart (fin) 567 *F* [Commander{top}] ^Have,#37d67a^", 18776 18776 "setCode": "FIN", 18777 18777 "tags": [], 18778 18778 }, ··· 18783 18783 "collectorNumber": "151", 18784 18784 "name": "Archdruid's Charm", 18785 18785 "quantity": 1, 18786 - "raw": "1x Archdruid's Charm (mkm) 151 ^Have,#37d67a^", 18786 + "raw": "1x Archdruid's Charm (mkm) 151 [Instant] ^Have,#37d67a^", 18787 18787 "setCode": "MKM", 18788 18788 "tags": [ 18789 18789 "Instant", ··· 18793 18793 "collectorNumber": "ZNR-180", 18794 18794 "name": "Bala Ged Recovery // Bala Ged Sanctuary", 18795 18795 "quantity": 1, 18796 - "raw": "1x Bala Ged Recovery // Bala Ged Sanctuary (plst) ZNR-180 ^Have,#37d67a^", 18796 + "raw": "1x Bala Ged Recovery // Bala Ged Sanctuary (plst) ZNR-180 [Land] ^Have,#37d67a^", 18797 18797 "setCode": "PLST", 18798 18798 "tags": [ 18799 18799 "Land", ··· 18803 18803 "collectorNumber": "300", 18804 18804 "name": "Basilisk Collar", 18805 18805 "quantity": 1, 18806 - "raw": "1x Basilisk Collar (clb) 300 ^Have,#37d67a^", 18806 + "raw": "1x Basilisk Collar (clb) 300 [Artifact] ^Have,#37d67a^", 18807 18807 "setCode": "CLB", 18808 18808 "tags": [ 18809 18809 "Artifact", ··· 18813 18813 "collectorNumber": "175", 18814 18814 "name": "Berserk", 18815 18815 "quantity": 1, 18816 - "raw": "1x Berserk (cn2) 175 ^Have,#37d67a^", 18816 + "raw": "1x Berserk (cn2) 175 [Instant] ^Have,#37d67a^", 18817 18817 "setCode": "CN2", 18818 18818 "tags": [ 18819 18819 "Instant", ··· 18823 18823 "collectorNumber": "87", 18824 18824 "name": "Biophagus", 18825 18825 "quantity": 1, 18826 - "raw": "1x Biophagus (40k) 87 ^Have,#37d67a^", 18826 + "raw": "1x Biophagus (40k) 87 [Creature] ^Have,#37d67a^", 18827 18827 "setCode": "40K", 18828 18828 "tags": [ 18829 18829 "Creature", ··· 18833 18833 "collectorNumber": "483", 18834 18834 "name": "Birds of Paradise", 18835 18835 "quantity": 1, 18836 - "raw": "1x Birds of Paradise (fic) 483 *F* ^Have,#37d67a^", 18836 + "raw": "1x Birds of Paradise (fic) 483 *F* [Creature] ^Have,#37d67a^", 18837 18837 "setCode": "FIC", 18838 18838 "tags": [ 18839 18839 "Creature", ··· 18843 18843 "collectorNumber": "171", 18844 18844 "name": "Blanchwood Armor", 18845 18845 "quantity": 1, 18846 - "raw": "1x Blanchwood Armor (bro) 171 ^Have,#37d67a^", 18846 + "raw": "1x Blanchwood Armor (bro) 171 [Enchantment] ^Have,#37d67a^", 18847 18847 "setCode": "BRO", 18848 18848 "tags": [ 18849 18849 "Enchantment", ··· 18853 18853 "collectorNumber": "285", 18854 18854 "name": "Branching Evolution", 18855 18855 "quantity": 1, 18856 - "raw": "1x Branching Evolution (mh3) 285 ^Have,#37d67a^", 18856 + "raw": "1x Branching Evolution (mh3) 285 [Enchantment] ^Have,#37d67a^", 18857 18857 "setCode": "MH3", 18858 18858 "tags": [ 18859 18859 "Enchantment", ··· 18863 18863 "collectorNumber": "249", 18864 18864 "name": "Bridgeworks Battle // Tanglespan Bridgeworks", 18865 18865 "quantity": 1, 18866 - "raw": "1x Bridgeworks Battle // Tanglespan Bridgeworks (mh3) 249 ^Have,#37d67a^", 18866 + "raw": "1x Bridgeworks Battle // Tanglespan Bridgeworks (mh3) 249 [Land] ^Have,#37d67a^", 18867 18867 "setCode": "MH3", 18868 18868 "tags": [ 18869 18869 "Land", ··· 18873 18873 "collectorNumber": "375", 18874 18874 "name": "Champion's Helm", 18875 18875 "quantity": 1, 18876 - "raw": "1x Champion's Helm (cmm) 375 ^Have,#37d67a^", 18876 + "raw": "1x Champion's Helm (cmm) 375 [Artifact] ^Have,#37d67a^", 18877 18877 "setCode": "CMM", 18878 18878 "tags": [ 18879 18879 "Artifact", ··· 18883 18883 "collectorNumber": "178", 18884 18884 "name": "Chocobo Kick", 18885 18885 "quantity": 1, 18886 - "raw": "1x Chocobo Kick (fin) 178 ^Have,#37d67a^", 18886 + "raw": "1x Chocobo Kick (fin) 178 [Sorcery] ^Have,#37d67a^", 18887 18887 "setCode": "FIN", 18888 18888 "tags": [ 18889 18889 "Sorcery", ··· 18893 18893 "collectorNumber": "349", 18894 18894 "name": "Command Beacon", 18895 18895 "quantity": 1, 18896 - "raw": "1x Command Beacon (cmr) 349 ^Have,#37d67a^", 18896 + "raw": "1x Command Beacon (cmr) 349 [Land] ^Have,#37d67a^", 18897 18897 "setCode": "CMR", 18898 18898 "tags": [ 18899 18899 "Land", ··· 18903 18903 "collectorNumber": "25", 18904 18904 "name": "Court of Garenbrig", 18905 18905 "quantity": 1, 18906 - "raw": "1x Court of Garenbrig (woc) 25 ^Have,#37d67a^", 18906 + "raw": "1x Court of Garenbrig (woc) 25 [Enchantment] ^Have,#37d67a^", 18907 18907 "setCode": "WOC", 18908 18908 "tags": [ 18909 18909 "Enchantment", ··· 18913 18913 "collectorNumber": "154", 18914 18914 "name": "Crop Rotation", 18915 18915 "quantity": 1, 18916 - "raw": "1x Crop Rotation (dmr) 154 ^Have,#37d67a^", 18916 + "raw": "1x Crop Rotation (dmr) 154 [Instant] ^Have,#37d67a^", 18917 18917 "setCode": "DMR", 18918 18918 "tags": [ 18919 18919 "Instant", ··· 18923 18923 "collectorNumber": "889", 18924 18924 "name": "Cultivate", 18925 18925 "quantity": 1, 18926 - "raw": "1x Cultivate (cmm) 889 ^Have,#37d67a^", 18926 + "raw": "1x Cultivate (cmm) 889 [Sorcery] ^Have,#37d67a^", 18927 18927 "setCode": "CMM", 18928 18928 "tags": [ 18929 18929 "Sorcery", ··· 18933 18933 "collectorNumber": "160", 18934 18934 "name": "Defiler of Vigor", 18935 18935 "quantity": 1, 18936 - "raw": "1x Defiler of Vigor (dmu) 160 ^Have,#37d67a^", 18936 + "raw": "1x Defiler of Vigor (dmu) 160 [Creature] ^Have,#37d67a^", 18937 18937 "setCode": "DMU", 18938 18938 "tags": [ 18939 18939 "Creature", ··· 18943 18943 "collectorNumber": "158", 18944 18944 "name": "Delighted Halfling", 18945 18945 "quantity": 1, 18946 - "raw": "1x Delighted Halfling (ltr) 158 ^Have,#37d67a^", 18946 + "raw": "1x Delighted Halfling (ltr) 158 [Creature] ^Have,#37d67a^", 18947 18947 "setCode": "LTR", 18948 18948 "tags": [ 18949 18949 "Creature", ··· 18953 18953 "collectorNumber": "277", 18954 18954 "name": "Dryad Arbor", 18955 18955 "quantity": 1, 18956 - "raw": "1x Dryad Arbor (tsr) 277 ^Have,#37d67a^", 18956 + "raw": "1x Dryad Arbor (tsr) 277 [Land] ^Have,#37d67a^", 18957 18957 "setCode": "TSR", 18958 18958 "tags": [ 18959 18959 "Land", ··· 18963 18963 "collectorNumber": "379", 18964 18964 "name": "Emerald Medallion", 18965 18965 "quantity": 1, 18966 - "raw": "1x Emerald Medallion (cmm) 379 ^Have,#37d67a^", 18966 + "raw": "1x Emerald Medallion (cmm) 379 [Artifact] ^Have,#37d67a^", 18967 18967 "setCode": "CMM", 18968 18968 "tags": [ 18969 18969 "Artifact", ··· 18973 18973 "collectorNumber": "105", 18974 18974 "name": "Evolution Sage", 18975 18975 "quantity": 1, 18976 - "raw": "1x Evolution Sage (ecc) 105 ^Have,#37d67a^", 18976 + "raw": "1x Evolution Sage (ecc) 105 [Creature] ^Have,#37d67a^", 18977 18977 "setCode": "ECC", 18978 18978 "tags": [ 18979 18979 "Creature", ··· 18983 18983 "collectorNumber": "244", 18984 18984 "name": "Fabled Passage", 18985 18985 "quantity": 1, 18986 - "raw": "1x Fabled Passage (eld) 244 ^Have,#37d67a^", 18986 + "raw": "1x Fabled Passage (eld) 244 [Land] ^Have,#37d67a^", 18987 18987 "setCode": "ELD", 18988 18988 "tags": [ 18989 18989 "Land", ··· 18993 18993 "collectorNumber": "400", 18994 18994 "name": "Field of Ruin", 18995 18995 "quantity": 1, 18996 - "raw": "1x Field of Ruin (moc) 400 ^Have,#37d67a^", 18996 + "raw": "1x Field of Ruin (moc) 400 [Land] ^Have,#37d67a^", 18997 18997 "setCode": "MOC", 18998 18998 "tags": [ 18999 18999 "Land", ··· 19003 19003 "collectorNumber": "349", 19004 19004 "name": "Forest", 19005 19005 "quantity": 18, 19006 - "raw": "18x Forest (ons) 349 ^Have,#37d67a^", 19006 + "raw": "18x Forest (ons) 349 [Land] ^Have,#37d67a^", 19007 19007 "setCode": "ONS", 19008 19008 "tags": [ 19009 19009 "Land", ··· 19013 19013 "collectorNumber": "304", 19014 19014 "name": "Forgotten Ancient", 19015 19015 "quantity": 1, 19016 - "raw": "1x Forgotten Ancient (fic) 304 ^Have,#37d67a^", 19016 + "raw": "1x Forgotten Ancient (fic) 304 [Creature] ^Have,#37d67a^", 19017 19017 "setCode": "FIC", 19018 19018 "tags": [ 19019 19019 "Creature", ··· 19023 19023 "collectorNumber": "CM2-253", 19024 19024 "name": "Ghost Quarter", 19025 19025 "quantity": 1, 19026 - "raw": "1x Ghost Quarter (plst) CM2-253 ^Have,#37d67a^", 19026 + "raw": "1x Ghost Quarter (plst) CM2-253 [Land] ^Have,#37d67a^", 19027 19027 "setCode": "PLST", 19028 19028 "tags": [ 19029 19029 "Land", ··· 19033 19033 "collectorNumber": "62", 19034 19034 "name": "Guardian Augmenter", 19035 19035 "quantity": 1, 19036 - "raw": "1x Guardian Augmenter (c21) 62 ^Have,#37d67a^", 19036 + "raw": "1x Guardian Augmenter (c21) 62 [Creature] ^Have,#37d67a^", 19037 19037 "setCode": "C21", 19038 19038 "tags": [ 19039 19039 "Creature", ··· 19043 19043 "collectorNumber": "307", 19044 19044 "name": "Hardened Scales", 19045 19045 "quantity": 1, 19046 - "raw": "1x Hardened Scales (fic) 307 ^Have,#37d67a^", 19046 + "raw": "1x Hardened Scales (fic) 307 [Enchantment] ^Have,#37d67a^", 19047 19047 "setCode": "FIC", 19048 19048 "tags": [ 19049 19049 "Enchantment", ··· 19053 19053 "collectorNumber": "C20-173", 19054 19054 "name": "Harmonize", 19055 19055 "quantity": 1, 19056 - "raw": "1x Harmonize (plst) C20-173 ^Have,#37d67a^", 19056 + "raw": "1x Harmonize (plst) C20-173 [Sorcery] ^Have,#37d67a^", 19057 19057 "setCode": "PLST", 19058 19058 "tags": [ 19059 19059 "Sorcery", ··· 19063 19063 "collectorNumber": "1872", 19064 19064 "name": "Heroic Intervention", 19065 19065 "quantity": 1, 19066 - "raw": "1x Heroic Intervention (sld) 1872 *F* ^Have,#37d67a^", 19066 + "raw": "1x Heroic Intervention (sld) 1872 *F* [Instant] ^Have,#37d67a^", 19067 19067 "setCode": "SLD", 19068 19068 "tags": [ 19069 19069 "Instant", ··· 19073 19073 "collectorNumber": "192", 19074 19074 "name": "Hunter's Prowess", 19075 19075 "quantity": 1, 19076 - "raw": "1x Hunter's Prowess (scd) 192 ^Have,#37d67a^", 19076 + "raw": "1x Hunter's Prowess (scd) 192 [Sorcery] ^Have,#37d67a^", 19077 19077 "setCode": "SCD", 19078 19078 "tags": [ 19079 19079 "Sorcery", ··· 19083 19083 "collectorNumber": "180", 19084 19084 "name": "Innkeeper's Talent", 19085 19085 "quantity": 1, 19086 - "raw": "1x Innkeeper's Talent (blb) 180 ^Have,#37d67a^", 19086 + "raw": "1x Innkeeper's Talent (blb) 180 [Enchantment] ^Have,#37d67a^", 19087 19087 "setCode": "BLB", 19088 19088 "tags": [ 19089 19089 "Enchantment", ··· 19093 19093 "collectorNumber": "186", 19094 19094 "name": "Inscription of Abundance", 19095 19095 "quantity": 1, 19096 - "raw": "1x Inscription of Abundance (dsc) 186 ^Have,#37d67a^", 19096 + "raw": "1x Inscription of Abundance (dsc) 186 [Instant] ^Have,#37d67a^", 19097 19097 "setCode": "DSC", 19098 19098 "tags": [ 19099 19099 "Instant", ··· 19103 19103 "collectorNumber": "A25-173", 19104 19104 "name": "Invigorate", 19105 19105 "quantity": 1, 19106 - "raw": "1x Invigorate (plst) A25-173 ^Have,#37d67a^", 19106 + "raw": "1x Invigorate (plst) A25-173 [Instant] ^Have,#37d67a^", 19107 19107 "setCode": "PLST", 19108 19108 "tags": [ 19109 19109 "Instant", ··· 19113 19113 "collectorNumber": "196", 19114 19114 "name": "Kami of Whispered Hopes", 19115 19115 "quantity": 1, 19116 - "raw": "1x Kami of Whispered Hopes (mom) 196 ^Have,#37d67a^", 19116 + "raw": "1x Kami of Whispered Hopes (mom) 196 [Creature] ^Have,#37d67a^", 19117 19117 "setCode": "MOM", 19118 19118 "tags": [ 19119 19119 "Creature", ··· 19123 19123 "collectorNumber": "300", 19124 19124 "name": "Kodama's Reach", 19125 19125 "quantity": 1, 19126 - "raw": "1x Kodama's Reach (cmm) 300 ^Have,#37d67a^", 19126 + "raw": "1x Kodama's Reach (cmm) 300 [Sorcery] ^Have,#37d67a^", 19127 19127 "setCode": "CMM", 19128 19128 "tags": [ 19129 19129 "Sorcery", ··· 19133 19133 "collectorNumber": "379", 19134 19134 "name": "Mithril Coat", 19135 19135 "quantity": 1, 19136 - "raw": "1x Mithril Coat (ltr) 379 ^Have,#37d67a^", 19136 + "raw": "1x Mithril Coat (ltr) 379 [Artifact] ^Have,#37d67a^", 19137 19137 "setCode": "LTR", 19138 19138 "tags": [ 19139 19139 "Artifact", ··· 19143 19143 "collectorNumber": "415", 19144 19144 "name": "Mosswort Bridge", 19145 19145 "quantity": 1, 19146 - "raw": "1x Mosswort Bridge (moc) 415 ^Have,#37d67a^", 19146 + "raw": "1x Mosswort Bridge (moc) 415 [Land] ^Have,#37d67a^", 19147 19147 "setCode": "MOC", 19148 19148 "tags": [ 19149 19149 "Land", ··· 19153 19153 "collectorNumber": "47", 19154 19154 "name": "Nature's Claim", 19155 19155 "quantity": 1, 19156 - "raw": "1x Nature's Claim (fca) 47 ^Have,#37d67a^", 19156 + "raw": "1x Nature's Claim (fca) 47 [Instant] ^Have,#37d67a^", 19157 19157 "setCode": "FCA", 19158 19158 "tags": [ 19159 19159 "Instant", ··· 19163 19163 "collectorNumber": "641", 19164 19164 "name": "Ordeal of Nylea", 19165 19165 "quantity": 1, 19166 - "raw": "1x Ordeal of Nylea (fdn) 641 ^Have,#37d67a^", 19166 + "raw": "1x Ordeal of Nylea (fdn) 641 [Enchantment] ^Have,#37d67a^", 19167 19167 "setCode": "FDN", 19168 19168 "tags": [ 19169 19169 "Enchantment", ··· 19173 19173 "collectorNumber": "201", 19174 19174 "name": "Ouroboroid", 19175 19175 "quantity": 1, 19176 - "raw": "1x Ouroboroid (eoe) 201 ^Have,#37d67a^", 19176 + "raw": "1x Ouroboroid (eoe) 201 [Creature] ^Have,#37d67a^", 19177 19177 "setCode": "EOE", 19178 19178 "tags": [ 19179 19179 "Creature", ··· 19183 19183 "collectorNumber": "198", 19184 19184 "name": "Ozolith, the Shattered Spire", 19185 19185 "quantity": 1, 19186 - "raw": "1x Ozolith, the Shattered Spire (mom) 198 ^Have,#37d67a^", 19186 + "raw": "1x Ozolith, the Shattered Spire (mom) 198 [Artifact] ^Have,#37d67a^", 19187 19187 "setCode": "MOM", 19188 19188 "tags": [ 19189 19189 "Artifact", ··· 19193 19193 "collectorNumber": "92", 19194 19194 "name": "Primal Order", 19195 19195 "quantity": 1, 19196 - "raw": "1x Primal Order (hml) 92 ^Have,#37d67a^", 19196 + "raw": "1x Primal Order (hml) 92 [Enchantment] ^Have,#37d67a^", 19197 19197 "setCode": "HML", 19198 19198 "tags": [ 19199 19199 "Enchantment", ··· 19203 19203 "collectorNumber": "703", 19204 19204 "name": "Quirion Beastcaller", 19205 19205 "quantity": 1, 19206 - "raw": "1x Quirion Beastcaller (j25) 703", 19206 + "raw": "1x Quirion Beastcaller (j25) 703 [Creature]", 19207 19207 "setCode": "J25", 19208 19208 "tags": [ 19209 19209 "Creature", ··· 19213 19213 "collectorNumber": "250", 19214 19214 "name": "Raised by Giants", 19215 19215 "quantity": 1, 19216 - "raw": "1x Raised by Giants (clb) 250 ^Have,#37d67a^", 19216 + "raw": "1x Raised by Giants (clb) 250 [Enchantment] ^Have,#37d67a^", 19217 19217 "setCode": "CLB", 19218 19218 "tags": [ 19219 19219 "Enchantment", ··· 19223 19223 "collectorNumber": "314", 19224 19224 "name": "Ram Through", 19225 19225 "quantity": 1, 19226 - "raw": "1x Ram Through (cmm) 314 ^Have,#37d67a^", 19226 + "raw": "1x Ram Through (cmm) 314 [Instant] ^Have,#37d67a^", 19227 19227 "setCode": "CMM", 19228 19228 "tags": [ 19229 19229 "Instant", ··· 19233 19233 "collectorNumber": "241", 19234 19234 "name": "Ramunap Excavator", 19235 19235 "quantity": 1, 19236 - "raw": "1x Ramunap Excavator (m3c) 241", 19236 + "raw": "1x Ramunap Excavator (m3c) 241 [Creature]", 19237 19237 "setCode": "M3C", 19238 19238 "tags": [ 19239 19239 "Creature", ··· 19243 19243 "collectorNumber": "231", 19244 19244 "name": "Reclamation Sage", 19245 19245 "quantity": 1, 19246 - "raw": "1x Reclamation Sage (fdn) 231", 19246 + "raw": "1x Reclamation Sage (fdn) 231 [Creature]", 19247 19247 "setCode": "FDN", 19248 19248 "tags": [ 19249 19249 "Creature", ··· 19253 19253 "collectorNumber": "708", 19254 19254 "name": "Rishkar, Peema Renegade", 19255 19255 "quantity": 1, 19256 - "raw": "1x Rishkar, Peema Renegade (j25) 708", 19256 + "raw": "1x Rishkar, Peema Renegade (j25) 708 [Creature]", 19257 19257 "setCode": "J25", 19258 19258 "tags": [ 19259 19259 "Creature", ··· 19263 19263 "collectorNumber": "130", 19264 19264 "name": "Rishkar's Expertise", 19265 19265 "quantity": 1, 19266 - "raw": "1x Rishkar's Expertise (woc) 130 ^Have,#37d67a^", 19266 + "raw": "1x Rishkar's Expertise (woc) 130 [Sorcery] ^Have,#37d67a^", 19267 19267 "setCode": "WOC", 19268 19268 "tags": [ 19269 19269 "Sorcery", ··· 19273 19273 "collectorNumber": "426", 19274 19274 "name": "Rogue's Passage", 19275 19275 "quantity": 1, 19276 - "raw": "1x Rogue's Passage (cmm) 426 ^Have,#37d67a^", 19276 + "raw": "1x Rogue's Passage (cmm) 426 [Land] ^Have,#37d67a^", 19277 19277 "setCode": "CMM", 19278 19278 "tags": [ 19279 19279 "Land", ··· 19283 19283 "collectorNumber": "228", 19284 19284 "name": "Shifting Woodland", 19285 19285 "quantity": 1, 19286 - "raw": "1x Shifting Woodland (mh3) 228 ^Have,#37d67a^", 19286 + "raw": "1x Shifting Woodland (mh3) 228 [Land] ^Have,#37d67a^", 19287 19287 "setCode": "MH3", 19288 19288 "tags": [ 19289 19289 "Land", ··· 19293 19293 "collectorNumber": "323", 19294 19294 "name": "Snakeskin Veil", 19295 19295 "quantity": 1, 19296 - "raw": "1x Snakeskin Veil (cmm) 323 ^Have,#37d67a^", 19296 + "raw": "1x Snakeskin Veil (cmm) 323 [Instant] ^Have,#37d67a^", 19297 19297 "setCode": "CMM", 19298 19298 "tags": [ 19299 19299 "Instant", ··· 19303 19303 "collectorNumber": "284", 19304 19304 "name": "Sol Ring", 19305 19305 "quantity": 1, 19306 - "raw": "1x Sol Ring (ltc) 284 ^Have,#37d67a^", 19306 + "raw": "1x Sol Ring (ltc) 284 [Artifact] ^Have,#37d67a^", 19307 19307 "setCode": "LTC", 19308 19308 "tags": [ 19309 19309 "Artifact", ··· 19313 19313 "collectorNumber": "131", 19314 19314 "name": "Soul's Majesty", 19315 19315 "quantity": 1, 19316 - "raw": "1x Soul's Majesty (nec) 131 ^Have,#37d67a^", 19316 + "raw": "1x Soul's Majesty (nec) 131 [Sorcery] ^Have,#37d67a^", 19317 19317 "setCode": "NEC", 19318 19318 "tags": [ 19319 19319 "Sorcery", ··· 19323 19323 "collectorNumber": "181", 19324 19324 "name": "Springbloom Druid", 19325 19325 "quantity": 1, 19326 - "raw": "1x Springbloom Druid (mh1) 181 ^Have,#37d67a^", 19326 + "raw": "1x Springbloom Druid (mh1) 181 [Creature] ^Have,#37d67a^", 19327 19327 "setCode": "MH1", 19328 19328 "tags": [ 19329 19329 "Creature", ··· 19333 19333 "collectorNumber": "50", 19334 19334 "name": "Staff of Titania", 19335 19335 "quantity": 1, 19336 - "raw": "1x Staff of Titania (brc) 50 ^Have,#37d67a^", 19336 + "raw": "1x Staff of Titania (brc) 50 [Artifact] ^Have,#37d67a^", 19337 19337 "setCode": "BRC", 19338 19338 "tags": [ 19339 19339 "Artifact", ··· 19343 19343 "collectorNumber": "372", 19344 19344 "name": "Summon: Fenrir", 19345 19345 "quantity": 1, 19346 - "raw": "1x Summon: Fenrir (fin) 372", 19346 + "raw": "1x Summon: Fenrir (fin) 372 [Creature]", 19347 19347 "setCode": "FIN", 19348 19348 "tags": [ 19349 19349 "Creature", ··· 19353 19353 "collectorNumber": "179", 19354 19354 "name": "Sylvan Library", 19355 19355 "quantity": 1, 19356 - "raw": "1x Sylvan Library (dmr) 179 ^Have,#37d67a^", 19356 + "raw": "1x Sylvan Library (dmr) 179 [Enchantment] ^Have,#37d67a^", 19357 19357 "setCode": "DMR", 19358 19358 "tags": [ 19359 19359 "Enchantment", ··· 19363 19363 "collectorNumber": "169", 19364 19364 "name": "Terramorphic Expanse", 19365 19365 "quantity": 1, 19366 - "raw": "1x Terramorphic Expanse (ecc) 169 ^Have,#37d67a^", 19366 + "raw": "1x Terramorphic Expanse (ecc) 169 [Land] ^Have,#37d67a^", 19367 19367 "setCode": "ECC", 19368 19368 "tags": [ 19369 19369 "Land", ··· 19373 19373 "collectorNumber": "210", 19374 19374 "name": "Terrasymbiosis", 19375 19375 "quantity": 1, 19376 - "raw": "1x Terrasymbiosis (eoe) 210 ^Have,#37d67a^", 19376 + "raw": "1x Terrasymbiosis (eoe) 210 [Enchantment] ^Have,#37d67a^", 19377 19377 "setCode": "EOE", 19378 19378 "tags": [ 19379 19379 "Enchantment", ··· 19383 19383 "collectorNumber": "184", 19384 19384 "name": "The Earth Crystal", 19385 19385 "quantity": 1, 19386 - "raw": "1x The Earth Crystal (fin) 184 ^Have,#37d67a^", 19386 + "raw": "1x The Earth Crystal (fin) 184 [Artifact] ^Have,#37d67a^", 19387 19387 "setCode": "FIN", 19388 19388 "tags": [ 19389 19389 "Artifact", ··· 19393 19393 "collectorNumber": "294", 19394 19394 "name": "The Great Henge", 19395 19395 "quantity": 1, 19396 - "raw": "1x The Great Henge (cmm) 294", 19396 + "raw": "1x The Great Henge (cmm) 294 [Artifact]", 19397 19397 "setCode": "CMM", 19398 19398 "tags": [ 19399 19399 "Artifact", ··· 19403 19403 "collectorNumber": "393", 19404 19404 "name": "The Immortal Sun", 19405 19405 "quantity": 1, 19406 - "raw": "1x The Immortal Sun (cmm) 393 ^Have,#37d67a^", 19406 + "raw": "1x The Immortal Sun (cmm) 393 [Artifact] ^Have,#37d67a^", 19407 19407 "setCode": "CMM", 19408 19408 "tags": [ 19409 19409 "Artifact", ··· 19413 19413 "collectorNumber": "237", 19414 19414 "name": "The Ozolith", 19415 19415 "quantity": 1, 19416 - "raw": "1x The Ozolith (iko) 237 ^Have,#37d67a^", 19416 + "raw": "1x The Ozolith (iko) 237 [Artifact] ^Have,#37d67a^", 19417 19417 "setCode": "IKO", 19418 19418 "tags": [ 19419 19419 "Artifact", ··· 19423 19423 "collectorNumber": "37", 19424 19424 "name": "Thundering Mightmare", 19425 19425 "quantity": 1, 19426 - "raw": "1x Thundering Mightmare (voc) 37 ^Have,#37d67a^", 19426 + "raw": "1x Thundering Mightmare (voc) 37 [Creature] ^Have,#37d67a^", 19427 19427 "setCode": "VOC", 19428 19428 "tags": [ 19429 19429 "Creature", ··· 19433 19433 "collectorNumber": "110", 19434 19434 "name": "Tireless Tracker", 19435 19435 "quantity": 1, 19436 - "raw": "1x Tireless Tracker (eoc) 110 ^Have,#37d67a^", 19436 + "raw": "1x Tireless Tracker (eoc) 110 [Creature] ^Have,#37d67a^", 19437 19437 "setCode": "EOC", 19438 19438 "tags": [ 19439 19439 "Creature", ··· 19443 19443 "collectorNumber": "208", 19444 19444 "name": "Torgal, A Fine Hound", 19445 19445 "quantity": 1, 19446 - "raw": "1x Torgal, A Fine Hound (fin) 208", 19446 + "raw": "1x Torgal, A Fine Hound (fin) 208 [Creature]", 19447 19447 "setCode": "FIN", 19448 19448 "tags": [ 19449 19449 "Creature", ··· 19453 19453 "collectorNumber": "1049", 19454 19454 "name": "Tyrite Sanctum", 19455 19455 "quantity": 1, 19456 - "raw": "1x Tyrite Sanctum (cmm) 1049 ^Have,#37d67a^", 19456 + "raw": "1x Tyrite Sanctum (cmm) 1049 [Land] ^Have,#37d67a^", 19457 19457 "setCode": "CMM", 19458 19458 "tags": [ 19459 19459 "Land", ··· 19463 19463 "collectorNumber": "190", 19464 19464 "name": "Tyvar's Stand", 19465 19465 "quantity": 1, 19466 - "raw": "1x Tyvar's Stand (one) 190 ^Have,#37d67a^", 19466 + "raw": "1x Tyvar's Stand (one) 190 [Instant] ^Have,#37d67a^", 19467 19467 "setCode": "ONE", 19468 19468 "tags": [ 19469 19469 "Instant", ··· 19473 19473 "collectorNumber": "249", 19474 19474 "name": "Verdant Catacombs", 19475 19475 "quantity": 1, 19476 - "raw": "1x Verdant Catacombs (mm3) 249 ^Have,#37d67a^", 19476 + "raw": "1x Verdant Catacombs (mm3) 249 [Land] ^Have,#37d67a^", 19477 19477 "setCode": "MM3", 19478 19478 "tags": [ 19479 19479 "Land", ··· 19483 19483 "collectorNumber": "188", 19484 19484 "name": "Vibrant Cityscape", 19485 19485 "quantity": 1, 19486 - "raw": "1x Vibrant Cityscape (spm) 188 ^Have,#37d67a^", 19486 + "raw": "1x Vibrant Cityscape (spm) 188 [Land] ^Have,#37d67a^", 19487 19487 "setCode": "SPM", 19488 19488 "tags": [ 19489 19489 "Land", ··· 19493 19493 "collectorNumber": "132", 19494 19494 "name": "Viridian Revel", 19495 19495 "quantity": 1, 19496 - "raw": "1x Viridian Revel (som) 132 ^Have,#37d67a^", 19496 + "raw": "1x Viridian Revel (som) 132 [Enchantment] ^Have,#37d67a^", 19497 19497 "setCode": "SOM", 19498 19498 "tags": [ 19499 19499 "Enchantment", ··· 19503 19503 "collectorNumber": "310", 19504 19504 "name": "War Room", 19505 19505 "quantity": 1, 19506 - "raw": "1x War Room (mkc) 310 ^Have,#37d67a^", 19506 + "raw": "1x War Room (mkc) 310 [Land] ^Have,#37d67a^", 19507 19507 "setCode": "MKC", 19508 19508 "tags": [ 19509 19509 "Land", ··· 19513 19513 "collectorNumber": "166", 19514 19514 "name": "Warden of the Grove", 19515 19515 "quantity": 1, 19516 - "raw": "1x Warden of the Grove (tdm) 166", 19516 + "raw": "1x Warden of the Grove (tdm) 166 [Creature]", 19517 19517 "setCode": "TDM", 19518 19518 "tags": [ 19519 19519 "Creature", ··· 19523 19523 "collectorNumber": "466", 19524 19524 "name": "Windswept Heath", 19525 19525 "quantity": 1, 19526 - "raw": "1x Windswept Heath (mh3) 466 *F* ^Have,#37d67a^", 19526 + "raw": "1x Windswept Heath (mh3) 466 *F* [Land] ^Have,#37d67a^", 19527 19527 "setCode": "MH3", 19528 19528 "tags": [ 19529 19529 "Land", ··· 19533 19533 "collectorNumber": "81", 19534 19534 "name": "Witch's Clinic", 19535 19535 "quantity": 1, 19536 - "raw": "1x Witch's Clinic (c21) 81 ^Have,#37d67a^", 19536 + "raw": "1x Witch's Clinic (c21) 81 [Land] ^Have,#37d67a^", 19537 19537 "setCode": "C21", 19538 19538 "tags": [ 19539 19539 "Land", ··· 19543 19543 "collectorNumber": "263", 19544 19544 "name": "Wood Elves", 19545 19545 "quantity": 1, 19546 - "raw": "1x Wood Elves (ltc) 263", 19546 + "raw": "1x Wood Elves (ltc) 263 [Creature]", 19547 19547 "setCode": "LTC", 19548 19548 "tags": [ 19549 19549 "Creature", ··· 19553 19553 "collectorNumber": "249", 19554 19554 "name": "Wooded Foothills", 19555 19555 "quantity": 1, 19556 - "raw": "1x Wooded Foothills (ktk) 249 ^Have,#37d67a^", 19556 + "raw": "1x Wooded Foothills (ktk) 249 [Land] ^Have,#37d67a^", 19557 19557 "setCode": "KTK", 19558 19558 "tags": [ 19559 19559 "Land", ··· 19563 19563 "collectorNumber": "261", 19564 19564 "name": "Yavimaya, Cradle of Growth", 19565 19565 "quantity": 1, 19566 - "raw": "1x Yavimaya, Cradle of Growth (mh2) 261 ^Have,#37d67a^", 19566 + "raw": "1x Yavimaya, Cradle of Growth (mh2) 261 [Land] ^Have,#37d67a^", 19567 19567 "setCode": "MH2", 19568 19568 "tags": [ 19569 19569 "Land", ··· 19575 19575 "collectorNumber": "114", 19576 19576 "name": "Alpha Authority", 19577 19577 "quantity": 1, 19578 - "raw": "1x Alpha Authority (gtc) 114 ^Have,#37d67a^", 19578 + "raw": "1x Alpha Authority (gtc) 114 [Maybeboard{noDeck}{noPrice},Enchantment] ^Have,#37d67a^", 19579 19579 "setCode": "GTC", 19580 19580 "tags": [ 19581 19581 "Enchantment", ··· 19585 19585 "collectorNumber": "45", 19586 19586 "name": "Bitterthorn, Nissa's Animus", 19587 19587 "quantity": 1, 19588 - "raw": "1x Bitterthorn, Nissa's Animus (moc) 45", 19588 + "raw": "1x Bitterthorn, Nissa's Animus (moc) 45 [Maybeboard{noDeck}{noPrice}]", 19589 19589 "setCode": "MOC", 19590 19590 "tags": [], 19591 19591 }, ··· 19593 19593 "collectorNumber": "88", 19594 19594 "name": "Bone Sabres", 19595 19595 "quantity": 1, 19596 - "raw": "1x Bone Sabres (40k) 88 ^Don't Have,#f47373^", 19596 + "raw": "1x Bone Sabres (40k) 88 [Maybeboard{noDeck}{noPrice},Artifact] ^Don't Have,#f47373^", 19597 19597 "setCode": "40K", 19598 19598 "tags": [ 19599 19599 "Artifact", ··· 19603 19603 "collectorNumber": "155", 19604 19604 "name": "Case of the Locked Hothouse", 19605 19605 "quantity": 1, 19606 - "raw": "1x Case of the Locked Hothouse (mkm) 155", 19606 + "raw": "1x Case of the Locked Hothouse (mkm) 155 [Maybeboard{noDeck}{noPrice},Enchantment]", 19607 19607 "setCode": "MKM", 19608 19608 "tags": [ 19609 19609 "Enchantment", ··· 19613 19613 "collectorNumber": "170", 19614 19614 "name": "Cycle of Renewal", 19615 19615 "quantity": 1, 19616 - "raw": "1x Cycle of Renewal (tla) 170", 19616 + "raw": "1x Cycle of Renewal (tla) 170 [Maybeboard{noDeck}{noPrice},Instant]", 19617 19617 "setCode": "TLA", 19618 19618 "tags": [ 19619 19619 "Instant", ··· 19623 19623 "collectorNumber": "157", 19624 19624 "name": "Defend the Rider", 19625 19625 "quantity": 1, 19626 - "raw": "1x Defend the Rider (dft) 157", 19626 + "raw": "1x Defend the Rider (dft) 157 [Maybeboard{noDeck}{noPrice},Instant]", 19627 19627 "setCode": "DFT", 19628 19628 "tags": [ 19629 19629 "Instant", ··· 19633 19633 "collectorNumber": "296", 19634 19634 "name": "Hunter's Insight", 19635 19635 "quantity": 1, 19636 - "raw": "1x Hunter's Insight (cmm) 296", 19636 + "raw": "1x Hunter's Insight (cmm) 296 [Maybeboard{noDeck}{noPrice},Instant]", 19637 19637 "setCode": "CMM", 19638 19638 "tags": [ 19639 19639 "Instant", ··· 19643 19643 "collectorNumber": "67", 19644 19644 "name": "Lifestream's Blessing", 19645 19645 "quantity": 1, 19646 - "raw": "1x Lifestream's Blessing (fic) 67", 19646 + "raw": "1x Lifestream's Blessing (fic) 67 [Maybeboard{noDeck}{noPrice},Instant]", 19647 19647 "setCode": "FIC", 19648 19648 "tags": [ 19649 19649 "Instant", ··· 19653 19653 "collectorNumber": "200", 19654 19654 "name": "Mightform Harmonizer", 19655 19655 "quantity": 1, 19656 - "raw": "1x Mightform Harmonizer (eoe) 200", 19656 + "raw": "1x Mightform Harmonizer (eoe) 200 [Maybeboard{noDeck}{noPrice}]", 19657 19657 "setCode": "EOE", 19658 19658 "tags": [], 19659 19659 }, ··· 19661 19661 "collectorNumber": "438", 19662 19662 "name": "Misty Rainforest", 19663 19663 "quantity": 1, 19664 - "raw": "1x Misty Rainforest (mh2) 438", 19664 + "raw": "1x Misty Rainforest (mh2) 438 [Maybeboard{noDeck}{noPrice},Land]", 19665 19665 "setCode": "MH2", 19666 19666 "tags": [ 19667 19667 "Land", ··· 19671 19671 "collectorNumber": "187", 19672 19672 "name": "Origin of Metalbending", 19673 19673 "quantity": 1, 19674 - "raw": "1x Origin of Metalbending (tla) 187", 19674 + "raw": "1x Origin of Metalbending (tla) 187 [Maybeboard{noDeck}{noPrice},Instant]", 19675 19675 "setCode": "TLA", 19676 19676 "tags": [ 19677 19677 "Instant", ··· 19681 19681 "collectorNumber": "644", 19682 19682 "name": "Primeval Bounty", 19683 19683 "quantity": 1, 19684 - "raw": "1x Primeval Bounty (fdn) 644", 19684 + "raw": "1x Primeval Bounty (fdn) 644 [Maybeboard{noDeck}{noPrice}]", 19685 19685 "setCode": "FDN", 19686 19686 "tags": [], 19687 19687 }, ··· 19689 19689 "collectorNumber": "193", 19690 19690 "name": "Prishe's Wanderings", 19691 19691 "quantity": 1, 19692 - "raw": "1x Prishe's Wanderings (fin) 193 ^Have,#37d67a^", 19692 + "raw": "1x Prishe's Wanderings (fin) 193 [Instant,Maybeboard{noDeck}{noPrice}] ^Have,#37d67a^", 19693 19693 "setCode": "FIN", 19694 19694 "tags": [ 19695 19695 "Instant", ··· 19699 19699 "collectorNumber": "AKH-236", 19700 19700 "name": "Rhonas's Monument", 19701 19701 "quantity": 1, 19702 - "raw": "1x Rhonas's Monument (plst) AKH-236", 19702 + "raw": "1x Rhonas's Monument (plst) AKH-236 [Maybeboard{noDeck}{noPrice},Artifact]", 19703 19703 "setCode": "PLST", 19704 19704 "tags": [ 19705 19705 "Artifact", ··· 19709 19709 "collectorNumber": "197", 19710 19710 "name": "Ride the Shoopuf", 19711 19711 "quantity": 1, 19712 - "raw": "1x Ride the Shoopuf (fin) 197", 19712 + "raw": "1x Ride the Shoopuf (fin) 197 [Maybeboard{noDeck}{noPrice}]", 19713 19713 "setCode": "FIN", 19714 19714 "tags": [], 19715 19715 }, ··· 19717 19717 "collectorNumber": "24", 19718 19718 "name": "Scythecat Cub", 19719 19719 "quantity": 1, 19720 - "raw": "1x Scythecat Cub (j25) 24", 19720 + "raw": "1x Scythecat Cub (j25) 24 [Maybeboard{noDeck}{noPrice}]", 19721 19721 "setCode": "J25", 19722 19722 "tags": [], 19723 19723 }, ··· 19725 19725 "collectorNumber": "56", 19726 19726 "name": "Sutina, Speaker of the Tajuru", 19727 19727 "quantity": 1, 19728 - "raw": "1x Sutina, Speaker of the Tajuru (j25) 56", 19728 + "raw": "1x Sutina, Speaker of the Tajuru (j25) 56 [Maybeboard{noDeck}{noPrice},Creature]", 19729 19729 "setCode": "J25", 19730 19730 "tags": [ 19731 19731 "Creature", ··· 19735 19735 "collectorNumber": "362", 19736 19736 "name": "Sword of the Animist", 19737 19737 "quantity": 1, 19738 - "raw": "1x Sword of the Animist (fic) 362", 19738 + "raw": "1x Sword of the Animist (fic) 362 [Maybeboard{noDeck}{noPrice}]", 19739 19739 "setCode": "FIC", 19740 19740 "tags": [], 19741 19741 }, ··· 19743 19743 "collectorNumber": "287", 19744 19744 "name": "Sylvan Safekeeper", 19745 19745 "quantity": 1, 19746 - "raw": "1x Sylvan Safekeeper (mh3) 287", 19746 + "raw": "1x Sylvan Safekeeper (mh3) 287 [Maybeboard{noDeck}{noPrice},Creature]", 19747 19747 "setCode": "MH3", 19748 19748 "tags": [ 19749 19749 "Creature", ··· 19753 19753 "collectorNumber": "134", 19754 19754 "name": "Talon Gates of Madara", 19755 19755 "quantity": 1, 19756 - "raw": "1x Talon Gates of Madara (m3c) 134", 19756 + "raw": "1x Talon Gates of Madara (m3c) 134 [Maybeboard{noDeck}{noPrice},Land]", 19757 19757 "setCode": "M3C", 19758 19758 "tags": [ 19759 19759 "Land", ··· 19763 19763 "collectorNumber": "186", 19764 19764 "name": "The Legend of Kyoshi // Avatar Kyoshi", 19765 19765 "quantity": 1, 19766 - "raw": "1x The Legend of Kyoshi // Avatar Kyoshi (tla) 186", 19766 + "raw": "1x The Legend of Kyoshi // Avatar Kyoshi (tla) 186 [Maybeboard{noDeck}{noPrice},Enchantment]", 19767 19767 "setCode": "TLA", 19768 19768 "tags": [ 19769 19769 "Enchantment", ··· 19773 19773 "collectorNumber": "212", 19774 19774 "name": "The Skullspore Nexus", 19775 19775 "quantity": 1, 19776 - "raw": "1x The Skullspore Nexus (lci) 212", 19776 + "raw": "1x The Skullspore Nexus (lci) 212 [Maybeboard{noDeck}{noPrice},Artifact]", 19777 19777 "setCode": "LCI", 19778 19778 "tags": [ 19779 19779 "Artifact", ··· 19783 19783 "collectorNumber": "728", 19784 19784 "name": "Tireless Provisioner", 19785 19785 "quantity": 1, 19786 - "raw": "1x Tireless Provisioner (j25) 728", 19786 + "raw": "1x Tireless Provisioner (j25) 728 [Maybeboard{noDeck}{noPrice},Creature]", 19787 19787 "setCode": "J25", 19788 19788 "tags": [ 19789 19789 "Creature", ··· 19793 19793 "collectorNumber": "210", 19794 19794 "name": "Traveling Chocobo", 19795 19795 "quantity": 1, 19796 - "raw": "1x Traveling Chocobo (fin) 210", 19796 + "raw": "1x Traveling Chocobo (fin) 210 [Maybeboard{noDeck}{noPrice},Creature]", 19797 19797 "setCode": "FIN", 19798 19798 "tags": [ 19799 19799 "Creature", ··· 19803 19803 "collectorNumber": "234", 19804 19804 "name": "Urza's Cave", 19805 19805 "quantity": 1, 19806 - "raw": "1x Urza's Cave (mh3) 234", 19806 + "raw": "1x Urza's Cave (mh3) 234 [Maybeboard{noDeck}{noPrice},Land]", 19807 19807 "setCode": "MH3", 19808 19808 "tags": [ 19809 19809 "Land", ··· 19815 19815 "collectorNumber": "233", 19816 19816 "name": "Alhammarret's Archive", 19817 19817 "quantity": 1, 19818 - "raw": "1x Alhammarret's Archive (c21) 233 ^Cutting Board,#ffff02^", 19818 + "raw": "1x Alhammarret's Archive (c21) 233 [Sideboard] ^Cutting Board,#ffff02^", 19819 19819 "setCode": "C21", 19820 19820 "tags": [], 19821 19821 }, ··· 19823 19823 "collectorNumber": "273", 19824 19824 "name": "Arcane Signet", 19825 19825 "quantity": 1, 19826 - "raw": "1x Arcane Signet (ltc) 273 ^Have,#37d67a^", 19826 + "raw": "1x Arcane Signet (ltc) 273 [Sideboard,Artifact] ^Have,#37d67a^", 19827 19827 "setCode": "LTC", 19828 19828 "tags": [ 19829 19829 "Artifact", ··· 19833 19833 "collectorNumber": "158", 19834 19834 "name": "Beast Whisperer", 19835 19835 "quantity": 1, 19836 - "raw": "1x Beast Whisperer (clu) 158", 19836 + "raw": "1x Beast Whisperer (clu) 158 [Maybeboard{noDeck}{noPrice},Sideboard]", 19837 19837 "setCode": "CLU", 19838 19838 "tags": [], 19839 19839 }, ··· 19841 19841 "collectorNumber": "173", 19842 19842 "name": "Blossoming Defense", 19843 19843 "quantity": 1, 19844 - "raw": "1x Blossoming Defense (scd) 173 ^Cutting Board,#ffff02^", 19844 + "raw": "1x Blossoming Defense (scd) 173 [Sideboard,Instant] ^Cutting Board,#ffff02^", 19845 19845 "setCode": "SCD", 19846 19846 "tags": [ 19847 19847 "Instant", ··· 19851 19851 "collectorNumber": "157", 19852 19852 "name": "Bristly Bill, Spine Sower", 19853 19853 "quantity": 1, 19854 - "raw": "1x Bristly Bill, Spine Sower (otj) 157", 19854 + "raw": "1x Bristly Bill, Spine Sower (otj) 157 [Maybeboard{noDeck}{noPrice},Sideboard]", 19855 19855 "setCode": "OTJ", 19856 19856 "tags": [], 19857 19857 }, ··· 19859 19859 "collectorNumber": "231", 19860 19860 "name": "Caged Sun", 19861 19861 "quantity": 1, 19862 - "raw": "1x Caged Sun (40k) 231 ^Cutting Board,#ffff02^", 19862 + "raw": "1x Caged Sun (40k) 231 [Sideboard,Artifact] ^Cutting Board,#ffff02^", 19863 19863 "setCode": "40K", 19864 19864 "tags": [ 19865 19865 "Artifact", ··· 19869 19869 "collectorNumber": "294", 19870 19870 "name": "Cankerbloom", 19871 19871 "quantity": 1, 19872 - "raw": "1x Cankerbloom (one) 294 *F* ^Have,#37d67a^", 19872 + "raw": "1x Cankerbloom (one) 294 *F* [Sideboard,Creature] ^Have,#37d67a^", 19873 19873 "setCode": "ONE", 19874 19874 "tags": [ 19875 19875 "Creature", ··· 19879 19879 "collectorNumber": "227", 19880 19880 "name": "Eternal Witness", 19881 19881 "quantity": 1, 19882 - "raw": "1x Eternal Witness (m3c) 227", 19882 + "raw": "1x Eternal Witness (m3c) 227 [Creature,Sideboard]", 19883 19883 "setCode": "M3C", 19884 19884 "tags": [ 19885 19885 "Creature", ··· 19889 19889 "collectorNumber": "424", 19890 19890 "name": "Evolution Witness", 19891 19891 "quantity": 1, 19892 - "raw": "1x Evolution Witness (mh3) 424", 19892 + "raw": "1x Evolution Witness (mh3) 424 [Creature,Sideboard]", 19893 19893 "setCode": "MH3", 19894 19894 "tags": [ 19895 19895 "Creature", ··· 19899 19899 "collectorNumber": "243", 19900 19900 "name": "Farhaven Elf", 19901 19901 "quantity": 1, 19902 - "raw": "1x Farhaven Elf (ltc) 243", 19902 + "raw": "1x Farhaven Elf (ltc) 243 [Maybeboard{noDeck}{noPrice},Sideboard]", 19903 19903 "setCode": "LTC", 19904 19904 "tags": [], 19905 19905 }, ··· 19907 19907 "collectorNumber": "144", 19908 19908 "name": "Herd Heirloom", 19909 19909 "quantity": 1, 19910 - "raw": "1x Herd Heirloom (tdm) 144", 19910 + "raw": "1x Herd Heirloom (tdm) 144 [Maybeboard{noDeck}{noPrice},Sideboard]", 19911 19911 "setCode": "TDM", 19912 19912 "tags": [], 19913 19913 }, ··· 19915 19915 "collectorNumber": "674", 19916 19916 "name": "Ivy Lane Denizen", 19917 19917 "quantity": 1, 19918 - "raw": "1x Ivy Lane Denizen (j25) 674", 19918 + "raw": "1x Ivy Lane Denizen (j25) 674 [Maybeboard{noDeck}{noPrice},Sideboard]", 19919 19919 "setCode": "J25", 19920 19920 "tags": [], 19921 19921 }, ··· 19923 19923 "collectorNumber": "101", 19924 19924 "name": "Nature's Lore", 19925 19925 "quantity": 1, 19926 - "raw": "1x Nature's Lore (eoc) 101 ^Cutting Board,#ffff02^", 19926 + "raw": "1x Nature's Lore (eoc) 101 [Sideboard,Sorcery] ^Cutting Board,#ffff02^", 19927 19927 "setCode": "EOC", 19928 19928 "tags": [ 19929 19929 "Sorcery", ··· 19933 19933 "collectorNumber": "176", 19934 19934 "name": "Primal Bellow", 19935 19935 "quantity": 1, 19936 - "raw": "1x Primal Bellow (zen) 176 ^Cutting Board,#ffff02^", 19936 + "raw": "1x Primal Bellow (zen) 176 [Sideboard,Instant] ^Cutting Board,#ffff02^", 19937 19937 "setCode": "ZEN", 19938 19938 "tags": [ 19939 19939 "Instant", ··· 19943 19943 "collectorNumber": "97", 19944 19944 "name": "Purestrain Genestealer", 19945 19945 "quantity": 1, 19946 - "raw": "1x Purestrain Genestealer (40k) 97", 19946 + "raw": "1x Purestrain Genestealer (40k) 97 [Maybeboard{noDeck}{noPrice},Sideboard]", 19947 19947 "setCode": "40K", 19948 19948 "tags": [], 19949 19949 }, ··· 19951 19951 "collectorNumber": "908", 19952 19952 "name": "Rampant Growth", 19953 19953 "quantity": 1, 19954 - "raw": "1x Rampant Growth (cmm) 908 ^Cutting Board,#ffff02^", 19954 + "raw": "1x Rampant Growth (cmm) 908 [Sideboard,Sorcery] ^Cutting Board,#ffff02^", 19955 19955 "setCode": "CMM", 19956 19956 "tags": [ 19957 19957 "Sorcery", ··· 19961 19961 "collectorNumber": "707", 19962 19962 "name": "Retreat to Kazandu", 19963 19963 "quantity": 1, 19964 - "raw": "1x Retreat to Kazandu (j25) 707", 19964 + "raw": "1x Retreat to Kazandu (j25) 707 [Maybeboard{noDeck}{noPrice},Sideboard]", 19965 19965 "setCode": "J25", 19966 19966 "tags": [], 19967 19967 }, ··· 19969 19969 "collectorNumber": "204", 19970 19970 "name": "Roaring Earth", 19971 19971 "quantity": 1, 19972 - "raw": "1x Roaring Earth (neo) 204", 19972 + "raw": "1x Roaring Earth (neo) 204 [Maybeboard{noDeck}{noPrice},Sideboard]", 19973 19973 "setCode": "NEO", 19974 19974 "tags": [], 19975 19975 }, ··· 19977 19977 "collectorNumber": "255", 19978 19978 "name": "Ruinous Intrusion", 19979 19979 "quantity": 1, 19980 - "raw": "1x Ruinous Intrusion (lcc) 255 ^Have,#37d67a^", 19980 + "raw": "1x Ruinous Intrusion (lcc) 255 [Sideboard,Instant] ^Have,#37d67a^", 19981 19981 "setCode": "LCC", 19982 19982 "tags": [ 19983 19983 "Instant", ··· 19987 19987 "collectorNumber": "187", 19988 19988 "name": "Sixth Sense", 19989 19989 "quantity": 1, 19990 - "raw": "1x Sixth Sense (akh) 187", 19990 + "raw": "1x Sixth Sense (akh) 187 [Maybeboard{noDeck}{noPrice},Sideboard,Enchantment]", 19991 19991 "setCode": "AKH", 19992 19992 "tags": [ 19993 19993 "Enchantment", ··· 19997 19997 "collectorNumber": "134", 19998 19998 "name": "Sylvan Ranger", 19999 19999 "quantity": 1, 20000 - "raw": "1x Sylvan Ranger (woc) 134", 20000 + "raw": "1x Sylvan Ranger (woc) 134 [Maybeboard{noDeck}{noPrice},Sideboard]", 20001 20001 "setCode": "WOC", 20002 20002 "tags": [], 20003 20003 }, ··· 20005 20005 "collectorNumber": "913", 20006 20006 "name": "Three Visits", 20007 20007 "quantity": 1, 20008 - "raw": "1x Three Visits (cmm) 913 ^Cutting Board,#ffff02^", 20008 + "raw": "1x Three Visits (cmm) 913 [Sideboard,Sorcery] ^Cutting Board,#ffff02^", 20009 20009 "setCode": "CMM", 20010 20010 "tags": [ 20011 20011 "Sorcery", ··· 20015 20015 "collectorNumber": "191", 20016 20016 "name": "Unnatural Restoration", 20017 20017 "quantity": 1, 20018 - "raw": "1x Unnatural Restoration (one) 191 ^Cutting Board,#ffff02^", 20018 + "raw": "1x Unnatural Restoration (one) 191 [Sideboard,Sorcery] ^Cutting Board,#ffff02^", 20019 20019 "setCode": "ONE", 20020 20020 "tags": [ 20021 20021 "Sorcery", ··· 20507 20507 { 20508 20508 "name": "Black Waltz No. 3", 20509 20509 "quantity": 1, 20510 - "raw": "1 Black Waltz No. 3", 20510 + "raw": "1 Black Waltz No. 3 # !Commander", 20511 20511 "tags": [], 20512 20512 }, 20513 20513 ], ··· 21899 21899 { 21900 21900 "name": "Black Waltz No. 3", 21901 21901 "quantity": 1, 21902 - "raw": "1 Black Waltz No. 3", 21902 + "raw": "1 Black Waltz No. 3 # !Commander", 21903 21903 "tags": [], 21904 21904 }, 21905 21905 ], ··· 28352 28352 "collectorNumber": "159", 28353 28353 "name": "Spellskite", 28354 28354 "quantity": 4, 28355 - "raw": "4 [NPH:159] Spellskite", 28355 + "raw": "SB: 4 [NPH:159] Spellskite", 28356 28356 "setCode": "NPH", 28357 28357 "tags": [], 28358 28358 }, ··· 28360 28360 "collectorNumber": "149", 28361 28361 "name": "Grafdigger's Cage", 28362 28362 "quantity": 1, 28363 - "raw": "1 [DKA:149] Grafdigger's Cage", 28363 + "raw": "SB: 1 [DKA:149] Grafdigger's Cage", 28364 28364 "setCode": "DKA", 28365 28365 "tags": [], 28366 28366 }, ··· 28368 28368 "collectorNumber": "57", 28369 28369 "name": "Dismember", 28370 28370 "quantity": 2, 28371 - "raw": "2 [NPH:57] Dismember", 28371 + "raw": "SB: 2 [NPH:57] Dismember", 28372 28372 "setCode": "NPH", 28373 28373 "tags": [], 28374 28374 }, ··· 28376 28376 "collectorNumber": "64", 28377 28377 "name": "Spell Snare", 28378 28378 "quantity": 1, 28379 - "raw": "1 [MMA:64] Spell Snare", 28379 + "raw": "SB: 1 [MMA:64] Spell Snare", 28380 28380 "setCode": "MMA", 28381 28381 "tags": [], 28382 28382 }, ··· 28384 28384 "collectorNumber": "150", 28385 28385 "name": "Chalice of the Void", 28386 28386 "quantity": 3, 28387 - "raw": "3 [MRD:150] Chalice of the Void", 28387 + "raw": "SB: 3 [MRD:150] Chalice of the Void", 28388 28388 "setCode": "MRD", 28389 28389 "tags": [], 28390 28390 }, ··· 28392 28392 "collectorNumber": "86", 28393 28393 "name": "Gut Shot", 28394 28394 "quantity": 2, 28395 - "raw": "2 [NPH:86] Gut Shot", 28395 + "raw": "SB: 2 [NPH:86] Gut Shot", 28396 28396 "setCode": "NPH", 28397 28397 "tags": [], 28398 28398 }, ··· 28400 28400 "collectorNumber": "218", 28401 28401 "name": "Relic of Progenitus", 28402 28402 "quantity": 2, 28403 - "raw": "2 [ALA:218] Relic of Progenitus", 28403 + "raw": "SB: 2 [ALA:218] Relic of Progenitus", 28404 28404 "setCode": "ALA", 28405 28405 "tags": [], 28406 28406 }, ··· 28565 28565 "collectorNumber": "249", 28566 28566 "name": "Sun Droplet", 28567 28567 "quantity": 3, 28568 - "raw": "3 [MRD:249] Sun Droplet", 28568 + "raw": "SB: 3 [MRD:249] Sun Droplet", 28569 28569 "setCode": "MRD", 28570 28570 "tags": [], 28571 28571 }, ··· 28573 28573 "collectorNumber": "159", 28574 28574 "name": "Spellskite", 28575 28575 "quantity": 2, 28576 - "raw": "2 [NPH:159] Spellskite", 28576 + "raw": "SB: 2 [NPH:159] Spellskite", 28577 28577 "setCode": "NPH", 28578 28578 "tags": [], 28579 28579 }, ··· 28581 28581 "collectorNumber": "1", 28582 28582 "name": "Ugin, the Spirit Dragon", 28583 28583 "quantity": 1, 28584 - "raw": "1 [UGIN:1] Ugin, the Spirit Dragon", 28584 + "raw": "SB: 1 [UGIN:1] Ugin, the Spirit Dragon", 28585 28585 "setCode": "UGIN", 28586 28586 "tags": [], 28587 28587 }, ··· 28589 28589 "collectorNumber": "148", 28590 28590 "name": "Ghirapur AEther Grid", 28591 28591 "quantity": 1, 28592 - "raw": "1 [ORI:148] Ghirapur AEther Grid", 28592 + "raw": "SB: 1 [ORI:148] Ghirapur AEther Grid", 28593 28593 "setCode": "ORI", 28594 28594 "tags": [], 28595 28595 }, ··· 28597 28597 "collectorNumber": "127", 28598 28598 "name": "Ancient Grudge", 28599 28599 "quantity": 2, 28600 - "raw": "2 [ISD:127] Ancient Grudge", 28600 + "raw": "SB: 2 [ISD:127] Ancient Grudge", 28601 28601 "setCode": "ISD", 28602 28602 "tags": [], 28603 28603 }, ··· 28605 28605 "collectorNumber": "143", 28606 28606 "name": "Unravel the AEther", 28607 28607 "quantity": 1, 28608 - "raw": "1 [BNG:143] Unravel the AEther", 28608 + "raw": "SB: 1 [BNG:143] Unravel the AEther", 28609 28609 "setCode": "BNG", 28610 28610 "tags": [], 28611 28611 }, ··· 28613 28613 "collectorNumber": "213", 28614 28614 "name": "Relic of Progenitus", 28615 28615 "quantity": 3, 28616 - "raw": "3 [MMA:213] Relic of Progenitus", 28616 + "raw": "SB: 3 [MMA:213] Relic of Progenitus", 28617 28617 "setCode": "MMA", 28618 28618 "tags": [], 28619 28619 }, ··· 28621 28621 "collectorNumber": "210", 28622 28622 "name": "Pyroclasm", 28623 28623 "quantity": 2, 28624 - "raw": "2 [8ED:210] Pyroclasm", 28624 + "raw": "SB: 2 [8ED:210] Pyroclasm", 28625 28625 "setCode": "8ED", 28626 28626 "tags": [], 28627 28627 }, ··· 28794 28794 "collectorNumber": "231", 28795 28795 "name": "Pithing Needle", 28796 28796 "quantity": 1, 28797 - "raw": "1 [RTR:231] Pithing Needle", 28797 + "raw": "SB: 1 [RTR:231] Pithing Needle", 28798 28798 "setCode": "RTR", 28799 28799 "tags": [], 28800 28800 }, ··· 28802 28802 "collectorNumber": "213", 28803 28803 "name": "Relic of Progenitus", 28804 28804 "quantity": 2, 28805 - "raw": "2 [MMA:213] Relic of Progenitus", 28805 + "raw": "SB: 2 [MMA:213] Relic of Progenitus", 28806 28806 "setCode": "MMA", 28807 28807 "tags": [], 28808 28808 }, ··· 28810 28810 "collectorNumber": "36", 28811 28811 "name": "Stony Silence", 28812 28812 "quantity": 2, 28813 - "raw": "2 [ISD:36] Stony Silence", 28813 + "raw": "SB: 2 [ISD:36] Stony Silence", 28814 28814 "setCode": "ISD", 28815 28815 "tags": [], 28816 28816 }, ··· 28818 28818 "collectorNumber": "13", 28819 28819 "name": "Blessed Alliance", 28820 28820 "quantity": 2, 28821 - "raw": "2 [EMN:13] Blessed Alliance", 28821 + "raw": "SB: 2 [EMN:13] Blessed Alliance", 28822 28822 "setCode": "EMN", 28823 28823 "tags": [], 28824 28824 }, ··· 28826 28826 "collectorNumber": "70", 28827 28827 "name": "Spreading Seas", 28828 28828 "quantity": 2, 28829 - "raw": "2 [ZEN:70] Spreading Seas", 28829 + "raw": "SB: 2 [ZEN:70] Spreading Seas", 28830 28830 "setCode": "ZEN", 28831 28831 "tags": [], 28832 28832 }, ··· 28834 28834 "collectorNumber": "40", 28835 28835 "name": "Ceremonious Rejection", 28836 28836 "quantity": 2, 28837 - "raw": "2 [KLD:40] Ceremonious Rejection", 28837 + "raw": "SB: 2 [KLD:40] Ceremonious Rejection", 28838 28838 "setCode": "KLD", 28839 28839 "tags": [], 28840 28840 }, ··· 28842 28842 "collectorNumber": "9", 28843 28843 "name": "Celestial Purge", 28844 28844 "quantity": 2, 28845 - "raw": "2 [M11:9] Celestial Purge", 28845 + "raw": "SB: 2 [M11:9] Celestial Purge", 28846 28846 "setCode": "M11", 28847 28847 "tags": [], 28848 28848 }, ··· 28850 28850 "collectorNumber": "88", 28851 28851 "name": "Hurkyl's Recall", 28852 28852 "quantity": 2, 28853 - "raw": "2 [10E:88] Hurkyl's Recall", 28853 + "raw": "SB: 2 [10E:88] Hurkyl's Recall", 28854 28854 "setCode": "10E", 28855 28855 "tags": [], 28856 28856 },
+26
src/lib/deck-formats/__tests__/fixtures/mtggoldfish-allspells.txt
··· 1 + 4 Agadeem's Awakening [ZNR] 2 + 4 Balustrade Spy [2X2] 3 + 4 Beseech the Mirror [WOE] 4 + 4 Boggart Trawler [MH3] 5 + 1 Bridge from Below [UMA] 6 + 4 Cabal Ritual [TOR] 7 + 2 Cabal Therapy [EMA] (F) 8 + 3 Chrome Mox [EMA] 9 + 4 Dark Ritual [TE] 10 + 1 Dread Return <borderless> [CMM] 11 + 4 Elvish Spirit Guide [DMR] 12 + 4 Fell the Profane [MH3] 13 + 4 Goblin Charbelcher <retro> [BRR] 14 + 1 Jack-o'-Lantern [MID] 15 + 4 Lion's Eye Diamond [MI] 16 + 4 Lotus Petal [TE] 17 + 1 Memory's Journey [ISD] 18 + 2 Narcomoeba [GRN] 19 + 4 Pact of Negation [MMA] 20 + 3 Poxwalkers [40K] 21 + 1 Reanimate [DSC] 22 + 4 Simian Spirit Guide [TSR] 23 + 1 Thassa's Oracle [THB] 24 + 4 Thoughtseize <showcase> [OTP] 25 + 4 Undercity Informer [PLIST] 26 +
+155
src/lib/deck-formats/__tests__/match-lines.test.ts
··· 1 + import fc from "fast-check"; 2 + import { describe, expect, it } from "vitest"; 3 + import { matchLinesToParsedCards } from "../match-lines"; 4 + import { parseDeck } from "../parse"; 5 + 6 + describe("matchLinesToParsedCards", () => { 7 + it("matches simple lines to parsed cards", () => { 8 + const text = `1 Sol Ring 9 + 4 Lightning Bolt`; 10 + const lines = text.split("\n"); 11 + const parsed = parseDeck(text); 12 + 13 + const matched = matchLinesToParsedCards(lines, parsed); 14 + 15 + expect(matched).toHaveLength(2); 16 + expect(matched[0].parsed?.name).toBe("Sol Ring"); 17 + expect(matched[0].section).toBe("mainboard"); 18 + expect(matched[1].parsed?.name).toBe("Lightning Bolt"); 19 + expect(matched[1].section).toBe("mainboard"); 20 + }); 21 + 22 + it("handles empty lines", () => { 23 + const text = `1 Sol Ring 24 + 25 + 4 Lightning Bolt`; 26 + const lines = text.split("\n"); 27 + const parsed = parseDeck(text); 28 + 29 + const matched = matchLinesToParsedCards(lines, parsed); 30 + 31 + expect(matched).toHaveLength(3); 32 + expect(matched[0].parsed?.name).toBe("Sol Ring"); 33 + expect(matched[1].parsed).toBeUndefined(); 34 + expect(matched[1].trimmed).toBe(""); 35 + expect(matched[2].parsed?.name).toBe("Lightning Bolt"); 36 + }); 37 + 38 + it("identifies section headers", () => { 39 + const text = `1 Sol Ring 40 + Sideboard 41 + 1 Grafdigger's Cage`; 42 + const lines = text.split("\n"); 43 + const parsed = parseDeck(text); 44 + 45 + const matched = matchLinesToParsedCards(lines, parsed); 46 + 47 + expect(matched).toHaveLength(3); 48 + expect(matched[0].parsed?.name).toBe("Sol Ring"); 49 + expect(matched[0].section).toBe("mainboard"); 50 + expect(matched[1].parsed).toBeUndefined(); 51 + expect(matched[1].trimmed).toBe("Sideboard"); 52 + expect(matched[2].parsed?.name).toBe("Grafdigger's Cage"); 53 + expect(matched[2].section).toBe("sideboard"); 54 + }); 55 + 56 + it("handles duplicate card text across sections correctly", () => { 57 + const text = `1 Sol Ring 58 + Sideboard 59 + 1 Sol Ring`; 60 + const lines = text.split("\n"); 61 + const parsed = parseDeck(text); 62 + 63 + const matched = matchLinesToParsedCards(lines, parsed); 64 + 65 + expect(matched).toHaveLength(3); 66 + expect(matched[0].parsed?.name).toBe("Sol Ring"); 67 + expect(matched[0].section).toBe("mainboard"); 68 + expect(matched[1].parsed).toBeUndefined(); 69 + expect(matched[2].parsed?.name).toBe("Sol Ring"); 70 + expect(matched[2].section).toBe("sideboard"); 71 + }); 72 + 73 + it("handles duplicate card text within same section", () => { 74 + const text = `1 Sol Ring 75 + 1 Sol Ring`; 76 + const lines = text.split("\n"); 77 + const parsed = parseDeck(text); 78 + 79 + const matched = matchLinesToParsedCards(lines, parsed); 80 + 81 + expect(matched).toHaveLength(2); 82 + expect(matched[0].parsed?.name).toBe("Sol Ring"); 83 + expect(matched[0].section).toBe("mainboard"); 84 + expect(matched[1].parsed?.name).toBe("Sol Ring"); 85 + expect(matched[1].section).toBe("mainboard"); 86 + }); 87 + 88 + it("generates stable keys based on content, not index", () => { 89 + const text = `1 Sol Ring 90 + 1 Lightning Bolt 91 + 1 Sol Ring`; 92 + const lines = text.split("\n"); 93 + const parsed = parseDeck(text); 94 + 95 + const matched = matchLinesToParsedCards(lines, parsed); 96 + 97 + expect(matched[0].key).toBe("1 Sol Ring:0"); 98 + expect(matched[1].key).toBe("1 Lightning Bolt:0"); 99 + expect(matched[2].key).toBe("1 Sol Ring:1"); 100 + }); 101 + 102 + it("handles commander section", () => { 103 + const text = `Commander 104 + 1 Kenrith, the Returned King 105 + Deck 106 + 1 Sol Ring`; 107 + const lines = text.split("\n"); 108 + const parsed = parseDeck(text); 109 + 110 + const matched = matchLinesToParsedCards(lines, parsed); 111 + 112 + expect(matched[0].parsed).toBeUndefined(); 113 + expect(matched[1].parsed?.name).toBe("Kenrith, the Returned King"); 114 + expect(matched[1].section).toBe("commander"); 115 + expect(matched[2].parsed).toBeUndefined(); 116 + expect(matched[3].parsed?.name).toBe("Sol Ring"); 117 + expect(matched[3].section).toBe("mainboard"); 118 + }); 119 + 120 + it("handles multiple sections with duplicates", () => { 121 + const text = `Commander 122 + 1 Sol Ring 123 + Deck 124 + 1 Sol Ring 125 + Sideboard 126 + 1 Sol Ring`; 127 + const lines = text.split("\n"); 128 + const parsed = parseDeck(text); 129 + 130 + const matched = matchLinesToParsedCards(lines, parsed); 131 + 132 + expect(matched[1].section).toBe("commander"); 133 + expect(matched[3].section).toBe("mainboard"); 134 + expect(matched[5].section).toBe("sideboard"); 135 + }); 136 + 137 + it("every row gets a unique key for arbitrary input", () => { 138 + const linesArb = fc.array(fc.string(), { minLength: 1, maxLength: 100 }); 139 + 140 + fc.assert( 141 + fc.property(linesArb, (linesArray) => { 142 + const text = linesArray.join("\n"); 143 + const lines = text.split("\n"); 144 + const parsed = parseDeck(text); 145 + const matched = matchLinesToParsedCards(lines, parsed); 146 + 147 + const keys = matched.map((m) => m.key); 148 + const uniqueKeys = new Set(keys); 149 + 150 + expect(uniqueKeys.size).toBe(keys.length); 151 + }), 152 + { numRuns: 500 }, 153 + ); 154 + }); 155 + });
+91 -50
src/lib/deck-formats/__tests__/parse.test.ts
··· 12 12 describe("parseCardLine", () => { 13 13 describe("basic parsing", () => { 14 14 it("parses quantity and name", () => { 15 - const result = parseCardLine("4 Lightning Bolt"); 15 + const line = "4 Lightning Bolt"; 16 + const result = parseCardLine(line, { raw: line }); 16 17 expect(result).toEqual({ 17 18 quantity: 4, 18 19 name: "Lightning Bolt", ··· 22 23 }); 23 24 24 25 it("defaults quantity to 1 when not specified", () => { 25 - const result = parseCardLine("Sol Ring"); 26 + const line = "Sol Ring"; 27 + const result = parseCardLine(line, { raw: line }); 26 28 expect(result).toEqual({ 27 29 quantity: 1, 28 30 name: "Sol Ring", ··· 32 34 }); 33 35 34 36 it("returns null for empty lines", () => { 35 - expect(parseCardLine("")).toBeNull(); 36 - expect(parseCardLine(" ")).toBeNull(); 37 + expect(parseCardLine("", { raw: "" })).toBeNull(); 38 + expect(parseCardLine(" ", { raw: " " })).toBeNull(); 37 39 }); 38 40 }); 39 41 40 42 describe("Arena format: (SET) number", () => { 41 43 it("parses set code in parentheses", () => { 42 - const result = parseCardLine("1 Lightning Bolt (2XM)"); 44 + const line = "1 Lightning Bolt (2XM)"; 45 + const result = parseCardLine(line, { raw: line }); 43 46 expect(result?.setCode).toBe("2XM"); 44 47 expect(result?.name).toBe("Lightning Bolt"); 45 48 }); 46 49 47 50 it("parses set code and collector number", () => { 48 - const result = parseCardLine("4 Lightning Bolt (2XM) 141"); 51 + const line = "4 Lightning Bolt (2XM) 141"; 52 + const result = parseCardLine(line, { raw: line }); 49 53 expect(result?.setCode).toBe("2XM"); 50 54 expect(result?.collectorNumber).toBe("141"); 51 55 }); 52 56 53 57 it("normalizes set code to uppercase", () => { 54 - const result = parseCardLine("1 Lightning Bolt (2xm) 141"); 58 + const line = "1 Lightning Bolt (2xm) 141"; 59 + const result = parseCardLine(line, { raw: line }); 55 60 expect(result?.setCode).toBe("2XM"); 56 61 }); 57 62 }); 58 63 59 64 describe("MTGGoldfish format: [SET] after name", () => { 60 65 it("parses set code in square brackets", () => { 61 - const result = parseCardLine("4 Lightning Bolt [2XM]"); 66 + const line = "4 Lightning Bolt [2XM]"; 67 + const result = parseCardLine(line, { raw: line, format: "mtggoldfish" }); 62 68 expect(result?.setCode).toBe("2XM"); 63 69 expect(result?.name).toBe("Lightning Bolt"); 64 70 }); 65 71 66 72 it("parses with <variant> marker", () => { 67 - const result = parseCardLine("3 Enduring Curiosity <extended> [DSK]"); 73 + const line = "3 Enduring Curiosity <extended> [DSK]"; 74 + const result = parseCardLine(line, { raw: line, format: "mtggoldfish" }); 68 75 expect(result?.setCode).toBe("DSK"); 69 76 expect(result?.name).toBe("Enduring Curiosity"); 70 77 }); 71 78 72 79 it("parses collector number in angle brackets", () => { 73 - const result = parseCardLine("4 Island <251> [THB]"); 80 + const line = "4 Island <251> [THB]"; 81 + const result = parseCardLine(line, { raw: line, format: "mtggoldfish" }); 74 82 expect(result?.setCode).toBe("THB"); 75 83 expect(result?.collectorNumber).toBe("251"); 76 84 expect(result?.name).toBe("Island"); 85 + }); 86 + 87 + it("strips (F) foil marker at end", () => { 88 + const line = "2 Cabal Therapy [EMA] (F)"; 89 + const result = parseCardLine(line, { raw: line, format: "mtggoldfish" }); 90 + expect(result?.setCode).toBe("EMA"); 91 + expect(result?.name).toBe("Cabal Therapy"); 92 + expect(result?.quantity).toBe(2); 77 93 }); 78 94 }); 79 95 80 96 describe("XMage format: [SET:num] before name", () => { 81 97 it("parses set and collector number before name", () => { 82 - const result = parseCardLine("4 [2XM:141] Lightning Bolt"); 98 + const line = "4 [2XM:141] Lightning Bolt"; 99 + const result = parseCardLine(line, { raw: line, format: "xmage" }); 83 100 expect(result?.setCode).toBe("2XM"); 84 101 expect(result?.collectorNumber).toBe("141"); 85 102 expect(result?.name).toBe("Lightning Bolt"); 86 103 }); 87 104 88 105 it("parses set without collector number", () => { 89 - const result = parseCardLine("4 [ZEN] Misty Rainforest"); 106 + const line = "4 [ZEN] Misty Rainforest"; 107 + const result = parseCardLine(line, { raw: line, format: "xmage" }); 90 108 expect(result?.setCode).toBe("ZEN"); 91 109 expect(result?.collectorNumber).toBeUndefined(); 92 110 expect(result?.name).toBe("Misty Rainforest"); ··· 95 113 96 114 describe("TappedOut format: Nx quantity", () => { 97 115 it("parses quantity with x suffix", () => { 98 - const result = parseCardLine("4x Lightning Bolt"); 116 + const line = "4x Lightning Bolt"; 117 + const result = parseCardLine(line, { raw: line }); 99 118 expect(result?.quantity).toBe(4); 100 119 expect(result?.name).toBe("Lightning Bolt"); 101 120 }); 102 121 103 122 it("parses with set code", () => { 104 - const result = parseCardLine("3x Abundant Growth (ECC) 97"); 123 + const line = "3x Abundant Growth (ECC) 97"; 124 + const result = parseCardLine(line, { raw: line }); 105 125 expect(result?.quantity).toBe(3); 106 126 expect(result?.setCode).toBe("ECC"); 107 127 expect(result?.collectorNumber).toBe("97"); ··· 110 130 111 131 describe("Moxfield format: tags and foil markers", () => { 112 132 it("parses #tags", () => { 113 - const result = parseCardLine("1 Sol Ring (CMM) 647 #ramp #staple"); 133 + const line = "1 Sol Ring (CMM) 647 #ramp #staple"; 134 + const result = parseCardLine(line, { raw: line }); 114 135 expect(result?.tags).toEqual(["ramp", "staple"]); 115 136 }); 116 137 117 138 it("strips *F* foil marker", () => { 118 - const result = parseCardLine("1 Edgar Markov (C17) 36 *F*"); 139 + const line = "1 Edgar Markov (C17) 36 *F*"; 140 + const result = parseCardLine(line, { raw: line }); 119 141 expect(result?.name).toBe("Edgar Markov"); 120 142 expect(result?.setCode).toBe("C17"); 121 143 }); 122 144 123 145 it("strips *A* alter marker", () => { 124 - const result = parseCardLine("1 Sol Ring (CMM) 647 *F* *A* #ramp"); 146 + const line = "1 Sol Ring (CMM) 647 *F* *A* #ramp"; 147 + const result = parseCardLine(line, { raw: line }); 125 148 expect(result?.tags).toEqual(["ramp"]); 126 149 }); 127 150 128 151 it("handles #! global tag prefix", () => { 129 - const result = parseCardLine("1 Sol Ring #!staple #ramp"); 152 + const line = "1 Sol Ring #!staple #ramp"; 153 + const result = parseCardLine(line, { raw: line }); 130 154 expect(result?.tags).toEqual(["staple", "ramp"]); 131 155 }); 132 156 133 157 it("deduplicates tags after stripping #! prefix", () => { 134 - // #!staple and #staple should collapse to single "staple" 135 - const result = parseCardLine("1 Sol Ring #!staple #staple #ramp"); 158 + const line = "1 Sol Ring #!staple #staple #ramp"; 159 + const result = parseCardLine(line, { raw: line }); 136 160 expect(result?.tags).toEqual(["staple", "ramp"]); 137 161 }); 138 162 }); 139 163 140 164 describe("Archidekt format: extras stripped", () => { 141 165 it("strips ^Tag^ color markers", () => { 142 - const result = parseCardLine("1x Sol Ring (cmm) 647 ^Have,#37d67a^"); 166 + const line = "1x Sol Ring (cmm) 647 ^Have,#37d67a^"; 167 + const result = parseCardLine(line, { raw: line }); 143 168 expect(result?.name).toBe("Sol Ring"); 144 169 expect(result?.setCode).toBe("CMM"); 145 170 }); ··· 147 172 148 173 describe("split cards", () => { 149 174 it("parses Fire // Ice", () => { 150 - const result = parseCardLine("4 Fire // Ice (MH2) 290"); 175 + const line = "4 Fire // Ice (MH2) 290"; 176 + const result = parseCardLine(line, { raw: line }); 151 177 expect(result?.name).toBe("Fire // Ice"); 152 178 expect(result?.setCode).toBe("MH2"); 153 179 }); 154 180 155 181 it("parses adventure cards with /", () => { 156 - const result = parseCardLine( 157 - "1 Agadeem's Awakening / Agadeem, the Undercrypt (ZNR) 90", 158 - ); 182 + const line = "1 Agadeem's Awakening / Agadeem, the Undercrypt (ZNR) 90"; 183 + const result = parseCardLine(line, { raw: line }); 159 184 expect(result?.name).toBe( 160 185 "Agadeem's Awakening / Agadeem, the Undercrypt", 161 186 ); ··· 164 189 165 190 describe("special characters", () => { 166 191 it("parses cards with punctuation", () => { 167 - const result = parseCardLine("1 Ach! Hans, Run!"); 192 + const line = "1 Ach! Hans, Run!"; 193 + const result = parseCardLine(line, { raw: line }); 168 194 expect(result?.name).toBe("Ach! Hans, Run!"); 169 195 }); 170 196 171 197 it("parses cards with + in name", () => { 172 - const result = parseCardLine("4 +2 Mace (AFR) 1"); 198 + const line = "4 +2 Mace (AFR) 1"; 199 + const result = parseCardLine(line, { raw: line }); 173 200 expect(result?.name).toBe("+2 Mace"); 174 201 }); 175 202 176 203 it("parses special collector numbers", () => { 177 - const result = parseCardLine("1 Lightning Bolt (STA) 62★"); 204 + const line = "1 Lightning Bolt (STA) 62★"; 205 + const result = parseCardLine(line, { raw: line }); 178 206 expect(result?.collectorNumber).toBe("62★"); 179 207 }); 180 208 181 209 it("parses collector numbers with letters", () => { 182 - const result = parseCardLine("1 Blazemire Verge (PDSK) 256p"); 210 + const line = "1 Blazemire Verge (PDSK) 256p"; 211 + const result = parseCardLine(line, { raw: line }); 183 212 expect(result?.collectorNumber).toBe("256p"); 184 213 }); 185 214 }); ··· 487 516 488 517 describe("quantity edge cases", () => { 489 518 it("treats quantity 0 as skipping the line", () => { 490 - const result = parseCardLine("0 Lightning Bolt"); 519 + const line = "0 Lightning Bolt"; 520 + const result = parseCardLine(line, { raw: line }); 491 521 // quantity 0 should still parse but with qty clamped to 1 492 522 expect(result?.quantity).toBe(1); 493 523 }); 494 524 495 525 it("handles leading zeros in quantity", () => { 496 - const result = parseCardLine("04 Lightning Bolt"); 526 + const line = "04 Lightning Bolt"; 527 + const result = parseCardLine(line, { raw: line }); 497 528 expect(result?.quantity).toBe(4); 498 529 expect(result?.name).toBe("Lightning Bolt"); 499 530 }); 500 531 501 532 it("handles very large quantities", () => { 502 - const result = parseCardLine("9999 Relentless Rats"); 533 + const line = "9999 Relentless Rats"; 534 + const result = parseCardLine(line, { raw: line }); 503 535 expect(result?.quantity).toBe(9999); 504 536 expect(result?.name).toBe("Relentless Rats"); 505 537 }); 506 538 507 539 it("defaults to 1 for non-numeric start", () => { 508 - const result = parseCardLine("Lightning Bolt"); 540 + const line = "Lightning Bolt"; 541 + const result = parseCardLine(line, { raw: line }); 509 542 expect(result?.quantity).toBe(1); 510 543 }); 511 544 }); ··· 574 607 575 608 describe("collector number edge cases", () => { 576 609 it("parses collector numbers with letter suffixes", () => { 577 - const result = parseCardLine("1 Night Soil (FEM) 71b"); 610 + const line = "1 Night Soil (FEM) 71b"; 611 + const result = parseCardLine(line, { raw: line }); 578 612 expect(result?.collectorNumber).toBe("71b"); 579 613 expect(result?.setCode).toBe("FEM"); 580 614 }); 581 615 582 616 it("parses promo set codes like PLST", () => { 583 - const result = parseCardLine("1 Citanul Woodreaders (PLST) DDR-4"); 617 + const line = "1 Citanul Woodreaders (PLST) DDR-4"; 618 + const result = parseCardLine(line, { raw: line }); 584 619 expect(result?.setCode).toBe("PLST"); 585 620 expect(result?.collectorNumber).toBe("DDR-4"); 586 621 }); 587 622 588 623 it("parses star collector numbers", () => { 589 - const result = parseCardLine("1 Lightning Bolt (STA) 62★"); 624 + const line = "1 Lightning Bolt (STA) 62★"; 625 + const result = parseCardLine(line, { raw: line }); 590 626 expect(result?.collectorNumber).toBe("62★"); 591 627 }); 592 628 593 629 it("parses collector numbers with p suffix (promo)", () => { 594 - const result = parseCardLine("1 Blazemire Verge (PDSK) 256p"); 630 + const line = "1 Blazemire Verge (PDSK) 256p"; 631 + const result = parseCardLine(line, { raw: line }); 595 632 expect(result?.collectorNumber).toBe("256p"); 596 633 expect(result?.setCode).toBe("PDSK"); 597 634 }); ··· 599 636 600 637 describe("malformed input", () => { 601 638 it("returns null for lines that are just numbers", () => { 602 - expect(parseCardLine("4")).toBeNull(); 603 - expect(parseCardLine("100")).toBeNull(); 604 - expect(parseCardLine("4x")).toBeNull(); 639 + expect(parseCardLine("4", { raw: "4" })).toBeNull(); 640 + expect(parseCardLine("100", { raw: "100" })).toBeNull(); 641 + expect(parseCardLine("4x", { raw: "4x" })).toBeNull(); 605 642 }); 606 643 607 644 it("handles lines with only whitespace", () => { 608 - const result = parseCardLine(" "); 645 + const line = " "; 646 + const result = parseCardLine(line, { raw: line }); 609 647 expect(result).toBeNull(); 610 648 }); 611 649 612 650 it("handles tab characters", () => { 613 - const result = parseCardLine("4\tLightning Bolt"); 651 + const line = "4\tLightning Bolt"; 652 + const result = parseCardLine(line, { raw: line }); 614 653 expect(result?.quantity).toBe(4); 615 654 expect(result?.name).toBe("Lightning Bolt"); 616 655 }); ··· 718 757 719 758 describe("card name edge cases", () => { 720 759 it("parses cards with commas in name", () => { 721 - const result = parseCardLine("1 Ach! Hans, Run!"); 760 + const line = "1 Ach! Hans, Run!"; 761 + const result = parseCardLine(line, { raw: line }); 722 762 expect(result?.name).toBe("Ach! Hans, Run!"); 723 763 }); 724 764 725 765 it("parses cards with apostrophes", () => { 726 - const result = parseCardLine("1 Agadeem's Awakening (ZNR) 90"); 766 + const line = "1 Agadeem's Awakening (ZNR) 90"; 767 + const result = parseCardLine(line, { raw: line }); 727 768 expect(result?.name).toBe("Agadeem's Awakening"); 728 769 }); 729 770 730 771 it("parses cards with + in name", () => { 731 - const result = parseCardLine("4 +2 Mace (AFR) 1"); 772 + const line = "4 +2 Mace (AFR) 1"; 773 + const result = parseCardLine(line, { raw: line }); 732 774 expect(result?.name).toBe("+2 Mace"); 733 775 }); 734 776 735 777 it("parses cards starting with numbers", () => { 736 - // Real card: "1996 World Champion" 737 - const result = parseCardLine("1 1996 World Champion"); 778 + const line = "1 1996 World Champion"; 779 + const result = parseCardLine(line, { raw: line }); 738 780 expect(result?.quantity).toBe(1); 739 781 expect(result?.name).toBe("1996 World Champion"); 740 782 }); 741 783 742 784 it("handles very long card names", () => { 743 - const result = parseCardLine( 744 - "1 Asmoranomardicadaistinaculdacar (MH2) 186", 745 - ); 785 + const line = "1 Asmoranomardicadaistinaculdacar (MH2) 186"; 786 + const result = parseCardLine(line, { raw: line }); 746 787 expect(result?.name).toBe("Asmoranomardicadaistinaculdacar"); 747 788 expect(result?.setCode).toBe("MH2"); 748 789 });
+16 -8
src/lib/deck-formats/__tests__/roundtrip.test.ts
··· 26 26 }; 27 27 28 28 const formatted = formatCardLine(card, "moxfield"); 29 - const parsed = parseCardLine(formatted); 29 + const parsed = parseCardLine(formatted, { raw: formatted }); 30 30 31 31 expect(parsed).not.toBeNull(); 32 32 expect(parsed?.quantity).toBe(card.quantity); ··· 45 45 }; 46 46 47 47 const formatted = formatCardLine(card, "moxfield"); 48 - const parsed = parseCardLine(formatted); 48 + const parsed = parseCardLine(formatted, { raw: formatted }); 49 49 50 50 expect(parsed).not.toBeNull(); 51 51 expect(parsed?.name).toBe("Sol Ring"); ··· 66 66 }; 67 67 68 68 const formatted = formatCardLine(card, "arena"); 69 - const parsed = parseCardLine(formatted); 69 + const parsed = parseCardLine(formatted, { raw: formatted }); 70 70 71 71 expect(parsed).not.toBeNull(); 72 72 expect(parsed?.quantity).toBe(card.quantity); ··· 90 90 }; 91 91 92 92 const formatted = formatCardLine(card, "xmage"); 93 - const parsed = parseCardLine(formatted); 93 + const parsed = parseCardLine(formatted, { 94 + raw: formatted, 95 + format: "xmage", 96 + }); 94 97 95 98 expect(parsed).not.toBeNull(); 96 99 expect(parsed?.quantity).toBe(card.quantity); ··· 195 198 fc.assert( 196 199 fc.property(parsedCardArb, (card) => { 197 200 const formatted = formatCardLine(card, "moxfield"); 198 - const parsed = parseCardLine(formatted); 201 + const parsed = parseCardLine(formatted, { raw: formatted }); 199 202 200 203 expect(parsed).not.toBeNull(); 201 204 expect(parsed?.quantity).toBe(card.quantity); ··· 215 218 fc.assert( 216 219 fc.property(parsedCardArb, (card) => { 217 220 const formatted = formatCardLine(card, "arena"); 218 - const parsed = parseCardLine(formatted); 221 + const parsed = parseCardLine(formatted, { raw: formatted }); 219 222 220 223 expect(parsed).not.toBeNull(); 221 224 expect(parsed?.quantity).toBe(card.quantity); ··· 237 240 if (!card.setCode) return; // XMage needs set code for proper roundtrip 238 241 239 242 const formatted = formatCardLine(card, "xmage"); 240 - const parsed = parseCardLine(formatted); 243 + const parsed = parseCardLine(formatted, { 244 + raw: formatted, 245 + format: "xmage", 246 + }); 241 247 242 248 expect(parsed).not.toBeNull(); 243 249 expect(parsed?.quantity).toBe(card.quantity); ··· 283 289 fc.assert( 284 290 fc.property(parsedCardArb, (card) => { 285 291 const formatted = formatCardLine(card, "moxfield"); 286 - expect(() => parseCardLine(formatted)).not.toThrow(); 292 + expect(() => 293 + parseCardLine(formatted, { raw: formatted }), 294 + ).not.toThrow(); 287 295 }), 288 296 { numRuns: 200 }, 289 297 );
+2 -1
src/lib/deck-formats/index.ts
··· 26 26 formatMoxfield, 27 27 formatMtgo, 28 28 } from "./export"; 29 - 29 + // Line matching (for previews) 30 + export { type MatchedLine, matchLinesToParsedCards } from "./match-lines"; 30 31 // Parsing 31 32 export { parseCardLine, parseDeck } from "./parse"; 32 33 // Section utilities (for advanced use)
+77
src/lib/deck-formats/match-lines.ts
··· 1 + /** 2 + * Match raw text lines to parsed cards, handling duplicates correctly. 3 + * 4 + * When the same card text appears multiple times (e.g., in mainboard and sideboard), 5 + * this matches them in order of appearance, ensuring each parsed card is claimed once. 6 + */ 7 + 8 + import type { DeckSection, ParsedCardLine, ParsedDeck } from "./types"; 9 + 10 + export interface MatchedLine { 11 + /** Unique key for React (stable unless line content changes) */ 12 + key: string; 13 + /** The trimmed line text */ 14 + trimmed: string; 15 + /** The parsed card for this line, or undefined if it's a header/metadata */ 16 + parsed?: ParsedCardLine; 17 + /** The section this card belongs to */ 18 + section?: DeckSection; 19 + } 20 + 21 + /** 22 + * Match raw text lines to their parsed cards and sections. 23 + * 24 + * Handles duplicate lines correctly by claiming parsed cards in order. 25 + * Each line gets a stable key (content-based, not index-based) for React. 26 + * 27 + * @param lines - Raw text lines from the textarea 28 + * @param parsedDeck - The parsed deck with cards organized by section 29 + * @returns Array parallel to `lines` with matched card info 30 + */ 31 + export function matchLinesToParsedCards( 32 + lines: string[], 33 + parsedDeck: ParsedDeck, 34 + ): MatchedLine[] { 35 + // Build ordered array of all parsed cards with their sections 36 + const cardsBySection: { section: DeckSection; card: ParsedCardLine }[] = []; 37 + for (const card of parsedDeck.commander) 38 + cardsBySection.push({ section: "commander", card }); 39 + for (const card of parsedDeck.mainboard) 40 + cardsBySection.push({ section: "mainboard", card }); 41 + for (const card of parsedDeck.sideboard) 42 + cardsBySection.push({ section: "sideboard", card }); 43 + for (const card of parsedDeck.maybeboard) 44 + cardsBySection.push({ section: "maybeboard", card }); 45 + 46 + // Track which parsed cards have been claimed 47 + const claimed = new Set<number>(); 48 + // Track occurrence counts for key generation 49 + const counts = new Map<string, number>(); 50 + 51 + return lines.map((line) => { 52 + const trimmed = line.trim(); 53 + const occurrence = counts.get(trimmed) ?? 0; 54 + counts.set(trimmed, occurrence + 1); 55 + const key = `${trimmed}:${occurrence}`; 56 + 57 + if (!trimmed) { 58 + return { key, trimmed }; 59 + } 60 + 61 + // Find the first unclaimed parsed card with matching raw text 62 + for (let j = 0; j < cardsBySection.length; j++) { 63 + if (!claimed.has(j) && cardsBySection[j].card.raw === trimmed) { 64 + claimed.add(j); 65 + return { 66 + key, 67 + trimmed, 68 + parsed: cardsBySection[j].card, 69 + section: cardsBySection[j].section, 70 + }; 71 + } 72 + } 73 + 74 + // No match found - this line is a section header or metadata 75 + return { key, trimmed }; 76 + }); 77 + }
+58 -21
src/lib/deck-formats/parse.ts
··· 20 20 ParseOptions, 21 21 } from "./types"; 22 22 23 + interface ParseCardLineOptions { 24 + /** Original raw line to store in result (before any marker stripping) */ 25 + raw: string; 26 + /** Format hint for format-specific marker handling */ 27 + format?: string; 28 + } 29 + 30 + /** 31 + * Strip format-specific markers from a card line. 32 + * 33 + * Removes visual markers that don't affect card identity: 34 + * - *F*, *A* (Moxfield foil/alter) 35 + * - (F) at end (MTGGoldfish foil) 36 + * - ^...^ (Archidekt color markers) 37 + * - <...> (MTGGoldfish variant markers) 38 + * - [...] (Archidekt category markers, unless XMage/MTGGoldfish format) 39 + */ 40 + export function stripMarkers(line: string, format?: string): string { 41 + let result = line; 42 + 43 + // Strip *F* (foil) and *A* (alter) markers (Moxfield style) 44 + result = result.replace(/\s*\*[FA]\*\s*/g, " "); 45 + 46 + // Strip (F) foil marker at end (MTGGoldfish style) 47 + result = result.replace(/\s*\(F\)\s*$/i, ""); 48 + 49 + // Strip ^Tag,#color^ markers (Archidekt) 50 + result = result.replace(/\s*\^[^^]+\^\s*/g, " "); 51 + 52 + // Strip <variant> markers (MTGGoldfish) 53 + result = result.replace(/<[^>]+>/g, " "); 54 + 55 + // Strip [...] category markers (Archidekt) - but not for XMage/MTGGoldfish 56 + // which use brackets for set codes 57 + if (format !== "xmage" && format !== "mtggoldfish") { 58 + result = result.replace(/\s*\[[^\]]+\]/g, ""); 59 + } 60 + 61 + // Normalize whitespace 62 + return result.replace(/\s+/g, " ").trim(); 63 + } 64 + 23 65 /** 24 66 * Parse a single line of card text. 25 67 * 26 68 * Handles all format variations for quantity, set code, and collector number. 27 69 * Tries patterns in order of specificity - most distinctive first. 28 70 */ 29 - export function parseCardLine(line: string): ParsedCardLine | null { 30 - let remaining = line.trim(); 31 - if (!remaining) { 71 + export function parseCardLine( 72 + line: string, 73 + options: ParseCardLineOptions, 74 + ): ParsedCardLine | null { 75 + const trimmedLine = line.trim(); 76 + if (!trimmedLine) { 32 77 return null; 33 78 } 34 79 35 - // Strip *F* (foil) and *A* (alter) markers 36 - remaining = remaining.replace(/\s*\*[FA]\*\s*/g, " ").trim(); 37 - 38 - // Strip ^Tag,#color^ markers (Archidekt) 39 - remaining = remaining.replace(/\s*\^[^^]+\^\s*/g, " ").trim(); 40 - 41 80 // Extract <collector#> from MTGGoldfish variant markers before stripping 42 81 let variantCollectorNumber: string | undefined; 43 - const collectorInVariant = remaining.match(/<(\d+[a-z★†]?)>/i); 82 + const collectorInVariant = trimmedLine.match(/<(\d+[a-z★†]?)>/i); 44 83 if (collectorInVariant) { 45 84 variantCollectorNumber = collectorInVariant[1]; 46 85 } 47 - // Strip <variant> markers (MTGGoldfish) 48 - remaining = remaining 49 - .replace(/<[^>]+>/g, " ") 50 - .replace(/\s+/g, " ") 51 - .trim(); 86 + 87 + // Strip format markers 88 + let remaining = stripMarkers(trimmedLine, options.format); 52 89 53 90 // Extract tags (#tag #!global #multi word tag) 54 91 // Tags start at first # and go to end of line (after stripping other markers) ··· 90 127 setCode: xmageMatch[1].toUpperCase(), 91 128 collectorNumber: xmageMatch[2], 92 129 tags: [...new Set(tags)], 93 - raw: line.trim(), 130 + raw: options.raw, 94 131 }; 95 132 } 96 133 ··· 103 140 setCode: goldfishMatch[2].toUpperCase(), 104 141 collectorNumber: variantCollectorNumber, 105 142 tags: [...new Set(tags)], 106 - raw: line.trim(), 143 + raw: options.raw, 107 144 }; 108 145 } 109 146 ··· 118 155 setCode: arenaMatch[2].toUpperCase(), 119 156 collectorNumber: arenaMatch[3], 120 157 tags: [...new Set(tags)], 121 - raw: line.trim(), 158 + raw: options.raw, 122 159 }; 123 160 } 124 161 ··· 136 173 quantity, 137 174 name, 138 175 tags: [...new Set(tags)], 139 - raw: line.trim(), 176 + raw: options.raw, 140 177 }; 141 178 } 142 179 ··· 290 327 } 291 328 sawBlankLine = false; 292 329 293 - // Parse the card line 294 - const parsed = parseCardLine(cardLine); 330 + // Parse the card line (cardLine is cleaned by extractInlineSection, trimmed is original) 331 + const parsed = parseCardLine(cardLine, { raw: trimmed, format }); 295 332 if (parsed) { 296 333 // Merge tags: category header + inline tags + parsed tags 297 334 const allTags: string[] = [];
+21
src/routeTree.gen.ts
··· 19 19 import { Route as DevPmDemoRouteImport } from './routes/dev/pm-demo' 20 20 import { Route as DevMigrateRouteImport } from './routes/dev/migrate' 21 21 import { Route as DeckNewRouteImport } from './routes/deck/new' 22 + import { Route as DeckImportRouteImport } from './routes/deck/import' 22 23 import { Route as CardIdRouteImport } from './routes/card/$id' 23 24 import { Route as ProfileDidIndexRouteImport } from './routes/profile/$did/index' 24 25 import { Route as ProfileDidListsRouteImport } from './routes/profile/$did/lists' ··· 78 79 const DeckNewRoute = DeckNewRouteImport.update({ 79 80 id: '/deck/new', 80 81 path: '/deck/new', 82 + getParentRoute: () => rootRouteImport, 83 + } as any) 84 + const DeckImportRoute = DeckImportRouteImport.update({ 85 + id: '/deck/import', 86 + path: '/deck/import', 81 87 getParentRoute: () => rootRouteImport, 82 88 } as any) 83 89 const CardIdRoute = CardIdRouteImport.update({ ··· 139 145 '/signin': typeof SigninRoute 140 146 '/signup': typeof SignupRoute 141 147 '/card/$id': typeof CardIdRoute 148 + '/deck/import': typeof DeckImportRoute 142 149 '/deck/new': typeof DeckNewRoute 143 150 '/dev/migrate': typeof DevMigrateRoute 144 151 '/dev/pm-demo': typeof DevPmDemoRoute ··· 161 168 '/signin': typeof SigninRoute 162 169 '/signup': typeof SignupRoute 163 170 '/card/$id': typeof CardIdRoute 171 + '/deck/import': typeof DeckImportRoute 164 172 '/deck/new': typeof DeckNewRoute 165 173 '/dev/migrate': typeof DevMigrateRoute 166 174 '/dev/pm-demo': typeof DevPmDemoRoute ··· 182 190 '/signin': typeof SigninRoute 183 191 '/signup': typeof SignupRoute 184 192 '/card/$id': typeof CardIdRoute 193 + '/deck/import': typeof DeckImportRoute 185 194 '/deck/new': typeof DeckNewRoute 186 195 '/dev/migrate': typeof DevMigrateRoute 187 196 '/dev/pm-demo': typeof DevPmDemoRoute ··· 206 215 | '/signin' 207 216 | '/signup' 208 217 | '/card/$id' 218 + | '/deck/import' 209 219 | '/deck/new' 210 220 | '/dev/migrate' 211 221 | '/dev/pm-demo' ··· 228 238 | '/signin' 229 239 | '/signup' 230 240 | '/card/$id' 241 + | '/deck/import' 231 242 | '/deck/new' 232 243 | '/dev/migrate' 233 244 | '/dev/pm-demo' ··· 248 259 | '/signin' 249 260 | '/signup' 250 261 | '/card/$id' 262 + | '/deck/import' 251 263 | '/deck/new' 252 264 | '/dev/migrate' 253 265 | '/dev/pm-demo' ··· 271 283 SigninRoute: typeof SigninRoute 272 284 SignupRoute: typeof SignupRoute 273 285 CardIdRoute: typeof CardIdRoute 286 + DeckImportRoute: typeof DeckImportRoute 274 287 DeckNewRoute: typeof DeckNewRoute 275 288 OauthCallbackRoute: typeof OauthCallbackRoute 276 289 UHandleRoute: typeof UHandleRoute ··· 351 364 path: '/deck/new' 352 365 fullPath: '/deck/new' 353 366 preLoaderRoute: typeof DeckNewRouteImport 367 + parentRoute: typeof rootRouteImport 368 + } 369 + '/deck/import': { 370 + id: '/deck/import' 371 + path: '/deck/import' 372 + fullPath: '/deck/import' 373 + preLoaderRoute: typeof DeckImportRouteImport 354 374 parentRoute: typeof rootRouteImport 355 375 } 356 376 '/card/$id': { ··· 474 494 SigninRoute: SigninRoute, 475 495 SignupRoute: SignupRoute, 476 496 CardIdRoute: CardIdRoute, 497 + DeckImportRoute: DeckImportRoute, 477 498 DeckNewRoute: DeckNewRoute, 478 499 OauthCallbackRoute: OauthCallbackRoute, 479 500 UHandleRoute: UHandleRoute,
+576
src/routes/deck/import.tsx
··· 1 + import { createFileRoute } from "@tanstack/react-router"; 2 + import { AlertCircle, AlertTriangle, Check, Loader2 } from "lucide-react"; 3 + import { 4 + useCallback, 5 + useEffect, 6 + useId, 7 + useMemo, 8 + useRef, 9 + useState, 10 + } from "react"; 11 + import { useCardHover } from "@/components/HoverCardPreview"; 12 + import { ManaCost } from "@/components/ManaCost"; 13 + import { getCardDataProvider } from "@/lib/card-data-provider"; 14 + import { getPrimaryFace } from "@/lib/card-faces"; 15 + import { 16 + DECK_FORMATS, 17 + type DeckFormat, 18 + detectFormat, 19 + matchLinesToParsedCards, 20 + parseDeck, 21 + } from "@/lib/deck-formats"; 22 + import { type ResolvedCard, resolveCards } from "@/lib/deck-import"; 23 + import { useCreateDeckMutation } from "@/lib/deck-queries"; 24 + import type { Section } from "@/lib/deck-types"; 25 + import { FORMAT_GROUPS } from "@/lib/format-utils"; 26 + import type { Card } from "@/lib/scryfall-types"; 27 + import { useDebounce } from "@/lib/useDebounce"; 28 + 29 + export const Route = createFileRoute("/deck/import")({ 30 + component: ImportDeckPage, 31 + validateSearch: (search: Record<string, unknown>) => { 32 + return { 33 + format: (search.format as string) || undefined, 34 + }; 35 + }, 36 + head: () => ({ 37 + meta: [{ title: "Import Deck | DeckBelcher" }], 38 + }), 39 + }); 40 + 41 + type ImportLineType = 42 + | { type: "empty" } 43 + | { type: "section-header"; label: string } 44 + | { type: "pending"; name: string } 45 + | { 46 + type: "resolved"; 47 + card: Card; 48 + quantity: number; 49 + section: Section; 50 + tags: string[]; 51 + isImperfect?: boolean; 52 + } 53 + | { type: "error"; message: string }; 54 + 55 + interface ImportLine { 56 + key: string; 57 + line: ImportLineType; 58 + } 59 + 60 + const TAG_COLORS = [ 61 + "bg-cyan-100 text-cyan-800 dark:bg-cyan-900/50 dark:text-cyan-300", 62 + "bg-purple-100 text-purple-800 dark:bg-purple-900/50 dark:text-purple-300", 63 + "bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-300", 64 + "bg-emerald-100 text-emerald-800 dark:bg-emerald-900/50 dark:text-emerald-300", 65 + "bg-rose-100 text-rose-800 dark:bg-rose-900/50 dark:text-rose-300", 66 + "bg-indigo-100 text-indigo-800 dark:bg-indigo-900/50 dark:text-indigo-300", 67 + "bg-teal-100 text-teal-800 dark:bg-teal-900/50 dark:text-teal-300", 68 + "bg-pink-100 text-pink-800 dark:bg-pink-900/50 dark:text-pink-300", 69 + ]; 70 + 71 + function hashString(str: string): number { 72 + let hash = 0; 73 + for (let i = 0; i < str.length; i++) { 74 + hash = (hash << 5) - hash + str.charCodeAt(i); 75 + hash |= 0; 76 + } 77 + return Math.abs(hash); 78 + } 79 + 80 + function getTagColor(tag: string): string { 81 + return TAG_COLORS[hashString(tag) % TAG_COLORS.length]; 82 + } 83 + 84 + const SECTION_CHIPS: Record< 85 + Section, 86 + { label: string; className: string } | null 87 + > = { 88 + mainboard: null, 89 + commander: { 90 + label: "Cmdr", 91 + className: 92 + "bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-300", 93 + }, 94 + sideboard: { 95 + label: "Side", 96 + className: 97 + "bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-300", 98 + }, 99 + maybeboard: { 100 + label: "Maybe", 101 + className: "bg-gray-100 text-gray-600 dark:bg-zinc-700 dark:text-zinc-300", 102 + }, 103 + }; 104 + 105 + function ImportDeckPage() { 106 + const { format: initialFormat } = Route.useSearch(); 107 + const [text, setText] = useState(""); 108 + const [deckName, setDeckName] = useState(""); 109 + const [gameFormat, setGameFormat] = useState(initialFormat || "commander"); 110 + const [formatOverride, setFormatOverride] = useState<DeckFormat | null>(null); 111 + const nameId = useId(); 112 + const formatId = useId(); 113 + const prevDetectedFormat = useRef<DeckFormat>("generic"); 114 + 115 + const mutation = useCreateDeckMutation(); 116 + 117 + const detectedFormat = useMemo(() => detectFormat(text), [text]); 118 + const effectiveFormat = formatOverride ?? detectedFormat; 119 + 120 + // Reset override when detected format changes 121 + useEffect(() => { 122 + if (detectedFormat !== prevDetectedFormat.current) { 123 + setFormatOverride(null); 124 + prevDetectedFormat.current = detectedFormat; 125 + } 126 + }, [detectedFormat]); 127 + 128 + const parsedDeck = useMemo( 129 + () => parseDeck(text, { format: effectiveFormat }), 130 + [text, effectiveFormat], 131 + ); 132 + 133 + // Pre-fill deck name from parsed metadata 134 + useEffect(() => { 135 + if (parsedDeck.name && !deckName) { 136 + setDeckName(parsedDeck.name); 137 + } 138 + }, [parsedDeck.name, deckName]); 139 + 140 + const { value: debouncedParsed } = useDebounce(parsedDeck, 300); 141 + 142 + // Resolution state 143 + const [resolvedMap, setResolvedMap] = useState< 144 + Map<string, ResolvedCard & { cardData: Card }> 145 + >(new Map()); 146 + const [errorMap, setErrorMap] = useState<Map<string, string>>(new Map()); 147 + const [isResolving, setIsResolving] = useState(false); 148 + 149 + // Resolve cards when parsed deck changes 150 + useEffect(() => { 151 + const allParsed = [ 152 + ...debouncedParsed.commander, 153 + ...debouncedParsed.mainboard, 154 + ...debouncedParsed.sideboard, 155 + ...debouncedParsed.maybeboard, 156 + ]; 157 + 158 + if (allParsed.length === 0) { 159 + setResolvedMap(new Map()); 160 + setErrorMap(new Map()); 161 + return; 162 + } 163 + 164 + let cancelled = false; 165 + setIsResolving(true); 166 + 167 + (async () => { 168 + const provider = await getCardDataProvider(); 169 + const restrictions = gameFormat ? { format: gameFormat } : undefined; 170 + const result = await resolveCards( 171 + allParsed, 172 + async (name) => 173 + provider.searchCards 174 + ? provider.searchCards(name, restrictions, 10) 175 + : [], 176 + (oracleId) => provider.getPrintingsByOracleId(oracleId), 177 + (id) => provider.getCardById(id), 178 + ); 179 + 180 + if (cancelled) return; 181 + 182 + const newErrors = new Map<string, string>(); 183 + for (const error of result.errors) { 184 + newErrors.set(error.raw, error.error); 185 + } 186 + 187 + const cardDataList = await Promise.all( 188 + result.resolved.map((r) => provider.getCardById(r.scryfallId)), 189 + ); 190 + 191 + if (cancelled) return; 192 + 193 + const newResolved = new Map<string, ResolvedCard & { cardData: Card }>(); 194 + for (let i = 0; i < result.resolved.length; i++) { 195 + const resolved = result.resolved[i]; 196 + const cardData = cardDataList[i]; 197 + if (!cardData) continue; 198 + newResolved.set(resolved.raw, { ...resolved, cardData }); 199 + } 200 + 201 + setResolvedMap(newResolved); 202 + setErrorMap(newErrors); 203 + setIsResolving(false); 204 + })(); 205 + 206 + return () => { 207 + cancelled = true; 208 + }; 209 + }, [debouncedParsed, gameFormat]); 210 + 211 + // Build preview lines with row sync 212 + const previewLines = useMemo(() => { 213 + const lines = text.split("\n"); 214 + const matched = matchLinesToParsedCards(lines, parsedDeck); 215 + 216 + return matched.map(({ key, trimmed, parsed, section }): ImportLine => { 217 + if (!trimmed) { 218 + return { key, line: { type: "empty" } }; 219 + } 220 + 221 + // If no parsed card, it's a section/metadata header 222 + if (!parsed) { 223 + return { key, line: { type: "section-header", label: trimmed } }; 224 + } 225 + 226 + const error = errorMap.get(trimmed); 227 + if (error) { 228 + return { key, line: { type: "error", message: error } }; 229 + } 230 + 231 + const resolved = resolvedMap.get(trimmed); 232 + if (resolved) { 233 + const isImperfect = 234 + parsed.name.toLowerCase() !== resolved.cardData.name.toLowerCase(); 235 + return { 236 + key, 237 + line: { 238 + type: "resolved", 239 + card: resolved.cardData, 240 + quantity: parsed.quantity, 241 + section: section ?? "mainboard", 242 + tags: parsed.tags, 243 + isImperfect, 244 + }, 245 + }; 246 + } 247 + 248 + return { key, line: { type: "pending", name: parsed.name } }; 249 + }); 250 + }, [text, parsedDeck, resolvedMap, errorMap]); 251 + 252 + // Stats 253 + const totalCards = useMemo(() => { 254 + let count = 0; 255 + for (const line of previewLines) { 256 + if (line.line.type === "resolved") { 257 + count += line.line.quantity; 258 + } 259 + } 260 + return count; 261 + }, [previewLines]); 262 + 263 + const errorCount = errorMap.size; 264 + const hasErrors = errorCount > 0; 265 + 266 + const handleCreate = useCallback(() => { 267 + if (!deckName.trim()) return; 268 + 269 + const cards = []; 270 + const sections: Section[] = [ 271 + "commander", 272 + "mainboard", 273 + "sideboard", 274 + "maybeboard", 275 + ]; 276 + for (const section of sections) { 277 + for (const parsed of parsedDeck[section]) { 278 + const resolved = resolvedMap.get(parsed.raw); 279 + if (!resolved) continue; 280 + 281 + cards.push({ 282 + scryfallId: resolved.scryfallId, 283 + oracleId: resolved.oracleId, 284 + quantity: parsed.quantity, 285 + section, 286 + tags: parsed.tags, 287 + }); 288 + } 289 + } 290 + 291 + mutation.mutate({ 292 + name: deckName.trim(), 293 + format: gameFormat || undefined, 294 + cards, 295 + }); 296 + }, [deckName, gameFormat, resolvedMap, parsedDeck, mutation]); 297 + 298 + const textareaLines = text.split("\n").length; 299 + 300 + return ( 301 + <div className="min-h-screen bg-white dark:bg-zinc-900"> 302 + <div className="max-w-6xl mx-auto px-6 py-8"> 303 + <div className="mb-6"> 304 + <h1 className="text-2xl font-bold text-gray-900 dark:text-white"> 305 + Import Deck 306 + </h1> 307 + <p className="text-gray-600 dark:text-zinc-300 mt-1"> 308 + Paste a deck list from any major site. Format is auto-detected. 309 + </p> 310 + </div> 311 + 312 + {/* Deck metadata row */} 313 + <div className="flex gap-4 mb-4"> 314 + <div className="flex-1"> 315 + <label 316 + htmlFor={nameId} 317 + className="block text-sm font-medium text-gray-700 dark:text-zinc-300 mb-1" 318 + > 319 + Deck Name 320 + </label> 321 + <input 322 + id={nameId} 323 + type="text" 324 + value={deckName} 325 + onChange={(e) => setDeckName(e.target.value)} 326 + placeholder="Untitled Deck" 327 + autoComplete="off" 328 + className="w-full px-3 py-2 bg-gray-100 dark:bg-zinc-800 border border-gray-300 dark:border-zinc-600 rounded-lg text-gray-900 dark:text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 transition-colors" 329 + /> 330 + </div> 331 + <div className="w-48"> 332 + <label 333 + htmlFor={formatId} 334 + className="block text-sm font-medium text-gray-700 dark:text-zinc-300 mb-1" 335 + > 336 + Format 337 + </label> 338 + <select 339 + id={formatId} 340 + value={gameFormat} 341 + onChange={(e) => setGameFormat(e.target.value)} 342 + className="w-full px-3 py-2 bg-gray-100 dark:bg-zinc-800 border border-gray-300 dark:border-zinc-600 rounded-lg text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-cyan-500 transition-colors" 343 + > 344 + {FORMAT_GROUPS.map((group) => ( 345 + <optgroup key={group.label} label={group.label}> 346 + {group.formats.map((fmt) => ( 347 + <option key={fmt.value} value={fmt.value}> 348 + {fmt.label} 349 + </option> 350 + ))} 351 + </optgroup> 352 + ))} 353 + </select> 354 + </div> 355 + </div> 356 + 357 + {/* Format detection badge */} 358 + <div className="flex items-center gap-2 mb-4"> 359 + <span className="text-sm text-gray-600 dark:text-zinc-300"> 360 + Detected: 361 + </span> 362 + <FormatBadge 363 + detected={detectedFormat} 364 + override={formatOverride} 365 + onOverride={setFormatOverride} 366 + /> 367 + {isResolving && ( 368 + <span className="flex items-center gap-1 text-sm text-gray-500 dark:text-zinc-400"> 369 + <Loader2 className="w-4 h-4 animate-spin" /> 370 + Resolving... 371 + </span> 372 + )} 373 + </div> 374 + 375 + {/* Editor container */} 376 + <div className="overflow-auto max-h-[28rem] border border-gray-300 dark:border-zinc-600 rounded-lg bg-white dark:bg-zinc-800"> 377 + <div className="flex"> 378 + <textarea 379 + value={text} 380 + onChange={(e) => setText(e.target.value)} 381 + wrap="off" 382 + className="flex-1 p-4 font-mono text-sm leading-[1.5] resize-none overflow-x-auto overflow-y-hidden bg-transparent text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-zinc-500 focus:outline-none [font-variant-ligatures:none]" 383 + style={{ 384 + height: `calc(${Math.max(textareaLines, 15)} * 1.5em + 2rem)`, 385 + }} 386 + placeholder={`Paste your deck list here... 387 + 388 + Examples: 389 + 4 Lightning Bolt (2XM) 141 390 + 1 Sol Ring 391 + Sideboard 392 + 2 Grafdigger's Cage`} 393 + /> 394 + <ImportPreview lines={previewLines} /> 395 + </div> 396 + </div> 397 + 398 + {/* Stats */} 399 + <div className="mt-2 flex items-center gap-4 text-sm text-gray-500 dark:text-zinc-300"> 400 + <span>{totalCards} cards</span> 401 + {hasErrors && ( 402 + <span className="text-red-600 dark:text-red-400"> 403 + {errorCount} {errorCount === 1 ? "error" : "errors"} 404 + </span> 405 + )} 406 + </div> 407 + 408 + {/* Actions */} 409 + <div className="mt-6 flex gap-3"> 410 + <button 411 + type="button" 412 + onClick={handleCreate} 413 + disabled={ 414 + mutation.isPending || 415 + !deckName.trim() || 416 + resolvedMap.size === 0 || 417 + hasErrors 418 + } 419 + className="px-6 py-2 bg-cyan-400 hover:bg-cyan-300 disabled:bg-gray-400 dark:disabled:bg-zinc-600 disabled:cursor-not-allowed text-gray-900 font-medium rounded-lg transition-colors" 420 + > 421 + {mutation.isPending ? "Creating..." : "Create Deck"} 422 + </button> 423 + <button 424 + type="button" 425 + onClick={() => { 426 + setText(""); 427 + setDeckName(""); 428 + setFormatOverride(null); 429 + }} 430 + disabled={!text} 431 + className="px-6 py-2 bg-gray-200 dark:bg-zinc-700 hover:bg-gray-300 dark:hover:bg-zinc-600 disabled:opacity-50 disabled:cursor-not-allowed text-gray-900 dark:text-white font-medium rounded-lg transition-colors" 432 + > 433 + Clear 434 + </button> 435 + </div> 436 + </div> 437 + </div> 438 + ); 439 + } 440 + 441 + interface FormatBadgeProps { 442 + detected: DeckFormat; 443 + override: DeckFormat | null; 444 + onOverride: (format: DeckFormat | null) => void; 445 + } 446 + 447 + function FormatBadge({ detected, override, onOverride }: FormatBadgeProps) { 448 + const value = override ?? ""; 449 + 450 + return ( 451 + <select 452 + value={value} 453 + onChange={(e) => { 454 + const val = e.target.value; 455 + onOverride(val === "" ? null : (val as DeckFormat)); 456 + }} 457 + className="px-2 py-1 text-sm font-medium bg-gray-100 dark:bg-zinc-700 hover:bg-gray-200 dark:hover:bg-zinc-600 text-gray-900 dark:text-white rounded border-none focus:outline-none focus:ring-2 focus:ring-cyan-500 cursor-pointer" 458 + > 459 + <option value="">Auto ({DECK_FORMATS[detected].label})</option> 460 + {(Object.keys(DECK_FORMATS) as DeckFormat[]).map((fmt) => ( 461 + <option key={fmt} value={fmt}> 462 + {DECK_FORMATS[fmt].label} 463 + </option> 464 + ))} 465 + </select> 466 + ); 467 + } 468 + 469 + interface ImportPreviewProps { 470 + lines: ImportLine[]; 471 + } 472 + 473 + function ImportPreview({ lines }: ImportPreviewProps) { 474 + return ( 475 + <div className="flex-1 p-4 border-l border-gray-200 dark:border-zinc-600 overflow-hidden"> 476 + {lines.map((line) => ( 477 + <PreviewRow key={line.key} line={line.line} /> 478 + ))} 479 + </div> 480 + ); 481 + } 482 + 483 + const ROW_CLASS = 484 + "font-mono text-sm leading-[1.5] whitespace-nowrap [font-variant-ligatures:none] flex items-center gap-2"; 485 + 486 + function PreviewRow({ line }: { line: ImportLineType }) { 487 + switch (line.type) { 488 + case "empty": 489 + return <div className={ROW_CLASS}>&nbsp;</div>; 490 + 491 + case "section-header": 492 + return ( 493 + <div className={`${ROW_CLASS} text-gray-400 dark:text-zinc-500`}> 494 + ─── {line.label} ─── 495 + </div> 496 + ); 497 + 498 + case "pending": 499 + return ( 500 + <div className={ROW_CLASS}> 501 + <Loader2 className="w-3.5 h-3.5 text-gray-400 dark:text-zinc-400 animate-spin flex-shrink-0" /> 502 + <span className="text-gray-400 dark:text-zinc-400 italic truncate"> 503 + {line.name} 504 + </span> 505 + </div> 506 + ); 507 + 508 + case "error": 509 + return ( 510 + <div className={ROW_CLASS}> 511 + <AlertCircle className="w-3.5 h-3.5 text-red-500 dark:text-red-400 flex-shrink-0" /> 512 + <span className="text-red-600 dark:text-red-400 truncate"> 513 + {line.message} 514 + </span> 515 + </div> 516 + ); 517 + 518 + case "resolved": 519 + return <ResolvedRow line={line} />; 520 + } 521 + } 522 + 523 + function ResolvedRow({ 524 + line, 525 + }: { 526 + line: Extract<ImportLineType, { type: "resolved" }>; 527 + }) { 528 + const hoverProps = useCardHover(line.card.id); 529 + const primaryFace = getPrimaryFace(line.card); 530 + const sectionChip = SECTION_CHIPS[line.section]; 531 + 532 + const bgClass = line.isImperfect 533 + ? "bg-amber-50 dark:bg-amber-900/30 hover:bg-amber-100 dark:hover:bg-amber-900/40" 534 + : "hover:bg-gray-100 dark:hover:bg-zinc-700"; 535 + 536 + return ( 537 + <div 538 + className={`${ROW_CLASS} ${bgClass} rounded px-1 -mx-1 cursor-default`} 539 + {...hoverProps} 540 + > 541 + {line.isImperfect ? ( 542 + <AlertTriangle className="w-3.5 h-3.5 text-amber-600 dark:text-amber-400 flex-shrink-0" /> 543 + ) : ( 544 + <Check className="w-3.5 h-3.5 text-green-600 dark:text-green-400 flex-shrink-0" /> 545 + )} 546 + <span className="text-gray-600 dark:text-zinc-300 text-xs w-4 text-right flex-shrink-0"> 547 + {line.quantity} 548 + </span> 549 + <span className="text-gray-900 dark:text-white truncate min-w-0"> 550 + {primaryFace?.name ?? "Unknown"} 551 + </span> 552 + <div className="flex-shrink-0 flex items-center"> 553 + {primaryFace?.mana_cost && ( 554 + <ManaCost cost={primaryFace.mana_cost} size="small" /> 555 + )} 556 + </div> 557 + <div className="flex-shrink-0 flex items-center gap-1 overflow-hidden ml-auto"> 558 + {sectionChip && ( 559 + <span 560 + className={`px-1.5 py-0.5 text-xs font-medium rounded ${sectionChip.className}`} 561 + > 562 + {sectionChip.label} 563 + </span> 564 + )} 565 + {line.tags.map((tag) => ( 566 + <span 567 + key={tag} 568 + className={`px-1.5 py-0.5 text-xs font-medium rounded ${getTagColor(tag)}`} 569 + > 570 + #{tag} 571 + </span> 572 + ))} 573 + </div> 574 + </div> 575 + ); 576 + }
+6
todos.md
··· 85 85 86 86 ### Medium Priority 87 87 88 + #### Bulk edit: use deck-formats parser and line matching 89 + - **Location**: `src/routes/profile/$did/deck/$rkey/bulk-edit.tsx` 90 + - **Issue**: Uses old `parseCardList` from deck-import.ts, and `parsedByRaw` map loses duplicate lines in preview 91 + - **Fix**: Switch to `parseDeck` from deck-formats, use `matchLinesToParsedCards` for preview line matching 92 + - **Effort**: Small (1-2 hours) 93 + 88 94 #### Memoize regex patterns in getSourceTempo 89 95 - **Location**: `src/lib/deck-stats.ts:148-225` 90 96 - **Issue**: Regex patterns compiled on every function call, no memoization