Program: 72678
Project: 72678
Buggy source:
/** 
 * Fire the actor. Typically, the fire() method performs the computation associated with an actor. Here, it delivers (if required) the intended token to the intended receiver(s).
 * @exception IllegalActionException If firing is not permitted.
 */
@Override public void fire() throws IllegalActionException {
  super.fire();
  Time currentTime=getDirector().getModelTime();
  Time computedTimeStamp=null;
  boolean multicast=false;
  for (  Entry<String,LinkedList<TimedEvent>> entry : _afdxVLinksQueue.entrySet()) {
    if (entry.getValue().size() > 0) {
      TimedEvent e=entry.getValue().getFirst();
      if (e.timeStamp.compareTo(currentTime) == 0) {
        Time lastTimeStamp=currentTime;
        AFDXVlink vl=_virtualLinkTable.get(entry.getKey());
        if (_afdxSchedMuxsQueue.get(vl.getSchedulerMux()).size() > 0) {
          Object[] last=(Object[])_afdxSchedMuxsQueue.get(vl.getSchedulerMux()).getLast().contents;
          Object[] output=(Object[])e.contents;
          if (((AFDXVlink)output[2]).getSource().equals(((AFDXVlink)last[2]).getSource()) && ((Time)output[3]).compareTo(last[3]) == 0) {
            multicast=true;
          }
          lastTimeStamp=_afdxSchedMuxsQueue.get(vl.getSchedulerMux()).getLast().timeStamp;
        }
        if (multicast) {
          computedTimeStamp=lastTimeStamp;
          multicast=false;
        }
 else {
          computedTimeStamp=lastTimeStamp.add(vl.getFrameSize() / (_bitRate * 1000000));
        }
        _afdxSchedMuxsQueue.get(vl.getSchedulerMux()).add(new TimedEvent(computedTimeStamp,e.contents));
        entry.getValue().remove(e);
      }
    }
  }
  if (_nextFireTime != null && currentTime.compareTo(_nextFireTime) == 0) {
    for (    Entry<String,LinkedList<TimedEvent>> entry : _afdxSchedMuxsQueue.entrySet()) {
      if (entry.getValue().size() > 0) {
        TimedEvent e=entry.getValue().getFirst();
        if (e.timeStamp.compareTo(currentTime) == 0) {
          Object[] output=(Object[])e.contents;
          Receiver receiver=(Receiver)output[0];
          if (receiver instanceof IntermediateReceiver) {
            String[] labels=new String[]{timestamp,vlink,payload};
            Token[] values=new Token[]{new DoubleToken(e.timeStamp.getDoubleValue()),new ObjectToken(output[2]),(Token)output[1]};
            RecordToken record=new RecordToken(labels,values);
            _sendToReceiver((Receiver)output[0],record);
          }
 else {
            Token token=(Token)output[1];
            _sendToReceiver(receiver,token);
          }
          entry.getValue().remove(e);
          if (_debugging) {
            _debug("String_Node_Str" + entry.getKey() + "String_Node_Str"+ currentTime);
          }
        }
      }
    }
  }
  _scheduleRefire();
}

Fixed version (ground truth):
/** 
 * Fire the actor. Typically, the fire() method performs the computation associated with an actor. Here, it delivers (if required) the intended token to the intended receiver(s).
 * @exception IllegalActionException If firing is not permitted.
 */
@Override public void fire() throws IllegalActionException {
  super.fire();
  Time currentTime=getDirector().getModelTime();
  Time computedTimeStamp=null;
  boolean multicast=false;
  for (  Entry<String,LinkedList<TimedEvent>> entry : _afdxVLinksQueue.entrySet()) {
    if (entry.getValue().size() > 0) {
      TimedEvent e=entry.getValue().getFirst();
      System.out.println("String_Node_Str" + e.contents);
      if (e.timeStamp.compareTo(currentTime) == 0) {
        Time lastTimeStamp=currentTime;
        AFDXVlink vl=_virtualLinkTable.get(entry.getKey());
        if (_afdxSchedMuxsQueue.get(vl.getSchedulerMux()).size() > 0) {
          Object[] last=(Object[])_afdxSchedMuxsQueue.get(vl.getSchedulerMux()).getLast().contents;
          Object[] output=(Object[])e.contents;
          if (((AFDXVlink)output[2]).getSource().equals(((AFDXVlink)last[2]).getSource()) && ((Time)output[3]).compareTo(last[3]) == 0) {
            multicast=true;
          }
          lastTimeStamp=_afdxSchedMuxsQueue.get(vl.getSchedulerMux()).getLast().timeStamp;
        }
        if (multicast) {
          computedTimeStamp=lastTimeStamp;
          multicast=false;
        }
 else {
          computedTimeStamp=lastTimeStamp.add(vl.getFrameSize() / (_bitRate * 1000000));
        }
        _afdxSchedMuxsQueue.get(vl.getSchedulerMux()).add(new TimedEvent(computedTimeStamp,e.contents));
        entry.getValue().remove(e);
      }
    }
  }
  if (_nextFireTime != null && currentTime.compareTo(_nextFireTime) == 0) {
    for (    Entry<String,LinkedList<TimedEvent>> entry : _afdxSchedMuxsQueue.entrySet()) {
      if (entry.getValue().size() > 0) {
        TimedEvent e=entry.getValue().getFirst();
        if (e.timeStamp.compareTo(currentTime) == 0) {
          Object[] output=(Object[])e.contents;
          Receiver receiver=(Receiver)output[0];
          if (receiver instanceof IntermediateReceiver) {
            String[] labels=new String[]{timestamp,vlink,payload};
            Token[] values=new Token[]{new DoubleToken(e.timeStamp.getDoubleValue()),new ObjectToken(output[2]),(Token)output[1]};
            RecordToken record=new RecordToken(labels,values);
            _sendToReceiver((Receiver)output[0],record);
          }
 else {
            Token token=(Token)output[1];
            _sendToReceiver(receiver,token);
          }
          entry.getValue().remove(e);
          if (_debugging) {
            _debug("String_Node_Str" + entry.getKey() + "String_Node_Str"+ currentTime);
          }
        }
      }
    }
  }
  _scheduleRefire();
}