public long ReadVInt64()
{
NeedOneByteInBuffer();
var l = PackUnpack.LengthVInt(Buf, Pos);
long res;
if (Pos + l <= End)
{
res = PackUnpack.UnpackVInt(Buf, ref Pos);
}
else
{
res = (Buf[Pos] >= 0x80) ? 0 : -1;
if (l < 8) res <<= 8 - l;
res += Buf[Pos] & (0xff >> l);
do
{
Pos++;
res <<= 8;
NeedOneByteInBuffer();
res += Buf[Pos];
l--;
} while (l > 1);
Pos++;
}
return res;
}