@SuppressWarnings("unchecked")
  private void checkValidVerifyMove(VerifyMove verifyMove){
    /**
     * Legal Move should be (assume lastMoveId is wId)
     * Case A: current game is end and role should switch between players
     * 1 add(new SetTurn(bId))
     * 2 add(new Set(GUESSHISTORY, ImmutableList.<String>of()))
     * 3 add(new Set(FEEDBACKHISTORY, ImmutableList.<String>of()))
     * 4 add(new Set(CURRENTGAME,x+1)) where x is the CURRENTGAME in lastState
     * 5 add(new Set(MAXTURN,y)) where y is the CURRENTTURN is lastState
     * 6 add(new Set(CURRENTMOVE,CODE))
     * 7 add(new Set(CURRENTTURN,0))
     * 8 add(new Delete(CODE))
     * Case B: current game is end and both player challenged. Entire game end. (bId feedback)
     * 1 add(new SetTurn(bId)) 
     * 2 add(new EndGame(winnerId))
     * 
     */
    List<Operation> lastMove = verifyMove.getLastMove();
    Map<String, Object> lastState = verifyMove.getLastState();
    String coderId = verifyMove.getLastMovePlayerId();
    List<String> ids = verifyMove.getPlayerIds();
    String guesserId = getOtherPlayerId(ids,coderId);
    String code = (String)lastState.get("CODE");
    List<String> guessHistory = (List<String>) lastState.get(GUESSHISTORY); 
    List<String> feedbackHistory = (List<String>) lastState.get(FEEDBACKHISTORY);
    //Verify Feedback is correct
    checkGuessAndFeedbackMatch(guessHistory,feedbackHistory,code);
    
    List<Operation> validateMove = getSwitchcoderOperation(coderId, guesserId, lastState);
    int lastCurrentGame = (Integer)lastState.get(CURRENTGAME);
    
    if (lastCurrentGame == 2){
      String lastFeedback = feedbackHistory.get(feedbackHistory.size()-1);
      String winnerId = coderId;
      if (lastFeedback.equals("4b0w")) {
        winnerId = guesserId;
      }
      validateMove = getEndGameOperation(coderId, guesserId, winnerId);
    }
    
    check(lastMove.equals(validateMove),validateMove,lastMove);
    
  }