anchor.diff:  import '../lib/gamemodel.dart';
   import '../lib/rules.dart';
   
  +class SelectionState {
  +  Piece piece;
  +  List<Move> validMoves = [];
  +
  +  void select(Piece piece, GameState gamestate) {
  +    this.piece = piece;
  +    if (piece == null) {
  +      validMoves = [];
  +    } else {
  +      validMoves = piece.moves(gamestate);
  +    }
  +  }
  +
  +  void clear() {
  +    piece = null;
  +    validMoves = [];
  +  }
  +}
  +
   var camera = new Camera();
   Bench bench;
  -Piece selectedPiece;
  +SelectionState selectionState = new SelectionState();
   
   
   void main() {
  
positive.code:     return;
    }
    bench = new Bench(parsedGame.player1, parsedGame.player2);
    selectedPiece = null;
    gamestate.initialize(parsedGame.gameEvents);
    gamestate.step(1);
    render(gamestate);
  }
  
  void showNextMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.stepBy(1);
  
    render(gamestate);
  }
  
  void showPreviousMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.stepBy(-1);
  
    render(gamestate);
  }
  
  void showFirstMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.step(1);
  
    render(gamestate);
  }
  
  void showLastMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.stepToEnd();
  
    render(gamestate);
  
negative.code: 
    List<Move> moves = [];
    Piece clickedPiece = gamestate.pieceAt(coordinate);
    selectionState.select(clickedPiece, gamestate);
  
    render(gamestate);
  }
  