@Override
  public final void readData(
      SWFInputStream sis,
      ByteArrayRange data,
      int level,
      boolean parallel,
      boolean skipUnusualTags,
      boolean lazy)
      throws IOException {
    fontId = sis.readUI16("fontId");
    glyphShapeTable = new ArrayList<>();

    if (sis.available() > 0) {
      long pos = sis.getPos();
      int firstOffset = sis.readUI16("firstOffset");
      int nGlyphs = firstOffset / 2;

      long[] offsetTable = new long[nGlyphs];
      offsetTable[0] = firstOffset;
      for (int i = 1; i < nGlyphs; i++) {
        offsetTable[i] = sis.readUI16("offset");
      }
      for (int i = 0; i < nGlyphs; i++) {
        sis.seek(pos + offsetTable[i]);
        glyphShapeTable.add(sis.readSHAPE(1, false, "shape"));
      }
    }
  }