anchor.diff:  var Index:longint;
   begin
    WorkQueue.Clear;
  - for Index:=0 to DFAState^.CountIndirectInstructions-1 do begin
  -  if DFAState^.IndirectInstructions[Index]=Mark then begin
  + for Index:=0 to DFAState^.CountWorkQueueItems-1 do begin
  +  if DFAState^.WorkQueueItems[Index]=Mark then begin
      WorkQueue.Mark;
     end else begin
  -   WorkQueue.AddNew(DFAState^.IndirectInstructions[Index]);
  +   WorkQueue.AddNew(DFAState^.WorkQueueItems[Index]);
     end;
    end;
   end;
  
positive.code:  end;
  
   NewState.Flags:=Flags or (NeedFlags shl sfDFANeedShift);
   NewState.IndirectInstructions:=copy(QueueInstructionArray,0,n);
   NewState.CountIndirectInstructions:=n;
  
   result:=CacheState(@NewState);
  
  
negative.code:  if assigned(Key) and (Key.CountInstructions>0) then begin
    result:=HashData(@Key.Instructions[0],Key.CountInstructions*sizeof(PFLREInstruction));
    result:=result xor ((longword(Key.CountInstructions) shr 16) or (longword(Key.CountInstructions) shl 16));
    result:=result xor HashData(@Key.WorkQueueItems[0],Key.CountWorkQueueItems*sizeof(longint));
    result:=result xor ((longword(Key.CountWorkQueueItems) shr 16) or (longword(Key.CountWorkQueueItems) shl 16));
    result:=result xor ((Key.Flags shl 19) or (Key.Flags shr 13));
    if result=0 then begin
     result:=$ffffffff;
  