anchor.diff:  end;
   
   class function TBaseType.Equals(const v1, v2: TDynRawBytes): Boolean;
  -Var i : Integer;
   begin
     If Length(v1)<>Length(v2) then begin
       Result := False;
  -    Exit;
  -  end;
  -  for i:=0 to high(v1) do begin
  -    If v1[i]<>v2[i] then begin
  -      Result := False;
  -      Exit;
  -    end;
  -  end;
  -  Result := True;
  +  end else if Length(v1)=0 then begin
  +    Result := True;
  +  end else begin
  +    Result := CompareMem(@v1[Low(v1)],@v2[Low(v2)],Length(v1));
  +  end;
   end;
   
   class function TBaseType.Higher(const vHigh, vLow: T32Bytes): Boolean;
  
positive.code:   // Fixed 32 bytes length (or empty)
    T32Bytes = Array[0..31] of byte;
  
    TRawBytes = AnsiString;
  
    { TBytesBuffer }
  
  
negative.code:   SetLength(target,64);
    move(leftBytes,target[0],32);
    move(rightBytes,target[32],32);
  end;
  
  class procedure TBaseType.Concat(const leftBytes, rightBytes: TDynRawBytes; var target: TDynRawBytes);
  begin
    SetLength(target,Length(leftBytes)+Length(rightBytes));
    move(leftBytes[Low(leftBytes)],target[0],Length(leftBytes));
    move(rightBytes[Low(rightBytes)],target[High(leftBytes)+1],Length(rightBytes));
  end;
  
  class function TBaseType.Equals(const v1, v2: T32Bytes) : Boolean;
  