Program: 173397
Project: 173397
Buggy source:
public void paintTokensAndText(Graphics2D g){
  GUIGlobals.setRenderingHints(g);
  paintStationTokens(g);
  paintOffStationTokens(g);
  if (!isTilePainted())   return;
  FontMetrics fontMetrics=g.getFontMetrics();
  if (getHex().getTileCost() > 0) {
    g.drawString(Bank.format(getHex(),getHex().getTileCost()),dimensions.rectBound.x + (dimensions.rectBound.width - fontMetrics.stringWidth(Integer.toString(getHex().getTileCost()))) * 3 / 5,dimensions.rectBound.y + ((fontMetrics.getHeight() + dimensions.rectBound.height) * 9 / 15));
  }
  Map<PublicCompany,Stop> homes=getHex().getHomes();
  if (homes != null) {
    for (    PublicCompany company : homes.keySet()) {
      if (company.isClosed())       continue;
      if (hex.hasTokenOfCompany(company))       continue;
      Stop homeCity=homes.get(company);
      if (homeCity.getRelatedStation() == null) {
        Set<Stop> stops=getHex().getStops();
        for (        Stop stop : stops) {
          if (stop.hasTokenSlotsLeft()) {
            homeCity=stop;
            break;
          }
        }
      }
      HexPoint p=getTokenCenter(1,homeCity);
      drawHome(g,company,p);
    }
  }
  if (hex.isBlockedByPrivateCompany()) {
    PrivateCompany p=hex.getBlockingPrivateCompany();
    String text="String_Node_Str" + p.getId() + "String_Node_Str";
    g.drawString(text,dimensions.rectBound.x + (dimensions.rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,dimensions.rectBound.y + ((fontMetrics.getHeight() + dimensions.rectBound.height) * 5 / 15));
  }
  if (hex.isReservedForCompany() && hex.isPreprintedTileCurrent()) {
    String text="String_Node_Str" + hex.getReservedForCompany().getId() + "String_Node_Str";
    g.drawString(text,dimensions.rectBound.x + (dimensions.rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,dimensions.rectBound.y + ((fontMetrics.getHeight() + dimensions.rectBound.height) * 5 / 25));
  }
}

Fixed version (ground truth):
public void paintTokensAndText(Graphics2D g){
  GUIGlobals.setRenderingHints(g);
  paintStationTokens(g);
  paintOffStationTokens(g);
  if (!isTilePainted())   return;
  FontMetrics fontMetrics=g.getFontMetrics();
  if (getHex().getTileCost() > 0) {
    g.drawString(Bank.format(getHex(),getHex().getTileCost()),dimensions.rectBound.x + (dimensions.rectBound.width - fontMetrics.stringWidth(Integer.toString(getHex().getTileCost()))) * 3 / 5,dimensions.rectBound.y + ((fontMetrics.getHeight() + dimensions.rectBound.height) * 9 / 15));
  }
  Map<PublicCompany,Stop> homes=getHex().getHomes();
  if (homes != null) {
    for (    PublicCompany company : homes.keySet()) {
      if (company.isClosed())       continue;
      if (hex.hasTokenOfCompany(company))       continue;
      if (hex.getBlockedForTokenLays() == MapHex.BlockedToken.NEVER)       continue;
      Stop homeCity=homes.get(company);
      if (homeCity.getRelatedStation() == null) {
        Set<Stop> stops=getHex().getStops();
        for (        Stop stop : stops) {
          if (stop.hasTokenSlotsLeft()) {
            homeCity=stop;
            break;
          }
        }
      }
      HexPoint p=getTokenCenter(1,homeCity);
      drawHome(g,company,p);
    }
  }
  if (hex.isBlockedByPrivateCompany()) {
    PrivateCompany p=hex.getBlockingPrivateCompany();
    String text="String_Node_Str" + p.getId() + "String_Node_Str";
    g.drawString(text,dimensions.rectBound.x + (dimensions.rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,dimensions.rectBound.y + ((fontMetrics.getHeight() + dimensions.rectBound.height) * 5 / 15));
  }
  if (hex.isReservedForCompany() && hex.isPreprintedTileCurrent()) {
    String text="String_Node_Str" + hex.getReservedForCompany().getId() + "String_Node_Str";
    g.drawString(text,dimensions.rectBound.x + (dimensions.rectBound.width - fontMetrics.stringWidth(text)) * 1 / 2,dimensions.rectBound.y + ((fontMetrics.getHeight() + dimensions.rectBound.height) * 5 / 25));
  }
}