anchor.diff:    if AIterator.Level = 0 then
     begin
       AIterator.ANodeStack[0] := @FRoot^.Base;
  -    if ATrieDepth = TrieDepth32Bits then
  -      AIterator.LastResult32 := 0
  -    else AIterator.LastResult64 := 0;
  +    AIterator.LastResult64 := 0;
     end;
     repeat
       while AIterator.BreadCrumbs[AIterator.Level] < ChildrenPerBucket do
       begin
         if GetBusyIndicator(AIterator.ANodeStack[AIterator.Level], AIterator.BreadCrumbs[AIterator.Level] ) then
         begin
  -        if ATrieDepth = TrieDepth32Bits then
  -          AIterator.LastResult32 := AIterator.LastResult32 or AIterator.BreadCrumbs[AIterator.Level]
  -        else AIterator.LastResult64 := AIterator.LastResult64 or AIterator.BreadCrumbs[AIterator.Level];
  +        case ATrieDepth of
  +          TrieDepth16Bits : AIterator.LastResult16 := AIterator.LastResult16 or AIterator.BreadCrumbs[AIterator.Level];
  +          TrieDepth32Bits : AIterator.LastResult32 := AIterator.LastResult32 or AIterator.BreadCrumbs[AIterator.Level];
  +          else AIterator.LastResult64 := AIterator.LastResult64 or AIterator.BreadCrumbs[AIterator.Level];
  +        end;
           inc(AIterator.Level);
           if AIterator.Level >= ATrieDepth then
           begin
  
positive.code:   inherited Create;
    FRoot := NewTrieBranchNode();
    FLastIndex := -1;
    if (ATrieDepth <> TrieDepth32Bits) and (ATrieDepth <> TrieDepth64Bits) then
      raise ETrie.Create(STR_TRIEDEPTHERROR);
    FTrieDepth := ATrieDepth;
    FLastMidBranchNode := FTrieDepth - 3;
  
negative.code: 
  function TTrie.GetBitFieldIndex(const Data; Level: Byte): Byte;
  begin
    case FTrieDepth of
      TrieDepth16Bits : Result := (Word(Data) shr ChildIndexShiftArray16[Level]) and BucketMask;
      TrieDepth32Bits : Result := (Integer(Data) shr ChildIndexShiftArray32[Level]) and BucketMask;
      else Result := (Int64(Data) shr ChildIndexShiftArray64[Level]) and BucketMask;
    end;
  end;
  
  function TTrie.GetChildIndex(ANode: PTrieBranchNode; BitFieldIndex: Byte
  