@Override
  public void read(DataInput stream) throws IOException {
    long startOffset = StreamUtil.getOffset(stream);
    assert startOffset % 4 == 0;
    super.read(stream);
    if (myExpectedName != null) {
      String signature = myKey.getValue();
      if (!signature.equals(myExpectedName)) {
        throw new IllegalStateException("Expected signature '" + myExpectedName + "', found '" + signature + "'");
      }
    }
    if (myChildFactory != null) {
      long length = myLength.getValue();
      int i = 0;
      while (StreamUtil.getOffset(stream) < startOffset + length) {
        VersionInfoBin child = myChildFactory.createChild(i++);
        child.read(stream);
        addMember(child);
      }
    }
  }
@Override
  public void read(DataInput stream)