anchor.diff:   if result then begin
     SetLength(Captures,Instance.CountCaptures);
     for Counter:=0 to Instance.CountCaptures-1 do begin
  -   Captures[Counter].Start:=OnePassNFAMatchSubMatches[Counter*2];
  -   Captures[Counter].Length:=OnePassNFAMatchSubMatches[(Counter*2)+1]-OnePassNFAMatchSubMatches[Counter*2];
  +   Index:=Instance.CapturesToSubMatchesMap[Counter] shl 1;
  +   Captures[Counter].Start:=OnePassNFAMatchSubMatches[Index];
  +   Captures[Counter].Length:=OnePassNFAMatchSubMatches[Index or 1]-OnePassNFAMatchSubMatches[Index];
     end;
    end;
   
  
positive.code:   SubMatchesBitMask:=Matched^.SubMatchesBitMask;
    for Counter:=0 to Instance.CountCaptures-1 do begin
     Capture:=@Captures[Counter];
     if (SubMatchesBitMask and longword($80000000))<>0 then begin
      CurrentPosition:=Matched^.SubMatches[Counter shl 1];
      CurrentLength:=Matched^.SubMatches[(Counter shl 1) or 1]-CurrentPosition;
     end else begin
      if (SubMatchesBitMask and (longword(1) shl (Counter shl 1)))<>0 then begin
       CurrentPosition:=Matched^.SubMatches[Counter shl 1];
      end else begin
       CurrentPosition:=0;
      end;
      if (SubMatchesBitMask and (longword(1) shl ((Counter shl 1) or 1)))<>0 then begin
       CurrentLength:=Matched^.SubMatches[(Counter shl 1) or 1]-CurrentPosition;
      end else begin
       CurrentLength:=0;
      end;
  
negative.code:  if TrySearch(StartInstruction,Position) then begin
    SetLength(Captures,Instance.CountCaptures);
    for Counter:=0 to Instance.CountCaptures-1 do begin
     Index:=Instance.CapturesToSubMatchesMap[Counter] shl 1;
     Captures[Counter].Start:=BitStateNFAMatchSubMatches[Index];
     Captures[Counter].Length:=BitStateNFAMatchSubMatches[Index or 1]-BitStateNFAMatchSubMatches[Index];
    end;
    result:=BitStateNFAMatch;
   end else begin
  