anchor.diff:    readString1() {
       int len=readLength();
       var list=new List<int>(len);
  -    for (int i=0; i<len; i++) {
  -      list[i]=buf[bufPos++];
  -    }
  +    //for (int i=0; i<len; i++) {
  +    //  list[i]=buf[bufPos++];
  +    //}
  +    // this variant is much faster:
  +    for (int from=0, to=len-1; from<=to; from++, to--) {
  +      list[from]=buf[bufPos+from];
  +      list[to]=buf[bufPos+to];
  +    }
  +    bufPos+=len;
  +    
       return new String.fromCharCodes(list);
     }
   
  
positive.code: class PigeonsonParser {
    String rootType;
    var catalog;
    var currentMetadata;
    String currentType;
    String key;
    Object value;
    Object currentContainer;
    int currentIndex;
    Uint8List buf;
    int bufPos;
    int bufLength;
    PigeonsonParser(this.rootType, this.catalog) {
      
    }
    PigeonStruct parse(str) {
      this.buf=str;
      this.bufPos=0;
      this.bufLength=str.length;
      var result = readGeneric(_PIGEON, rootType);
      if (bufPos!=bufLength) throw "unparsed data";
      return result;
  
negative.code:     int len = readLength(); 
      var list=new List<String>(len);  
      for (int i=0; i<len; i++) {
         readType(_STRING1); 
         list[i]=readString();
      }    
      
  