@Override
 public int parseInstruction(byte[] buffer, int index, MetadataModel metaModel)
     throws InvalidByteCodeException {
   ensure(buffer, index, FIRST_TOKEN);
   token = ByteReader.getInt32(buffer, index + 1);
   reference = metaModel.getEntryByToken(token);
   return BYTE_SIZE;
 }
  @Override
  public int parseInstruction(byte[] buffer, int index, MetadataModel metaModel)
      throws InvalidByteCodeException {
    ensure(buffer, index, FIRST_TOKEN);

    this.index = ByteReader.getUInt8(buffer, index + 1);
    return BYTE_SIZE;
  }
  @Override
  protected int readRow(byte[] data, int offset, int row) {
    int rowSize = offset;

    action[row] = ByteReader.getUInt16(data, offset);
    offset += 2;

    offset += readIndex(data, offset, parentCodedIndex, row, parentIndexSize);
    offset += readBlobIndex(data, offset, permissionSetBlobIndex, row);

    rowSize = offset - rowSize;

    assert (rowSize >= MIN_ROW_SIZE);

    return rowSize;
  }