sclass ChessOCR_BoardsFound { sclass ByFEN { double bestScore; Rect bestPosition; Set> boardPositions = synchroSet(); } Map byFEN = synchroMap(); transient L onChange = synchroList(); // L void add(ChessOCR_RecognizedBoard b) { if (b == null || b.fen == null) ret; ByFEN bf = getOrCreate ByFEN(byFEN, b.fen); if (b.rectInOriginalImage != null) bf.boardPositions.add(pair(b.rectInOriginalImage, b.score)); if (b.score > bf.bestScore) { bf.bestScore = b.score; bf.bestPosition = b.rectInOriginalImage; pcallFAll(onChange, b.fen); } } }