public DownloadHandler(BinaryReader stream, BackgroundWorkerEx worker)
{
worker?.ReportProgress(0, "Loading \"download\"...");
stream.Skip(2); // DL
byte b1 = stream.ReadByte();
byte b2 = stream.ReadByte();
byte b3 = stream.ReadByte();
int numFiles = stream.ReadInt32BE();
short numTags = stream.ReadInt16BE();
int numMaskBytes = (numFiles + 7) / 8;
for (int i = 0; i < numFiles; i++)
{
MD5Hash key = stream.Read<MD5Hash>();
//byte[] unk = stream.ReadBytes(0xA);
stream.Skip(0xA);
//var entry = new DownloadEntry() { Index = i, Unk = unk };
var entry = new DownloadEntry() { Index = i };
DownloadData.Add(key, entry);
worker?.ReportProgress((int)((i + 1) / (float)numFiles * 100));
}
for (int i = 0; i < numTags; i++)
{
DownloadTag tag = new DownloadTag();
string name = stream.ReadCString();
tag.Type = stream.ReadInt16BE();
byte[] bits = stream.ReadBytes(numMaskBytes);
for (int j = 0; j < numMaskBytes; j++)
bits[j] = (byte)((bits[j] * 0x0202020202 & 0x010884422010) % 1023);
tag.Bits = new BitArray(bits);
Tags.Add(name, tag);
}
}