anchor.diff:  }
   
   String readString(ByteStream stream) {
  -  final int n = readLength(stream);
  -  final String result = stream.readString(n);
  +  final n = readLength(stream);
  +  final result = stream.readString(n);
     stream.readByte();
     return result;
   }
   
   Uint8List readBytes(ByteStream stream) {
  -  final int n = readLength(stream);
  -  final Uint8List result = stream.read(n);
  +  final n = readLength(stream);
  +  final result = stream.read(n);
     stream.readByte();
     return result;
   }
   
   String readAsciiString(ByteStream stream) {
  -  final int n = readLength(stream);
  -  final String result = stream.readAsciiString(n);
  +  final n = readLength(stream);
  +  final result = stream.readAsciiString(n);
     stream.readByte();
     return result;
   }
   
   String readGuid(ByteStream stream) {
     stream.readByte();
  -  final String result = stream.readAsciiString(36);
  +  final result = stream.readAsciiString(36);
     stream.readByte();
     return result;
   }
   
   int read4Digit(ByteStream stream) {
  -  int n = stream.readByte() - 0x30;
  +  var n = stream.readByte() - 0x30;
     n = n * 10 + stream.readByte() - 0x30;
     n = n * 10 + stream.readByte() - 0x30;
     return n * 10 + stream.readByte() - 0x30;
   }
   
   int read2Digit(ByteStream stream) {
  -  int n = stream.readByte() - 0x30;
  +  var n = stream.readByte() - 0x30;
     return n * 10 + stream.readByte() - 0x30;
   }
   
   List<int> readMillisecond(ByteStream stream) {
  -  int microsecond = 0;
  -  int millisecond = stream.readByte() - 0x30;
  +  var microsecond = 0;
  +  var millisecond = stream.readByte() - 0x30;
     millisecond = millisecond * 10 + stream.readByte() - 0x30;
     millisecond = millisecond * 10 + stream.readByte() - 0x30;
  -  int tag = stream.readByte();
  +  var tag = stream.readByte();
     if ((tag >= 0x30) && (tag <= 0x39)) {
       microsecond = tag - 0x30;
       microsecond = microsecond * 10 + stream.readByte() - 0x30;
  
positive.code: part of hprose.io;
  
  int readInt(ByteStream stream, {int tag: TagSemicolon}) {
    final String s = stream.readUntil(tag);
    if (s.isEmpty) return 0;
    return int.parse(s, radix: 10);
  }
  
negative.code: }
  
  DateTime readDateTime(ByteStream stream) {
    final year = read4Digit(stream);
    final month = read2Digit(stream);
    final day = read2Digit(stream);
    var tag = stream.readByte();
    if (tag == TagTime) {
      final hour = read2Digit(stream);
      final minute = read2Digit(stream);
      final second = read2Digit(stream);
      var millisecond = 0;
      var microsecond = 0;
      tag = stream.readByte();
      if (tag == TagPoint) {
        final result = readMillisecond(stream);
        millisecond = result[0];
        microsecond = result[1];
        tag = result[2];
  