anchor.diff:  % of the task's input file, if the node is not in the task's blacklist.
   % The task may have several redundant inputs, so we need to find the
   % first one that matchs.
  +-spec assign_task(task(), [load()], gb_tree(), [node()]) -> gb_tree().
  +
   assign_task(Task, _NodeStats, Tasks, Nodes) when Task#task.force_remote ->
       FNodes = Nodes -- Task#task.taskblack,
       case FNodes -- [N || {_, N} <- Task#task.input] of
  
positive.code: 
  % pop_busiest_node defines the policy for choosing the next task from a chosen
  % set of Nodes. Pick the task from the longest list.
  pop_busiest_node(Tasks, []) -> {nonodes, Tasks};
  pop_busiest_node(Tasks, Nodes) ->
      {{N, C, [Task|R]}, MaxNode} = lists:max(
  
negative.code:             {{run, Node, Task}, gb_trees:update(Node, {N - 1, C, R}, Tasks)}
      end.
  
  -spec pop_and_switch_node(gb_tree(), [node()], [node()]) ->
      {'nonodes', gb_tree()} | {{'run', node(), task()}, gb_tree()}.
  pop_and_switch_node(Tasks, _, []) -> {nonodes, Tasks};
  pop_and_switch_node(Tasks, Nodes, AvailableNodes) ->
      case pop_busiest_node(Tasks, Nodes) of
  