Program: 28016
Project: 28016
Buggy source:
public BehaviorTreeViewer(BehaviorTree<T> tree,Skin skin){
  super(skin);
  this.tree=tree;
  step=0;
  taskNodes=new ObjectMap<Task<T>,TaskNode>();
  tree.addListener(new BehaviorTree.Listener<T>(){
    @Override public void statusUpdated(    Task<T> task,    Task.Status previousStatus){
      TaskNode tn=taskNodes.get(task);
      tn.updateStatus(previousStatus,step);
    }
    @Override public void childAdded(    Task<T> task,    int index){
      TaskNode parentNode=taskNodes.get(task);
      Task<T> child=task.getChild(index);
      addToTree(displayTree,parentNode,child,null,0);
      displayTree.expandAll();
    }
  }
);
  KryoUtils.initKryo();
  treeStatus=SUSPENDED;
  runDelaySlider=new Slider(0,5,0.01f,false,skin);
  runDelaySlider.setValue(.5f);
  runButton=new TextButton("String_Node_Str",skin);
  stepButton=new TextButton("String_Node_Str",skin);
  loadButton=new TextButton("String_Node_Str",skin);
  loadButton.setDisabled(true);
  saveButton=new TextButton("String_Node_Str",skin);
  stepLabel=new Label(new StringBuilder(LABEL_STEP + step),skin);
  this.row().height(20).fillX();
  this.add(runDelaySlider);
  this.add(runButton);
  this.add(stepButton);
  this.add(saveButton);
  this.add(loadButton);
  this.add(stepLabel);
  this.row();
  displayTree=new Tree(skin);
  rebuildDisplayTree();
  this.add(displayTree).colspan(6).grow();
  saveButton.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      save();
      saved=true;
      loadButton.setDisabled(false);
    }
  }
);
  loadButton.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      load();
    }
  }
);
  stepButton.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      treeStatus=STEP;
    }
  }
);
  runButton.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      if (treeStatus == SUSPENDED) {
        treeStatus=RUNNING;
        delay=runDelaySlider.getValue();
        runButton.setText("String_Node_Str");
        stepButton.setDisabled(true);
        saveButton.setDisabled(true);
        loadButton.setDisabled(true);
      }
 else {
        treeStatus=SUSPENDED;
        runButton.setText("String_Node_Str");
        stepButton.setDisabled(false);
        saveButton.setDisabled(false);
        loadButton.setDisabled(!saved);
      }
    }
  }
);
}

Fixed version (ground truth):
public BehaviorTreeViewer(BehaviorTree<E> tree,boolean loadAndSave,Skin skin){
  super(skin);
  this.tree=tree;
  step=0;
  taskNodes=new ObjectMap<Task<E>,TaskNode>();
  tree.addListener(new BehaviorTree.Listener<E>(){
    @Override public void statusUpdated(    Task<E> task,    Task.Status previousStatus){
      TaskNode tn=taskNodes.get(task);
      tn.updateStatus(previousStatus,step);
    }
    @Override public void childAdded(    Task<E> task,    int index){
      TaskNode parentNode=taskNodes.get(task);
      Task<E> child=task.getChild(index);
      addToTree(displayTree,parentNode,child,null,0);
      displayTree.expandAll();
    }
  }
);
  KryoUtils.initKryo();
  treeStatus=SUSPENDED;
  runDelaySlider=new Slider(0,5,0.01f,false,skin);
  runDelaySlider.setValue(.5f);
  runButton=new TextButton("String_Node_Str",skin);
  stepButton=new TextButton("String_Node_Str",skin);
  if (loadAndSave) {
    loadButton=new TextButton("String_Node_Str",skin);
    loadButton.setDisabled(true);
    loadButton.addListener(new ChangeListener(){
      @Override public void changed(      ChangeEvent event,      Actor actor){
        load();
      }
    }
);
    saveButton=new TextButton("String_Node_Str",skin);
    saveButton.addListener(new ChangeListener(){
      @Override public void changed(      ChangeEvent event,      Actor actor){
        save();
        saved=true;
        loadButton.setDisabled(false);
      }
    }
);
  }
  stepLabel=new Label(new StringBuilder(LABEL_STEP + step),skin);
  this.row().height(20).fillX();
  this.add(runDelaySlider);
  this.add(runButton);
  this.add(stepButton);
  if (loadAndSave) {
    this.add(saveButton);
    this.add(loadButton);
  }
  this.add(stepLabel);
  this.row();
  displayTree=new Tree(skin);
  rebuildDisplayTree();
  this.add(displayTree).colspan(loadAndSave ? 6 : 4).grow();
  stepButton.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      treeStatus=STEP;
    }
  }
);
  runButton.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      if (treeStatus == SUSPENDED) {
        treeStatus=RUNNING;
        delay=runDelaySlider.getValue();
        runButton.setText("String_Node_Str");
        stepButton.setDisabled(true);
        if (saveButton != null)         saveButton.setDisabled(true);
        if (loadButton != null)         loadButton.setDisabled(true);
      }
 else {
        treeStatus=SUSPENDED;
        runButton.setText("String_Node_Str");
        stepButton.setDisabled(false);
        if (saveButton != null)         saveButton.setDisabled(false);
        if (loadButton != null)         loadButton.setDisabled(!saved);
      }
    }
  }
);
}