public IntelHexFile Read(TextReader Reader)
 {
     var file = new IntelHexFile();
     string line;
     while ((line = Reader.ReadLine()) != null)
     {
         byte[] dat = GetBytes(line).ToArray();
         byte len = dat[0];
         var address = (ushort)(dat[1] << 8 | dat[2]);
         byte type = dat[3];
         byte checksum = dat.Last();
         byte[] data = dat.Skip(4).Take(dat.Length - 5).ToArray();
         switch (type)
         {
             case 0:
                 file.Add(new IntelHexDataLine(address, data));
                 break;
             case 1:
                 file.Add(new IntelHexEndLine());
                 break;
             case 2:
                 file.Add(new IntelHexSegAddressLine((uint)((data[0] << 8 | data[1]) << 4)));
                 break;
             case 4:
                 file.Add(new IntelHexExAddressLine((ushort)(data[0] << 8 | data[1])));
                 break;
         }
     }
     return file;
 }