{"mappings":"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EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,SAAS;AAAG,QAAA,EAAE,EAAE,SAAS;AAAG,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,SAAS;AAAG,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,GAAG,EAAE,IAAI;AACzD,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAAQ,QAAA,EAAE,EAAE,IAAI;AAA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","sources":["src/index.js","src/base.js","src/TTFFont.js","src/decorators.js","src/tables/directory.js","src/tables/index.js","src/tables/cmap.js","src/tables/head.js","src/tables/hhea.js","src/tables/hmtx.js","src/tables/maxp.js","src/tables/name.js","src/encodings.js","src/tables/OS2.js","src/tables/post.js","src/tables/cvt.js","src/tables/fpgm.js","src/tables/loca.js","src/tables/prep.js","src/tables/glyf.js","src/cff/CFFFont.js","src/cff/CFFIndex.js","src/cff/CFFTop.js","src/cff/CFFDict.js","src/cff/CFFOperand.js","src/cff/CFFPointer.js","src/cff/CFFPrivateDict.js","src/cff/CFFStandardStrings.js","src/cff/CFFEncodings.js","src/cff/CFFCharsets.js","src/tables/variations.js","src/tables/opentype.js","src/tables/VORG.js","src/tables/EBLC.js","src/tables/EBDT.js","src/tables/sbix.js","src/tables/COLR.js","src/tables/CPAL.js","src/tables/BASE.js","src/tables/GDEF.js","src/tables/GPOS.js","src/tables/GSUB.js","src/tables/JSTF.js","src/tables/HVAR.js","src/tables/DSIG.js","src/tables/gasp.js","src/tables/hdmx.js","src/tables/kern.js","src/tables/LTSH.js","src/tables/PCLT.js","src/tables/VDMX.js","src/tables/vhea.js","src/tables/vmtx.js","src/tables/avar.js","src/tables/bsln.js","src/tables/aat.js","src/tables/feat.js","src/tables/fvar.js","src/tables/gvar.js","src/tables/just.js","src/tables/morx.js","src/tables/opbd.js","src/CmapProcessor.js","src/utils.js","src/layout/LayoutEngine.js","src/layout/KernProcessor.js","src/layout/UnicodeLayoutEngine.js","src/layout/GlyphRun.js","src/glyph/BBox.js","src/layout/Script.js","src/layout/GlyphPosition.js","src/aat/AATLayoutEngine.js","src/aat/AATFeatureMap.js","src/aat/AATMorxProcessor.js","src/aat/AATStateMachine.js","src/aat/AATLookupTable.js","src/opentype/OTLayoutEngine.js","src/opentype/ShapingPlan.js","src/opentype/shapers/index.js","src/opentype/shapers/DefaultShaper.js","src/opentype/shapers/ArabicShaper.js","src/opentype/shapers/HangulShaper.js","src/opentype/GlyphInfo.js","src/opentype/OTProcessor.js","src/opentype/GlyphIterator.js","src/opentype/shapers/IndicShaper.js","src/opentype/shapers/indic.json","src/opentype/shapers/use.json","src/opentype/shapers/indic-data.js","src/opentype/shapers/UniversalShaper.js","src/opentype/GSUBProcessor.js","src/opentype/GPOSProcessor.js","src/glyph/TTFGlyph.js","src/glyph/Glyph.js","src/glyph/Path.js","src/glyph/StandardNames.js","src/glyph/CFFGlyph.js","src/glyph/SBIXGlyph.js","src/glyph/COLRGlyph.js","src/glyph/GlyphVariationProcessor.js","src/subset/TTFSubset.js","src/subset/Subset.js","src/glyph/TTFGlyphEncoder.js","src/subset/CFFSubset.js","src/WOFFFont.js","src/tables/WOFFDirectory.js","src/WOFF2Font.js","src/glyph/WOFF2Glyph.js","src/tables/WOFF2Directory.js","src/TrueTypeCollection.js","src/DFont.js"],"sourcesContent":["import { registerFormat, openSync, open, create, defaultLanguage, setDefaultLanguage } from './base';\nimport TTFFont from './TTFFont';\nimport WOFFFont from './WOFFFont';\nimport WOFF2Font from './WOFF2Font';\nimport TrueTypeCollection from './TrueTypeCollection';\nimport DFont from './DFont';\n\n// Register font formats\nregisterFormat(TTFFont);\nregisterFormat(WOFFFont);\nregisterFormat(WOFF2Font);\nregisterFormat(TrueTypeCollection);\nregisterFormat(DFont);\n\nexport * from './base';\n\n// Legacy default export for backward compatibility.\nexport default {\n  registerFormat,\n  openSync,\n  open,\n  create,\n  defaultLanguage,\n  setDefaultLanguage\n};\n","import r from 'restructure';\nconst fs = require('fs');\n\nexport let logErrors = false;\n\nlet formats = [];\nexport function registerFormat(format) {\n  formats.push(format);\n};\n\nexport function openSync(filename, postscriptName) {\n  let buffer = fs.readFileSync(filename);\n  return create(buffer, postscriptName);\n};\n\nexport function open(filename, postscriptName, callback) {\n  if (typeof postscriptName === 'function') {\n    callback = postscriptName;\n    postscriptName = null;\n  }\n\n  fs.readFile(filename, function (err, buffer) {\n    if (err) { return callback(err); }\n\n    try {\n      var font = create(buffer, postscriptName);\n    } catch (e) {\n      return callback(e);\n    }\n\n    return callback(null, font);\n  });\n\n  return;\n};\n\nexport function create(buffer, postscriptName) {\n  for (let i = 0; i < formats.length; i++) {\n    let format = formats[i];\n    if (format.probe(buffer)) {\n      let font = new format(new r.DecodeStream(buffer));\n      if (postscriptName) {\n        return font.getFont(postscriptName);\n      }\n\n      return font;\n    }\n  }\n\n  throw new Error('Unknown font format');\n};\n\nexport let defaultLanguage = 'en';\nexport function setDefaultLanguage(lang = 'en') {\n  defaultLanguage = lang;\n};","import r from 'restructure';\nimport { cache } from './decorators';\nimport * as fontkit from './base';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport CmapProcessor from './CmapProcessor';\nimport LayoutEngine from './layout/LayoutEngine';\nimport TTFGlyph from './glyph/TTFGlyph';\nimport CFFGlyph from './glyph/CFFGlyph';\nimport SBIXGlyph from './glyph/SBIXGlyph';\nimport COLRGlyph from './glyph/COLRGlyph';\nimport GlyphVariationProcessor from './glyph/GlyphVariationProcessor';\nimport TTFSubset from './subset/TTFSubset';\nimport CFFSubset from './subset/CFFSubset';\nimport BBox from './glyph/BBox';\n\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\nexport default class TTFFont {\n  type = 'TTF';\n\n  static probe(buffer) {\n    let format = buffer.toString('ascii', 0, 4);\n    return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n  }\n\n  constructor(stream, variationCoords = null) {\n    this.defaultLanguage = null;\n    this.stream = stream;\n    this.variationCoords = variationCoords;\n\n    this._directoryPos = this.stream.pos;\n    this._tables = {};\n    this._glyphs = {};\n    this._decodeDirectory();\n\n    // define properties for each table to lazily parse\n    for (let tag in this.directory.tables) {\n      let table = this.directory.tables[tag];\n      if (tables[tag] && table.length > 0) {\n        Object.defineProperty(this, tag, {\n          get: this._getTable.bind(this, table)\n        });\n      }\n    }\n  }\n\n  setDefaultLanguage(lang = null) {\n    this.defaultLanguage = lang;\n  }\n\n  _getTable(table) {\n    if (!(table.tag in this._tables)) {\n      try {\n        this._tables[table.tag] = this._decodeTable(table);\n      } catch (e) {\n        if (fontkit.logErrors) {\n          console.error(`Error decoding table ${table.tag}`);\n          console.error(e.stack);\n        }\n      }\n    }\n\n    return this._tables[table.tag];\n  }\n\n  _getTableStream(tag) {\n    let table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      return this.stream;\n    }\n\n    return null;\n  }\n\n  _decodeDirectory() {\n    return this.directory = Directory.decode(this.stream, {_startOffset: 0});\n  }\n\n  _decodeTable(table) {\n    let pos = this.stream.pos;\n\n    let stream = this._getTableStream(table.tag);\n    let result = tables[table.tag].decode(stream, this, table.length);\n\n    this.stream.pos = pos;\n    return result;\n  }\n\n  /**\n   * Gets a string from the font's `name` table\n   * `lang` is a BCP-47 language code.\n   * @return {string}\n   */\n  getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) {\n    let record = this.name && this.name.records[key];\n    if (record) {\n      // Attempt to retrieve the entry, depending on which translation is available:\n      return (\n          record[lang]\n          || record[this.defaultLanguage]\n          || record[fontkit.defaultLanguage]\n          || record['en']\n          || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n          || null\n      );\n    }\n\n    return null;\n  }\n\n  /**\n   * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n   * @type {string}\n   */\n  get postscriptName() {\n    return this.getName('postscriptName');\n  }\n\n  /**\n   * The font's full name, e.g. \"Helvetica Bold\"\n   * @type {string}\n   */\n  get fullName() {\n    return this.getName('fullName');\n  }\n\n  /**\n   * The font's family name, e.g. \"Helvetica\"\n   * @type {string}\n   */\n  get familyName() {\n    return this.getName('fontFamily');\n  }\n\n  /**\n   * The font's sub-family, e.g. \"Bold\".\n   * @type {string}\n   */\n  get subfamilyName() {\n    return this.getName('fontSubfamily');\n  }\n\n  /**\n   * The font's copyright information\n   * @type {string}\n   */\n  get copyright() {\n    return this.getName('copyright');\n  }\n\n  /**\n   * The font's version number\n   * @type {string}\n   */\n  get version() {\n    return this.getName('version');\n  }\n\n  /**\n   * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n   * @type {number}\n   */\n  get ascent() {\n    return this.hhea.ascent;\n  }\n\n  /**\n   * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n   * @type {number}\n   */\n  get descent() {\n    return this.hhea.descent;\n  }\n\n  /**\n   * The amount of space that should be included between lines\n   * @type {number}\n   */\n  get lineGap() {\n    return this.hhea.lineGap;\n  }\n\n  /**\n   * The offset from the normal underline position that should be used\n   * @type {number}\n   */\n  get underlinePosition() {\n    return this.post.underlinePosition;\n  }\n\n  /**\n   * The weight of the underline that should be used\n   * @type {number}\n   */\n  get underlineThickness() {\n    return this.post.underlineThickness;\n  }\n\n  /**\n   * If this is an italic font, the angle the cursor should be drawn at to match the font design\n   * @type {number}\n   */\n  get italicAngle() {\n    return this.post.italicAngle;\n  }\n\n  /**\n   * The height of capital letters above the baseline.\n   * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n   * @type {number}\n   */\n  get capHeight() {\n    let os2 = this['OS/2'];\n    return os2 ? os2.capHeight : this.ascent;\n  }\n\n  /**\n   * The height of lower case letters in the font.\n   * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n   * @type {number}\n   */\n  get xHeight() {\n    let os2 = this['OS/2'];\n    return os2 ? os2.xHeight : 0;\n  }\n\n  /**\n   * The number of glyphs in the font.\n   * @type {number}\n   */\n  get numGlyphs() {\n    return this.maxp.numGlyphs;\n  }\n\n  /**\n   * The size of the font’s internal coordinate grid\n   * @type {number}\n   */\n  get unitsPerEm() {\n    return this.head.unitsPerEm;\n  }\n\n  /**\n   * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n   * @type {BBox}\n   */\n  @cache\n  get bbox() {\n    return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n  }\n\n  @cache\n  get _cmapProcessor() {\n    return new CmapProcessor(this.cmap);\n  }\n\n  /**\n   * An array of all of the unicode code points supported by the font.\n   * @type {number[]}\n   */\n  @cache\n  get characterSet() {\n    return this._cmapProcessor.getCharacterSet();\n  }\n\n  /**\n   * Returns whether there is glyph in the font for the given unicode code point.\n   *\n   * @param {number} codePoint\n   * @return {boolean}\n   */\n  hasGlyphForCodePoint(codePoint) {\n    return !!this._cmapProcessor.lookup(codePoint);\n  }\n\n  /**\n   * Maps a single unicode code point to a Glyph object.\n   * Does not perform any advanced substitutions (there is no context to do so).\n   *\n   * @param {number} codePoint\n   * @return {Glyph}\n   */\n  glyphForCodePoint(codePoint) {\n    return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n  }\n\n  /**\n   * Returns an array of Glyph objects for the given string.\n   * This is only a one-to-one mapping from characters to glyphs.\n   * For most uses, you should use font.layout (described below), which\n   * provides a much more advanced mapping supporting AAT and OpenType shaping.\n   *\n   * @param {string} string\n   * @return {Glyph[]}\n   */\n  glyphsForString(string) {\n    let glyphs = [];\n    let len = string.length;\n    let idx = 0;\n    let last = -1;\n    let state = -1;\n\n    while (idx <= len) {\n      let code = 0;\n      let nextState = 0;\n\n      if (idx < len) {\n        // Decode the next codepoint from UTF 16\n        code = string.charCodeAt(idx++);\n        if (0xd800 <= code && code <= 0xdbff && idx < len) {\n          let next = string.charCodeAt(idx);\n          if (0xdc00 <= next && next <= 0xdfff) {\n            idx++;\n            code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n          }\n        }\n\n        // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n        nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0;\n      } else {\n        idx++;\n      }\n\n      if (state === 0 && nextState === 1) {\n        // Variation selector following normal codepoint.\n        glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n      } else if (state === 0 && nextState === 0) {\n        // Normal codepoint following normal codepoint.\n        glyphs.push(this.glyphForCodePoint(last));\n      }\n\n      last = code;\n      state = nextState;\n    }\n\n    return glyphs;\n  }\n\n  @cache\n  get _layoutEngine() {\n    return new LayoutEngine(this);\n  }\n\n  /**\n   * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n   *\n   * @param {string} string\n   * @param {string[]} [userFeatures]\n   * @param {string} [script]\n   * @param {string} [language]\n   * @param {string} [direction]\n   * @return {GlyphRun}\n   */\n  layout(string, userFeatures, script, language, direction) {\n    return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n  }\n\n  /**\n   * Returns an array of strings that map to the given glyph id.\n   * @param {number} gid - glyph id\n   */\n  stringsForGlyph(gid) {\n    return this._layoutEngine.stringsForGlyph(gid);\n  }\n\n  /**\n   * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n   * (or mapped AAT tags) supported by the font.\n   * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n   * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n   *\n   * @type {string[]}\n   */\n  get availableFeatures() {\n    return this._layoutEngine.getAvailableFeatures();\n  }\n\n  getAvailableFeatures(script, language) {\n    return this._layoutEngine.getAvailableFeatures(script, language);\n  }\n\n  _getBaseGlyph(glyph, characters = []) {\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf) {\n        this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n\n      } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n        this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n      }\n    }\n\n    return this._glyphs[glyph] || null;\n  }\n\n  /**\n   * Returns a glyph object for the given glyph id.\n   * You can pass the array of code points this glyph represents for\n   * your use later, and it will be stored in the glyph object.\n   *\n   * @param {number} glyph\n   * @param {number[]} characters\n   * @return {Glyph}\n   */\n  getGlyph(glyph, characters = []) {\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.sbix) {\n        this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n\n      } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) {\n        this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n\n      } else {\n        this._getBaseGlyph(glyph, characters);\n      }\n    }\n\n    return this._glyphs[glyph] || null;\n  }\n\n  /**\n   * Returns a Subset for this font.\n   * @return {Subset}\n   */\n  createSubset() {\n    if (this.directory.tables['CFF ']) {\n      return new CFFSubset(this);\n    }\n\n    return new TTFSubset(this);\n  }\n\n  /**\n   * Returns an object describing the available variation axes\n   * that this font supports. Keys are setting tags, and values\n   * contain the axis name, range, and default value.\n   *\n   * @type {object}\n   */\n  @cache\n  get variationAxes() {\n    let res = {};\n    if (!this.fvar) {\n      return res;\n    }\n\n    for (let axis of this.fvar.axis) {\n      res[axis.axisTag.trim()] = {\n        name: axis.name.en,\n        min: axis.minValue,\n        default: axis.defaultValue,\n        max: axis.maxValue\n      };\n    }\n\n    return res;\n  }\n\n  /**\n   * Returns an object describing the named variation instances\n   * that the font designer has specified. Keys are variation names\n   * and values are the variation settings for this instance.\n   *\n   * @type {object}\n   */\n  @cache\n  get namedVariations() {\n    let res = {};\n    if (!this.fvar) {\n      return res;\n    }\n\n    for (let instance of this.fvar.instance) {\n      let settings = {};\n      for (let i = 0; i < this.fvar.axis.length; i++) {\n        let axis = this.fvar.axis[i];\n        settings[axis.axisTag.trim()] = instance.coord[i];\n      }\n\n      res[instance.name.en] = settings;\n    }\n\n    return res;\n  }\n\n  /**\n   * Returns a new font with the given variation settings applied.\n   * Settings can either be an instance name, or an object containing\n   * variation tags as specified by the `variationAxes` property.\n   *\n   * @param {object} settings\n   * @return {TTFFont}\n   */\n  getVariation(settings) {\n    if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) {\n      throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n    }\n\n    if (typeof settings === 'string') {\n      settings = this.namedVariations[settings];\n    }\n\n    if (typeof settings !== 'object') {\n      throw new Error('Variation settings must be either a variation name or settings object.');\n    }\n\n    // normalize the coordinates\n    let coords = this.fvar.axis.map((axis, i) => {\n      let axisTag = axis.axisTag.trim();\n      if (axisTag in settings) {\n        return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n      } else {\n        return axis.defaultValue;\n      }\n    });\n\n    let stream = new r.DecodeStream(this.stream.buffer);\n    stream.pos = this._directoryPos;\n\n    let font = new TTFFont(stream, coords);\n    font._tables = this._tables;\n\n    return font;\n  }\n\n  @cache\n  get _variationProcessor() {\n    if (!this.fvar) {\n      return null;\n    }\n\n    let variationCoords = this.variationCoords;\n\n    // Ignore if no variation coords and not CFF2\n    if (!variationCoords && !this.CFF2) {\n      return null;\n    }\n\n    if (!variationCoords) {\n      variationCoords = this.fvar.axis.map(axis => axis.defaultValue);\n    }\n\n    return new GlyphVariationProcessor(this, variationCoords);\n  }\n\n  // Standardized format plugin API\n  getFont(name) {\n    return this.getVariation(name);\n  }\n}\n","/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nexport function cache(target, key, descriptor) {\n  if (descriptor.get) {\n    let get = descriptor.get;\n    descriptor.get = function() {\n      let value = get.call(this);\n      Object.defineProperty(this, key, { value });\n      return value;\n    };\n  } else if (typeof descriptor.value === 'function') {\n    let fn = descriptor.value;\n\n    return {\n      get() {\n        let cache = new Map;\n        function memoized(...args) {\n          let key = args.length > 0 ? args[0] : 'value';\n          if (cache.has(key)) {\n            return cache.get(key);\n          }\n\n          let result = fn.apply(this, args);\n          cache.set(key, result);\n          return result;\n        };\n\n        Object.defineProperty(this, key, {value: memoized});\n        return memoized;\n      }\n    };\n  }\n}\n","import r from 'restructure';\nimport Tables from './';\n\nlet TableEntry = new r.Struct({\n  tag:        new r.String(4),\n  checkSum:   r.uint32,\n  offset:     new r.Pointer(r.uint32, 'void', { type: 'global' }),\n  length:     r.uint32\n});\n\nlet Directory = new r.Struct({\n  tag:            new r.String(4),\n  numTables:      r.uint16,\n  searchRange:    r.uint16,\n  entrySelector:  r.uint16,\n  rangeShift:     r.uint16,\n  tables:         new r.Array(TableEntry, 'numTables')\n});\n\nDirectory.process = function() {\n  let tables = {};\n  for (let table of this.tables) {\n    tables[table.tag] = table;\n  }\n\n  this.tables = tables;\n};\n\nDirectory.preEncode = function(stream) {\n  let tables = [];\n  for (let tag in this.tables) {\n    let table = this.tables[tag];\n    if (table) {\n      tables.push({\n        tag: tag,\n        checkSum: 0,\n        offset: new r.VoidPointer(Tables[tag], table),\n        length: Tables[tag].size(table)\n      });\n    }\n  }\n\n  this.tag = 'true';\n  this.numTables = tables.length;\n  this.tables = tables;\n\n  let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2));\n  let maxPowerOf2 = Math.pow(2, maxExponentFor2);\n\n  this.searchRange =  maxPowerOf2 * 16;\n  this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n  this.rangeShift = this.numTables * 16 - this.searchRange;\n};\n\nexport default Directory;\n","let tables = {};\nexport default tables;\n\n// Required Tables\nimport cmap from './cmap';\nimport head from './head';\nimport hhea from './hhea';\nimport hmtx from './hmtx';\nimport maxp from './maxp';\nimport name from './name';\nimport OS2 from './OS2';\nimport post from './post';\n\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = name;\ntables['OS/2'] = OS2;\ntables.post = post;\n\n\n// TrueType Outlines\nimport cvt from './cvt';\nimport fpgm from './fpgm';\nimport loca from './loca';\nimport prep from './prep';\nimport glyf from './glyf';\n\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf;\n\n\n// PostScript Outlines\nimport CFFFont from '../cff/CFFFont';\nimport VORG from './VORG';\n\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG;\n\n\n// Bitmap Glyphs\nimport EBLC from './EBLC';\nimport sbix from './sbix';\nimport COLR from './COLR';\nimport CPAL from './CPAL';\n\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL;\n\n\n// Advanced OpenType Tables\nimport BASE from './BASE';\nimport GDEF from './GDEF';\nimport GPOS from './GPOS';\nimport GSUB from './GSUB';\nimport JSTF from './JSTF';\n\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF;\n\n// OpenType variations tables\nimport HVAR from './HVAR';\n\ntables.HVAR = HVAR;\n\n// Other OpenType Tables\nimport DSIG from './DSIG';\nimport gasp from './gasp';\nimport hdmx from './hdmx';\nimport kern from './kern';\nimport LTSH from './LTSH';\nimport PCLT from './PCLT';\nimport VDMX from './VDMX';\nimport vhea from './vhea';\nimport vmtx from './vmtx';\n\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx;\n\n\n// Apple Advanced Typography Tables\nimport avar from './avar';\nimport bsln from './bsln';\nimport feat from './feat';\nimport fvar from './fvar';\nimport gvar from './gvar';\nimport just from './just';\nimport morx from './morx';\nimport opbd from './opbd';\n\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\n","import r from 'restructure';\n\nlet SubHeader = new r.Struct({\n  firstCode:      r.uint16,\n  entryCount:     r.uint16,\n  idDelta:        r.int16,\n  idRangeOffset:  r.uint16\n});\n\nlet CmapGroup = new r.Struct({\n  startCharCode:  r.uint32,\n  endCharCode:    r.uint32,\n  glyphID:        r.uint32\n});\n\nlet UnicodeValueRange = new r.Struct({\n  startUnicodeValue:  r.uint24,\n  additionalCount:    r.uint8\n});\n\nlet UVSMapping = new r.Struct({\n  unicodeValue: r.uint24,\n  glyphID:      r.uint16\n});\n\nlet DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nlet NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\n\nlet VarSelectorRecord = new r.Struct({\n  varSelector:    r.uint24,\n  defaultUVS:     new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}),\n  nonDefaultUVS:  new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'})\n});\n\nlet CmapSubtable = new r.VersionedStruct(r.uint16, {\n  0: { // Byte encoding\n    length:     r.uint16,   // Total table length in bytes (set to 262 for format 0)\n    language:   r.uint16,   // Language code for this encoding subtable, or zero if language-independent\n    codeMap:    new r.LazyArray(r.uint8, 256)\n  },\n\n  2: { // High-byte mapping (CJK)\n    length:           r.uint16,\n    language:         r.uint16,\n    subHeaderKeys:    new r.Array(r.uint16, 256),\n    subHeaderCount:   t => Math.max.apply(Math, t.subHeaderKeys),\n    subHeaders:       new r.LazyArray(SubHeader, 'subHeaderCount'),\n    glyphIndexArray:  new r.LazyArray(r.uint16, 'subHeaderCount')\n  },\n\n  4: { // Segment mapping to delta values\n    length:           r.uint16,              // Total table length in bytes\n    language:         r.uint16,              // Language code\n    segCountX2:       r.uint16,\n    segCount:         t => t.segCountX2 >> 1,\n    searchRange:      r.uint16,\n    entrySelector:    r.uint16,\n    rangeShift:       r.uint16,\n    endCode:          new r.LazyArray(r.uint16, 'segCount'),\n    reservedPad:      new r.Reserved(r.uint16),       // This value should be zero\n    startCode:        new r.LazyArray(r.uint16, 'segCount'),\n    idDelta:          new r.LazyArray(r.int16, 'segCount'),\n    idRangeOffset:    new r.LazyArray(r.uint16, 'segCount'),\n    glyphIndexArray:  new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2)\n  },\n\n  6: { // Trimmed table\n    length:         r.uint16,\n    language:       r.uint16,\n    firstCode:      r.uint16,\n    entryCount:     r.uint16,\n    glyphIndices:   new r.LazyArray(r.uint16, 'entryCount')\n  },\n\n  8: { // mixed 16-bit and 32-bit coverage\n    reserved: new r.Reserved(r.uint16),\n    length:   r.uint32,\n    language: r.uint16,\n    is32:     new r.LazyArray(r.uint8, 8192),\n    nGroups:  r.uint32,\n    groups:   new r.LazyArray(CmapGroup, 'nGroups')\n  },\n\n  10: { // Trimmed Array\n    reserved:       new r.Reserved(r.uint16),\n    length:         r.uint32,\n    language:       r.uint32,\n    firstCode:      r.uint32,\n    entryCount:     r.uint32,\n    glyphIndices:   new r.LazyArray(r.uint16, 'numChars')\n  },\n\n  12: { // Segmented coverage\n    reserved: new r.Reserved(r.uint16),\n    length:   r.uint32,\n    language: r.uint32,\n    nGroups:  r.uint32,\n    groups:   new r.LazyArray(CmapGroup, 'nGroups')\n  },\n\n  13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n    reserved: new r.Reserved(r.uint16),\n    length:   r.uint32,\n    language: r.uint32,\n    nGroups:  r.uint32,\n    groups:   new r.LazyArray(CmapGroup, 'nGroups')\n  },\n\n  14: { // Unicode Variation Sequences\n    length:       r.uint32,\n    numRecords:   r.uint32,\n    varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n  }\n});\n\nlet CmapEntry = new r.Struct({\n  platformID:  r.uint16,  // Platform identifier\n  encodingID:  r.uint16,  // Platform-specific encoding identifier\n  table:       new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true})\n});\n\n// character to glyph mapping\nexport default new r.Struct({\n  version:      r.uint16,\n  numSubtables: r.uint16,\n  tables:       new r.Array(CmapEntry, 'numSubtables')\n});\n","import r from 'restructure';\n\n// font header\nexport default new r.Struct({\n  version:            r.int32,                   // 0x00010000 (version 1.0)\n  revision:           r.int32,                   // set by font manufacturer\n  checkSumAdjustment: r.uint32,\n  magicNumber:        r.uint32,                  // set to 0x5F0F3CF5\n  flags:              r.uint16,\n  unitsPerEm:         r.uint16,                  // range from 64 to 16384\n  created:            new r.Array(r.int32, 2),\n  modified:           new r.Array(r.int32, 2),\n  xMin:               r.int16,                   // for all glyph bounding boxes\n  yMin:               r.int16,                   // for all glyph bounding boxes\n  xMax:               r.int16,                   // for all glyph bounding boxes\n  yMax:               r.int16,                   // for all glyph bounding boxes\n  macStyle:           new r.Bitfield(r.uint16, [\n    'bold', 'italic', 'underline', 'outline',\n    'shadow', 'condensed', 'extended'\n  ]),\n  lowestRecPPEM:      r.uint16,                  // smallest readable size in pixels\n  fontDirectionHint:  r.int16,\n  indexToLocFormat:   r.int16,                   // 0 for short offsets, 1 for long\n  glyphDataFormat:    r.int16                    // 0 for current format\n});\n","import r from 'restructure';\n\n// horizontal header\nexport default new r.Struct({\n  version:              r.int32,\n  ascent:               r.int16,   // Distance from baseline of highest ascender\n  descent:              r.int16,   // Distance from baseline of lowest descender\n  lineGap:              r.int16,   // Typographic line gap\n  advanceWidthMax:      r.uint16,  // Maximum advance width value in 'hmtx' table\n  minLeftSideBearing:   r.int16,   // Maximum advance width value in 'hmtx' table\n  minRightSideBearing:  r.int16,   // Minimum right sidebearing value\n  xMaxExtent:           r.int16,\n  caretSlopeRise:       r.int16,   // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n  caretSlopeRun:        r.int16,   // 0 for vertical\n  caretOffset:          r.int16,   // Set to 0 for non-slanted fonts\n  reserved:             new r.Reserved(r.int16, 4),\n  metricDataFormat:     r.int16,   // 0 for current format\n  numberOfMetrics:      r.uint16   // Number of advance widths in 'hmtx' table\n});\n","import r from 'restructure';\n\nlet HmtxEntry = new r.Struct({\n  advance: r.uint16,\n  bearing: r.int16\n});\n\nexport default new r.Struct({\n  metrics:    new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics),\n  bearings:   new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics)\n});\n","import r from 'restructure';\n\n// maxiumum profile\nexport default new r.Struct({\n  version:                r.int32,\n  numGlyphs:              r.uint16,  // The number of glyphs in the font\n  maxPoints:              r.uint16,  // Maximum points in a non-composite glyph\n  maxContours:            r.uint16,  // Maximum contours in a non-composite glyph\n  maxComponentPoints:     r.uint16,  // Maximum points in a composite glyph\n  maxComponentContours:   r.uint16,  // Maximum contours in a composite glyph\n  maxZones:               r.uint16,  // 1 if instructions do not use the twilight zone, 2 otherwise\n  maxTwilightPoints:      r.uint16,  // Maximum points used in Z0\n  maxStorage:             r.uint16,  // Number of Storage Area locations\n  maxFunctionDefs:        r.uint16,  // Number of FDEFs\n  maxInstructionDefs:     r.uint16,  // Number of IDEFs\n  maxStackElements:       r.uint16,  // Maximum stack depth\n  maxSizeOfInstructions:  r.uint16,  // Maximum byte count for glyph instructions\n  maxComponentElements:   r.uint16,  // Maximum number of components referenced at “top level” for any composite glyph\n  maxComponentDepth:      r.uint16   // Maximum levels of recursion; 1 for simple components\n});\n","import r from 'restructure';\nimport {getEncoding, LANGUAGES} from '../encodings';\n\nlet NameRecord = new r.Struct({\n  platformID: r.uint16,\n  encodingID: r.uint16,\n  languageID: r.uint16,\n  nameID:     r.uint16,\n  length:     r.uint16,\n  string:     new r.Pointer(r.uint16,\n    new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)),\n    { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false }\n  )\n});\n\nlet LangTagRecord = new r.Struct({\n  length:  r.uint16,\n  tag:     new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset})\n});\n\nvar NameTable = new r.VersionedStruct(r.uint16, {\n  0: {\n    count:          r.uint16,\n    stringOffset:   r.uint16,\n    records:        new r.Array(NameRecord, 'count')\n  },\n  1: {\n    count:          r.uint16,\n    stringOffset:   r.uint16,\n    records:        new r.Array(NameRecord, 'count'),\n    langTagCount:   r.uint16,\n    langTags:       new r.Array(LangTagRecord, 'langTagCount')\n  }\n});\n\nexport default NameTable;\n\nconst NAMES = [\n  'copyright',\n  'fontFamily',\n  'fontSubfamily',\n  'uniqueSubfamily',\n  'fullName',\n  'version',\n  'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\n  'trademark',\n  'manufacturer',\n  'designer',\n  'description',\n  'vendorURL',\n  'designerURL',\n  'license',\n  'licenseURL',\n  null, // reserved\n  'preferredFamily',\n  'preferredSubfamily',\n  'compatibleFull',\n  'sampleText',\n  'postscriptCIDFontName',\n  'wwsFamilyName',\n  'wwsSubfamilyName'\n];\n\nNameTable.process = function(stream) {\n  var records = {};\n  for (let record of this.records) {\n    // find out what language this is for\n    let language = LANGUAGES[record.platformID][record.languageID];\n\n    if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n      language = this.langTags[record.languageID - 0x8000].tag;\n    }\n\n    if (language == null) {\n      language = record.platformID + '-' + record.languageID;\n    }\n\n    // if the nameID is >= 256, it is a font feature record (AAT)\n    let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID);\n    if (records[key] == null) {\n      records[key] = {};\n    }\n\n    let obj = records[key];\n    if (record.nameID >= 256) {\n      obj = obj[record.nameID] || (obj[record.nameID] = {});\n    }\n\n    if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n      obj[language] = record.string;\n    }\n  }\n\n  this.records = records;\n};\n\nNameTable.preEncode = function() {\n  if (Array.isArray(this.records)) return;\n  this.version = 0;\n\n  let records = [];\n  for (let key in this.records) {\n    let val = this.records[key];\n    if (key === 'fontFeatures') continue;\n\n    records.push({\n      platformID: 3,\n      encodingID: 1,\n      languageID: 0x409,\n      nameID: NAMES.indexOf(key),\n      length: Buffer.byteLength(val.en, 'utf16le'),\n      string: val.en\n    });\n\n    if (key === 'postscriptName') {\n      records.push({\n        platformID: 1,\n        encodingID: 0,\n        languageID: 0,\n        nameID: NAMES.indexOf(key),\n        length: val.en.length,\n        string: val.en\n      });\n    }\n  }\n\n  this.records = records;\n  this.count = records.length;\n  this.stringOffset = NameTable.size(this, null, false);\n};\n","/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nexport function getEncoding(platformID, encodingID, languageID = 0) {\n  if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n    return MAC_LANGUAGE_ENCODINGS[languageID];\n  }\n  \n  return ENCODINGS[platformID][encodingID];\n}\n\n// Map of platform ids to encoding ids.\nexport const ENCODINGS = [\n  // unicode\n  ['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],\n  \n  // macintosh\n  // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n  // 0\tRoman                 17\tMalayalam\n  // 1\tJapanese\t            18\tSinhalese\n  // 2\tTraditional Chinese\t  19\tBurmese\n  // 3\tKorean\t              20\tKhmer\n  // 4\tArabic\t              21\tThai\n  // 5\tHebrew\t              22\tLaotian\n  // 6\tGreek\t                23\tGeorgian\n  // 7\tRussian\t              24\tArmenian\n  // 8\tRSymbol\t              25\tSimplified Chinese\n  // 9\tDevanagari\t          26\tTibetan\n  // 10\tGurmukhi\t            27\tMongolian\n  // 11\tGujarati\t            28\tGeez\n  // 12\tOriya\t                29\tSlavic\n  // 13\tBengali\t              30\tVietnamese\n  // 14\tTamil\t                31\tSindhi\n  // 15\tTelugu\t              32\t(Uninterpreted)\n  // 16\tKannada\n  ['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',\n   'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati',\n   'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',\n   'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', \n   'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],\n  \n  // ISO (deprecated)\n  ['ascii'],\n  \n  // windows\n  // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n  ['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']\n];\n\n// Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nexport const MAC_LANGUAGE_ENCODINGS = {\n  15: 'maciceland',\n  17: 'macturkish',\n  18: 'maccroatian',\n  24: 'maccenteuro',\n  25: 'maccenteuro',\n  26: 'maccenteuro',\n  27: 'maccenteuro',\n  28: 'maccenteuro',\n  30: 'maciceland',\n  37: 'macromania',\n  38: 'maccenteuro',\n  39: 'maccenteuro',\n  40: 'maccenteuro',\n  143: 'macinuit', // Unsupported by iconv-lite\n  146: 'macgaelic' // Unsupported by iconv-lite\n};\n\n// Map of platform ids to BCP-47 language codes.\nexport const LANGUAGES = [\n  // unicode\n  [],\n  \n  { // macintosh\n    0: 'en',        30: 'fo',       60: 'ks',       90: 'rw',\n    1: 'fr',        31: 'fa',       61: 'ku',       91: 'rn',\n    2: 'de',        32: 'ru',       62: 'sd',       92: 'ny',\n    3: 'it',        33: 'zh',       63: 'bo',       93: 'mg',\n    4: 'nl',        34: 'nl-BE',    64: 'ne',       94: 'eo',\n    5: 'sv',        35: 'ga',       65: 'sa',       128: 'cy',\n    6: 'es',        36: 'sq',       66: 'mr',       129: 'eu',\n    7: 'da',        37: 'ro',       67: 'bn',       130: 'ca',\n    8: 'pt',        38: 'cz',       68: 'as',       131: 'la',\n    9: 'no',        39: 'sk',       69: 'gu',       132: 'qu',\n    10: 'he',       40: 'si',       70: 'pa',       133: 'gn',\n    11: 'ja',       41: 'yi',       71: 'or',       134: 'ay',\n    12: 'ar',       42: 'sr',       72: 'ml',       135: 'tt',\n    13: 'fi',       43: 'mk',       73: 'kn',       136: 'ug',\n    14: 'el',       44: 'bg',       74: 'ta',       137: 'dz',\n    15: 'is',       45: 'uk',       75: 'te',       138: 'jv',\n    16: 'mt',       46: 'be',       76: 'si',       139: 'su',\n    17: 'tr',       47: 'uz',       77: 'my',       140: 'gl',\n    18: 'hr',       48: 'kk',       78: 'km',       141: 'af',\n    19: 'zh-Hant',  49: 'az-Cyrl',  79: 'lo',       142: 'br',\n    20: 'ur',       50: 'az-Arab',  80: 'vi',       143: 'iu',\n    21: 'hi',       51: 'hy',       81: 'id',       144: 'gd',\n    22: 'th',       52: 'ka',       82: 'tl',       145: 'gv',\n    23: 'ko',       53: 'mo',       83: 'ms',       146: 'ga',\n    24: 'lt',       54: 'ky',       84: 'ms-Arab',  147: 'to',\n    25: 'pl',       55: 'tg',       85: 'am',       148: 'el-polyton',\n    26: 'hu',       56: 'tk',       86: 'ti',       149: 'kl',\n    27: 'es',       57: 'mn-CN',    87: 'om',       150: 'az',\n    28: 'lv',       58: 'mn',       88: 'so',       151: 'nn',\n    29: 'se',       59: 'ps',       89: 'sw',\n  },\n  \n  // ISO (deprecated)\n  [],\n  \n  { // windows                                        \n    0x0436: 'af',       0x4009: 'en-IN',    0x0487: 'rw',          0x0432: 'tn',       \n    0x041C: 'sq',       0x1809: 'en-IE',    0x0441: 'sw',          0x045B: 'si',          \n    0x0484: 'gsw',      0x2009: 'en-JM',    0x0457: 'kok',         0x041B: 'sk',          \n    0x045E: 'am',       0x4409: 'en-MY',    0x0412: 'ko',          0x0424: 'sl',          \n    0x1401: 'ar-DZ',    0x1409: 'en-NZ',    0x0440: 'ky',          0x2C0A: 'es-AR',       \n    0x3C01: 'ar-BH',    0x3409: 'en-PH',    0x0454: 'lo',          0x400A: 'es-BO',       \n    0x0C01: 'ar',       0x4809: 'en-SG',    0x0426: 'lv',          0x340A: 'es-CL',       \n    0x0801: 'ar-IQ',    0x1C09: 'en-ZA',    0x0427: 'lt',          0x240A: 'es-CO',       \n    0x2C01: 'ar-JO',    0x2C09: 'en-TT',    0x082E: 'dsb',         0x140A: 'es-CR',       \n    0x3401: 'ar-KW',    0x0809: 'en-GB',    0x046E: 'lb',          0x1C0A: 'es-DO',       \n    0x3001: 'ar-LB',    0x0409: 'en',       0x042F: 'mk',          0x300A: 'es-EC',       \n    0x1001: 'ar-LY',    0x3009: 'en-ZW',    0x083E: 'ms-BN',       0x440A: 'es-SV',       \n    0x1801: 'ary',      0x0425: 'et',       0x043E: 'ms',          0x100A: 'es-GT',       \n    0x2001: 'ar-OM',    0x0438: 'fo',       0x044C: 'ml',          0x480A: 'es-HN',       \n    0x4001: 'ar-QA',    0x0464: 'fil',      0x043A: 'mt',          0x080A: 'es-MX',       \n    0x0401: 'ar-SA',    0x040B: 'fi',       0x0481: 'mi',          0x4C0A: 'es-NI',       \n    0x2801: 'ar-SY',    0x080C: 'fr-BE',    0x047A: 'arn',         0x180A: 'es-PA',       \n    0x1C01: 'aeb',      0x0C0C: 'fr-CA',    0x044E: 'mr',          0x3C0A: 'es-PY',       \n    0x3801: 'ar-AE',    0x040C: 'fr',       0x047C: 'moh',         0x280A: 'es-PE',       \n    0x2401: 'ar-YE',    0x140C: 'fr-LU',    0x0450: 'mn',          0x500A: 'es-PR',       \n    0x042B: 'hy',       0x180C: 'fr-MC',    0x0850: 'mn-CN',       0x0C0A: 'es',          \n    0x044D: 'as',       0x100C: 'fr-CH',    0x0461: 'ne',          0x040A: 'es',          \n    0x082C: 'az-Cyrl',  0x0462: 'fy',       0x0414: 'nb',          0x540A: 'es-US',       \n    0x042C: 'az',       0x0456: 'gl',       0x0814: 'nn',          0x380A: 'es-UY',     \n    0x046D: 'ba',       0x0437: 'ka',       0x0482: 'oc',          0x200A: 'es-VE',       \n    0x042D: 'eu',       0x0C07: 'de-AT',    0x0448: 'or',          0x081D: 'sv-FI',       \n    0x0423: 'be',       0x0407: 'de',       0x0463: 'ps',          0x041D: 'sv',          \n    0x0845: 'bn',       0x1407: 'de-LI',    0x0415: 'pl',          0x045A: 'syr',         \n    0x0445: 'bn-IN',    0x1007: 'de-LU',    0x0416: 'pt',          0x0428: 'tg',          \n    0x201A: 'bs-Cyrl',  0x0807: 'de-CH',    0x0816: 'pt-PT',       0x085F: 'tzm',         \n    0x141A: 'bs',       0x0408: 'el',       0x0446: 'pa',          0x0449: 'ta',          \n    0x047E: 'br',       0x046F: 'kl',       0x046B: 'qu-BO',       0x0444: 'tt',          \n    0x0402: 'bg',       0x0447: 'gu',       0x086B: 'qu-EC',       0x044A: 'te',          \n    0x0403: 'ca',       0x0468: 'ha',       0x0C6B: 'qu',          0x041E: 'th',          \n    0x0C04: 'zh-HK',    0x040D: 'he',       0x0418: 'ro',          0x0451: 'bo',          \n    0x1404: 'zh-MO',    0x0439: 'hi',       0x0417: 'rm',          0x041F: 'tr',          \n    0x0804: 'zh',       0x040E: 'hu',       0x0419: 'ru',          0x0442: 'tk',          \n    0x1004: 'zh-SG',    0x040F: 'is',       0x243B: 'smn',         0x0480: 'ug',          \n    0x0404: 'zh-TW',    0x0470: 'ig',       0x103B: 'smj-NO',      0x0422: 'uk',          \n    0x0483: 'co',       0x0421: 'id',       0x143B: 'smj',         0x042E: 'hsb',         \n    0x041A: 'hr',       0x045D: 'iu',       0x0C3B: 'se-FI',       0x0420: 'ur',          \n    0x101A: 'hr-BA',    0x085D: 'iu-Latn',  0x043B: 'se',          0x0843: 'uz-Cyrl',     \n    0x0405: 'cs',       0x083C: 'ga',       0x083B: 'se-SE',       0x0443: 'uz',          \n    0x0406: 'da',       0x0434: 'xh',       0x203B: 'sms',         0x042A: 'vi',          \n    0x048C: 'prs',      0x0435: 'zu',       0x183B: 'sma-NO',      0x0452: 'cy',          \n    0x0465: 'dv',       0x0410: 'it',       0x1C3B: 'sms',         0x0488: 'wo',          \n    0x0813: 'nl-BE',    0x0810: 'it-CH',    0x044F: 'sa',          0x0485: 'sah',         \n    0x0413: 'nl',       0x0411: 'ja',       0x1C1A: 'sr-Cyrl-BA',  0x0478: 'ii',          \n    0x0C09: 'en-AU',    0x044B: 'kn',       0x0C1A: 'sr',          0x046A: 'yo',           \n    0x2809: 'en-BZ',    0x043F: 'kk',       0x181A: 'sr-Latn-BA',  \n    0x1009: 'en-CA',    0x0453: 'km',       0x081A: 'sr-Latn',     \n    0x2409: 'en-029',   0x0486: 'quc',      0x046C: 'nso',         \n  }\n];\n","import r from 'restructure';\n\nvar OS2 = new r.VersionedStruct(r.uint16, {\n  header: {\n    xAvgCharWidth:          r.int16,   // average weighted advance width of lower case letters and space\n    usWeightClass:          r.uint16,  // visual weight of stroke in glyphs\n    usWidthClass:           r.uint16,  // relative change from the normal aspect ratio (width to height ratio)\n    fsType:                 new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights\n      null, 'noEmbedding', 'viewOnly', 'editable', null,\n      null, null, null, 'noSubsetting', 'bitmapOnly'\n    ]),\n    ySubscriptXSize:        r.int16,   // recommended horizontal size in pixels for subscripts\n    ySubscriptYSize:        r.int16,   // recommended vertical size in pixels for subscripts\n    ySubscriptXOffset:      r.int16,   // recommended horizontal offset for subscripts\n    ySubscriptYOffset:      r.int16,   // recommended vertical offset form the baseline for subscripts\n    ySuperscriptXSize:      r.int16,   // recommended horizontal size in pixels for superscripts\n    ySuperscriptYSize:      r.int16,   // recommended vertical size in pixels for superscripts\n    ySuperscriptXOffset:    r.int16,   // recommended horizontal offset for superscripts\n    ySuperscriptYOffset:    r.int16,   // recommended vertical offset from the baseline for superscripts\n    yStrikeoutSize:         r.int16,   // width of the strikeout stroke\n    yStrikeoutPosition:     r.int16,   // position of the strikeout stroke relative to the baseline\n    sFamilyClass:           r.int16,   // classification of font-family design\n    panose:                 new r.Array(r.uint8, 10),   // describe the visual characteristics of a given typeface\n    ulCharRange:            new r.Array(r.uint32, 4),\n    vendorID:               new r.String(4),          // four character identifier for the font vendor\n    fsSelection:            new r.Bitfield(r.uint16, [  // bit field containing information about the font\n      'italic', 'underscore', 'negative', 'outlined', 'strikeout',\n      'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique'\n    ]),\n    usFirstCharIndex:       r.uint16,  // The minimum Unicode index in this font\n    usLastCharIndex:        r.uint16   // The maximum Unicode index in this font\n  },\n\n  // The Apple version of this table ends here, but the Microsoft one continues on...\n  0: {},\n\n  1: {\n    typoAscender:       r.int16,\n    typoDescender:      r.int16,\n    typoLineGap:        r.int16,\n    winAscent:          r.uint16,\n    winDescent:         r.uint16,\n    codePageRange:      new r.Array(r.uint32, 2)\n  },\n\n  2: {\n    // these should be common with version 1 somehow\n    typoAscender:       r.int16,\n    typoDescender:      r.int16,\n    typoLineGap:        r.int16,\n    winAscent:          r.uint16,\n    winDescent:         r.uint16,\n    codePageRange:      new r.Array(r.uint32, 2),\n\n    xHeight:            r.int16,\n    capHeight:          r.int16,\n    defaultChar:        r.uint16,\n    breakChar:          r.uint16,\n    maxContent:         r.uint16\n  },\n\n  5: {\n    typoAscender:       r.int16,\n    typoDescender:      r.int16,\n    typoLineGap:        r.int16,\n    winAscent:          r.uint16,\n    winDescent:         r.uint16,\n    codePageRange:      new r.Array(r.uint32, 2),\n\n    xHeight:            r.int16,\n    capHeight:          r.int16,\n    defaultChar:        r.uint16,\n    breakChar:          r.uint16,\n    maxContent:         r.uint16,\n\n    usLowerOpticalPointSize: r.uint16,\n    usUpperOpticalPointSize: r.uint16\n  }\n});\n\nlet versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\n\nexport default OS2;\n","import r from 'restructure';\n\n// PostScript information\nexport default new r.VersionedStruct(r.fixed32, {\n  header: { // these fields exist at the top of all versions\n    italicAngle:        r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.\n    underlinePosition:  r.int16,   // Suggested distance of the top of the underline from the baseline\n    underlineThickness: r.int16,   // Suggested values for the underline thickness\n    isFixedPitch:       r.uint32,  // Whether the font is monospaced\n    minMemType42:       r.uint32,  // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n    maxMemType42:       r.uint32,  // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n    minMemType1:        r.uint32,  // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n    maxMemType1:        r.uint32   // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n  },\n\n  1: {}, // version 1 has no additional fields\n\n  2: {\n    numberOfGlyphs: r.uint16,\n    glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n    names:          new r.Array(new r.String(r.uint8))\n  },\n\n  2.5: {\n    numberOfGlyphs: r.uint16,\n    offsets:        new r.Array(r.uint8, 'numberOfGlyphs')\n  },\n\n  3: {}, // version 3 has no additional fields\n\n  4: {\n    map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs)\n  }\n});\n","import r from 'restructure';\n\n// An array of predefined values accessible by instructions\nexport default new r.Struct({\n  controlValues: new r.Array(r.int16)\n});\n","import r from 'restructure';\n\n// A list of instructions that are executed once when a font is first used.\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\nexport default new r.Struct({\n  instructions: new r.Array(r.uint8)\n});\n","import r from 'restructure';\n\nlet loca = new r.VersionedStruct('head.indexToLocFormat', {\n  0: {\n    offsets: new r.Array(r.uint16)\n  },\n  1: {\n    offsets: new r.Array(r.uint32)\n  }\n});\n\nloca.process = function() {\n  if (this.version === 0) {\n    for (let i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] <<= 1;\n    }\n  }\n};\n\nloca.preEncode = function() {\n  if (this.version === 0) {\n    for (let i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] >>>= 1;\n    }\n  }\n};\n\nexport default loca;\n","import r from 'restructure';\n\n// Set of instructions executed whenever the point size or font transformation change\nexport default new r.Struct({\n  controlValueProgram: new r.Array(r.uint8)\n});\n","import r from 'restructure';\n\n// only used for encoding\nexport default new r.Array(new r.Buffer);\n","import r from 'restructure';\nimport CFFIndex from './CFFIndex';\nimport CFFTop from './CFFTop';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport standardStrings from './CFFStandardStrings';\n\nclass CFFFont {\n  constructor(stream) {\n    this.stream = stream;\n    this.decode();\n  }\n\n  static decode(stream) {\n    return new CFFFont(stream);\n  }\n\n  decode() {\n    let start = this.stream.pos;\n    let top = CFFTop.decode(this.stream);\n    for (let key in top) {\n      let val = top[key];\n      this[key] = val;\n    }\n\n    if (this.version < 2) {\n      if (this.topDictIndex.length !== 1) {\n        throw new Error(\"Only a single font is allowed in CFF\");\n      }\n\n      this.topDict = this.topDictIndex[0];\n    }\n\n    this.isCIDFont = this.topDict.ROS != null;\n    return this;\n  }\n\n  string(sid) {\n    if (this.version >= 2) {\n      return null;\n    }\n\n    if (sid < standardStrings.length) {\n      return standardStrings[sid];\n    }\n\n    return this.stringIndex[sid - standardStrings.length];\n  }\n\n  get postscriptName() {\n    if (this.version < 2) {\n      return this.nameIndex[0];\n    }\n\n    return null;\n  }\n\n  get fullName() {\n    return this.string(this.topDict.FullName);\n  }\n\n  get familyName() {\n    return this.string(this.topDict.FamilyName);\n  }\n\n  getCharString(glyph) {\n    this.stream.pos = this.topDict.CharStrings[glyph].offset;\n    return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n  }\n\n  getGlyphName(gid) {\n    // CFF2 glyph names are in the post table.\n    if (this.version >= 2) {\n      return null;\n    }\n\n    // CID-keyed fonts don't have glyph names\n    if (this.isCIDFont) {\n      return null;\n    }\n\n    let { charset } = this.topDict;\n    if (Array.isArray(charset)) {\n      return charset[gid];\n    }\n\n    if (gid === 0) {\n      return '.notdef';\n    }\n\n    gid -= 1;\n\n    switch (charset.version) {\n      case 0:\n        return this.string(charset.glyphs[gid]);\n\n      case 1:\n      case 2:\n        for (let i = 0; i < charset.ranges.length; i++) {\n          let range = charset.ranges[i];\n          if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n            return this.string(range.first + (gid - range.offset));\n          }\n        }\n        break;\n    }\n\n    return null;\n  }\n\n  fdForGlyph(gid) {\n    if (!this.topDict.FDSelect) {\n      return null;\n    }\n\n    switch (this.topDict.FDSelect.version) {\n      case 0:\n        return this.topDict.FDSelect.fds[gid];\n\n      case 3:\n      case 4:\n        let { ranges } = this.topDict.FDSelect;\n        let low = 0;\n        let high = ranges.length - 1;\n\n        while (low <= high) {\n          let mid = (low + high) >> 1;\n\n          if (gid < ranges[mid].first) {\n            high = mid - 1;\n          } else if (mid < high && gid >= ranges[mid + 1].first) {\n            low = mid + 1;\n          } else {\n            return ranges[mid].fd;\n          }\n        }\n      default:\n        throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);\n    }\n  }\n\n  privateDictForGlyph(gid) {\n    if (this.topDict.FDSelect) {\n      let fd = this.fdForGlyph(gid);\n      if (this.topDict.FDArray[fd]) {\n        return this.topDict.FDArray[fd].Private;\n      }\n\n      return null;\n    }\n\n    if (this.version < 2) {\n      return this.topDict.Private;\n    }\n\n    return this.topDict.FDArray[0].Private;\n  }\n}\n\nexport default CFFFont;\n","import r from 'restructure';\n\nexport default class CFFIndex {\n  constructor(type) {\n    this.type = type;\n  }\n\n  getCFFVersion(ctx) {\n    while (ctx && !ctx.hdrSize) {\n      ctx = ctx.parent;\n    }\n\n    return ctx ? ctx.version : -1;\n  }\n\n  decode(stream, parent) {\n    let version = this.getCFFVersion(parent);\n    let count = version >= 2\n      ? stream.readUInt32BE()\n      : stream.readUInt16BE();\n\n    if (count === 0) {\n      return [];\n    }\n\n    let offSize = stream.readUInt8();\n    let offsetType;\n    if (offSize === 1) {\n      offsetType = r.uint8;\n    } else if (offSize === 2) {\n      offsetType = r.uint16;\n    } else if (offSize === 3) {\n      offsetType = r.uint24;\n    } else if (offSize === 4) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);\n    }\n\n    let ret = [];\n    let startPos = stream.pos + ((count + 1) * offSize) - 1;\n\n    let start = offsetType.decode(stream);\n    for (let i = 0; i < count; i++) {\n      let end = offsetType.decode(stream);\n\n      if (this.type != null) {\n        let pos = stream.pos;\n        stream.pos = startPos + start;\n\n        parent.length = end - start;\n        ret.push(this.type.decode(stream, parent));\n        stream.pos = pos;\n      } else {\n        ret.push({\n          offset: startPos + start,\n          length: end - start\n        });\n      }\n\n      start = end;\n    }\n\n    stream.pos = startPos + start;\n    return ret;\n  }\n\n  size(arr, parent) {\n    let size = 2;\n    if (arr.length === 0) {\n      return size;\n    }\n\n    let type = this.type || new r.Buffer;\n\n    // find maximum offset to detminine offset type\n    let offset = 1;\n    for (let i = 0; i < arr.length; i++) {\n      let item = arr[i];\n      offset += type.size(item, parent);\n    }\n\n    let offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    }\n\n    size += 1 + offsetType.size() * (arr.length + 1);\n    size += offset - 1;\n\n    return size;\n  }\n\n  encode(stream, arr, parent) {\n    stream.writeUInt16BE(arr.length);\n    if (arr.length === 0) {\n      return;\n    }\n\n    let type = this.type || new r.Buffer;\n\n    // find maximum offset to detminine offset type\n    let sizes = [];\n    let offset = 1;\n    for (let item of arr) {\n      let s = type.size(item, parent);\n      sizes.push(s);\n      offset += s;\n    }\n\n    let offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    }\n\n    // write offset size\n    stream.writeUInt8(offsetType.size());\n\n    // write elements\n    offset = 1;\n    offsetType.encode(stream, offset);\n\n    for (let size of sizes) {\n      offset += size;\n      offsetType.encode(stream, offset);\n    }\n\n    for (let item of arr) {\n      type.encode(stream, item, parent);\n    }\n\n    return;\n  }\n}\n","import r from 'restructure';\nimport { resolveLength } from 'restructure/src/utils.js';\nimport CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport StandardStrings from './CFFStandardStrings';\nimport { StandardEncoding, ExpertEncoding } from './CFFEncodings';\nimport { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets';\nimport { ItemVariationStore } from '../tables/variations';\n\n// Checks if an operand is an index of a predefined value,\n// otherwise delegates to the provided type.\nclass PredefinedOp {\n  constructor(predefinedOps, type) {\n    this.predefinedOps = predefinedOps;\n    this.type = type;\n  }\n\n  decode(stream, parent, operands) {\n    if (this.predefinedOps[operands[0]]) {\n      return this.predefinedOps[operands[0]];\n    }\n\n    return this.type.decode(stream, parent, operands);\n  }\n\n  size(value, ctx) {\n    return this.type.size(value, ctx);\n  }\n\n  encode(stream, value, ctx) {\n    let index = this.predefinedOps.indexOf(value);\n    if (index !== -1) {\n      return index;\n    }\n\n    return this.type.encode(stream, value, ctx);\n  }\n}\n\nclass CFFEncodingVersion extends r.Number {\n  constructor() {\n    super('UInt8');\n  }\n\n  decode(stream) {\n    return r.uint8.decode(stream) & 0x7f;\n  }\n}\n\nlet Range1 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint8\n});\n\nlet Range2 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint16\n});\n\nlet CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n  0: {\n    nCodes: r.uint8,\n    codes: new r.Array(r.uint8, 'nCodes')\n  },\n\n  1: {\n    nRanges: r.uint8,\n    ranges: new r.Array(Range1, 'nRanges')\n  }\n\n  // TODO: supplement?\n});\n\nlet CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));\n\n// Decodes an array of ranges until the total\n// length is equal to the provided length.\nclass RangeArray extends r.Array {\n  decode(stream, parent) {\n    let length = resolveLength(this.length, stream, parent);\n    let count = 0;\n    let res = [];\n    while (count < length) {\n      let range = this.type.decode(stream, parent);\n      range.offset = count;\n      count += range.nLeft + 1;\n      res.push(range);\n    }\n\n    return res;\n  }\n}\n\nlet CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n  0: {\n    glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1)\n  },\n\n  1: {\n    ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1)\n  },\n\n  2: {\n    ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1)\n  }\n});\n\nlet CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));\n\nlet FDRange3 = new r.Struct({\n  first: r.uint16,\n  fd: r.uint8\n});\n\nlet FDRange4 = new r.Struct({\n  first: r.uint32,\n  fd: r.uint16\n});\n\nlet FDSelect = new r.VersionedStruct(r.uint8, {\n  0: {\n    fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)\n  },\n\n  3: {\n    nRanges: r.uint16,\n    ranges: new r.Array(FDRange3, 'nRanges'),\n    sentinel: r.uint16\n  },\n\n  4: {\n    nRanges: r.uint32,\n    ranges: new r.Array(FDRange4, 'nRanges'),\n    sentinel: r.uint32\n  }\n});\n\nlet ptr = new CFFPointer(CFFPrivateDict);\nclass CFFPrivateOp {\n  decode(stream, parent, operands) {\n    parent.length = operands[0];\n    return ptr.decode(stream, parent, [operands[1]]);\n  }\n\n  size(dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n  }\n\n  encode(stream, dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n  }\n}\n\nlet FontDict = new CFFDict([\n  // key       name                   type(s)                                 default\n  [18,        'Private',              new CFFPrivateOp,                       null],\n  [[12, 38],  'FontName',             'sid',                                  null],\n  [[12, 7],   'FontMatrix',           'array',                                [0.001, 0, 0, 0.001, 0, 0]],\n  [[12, 5],   'PaintType',            'number',                               0],\n]);\n\nlet CFFTopDict = new CFFDict([\n  // key       name                   type(s)                                 default\n  [[12, 30],  'ROS',                  ['sid', 'sid', 'number'],               null],\n\n  [0,         'version',              'sid',                                  null],\n  [1,         'Notice',               'sid',                                  null],\n  [[12, 0],   'Copyright',            'sid',                                  null],\n  [2,         'FullName',             'sid',                                  null],\n  [3,         'FamilyName',           'sid',                                  null],\n  [4,         'Weight',               'sid',                                  null],\n  [[12, 1],   'isFixedPitch',         'boolean',                              false],\n  [[12, 2],   'ItalicAngle',          'number',                               0],\n  [[12, 3],   'UnderlinePosition',    'number',                               -100],\n  [[12, 4],   'UnderlineThickness',   'number',                               50],\n  [[12, 5],   'PaintType',            'number',                               0],\n  [[12, 6],   'CharstringType',       'number',                               2],\n  [[12, 7],   'FontMatrix',           'array',                                [0.001, 0, 0, 0.001, 0, 0]],\n  [13,        'UniqueID',             'number',                               null],\n  [5,         'FontBBox',             'array',                                [0, 0, 0, 0]],\n  [[12, 8],   'StrokeWidth',          'number',                               0],\n  [14,        'XUID',                 'array',                                null],\n  [15,        'charset',              CFFCharset,                             ISOAdobeCharset],\n  [16,        'Encoding',             CFFEncoding,                            StandardEncoding],\n  [17,        'CharStrings',          new CFFPointer(new CFFIndex),           null],\n  [18,        'Private',              new CFFPrivateOp,                       null],\n  [[12, 20],  'SyntheticBase',        'number',                               null],\n  [[12, 21],  'PostScript',           'sid',                                  null],\n  [[12, 22],  'BaseFontName',         'sid',                                  null],\n  [[12, 23],  'BaseFontBlend',        'delta',                                null],\n\n  // CID font specific\n  [[12, 31],  'CIDFontVersion',       'number',                               0],\n  [[12, 32],  'CIDFontRevision',      'number',                               0],\n  [[12, 33],  'CIDFontType',          'number',                               0],\n  [[12, 34],  'CIDCount',             'number',                               8720],\n  [[12, 35],  'UIDBase',              'number',                               null],\n  [[12, 37],  'FDSelect',             new CFFPointer(FDSelect),               null],\n  [[12, 36],  'FDArray',              new CFFPointer(new CFFIndex(FontDict)), null],\n  [[12, 38],  'FontName',             'sid',                                  null]\n]);\n\nlet VariationStore = new r.Struct({\n  length: r.uint16,\n  itemVariationStore: ItemVariationStore\n})\n\nlet CFF2TopDict = new CFFDict([\n  [[12, 7],   'FontMatrix',           'array',                                [0.001, 0, 0, 0.001, 0, 0]],\n  [17,        'CharStrings',          new CFFPointer(new CFFIndex),           null],\n  [[12, 37],  'FDSelect',             new CFFPointer(FDSelect),               null],\n  [[12, 36],  'FDArray',              new CFFPointer(new CFFIndex(FontDict)), null],\n  [24,        'vstore',               new CFFPointer(VariationStore),         null],\n  [25,        'maxstack',             'number',                               193]\n]);\n\nlet CFFTop = new r.VersionedStruct(r.fixed16, {\n  1: {\n    hdrSize:            r.uint8,\n    offSize:            r.uint8,\n    nameIndex:          new CFFIndex(new r.String('length')),\n    topDictIndex:       new CFFIndex(CFFTopDict),\n    stringIndex:        new CFFIndex(new r.String('length')),\n    globalSubrIndex:    new CFFIndex\n  },\n\n  2: {\n    hdrSize:            r.uint8,\n    length:             r.uint16,\n    topDict:            CFF2TopDict,\n    globalSubrIndex:    new CFFIndex\n  }\n});\n\nexport default CFFTop;\n","import isEqual from 'deep-equal';\nimport r from 'restructure';\nimport CFFOperand from './CFFOperand';\nimport { PropertyDescriptor } from 'restructure/src/utils.js';\n\nexport default class CFFDict {\n  constructor(ops = []) {\n    this.ops = ops;\n    this.fields = {};\n    for (let field of ops) {\n      let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n      this.fields[key] = field;\n    }\n  }\n\n  decodeOperands(type, stream, ret, operands) {\n    if (Array.isArray(type)) {\n      return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op]));\n    } else if (type.decode != null) {\n      return type.decode(stream, ret, operands);\n    } else {\n      switch (type) {\n        case 'number':\n        case 'offset':\n        case 'sid':\n          return operands[0];\n        case 'boolean':\n          return !!operands[0];\n        default:\n          return operands;\n      }\n    }\n  }\n\n  encodeOperands(type, stream, ctx, operands) {\n    if (Array.isArray(type)) {\n      return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]);\n    } else if (type.encode != null) {\n      return type.encode(stream, operands, ctx);\n    } else if (typeof operands === 'number') {\n      return [operands];\n    } else if (typeof operands === 'boolean') {\n      return [+operands];\n    } else if (Array.isArray(operands)) {\n      return operands;\n    } else {\n      return [operands];\n    }\n  }\n\n  decode(stream, parent) {\n    let end = stream.pos + parent.length;\n    let ret = {};\n    let operands = [];\n\n    // define hidden properties\n    Object.defineProperties(ret, {\n      parent:         { value: parent },\n      _startOffset:   { value: stream.pos }\n    });\n\n    // fill in defaults\n    for (let key in this.fields) {\n      let field = this.fields[key];\n      ret[field[1]] = field[3];\n    }\n\n    while (stream.pos < end) {\n      let b = stream.readUInt8();\n      if (b < 28) {\n        if (b === 12) {\n          b = (b << 8) | stream.readUInt8();\n        }\n\n        let field = this.fields[b];\n        if (!field) {\n          throw new Error(`Unknown operator ${b}`);\n        }\n\n        let val = this.decodeOperands(field[2], stream, ret, operands);\n        if (val != null) {\n          if (val instanceof PropertyDescriptor) {\n            Object.defineProperty(ret, field[1], val);\n          } else {\n            ret[field[1]] = val;\n          }\n        }\n\n        operands = [];\n      } else {\n        operands.push(CFFOperand.decode(stream, b));\n      }\n    }\n\n    return ret;\n  }\n\n  size(dict, parent, includePointers = true) {\n    let ctx = {\n      parent,\n      val: dict,\n      pointerSize: 0,\n      startOffset: parent.startOffset || 0\n    };\n\n    let len = 0;\n\n    for (let k in this.fields) {\n      let field = this.fields[k];\n      let val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n\n      let operands = this.encodeOperands(field[2], null, ctx, val);\n      for (let op of operands) {\n        len += CFFOperand.size(op);\n      }\n\n      let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      len += key.length;\n    }\n\n    if (includePointers) {\n      len += ctx.pointerSize;\n    }\n\n    return len;\n  }\n\n  encode(stream, dict, parent) {\n    let ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent,\n      val: dict,\n      pointerSize: 0\n    };\n\n    ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n\n    for (let field of this.ops) {\n      let val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n\n      let operands = this.encodeOperands(field[2], stream, ctx, val);\n      for (let op of operands) {\n        CFFOperand.encode(stream, op);\n      }\n\n      let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      for (let op of key) {\n        stream.writeUInt8(op);\n      }\n    }\n\n    let i = 0;\n    while (i < ctx.pointers.length) {\n      let ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n\n    return;\n  }\n}\n","const FLOAT_EOF = 0xf;\nconst FLOAT_LOOKUP = [\n  '0', '1', '2', '3', '4', '5', '6', '7',\n  '8', '9', '.', 'E', 'E-', null, '-'\n];\n\nconst FLOAT_ENCODE_LOOKUP = {\n  '.': 10,\n  'E': 11,\n  'E-': 12,\n  '-': 14\n};\n\nexport default class CFFOperand {\n  static decode(stream, value) {\n    if (32 <= value && value <= 246) {\n      return value - 139;\n    }\n\n    if (247 <= value && value <= 250) {\n      return (value - 247) * 256 + stream.readUInt8() + 108;\n    }\n\n    if (251 <= value && value <= 254) {\n      return -(value - 251) * 256 - stream.readUInt8() - 108;\n    }\n\n    if (value === 28) {\n      return stream.readInt16BE();\n    }\n\n    if (value === 29) {\n      return stream.readInt32BE();\n    }\n\n    if (value === 30) {\n      let str = '';\n      while (true) {\n        let b = stream.readUInt8();\n\n        let n1 = b >> 4;\n        if (n1 === FLOAT_EOF) { break; }\n        str += FLOAT_LOOKUP[n1];\n\n        let n2 = b & 15;\n        if (n2 === FLOAT_EOF) { break; }\n        str += FLOAT_LOOKUP[n2];\n      }\n\n      return parseFloat(str);\n    }\n\n    return null;\n  }\n\n  static size(value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, set to 32768\n    if (value.forceLarge) {\n      value = 32768;\n    }\n\n    if ((value | 0) !== value) { // floating point\n      let str = '' + value;\n      return 1 + Math.ceil((str.length + 1) / 2);\n\n    } else if (-107 <= value && value <= 107) {\n      return 1;\n\n    } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n      return 2;\n\n    } else if (-32768 <= value && value <= 32767) {\n      return 3;\n\n    } else {\n      return 5;\n    }\n  }\n\n  static encode(stream, value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, save the old value and set to 32768\n    let val = Number(value);\n\n    if (value.forceLarge) {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n\n    } else if ((val | 0) !== val) { // floating point\n      stream.writeUInt8(30);\n\n      let str = '' + val;\n      for (let i = 0; i < str.length; i += 2) {\n        let c1 = str[i];\n        let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n\n        if (i === str.length - 1) {\n          var n2 = FLOAT_EOF;\n        } else {\n          let c2 = str[i + 1];\n          var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n        }\n\n        stream.writeUInt8((n1 << 4) | (n2 & 15));\n      }\n\n      if (n2 !== FLOAT_EOF) {\n        return stream.writeUInt8((FLOAT_EOF << 4));\n      }\n\n    } else if (-107 <= val && val <= 107) {\n      return stream.writeUInt8(val + 139);\n\n    } else if (108 <= val && val <= 1131) {\n      val -= 108;\n      stream.writeUInt8((val >> 8) + 247);\n      return stream.writeUInt8(val & 0xff);\n\n    } else if (-1131 <= val && val <= -108) {\n      val = -val - 108;\n      stream.writeUInt8((val >> 8) + 251);\n      return stream.writeUInt8(val & 0xff);\n\n    } else if (-32768 <= val && val <= 32767) {\n      stream.writeUInt8(28);\n      return stream.writeInt16BE(val);\n\n    } else {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    }\n  }\n}\n","import r from 'restructure';\n\nexport default class CFFPointer extends r.Pointer {\n  constructor(type, options = {}) {\n    if (options.type == null) {\n      options.type = 'global';\n    }\n\n    super(null, type, options);\n  }\n\n  decode(stream, parent, operands) {\n    this.offsetType = {\n      decode: () => operands[0]\n    };\n\n    return super.decode(stream, parent, operands);\n  }\n\n  encode(stream, value, ctx) {\n    if (!stream) {\n      // compute the size (so ctx.pointerSize is correct)\n      this.offsetType = {\n        size: () => 0\n      };\n\n      this.size(value, ctx);\n      return [new Ptr(0)];\n    }\n\n    let ptr = null;\n    this.offsetType = {\n      encode: (stream, val) => ptr = val\n    };\n\n    super.encode(stream, value, ctx);\n    return [new Ptr(ptr)];\n  }\n}\n\nclass Ptr {\n  constructor(val) {\n    this.val = val;\n    this.forceLarge = true;\n  }\n\n  valueOf() {\n    return this.val;\n  }\n}\n","import CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\n\nclass CFFBlendOp {\n  static decode(stream, parent, operands) {\n    let numBlends = operands.pop();\n\n    // TODO: actually blend. For now just consume the deltas\n    // since we don't use any of the values anyway.\n    while (operands.length > numBlends) {\n      operands.pop();\n    }\n  }\n}\n\nexport default new CFFDict([\n  // key       name                    type                                          default\n  [6,         'BlueValues',           'delta',                                       null],\n  [7,         'OtherBlues',           'delta',                                       null],\n  [8,         'FamilyBlues',          'delta',                                       null],\n  [9,         'FamilyOtherBlues',     'delta',                                       null],\n  [[12, 9],   'BlueScale',            'number',                                      0.039625],\n  [[12, 10],  'BlueShift',            'number',                                      7],\n  [[12, 11],  'BlueFuzz',             'number',                                      1],\n  [10,        'StdHW',                'number',                                      null],\n  [11,        'StdVW',                'number',                                      null],\n  [[12, 12],  'StemSnapH',            'delta',                                       null],\n  [[12, 13],  'StemSnapV',            'delta',                                       null],\n  [[12, 14],  'ForceBold',            'boolean',                                     false],\n  [[12, 17],  'LanguageGroup',        'number',                                      0],\n  [[12, 18],  'ExpansionFactor',      'number',                                      0.06],\n  [[12, 19],  'initialRandomSeed',    'number',                                      0],\n  [20,        'defaultWidthX',        'number',                                      0],\n  [21,        'nominalWidthX',        'number',                                      0],\n  [22,        'vsindex',              'number',                                      0],\n  [23,        'blend',                CFFBlendOp,                                    null],\n  [19,        'Subrs',                new CFFPointer(new CFFIndex, {type: 'local'}), null]\n]);\n","// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nexport default [\n  \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\n  \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\n  \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\",\n  \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\",\n  \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\",\n  \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\",\n  \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\",\n  \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\",\n  \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\n  \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\n  \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\",\n  \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\",\n  \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\",\n  \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\",\n  \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\",\n  \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\",\n  \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\n  \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\",\n  \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\",\n  \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\",\n  \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\",\n  \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\",\n  \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\",\n  \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\",\n  \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\",\n  \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\",\n  \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\",\n  \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\",\n  \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\",\n  \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\",\n  \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\",\n  \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\",\n  \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\",\n  \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\n  \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n  \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\n  \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\n  \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\n  \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\n  \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\n  \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\",\n  \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\",\n  \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n  \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n  \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n  \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n  \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n  \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\n  \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\n  \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\",\n  \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\",\n  \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n  \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\",\n  \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\n  \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\n  \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\n  \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\n  \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\n  \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\n  \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n  \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n  \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n  \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n  \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n  \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n  \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\",\n  \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\n];\n","export let StandardEncoding = [\n  '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n  '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n  'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n  'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n  'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n  'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n  'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n  'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\n  '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n  'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\n  'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\n  'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\n  'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\n  'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\n  'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\n  '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\n  'lslash', 'oslash', 'oe', 'germandbls'\n];\n\nexport let ExpertEncoding = [\n  '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n  '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\n  'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\n  'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n  'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\n  'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\n  'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\n  'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\n  'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n  'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n  'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n  'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\n  '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n  'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n  'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\n  '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\n  'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\n  '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\n  'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\n  'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\n  'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\n  'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n  'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\n  'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n  'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'\n];\n","export let ISOAdobeCharset = [\n  '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',\n  'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',\n  'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',\n  'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',\n  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',\n  'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n  'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',\n  'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n  'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',\n  'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',\n  'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',\n  'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',\n  'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',\n  'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',\n  'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',\n  'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',\n  'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',\n  'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',\n  'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\n  'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',\n  'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',\n  'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\n  'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',\n  'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',\n  'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\n  'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',\n  'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',\n  'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',\n  'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',\n  'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',\n  'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',\n  'ugrave', 'yacute', 'ydieresis', 'zcaron'\n];\n\nexport let ExpertCharset = [\n  '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',\n  'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',\n  'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',\n  'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',\n  'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',\n  'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',\n  'colon', 'semicolon', 'commasuperior', 'threequartersemdash',\n  'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',\n  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n  'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',\n  'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',\n  'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',\n  'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',\n  'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',\n  'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',\n  'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n  'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',\n  'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',\n  'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',\n  'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',\n  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n  'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',\n  'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',\n  'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',\n  'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n  'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',\n  'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',\n  'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n  'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',\n  'Ydieresissmall'\n];\n\nexport let ExpertSubsetCharset = [\n  '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',\n  'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',\n  'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',\n  'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n  'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',\n  'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',\n  'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',\n  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n  'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',\n  'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',\n  'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',\n  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n  'periodinferior', 'commainferior'\n];\n","import {Feature} from './opentype';\nimport r from 'restructure';\n\n/*******************\n * Variation Store *\n *******************/\n\nlet F2DOT14 = new r.Fixed(16, 'BE', 14);\nlet RegionAxisCoordinates = new r.Struct({\n  startCoord: F2DOT14,\n  peakCoord: F2DOT14,\n  endCoord: F2DOT14\n});\n\nlet VariationRegionList = new r.Struct({\n  axisCount: r.uint16,\n  regionCount: r.uint16,\n  variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\n\nlet DeltaSet = new r.Struct({\n  shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),\n  regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),\n  deltas: t => t.shortDeltas.concat(t.regionDeltas)\n});\n\nlet ItemVariationData = new r.Struct({\n  itemCount: r.uint16,\n  shortDeltaCount: r.uint16,\n  regionIndexCount: r.uint16,\n  regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n  deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\n\nexport let ItemVariationStore = new r.Struct({\n  format: r.uint16,\n  variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n  variationDataCount: r.uint16,\n  itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n\n/**********************\n * Feature Variations *\n **********************/\n\nlet ConditionTable = new r.VersionedStruct(r.uint16, {\n  1: {\n    axisIndex: r.uint16,\n    axisIndex: r.uint16,\n    filterRangeMinValue: F2DOT14,\n    filterRangeMaxValue: F2DOT14\n  }\n});\n\nlet ConditionSet = new r.Struct({\n  conditionCount: r.uint16,\n  conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\n\nlet FeatureTableSubstitutionRecord = new r.Struct({\n  featureIndex: r.uint16,\n  alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})\n});\n\nlet FeatureTableSubstitution = new r.Struct({\n  version: r.fixed32,\n  substitutionCount: r.uint16,\n  substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\n\nlet FeatureVariationRecord = new r.Struct({\n  conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),\n  featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})\n});\n\nexport let FeatureVariations = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  featureVariationRecordCount: r.uint32,\n  featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n","import r from 'restructure';\n\n//########################\n// Scripts and Languages #\n//########################\n\nlet LangSysTable = new r.Struct({\n  reserved:         new r.Reserved(r.uint16),\n  reqFeatureIndex:  r.uint16,\n  featureCount:     r.uint16,\n  featureIndexes:   new r.Array(r.uint16, 'featureCount')\n});\n\nlet LangSysRecord = new r.Struct({\n  tag:      new r.String(4),\n  langSys:  new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })\n});\n\nlet Script = new r.Struct({\n  defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n  count:          r.uint16,\n  langSysRecords: new r.Array(LangSysRecord, 'count')\n});\n\nlet ScriptRecord = new r.Struct({\n  tag:    new r.String(4),\n  script: new r.Pointer(r.uint16, Script, { type: 'parent' })\n});\n\nexport let ScriptList = new r.Array(ScriptRecord, r.uint16);\n\n//#######################\n// Features and Lookups #\n//#######################\n\nlet FeatureParams = new r.Struct({\n  version:    r.uint16, // should be set to 0 according OT spec\n  nameID:     r.uint16, //OT spec: UI Name ID or uiLabelNameId\n});\n\nexport let Feature = new r.Struct({\n  featureParams:      new r.Pointer(r.uint16, FeatureParams),\n  lookupCount:        r.uint16,\n  lookupListIndexes:  new r.Array(r.uint16, 'lookupCount')\n});\n\nlet FeatureRecord = new r.Struct({\n  tag:      new r.String(4),\n  feature:  new r.Pointer(r.uint16, Feature, { type: 'parent' })\n});\n\nexport let FeatureList = new r.Array(FeatureRecord, r.uint16);\n\nlet LookupFlags = new r.Struct({\n  markAttachmentType: r.uint8,\n  flags: new r.Bitfield(r.uint8, [\n    'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures',\n    'ignoreMarks', 'useMarkFilteringSet'\n  ])\n});\n\nexport function LookupList(SubTable) {\n  let Lookup = new r.Struct({\n    lookupType:         r.uint16,\n    flags:              LookupFlags,\n    subTableCount:      r.uint16,\n    subTables:          new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n    markFilteringSet:   new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet)\n  });\n\n  return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n}\n\n//#################\n// Coverage Table #\n//#################\n\nlet RangeRecord = new r.Struct({\n  start:              r.uint16,\n  end:                r.uint16,\n  startCoverageIndex: r.uint16\n});\n\nexport let Coverage = new r.VersionedStruct(r.uint16, {\n  1: {\n    glyphCount:   r.uint16,\n    glyphs:       new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    rangeCount:   r.uint16,\n    rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n  }\n});\n\n//#########################\n// Class Definition Table #\n//#########################\n\nlet ClassRangeRecord = new r.Struct({\n  start:  r.uint16,\n  end:    r.uint16,\n  class:  r.uint16\n});\n\nexport let ClassDef = new r.VersionedStruct(r.uint16, {\n  1: { // Class array\n    startGlyph:       r.uint16,\n    glyphCount:       r.uint16,\n    classValueArray:  new r.Array(r.uint16, 'glyphCount')\n  },\n  2: { // Class ranges\n    classRangeCount:  r.uint16,\n    classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n  }\n});\n\n//###############\n// Device Table #\n//###############\n\nexport let Device = new r.Struct({\n  a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex\n  b: r.uint16, // endSize for Device, innerIndex for VariationIndex\n  deltaFormat: r.uint16\n});\n\n//#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nlet LookupRecord = new r.Struct({\n  sequenceIndex:      r.uint16,\n  lookupListIndex:    r.uint16\n});\n\nlet Rule = new r.Struct({\n  glyphCount:     r.uint16,\n  lookupCount:    r.uint16,\n  input:          new r.Array(r.uint16, t => t.glyphCount - 1),\n  lookupRecords:  new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\n\nlet ClassRule = new r.Struct({\n  glyphCount:     r.uint16,\n  lookupCount:    r.uint16,\n  classes:        new r.Array(r.uint16, t => t.glyphCount - 1),\n  lookupRecords:  new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\n\nexport let Context = new r.VersionedStruct(r.uint16, {\n  1: { // Simple context\n    coverage:      new r.Pointer(r.uint16, Coverage),\n    ruleSetCount:  r.uint16,\n    ruleSets:      new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n  },\n  2: { // Class-based context\n    coverage:      new r.Pointer(r.uint16, Coverage),\n    classDef:      new r.Pointer(r.uint16, ClassDef),\n    classSetCnt:   r.uint16,\n    classSet:      new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n  },\n  3: {\n    glyphCount:    r.uint16,\n    lookupCount:   r.uint16,\n    coverages:     new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n});\n\n//######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nlet ChainRule = new r.Struct({\n  backtrackGlyphCount:  r.uint16,\n  backtrack:            new r.Array(r.uint16, 'backtrackGlyphCount'),\n  inputGlyphCount:      r.uint16,\n  input:                new r.Array(r.uint16, t => t.inputGlyphCount - 1),\n  lookaheadGlyphCount:  r.uint16,\n  lookahead:            new r.Array(r.uint16, 'lookaheadGlyphCount'),\n  lookupCount:          r.uint16,\n  lookupRecords:        new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\n\nexport let ChainingContext = new r.VersionedStruct(r.uint16, {\n  1: { // Simple context glyph substitution\n    coverage:           new r.Pointer(r.uint16, Coverage),\n    chainCount:         r.uint16,\n    chainRuleSets:      new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n\n  2: { // Class-based chaining context\n    coverage:           new r.Pointer(r.uint16, Coverage),\n    backtrackClassDef:  new r.Pointer(r.uint16, ClassDef),\n    inputClassDef:      new r.Pointer(r.uint16, ClassDef),\n    lookaheadClassDef:  new r.Pointer(r.uint16, ClassDef),\n    chainCount:         r.uint16,\n    chainClassSet:      new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n\n  3: { // Coverage-based chaining context\n    backtrackGlyphCount:    r.uint16,\n    backtrackCoverage:      new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    inputGlyphCount:        r.uint16,\n    inputCoverage:          new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n    lookaheadGlyphCount:    r.uint16,\n    lookaheadCoverage:      new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    lookupCount:            r.uint16,\n    lookupRecords:          new r.Array(LookupRecord, 'lookupCount')\n  }\n});\n","import r from 'restructure';\n\nlet VerticalOrigin = new r.Struct({\n  glyphIndex:   r.uint16,\n  vertOriginY:  r.int16\n});\n\nexport default new r.Struct({\n  majorVersion:           r.uint16,\n  minorVersion:           r.uint16,\n  defaultVertOriginY:     r.int16,\n  numVertOriginYMetrics:  r.uint16,\n  metrics:                new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\n","import r from 'restructure';\nimport {BigMetrics} from './EBDT';\n\nlet SBitLineMetrics = new r.Struct({\n  ascender: r.int8,\n  descender: r.int8,\n  widthMax: r.uint8,\n  caretSlopeNumerator: r.int8,\n  caretSlopeDenominator: r.int8,\n  caretOffset: r.int8,\n  minOriginSB: r.int8,\n  minAdvanceSB: r.int8,\n  maxBeforeBL: r.int8,\n  minAfterBL: r.int8,\n  pad: new r.Reserved(r.int8, 2)\n});\n\nlet CodeOffsetPair = new r.Struct({\n  glyphCode: r.uint16,\n  offset: r.uint16\n});\n\nlet IndexSubtable = new r.VersionedStruct(r.uint16, {\n  header: {\n    imageFormat: r.uint16,\n    imageDataOffset: r.uint32\n  },\n\n  1: {\n    offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n  },\n\n  2: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics\n  },\n\n  3: {\n    offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n  },\n\n  4: {\n    numGlyphs: r.uint32,\n    glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1)\n  },\n\n  5: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics,\n    numGlyphs: r.uint32,\n    glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n  }\n});\n\nlet IndexSubtableArray = new r.Struct({\n  firstGlyphIndex: r.uint16,\n  lastGlyphIndex: r.uint16,\n  subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\n\nlet BitmapSizeTable = new r.Struct({\n  indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),\n  indexTablesSize: r.uint32,\n  numberOfIndexSubTables: r.uint32,\n  colorRef: r.uint32,\n  hori: SBitLineMetrics,\n  vert: SBitLineMetrics,\n  startGlyphIndex: r.uint16,\n  endGlyphIndex: r.uint16,\n  ppemX: r.uint8,\n  ppemY: r.uint8,\n  bitDepth: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\n\nexport default new r.Struct({\n  version:  r.uint32, // 0x00020000\n  numSizes: r.uint32,\n  sizes:    new r.Array(BitmapSizeTable, 'numSizes')\n});\n","import r from 'restructure';\n\nexport let BigMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  horiBearingX: r.int8,\n  horiBearingY: r.int8,\n  horiAdvance: r.uint8,\n  vertBearingX: r.int8,\n  vertBearingY: r.int8,\n  vertAdvance: r.uint8\n});\n\nexport let SmallMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  bearingX: r.int8,\n  bearingY: r.int8,\n  advance: r.uint8\n});\n\nlet EBDTComponent = new r.Struct({\n  glyph: r.uint16,\n  xOffset: r.int8,\n  yOffset: r.int8\n});\n\nclass ByteAligned {}\n\nclass BitAligned {}\n\nexport let glyph = new r.VersionedStruct('version', {\n  1: {\n    metrics: SmallMetrics,\n    data: ByteAligned\n  },\n\n  2: {\n    metrics: SmallMetrics,\n    data: BitAligned\n  },\n\n  // format 3 is deprecated\n  // format 4 is not supported by Microsoft\n\n  5: {\n    data: BitAligned\n  },\n\n  6: {\n    metrics: BigMetrics,\n    data: ByteAligned\n  },\n\n  7: {\n    metrics: BigMetrics,\n    data: BitAligned\n  },\n\n  8: {\n    metrics: SmallMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n\n  9: {\n    metrics: BigMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n\n  17: {\n    metrics: SmallMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n\n  18: {\n    metrics: BigMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n\n  19: {\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  }\n});\n\n","import r from 'restructure';\n\nlet ImageTable = new r.Struct({\n  ppem: r.uint16,\n  resolution: r.uint16,\n  imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1)\n});\n\n// This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\nexport default new r.Struct({\n  version: r.uint16,\n  flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n  numImgTables: r.uint32,\n  imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\n","import r from 'restructure';\n\nlet LayerRecord = new r.Struct({\n  gid: r.uint16,          // Glyph ID of layer glyph (must be in z-order from bottom to top).\n  paletteIndex: r.uint16  // Index value to use in the appropriate palette. This value must\n});                       // be less than numPaletteEntries in the CPAL table, except for\n                          // the special case noted below. Each palette entry is 16 bits.\n                          // A palette index of 0xFFFF is a special case indicating that\n                          // the text foreground color should be used.\n\nlet BaseGlyphRecord = new r.Struct({\n  gid: r.uint16,             // Glyph ID of reference glyph. This glyph is for reference only\n                             // and is not rendered for color.\n  firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.\n                             // There will be numLayers consecutive entries for this base glyph.\n  numLayers: r.uint16\n});\n\nexport default new r.Struct({\n  version: r.uint16,\n  numBaseGlyphRecords: r.uint16,\n  baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n  layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),\n  numLayerRecords: r.uint16\n});\n","import r from 'restructure';\n\nlet ColorRecord = new r.Struct({\n  blue: r.uint8,\n  green: r.uint8,\n  red: r.uint8,\n  alpha: r.uint8\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n  header: {\n    numPaletteEntries: r.uint16,\n    numPalettes: r.uint16,\n    numColorRecords: r.uint16,\n    colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n    colorRecordIndices: new r.Array(r.uint16, 'numPalettes'),\n  },\n  0: {},\n  1: {\n    offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n    offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n    offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n  }\n});\n","import r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet BaseCoord = new r.VersionedStruct(r.uint16, {\n  1: { // Design units only\n    coordinate:   r.int16 // X or Y value, in design units\n  },\n\n  2: { // Design units plus contour point\n    coordinate:     r.int16,   // X or Y value, in design units\n    referenceGlyph: r.uint16,  // GlyphID of control glyph\n    baseCoordPoint: r.uint16   // Index of contour point on the referenceGlyph\n  },\n\n  3: { // Design units plus Device table\n    coordinate:   r.int16,                         // X or Y value, in design units\n    deviceTable:  new r.Pointer(r.uint16, Device)  // Device table for X or Y value\n  }\n});\n\nlet BaseValues = new r.Struct({\n  defaultIndex:   r.uint16,  // Index of default baseline for this script-same index in the BaseTagList\n  baseCoordCount: r.uint16,\n  baseCoords:     new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\n\nlet FeatMinMaxRecord = new r.Struct({\n  tag:        new r.String(4),  // 4-byte feature identification tag-must match FeatureTag in FeatureList\n  minCoord:   new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL\n  maxCoord:   new r.Pointer(r.uint16, BaseCoord, {type: 'parent'})  // May be NULL\n});\n\nlet MinMax = new r.Struct({\n  minCoord:           new r.Pointer(r.uint16, BaseCoord),  // May be NULL\n  maxCoord:           new r.Pointer(r.uint16, BaseCoord),  // May be NULL\n  featMinMaxCount:    r.uint16,                            // May be 0\n  featMinMaxRecords:  new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nlet BaseLangSysRecord = new r.Struct({\n  tag:    new r.String(4),  // 4-byte language system identification tag\n  minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'})\n});\n\nlet BaseScript = new r.Struct({\n  baseValues:         new r.Pointer(r.uint16, BaseValues), // May be NULL\n  defaultMinMax:      new r.Pointer(r.uint16, MinMax),     // May be NULL\n  baseLangSysCount:   r.uint16,                            // May be 0\n  baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nlet BaseScriptRecord = new r.Struct({\n  tag:      new r.String(4),  // 4-byte script identification tag\n  script:   new r.Pointer(r.uint16, BaseScript, {type: 'parent'})\n});\n\nlet BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);\n\n// Array of 4-byte baseline identification tags-must be in alphabetical order\nlet BaseTagList = new r.Array(new r.String(4), r.uint16);\n\nlet Axis = new r.Struct({\n  baseTagList:    new r.Pointer(r.uint16, BaseTagList),  // May be NULL\n  baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n  header: {\n    horizAxis:    new r.Pointer(r.uint16, Axis),   // May be NULL\n    vertAxis:     new r.Pointer(r.uint16, Axis)    // May be NULL\n  },\n\n  0x00010000: {},\n  0x00010001: {\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\n","import r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet AttachPoint = new r.Array(r.uint16, r.uint16);\nlet AttachList = new r.Struct({\n  coverage:       new r.Pointer(r.uint16, Coverage),\n  glyphCount:     r.uint16,\n  attachPoints:   new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\n\nlet CaretValue = new r.VersionedStruct(r.uint16, {\n  1: { // Design units only\n    coordinate: r.int16\n  },\n\n  2: { // Contour point\n    caretValuePoint: r.uint16\n  },\n\n  3: { // Design units plus Device table\n    coordinate:     r.int16,\n    deviceTable:    new r.Pointer(r.uint16, Device)\n  }\n});\n\nlet LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\n\nlet LigCaretList = new r.Struct({\n  coverage:       new r.Pointer(r.uint16, Coverage),\n  ligGlyphCount:  r.uint16,\n  ligGlyphs:      new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\n\nlet MarkGlyphSetsDef = new r.Struct({\n  markSetTableFormat: r.uint16,\n  markSetCount:       r.uint16,\n  coverage:           new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n  header: {\n    glyphClassDef:      new r.Pointer(r.uint16, ClassDef),\n    attachList:         new r.Pointer(r.uint16, AttachList),\n    ligCaretList:       new r.Pointer(r.uint16, LigCaretList),\n    markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n  },\n\n  0x00010000: {},\n  0x00010002: {\n    markGlyphSetsDef:   new r.Pointer(r.uint16, MarkGlyphSetsDef)\n  },\n  0x00010003: {\n    markGlyphSetsDef:   new r.Pointer(r.uint16, MarkGlyphSetsDef),\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\n","import r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet ValueFormat = new r.Bitfield(r.uint16, [\n  'xPlacement', 'yPlacement',\n  'xAdvance', 'yAdvance',\n  'xPlaDevice', 'yPlaDevice',\n  'xAdvDevice', 'yAdvDevice'\n]);\n\nlet types = {\n  xPlacement: r.int16,\n  yPlacement: r.int16,\n  xAdvance:   r.int16,\n  yAdvance:   r.int16,\n  xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n  yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n  xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n  yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel })\n};\n\nclass ValueRecord {\n  constructor(key = 'valueFormat') {\n    this.key = key;\n  }\n\n  buildStruct(parent) {\n    let struct = parent;\n    while (!struct[this.key] && struct.parent) {\n      struct = struct.parent;\n    }\n\n    if (!struct[this.key]) return;\n\n    let fields = {};\n    fields.rel = () => struct._startOffset;\n\n    let format = struct[this.key];\n    for (let key in format) {\n      if (format[key]) {\n        fields[key] = types[key];\n      }\n    }\n\n    return new r.Struct(fields);\n  }\n\n  size(val, ctx) {\n    return this.buildStruct(ctx).size(val, ctx);\n  }\n\n  decode(stream, parent) {\n    let res = this.buildStruct(parent).decode(stream, parent);\n    delete res.rel;\n    return res;\n  }\n}\n\nlet PairValueRecord = new r.Struct({\n  secondGlyph:    r.uint16,\n  value1:         new ValueRecord('valueFormat1'),\n  value2:         new ValueRecord('valueFormat2')\n});\n\nlet PairSet = new r.Array(PairValueRecord, r.uint16);\n\nlet Class2Record = new r.Struct({\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\n\nlet Anchor = new r.VersionedStruct(r.uint16, {\n  1: { // Design units only\n    xCoordinate:    r.int16,\n    yCoordinate:    r.int16\n  },\n\n  2: { // Design units plus contour point\n    xCoordinate:    r.int16,\n    yCoordinate:    r.int16,\n    anchorPoint:    r.uint16\n  },\n\n  3: { // Design units plus Device tables\n    xCoordinate:    r.int16,\n    yCoordinate:    r.int16,\n    xDeviceTable:   new r.Pointer(r.uint16, Device),\n    yDeviceTable:   new r.Pointer(r.uint16, Device)\n  }\n});\n\nlet EntryExitRecord = new r.Struct({\n  entryAnchor:    new r.Pointer(r.uint16, Anchor, {type: 'parent'}),\n  exitAnchor:     new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkRecord = new r.Struct({\n  class:      r.uint16,\n  markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkArray = new r.Array(MarkRecord, r.uint16);\n\nlet BaseRecord  = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount);\nlet BaseArray   = new r.Array(BaseRecord, r.uint16);\n\nlet ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount);\nlet LigatureAttach  = new r.Array(ComponentRecord, r.uint16);\nlet LigatureArray   = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\n\nlet GPOSLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, { // Single Adjustment\n    1: { // Single positioning value\n      coverage:       new r.Pointer(r.uint16, Coverage),\n      valueFormat:    ValueFormat,\n      value:          new ValueRecord()\n    },\n    2: {\n      coverage:       new r.Pointer(r.uint16, Coverage),\n      valueFormat:    ValueFormat,\n      valueCount:     r.uint16,\n      values:         new r.LazyArray(new ValueRecord(), 'valueCount')\n    }\n  }),\n\n  2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning\n    1: { // Adjustments for glyph pairs\n      coverage:       new r.Pointer(r.uint16, Coverage),\n      valueFormat1:   ValueFormat,\n      valueFormat2:   ValueFormat,\n      pairSetCount:   r.uint16,\n      pairSets:       new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n    },\n\n    2: { // Class pair adjustment\n      coverage:       new r.Pointer(r.uint16, Coverage),\n      valueFormat1:   ValueFormat,\n      valueFormat2:   ValueFormat,\n      classDef1:      new r.Pointer(r.uint16, ClassDef),\n      classDef2:      new r.Pointer(r.uint16, ClassDef),\n      class1Count:    r.uint16,\n      class2Count:    r.uint16,\n      classRecords:   new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n    }\n  }),\n\n  3: { // Cursive Attachment Positioning\n    format:             r.uint16,\n    coverage:           new r.Pointer(r.uint16, Coverage),\n    entryExitCount:     r.uint16,\n    entryExitRecords:   new r.Array(EntryExitRecord, 'entryExitCount')\n  },\n\n  4: { // MarkToBase Attachment Positioning\n    format:             r.uint16,\n    markCoverage:       new r.Pointer(r.uint16, Coverage),\n    baseCoverage:       new r.Pointer(r.uint16, Coverage),\n    classCount:         r.uint16,\n    markArray:          new r.Pointer(r.uint16, MarkArray),\n    baseArray:          new r.Pointer(r.uint16, BaseArray)\n  },\n\n  5: { // MarkToLigature Attachment Positioning\n    format:             r.uint16,\n    markCoverage:       new r.Pointer(r.uint16, Coverage),\n    ligatureCoverage:   new r.Pointer(r.uint16, Coverage),\n    classCount:         r.uint16,\n    markArray:          new r.Pointer(r.uint16, MarkArray),\n    ligatureArray:      new r.Pointer(r.uint16, LigatureArray)\n  },\n\n  6: { // MarkToMark Attachment Positioning\n    format:             r.uint16,\n    mark1Coverage:      new r.Pointer(r.uint16, Coverage),\n    mark2Coverage:      new r.Pointer(r.uint16, Coverage),\n    classCount:         r.uint16,\n    mark1Array:         new r.Pointer(r.uint16, MarkArray),\n    mark2Array:         new r.Pointer(r.uint16, BaseArray)\n  },\n\n  7: Context,          // Contextual positioning\n  8: ChainingContext,  // Chaining contextual positioning\n\n  9: { // Extension Positioning\n    posFormat:   r.uint16,\n    lookupType:  r.uint16,   // cannot also be 9\n    extension:   new r.Pointer(r.uint32, null)\n  }\n});\n\n// Fix circular reference\nGPOSLookup.versions[9].extension.type = GPOSLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList:     new r.Pointer(r.uint16, ScriptList),\n    featureList:    new r.Pointer(r.uint16, FeatureList),\n    lookupList:     new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n  },\n\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n});\n\n// export GPOSLookup for JSTF table\nexport { GPOSLookup };\n","import r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet Sequence = new r.Array(r.uint16, r.uint16);\nlet AlternateSet = Sequence;\n\nlet Ligature = new r.Struct({\n  glyph:      r.uint16,\n  compCount:  r.uint16,\n  components: new r.Array(r.uint16, t => t.compCount - 1)\n});\n\nlet LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\n\nlet GSUBLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {// Single Substitution\n    1: {\n      coverage:       new r.Pointer(r.uint16, Coverage),\n      deltaGlyphID:   r.int16\n    },\n    2: {\n      coverage:       new r.Pointer(r.uint16, Coverage),\n      glyphCount:     r.uint16,\n      substitute:     new r.LazyArray(r.uint16, 'glyphCount')\n    }\n  }),\n\n  2: { // Multiple Substitution\n    substFormat:    r.uint16,\n    coverage:       new r.Pointer(r.uint16, Coverage),\n    count:          r.uint16,\n    sequences:      new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n  },\n\n  3: { // Alternate Substitution\n    substFormat:    r.uint16,\n    coverage:       new r.Pointer(r.uint16, Coverage),\n    count:          r.uint16,\n    alternateSet:   new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n  },\n\n  4: { // Ligature Substitution\n    substFormat:    r.uint16,\n    coverage:       new r.Pointer(r.uint16, Coverage),\n    count:          r.uint16,\n    ligatureSets:   new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n  },\n\n  5: Context,         // Contextual Substitution\n  6: ChainingContext, // Chaining Contextual Substitution\n\n  7: { // Extension Substitution\n    substFormat:   r.uint16,\n    lookupType:    r.uint16,   // cannot also be 7\n    extension:     new r.Pointer(r.uint32, null)\n  },\n\n  8: { // Reverse Chaining Contextual Single Substitution\n    substFormat:            r.uint16,\n    coverage:               new r.Pointer(r.uint16, Coverage),\n    backtrackCoverage:      new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    lookaheadGlyphCount:    r.uint16,\n    lookaheadCoverage:      new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    glyphCount:             r.uint16,\n    substitutes:            new r.Array(r.uint16, 'glyphCount')\n  }\n});\n\n// Fix circular reference\nGSUBLookup.versions[7].extension.type = GSUBLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList:     new r.Pointer(r.uint16, ScriptList),\n    featureList:    new r.Pointer(r.uint16, FeatureList),\n    lookupList:     new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n  },\n\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n});\n","import r from 'restructure';\nimport { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype';\nimport { GPOSLookup } from './GPOS';\n\nlet JstfGSUBModList = new r.Array(r.uint16, r.uint16);\n\nlet JstfPriority = new r.Struct({\n  shrinkageEnableGSUB:    new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGSUB:   new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageEnableGPOS:    new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGPOS:   new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageJstfMax:       new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n  extensionEnableGSUB:    new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGSUB:   new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionEnableGPOS:    new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGPOS:   new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionJstfMax:       new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\n\nlet JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\n\nlet JstfLangSysRecord = new r.Struct({\n  tag:         new r.String(4),\n  jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\n\nlet JstfScript = new r.Struct({\n  extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length\n  defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n  langSysCount:   r.uint16,\n  langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\n\nlet JstfScriptRecord = new r.Struct({\n  tag:    new r.String(4),\n  script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'})\n});\n\nexport default new r.Struct({\n  version:     r.uint32,  // should be 0x00010000\n  scriptCount: r.uint16,\n  scriptList:  new r.Array(JstfScriptRecord, 'scriptCount')\n});\n","import r from 'restructure';\nimport { resolveLength } from 'restructure/src/utils.js';\nimport { ItemVariationStore } from './variations';\n\n// TODO: add this to restructure\nclass VariableSizeNumber {\n  constructor(size) {\n    this._size = size;\n  }\n\n  decode(stream, parent) {\n    switch (this.size(0, parent)) {\n      case 1: return stream.readUInt8();\n      case 2: return stream.readUInt16BE();\n      case 3: return stream.readUInt24BE();\n      case 4: return stream.readUInt32BE();\n    }\n  }\n\n  size(val, parent) {\n    return resolveLength(this._size, null, parent);\n  }\n}\n\nlet MapDataEntry = new r.Struct({\n  entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),\n  outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),\n  innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)\n});\n\nlet DeltaSetIndexMap = new r.Struct({\n  entryFormat: r.uint16,\n  mapCount: r.uint16,\n  mapData: new r.Array(MapDataEntry, 'mapCount')\n});\n\nexport default new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n  advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\n","import r from 'restructure';\n\nlet Signature = new r.Struct({\n  format: r.uint32,\n  length: r.uint32,\n  offset: r.uint32\n});\n\nlet SignatureBlock = new r.Struct({\n  reserved:       new r.Reserved(r.uint16, 2),\n  cbSignature:    r.uint32,  // Length (in bytes) of the PKCS#7 packet in pbSignature\n  signature:      new r.Buffer('cbSignature')\n});\n\nexport default new r.Struct({\n  ulVersion:       r.uint32,  // Version number of the DSIG table (0x00000001)\n  usNumSigs:       r.uint16,  // Number of signatures in the table\n  usFlag:          r.uint16,  // Permission flags\n  signatures:      new r.Array(Signature, 'usNumSigs'),\n  signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\n","import r from 'restructure';\n\nlet GaspRange = new r.Struct({\n  rangeMaxPPEM:       r.uint16,                  // Upper limit of range, in ppem\n  rangeGaspBehavior:  new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior\n    'grayscale', 'gridfit',\n    'symmetricSmoothing', 'symmetricGridfit'     // only in version 1, for ClearType\n  ])\n});\n\nexport default new r.Struct({\n  version:    r.uint16,  // set to 0\n  numRanges:  r.uint16,\n  gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n","import r from 'restructure';\n\nlet DeviceRecord = new r.Struct({\n  pixelSize:      r.uint8,\n  maximumWidth:   r.uint8,\n  widths:         new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs)\n});\n\n// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\nexport default new r.Struct({\n  version:            r.uint16,\n  numRecords:         r.int16,\n  sizeDeviceRecord:   r.int32,\n  records:            new r.Array(DeviceRecord, 'numRecords')\n});\n","import r from 'restructure';\n\nlet KernPair = new r.Struct({\n  left:   r.uint16,\n  right:  r.uint16,\n  value:  r.int16\n});\n\nlet ClassTable = new r.Struct({\n  firstGlyph: r.uint16,\n  nGlyphs: r.uint16,\n  offsets: new r.Array(r.uint16, 'nGlyphs'),\n  max: t => t.offsets.length && Math.max.apply(Math, t.offsets)\n});\n\nlet Kern2Array = new r.Struct({\n  off: t => t._startOffset - t.parent.parent._startOffset,\n  len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2),\n  values: new r.LazyArray(r.int16, 'len')\n});\n\nlet KernSubtable = new r.VersionedStruct('format', {\n  0: {\n    nPairs:         r.uint16,\n    searchRange:    r.uint16,\n    entrySelector:  r.uint16,\n    rangeShift:     r.uint16,\n    pairs:          new r.Array(KernPair, 'nPairs')\n  },\n\n  2: {\n    rowWidth:   r.uint16,\n    leftTable:  new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n    rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n    array:      new r.Pointer(r.uint16, Kern2Array, {type: 'parent'})\n  },\n\n  3: {\n    glyphCount:       r.uint16,\n    kernValueCount:   r.uint8,\n    leftClassCount:   r.uint8,\n    rightClassCount:  r.uint8,\n    flags:            r.uint8,\n    kernValue:        new r.Array(r.int16, 'kernValueCount'),\n    leftClass:        new r.Array(r.uint8, 'glyphCount'),\n    rightClass:       new r.Array(r.uint8, 'glyphCount'),\n    kernIndex:        new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount)\n  }\n});\n\nlet KernTable = new r.VersionedStruct('version', {\n  0: { // Microsoft uses this format\n    subVersion: r.uint16,  // Microsoft has an extra sub-table version number\n    length:     r.uint16,  // Length of the subtable, in bytes\n    format:     r.uint8,   // Format of subtable\n    coverage:   new r.Bitfield(r.uint8, [\n      'horizontal',    // 1 if table has horizontal data, 0 if vertical\n      'minimum',       // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n      'crossStream',   // If set to 1, kerning is perpendicular to the flow of the text\n      'override'      // If set to 1 the value in this table replaces the accumulated value\n    ]),\n    subtable:   KernSubtable,\n    padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n  },\n  1: { // Apple uses this format\n    length:     r.uint32,\n    coverage:   new r.Bitfield(r.uint8, [\n      null, null, null, null, null,\n      'variation',     // Set if table has variation kerning values\n      'crossStream',   // Set if table has cross-stream kerning values\n      'vertical'      // Set if table has vertical kerning values\n    ]),\n    format:     r.uint8,\n    tupleIndex: r.uint16,\n    subtable:   KernSubtable,\n    padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n  }\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n  0: { // Microsoft Version\n    nTables:    r.uint16,\n    tables:     new r.Array(KernTable, 'nTables')\n  },\n\n  1: { // Apple Version\n    reserved:   new r.Reserved(r.uint16), // the other half of the version number\n    nTables:    r.uint32,\n    tables:     new r.Array(KernTable, 'nTables')\n  }\n});\n","import r from 'restructure';\n\n// Linear Threshold table\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\nexport default new r.Struct({\n  version:    r.uint16,\n  numGlyphs:  r.uint16,\n  yPels:      new r.Array(r.uint8, 'numGlyphs')\n});\n","import r from 'restructure';\n\n// PCL 5 Table\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\nexport default new r.Struct({\n  version:              r.uint16,\n  fontNumber:           r.uint32,\n  pitch:                r.uint16,\n  xHeight:              r.uint16,\n  style:                r.uint16,\n  typeFamily:           r.uint16,\n  capHeight:            r.uint16,\n  symbolSet:            r.uint16,\n  typeface:             new r.String(16),\n  characterComplement:  new r.String(8),\n  fileName:             new r.String(6),\n  strokeWeight:         new r.String(1),\n  widthType:            new r.String(1),\n  serifStyle:           r.uint8,\n  reserved:             new r.Reserved(r.uint8)\n});\n","import r from 'restructure';\n\n// VDMX tables contain ascender/descender overrides for certain (usually small)\n// sizes. This is needed in order to match font metrics on Windows.\n\nlet Ratio = new r.Struct({\n  bCharSet:       r.uint8,                             // Character set\n  xRatio:         r.uint8,                             // Value to use for x-Ratio\n  yStartRatio:    r.uint8,                             // Starting y-Ratio value\n  yEndRatio:      r.uint8                              // Ending y-Ratio value\n});\n\nlet vTable = new r.Struct({\n  yPelHeight:     r.uint16,                            // yPelHeight to which values apply\n  yMax:           r.int16,                             // Maximum value (in pels) for this yPelHeight\n  yMin:           r.int16                              // Minimum value (in pels) for this yPelHeight\n});\n\nlet VdmxGroup = new r.Struct({\n  recs:           r.uint16,                            // Number of height records in this group\n  startsz:        r.uint8,                             // Starting yPelHeight\n  endsz:          r.uint8,                             // Ending yPelHeight\n  entries:        new r.Array(vTable, 'recs')          // The VDMX records\n});\n\nexport default new r.Struct({\n  version:        r.uint16,                            // Version number (0 or 1)\n  numRecs:        r.uint16,                            // Number of VDMX groups present\n  numRatios:      r.uint16,                            // Number of aspect ratio groupings\n  ratioRanges:    new r.Array(Ratio, 'numRatios'),     // Ratio ranges\n  offsets:        new r.Array(r.uint16, 'numRatios'),  // Offset to the VDMX group for this ratio range\n  groups:         new r.Array(VdmxGroup, 'numRecs')    // The actual VDMX groupings\n});\n","import r from 'restructure';\n\n// Vertical Header Table\nexport default new r.Struct({\n  version:                r.uint16,  // Version number of the Vertical Header Table\n  ascent:                 r.int16,   // The vertical typographic ascender for this font\n  descent:                r.int16,   // The vertical typographic descender for this font\n  lineGap:                r.int16,   // The vertical typographic line gap for this font\n  advanceHeightMax:       r.int16,   // The maximum advance height measurement found in the font\n  minTopSideBearing:      r.int16,   // The minimum top side bearing measurement found in the font\n  minBottomSideBearing:   r.int16,   // The minimum bottom side bearing measurement found in the font\n  yMaxExtent:             r.int16,\n  caretSlopeRise:         r.int16,   // Caret slope (rise/run)\n  caretSlopeRun:          r.int16,\n  caretOffset:            r.int16,   // Set value equal to 0 for nonslanted fonts\n  reserved:               new r.Reserved(r.int16, 4),\n  metricDataFormat:       r.int16,   // Set to 0\n  numberOfMetrics:        r.uint16   // Number of advance heights in the Vertical Metrics table\n});\n","import r from 'restructure';\n\nlet VmtxEntry = new r.Struct({\n  advance: r.uint16,  // The advance height of the glyph\n  bearing: r.int16    // The top sidebearing of the glyph\n});\n\n// Vertical Metrics Table\nexport default new r.Struct({\n  metrics:  new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics),\n  bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics)\n});\n","import r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\n\nlet Correspondence = new r.Struct({\n  fromCoord: shortFrac,\n  toCoord: shortFrac\n});\n\nlet Segment = new r.Struct({\n  pairCount: r.uint16,\n  correspondence: new r.Array(Correspondence, 'pairCount')\n});\n\nexport default new r.Struct({\n  version: r.fixed32,\n  axisCount: r.uint32,\n  segment: new r.Array(Segment, 'axisCount')\n});\n","import r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet BslnSubtable = new r.VersionedStruct('format', {\n  0: { // Distance-based, no mapping\n    deltas: new r.Array(r.int16, 32)\n  },\n\n  1: { // Distance-based, with mapping\n    deltas: new r.Array(r.int16, 32),\n    mappingData: new LookupTable(r.uint16)\n  },\n\n  2: { // Control point-based, no mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32)\n  },\n\n  3: { // Control point-based, with mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32),\n    mappingData: new LookupTable(r.uint16)\n  }\n});\n\nexport default new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  defaultBaseline: r.uint16,\n  subtable: BslnSubtable\n});\n","import r from 'restructure';\n\nclass UnboundedArrayAccessor {\n  constructor(type, stream, parent) {\n    this.type = type;\n    this.stream = stream;\n    this.parent = parent;\n    this.base = this.stream.pos;\n    this._items = [];\n  }\n\n  getItem(index) {\n    if (this._items[index] == null) {\n      let pos = this.stream.pos;\n      this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n      this._items[index] = this.type.decode(this.stream, this.parent);\n      this.stream.pos = pos;\n    }\n\n    return this._items[index];\n  }\n\n  inspect() {\n    return `[UnboundedArray ${this.type.constructor.name}]`;\n  }\n}\n\nexport class UnboundedArray extends r.Array {\n  constructor(type) {\n    super(type, 0);\n  }\n\n  decode(stream, parent) {\n    return new UnboundedArrayAccessor(this.type, stream, parent);\n  }\n}\n\nexport let LookupTable = function(ValueType = r.uint16) {\n  // Helper class that makes internal structures invisible to pointers\n  class Shadow {\n    constructor(type) {\n      this.type = type;\n    }\n\n    decode(stream, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.decode(stream, ctx);\n    }\n\n    size(val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.size(val, ctx);\n    }\n\n    encode(stream, val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.encode(stream, val, ctx);\n    }\n  }\n\n  ValueType = new Shadow(ValueType);\n\n  let BinarySearchHeader = new r.Struct({\n    unitSize: r.uint16,\n    nUnits: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16\n  });\n\n  let LookupSegmentSingle = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    value: ValueType\n  });\n\n  let LookupSegmentArray = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'})\n  });\n\n  let LookupSingle = new r.Struct({\n    glyph: r.uint16,\n    value: ValueType\n  });\n\n  return new r.VersionedStruct(r.uint16, {\n    0: {\n      values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n    },\n    2: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits)\n    },\n    4: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits)\n    },\n    6: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits)\n    },\n    8: {\n      firstGlyph: r.uint16,\n      count: r.uint16,\n      values: new r.Array(ValueType, 'count')\n    }\n  });\n};\n\nexport function StateTable(entryData = {}, lookupType = r.uint16) {\n  let entry = Object.assign({\n    newState: r.uint16,\n    flags: r.uint16\n  }, entryData);\n\n  let Entry = new r.Struct(entry);\n  let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses));\n\n  let StateHeader = new r.Struct({\n    nClasses: r.uint32,\n    classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n    stateArray: new r.Pointer(r.uint32, StateArray),\n    entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n  });\n\n  return StateHeader;\n}\n\n// This is the old version of the StateTable structure\nexport function StateTable1(entryData = {}, lookupType = r.uint16) {\n  let ClassLookupTable = new r.Struct({\n    version() { return 8; }, // simulate LookupTable\n    firstGlyph: r.uint16,\n    values: new r.Array(r.uint8, r.uint16)\n  });\n\n  let entry = Object.assign({\n    newStateOffset: r.uint16,\n    // convert offset to stateArray index\n    newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses,\n    flags: r.uint16\n  }, entryData);\n\n  let Entry = new r.Struct(entry);\n  let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses));\n\n  let StateHeader1 = new r.Struct({\n    nClasses: r.uint16,\n    classTable: new r.Pointer(r.uint16, ClassLookupTable),\n    stateArray: new r.Pointer(r.uint16, StateArray),\n    entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n  });\n\n  return StateHeader1;\n}\n","import r from 'restructure';\n\nlet Setting = new r.Struct({\n  setting: r.uint16,\n  nameIndex: r.int16,\n  name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nlet FeatureName = new r.Struct({\n  feature: r.uint16,\n  nSettings: r.uint16,\n  settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),\n  featureFlags: new r.Bitfield(r.uint8, [\n    null, null, null, null, null, null,\n    'hasDefault', 'exclusive'\n  ]),\n  defaultSetting: r.uint8,\n  nameIndex: r.int16,\n  name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nexport default new r.Struct({\n  version: r.fixed32,\n  featureNameCount: r.uint16,\n  reserved1: new r.Reserved(r.uint16),\n  reserved2: new r.Reserved(r.uint32),\n  featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\n","import r from 'restructure';\n\nlet Axis = new r.Struct({\n  axisTag: new r.String(4),\n  minValue: r.fixed32,\n  defaultValue: r.fixed32,\n  maxValue: r.fixed32,\n  flags: r.uint16,\n  nameID: r.uint16,\n  name: t => t.parent.parent.name.records.fontFeatures[t.nameID]\n});\n\nlet Instance = new r.Struct({\n  nameID: r.uint16,\n  name: t => t.parent.parent.name.records.fontFeatures[t.nameID],\n  flags: r.uint16,\n  coord: new r.Array(r.fixed32, t => t.parent.axisCount),\n  postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0)\n});\n\nexport default new r.Struct({\n  version: r.fixed32,\n  offsetToData: r.uint16,\n  countSizePairs: r.uint16,\n  axisCount: r.uint16,\n  axisSize: r.uint16,\n  instanceCount: r.uint16,\n  instanceSize: r.uint16,\n  axis: new r.Array(Axis, 'axisCount'),\n  instance: new r.Array(Instance, 'instanceCount')\n});\n","import r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\nclass Offset {\n  static decode(stream, parent) {\n    // In short format, offsets are multiplied by 2.\n    // This doesn't seem to be documented by Apple, but it\n    // is implemented this way in Freetype.\n    return parent.flags\n      ? stream.readUInt32BE()\n      : stream.readUInt16BE() * 2;\n  }\n}\n\nlet gvar = new r.Struct({\n  version: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  axisCount: r.uint16,\n  globalCoordCount: r.uint16,\n  globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')),\n  glyphCount: r.uint16,\n  flags: r.uint16,\n  offsetToData: r.uint32,\n  offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1)\n});\n\nexport default gvar;\n","import r from 'restructure';\nimport { LookupTable, StateTable1 } from './aat';\n\nlet ClassTable = new r.Struct({\n  length: r.uint16,\n  coverage: r.uint16,\n  subFeatureFlags: r.uint32,\n  stateTable: new StateTable1\n});\n\nlet WidthDeltaRecord = new r.Struct({\n  justClass: r.uint32,\n  beforeGrowLimit: r.fixed32,\n  beforeShrinkLimit: r.fixed32,\n  afterGrowLimit: r.fixed32,\n  afterShrinkLimit: r.fixed32,\n  growFlags: r.uint16,\n  shrinkFlags: r.uint16\n});\n\nlet WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\n\nlet ActionData = new r.VersionedStruct('actionType', {\n  0: { // Decomposition action\n    lowerLimit: r.fixed32,\n    upperLimit: r.fixed32,\n    order: r.uint16,\n    glyphs: new r.Array(r.uint16, r.uint16)\n  },\n\n  1: { // Unconditional add glyph action\n    addGlyph: r.uint16\n  },\n\n  2: { // Conditional add glyph action\n    substThreshold: r.fixed32,\n    addGlyph: r.uint16,\n    substGlyph: r.uint16\n  },\n\n  3: {}, // Stretch glyph action (no data, not supported by CoreText)\n\n  4: { // Ductile glyph action (not supported by CoreText)\n    variationAxis: r.uint32,\n    minimumLimit: r.fixed32,\n    noStretchValue: r.fixed32,\n    maximumLimit: r.fixed32\n  },\n\n  5: { // Repeated add glyph action\n    flags: r.uint16,\n    glyph: r.uint16\n  }\n});\n\nlet Action = new r.Struct({\n  actionClass: r.uint16,\n  actionType: r.uint16,\n  actionLength: r.uint32,\n  actionData: ActionData,\n  padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset)\n});\n\nlet PostcompensationAction = new r.Array(Action, r.uint32);\nlet PostCompensationTable = new r.Struct({\n  lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\n\nlet JustificationTable = new r.Struct({\n  classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),\n  wdcOffset: r.uint16,\n  postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),\n  widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset }))\n});\n\nexport default new r.Struct({\n  version: r.uint32,\n  format: r.uint16,\n  horizontal: new r.Pointer(r.uint16, JustificationTable),\n  vertical: new r.Pointer(r.uint16, JustificationTable)\n});\n","import r from 'restructure';\nimport { UnboundedArray, LookupTable, StateTable } from './aat';\n\nlet LigatureData = {\n  action: r.uint16\n};\n\nlet ContextualData = {\n  markIndex: r.uint16,\n  currentIndex: r.uint16\n};\n\nlet InsertionData = {\n  currentInsertIndex: r.uint16,\n  markedInsertIndex: r.uint16\n};\n\nlet SubstitutionTable = new r.Struct({\n  items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))\n});\n\nlet SubtableData = new r.VersionedStruct('type', {\n  0: { // Indic Rearrangement Subtable\n    stateTable: new StateTable\n  },\n\n  1: { // Contextual Glyph Substitution Subtable\n    stateTable: new StateTable(ContextualData),\n    substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n  },\n\n  2: { // Ligature subtable\n    stateTable: new StateTable(LigatureData),\n    ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n    components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n    ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  },\n\n  4: { // Non-contextual Glyph Substitution Subtable\n    lookupTable: new LookupTable\n  },\n\n  5: { // Glyph Insertion Subtable\n    stateTable: new StateTable(InsertionData),\n    insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  }\n});\n\nlet Subtable = new r.Struct({\n  length: r.uint32,\n  coverage: r.uint24,\n  type: r.uint8,\n  subFeatureFlags: r.uint32,\n  table: SubtableData,\n  padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n});\n\nlet FeatureEntry = new r.Struct({\n  featureType:    r.uint16,\n  featureSetting: r.uint16,\n  enableFlags:    r.uint32,\n  disableFlags:   r.uint32\n});\n\nlet MorxChain = new r.Struct({\n  defaultFlags:     r.uint32,\n  chainLength:      r.uint32,\n  nFeatureEntries:  r.uint32,\n  nSubtables:       r.uint32,\n  features:         new r.Array(FeatureEntry, 'nFeatureEntries'),\n  subtables:        new r.Array(Subtable, 'nSubtables')\n});\n\nexport default new r.Struct({\n  version:  r.uint16,\n  unused:   new r.Reserved(r.uint16),\n  nChains:  r.uint32,\n  chains:   new r.Array(MorxChain, 'nChains')\n});\n","import r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet OpticalBounds = new r.Struct({\n  left: r.int16,\n  top: r.int16,\n  right: r.int16,\n  bottom: r.int16\n});\n\nexport default new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  lookupTable: new LookupTable(OpticalBounds)\n});\n","import { binarySearch } from './utils';\nimport { getEncoding } from './encodings';\nimport { cache } from './decorators';\nimport { range } from './utils';\nimport iconv from '../iconv-lite.cjs';\n\nexport default class CmapProcessor {\n  constructor(cmapTable) {\n    // Attempt to find a Unicode cmap first\n    this.encoding = null;\n    this.cmap = this.findSubtable(cmapTable, [\n      // 32-bit subtables\n      [3, 10],\n      [0, 6],\n      [0, 4],\n\n      // 16-bit subtables\n      [3, 1],\n      [0, 3],\n      [0, 2],\n      [0, 1],\n      [0, 0]\n    ]);\n\n    // If not unicode cmap was found, and iconv-lite is installed,\n    // take the first table with a supported encoding.\n    if (!this.cmap && iconv) {\n      for (let cmap of cmapTable.tables) {\n        let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n        if (iconv.encodingExists(encoding)) {\n          this.cmap = cmap.table;\n          this.encoding = encoding;\n        }\n      }\n    }\n\n    if (!this.cmap) {\n      throw new Error(\"Could not find a supported cmap table\");\n    }\n\n    this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n    if (this.uvs && this.uvs.version !== 14) {\n      this.uvs = null;\n    }\n  }\n\n  findSubtable(cmapTable, pairs) {\n    for (let [platformID, encodingID] of pairs) {\n      for (let cmap of cmapTable.tables) {\n        if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n          return cmap.table;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  lookup(codepoint, variationSelector) {\n    // If there is no Unicode cmap in this font, we need to re-encode\n    // the codepoint in the encoding that the cmap supports.\n    if (this.encoding) {\n      let buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\n      codepoint = 0;\n      for (let i = 0; i < buf.length; i++) {\n        codepoint = (codepoint << 8) | buf[i];\n      }\n\n      // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n    } else if (variationSelector) {\n      let gid = this.getVariationSelector(codepoint, variationSelector);\n      if (gid) {\n        return gid;\n      }\n    }\n\n    let cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return cmap.codeMap.get(codepoint) || 0;\n\n      case 4: {\n        let min = 0;\n        let max = cmap.segCount - 1;\n        while (min <= max) {\n          let mid = (min + max) >> 1;\n\n          if (codepoint < cmap.startCode.get(mid)) {\n            max = mid - 1;\n          } else if (codepoint > cmap.endCode.get(mid)) {\n            min = mid + 1;\n          } else {\n            let rangeOffset = cmap.idRangeOffset.get(mid);\n            let gid;\n\n            if (rangeOffset === 0) {\n              gid = codepoint + cmap.idDelta.get(mid);\n            } else {\n              let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n              gid = cmap.glyphIndexArray.get(index) || 0;\n              if (gid !== 0) {\n                gid += cmap.idDelta.get(mid);\n              }\n            }\n\n            return gid & 0xffff;\n          }\n        }\n\n        return 0;\n      }\n\n      case 8:\n        throw new Error('TODO: cmap format 8');\n\n      case 6:\n      case 10:\n        return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n\n      case 12:\n      case 13: {\n        let min = 0;\n        let max = cmap.nGroups - 1;\n        while (min <= max) {\n          let mid = (min + max) >> 1;\n          let group = cmap.groups.get(mid);\n\n          if (codepoint < group.startCharCode) {\n            max = mid - 1;\n          } else if (codepoint > group.endCharCode) {\n            min = mid + 1;\n          } else {\n            if (cmap.version === 12) {\n              return group.glyphID + (codepoint - group.startCharCode);\n            } else {\n              return group.glyphID;\n            }\n          }\n        }\n\n        return 0;\n      }\n\n      case 14:\n        throw new Error('TODO: cmap format 14');\n\n      default:\n        throw new Error(`Unknown cmap format ${cmap.version}`);\n    }\n  }\n\n  getVariationSelector(codepoint, variationSelector) {\n    if (!this.uvs) {\n      return 0;\n    }\n\n    let selectors = this.uvs.varSelectors.toArray();\n    let i = binarySearch(selectors, x => variationSelector - x.varSelector);\n    let sel = selectors[i];\n\n    if (i !== -1 && sel.defaultUVS) {\n      i = binarySearch(sel.defaultUVS, x =>\n        codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0\n      );\n    }\n\n    if (i !== -1 && sel.nonDefaultUVS) {\n      i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue);\n      if (i !== -1) {\n        return sel.nonDefaultUVS[i].glyphID;\n      }\n    }\n\n    return 0;\n  }\n\n  @cache\n  getCharacterSet() {\n    let cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return range(0, cmap.codeMap.length);\n\n      case 4: {\n        let res = [];\n        let endCodes = cmap.endCode.toArray();\n        for (let i = 0; i < endCodes.length; i++) {\n          let tail = endCodes[i] + 1;\n          let start = cmap.startCode.get(i);\n          res.push(...range(start, tail));\n        }\n\n        return res;\n      }\n\n      case 8:\n        throw new Error('TODO: cmap format 8');\n\n      case 6:\n      case 10:\n        return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n\n      case 12:\n      case 13: {\n        let res = [];\n        for (let group of cmap.groups.toArray()) {\n          res.push(...range(group.startCharCode, group.endCharCode + 1));\n        }\n\n        return res;\n      }\n\n      case 14:\n        throw new Error('TODO: cmap format 14');\n\n      default:\n        throw new Error(`Unknown cmap format ${cmap.version}`);\n    }\n  }\n\n  @cache\n  codePointsForGlyph(gid) {\n    let cmap = this.cmap;\n    switch (cmap.version) {\n      case 0: {\n        let res = [];\n        for (let i = 0; i < 256; i++) {\n          if (cmap.codeMap.get(i) === gid) {\n            res.push(i);\n          }\n        }\n\n        return res;\n      }\n\n      case 4: {\n        let res = [];\n        for (let i = 0; i < cmap.segCount; i++) {\n          let end = cmap.endCode.get(i);\n          let start = cmap.startCode.get(i);\n          let rangeOffset = cmap.idRangeOffset.get(i);\n          let delta = cmap.idDelta.get(i);\n\n          for (var c = start; c <= end; c++) {\n            let g = 0;\n            if (rangeOffset === 0) {\n              g = c + delta;\n            } else {\n              let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);\n              g = cmap.glyphIndexArray.get(index) || 0;\n              if (g !== 0) {\n                g += delta;\n              }\n            }\n\n            if (g === gid) {\n              res.push(c);\n            }\n          }\n        }\n\n        return res;\n      }\n\n      case 12: {\n        let res = [];\n        for (let group of cmap.groups.toArray()) {\n          if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n            res.push(group.startCharCode + (gid - group.glyphID));\n          }\n        }\n\n        return res;\n      }\n\n      case 13: {\n        let res = [];\n        for (let group of cmap.groups.toArray()) {\n          if (gid === group.glyphID) {\n            res.push(...range(group.startCharCode, group.endCharCode + 1));\n          }\n        }\n\n        return res;\n      }\n\n      default:\n        throw new Error(`Unknown cmap format ${cmap.version}`);\n    }\n  }\n}\n","export function binarySearch(arr, cmp) {\n  let min = 0;\n  let max = arr.length - 1;\n  while (min <= max) {\n    let mid = (min + max) >> 1;\n    let res = cmp(arr[mid]);\n\n    if (res < 0) {\n      max = mid - 1;\n    } else if (res > 0) {\n      min = mid + 1;\n    } else {\n      return mid;\n    }\n  }\n\n  return -1;\n}\n\nexport function range(index, end) {\n  let range = [];\n  while (index < end) {\n    range.push(index++);\n  }\n  return range;\n}\n","import KernProcessor from './KernProcessor';\nimport UnicodeLayoutEngine from './UnicodeLayoutEngine';\nimport GlyphRun from './GlyphRun';\nimport GlyphPosition from './GlyphPosition';\nimport * as Script from './Script';\nimport unicode from 'unicode-properties';\nimport AATLayoutEngine from '../aat/AATLayoutEngine';\nimport OTLayoutEngine from '../opentype/OTLayoutEngine';\n\nexport default class LayoutEngine {\n  constructor(font) {\n    this.font = font;\n    this.unicodeLayoutEngine = null;\n    this.kernProcessor = null;\n\n    // Choose an advanced layout engine. We try the AAT morx table first since more\n    // scripts are currently supported because the shaping logic is built into the font.\n    if (this.font.morx) {\n      this.engine = new AATLayoutEngine(this.font);\n\n    } else if (this.font.GSUB || this.font.GPOS) {\n      this.engine = new OTLayoutEngine(this.font);\n    }\n  }\n\n  layout(string, features, script, language, direction) {\n    // Make the features parameter optional\n    if (typeof features === 'string') {\n      direction = language;\n      language = script;\n      script = features;\n      features = [];\n    }\n\n    // Map string to glyphs if needed\n    if (typeof string === 'string') {\n      // Attempt to detect the script from the string if not provided.\n      if (script == null) {\n        script = Script.forString(string);\n      }\n\n      var glyphs = this.font.glyphsForString(string);\n    } else {\n      // Attempt to detect the script from the glyph code points if not provided.\n      if (script == null) {\n        let codePoints = [];\n        for (let glyph of string) {\n          codePoints.push(...glyph.codePoints);\n        }\n\n        script = Script.forCodePoints(codePoints);\n      }\n\n      var glyphs = string;\n    }\n\n    let glyphRun = new GlyphRun(glyphs, features, script, language, direction);\n\n    // Return early if there are no glyphs\n    if (glyphs.length === 0) {\n      glyphRun.positions = [];\n      return glyphRun;\n    }\n\n    // Setup the advanced layout engine\n    if (this.engine && this.engine.setup) {\n      this.engine.setup(glyphRun);\n    }\n\n    // Substitute and position the glyphs\n    this.substitute(glyphRun);\n    this.position(glyphRun);\n\n    this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);\n\n    // Let the layout engine clean up any state it might have\n    if (this.engine && this.engine.cleanup) {\n      this.engine.cleanup();\n    }\n\n    return glyphRun;\n  }\n\n  substitute(glyphRun) {\n    // Call the advanced layout engine to make substitutions\n    if (this.engine && this.engine.substitute) {\n      this.engine.substitute(glyphRun);\n    }\n  }\n\n  position(glyphRun) {\n    // Get initial glyph positions\n    glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth));\n    let positioned = null;\n\n    // Call the advanced layout engine. Returns the features applied.\n    if (this.engine && this.engine.position) {\n      positioned = this.engine.position(glyphRun);\n    }\n\n    // if there is no GPOS table, use unicode properties to position marks.\n    if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n      if (!this.unicodeLayoutEngine) {\n        this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n      }\n\n      this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n    }\n\n    // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n    if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n      if (!this.kernProcessor) {\n        this.kernProcessor = new KernProcessor(this.font);\n      }\n\n      this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n      glyphRun.features.kern = true;\n    }\n  }\n\n  hideDefaultIgnorables(glyphs, positions) {\n    let space = this.font.glyphForCodePoint(0x20);\n    for (let i = 0; i < glyphs.length; i++) {\n      if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n        glyphs[i] = space;\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  }\n\n  isDefaultIgnorable(ch) {\n    // From DerivedCoreProperties.txt in the Unicode database,\n    // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n    // Harfbuzz and Uniscribe do.\n    let plane = ch >> 16;\n    if (plane === 0) {\n      // BMP\n      switch (ch >> 8) {\n      \tcase 0x00: return ch === 0x00AD;\n      \tcase 0x03: return ch === 0x034F;\n      \tcase 0x06: return ch === 0x061C;\n      \tcase 0x17: return 0x17B4 <= ch && ch <= 0x17B5;\n      \tcase 0x18: return 0x180B <= ch && ch <= 0x180E;\n      \tcase 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F);\n      \tcase 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF;\n      \tcase 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8;\n      \tdefault:   return false;\n      }\n    } else {\n      // Other planes\n      switch (plane) {\n      \tcase 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A);\n      \tcase 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF;\n      \tdefault:   return false;\n      }\n    }\n  }\n\n  getAvailableFeatures(script, language) {\n    let features = [];\n\n    if (this.engine) {\n      features.push(...this.engine.getAvailableFeatures(script, language));\n    }\n\n    if (this.font.kern && features.indexOf('kern') === -1) {\n      features.push('kern');\n    }\n\n    return features;\n  }\n\n  stringsForGlyph(gid) {\n    let result = new Set;\n\n    let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n    for (let codePoint of codePoints) {\n      result.add(String.fromCodePoint(codePoint));\n    }\n\n    if (this.engine && this.engine.stringsForGlyph) {\n      for (let string of this.engine.stringsForGlyph(gid)) {\n        result.add(string);\n      }\n    }\n\n    return Array.from(result);\n  }\n}\n","import {binarySearch} from '../utils';\n\nexport default class KernProcessor {\n  constructor(font) {\n    this.kern = font.kern;\n  }\n\n  process(glyphs, positions) {\n    for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n      let left = glyphs[glyphIndex].id;\n      let right = glyphs[glyphIndex + 1].id;\n      positions[glyphIndex].xAdvance += this.getKerning(left, right);\n    }\n  }\n\n  getKerning(left, right) {\n    let res = 0;\n\n    for (let table of this.kern.tables) {\n      if (table.coverage.crossStream) {\n        continue;\n      }\n\n      switch (table.version) {\n        case 0:\n          if (!table.coverage.horizontal) {\n            continue;\n          }\n\n          break;\n        case 1:\n          if (table.coverage.vertical || table.coverage.variation) {\n            continue;\n          }\n\n          break;\n        default:\n          throw new Error(`Unsupported kerning table version ${table.version}`);\n      }\n\n      let val = 0;\n      let s = table.subtable;\n      switch (table.format) {\n        case 0:\n          let pairIdx = binarySearch(s.pairs, function (pair) {\n            return (left - pair.left) || (right - pair.right);\n          });\n\n          if (pairIdx >= 0) {\n            val = s.pairs[pairIdx].value;\n          }\n\n          break;\n\n        case 2:\n          let leftOffset = 0, rightOffset = 0;\n          if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n            leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n          } else {\n            leftOffset = s.array.off;\n          }\n\n          if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n            rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n          }\n\n          let index = (leftOffset + rightOffset - s.array.off) / 2;\n          val = s.array.values.get(index);\n          break;\n\n        case 3:\n          if (left >= s.glyphCount || right >= s.glyphCount) {\n            return 0;\n          }\n\n          val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n          break;\n\n        default:\n          throw new Error(`Unsupported kerning sub-table format ${table.format}`);\n      }\n\n      // Microsoft supports the override flag, which resets the result\n      // Otherwise, the sum of the results from all subtables is returned\n      if (table.coverage.override) {\n        res = val;\n      } else {\n        res += val;\n      }\n    }\n\n    return res;\n  }\n}\n","import unicode from 'unicode-properties';\n\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nexport default class UnicodeLayoutEngine {\n  constructor(font) {\n    this.font = font;\n  }\n\n  positionGlyphs(glyphs, positions) {\n    // find each base + mark cluster, and position the marks relative to the base\n    let clusterStart = 0;\n    let clusterEnd = 0;\n    for (let index = 0; index < glyphs.length; index++) {\n      let glyph = glyphs[index];\n      if (glyph.isMark) { // TODO: handle ligatures\n        clusterEnd = index;\n      } else {\n        if (clusterStart !== clusterEnd) {\n          this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n        }\n\n        clusterStart = clusterEnd = index;\n      }\n    }\n\n    if (clusterStart !== clusterEnd) {\n      this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n    }\n\n    return positions;\n  }\n\n  positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n    let base = glyphs[clusterStart];\n    let baseBox = base.cbox.copy();\n\n    // adjust bounding box for ligature glyphs\n    if (base.codePoints.length > 1) {\n      // LTR. TODO: RTL support.\n      baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length;\n    }\n\n    let xOffset = -positions[clusterStart].xAdvance;\n    let yOffset = 0;\n    let yGap = this.font.unitsPerEm / 16;\n\n    // position each of the mark glyphs relative to the base glyph\n    for (let index = clusterStart + 1; index <= clusterEnd; index++) {\n      let mark = glyphs[index];\n      let markBox = mark.cbox;\n      let position = positions[index];\n\n      let combiningClass = this.getCombiningClass(mark.codePoints[0]);\n\n      if (combiningClass !== 'Not_Reordered') {\n        position.xOffset = position.yOffset = 0;\n\n        // x positioning\n        switch (combiningClass) {\n          case 'Double_Above':\n          case 'Double_Below':\n            // LTR. TODO: RTL support.\n            position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n            break;\n\n          case 'Attached_Below_Left':\n          case 'Below_Left':\n          case 'Above_Left':\n            // left align\n            position.xOffset += baseBox.minX - markBox.minX;\n            break;\n\n          case 'Attached_Above_Right':\n          case 'Below_Right':\n          case 'Above_Right':\n            // right align\n            position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n            break;\n\n          default: // Attached_Below, Attached_Above, Below, Above, other\n            // center align\n            position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n        }\n\n        // y positioning\n        switch (combiningClass) {\n          case 'Double_Below':\n          case 'Below_Left':\n          case 'Below':\n          case 'Below_Right':\n          case 'Attached_Below_Left':\n          case 'Attached_Below':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n              baseBox.minY += yGap;\n            }\n\n            position.yOffset = -baseBox.minY - markBox.maxY;\n            baseBox.minY += markBox.height;\n            break;\n\n          case 'Double_Above':\n          case 'Above_Left':\n          case 'Above':\n          case 'Above_Right':\n          case 'Attached_Above':\n          case 'Attached_Above_Right':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n              baseBox.maxY += yGap;\n            }\n\n            position.yOffset = baseBox.maxY - markBox.minY;\n            baseBox.maxY += markBox.height;\n            break;\n        }\n\n        position.xAdvance = position.yAdvance = 0;\n        position.xOffset += xOffset;\n        position.yOffset += yOffset;\n\n      } else {\n        xOffset -= position.xAdvance;\n        yOffset -= position.yAdvance;\n      }\n    }\n\n    return;\n  }\n\n  getCombiningClass(codePoint) {\n    let combiningClass = unicode.getCombiningClass(codePoint);\n\n    // Thai / Lao need some per-character work\n    if ((codePoint & ~0xff) === 0x0e00) {\n      if (combiningClass === 'Not_Reordered') {\n        switch (codePoint) {\n          case 0x0e31:\n          case 0x0e34:\n          case 0x0e35:\n          case 0x0e36:\n          case 0x0e37:\n          case 0x0e47:\n          case 0x0e4c:\n          case 0x0e3d:\n          case 0x0e4e:\n            return 'Above_Right';\n\n          case 0x0eb1:\n          case 0x0eb4:\n          case 0x0eb5:\n          case 0x0eb6:\n          case 0x0eb7:\n          case 0x0ebb:\n          case 0x0ecc:\n          case 0x0ecd:\n            return 'Above';\n\n          case 0x0ebc:\n            return 'Below';\n        }\n      } else if (codePoint === 0x0e3a) { // virama\n        return 'Below_Right';\n      }\n    }\n\n    switch (combiningClass) {\n      // Hebrew\n\n      case 'CCC10': // sheva\n      case 'CCC11': // hataf segol\n      case 'CCC12': // hataf patah\n      case 'CCC13': // hataf qamats\n      case 'CCC14': // hiriq\n      case 'CCC15': // tsere\n      case 'CCC16': // segol\n      case 'CCC17': // patah\n      case 'CCC18': // qamats\n      case 'CCC20': // qubuts\n      case 'CCC22': // meteg\n        return 'Below';\n\n      case 'CCC23': // rafe\n        return 'Attached_Above';\n\n      case 'CCC24': // shin dot\n        return 'Above_Right';\n\n      case 'CCC25': // sin dot\n      case 'CCC19': // holam\n        return 'Above_Left';\n\n      case 'CCC26': // point varika\n        return 'Above';\n\n      case 'CCC21': // dagesh\n        break;\n\n      // Arabic and Syriac\n\n      case 'CCC27': // fathatan\n      case 'CCC28': // dammatan\n      case 'CCC30': // fatha\n      case 'CCC31': // damma\n      case 'CCC33': // shadda\n      case 'CCC34': // sukun\n      case 'CCC35': // superscript alef\n      case 'CCC36': // superscript alaph\n        return 'Above';\n\n      case 'CCC29': // kasratan\n      case 'CCC32': // kasra\n        return 'Below';\n\n      // Thai\n\n      case 'CCC103': // sara u / sara uu\n        return 'Below_Right';\n\n      case 'CCC107': // mai\n        return 'Above_Right';\n\n      // Lao\n\n      case 'CCC118': // sign u / sign uu\n        return 'Below';\n\n      case 'CCC122': // mai\n        return 'Above';\n\n      // Tibetan\n\n      case 'CCC129': // sign aa\n      case 'CCC132': // sign u\n        return 'Below';\n\n      case 'CCC130': // sign i\n        return 'Above';\n    }\n\n    return combiningClass;\n  }\n}\n","import BBox from '../glyph/BBox';\nimport * as Script from '../layout/Script';\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nexport default class GlyphRun {\n  constructor(glyphs, features, script, language, direction) {\n    /**\n     * An array of Glyph objects in the run\n     * @type {Glyph[]}\n     */\n    this.glyphs = glyphs;\n\n    /**\n     * An array of GlyphPosition objects for each glyph in the run\n     * @type {GlyphPosition[]}\n     */\n    this.positions = null;\n\n    /**\n     * The script that was requested for shaping. This was either passed in or detected automatically.\n     * @type {string}\n     */\n    this.script = script;\n\n    /**\n     * The language requested for shaping, as passed in. If `null`, the default language for the\n     * script was used.\n     * @type {string}\n     */\n    this.language = language || null;\n\n    /**\n     * The direction requested for shaping, as passed in (either ltr or rtl).\n     * If `null`, the default direction of the script is used.\n     * @type {string}\n     */\n    this.direction = direction || Script.direction(script);\n\n    /**\n     * The features requested during shaping. This is a combination of user\n     * specified features and features chosen by the shaper.\n     * @type {object}\n     */\n    this.features = {};\n\n    // Convert features to an object\n    if (Array.isArray(features)) {\n      for (let tag of features) {\n        this.features[tag] = true;\n      }\n    } else if (typeof features === 'object') {\n      this.features = features;\n    }\n  }\n\n  /**\n   * The total advance width of the run.\n   * @type {number}\n   */\n  get advanceWidth() {\n    let width = 0;\n    for (let position of this.positions) {\n      width += position.xAdvance;\n    }\n\n    return width;\n  }\n\n /**\n  * The total advance height of the run.\n  * @type {number}\n  */\n  get advanceHeight() {\n    let height = 0;\n    for (let position of this.positions) {\n      height += position.yAdvance;\n    }\n\n    return height;\n  }\n\n /**\n  * The bounding box containing all glyphs in the run.\n  * @type {BBox}\n  */\n  get bbox() {\n    let bbox = new BBox;\n\n    let x = 0;\n    let y = 0;\n    for (let index = 0; index < this.glyphs.length; index++) {\n      let glyph = this.glyphs[index];\n      let p = this.positions[index];\n      let b = glyph.bbox;\n\n      bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n      bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n\n      x += p.xAdvance;\n      y += p.yAdvance;\n    }\n\n    return bbox;\n  }\n}\n","/**\n * Represents a glyph bounding box\n */\nexport default class BBox {\n  constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\n    /**\n     * The minimum X position in the bounding box\n     * @type {number}\n     */\n    this.minX = minX;\n\n    /**\n     * The minimum Y position in the bounding box\n     * @type {number}\n     */\n    this.minY = minY;\n\n    /**\n     * The maxmimum X position in the bounding box\n     * @type {number}\n     */\n    this.maxX = maxX;\n\n    /**\n     * The maxmimum Y position in the bounding box\n     * @type {number}\n     */\n    this.maxY = maxY;\n  }\n\n  /**\n   * The width of the bounding box\n   * @type {number}\n   */\n  get width() {\n    return this.maxX - this.minX;\n  }\n\n  /**\n   * The height of the bounding box\n   * @type {number}\n   */\n  get height() {\n    return this.maxY - this.minY;\n  }\n\n  addPoint(x, y) {\n    if (Math.abs(x) !== Infinity) {\n      if (x < this.minX) {\n        this.minX = x;\n      }\n\n      if (x > this.maxX) {\n        this.maxX = x;\n      }\n    }\n\n    if (Math.abs(y) !== Infinity) {\n      if (y < this.minY) {\n        this.minY = y;\n      }\n\n      if (y > this.maxY) {\n        this.maxY = y;\n      }\n    }\n  }\n\n  copy() {\n    return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n  }\n}\n","import unicode from 'unicode-properties';\n\n// This maps the Unicode Script property to an OpenType script tag\n// Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nconst UNICODE_SCRIPTS = {\n  Caucasian_Albanian: 'aghb',\n  Arabic: 'arab',\n  Imperial_Aramaic: 'armi',\n  Armenian: 'armn',\n  Avestan: 'avst',\n  Balinese: 'bali',\n  Bamum: 'bamu',\n  Bassa_Vah: 'bass',\n  Batak: 'batk',\n  Bengali: ['bng2', 'beng'],\n  Bopomofo: 'bopo',\n  Brahmi: 'brah',\n  Braille: 'brai',\n  Buginese: 'bugi',\n  Buhid: 'buhd',\n  Chakma: 'cakm',\n  Canadian_Aboriginal: 'cans',\n  Carian: 'cari',\n  Cham: 'cham',\n  Cherokee: 'cher',\n  Coptic: 'copt',\n  Cypriot: 'cprt',\n  Cyrillic: 'cyrl',\n  Devanagari: ['dev2', 'deva'],\n  Deseret: 'dsrt',\n  Duployan: 'dupl',\n  Egyptian_Hieroglyphs: 'egyp',\n  Elbasan: 'elba',\n  Ethiopic: 'ethi',\n  Georgian: 'geor',\n  Glagolitic: 'glag',\n  Gothic: 'goth',\n  Grantha: 'gran',\n  Greek: 'grek',\n  Gujarati: ['gjr2', 'gujr'],\n  Gurmukhi: ['gur2', 'guru'],\n  Hangul: 'hang',\n  Han: 'hani',\n  Hanunoo: 'hano',\n  Hebrew: 'hebr',\n  Hiragana: 'hira',\n  Pahawh_Hmong: 'hmng',\n  Katakana_Or_Hiragana: 'hrkt',\n  Old_Italic: 'ital',\n  Javanese: 'java',\n  Kayah_Li: 'kali',\n  Katakana: 'kana',\n  Kharoshthi: 'khar',\n  Khmer: 'khmr',\n  Khojki: 'khoj',\n  Kannada: ['knd2', 'knda'],\n  Kaithi: 'kthi',\n  Tai_Tham: 'lana',\n  Lao: 'lao ',\n  Latin: 'latn',\n  Lepcha: 'lepc',\n  Limbu: 'limb',\n  Linear_A: 'lina',\n  Linear_B: 'linb',\n  Lisu: 'lisu',\n  Lycian: 'lyci',\n  Lydian: 'lydi',\n  Mahajani: 'mahj',\n  Mandaic: 'mand',\n  Manichaean: 'mani',\n  Mende_Kikakui: 'mend',\n  Meroitic_Cursive: 'merc',\n  Meroitic_Hieroglyphs: 'mero',\n  Malayalam: ['mlm2', 'mlym'],\n  Modi: 'modi',\n  Mongolian: 'mong',\n  Mro: 'mroo',\n  Meetei_Mayek: 'mtei',\n  Myanmar: ['mym2', 'mymr'],\n  Old_North_Arabian: 'narb',\n  Nabataean: 'nbat',\n  Nko: 'nko ',\n  Ogham: 'ogam',\n  Ol_Chiki: 'olck',\n  Old_Turkic: 'orkh',\n  Oriya: ['ory2', 'orya'],\n  Osmanya: 'osma',\n  Palmyrene: 'palm',\n  Pau_Cin_Hau: 'pauc',\n  Old_Permic: 'perm',\n  Phags_Pa: 'phag',\n  Inscriptional_Pahlavi: 'phli',\n  Psalter_Pahlavi: 'phlp',\n  Phoenician: 'phnx',\n  Miao: 'plrd',\n  Inscriptional_Parthian: 'prti',\n  Rejang: 'rjng',\n  Runic: 'runr',\n  Samaritan: 'samr',\n  Old_South_Arabian: 'sarb',\n  Saurashtra: 'saur',\n  Shavian: 'shaw',\n  Sharada: 'shrd',\n  Siddham: 'sidd',\n  Khudawadi: 'sind',\n  Sinhala: 'sinh',\n  Sora_Sompeng: 'sora',\n  Sundanese: 'sund',\n  Syloti_Nagri: 'sylo',\n  Syriac: 'syrc',\n  Tagbanwa: 'tagb',\n  Takri: 'takr',\n  Tai_Le: 'tale',\n  New_Tai_Lue: 'talu',\n  Tamil: ['tml2', 'taml'],\n  Tai_Viet: 'tavt',\n  Telugu: ['tel2', 'telu'],\n  Tifinagh: 'tfng',\n  Tagalog: 'tglg',\n  Thaana: 'thaa',\n  Thai: 'thai',\n  Tibetan: 'tibt',\n  Tirhuta: 'tirh',\n  Ugaritic: 'ugar',\n  Vai: 'vai ',\n  Warang_Citi: 'wara',\n  Old_Persian: 'xpeo',\n  Cuneiform: 'xsux',\n  Yi: 'yi  ',\n  Inherited: 'zinh',\n  Common: 'zyyy',\n  Unknown: 'zzzz'\n};\n\nconst OPENTYPE_SCRIPTS = {};\nfor (let script in UNICODE_SCRIPTS) {\n  let tag = UNICODE_SCRIPTS[script];\n  if (Array.isArray(tag)) {\n    for (let t of tag) {\n      OPENTYPE_SCRIPTS[t] = script;\n    }\n  } else {\n    OPENTYPE_SCRIPTS[tag] = script;\n  }\n}\n\nexport function fromUnicode(script) {\n  return UNICODE_SCRIPTS[script];\n}\n\nexport function fromOpenType(tag) {\n  return OPENTYPE_SCRIPTS[tag];\n}\n\nexport function forString(string) {\n  let len = string.length;\n  let idx = 0;\n  while (idx < len) {\n    let code = string.charCodeAt(idx++);\n\n    // Check if this is a high surrogate\n    if (0xd800 <= code && code <= 0xdbff && idx < len) {\n      let next = string.charCodeAt(idx);\n\n      // Check if this is a low surrogate\n      if (0xdc00 <= next && next <= 0xdfff) {\n        idx++;\n        code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n      }\n    }\n\n    let script = unicode.getScript(code);\n    if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n      return UNICODE_SCRIPTS[script];\n    }\n  }\n\n  return UNICODE_SCRIPTS.Unknown;\n}\n\nexport function forCodePoints(codePoints) {\n  for (let i = 0; i < codePoints.length; i++) {\n    let codePoint = codePoints[i];\n    let script = unicode.getScript(codePoint);\n    if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n      return UNICODE_SCRIPTS[script];\n    }\n  }\n\n  return UNICODE_SCRIPTS.Unknown;\n}\n\n// The scripts in this map are written from right to left\nconst RTL = {\n  arab: true,   // Arabic\n  hebr: true,   // Hebrew\n  syrc: true,   // Syriac\n  thaa: true,   // Thaana\n  cprt: true,   // Cypriot Syllabary\n  khar: true,   // Kharosthi\n  phnx: true,   // Phoenician\n  'nko ': true, // N'Ko\n  lydi: true,   // Lydian\n  avst: true,   // Avestan\n  armi: true,   // Imperial Aramaic\n  phli: true,   // Inscriptional Pahlavi\n  prti: true,   // Inscriptional Parthian\n  sarb: true,   // Old South Arabian\n  orkh: true,   // Old Turkic, Orkhon Runic\n  samr: true,   // Samaritan\n  mand: true,   // Mandaic, Mandaean\n  merc: true,   // Meroitic Cursive\n  mero: true,   // Meroitic Hieroglyphs\n\n  // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n  mani: true,   // Manichaean\n  mend: true,   // Mende Kikakui\n  nbat: true,   // Nabataean\n  narb: true,   // Old North Arabian\n  palm: true,   // Palmyrene\n  phlp: true    // Psalter Pahlavi\n};\n\nexport function direction(script) {\n  if (RTL[script]) {\n    return 'rtl';\n  }\n\n  return 'ltr';\n}\n","/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nexport default class GlyphPosition {\n  constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) {\n    /**\n     * The amount to move the virtual pen in the X direction after rendering this glyph.\n     * @type {number}\n     */\n    this.xAdvance = xAdvance;\n\n    /**\n     * The amount to move the virtual pen in the Y direction after rendering this glyph.\n     * @type {number}\n     */\n    this.yAdvance = yAdvance;\n\n    /**\n     * The offset from the pen position in the X direction at which to render this glyph.\n     * @type {number}\n     */\n    this.xOffset = xOffset;\n\n    /**\n     * The offset from the pen position in the Y direction at which to render this glyph.\n     * @type {number}\n     */\n    this.yOffset = yOffset;\n  }\n}\n","import * as AATFeatureMap from './AATFeatureMap';\nimport * as Script from '../layout/Script';\nimport AATMorxProcessor from './AATMorxProcessor';\n\nexport default class AATLayoutEngine {\n  constructor(font) {\n    this.font = font;\n    this.morxProcessor = new AATMorxProcessor(font);\n    this.fallbackPosition = false;\n  }\n\n  substitute(glyphRun) {\n    // AAT expects the glyphs to be in visual order prior to morx processing,\n    // so reverse the glyphs if the script is right-to-left.\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n    }\n\n    this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features));\n  }\n\n  getAvailableFeatures(script, language) {\n    return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures());\n  }\n\n  stringsForGlyph(gid) {\n    let glyphStrings = this.morxProcessor.generateInputs(gid);\n    let result = new Set;\n\n    for (let glyphs of glyphStrings) {\n      this._addStrings(glyphs, 0, result, '');\n    }\n\n    return result;\n  }\n\n  _addStrings(glyphs, index, strings, string) {\n    let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n\n    for (let codePoint of codePoints) {\n      let s = string + String.fromCodePoint(codePoint);\n      if (index < glyphs.length - 1) {\n        this._addStrings(glyphs, index + 1, strings, s);\n      } else {\n        strings.add(s);\n      }\n    }\n  }\n}\n","// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nconst features = {\n  allTypographicFeatures: {\n    code: 0,\n    exclusive: false,\n    allTypeFeatures: 0\n  },\n  ligatures: {\n    code: 1,\n    exclusive: false,\n    requiredLigatures: 0,\n    commonLigatures: 2,\n    rareLigatures: 4,\n    // logos: 6\n    rebusPictures: 8,\n    diphthongLigatures: 10,\n    squaredLigatures: 12,\n    abbrevSquaredLigatures: 14,\n    symbolLigatures: 16,\n    contextualLigatures: 18,\n    historicalLigatures: 20\n  },\n  cursiveConnection: {\n    code: 2,\n    exclusive: true,\n    unconnected: 0,\n    partiallyConnected: 1,\n    cursive: 2\n  },\n  letterCase: {\n    code: 3,\n    exclusive: true\n  },\n    // upperAndLowerCase: 0          # deprecated\n    // allCaps: 1                    # deprecated\n    // allLowerCase: 2               # deprecated\n    // smallCaps: 3                  # deprecated\n    // initialCaps: 4                # deprecated\n    // initialCapsAndSmallCaps: 5    # deprecated\n  verticalSubstitution: {\n    code: 4,\n    exclusive: false,\n    substituteVerticalForms: 0\n  },\n  linguisticRearrangement: {\n    code: 5,\n    exclusive: false,\n    linguisticRearrangement: 0\n  },\n  numberSpacing: {\n    code: 6,\n    exclusive: true,\n    monospacedNumbers: 0,\n    proportionalNumbers: 1,\n    thirdWidthNumbers: 2,\n    quarterWidthNumbers: 3\n  },\n  smartSwash: {\n    code: 8,\n    exclusive: false,\n    wordInitialSwashes: 0,\n    wordFinalSwashes: 2,\n    // lineInitialSwashes: 4\n    // lineFinalSwashes: 6\n    nonFinalSwashes: 8\n  },\n  diacritics: {\n    code: 9,\n    exclusive: true,\n    showDiacritics: 0,\n    hideDiacritics: 1,\n    decomposeDiacritics: 2\n  },\n  verticalPosition: {\n    code: 10,\n    exclusive: true,\n    normalPosition: 0,\n    superiors: 1,\n    inferiors: 2,\n    ordinals: 3,\n    scientificInferiors: 4\n  },\n  fractions: {\n    code: 11,\n    exclusive: true,\n    noFractions: 0,\n    verticalFractions: 1,\n    diagonalFractions: 2\n  },\n  overlappingCharacters: {\n    code: 13,\n    exclusive: false,\n    preventOverlap: 0\n  },\n  typographicExtras: {\n    code: 14,\n    exclusive: false,\n    // hyphensToEmDash: 0\n    // hyphenToEnDash: 2\n    slashedZero: 4\n  },\n    // formInterrobang: 6\n    // smartQuotes: 8\n    // periodsToEllipsis: 10\n  mathematicalExtras: {\n    code: 15,\n    exclusive: false,\n    // hyphenToMinus: 0\n    // asteristoMultiply: 2\n    // slashToDivide: 4\n    // inequalityLigatures: 6\n    // exponents: 8\n    mathematicalGreek: 10\n  },\n  ornamentSets: {\n    code: 16,\n    exclusive: true,\n    noOrnaments: 0,\n    dingbats: 1,\n    piCharacters: 2,\n    fleurons: 3,\n    decorativeBorders: 4,\n    internationalSymbols: 5,\n    mathSymbols: 6\n  },\n  characterAlternatives: {\n    code: 17,\n    exclusive: true,\n    noAlternates: 0\n  },\n    // user defined options\n  designComplexity: {\n    code: 18,\n    exclusive: true,\n    designLevel1: 0,\n    designLevel2: 1,\n    designLevel3: 2,\n    designLevel4: 3,\n    designLevel5: 4\n  },\n  styleOptions: {\n    code: 19,\n    exclusive: true,\n    noStyleOptions: 0,\n    displayText: 1,\n    engravedText: 2,\n    illuminatedCaps: 3,\n    titlingCaps: 4,\n    tallCaps: 5\n  },\n  characterShape: {\n    code: 20,\n    exclusive: true,\n    traditionalCharacters: 0,\n    simplifiedCharacters: 1,\n    JIS1978Characters: 2,\n    JIS1983Characters: 3,\n    JIS1990Characters: 4,\n    traditionalAltOne: 5,\n    traditionalAltTwo: 6,\n    traditionalAltThree: 7,\n    traditionalAltFour: 8,\n    traditionalAltFive: 9,\n    expertCharacters: 10,\n    JIS2004Characters: 11,\n    hojoCharacters: 12,\n    NLCCharacters: 13,\n    traditionalNamesCharacters: 14\n  },\n  numberCase: {\n    code: 21,\n    exclusive: true,\n    lowerCaseNumbers: 0,\n    upperCaseNumbers: 1\n  },\n  textSpacing: {\n    code: 22,\n    exclusive: true,\n    proportionalText: 0,\n    monospacedText: 1,\n    halfWidthText: 2,\n    thirdWidthText: 3,\n    quarterWidthText: 4,\n    altProportionalText: 5,\n    altHalfWidthText: 6\n  },\n  transliteration: {\n    code: 23,\n    exclusive: true,\n    noTransliteration: 0\n  },\n    // hanjaToHangul: 1\n    // hiraganaToKatakana: 2\n    // katakanaToHiragana: 3\n    // kanaToRomanization: 4\n    // romanizationToHiragana: 5\n    // romanizationToKatakana: 6\n    // hanjaToHangulAltOne: 7\n    // hanjaToHangulAltTwo: 8\n    // hanjaToHangulAltThree: 9\n  annotation: {\n    code: 24,\n    exclusive: true,\n    noAnnotation: 0,\n    boxAnnotation: 1,\n    roundedBoxAnnotation: 2,\n    circleAnnotation: 3,\n    invertedCircleAnnotation: 4,\n    parenthesisAnnotation: 5,\n    periodAnnotation: 6,\n    romanNumeralAnnotation: 7,\n    diamondAnnotation: 8,\n    invertedBoxAnnotation: 9,\n    invertedRoundedBoxAnnotation: 10\n  },\n  kanaSpacing: {\n    code: 25,\n    exclusive: true,\n    fullWidthKana: 0,\n    proportionalKana: 1\n  },\n  ideographicSpacing: {\n    code: 26,\n    exclusive: true,\n    fullWidthIdeographs: 0,\n    proportionalIdeographs: 1,\n    halfWidthIdeographs: 2\n  },\n  unicodeDecomposition: {\n    code: 27,\n    exclusive: false,\n    canonicalComposition: 0,\n    compatibilityComposition: 2,\n    transcodingComposition: 4\n  },\n  rubyKana: {\n    code: 28,\n    exclusive: false,\n    // noRubyKana: 0     # deprecated - use rubyKanaOff instead\n    // rubyKana: 1     # deprecated - use rubyKanaOn instead\n    rubyKana: 2\n  },\n  CJKSymbolAlternatives: {\n    code: 29,\n    exclusive: true,\n    noCJKSymbolAlternatives: 0,\n    CJKSymbolAltOne: 1,\n    CJKSymbolAltTwo: 2,\n    CJKSymbolAltThree: 3,\n    CJKSymbolAltFour: 4,\n    CJKSymbolAltFive: 5\n  },\n  ideographicAlternatives: {\n    code: 30,\n    exclusive: true,\n    noIdeographicAlternatives: 0,\n    ideographicAltOne: 1,\n    ideographicAltTwo: 2,\n    ideographicAltThree: 3,\n    ideographicAltFour: 4,\n    ideographicAltFive: 5\n  },\n  CJKVerticalRomanPlacement: {\n    code: 31,\n    exclusive: true,\n    CJKVerticalRomanCentered: 0,\n    CJKVerticalRomanHBaseline: 1\n  },\n  italicCJKRoman: {\n    code: 32,\n    exclusive: false,\n    // noCJKItalicRoman: 0     # deprecated - use CJKItalicRomanOff instead\n    // CJKItalicRoman: 1     # deprecated - use CJKItalicRomanOn instead\n    CJKItalicRoman: 2\n  },\n  caseSensitiveLayout: {\n    code: 33,\n    exclusive: false,\n    caseSensitiveLayout: 0,\n    caseSensitiveSpacing: 2\n  },\n  alternateKana: {\n    code: 34,\n    exclusive: false,\n    alternateHorizKana: 0,\n    alternateVertKana: 2\n  },\n  stylisticAlternatives: {\n    code: 35,\n    exclusive: false,\n    noStylisticAlternates: 0,\n    stylisticAltOne: 2,\n    stylisticAltTwo: 4,\n    stylisticAltThree: 6,\n    stylisticAltFour: 8,\n    stylisticAltFive: 10,\n    stylisticAltSix: 12,\n    stylisticAltSeven: 14,\n    stylisticAltEight: 16,\n    stylisticAltNine: 18,\n    stylisticAltTen: 20,\n    stylisticAltEleven: 22,\n    stylisticAltTwelve: 24,\n    stylisticAltThirteen: 26,\n    stylisticAltFourteen: 28,\n    stylisticAltFifteen: 30,\n    stylisticAltSixteen: 32,\n    stylisticAltSeventeen: 34,\n    stylisticAltEighteen: 36,\n    stylisticAltNineteen: 38,\n    stylisticAltTwenty: 40\n  },\n  contextualAlternates: {\n    code: 36,\n    exclusive: false,\n    contextualAlternates: 0,\n    swashAlternates: 2,\n    contextualSwashAlternates: 4\n  },\n  lowerCase: {\n    code: 37,\n    exclusive: true,\n    defaultLowerCase: 0,\n    lowerCaseSmallCaps: 1,\n    lowerCasePetiteCaps: 2\n  },\n  upperCase: {\n    code: 38,\n    exclusive: true,\n    defaultUpperCase: 0,\n    upperCaseSmallCaps: 1,\n    upperCasePetiteCaps: 2\n  },\n  languageTag: { // indices into ltag table\n    code: 39,\n    exclusive: true\n  },\n  CJKRomanSpacing: {\n    code: 103,\n    exclusive: true,\n    halfWidthCJKRoman: 0,\n    proportionalCJKRoman: 1,\n    defaultCJKRoman: 2,\n    fullWidthCJKRoman: 3\n  }\n};\n\nconst feature = (name, selector) => [features[name].code, features[name][selector]];\n\nconst OTMapping = {\n  rlig: feature('ligatures', 'requiredLigatures'),\n  clig: feature('ligatures', 'contextualLigatures'),\n  dlig: feature('ligatures', 'rareLigatures'),\n  hlig: feature('ligatures', 'historicalLigatures'),\n  liga: feature('ligatures', 'commonLigatures'),\n  hist: feature('ligatures', 'historicalLigatures'), // ??\n\n  smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n  pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n\n  frac: feature('fractions', 'diagonalFractions'),\n  dnom: feature('fractions', 'diagonalFractions'), // ??\n  numr: feature('fractions', 'diagonalFractions'), // ??\n  afrc: feature('fractions', 'verticalFractions'),\n  // aalt\n  // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n  // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n  // unic, vatu, vhal, vjmo, vpal, vrt2\n  // dist -> trak table?\n  // kern, vkrn -> kern table\n  // lfbd + opbd + rtbd -> opbd table?\n  // mark, mkmk -> acnt table?\n  // locl -> languageTag + ltag table\n\n  case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing\n  ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?\n  cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below\n  valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  swsh: feature('contextualAlternates', 'swashAlternates'),\n  cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n  curs: feature('cursiveConnection', 'cursive'), // ??\n  c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n  c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n\n  init: feature('smartSwash', 'wordInitialSwashes'), // ??\n  fin2: feature('smartSwash', 'wordFinalSwashes'), // ??\n  medi: feature('smartSwash', 'nonFinalSwashes'), // ??\n  med2: feature('smartSwash', 'nonFinalSwashes'), // ??\n  fin3: feature('smartSwash', 'wordFinalSwashes'), // ??\n  fina: feature('smartSwash', 'wordFinalSwashes'), // ??\n\n  pkna: feature('kanaSpacing', 'proportionalKana'),\n  half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?\n  halt: feature('textSpacing', 'altHalfWidthText'),\n\n  hkna: feature('alternateKana', 'alternateHorizKana'),\n  vkna: feature('alternateKana', 'alternateVertKana'),\n  // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n\n  ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n  lnum: feature('numberCase', 'upperCaseNumbers'),\n  onum: feature('numberCase', 'lowerCaseNumbers'),\n  mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n\n  // nalt: not enough info. what type of annotation?\n  // ornm: ditto, which ornament style?\n\n  calt: feature('contextualAlternates', 'contextualAlternates'), // or more?\n  vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?\n  vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n  tnum: feature('numberSpacing', 'monospacedNumbers'),\n  pnum: feature('numberSpacing', 'proportionalNumbers'),\n  sups: feature('verticalPosition', 'superiors'),\n  subs: feature('verticalPosition', 'inferiors'),\n  ordn: feature('verticalPosition', 'ordinals'),\n  pwid: feature('textSpacing', 'proportionalText'),\n  hwid: feature('textSpacing', 'halfWidthText'),\n  qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?\n  twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?\n  fwid: feature('textSpacing', 'proportionalText'), //??\n  palt: feature('textSpacing', 'altProportionalText'),\n  trad: feature('characterShape', 'traditionalCharacters'),\n  smpl: feature('characterShape', 'simplifiedCharacters'),\n  jp78: feature('characterShape', 'JIS1978Characters'),\n  jp83: feature('characterShape', 'JIS1983Characters'),\n  jp90: feature('characterShape', 'JIS1990Characters'),\n  jp04: feature('characterShape', 'JIS2004Characters'),\n  expt: feature('characterShape', 'expertCharacters'),\n  hojo: feature('characterShape', 'hojoCharacters'),\n  nlck: feature('characterShape', 'NLCCharacters'),\n  tnam: feature('characterShape', 'traditionalNamesCharacters'),\n  ruby: feature('rubyKana', 'rubyKana'),\n  titl: feature('styleOptions', 'titlingCaps'),\n  zero: feature('typographicExtras', 'slashedZero'),\n\n  ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n  ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n  ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n  ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n  ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n  ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n  ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n  ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n  ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n  ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n  ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n  ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n  ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n  ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n  ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n  ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n  ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n  ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n  ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n  ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n};\n\n  // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n\n// Add cv01-cv99 features\nfor (let i = 1; i <= 99; i++) {\n  OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i];\n}\n\n// create inverse mapping\nlet AATMapping = {};\nfor (let ot in OTMapping) {\n  let aat = OTMapping[ot];\n  if (AATMapping[aat[0]] == null) {\n    AATMapping[aat[0]] = {};\n  }\n\n  AATMapping[aat[0]][aat[1]] = ot;\n}\n\n// Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\nexport function mapOTToAAT(features) {\n  let res = {};\n  for (let k in features) {\n    let r;\n    if (r = OTMapping[k]) {\n      if (res[r[0]] == null) {\n        res[r[0]] = {};\n      }\n\n      res[r[0]][r[1]] = features[k];\n    }\n  }\n\n  return res;\n}\n\n// Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\nfunction mapFeatureStrings(f) {\n  let [type, setting] = f;\n  if (isNaN(type)) {\n    var typeCode = features[type] && features[type].code;\n  } else {\n    var typeCode = type;\n  }\n\n  if (isNaN(setting)) {\n    var settingCode = features[type] && features[type][setting];\n  } else {\n    var settingCode = setting;\n  }\n\n  return [typeCode, settingCode];\n}\n\n// Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\nexport function mapAATToOT(features) {\n  let res = {};\n  if (Array.isArray(features)) {\n    for (let k = 0; k < features.length; k++) {\n      let r;\n      let f = mapFeatureStrings(features[k]);\n      if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n        res[r] = true;\n      }\n    }\n\n  } else if (typeof features === 'object') {\n    for (let type in features) {\n      let feature = features[type];\n      for (let setting in feature) {\n        let r;\n        let f = mapFeatureStrings([type, setting]);\n        if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) {\n          res[r] = true;\n        }\n      }\n    }\n  }\n\n  return Object.keys(res);\n}\n","import AATStateMachine from './AATStateMachine';\nimport AATLookupTable from './AATLookupTable';\nimport {cache} from '../decorators';\n\n// indic replacement flags\nconst MARK_FIRST = 0x8000;\nconst MARK_LAST  = 0x2000;\nconst VERB       = 0x000F;\n\n// contextual substitution and glyph insertion flag\nconst SET_MARK = 0x8000;\n\n// ligature entry flags\nconst SET_COMPONENT  = 0x8000;\nconst PERFORM_ACTION = 0x2000;\n\n// ligature action masks\nconst LAST_MASK   = 0x80000000;\nconst STORE_MASK  = 0x40000000;\nconst OFFSET_MASK = 0x3FFFFFFF;\n\nconst VERTICAL_ONLY           = 0x800000;\nconst REVERSE_DIRECTION       = 0x400000;\nconst HORIZONTAL_AND_VERTICAL = 0x200000;\n\n// glyph insertion flags\nconst CURRENT_IS_KASHIDA_LIKE = 0x2000;\nconst MARKED_IS_KASHIDA_LIKE  = 0x1000;\nconst CURRENT_INSERT_BEFORE   = 0x0800;\nconst MARKED_INSERT_BEFORE    = 0x0400;\nconst CURRENT_INSERT_COUNT    = 0x03E0;\nconst MARKED_INSERT_COUNT     = 0x001F;\n\nexport default class AATMorxProcessor {\n  constructor(font) {\n    this.processIndicRearragement = this.processIndicRearragement.bind(this);\n    this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n    this.processLigature = this.processLigature.bind(this);\n    this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n    this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n    this.font = font;\n    this.morx = font.morx;\n    this.inputCache = null;\n  }\n\n  // Processes an array of glyphs and applies the specified features\n  // Features should be in the form of {featureType:{featureSetting:boolean}}\n  process(glyphs, features = {}) {\n    for (let chain of this.morx.chains) {\n      let flags = chain.defaultFlags;\n\n      // enable/disable the requested features\n      for (let feature of chain.features) {\n        let f;\n        if (f = features[feature.featureType]) {\n          if (f[feature.featureSetting]) {\n            flags &= feature.disableFlags;\n            flags |= feature.enableFlags;\n          } else if (f[feature.featureSetting] === false) {\n            flags |= ~feature.disableFlags;\n            flags &= ~feature.enableFlags;\n          }\n        }\n      }\n\n      for (let subtable of chain.subtables) {\n        if (subtable.subFeatureFlags & flags) {\n          this.processSubtable(subtable, glyphs);\n        }\n      }\n    }\n\n    // remove deleted glyphs\n    let index = glyphs.length - 1;\n    while (index >= 0) {\n      if (glyphs[index].id === 0xffff) {\n        glyphs.splice(index, 1);\n      }\n\n      index--;\n    }\n\n    return glyphs;\n  }\n\n  processSubtable(subtable, glyphs) {\n    this.subtable = subtable;\n    this.glyphs = glyphs;\n    if (this.subtable.type === 4) {\n      this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n      return;\n    }\n\n    this.ligatureStack = [];\n    this.markedGlyph = null;\n    this.firstGlyph = null;\n    this.lastGlyph = null;\n    this.markedIndex = null;\n\n    let stateMachine = this.getStateMachine(subtable);\n    let process = this.getProcessor();\n\n    let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n    return stateMachine.process(this.glyphs, reverse, process);\n  }\n\n  @cache\n  getStateMachine(subtable) {\n    return new AATStateMachine(subtable.table.stateTable);\n  }\n\n  getProcessor() {\n    switch (this.subtable.type) {\n      case 0:\n        return this.processIndicRearragement;\n      case 1:\n        return this.processContextualSubstitution;\n      case 2:\n        return this.processLigature;\n      case 4:\n        return this.processNoncontextualSubstitutions;\n      case 5:\n        return this.processGlyphInsertion;\n      default:\n        throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);\n    }\n  }\n\n  processIndicRearragement(glyph, entry, index) {\n    if (entry.flags & MARK_FIRST) {\n      this.firstGlyph = index;\n    }\n\n    if (entry.flags & MARK_LAST) {\n      this.lastGlyph = index;\n    }\n\n    reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n  }\n\n  processContextualSubstitution(glyph, entry, index) {\n    let subsitutions = this.subtable.table.substitutionTable.items;\n    if (entry.markIndex !== 0xffff) {\n      let lookup = subsitutions.getItem(entry.markIndex);\n      let lookupTable = new AATLookupTable(lookup);\n      glyph = this.glyphs[this.markedGlyph];\n      var gid = lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n\n    if (entry.currentIndex !== 0xffff) {\n      let lookup = subsitutions.getItem(entry.currentIndex);\n      let lookupTable = new AATLookupTable(lookup);\n      glyph = this.glyphs[index];\n      var gid = lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n\n    if (entry.flags & SET_MARK) {\n      this.markedGlyph = index;\n    }\n  }\n\n  processLigature(glyph, entry, index) {\n    if (entry.flags & SET_COMPONENT) {\n      this.ligatureStack.push(index);\n    }\n\n    if (entry.flags & PERFORM_ACTION) {\n      let actions = this.subtable.table.ligatureActions;\n      let components = this.subtable.table.components;\n      let ligatureList = this.subtable.table.ligatureList;\n\n      let actionIndex = entry.action;\n      let last = false;\n      let ligatureIndex = 0;\n      let codePoints = [];\n      let ligatureGlyphs = [];\n\n      while (!last) {\n        let componentGlyph = this.ligatureStack.pop();\n        codePoints.unshift(...this.glyphs[componentGlyph].codePoints);\n\n        let action = actions.getItem(actionIndex++);\n        last = !!(action & LAST_MASK);\n        let store = !!(action & STORE_MASK);\n        let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n        offset += this.glyphs[componentGlyph].id;\n\n        let component = components.getItem(offset);\n        ligatureIndex += component;\n\n        if (last || store) {\n          let ligatureEntry = ligatureList.getItem(ligatureIndex);\n          this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n          ligatureGlyphs.push(componentGlyph);\n          ligatureIndex = 0;\n          codePoints = [];\n        } else {\n          this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n        }\n      }\n\n      // Put ligature glyph indexes back on the stack\n      this.ligatureStack.push(...ligatureGlyphs);\n    }\n  }\n\n  processNoncontextualSubstitutions(subtable, glyphs, index) {\n    let lookupTable = new AATLookupTable(subtable.table.lookupTable);\n\n    for (index = 0; index < glyphs.length; index++) {\n      let glyph = glyphs[index];\n      if (glyph.id !== 0xffff) {\n        let gid = lookupTable.lookup(glyph.id);\n        if (gid) { // 0 means do nothing\n          glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n        }\n      }\n    }\n  }\n\n  _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n    let insertions = [];\n    while (count--) {\n      let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n      insertions.push(this.font.getGlyph(gid));\n    }\n\n    if (!isBefore) {\n      glyphIndex++;\n    }\n\n    this.glyphs.splice(glyphIndex, 0, ...insertions);\n  }\n\n  processGlyphInsertion(glyph, entry, index) {\n    if (entry.flags & SET_MARK) {\n      this.markedIndex = index;\n    }\n\n    if (entry.markedInsertIndex !== 0xffff) {\n      let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n      let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n      this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n    }\n\n    if (entry.currentInsertIndex !== 0xffff) {\n      let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n      let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n      this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);\n    }\n  }\n\n  getSupportedFeatures() {\n    let features = [];\n    for (let chain of this.morx.chains) {\n      for (let feature of chain.features) {\n        features.push([feature.featureType, feature.featureSetting]);\n      }\n    }\n\n    return features;\n  }\n\n  generateInputs(gid) {\n    if (!this.inputCache) {\n      this.generateInputCache();\n    }\n\n    return this.inputCache[gid] || [];\n  }\n\n  generateInputCache() {\n    this.inputCache = {};\n\n    for (let chain of this.morx.chains) {\n      let flags = chain.defaultFlags;\n\n      for (let subtable of chain.subtables) {\n        if (subtable.subFeatureFlags & flags) {\n          this.generateInputsForSubtable(subtable);\n        }\n      }\n    }\n  }\n\n  generateInputsForSubtable(subtable) {\n    // Currently, only supporting ligature subtables.\n    if (subtable.type !== 2) {\n      return;\n    }\n\n    let reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n    if (reverse) {\n      throw new Error('Reverse subtable, not supported.');\n    }\n\n    this.subtable = subtable;\n    this.ligatureStack = [];\n\n    let stateMachine = this.getStateMachine(subtable);\n    let process = this.getProcessor();\n\n    let input = [];\n    let stack = [];\n    this.glyphs = [];\n\n    stateMachine.traverse({\n      enter: (glyph, entry) => {\n        let glyphs = this.glyphs;\n        stack.push({\n          glyphs: glyphs.slice(),\n          ligatureStack: this.ligatureStack.slice()\n        });\n\n        // Add glyph to input and glyphs to process.\n        let g = this.font.getGlyph(glyph);\n        input.push(g);\n        glyphs.push(input[input.length - 1]);\n\n        // Process ligature substitution\n        process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);\n\n        // Add input to result if only one matching (non-deleted) glyph remains.\n        let count = 0;\n        let found = 0;\n        for (let i = 0; i < glyphs.length && count <= 1; i++) {\n          if (glyphs[i].id !== 0xffff) {\n            count++;\n            found = glyphs[i].id;\n          }\n        }\n\n        if (count === 1) {\n          let result = input.map(g => g.id);\n          let cache = this.inputCache[found];\n          if (cache) {\n            cache.push(result);\n          } else {\n            this.inputCache[found] = [result];\n          }\n        }\n      },\n\n      exit: () => {\n        ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop());\n        input.pop();\n      }\n    });\n  }\n}\n\n// swaps the glyphs in rangeA with those in rangeB\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\nfunction swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {\n  let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n  if (reverseB) {\n    end.reverse();\n  }\n\n  let start = glyphs.splice(rangeA[0], rangeA[1], ...end);\n  if (reverseA) {\n    start.reverse();\n  }\n\n  glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);\n  return glyphs;\n}\n\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n  let length = lastGlyph - firstGlyph + 1;\n  switch (verb) {\n    case 0: // no change\n      return glyphs;\n\n    case 1: // Ax => xA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n\n    case 2: // xD => Dx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n\n    case 3: // AxD => DxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n\n    case 4: // ABx => xAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n\n    case 5: // ABx => xBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n\n    case 6: // xCD => CDx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n\n    case 7: // xCD => DCx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n\n    case 8: // AxCD => CDxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n\n    case 9: // AxCD => DCxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n\n    case 10: // ABxD => DxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n\n    case 11: // ABxD => DxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n\n    case 12: // ABxCD => CDxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n\n    case 13: // ABxCD => CDxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n\n    case 14: // ABxCD => DCxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n\n    case 15: // ABxCD => DCxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n\n    default:\n      throw new Error(`Unknown verb: ${verb}`);\n  }\n}\n","import AATLookupTable from './AATLookupTable';\n\nconst START_OF_TEXT_STATE = 0;\nconst START_OF_LINE_STATE = 1;\n\nconst END_OF_TEXT_CLASS = 0;\nconst OUT_OF_BOUNDS_CLASS = 1;\nconst DELETED_GLYPH_CLASS = 2;\nconst END_OF_LINE_CLASS = 3;\n\nconst DONT_ADVANCE = 0x4000;\n\nexport default class AATStateMachine {\n  constructor(stateTable) {\n    this.stateTable = stateTable;\n    this.lookupTable = new AATLookupTable(stateTable.classTable);\n  }\n\n  process(glyphs, reverse, processEntry) {\n    let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n    let index = reverse ? glyphs.length - 1 : 0;\n    let dir = reverse ? -1 : 1;\n\n    while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) {\n      let glyph = null;\n      let classCode = OUT_OF_BOUNDS_CLASS;\n      let shouldAdvance = true;\n\n      if (index === glyphs.length || index === -1) {\n        classCode = END_OF_TEXT_CLASS;\n      } else {\n        glyph = glyphs[index];\n        if (glyph.id === 0xffff) { // deleted glyph\n          classCode = DELETED_GLYPH_CLASS;\n        } else {\n          classCode = this.lookupTable.lookup(glyph.id);\n          if (classCode == null) {\n            classCode = OUT_OF_BOUNDS_CLASS;\n          }\n        }\n      }\n\n      let row = this.stateTable.stateArray.getItem(currentState);\n      let entryIndex = row[classCode];\n      let entry = this.stateTable.entryTable.getItem(entryIndex);\n\n      if (classCode !== END_OF_TEXT_CLASS && classCode !==  DELETED_GLYPH_CLASS) {\n        processEntry(glyph, entry, index);\n        shouldAdvance = !(entry.flags & DONT_ADVANCE);\n      }\n\n      currentState = entry.newState;\n      if (shouldAdvance) {\n        index += dir;\n      }\n    }\n\n    return glyphs;\n  }\n\n  /**\n   * Performs a depth-first traversal of the glyph strings\n   * represented by the state machine.\n   */\n  traverse(opts, state = 0, visited = new Set) {\n    if (visited.has(state)) {\n      return;\n    }\n\n    visited.add(state);\n\n    let {nClasses, stateArray, entryTable} = this.stateTable;\n    let row = stateArray.getItem(state);\n\n    // Skip predefined classes\n    for (let classCode = 4; classCode < nClasses; classCode++) {\n      let entryIndex = row[classCode];\n      let entry = entryTable.getItem(entryIndex);\n\n      // Try all glyphs in the class\n      for (let glyph of this.lookupTable.glyphsForValue(classCode)) {\n        if (opts.enter) {\n          opts.enter(glyph, entry);\n        }\n\n        if (entry.newState !== 0) {\n          this.traverse(opts, entry.newState, visited);\n        }\n\n        if (opts.exit) {\n          opts.exit(glyph, entry);\n        }\n      }\n    }\n  }\n}\n","import {cache} from '../decorators';\nimport {range} from '../utils';\n\nexport default class AATLookupTable {\n  constructor(table) {\n    this.table = table;\n  }\n\n  lookup(glyph) {\n    switch (this.table.version) {\n      case 0: // simple array format\n        return this.table.values.getItem(glyph);\n\n      case 2: // segment format\n      case 4: {\n        let min = 0;\n        let max = this.table.binarySearchHeader.nUnits - 1;\n\n        while (min <= max) {\n          var mid = (min + max) >> 1;\n          var seg = this.table.segments[mid];\n\n          // special end of search value\n          if (seg.firstGlyph === 0xffff) {\n            return null;\n          }\n\n          if (glyph < seg.firstGlyph) {\n            max = mid - 1;\n          } else if (glyph > seg.lastGlyph) {\n            min = mid + 1;\n          } else {\n            if (this.table.version === 2) {\n              return seg.value;\n            } else {\n              return seg.values[glyph - seg.firstGlyph];\n            }\n          }\n        }\n\n        return null;\n      }\n\n      case 6: { // lookup single\n        let min = 0;\n        let max = this.table.binarySearchHeader.nUnits - 1;\n\n        while (min <= max) {\n          var mid = (min + max) >> 1;\n          var seg = this.table.segments[mid];\n\n          // special end of search value\n          if (seg.glyph === 0xffff) {\n            return null;\n          }\n\n          if (glyph < seg.glyph) {\n            max = mid - 1;\n          } else if (glyph > seg.glyph) {\n            min = mid + 1;\n          } else {\n            return seg.value;\n          }\n        }\n\n        return null;\n      }\n\n      case 8: // lookup trimmed\n        return this.table.values[glyph - this.table.firstGlyph];\n\n      default:\n        throw new Error(`Unknown lookup table format: ${this.table.version}`);\n    }\n  }\n\n  @cache\n  glyphsForValue(classValue) {\n    let res = [];\n\n    switch (this.table.version) {\n      case 2: // segment format\n      case 4: {\n        for (let segment of this.table.segments) {\n          if ((this.table.version === 2 && segment.value === classValue)) {\n            res.push(...range(segment.firstGlyph, segment.lastGlyph + 1));\n          } else {\n            for (let index = 0; index < segment.values.length; index++) {\n              if (segment.values[index] === classValue) {\n                res.push(segment.firstGlyph + index);\n              }\n            }\n          }\n        }\n\n        break;\n      }\n\n      case 6: { // lookup single\n        for (let segment of this.table.segments) {\n          if (segment.value === classValue) {\n            res.push(segment.glyph);\n          }\n        }\n\n        break;\n      }\n\n      case 8: { // lookup trimmed\n        for (let i = 0; i < this.table.values.length; i++) {\n          if (this.table.values[i] === classValue) {\n            res.push(this.table.firstGlyph + i);\n          }\n        }\n\n        break;\n      }\n\n      default:\n        throw new Error(`Unknown lookup table format: ${this.table.version}`);\n    }\n\n    return res;\n  }\n}\n","import ShapingPlan from './ShapingPlan';\nimport * as Shapers from './shapers';\nimport GlyphInfo from './GlyphInfo';\nimport GSUBProcessor from './GSUBProcessor';\nimport GPOSProcessor from './GPOSProcessor';\n\nexport default class OTLayoutEngine {\n  constructor(font) {\n    this.font = font;\n    this.glyphInfos = null;\n    this.plan = null;\n    this.GSUBProcessor = null;\n    this.GPOSProcessor = null;\n    this.fallbackPosition = true;\n\n    if (font.GSUB) {\n      this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n    }\n\n    if (font.GPOS) {\n      this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n    }\n  }\n\n  setup(glyphRun) {\n    // Map glyphs to GlyphInfo objects so data can be passed between\n    // GSUB and GPOS without mutating the real (shared) Glyph objects.\n    this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints]));\n\n    // Select a script based on what is available in GSUB/GPOS.\n    let script = null;\n    if (this.GPOSProcessor) {\n      script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    }\n\n    if (this.GSUBProcessor) {\n      script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    }\n\n    // Choose a shaper based on the script, and setup a shaping plan.\n    // This determines which features to apply to which glyphs.\n    this.shaper = Shapers.choose(script);\n    this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n    this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);\n\n    // Assign chosen features to output glyph run\n    for (let key in this.plan.allFeatures) {\n      glyphRun.features[key] = true;\n    }\n  }\n\n  substitute(glyphRun) {\n    if (this.GSUBProcessor) {\n      this.plan.process(this.GSUBProcessor, this.glyphInfos);\n\n      // Map glyph infos back to normal Glyph objects\n      glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints));\n    }\n  }\n\n  position(glyphRun) {\n    if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    }\n\n    if (this.GPOSProcessor) {\n      this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n    }\n\n    if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    }\n\n    // Reverse the glyphs and positions if the script is right-to-left\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n      glyphRun.positions.reverse();\n    }\n\n    return this.GPOSProcessor && this.GPOSProcessor.features;\n  }\n\n  zeroMarkAdvances(positions) {\n    for (let i = 0; i < this.glyphInfos.length; i++) {\n      if (this.glyphInfos[i].isMark) {\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  }\n\n  cleanup() {\n    this.glyphInfos = null;\n    this.plan = null;\n    this.shaper = null;\n  }\n\n  getAvailableFeatures(script, language) {\n    let features = [];\n\n    if (this.GSUBProcessor) {\n      this.GSUBProcessor.selectScript(script, language);\n      features.push(...Object.keys(this.GSUBProcessor.features));\n    }\n\n    if (this.GPOSProcessor) {\n      this.GPOSProcessor.selectScript(script, language);\n      features.push(...Object.keys(this.GPOSProcessor.features));\n    }\n\n    return features;\n  }\n}\n","import * as Script from '../layout/Script';\n\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nexport default class ShapingPlan {\n  constructor(font, script, direction) {\n    this.font = font;\n    this.script = script;\n    this.direction = direction;\n    this.stages = [];\n    this.globalFeatures = {};\n    this.allFeatures = {};\n  }\n\n  /**\n   * Adds the given features to the last stage.\n   * Ignores features that have already been applied.\n   */\n  _addFeatures(features, global) {\n    let stageIndex = this.stages.length - 1;\n    let stage = this.stages[stageIndex];\n    for (let feature of features) {\n      if (this.allFeatures[feature] == null) {\n        stage.push(feature);\n        this.allFeatures[feature] = stageIndex;\n\n        if (global) {\n          this.globalFeatures[feature] = true;\n        }\n      }\n    }\n  }\n\n  /**\n   * Add features to the last stage\n   */\n  add(arg, global = true) {\n    if (this.stages.length === 0) {\n      this.stages.push([]);\n    }\n\n    if (typeof arg === 'string') {\n      arg = [arg];\n    }\n\n    if (Array.isArray(arg)) {\n      this._addFeatures(arg, global);\n    } else if (typeof arg === 'object') {\n      this._addFeatures(arg.global || [], true);\n      this._addFeatures(arg.local || [], false);\n    } else {\n      throw new Error(\"Unsupported argument to ShapingPlan#add\");\n    }\n  }\n\n  /**\n   * Add a new stage\n   */\n  addStage(arg, global) {\n    if (typeof arg === 'function') {\n      this.stages.push(arg, []);\n    } else {\n      this.stages.push([]);\n      this.add(arg, global);\n    }\n  }\n\n  setFeatureOverrides(features) {\n    if (Array.isArray(features)) {\n      this.add(features);\n    } else if (typeof features === 'object') {\n      for (let tag in features) {\n        if (features[tag]) {\n          this.add(tag);\n        } else if (this.allFeatures[tag] != null) {\n          let stage = this.stages[this.allFeatures[tag]];\n          stage.splice(stage.indexOf(tag), 1);\n          delete this.allFeatures[tag];\n          delete this.globalFeatures[tag];\n        }\n      }\n    }\n  }\n\n  /**\n   * Assigns the global features to the given glyphs\n   */\n  assignGlobalFeatures(glyphs) {\n    for (let glyph of glyphs) {\n      for (let feature in this.globalFeatures) {\n        glyph.features[feature] = true;\n      }\n    }\n  }\n\n  /**\n   * Executes the planned stages using the given OTProcessor\n   */\n  process(processor, glyphs, positions) {\n    for (let stage of this.stages) {\n      if (typeof stage === 'function') {\n        if (!positions) {\n          stage(this.font, glyphs, this);\n        }\n\n      } else if (stage.length > 0) {\n        processor.applyFeatures(stage, glyphs, positions);\n      }\n    }\n  }\n}\n","import DefaultShaper from './DefaultShaper';\nimport ArabicShaper from './ArabicShaper';\nimport HangulShaper from './HangulShaper';\nimport IndicShaper from './IndicShaper';\nimport UniversalShaper from './UniversalShaper';\n\nconst SHAPERS = {\n  arab: ArabicShaper,    // Arabic\n  mong: ArabicShaper,    // Mongolian\n  syrc: ArabicShaper,    // Syriac\n  'nko ': ArabicShaper,  // N'Ko\n  phag: ArabicShaper,    // Phags Pa\n  mand: ArabicShaper,    // Mandaic\n  mani: ArabicShaper,    // Manichaean\n  phlp: ArabicShaper,    // Psalter Pahlavi\n\n  hang: HangulShaper,    // Hangul\n\n  bng2: IndicShaper,     // Bengali\n  beng: IndicShaper,     // Bengali\n  dev2: IndicShaper,     // Devanagari\n  deva: IndicShaper,     // Devanagari\n  gjr2: IndicShaper,     // Gujarati\n  gujr: IndicShaper,     // Gujarati\n  guru: IndicShaper,     // Gurmukhi\n  gur2: IndicShaper,     // Gurmukhi\n  knda: IndicShaper,     // Kannada\n  knd2: IndicShaper,     // Kannada\n  mlm2: IndicShaper,     // Malayalam\n  mlym: IndicShaper,     // Malayalam\n  ory2: IndicShaper,     // Oriya\n  orya: IndicShaper,     // Oriya\n  taml: IndicShaper,     // Tamil\n  tml2: IndicShaper,     // Tamil\n  telu: IndicShaper,     // Telugu\n  tel2: IndicShaper,     // Telugu\n  khmr: IndicShaper,     // Khmer\n\n  bali: UniversalShaper, // Balinese\n  batk: UniversalShaper, // Batak\n  brah: UniversalShaper, // Brahmi\n  bugi: UniversalShaper, // Buginese\n  buhd: UniversalShaper, // Buhid\n  cakm: UniversalShaper, // Chakma\n  cham: UniversalShaper, // Cham\n  dupl: UniversalShaper, // Duployan\n  egyp: UniversalShaper, // Egyptian Hieroglyphs\n  gran: UniversalShaper, // Grantha\n  hano: UniversalShaper, // Hanunoo\n  java: UniversalShaper, // Javanese\n  kthi: UniversalShaper, // Kaithi\n  kali: UniversalShaper, // Kayah Li\n  khar: UniversalShaper, // Kharoshthi\n  khoj: UniversalShaper, // Khojki\n  sind: UniversalShaper, // Khudawadi\n  lepc: UniversalShaper, // Lepcha\n  limb: UniversalShaper, // Limbu\n  mahj: UniversalShaper, // Mahajani\n  // mand: UniversalShaper, // Mandaic\n  // mani: UniversalShaper, // Manichaean\n  mtei: UniversalShaper, // Meitei Mayek\n  modi: UniversalShaper, // Modi\n  // mong: UniversalShaper, // Mongolian\n  // 'nko ': UniversalShaper, // N’Ko\n  hmng: UniversalShaper, // Pahawh Hmong\n  // phag: UniversalShaper, // Phags-pa\n  // phlp: UniversalShaper, // Psalter Pahlavi\n  rjng: UniversalShaper, // Rejang\n  saur: UniversalShaper, // Saurashtra\n  shrd: UniversalShaper, // Sharada\n  sidd: UniversalShaper, // Siddham\n  sinh: IndicShaper, // Sinhala\n  sund: UniversalShaper, // Sundanese\n  sylo: UniversalShaper, // Syloti Nagri\n  tglg: UniversalShaper, // Tagalog\n  tagb: UniversalShaper, // Tagbanwa\n  tale: UniversalShaper, // Tai Le\n  lana: UniversalShaper, // Tai Tham\n  tavt: UniversalShaper, // Tai Viet\n  takr: UniversalShaper, // Takri\n  tibt: UniversalShaper, // Tibetan\n  tfng: UniversalShaper, // Tifinagh\n  tirh: UniversalShaper, // Tirhuta\n\n  latn: DefaultShaper,   // Latin\n  DFLT: DefaultShaper    // Default\n};\n\nexport function choose(script) {\n  if (!Array.isArray(script)) {\n    script = [script];\n  }\n\n  for (let s of script) {\n    let shaper = SHAPERS[s];\n    if (shaper) {\n      return shaper;\n    }\n  }\n\n  return DefaultShaper;\n}\n","import unicode from 'unicode-properties';\n\nconst VARIATION_FEATURES = ['rvrn'];\nconst COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nconst FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nconst HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nconst VERTICAL_FEATURES = ['vert'];\nconst DIRECTIONAL_FEATURES = {\n  ltr: ['ltra', 'ltrm'],\n  rtl: ['rtla', 'rtlm']\n};\n\nexport default class DefaultShaper {\n  static zeroMarkWidths = 'AFTER_GPOS';\n  static plan(plan, glyphs, features) {\n    // Plan the features we want to apply\n    this.planPreprocessing(plan);\n    this.planFeatures(plan);\n    this.planPostprocessing(plan, features);\n\n    // Assign the global features to all the glyphs\n    plan.assignGlobalFeatures(glyphs);\n\n    // Assign local features to glyphs\n    this.assignFeatures(plan, glyphs);\n  }\n\n  static planPreprocessing(plan) {\n    plan.add({\n      global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]],\n      local: FRACTIONAL_FEATURES\n    });\n  }\n\n  static planFeatures(plan) {\n    // Do nothing by default. Let subclasses override this.\n  }\n\n  static planPostprocessing(plan, userFeatures) {\n    plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]);\n    plan.setFeatureOverrides(userFeatures);\n  }\n\n  static assignFeatures(plan, glyphs) {\n    // Enable contextual fractions\n    for (let i = 0; i < glyphs.length; i++) {\n      let glyph = glyphs[i];\n      if (glyph.codePoints[0] === 0x2044) { // fraction slash\n        let start = i;\n        let end = i + 1;\n\n        // Apply numerator\n        while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\n          glyphs[start - 1].features.numr = true;\n          glyphs[start - 1].features.frac = true;\n          start--;\n        }\n\n        // Apply denominator\n        while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\n          glyphs[end].features.dnom = true;\n          glyphs[end].features.frac = true;\n          end++;\n        }\n\n        // Apply fraction slash\n        glyph.features.frac = true;\n        i = end - 1;\n      }\n    }\n  }\n}\n","import DefaultShaper from './DefaultShaper';\nimport unicode from 'unicode-properties';\nimport UnicodeTrie from 'unicode-trie';\n\nconst trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/data.trie'));\nconst FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\n\nconst ShapingClasses = {\n  Non_Joining: 0,\n  Left_Joining: 1,\n  Right_Joining: 2,\n  Dual_Joining: 3,\n  Join_Causing: 3,\n  ALAPH: 4,\n  'DALATH RISH': 5,\n  Transparent: 6\n};\n\nconst ISOL = 'isol';\nconst FINA = 'fina';\nconst FIN2 = 'fin2';\nconst FIN3 = 'fin3';\nconst MEDI = 'medi';\nconst MED2 = 'med2';\nconst INIT = 'init';\nconst NONE = null;\n\n// Each entry is [prevAction, curAction, nextState]\nconst STATE_TABLE = [\n  //   Non_Joining,        Left_Joining,       Right_Joining,     Dual_Joining,           ALAPH,            DALATH RISH\n  // State 0: prev was U,  not willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ NONE, ISOL, 1 ],  [ NONE, ISOL, 2 ],  [ NONE, ISOL, 1 ],  [ NONE, ISOL, 6 ] ],\n\n  // State 1: prev was R or ISOL/ALAPH,  not willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ NONE, ISOL, 1 ],  [ NONE, ISOL, 2 ],  [ NONE, FIN2, 5 ],  [ NONE, ISOL, 6 ] ],\n\n  // State 2: prev was D/L in ISOL form,  willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ INIT, FINA, 1 ],  [ INIT, FINA, 3 ],  [ INIT, FINA, 4 ],  [ INIT, FINA, 6 ] ],\n\n  // State 3: prev was D in FINA form,  willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ MEDI, FINA, 1 ],  [ MEDI, FINA, 3 ],  [ MEDI, FINA, 4 ],  [ MEDI, FINA, 6 ] ],\n\n  // State 4: prev was FINA ALAPH,  not willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ MED2, ISOL, 1 ],  [ MED2, ISOL, 2 ],  [ MED2, FIN2, 5 ],  [ MED2, ISOL, 6 ] ],\n\n  // State 5: prev was FIN2/FIN3 ALAPH,  not willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ ISOL, ISOL, 1 ],  [ ISOL, ISOL, 2 ],  [ ISOL, FIN2, 5 ],  [ ISOL, ISOL, 6 ] ],\n\n  // State 6: prev was DALATH/RISH,  not willing to join.\n  [ [ NONE, NONE, 0 ],  [ NONE, ISOL, 2 ],  [ NONE, ISOL, 1 ],  [ NONE, ISOL, 2 ],  [ NONE, FIN3, 5 ],  [ NONE, ISOL, 6 ] ]\n];\n\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nexport default class ArabicShaper extends DefaultShaper {\n  static planFeatures(plan) {\n    plan.add(['ccmp', 'locl']);\n    for (let i = 0; i < FEATURES.length; i++) {\n      let feature = FEATURES[i];\n      plan.addStage(feature, false);\n    }\n\n    plan.addStage('mset');\n  }\n\n  static assignFeatures(plan, glyphs) {\n    super.assignFeatures(plan, glyphs);\n\n    let prev = -1;\n    let state = 0;\n    let actions = [];\n\n    // Apply the state machine to map glyphs to features\n    for (let i = 0; i < glyphs.length; i++) {\n      let curAction, prevAction;\n      var glyph = glyphs[i];\n      let type = getShapingClass(glyph.codePoints[0]);\n      if (type === ShapingClasses.Transparent) {\n        actions[i] = NONE;\n        continue;\n      }\n\n      [prevAction, curAction, state] = STATE_TABLE[state][type];\n\n      if (prevAction !== NONE && prev !== -1) {\n        actions[prev] = prevAction;\n      }\n\n      actions[i] = curAction;\n      prev = i;\n    }\n\n    // Apply the chosen features to their respective glyphs\n    for (let index = 0; index < glyphs.length; index++) {\n      let feature;\n      var glyph = glyphs[index];\n      if (feature = actions[index]) {\n        glyph.features[feature] = true;\n      }\n    }\n  }\n}\n\nfunction getShapingClass(codePoint) {\n  let res = trie.get(codePoint);\n  if (res) {\n    return res - 1;\n  }\n\n  let category = unicode.getCategory(codePoint);\n  if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n    return ShapingClasses.Transparent;\n  }\n\n  return ShapingClasses.Non_Joining;\n}\n","import DefaultShaper from './DefaultShaper';\nimport GlyphInfo from '../GlyphInfo';\n\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n *   - decompose if unsupported by the font:\n *     <LV>   -> <L,V>\n *     <LVT>  -> <L,V,T>\n *     <LV,T> -> <L,V,T>\n *\n *   - compose if supported by the font:\n *     <L,V>   -> <LV>\n *     <L,V,T> -> <LVT>\n *     <LV,T>  -> <LVT>\n *\n *   - reorder tone marks (S is any valid syllable):\n *     <S, M> -> <M, S>\n *\n *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nexport default class HangulShaper extends DefaultShaper {\n  static zeroMarkWidths = 'NONE';\n  static planFeatures(plan) {\n    plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n  }\n\n  static assignFeatures(plan, glyphs) {\n    let state = 0;\n    let i = 0;\n    while (i < glyphs.length) {\n      let action;\n      let glyph = glyphs[i];\n      let code = glyph.codePoints[0];\n      let type = getType(code);\n\n      [ action, state ] = STATE_TABLE[state][type];\n\n      switch (action) {\n        case DECOMPOSE:\n          // Decompose the composed syllable if it is not supported by the font.\n          if (!plan.font.hasGlyphForCodePoint(code)) {\n            i = decompose(glyphs, i, plan.font);\n          }\n          break;\n\n        case COMPOSE:\n          // Found a decomposed syllable. Try to compose if supported by the font.\n          i = compose(glyphs, i, plan.font);\n          break;\n\n        case TONE_MARK:\n          // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n          reorderToneMark(glyphs, i, plan.font);\n          break;\n\n        case INVALID:\n          // Tone mark has no valid syllable to attach to, so insert a dotted circle\n          i = insertDottedCircle(glyphs, i, plan.font);\n          break;\n      }\n\n      i++;\n    }\n  }\n}\n\nconst HANGUL_BASE  = 0xac00;\nconst HANGUL_END   = 0xd7a4;\nconst HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nconst L_BASE  = 0x1100; // lead\nconst V_BASE  = 0x1161; // vowel\nconst T_BASE  = 0x11a7; // trail\nconst L_COUNT = 19;\nconst V_COUNT = 21;\nconst T_COUNT = 28;\nconst L_END   = L_BASE + L_COUNT - 1;\nconst V_END   = V_BASE + V_COUNT - 1;\nconst T_END   = T_BASE + T_COUNT - 1;\nconst DOTTED_CIRCLE = 0x25cc;\n\nconst isL    = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\nconst isV    = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\nconst isT    = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\nconst isTone = code => 0x302e <= code && code <= 0x302f;\nconst isLVT  = code => HANGUL_BASE <= code && code <= HANGUL_END;\nconst isLV   = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\nconst isCombiningL = code => L_BASE <= code && code <= L_END;\nconst isCombiningV = code => V_BASE <= code && code <= V_END;\nconst isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;\n\n// Character categories\nconst X   = 0; // Other character\nconst L   = 1; // Leading consonant\nconst V   = 2; // Medial vowel\nconst T   = 3; // Trailing consonant\nconst LV  = 4; // Composed <LV> syllable\nconst LVT = 5; // Composed <LVT> syllable\nconst M   = 6; // Tone mark\n\n// This function classifies a character using the above categories.\nfunction getType(code) {\n  if (isL(code))    { return L; }\n  if (isV(code))    { return V; }\n  if (isT(code))    { return T; }\n  if (isLV(code))   { return LV; }\n  if (isLVT(code))  { return LVT; }\n  if (isTone(code)) { return M; }\n  return X;\n}\n\n// State machine actions\nconst NO_ACTION = 0;\nconst DECOMPOSE = 1;\nconst COMPOSE   = 2;\nconst TONE_MARK = 4;\nconst INVALID   = 5;\n\n// Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\nconst STATE_TABLE = [\n  //       X                 L                 V                T                  LV                LVT               M\n  // State 0: start state\n  [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [  INVALID, 0  ] ],\n\n  // State 1: <L>\n  [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [  COMPOSE, 2  ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [  INVALID, 0  ] ],\n\n  // State 2: <L,V> or <LV>\n  [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [  COMPOSE, 3  ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ],\n\n  // State 3: <L,V,T> or <LVT>\n  [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ]\n];\n\nfunction getGlyph(font, code, features) {\n  return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\n\nfunction decompose(glyphs, i, font) {\n  let glyph = glyphs[i];\n  let code = glyph.codePoints[0];\n\n  let s = code - HANGUL_BASE;\n  let t = T_BASE + s % T_COUNT;\n  s = s / T_COUNT | 0;\n  let l = L_BASE + s / V_COUNT | 0;\n  let v = V_BASE + s % V_COUNT;\n\n  // Don't decompose if all of the components are not available\n  if (!font.hasGlyphForCodePoint(l) ||\n      !font.hasGlyphForCodePoint(v) ||\n      (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {\n    return i;\n  }\n\n  // Replace the current glyph with decomposed L, V, and T glyphs,\n  // and apply the proper OpenType features to each component.\n  let ljmo = getGlyph(font, l, glyph.features);\n  ljmo.features.ljmo = true;\n\n  let vjmo = getGlyph(font, v, glyph.features);\n  vjmo.features.vjmo = true;\n\n  let insert = [ ljmo, vjmo ];\n\n  if (t > T_BASE) {\n    let tjmo = getGlyph(font, t, glyph.features);\n    tjmo.features.tjmo = true;\n    insert.push(tjmo);\n  }\n\n  glyphs.splice(i, 1, ...insert);\n  return i + insert.length - 1;\n}\n\nfunction compose(glyphs, i, font) {\n  let glyph = glyphs[i];\n  let code = glyphs[i].codePoints[0];\n  let type = getType(code);\n\n  let prev = glyphs[i - 1].codePoints[0];\n  let prevType = getType(prev);\n\n  // Figure out what type of syllable we're dealing with\n  let lv, ljmo, vjmo, tjmo;\n  if (prevType === LV && type === T) {\n    // <LV,T>\n    lv = prev;\n    tjmo = glyph;\n  } else {\n    if (type === V) {\n      // <L,V>\n      ljmo = glyphs[i - 1];\n      vjmo = glyph;\n    } else {\n      // <L,V,T>\n      ljmo = glyphs[i - 2];\n      vjmo = glyphs[i - 1];\n      tjmo = glyph;\n    }\n\n    let l = ljmo.codePoints[0];\n    let v = vjmo.codePoints[0];\n\n    // Make sure L and V are combining characters\n    if (isCombiningL(l) && isCombiningV(v)) {\n      lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n    }\n  }\n\n  let t = (tjmo && tjmo.codePoints[0]) || T_BASE;\n  if ((lv != null) && (t === T_BASE || isCombiningT(t))) {\n    let s = lv + (t - T_BASE);\n\n    // Replace with a composed glyph if supported by the font,\n    // otherwise apply the proper OpenType features to each component.\n    if (font.hasGlyphForCodePoint(s)) {\n      let del = prevType === V ? 3 : 2;\n      glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n      return i - del + 1;\n    }\n  }\n\n  // Didn't compose (either a non-combining component or unsupported by font).\n  if (ljmo) { ljmo.features.ljmo = true; }\n  if (vjmo) { vjmo.features.vjmo = true; }\n  if (tjmo) { tjmo.features.tjmo = true; }\n\n  if (prevType === LV) {\n    // Sequence was originally <L,V>, which got combined earlier.\n    // Either the T was non-combining, or the LVT glyph wasn't supported.\n    // Decompose the glyph again and apply OT features.\n    decompose(glyphs, i - 1, font);\n    return i + 1;\n  }\n\n  return i;\n}\n\nfunction getLength(code) {\n  switch (getType(code)) {\n    case LV:\n    case LVT:\n      return 1;\n    case V:\n      return 2;\n    case T:\n      return 3;\n  }\n}\n\nfunction reorderToneMark(glyphs, i, font) {\n  let glyph = glyphs[i];\n  let code = glyphs[i].codePoints[0];\n\n  // Move tone mark to the beginning of the previous syllable, unless it is zero width\n  if (font.glyphForCodePoint(code).advanceWidth === 0) { return; }\n\n  let prev = glyphs[i - 1].codePoints[0];\n  let len = getLength(prev);\n\n  glyphs.splice(i, 1);\n  return glyphs.splice(i - len, 0, glyph);\n}\n\nfunction insertDottedCircle(glyphs, i, font) {\n  let glyph = glyphs[i];\n  let code = glyphs[i].codePoints[0];\n\n  if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n    let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);\n\n    // If the tone mark is zero width, insert the dotted circle before, otherwise after\n    let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n    glyphs.splice(idx, 0, dottedCircle);\n    i++;\n  }\n\n  return i;\n}\n","import unicode from 'unicode-properties';\nimport OTProcessor from './OTProcessor';\n\nexport default class GlyphInfo {\n  constructor(font, id, codePoints = [], features) {\n    this._font = font;\n    this.codePoints = codePoints;\n    this.id = id;\n\n    this.features = {};\n    if (Array.isArray(features)) {\n      for (let i = 0; i < features.length; i++) {\n        let feature = features[i];\n        this.features[feature] = true;\n      }\n    } else if (typeof features === 'object') {\n      Object.assign(this.features, features);\n    }\n\n    this.ligatureID = null;\n    this.ligatureComponent = null;\n    this.isLigated = false;\n    this.cursiveAttachment = null;\n    this.markAttachment = null;\n    this.shaperInfo = null;\n    this.substituted = false;\n    this.isMultiplied = false;\n  }\n\n  get id() {\n    return this._id;\n  }\n\n  set id(id) {\n    this._id = id;\n    this.substituted = true;\n\n    let GDEF = this._font.GDEF;\n    if (GDEF && GDEF.glyphClassDef) {\n      // TODO: clean this up\n      let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n      this.isBase = classID === 1;\n      this.isLigature = classID === 2;\n      this.isMark = classID === 3;\n      this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n    } else {\n      this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n      this.isBase = !this.isMark;\n      this.isLigature = this.codePoints.length > 1;\n      this.markAttachmentType = 0;\n    }\n  }\n\n  copy() {\n    return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n  }\n}\n","import GlyphIterator from './GlyphIterator';\nimport * as Script from '../layout/Script';\n\nconst DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\n\nexport default class OTProcessor {\n  constructor(font, table) {\n    this.font = font;\n    this.table = table;\n\n    this.script = null;\n    this.scriptTag = null;\n\n    this.language = null;\n    this.languageTag = null;\n\n    this.features = {};\n    this.lookups = {};\n\n    // Setup variation substitutions\n    this.variationsIndex = font._variationProcessor\n      ? this.findVariationsIndex(font._variationProcessor.normalizedCoords)\n      : -1;\n\n    // initialize to default script + language\n    this.selectScript();\n\n    // current context (set by applyFeatures)\n    this.glyphs = [];\n    this.positions = []; // only used by GPOS\n    this.ligatureID = 1;\n    this.currentFeature = null;\n  }\n\n  findScript(script) {\n    if (this.table.scriptList == null) {\n      return null;\n    }\n\n    if (!Array.isArray(script)) {\n      script = [script];\n    }\n\n    for (let s of script) {\n      for (let entry of this.table.scriptList) {\n        if (entry.tag === s) {\n          return entry;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  selectScript(script, language, direction) {\n    let changed = false;\n    let entry;\n    if (!this.script || script !== this.scriptTag) {\n      entry = this.findScript(script);\n      if (!entry) {\n        entry = this.findScript(DEFAULT_SCRIPTS);\n      }\n\n      if (!entry) {\n        return this.scriptTag;\n      }\n\n      this.scriptTag = entry.tag;\n      this.script = entry.script;\n      this.language = null;\n      this.languageTag = null;\n      changed = true;\n    }\n\n    if (!direction || direction !== this.direction) {\n      this.direction = direction || Script.direction(script);\n    }\n\n    if (language && language.length < 4) {\n      language += ' '.repeat(4 - language.length);\n    }\n\n    if (!language || language !== this.languageTag) {\n      this.language = null;\n\n      for (let lang of this.script.langSysRecords) {\n        if (lang.tag === language) {\n          this.language = lang.langSys;\n          this.languageTag = lang.tag;\n          break;\n        }\n      }\n\n      if (!this.language) {\n        this.language = this.script.defaultLangSys;\n        this.languageTag = null;\n      }\n\n      changed = true;\n    }\n\n    // Build a feature lookup table\n    if (changed) {\n      this.features = {};\n      if (this.language) {\n        for (let featureIndex of this.language.featureIndexes) {\n          let record = this.table.featureList[featureIndex];\n          let substituteFeature = this.substituteFeatureForVariations(featureIndex);\n          this.features[record.tag] = substituteFeature || record.feature;\n        }\n      }\n    }\n\n    return this.scriptTag;\n  }\n\n  lookupsForFeatures(userFeatures = [], exclude) {\n    let lookups = [];\n    for (let tag of userFeatures) {\n      let feature = this.features[tag];\n      if (!feature) {\n        continue;\n      }\n\n      for (let lookupIndex of feature.lookupListIndexes) {\n        if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n          continue;\n        }\n\n        lookups.push({\n          feature: tag,\n          index: lookupIndex,\n          lookup: this.table.lookupList.get(lookupIndex)\n        });\n      }\n    }\n\n    lookups.sort((a, b) => a.index - b.index);\n    return lookups;\n  }\n\n  substituteFeatureForVariations(featureIndex) {\n    if (this.variationsIndex === -1) {\n      return null;\n    }\n\n    let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n    let substitutions = record.featureTableSubstitution.substitutions;\n    for (let substitution of substitutions) {\n      if (substitution.featureIndex === featureIndex) {\n        return substitution.alternateFeatureTable;\n      }\n    }\n\n    return null;\n  }\n\n  findVariationsIndex(coords) {\n    let variations = this.table.featureVariations;\n    if (!variations) {\n      return -1;\n    }\n\n    let records = variations.featureVariationRecords;\n    for (let i = 0; i < records.length; i++) {\n      let conditions = records[i].conditionSet.conditionTable;\n      if (this.variationConditionsMatch(conditions, coords)) {\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  variationConditionsMatch(conditions, coords) {\n    return conditions.every(condition => {\n      let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n      return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n    });\n  }\n\n  applyFeatures(userFeatures, glyphs, advances) {\n    let lookups = this.lookupsForFeatures(userFeatures);\n    this.applyLookups(lookups, glyphs, advances);\n  }\n\n  applyLookups(lookups, glyphs, positions) {\n    this.glyphs = glyphs;\n    this.positions = positions;\n    this.glyphIterator = new GlyphIterator(glyphs);\n\n    for (let { feature, lookup } of lookups) {\n      this.currentFeature = feature;\n      this.glyphIterator.reset(lookup.flags);\n\n      while (this.glyphIterator.index < glyphs.length) {\n        if (!(feature in this.glyphIterator.cur.features)) {\n          this.glyphIterator.next();\n          continue;\n        }\n\n        for (let table of lookup.subTables) {\n          let res = this.applyLookup(lookup.lookupType, table);\n          if (res) {\n            break;\n          }\n        }\n\n        this.glyphIterator.next();\n      }\n    }\n  }\n\n  applyLookup(lookup, table) {\n    throw new Error(\"applyLookup must be implemented by subclasses\");\n  }\n\n  applyLookupList(lookupRecords) {\n    let options = this.glyphIterator.options;\n    let glyphIndex = this.glyphIterator.index;\n\n    for (let lookupRecord of lookupRecords) {\n      // Reset flags and find glyph index for this lookup record\n      this.glyphIterator.reset(options, glyphIndex);\n      this.glyphIterator.increment(lookupRecord.sequenceIndex);\n\n      // Get the lookup and setup flags for subtables\n      let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n      this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);\n\n      // Apply lookup subtables until one matches\n      for (let table of lookup.subTables) {\n        if (this.applyLookup(lookup.lookupType, table)) {\n          break;\n        }\n      }\n    }\n\n    this.glyphIterator.reset(options, glyphIndex);\n    return true;\n  }\n\n  coverageIndex(coverage, glyph) {\n    if (glyph == null) {\n      glyph = this.glyphIterator.cur.id;\n    }\n\n    switch (coverage.version) {\n      case 1:\n        return coverage.glyphs.indexOf(glyph);\n\n      case 2:\n        for (let range of coverage.rangeRecords) {\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.startCoverageIndex + glyph - range.start;\n          }\n        }\n\n        break;\n    }\n\n    return -1;\n  }\n\n  match(sequenceIndex, sequence, fn, matched) {\n    let pos = this.glyphIterator.index;\n    let glyph = this.glyphIterator.increment(sequenceIndex);\n    let idx = 0;\n\n    while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n      if (matched) {\n        matched.push(this.glyphIterator.index);\n      }\n\n      idx++;\n      glyph = this.glyphIterator.next();\n    }\n\n    this.glyphIterator.index = pos;\n    if (idx < sequence.length) {\n      return false;\n    }\n\n    return matched || true;\n  }\n\n  sequenceMatches(sequenceIndex, sequence) {\n    return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id);\n  }\n\n  sequenceMatchIndices(sequenceIndex, sequence) {\n    return this.match(sequenceIndex, sequence, (component, glyph) => {\n      // If the current feature doesn't apply to this glyph,\n      if (!(this.currentFeature in glyph.features)) {\n        return false;\n      }\n\n      return component === glyph.id;\n    }, []);\n  }\n\n  coverageSequenceMatches(sequenceIndex, sequence) {\n    return this.match(sequenceIndex, sequence, (coverage, glyph) =>\n      this.coverageIndex(coverage, glyph.id) >= 0\n    );\n  }\n\n  getClassID(glyph, classDef) {\n    switch (classDef.version) {\n      case 1: // Class array\n        let i = glyph - classDef.startGlyph;\n        if (i >= 0 && i < classDef.classValueArray.length) {\n          return classDef.classValueArray[i];\n        }\n\n        break;\n\n      case 2:\n        for (let range of classDef.classRangeRecord) {\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.class;\n          }\n        }\n\n        break;\n    }\n\n    return 0;\n  }\n\n  classSequenceMatches(sequenceIndex, sequence, classDef) {\n    return this.match(sequenceIndex, sequence, (classID, glyph) =>\n      classID === this.getClassID(glyph.id, classDef)\n    );\n  }\n\n  applyContext(table) {\n    let index, set;\n    switch (table.version) {\n      case 1:\n        index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n\n        set = table.ruleSets[index];\n        for (let rule of set) {\n          if (this.sequenceMatches(1, rule.input)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n\n        break;\n\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n\n        index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n        if (index === -1) {\n          return false;\n        }\n\n        set = table.classSet[index];\n        for (let rule of set) {\n          if (this.classSequenceMatches(1, rule.classes, table.classDef)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n\n        break;\n\n      case 3:\n        if (this.coverageSequenceMatches(0, table.coverages)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n\n        break;\n    }\n\n    return false;\n  }\n\n  applyChainingContext(table) {\n    let index;\n    switch (table.version) {\n      case 1:\n        index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n\n        let set = table.chainRuleSets[index];\n        for (let rule of set) {\n          if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack)\n            && this.sequenceMatches(1, rule.input)\n            && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n\n        break;\n\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n\n        index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n        let rules = table.chainClassSet[index];\n        if (!rules) {\n          return false;\n        }\n\n        for (let rule of rules) {\n          if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) &&\n            this.classSequenceMatches(1, rule.input, table.inputClassDef) &&\n            this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n\n        break;\n\n      case 3:\n        if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) &&\n          this.coverageSequenceMatches(0, table.inputCoverage) &&\n          this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n\n        break;\n    }\n\n    return false;\n  }\n}\n","export default class GlyphIterator {\n  constructor(glyphs, options) {\n    this.glyphs = glyphs;\n    this.reset(options);\n  }\n\n  reset(options = {}, index = 0) {\n    this.options = options;\n    this.flags = options.flags || {};\n    this.markAttachmentType = options.markAttachmentType || 0;\n    this.index = index;\n  }\n\n  get cur() {\n    return this.glyphs[this.index] || null;\n  }\n\n  shouldIgnore(glyph) {\n    return (this.flags.ignoreMarks && glyph.isMark) ||\n           (this.flags.ignoreBaseGlyphs && glyph.isBase) ||\n           (this.flags.ignoreLigatures && glyph.isLigature) ||\n           (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType);\n  }\n\n  move(dir) {\n    this.index += dir;\n    while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n      this.index += dir;\n    }\n\n    if (0 > this.index || this.index >= this.glyphs.length) {\n      return null;\n    }\n\n    return this.glyphs[this.index];\n  }\n\n  next() {\n    return this.move(+1);\n  }\n\n  prev() {\n    return this.move(-1);\n  }\n\n  peek(count = 1) {\n    let idx = this.index;\n    let res = this.increment(count);\n    this.index = idx;\n    return res;\n  }\n\n  peekIndex(count = 1) {\n    let idx = this.index;\n    this.increment(count);\n    let res = this.index;\n    this.index = idx;\n    return res;\n  }\n\n  increment(count = 1) {\n    let dir = count < 0 ? -1 : 1;\n    count = Math.abs(count);\n    while (count--) {\n      this.move(dir);\n    }\n\n    return this.glyphs[this.index];\n  }\n}\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport unicode from 'unicode-properties';\nimport * as Script from '../../layout/Script';\nimport GlyphInfo from '../GlyphInfo';\nimport indicMachine from './indic.json';\nimport useData from './use.json';\nimport {\n  CATEGORIES,\n  POSITIONS,\n  CONSONANT_FLAGS,\n  JOINER_FLAGS,\n  HALANT_OR_COENG_FLAGS, INDIC_CONFIGS,\n  INDIC_DECOMPOSITIONS\n} from './indic-data';\n\nconst {decompositions} = useData;\nconst trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/indic.trie'));\nconst stateMachine = new StateMachine(indicMachine);\n\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nexport default class IndicShaper extends DefaultShaper {\n  static zeroMarkWidths = 'NONE';\n  static planFeatures(plan) {\n    plan.addStage(setupSyllables);\n\n    plan.addStage(['locl', 'ccmp']);\n\n    plan.addStage(initialReordering);\n\n    plan.addStage('nukt');\n    plan.addStage('akhn');\n    plan.addStage('rphf', false);\n    plan.addStage('rkrf');\n    plan.addStage('pref', false);\n    plan.addStage('blwf', false);\n    plan.addStage('abvf', false);\n    plan.addStage('half', false);\n    plan.addStage('pstf', false);\n    plan.addStage('vatu');\n    plan.addStage('cjct');\n    plan.addStage('cfar', false);\n\n    plan.addStage(finalReordering);\n\n    plan.addStage({\n      local: ['init'],\n      global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n    });\n\n    // Setup the indic config for the selected script\n    plan.unicodeScript = Script.fromOpenType(plan.script);\n    plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n    plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';\n\n    // TODO: turn off kern (Khmer) and liga features.\n  }\n\n  static assignFeatures(plan, glyphs) {\n    // Decompose split matras\n    // TODO: do this in a more general unicode normalizer\n    for (let i = glyphs.length - 1; i >= 0; i--) {\n      let codepoint = glyphs[i].codePoints[0];\n      let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];\n      if (d) {\n        let decomposed = d.map(c => {\n          let g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n\n        glyphs.splice(i, 1, ...decomposed);\n      }\n    }\n  }\n}\n\nfunction indicCategory(glyph) {\n  return trie.get(glyph.codePoints[0]) >> 8;\n}\n\nfunction indicPosition(glyph) {\n  return 1 << (trie.get(glyph.codePoints[0]) & 0xff);\n}\n\nclass IndicInfo {\n  constructor(category, position, syllableType, syllable) {\n    this.category = category;\n    this.position = position;\n    this.syllableType = syllableType;\n    this.syllable = syllable;\n  }\n}\n\nfunction setupSyllables(font, glyphs) {\n  let syllable = 0;\n  let last = 0;\n  for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) {\n    if (start > last) {\n      ++syllable;\n      for (let i = last; i < start; i++) {\n        glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n      }\n    }\n\n    ++syllable;\n\n    // Create shaper info\n    for (let i = start; i <= end; i++) {\n      glyphs[i].shaperInfo = new IndicInfo(\n        1 << indicCategory(glyphs[i]),\n        indicPosition(glyphs[i]),\n        tags[0],\n        syllable\n      );\n    }\n\n    last = end + 1;\n  }\n\n  if (last < glyphs.length) {\n    ++syllable;\n    for (let i = last; i < glyphs.length; i++) {\n      glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n    }\n  }\n}\n\nfunction isConsonant(glyph) {\n  return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\n\nfunction isJoiner(glyph) {\n  return glyph.shaperInfo.category & JOINER_FLAGS;\n}\n\nfunction isHalantOrCoeng(glyph) {\n  return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\n\nfunction wouldSubstitute(glyphs, feature) {\n  for (let glyph of glyphs) {\n    glyph.features = {[feature]: true};\n  }\n\n  let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n  GSUB.applyFeatures([feature], glyphs);\n\n  return glyphs.length === 1;\n}\n\nfunction consonantPosition(font, consonant, virama) {\n  let glyphs = [virama, consonant, virama];\n  if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n    return POSITIONS.Below_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n    return POSITIONS.Post_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n    return POSITIONS.Post_C;\n  }\n\n  return POSITIONS.Base_C;\n}\n\nfunction initialReordering(font, glyphs, plan) {\n  let indicConfig = plan.indicConfig;\n  let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n  let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  let virama = font.glyphForCodePoint(indicConfig.virama).id;\n  if (virama) {\n    let info = new GlyphInfo(font, virama, [indicConfig.virama]);\n    for (let i = 0; i < glyphs.length; i++) {\n      if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n        glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n      }\n    }\n  }\n\n  for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    let {category, syllableType} = glyphs[start].shaperInfo;\n\n    if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n      continue;\n    }\n\n    if (syllableType === 'broken_cluster' && dottedCircle) {\n      let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = new IndicInfo(\n        1 << indicCategory(g),\n        indicPosition(g),\n        glyphs[start].shaperInfo.syllableType,\n        glyphs[start].shaperInfo.syllable\n      );\n\n      // Insert after possible Repha.\n      let i = start;\n      while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) {\n        i++;\n      }\n\n      glyphs.splice(i++, 0, g);\n      end++;\n    }\n\n    // 1. Find base consonant:\n    //\n    // The shaping engine finds the base consonant of the syllable, using the\n    // following algorithm: starting from the end of the syllable, move backwards\n    // until a consonant is found that does not have a below-base or post-base\n    // form (post-base forms have to follow below-base forms), or that is not a\n    // pre-base reordering Ra, or arrive at the first consonant. The consonant\n    // stopped at will be the base.\n\n    let base = end;\n    let limit = start;\n    let hasReph = false;\n\n    // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n    if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph &&\n      features.rphf &&\n      start + 3 <= end && (\n        (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) ||\n        (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)\n      )\n    ) {\n      // See if it matches the 'rphf' feature.\n      let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n      if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) {\n        limit += 2;\n        while (limit < end && isJoiner(glyphs[limit])) {\n          limit++;\n        }\n        base = start;\n        hasReph = true;\n      }\n    } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n      limit++;\n      while (limit < end && isJoiner(glyphs[limit])) {\n        limit++;\n      }\n      base = start;\n      hasReph = true;\n    }\n\n    switch (indicConfig.basePos) {\n      case 'Last': {\n        // starting from the end of the syllable, move backwards\n        let i = end;\n        let seenBelow = false;\n\n        do {\n          let info = glyphs[--i].shaperInfo;\n\n          // until a consonant is found\n          if (isConsonant(glyphs[i])) {\n            // that does not have a below-base or post-base form\n            // (post-base forms have to follow below-base forms),\n            if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) {\n              base = i;\n              break;\n            }\n\n            // or that is not a pre-base reordering Ra,\n            //\n            // IMPLEMENTATION NOTES:\n            //\n            // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n            // by the logic above already.\n            //\n\n            // or arrive at the first consonant. The consonant stopped at will\n            // be the base.\n            if (info.position === POSITIONS.Below_C) {\n              seenBelow = true;\n            }\n\n            base = i;\n          } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) {\n            // A ZWJ after a Halant stops the base search, and requests an explicit\n            // half form.\n            // A ZWJ before a Halant, requests a subjoined form instead, and hence\n            // search continues.  This is particularly important for Bengali\n            // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n            break;\n          }\n        } while (i > limit);\n        break;\n      }\n\n      case 'First': {\n        // The first consonant is always the base.\n        base = start;\n\n        // Mark all subsequent consonants as below.\n        for (let i = base + 1; i < end; i++) {\n          if (isConsonant(glyphs[i])) {\n            glyphs[i].shaperInfo.position = POSITIONS.Below_C;\n          }\n        }\n      }\n    }\n\n    // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n    //\n    //  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n    if (hasReph && base === start && limit - base <= 2) {\n      hasReph = false;\n    }\n\n    // 2. Decompose and reorder Matras:\n    //\n    // Each matra and any syllable modifier sign in the cluster are moved to the\n    // appropriate position relative to the consonant(s) in the cluster. The\n    // shaping engine decomposes two- or three-part matras into their constituent\n    // parts before any repositioning. Matra characters are classified by which\n    // consonant in a conjunct they have affinity for and are reordered to the\n    // following positions:\n    //\n    //   o Before first half form in the syllable\n    //   o After subjoined consonants\n    //   o After post-form consonant\n    //   o After main consonant (for above marks)\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // The normalize() routine has already decomposed matras for us, so we don't\n    // need to worry about that.\n\n    // 3.  Reorder marks to canonical order:\n    //\n    // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n    // if necessary, so that the nukta is first.\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // We don't need to do this: the normalize() routine already did this for us.\n\n    // Reorder characters\n\n    for (let i = start; i < base; i++) {\n      let info = glyphs[i].shaperInfo;\n      info.position = Math.min(POSITIONS.Pre_C, info.position);\n    }\n\n    if (base < end) {\n      glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n    }\n\n    // Mark final consonants.  A final consonant is one appearing after a matra,\n    // like in Khmer.\n    for (let i = base + 1; i < end; i++) {\n      if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n        for (let j = i + 1; j < end; j++) {\n          if (isConsonant(glyphs[j])) {\n            glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n            break;\n          }\n        }\n        break;\n      }\n    }\n\n    // Handle beginning Ra\n    if (hasReph) {\n      glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n    }\n\n    // For old-style Indic script tags, move the first post-base Halant after\n    // last consonant.\n    //\n    // Reports suggest that in some scripts Uniscribe does this only if there\n    // is *not* a Halant after last consonant already (eg. Kannada), while it\n    // does it unconditionally in other scripts (eg. Malayalam).  We don't\n    // currently know about other scripts, so we single out Malayalam for now.\n    //\n    // Kannada test case:\n    // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n    // With some versions of Lohit Kannada.\n    // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n    //\n    // Malayalam test case:\n    // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n    // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n    if (plan.isOldSpec) {\n      let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n      for (let i = base + 1; i < end; i++) {\n        if (glyphs[i].shaperInfo.category === CATEGORIES.H) {\n          let j;\n          for (j = end - 1; j > i; j--) {\n            if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) {\n              break;\n            }\n          }\n\n          if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) {\n            // Move Halant to after last consonant.\n            let t = glyphs[i];\n            glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));\n            glyphs[j] = t;\n          }\n\n          break;\n        }\n      }\n    }\n\n    // Attach misc marks to previous char to move with them.\n    let lastPos = POSITIONS.Start;\n    for (let i = start; i < end; i++) {\n      let info = glyphs[i].shaperInfo;\n      if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) {\n        info.position = lastPos;\n        if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) {\n          // Uniscribe doesn't move the Halant with Left Matra.\n          // TEST: U+092B,U+093F,U+094DE\n          // We follow.  This is important for the Sinhala\n          // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n          // where U+0DD9 is a left matra and U+0DCA is the virama.\n          // We don't want to move the virama with the left matra.\n          // TEST: U+0D9A,U+0DDA\n          for (let j = i; j > start; j--) {\n            if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n              info.position = glyphs[j - 1].shaperInfo.position;\n              break;\n            }\n          }\n        }\n      } else if (info.position !== POSITIONS.SMVD) {\n        lastPos = info.position;\n      }\n    }\n\n    // For post-base consonants let them own anything before them\n    // since the last consonant or matra.\n    let last = base;\n    for (let i = base + 1; i < end; i++) {\n      if (isConsonant(glyphs[i])) {\n        for (let j = last + 1; j < i; j++) {\n          if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) {\n            glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position;\n          }\n        }\n        last = i;\n      } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n        last = i;\n      }\n    }\n\n    let arr = glyphs.slice(start, end);\n    arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position);\n    glyphs.splice(start, arr.length, ...arr);\n\n    // Find base again\n    for (let i = start; i < end; i++) {\n      if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n        base = i;\n        break;\n      }\n    }\n\n    // Setup features now\n\n    // Reph\n    for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) {\n      glyphs[i].features.rphf = true;\n    }\n\n    // Pre-base\n    let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n    for (let i = start; i < base; i++) {\n      glyphs[i].features.half = true;\n      if (blwf) {\n        glyphs[i].features.blwf = true;\n      }\n    }\n\n    // Post-base\n    for (let i = base + 1; i < end; i++) {\n      glyphs[i].features.abvf = true;\n      glyphs[i].features.pstf = true;\n      glyphs[i].features.blwf = true;\n    }\n\n    if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n      // Old-spec eye-lash Ra needs special handling.  From the\n      // spec:\n      //\n      // \"The feature 'below-base form' is applied to consonants\n      // having below-base forms and following the base consonant.\n      // The exception is vattu, which may appear below half forms\n      // as well as below the base glyph. The feature 'below-base\n      // form' will be applied to all such occurrences of Ra as well.\"\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n      // with Sanskrit 2003 font.\n      //\n      // However, note that Ra,Halant,ZWJ is the correct way to\n      // request eyelash form of Ra, so we wouldbn't inhibit it\n      // in that sequence.\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n      for (let i = start; i + 1 < base; i++) {\n        if (glyphs[i].shaperInfo.category === CATEGORIES.Ra &&\n          glyphs[i + 1].shaperInfo.category === CATEGORIES.H &&\n          (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)\n        ) {\n          glyphs[i].features.blwf = true;\n          glyphs[i + 1].features.blwf = true;\n        }\n      }\n    }\n\n    let prefLen = 2;\n    if (features.pref && base + prefLen < end) {\n      // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n      for (let i = base + 1; i + prefLen - 1 < end; i++) {\n        let g = [glyphs[i].copy(), glyphs[i + 1].copy()];\n        if (wouldSubstitute(g, 'pref')) {\n          for (let j = 0; j < prefLen; j++) {\n            glyphs[i++].features.pref = true;\n          }\n\n          // Mark the subsequent stuff with 'cfar'.  Used in Khmer.\n          // Read the feature spec.\n          // This allows distinguishing the following cases with MS Khmer fonts:\n          // U+1784,U+17D2,U+179A,U+17D2,U+1782\n          // U+1784,U+17D2,U+1782,U+17D2,U+179A\n          if (features.cfar) {\n            for (; i < end; i++) {\n              glyphs[i].features.cfar = true;\n            }\n          }\n\n          break;\n        }\n      }\n    }\n\n    // Apply ZWJ/ZWNJ effects\n    for (let i = start + 1; i < end; i++) {\n      if (isJoiner(glyphs[i])) {\n        let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ;\n        let j = i;\n\n        do {\n          j--;\n\n          // ZWJ/ZWNJ should disable CJCT.  They do that by simply\n          // being there, since we don't skip them for the CJCT\n          // feature (ie. F_MANUAL_ZWJ)\n\n          // A ZWNJ disables HALF.\n          if (nonJoiner) {\n            delete glyphs[j].features.half;\n          }\n        } while (j > start && !isConsonant(glyphs[j]));\n      }\n    }\n  }\n}\n\nfunction finalReordering(font, glyphs, plan) {\n  let indicConfig = plan.indicConfig;\n  let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n  for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    // 4. Final reordering:\n    //\n    // After the localized forms and basic shaping forms GSUB features have been\n    // applied (see below), the shaping engine performs some final glyph\n    // reordering before applying all the remaining font features to the entire\n    // cluster.\n\n    let tryPref = !!features.pref;\n\n    // Find base again\n    let base = start;\n    for (; base < end; base++) {\n      if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n        if (tryPref && base + 1 < end) {\n          for (let i = base + 1; i < end; i++) {\n            if (glyphs[i].features.pref) {\n              if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n                // Ok, this was a 'pref' candidate but didn't form any.\n                // Base is around here...\n                base = i;\n                while (base < end && isHalantOrCoeng(glyphs[base])) {\n                  base++;\n                }\n                glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n                tryPref = false;\n              }\n              break;\n            }\n          }\n        }\n\n        // For Malayalam, skip over unformed below- (but NOT post-) forms.\n        if (plan.unicodeScript === 'Malayalam') {\n          for (let i = base + 1; i < end; i++) {\n            while (i < end && isJoiner(glyphs[i])) {\n              i++;\n            }\n\n            if (i === end || !isHalantOrCoeng(glyphs[i])) {\n              break;\n            }\n\n            i++; // Skip halant.\n            while (i < end && isJoiner(glyphs[i])) {\n              i++;\n            }\n\n            if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) {\n              base = i;\n              glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n            }\n          }\n        }\n\n        if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n          base--;\n        }\n        break;\n      }\n    }\n\n    if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n      base--;\n    }\n\n    if (base < end) {\n      while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n        base--;\n      }\n    }\n\n    // o Reorder matras:\n    //\n    // If a pre-base matra character had been reordered before applying basic\n    // features, the glyph can be moved closer to the main consonant based on\n    // whether half-forms had been formed. Actual position for the matra is\n    // defined as “after last standalone halant glyph, after initial matra\n    // position and before the main consonant”. If ZWJ or ZWNJ follow this\n    // halant, position is moved after it.\n    //\n\n    if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters.\n      // If we lost track of base, alas, position before last thingy.\n      let newPos = base === end ? base - 2 : base - 1;\n\n      // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n      // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n      // We want to position matra after them.\n      if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n        while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n          newPos--;\n        }\n\n        // If we found no Halant we are done.\n        // Otherwise only proceed if the Halant does\n        // not belong to the Matra itself!\n        if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n          // If ZWJ or ZWNJ follow this halant, position is moved after it.\n          if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n            newPos++;\n          }\n        } else {\n          newPos = start; // No move.\n        }\n      }\n\n      if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n        // Now go see if there's actually any matras...\n        for (let i = newPos; i > start; i--) {\n          if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) {\n            let oldPos = i - 1;\n            if (oldPos < base && base <= newPos) { // Shouldn't actually happen.\n              base--;\n            }\n\n            let tmp = glyphs[oldPos];\n            glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));\n            glyphs[newPos] = tmp;\n\n            newPos--;\n          }\n        }\n      }\n    }\n\n    // o Reorder reph:\n    //\n    // Reph’s original position is always at the beginning of the syllable,\n    // (i.e. it is not reordered at the character reordering stage). However,\n    // it will be reordered according to the basic-forms shaping results.\n    // Possible positions for reph, depending on the script, are; after main,\n    // before post-base consonant forms, and after post-base consonant forms.\n\n    // Two cases:\n    //\n    // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n    //   we should only move it if the sequence ligated to the repha form.\n    //\n    // - If repha is encoded separately and in the logical position, we should only\n    //   move it if it did NOT ligate.  If it ligated, it's probably the font trying\n    //   to make it work without the reordering.\n    if (start + 1 < end &&\n      glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph &&\n      (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)\n    ) {\n      let newRephPos;\n      let rephPos = indicConfig.rephPos;\n      let found = false;\n\n      // 1. If reph should be positioned after post-base consonant forms,\n      //    proceed to step 5.\n      if (rephPos !== POSITIONS.After_Post) {\n        //  2. If the reph repositioning class is not after post-base: target\n        //     position is after the first explicit halant glyph between the\n        //     first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n        //     are following this halant, position is moved after it. If such\n        //     position is found, this is the target position. Otherwise,\n        //     proceed to the next step.\n        //\n        //     Note: in old-implementation fonts, where classifications were\n        //     fixed in shaping engine, there was no case where reph position\n        //     will be found on this step.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n\n          found = true;\n        }\n\n        // 3. If reph should be repositioned after the main consonant: find the\n        //    first consonant not ligated with main, or find the first\n        //    consonant that is not a potential pre-base reordering Ra.\n        if (!found && rephPos === POSITIONS.After_Main) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n            newRephPos++;\n          }\n\n          found = newRephPos < end;\n        }\n\n        // 4. If reph should be positioned before post-base consonant, find\n        //    first post-base classified consonant not ligated with main. If no\n        //    consonant is found, the target position should be before the\n        //    first matra, syllable modifier sign or vedic sign.\n        //\n        // This is our take on what step 4 is trying to say (and failing, BADLY).\n        if (!found && rephPos === POSITIONS.After_Sub) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n            newRephPos++;\n          }\n\n          found = newRephPos < end;\n        }\n      }\n\n      //  5. If no consonant is found in steps 3 or 4, move reph to a position\n      //     immediately before the first post-base matra, syllable modifier\n      //     sign or vedic sign that has a reordering class after the intended\n      //     reph position. For example, if the reordering position for reph\n      //     is post-main, it will skip above-base matras that also have a\n      //     post-main position.\n      if (!found) {\n        // Copied from step 2.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n\n          found = true;\n        }\n      }\n\n      // 6. Otherwise, reorder reph to the end of the syllable.\n      if (!found) {\n        newRephPos = end - 1;\n        while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n          newRephPos--;\n        }\n\n        // If the Reph is to be ending up after a Matra,Halant sequence,\n        // position it before that Halant so it can interact with the Matra.\n        // However, if it's a plain Consonant,Halant we shouldn't do that.\n        // Uniscribe doesn't do this.\n        // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n        if (isHalantOrCoeng(glyphs[newRephPos])) {\n          for (let i = base + 1; i < newRephPos; i++) {\n            if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n              newRephPos--;\n            }\n          }\n        }\n      }\n\n      let reph = glyphs[start];\n      glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));\n      glyphs[newRephPos] = reph;\n\n      if (start < base && base <= newRephPos) {\n        base--;\n      }\n    }\n\n    // o Reorder pre-base reordering consonants:\n    //\n    // If a pre-base reordering consonant is found, reorder it according to\n    // the following rules:\n    if (tryPref && base + 1 < end) {\n      for (let i = base + 1; i < end; i++) {\n        if (glyphs[i].features.pref) {\n           // 1. Only reorder a glyph produced by substitution during application\n           //    of the <pref> feature. (Note that a font may shape a Ra consonant with\n           //    the feature generally but block it in certain contexts.)\n\n          // Note: We just check that something got substituted.  We don't check that\n          // the <pref> feature actually did it...\n          //\n          // Reorder pref only if it ligated.\n          if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {\n            // 2. Try to find a target position the same way as for pre-base matra.\n            //    If it is found, reorder pre-base consonant glyph.\n            //\n            // 3. If position is not found, reorder immediately before main\n            //    consonant.\n            let newPos = base;\n\n            // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n            // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n            // We want to position matra after them.\n            if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n              while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n                newPos--;\n              }\n\n              // In Khmer coeng model, a H,Ra can go *after* matras.  If it goes after a\n              // split matra, it should be reordered to *before* the left part of such matra.\n              if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) {\n                let oldPos = i;\n                for (let j = base + 1; j < oldPos; j++) {\n                  if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n                    newPos--;\n                    break;\n                  }\n                }\n              }\n            }\n\n            if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) {\n              // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n              if (newPos < end && isJoiner(glyphs[newPos])) {\n                newPos++;\n              }\n            }\n\n            let oldPos = i;\n            let tmp = glyphs[oldPos];\n            glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));\n            glyphs[newPos] = tmp;\n\n            if (newPos <= base && base < oldPos) {\n              base++;\n            }\n          }\n\n          break;\n        }\n      }\n    }\n\n    // Apply 'init' to the Left Matra if it's a word start.\n    if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\n      glyphs[start].features.init = true;\n    }\n  }\n}\n\nfunction nextSyllable(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  let syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n  return start;\n}\n","{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}","{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,23,0,0,2,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}","// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nexport const CATEGORIES = {\n  X: 1 << 0,\n  C: 1 << 1,\n  V: 1 << 2,\n  N: 1 << 3,\n  H: 1 << 4,\n  ZWNJ: 1 << 5,\n  ZWJ: 1 << 6,\n  M: 1 << 7,\n  SM: 1 << 8,\n  VD: 1 << 9,\n  A: 1 << 10,\n  Placeholder: 1 << 11,\n  Dotted_Circle: 1 << 12,\n  RS: 1 << 13,    // Register Shifter, used in Khmer OT spec.\n  Coeng: 1 << 14, // Khmer-style Virama.\n  Repha: 1 << 15, // Atomically-encoded logical or visual repha.\n  Ra: 1 << 16,\n  CM: 1 << 17,    // Consonant-Medial.\n  Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n};\n\n// Visual positions in a syllable from left to right.\nexport const POSITIONS = {\n  Start: 1 << 0,\n\n  Ra_To_Become_Reph: 1 << 1,\n  Pre_M: 1 << 2,\n  Pre_C: 1 << 3,\n\n  Base_C: 1 << 4,\n  After_Main: 1 << 5,\n\n  Above_C: 1 << 6,\n\n  Before_Sub: 1 << 7,\n  Below_C: 1 << 8,\n  After_Sub: 1 << 9,\n\n  Before_Post: 1 << 10,\n  Post_C: 1 << 11,\n  After_Post: 1 << 12,\n\n  Final_C: 1 << 13,\n  SMVD: 1 << 14,\n\n  End: 1 << 15\n};\n\nexport const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nexport const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nexport const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\n\nexport const INDIC_CONFIGS = {\n  Default: {\n    hasOldSpec: false,\n    virama: 0,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Devanagari: {\n    hasOldSpec: true,\n    virama: 0x094D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Bengali: {\n    hasOldSpec: true,\n    virama: 0x09CD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Gurmukhi: {\n    hasOldSpec: true,\n    virama: 0x0A4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Gujarati: {\n    hasOldSpec: true,\n    virama: 0x0ACD,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Oriya: {\n    hasOldSpec: true,\n    virama: 0x0B4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Tamil: {\n    hasOldSpec: true,\n    virama: 0x0BCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  Telugu: {\n    hasOldSpec: true,\n    virama: 0x0C4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Explicit',\n    blwfMode: 'Post_Only'\n  },\n\n  Kannada: {\n    hasOldSpec: true,\n    virama: 0x0CCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Post_Only'\n  },\n\n  Malayalam: {\n    hasOldSpec: true,\n    virama: 0x0D4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Log_Repha',\n    blwfMode: 'Pre_And_Post'\n  },\n\n  // Handled by UniversalShaper\n  // Sinhala: {\n  //   hasOldSpec: false,\n  //   virama: 0x0DCA,\n  //   basePos: 'Last_Sinhala',\n  //   rephPos: POSITIONS.After_Main,\n  //   rephMode: 'Explicit',\n  //   blwfMode: 'Pre_And_Post'\n  // },\n\n  Khmer: {\n    hasOldSpec: false,\n    virama: 0x17D2,\n    basePos: 'First',\n    rephPos: POSITIONS.Ra_To_Become_Reph,\n    rephMode: 'Vis_Repha',\n    blwfMode: 'Pre_And_Post'\n  }\n};\n\n// Additional decompositions that aren't in Unicode\nexport const INDIC_DECOMPOSITIONS = {\n  // Khmer\n  0x17BE: [0x17C1, 0x17BE],\n  0x17BF: [0x17C1, 0x17BF],\n  0x17C0: [0x17C1, 0x17C0],\n  0x17C4: [0x17C1, 0x17C4],\n  0x17C5: [0x17C1, 0x17C5]\n};\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport GlyphInfo from '../GlyphInfo';\nimport useData from './use.json';\n\nconst {categories, decompositions} = useData;\nconst trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/use.trie'));\nconst stateMachine = new StateMachine(useData);\n\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nexport default class UniversalShaper extends DefaultShaper {\n  static zeroMarkWidths = 'BEFORE_GPOS';\n  static planFeatures(plan) {\n    plan.addStage(setupSyllables);\n\n    // Default glyph pre-processing group\n    plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);\n\n    // Reordering group\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['rphf'], false);\n    plan.addStage(recordRphf);\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['pref']);\n    plan.addStage(recordPref);\n\n    // Orthographic unit shaping group\n    plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n    plan.addStage(reorder);\n\n    // Topographical features\n    // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n    // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n\n    // Standard topographic presentation and positional feature application\n    plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n  }\n\n  static assignFeatures(plan, glyphs) {\n    // Decompose split vowels\n    // TODO: do this in a more general unicode normalizer\n    for (let i = glyphs.length - 1; i >= 0; i--) {\n      let codepoint = glyphs[i].codePoints[0];\n      if (decompositions[codepoint]) {\n        let decomposed = decompositions[codepoint].map(c => {\n          let g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n\n        glyphs.splice(i, 1, ...decomposed);\n      }\n    }\n  }\n}\n\nfunction useCategory(glyph) {\n  return trie.get(glyph.codePoints[0]);\n}\n\nclass USEInfo {\n  constructor(category, syllableType, syllable) {\n    this.category = category;\n    this.syllableType = syllableType;\n    this.syllable = syllable;\n  }\n}\n\nfunction setupSyllables(font, glyphs) {\n  let syllable = 0;\n  for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) {\n    ++syllable;\n\n    // Create shaper info\n    for (let i = start; i <= end; i++) {\n      glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable);\n    }\n\n    // Assign rphf feature\n    let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n    for (let i = start; i < start + limit; i++) {\n      glyphs[i].features.rphf = true;\n    }\n  }\n}\n\nfunction clearSubstitutionFlags(font, glyphs) {\n  for (let glyph of glyphs) {\n    glyph.substituted = false;\n  }\n}\n\nfunction recordRphf(font, glyphs) {\n  for (let glyph of glyphs) {\n    if (glyph.substituted && glyph.features.rphf) {\n      // Mark a substituted repha.\n      glyph.shaperInfo.category = 'R';\n    }\n  }\n}\n\nfunction recordPref(font, glyphs) {\n  for (let glyph of glyphs) {\n    if (glyph.substituted) {\n      // Mark a substituted pref as VPre, as they behave the same way.\n      glyph.shaperInfo.category = 'VPre';\n    }\n  }\n}\n\nfunction reorder(font, glyphs) {\n  let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n\n  for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    let i, j;\n    let info = glyphs[start].shaperInfo;\n    let type = info.syllableType;\n\n    // Only a few syllable types need reordering.\n    if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n      continue;\n    }\n\n    // Insert a dotted circle glyph in broken clusters.\n    if (type === 'broken_cluster' && dottedCircle) {\n      let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = info;\n\n      // Insert after possible Repha.\n      for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);\n      glyphs.splice(++i, 0, g);\n      end++;\n    }\n\n    // Move things forward.\n    if (info.category === 'R' && end - start > 1) {\n      // Got a repha. Reorder it to after first base, before first halant.\n      for (i = start + 1; i < end; i++) {\n        info = glyphs[i].shaperInfo;\n        if (isBase(info) || isHalant(glyphs[i])) {\n          // If we hit a halant, move before it; otherwise it's a base: move to it's\n          // place, and shift things in between backward.\n          if (isHalant(glyphs[i])) {\n            i--;\n          }\n\n          glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);\n          break;\n        }\n      }\n    }\n\n    // Move things back.\n    for (i = start, j = end; i < end; i++) {\n      info = glyphs[i].shaperInfo;\n      if (isBase(info) || isHalant(glyphs[i])) {\n        // If we hit a halant, move after it; otherwise it's a base: move to it's\n        // place, and shift things in between backward.\n        j = isHalant(glyphs[i]) ? i + 1 : i;\n      } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n        glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));\n      }\n    }\n  }\n}\n\nfunction nextSyllable(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  let syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n  return start;\n}\n\nfunction isHalant(glyph) {\n  return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\n\nfunction isBase(info) {\n  return info.category === 'B' || info.category === 'GB';\n}\n","import OTProcessor from './OTProcessor';\nimport GlyphInfo from './GlyphInfo';\n\nexport default class GSUBProcessor extends OTProcessor {\n  applyLookup(lookupType, table) {\n    switch (lookupType) {\n      case 1: { // Single Substitution\n        let index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n\n        let glyph = this.glyphIterator.cur;\n        switch (table.version) {\n          case 1:\n            glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff;\n            break;\n\n          case 2:\n            glyph.id = table.substitute.get(index);\n            break;\n        }\n\n        return true;\n      }\n\n      case 2: { // Multiple Substitution\n        let index = this.coverageIndex(table.coverage);\n        if (index !== -1) {\n          let sequence = table.sequences.get(index);\n\n          if (sequence.length === 0) {\n            // If the sequence length is zero, delete the glyph.\n            // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n            this.glyphs.splice(this.glyphIterator.index, 1);\n            return true;\n          }\n\n          this.glyphIterator.cur.id = sequence[0];\n          this.glyphIterator.cur.ligatureComponent = 0;\n\n          let features = this.glyphIterator.cur.features;\n          let curGlyph = this.glyphIterator.cur;\n          let replacement = sequence.slice(1).map((gid, i) => {\n            let glyph = new GlyphInfo(this.font, gid, undefined, features);\n            glyph.shaperInfo = curGlyph.shaperInfo;\n            glyph.isLigated = curGlyph.isLigated;\n            glyph.ligatureComponent = i + 1;\n            glyph.substituted = true;\n            glyph.isMultiplied = true;\n            return glyph;\n          });\n\n          this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);\n          return true;\n        }\n\n        return false;\n      }\n\n      case 3: { // Alternate Substitution\n        let index = this.coverageIndex(table.coverage);\n        if (index !== -1) {\n          let USER_INDEX = 0; // TODO\n          this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];\n          return true;\n        }\n\n        return false;\n      }\n\n      case 4: { // Ligature Substitution\n        let index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n\n        for (let ligature of table.ligatureSets.get(index)) {\n          let matched = this.sequenceMatchIndices(1, ligature.components);\n          if (!matched) {\n            continue;\n          }\n\n          let curGlyph = this.glyphIterator.cur;\n\n          // Concatenate all of the characters the new ligature will represent\n          let characters = curGlyph.codePoints.slice();\n          for (let index of matched) {\n            characters.push(...this.glyphs[index].codePoints);\n          }\n\n          // Create the replacement ligature glyph\n          let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features);\n          ligatureGlyph.shaperInfo = curGlyph.shaperInfo;\n          ligatureGlyph.isLigated = true;\n          ligatureGlyph.substituted = true;\n\n          // From Harfbuzz:\n          // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n          //   the ligature to keep its old ligature id.  This will allow it to attach to\n          //   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n          //   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n          //   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature\n          //   later, we don't want them to lose their ligature id/component, otherwise\n          //   GPOS will fail to correctly position the mark ligature on top of the\n          //   LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n          //\n          // - If a ligature is formed of components that some of which are also ligatures\n          //   themselves, and those ligature components had marks attached to *their*\n          //   components, we have to attach the marks to the new ligature component\n          //   positions!  Now *that*'s tricky!  And these marks may be following the\n          //   last component of the whole sequence, so we should loop forward looking\n          //   for them and update them.\n          //\n          //   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n          //   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n          //   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature\n          //   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to\n          //   the new ligature with a component value of 2.\n          //\n          //   This in fact happened to a font...  See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n          let isMarkLigature = curGlyph.isMark;\n          for (let i = 0; i < matched.length && isMarkLigature; i++) {\n            isMarkLigature = this.glyphs[matched[i]].isMark;\n          }\n\n          ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n\n          let lastLigID = curGlyph.ligatureID;\n          let lastNumComps = curGlyph.codePoints.length;\n          let curComps = lastNumComps;\n          let idx = this.glyphIterator.index + 1;\n\n          // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n          // This allows GPOS to attach marks to the correct ligature components.\n          for (let matchIndex of matched) {\n            // Don't assign new ligature components for mark ligatures (see above)\n            if (isMarkLigature) {\n              idx = matchIndex;\n            } else {\n              while (idx < matchIndex) {\n                var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n                this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n                this.glyphs[idx].ligatureComponent = ligatureComponent;\n                idx++;\n              }\n            }\n\n            lastLigID = this.glyphs[idx].ligatureID;\n            lastNumComps = this.glyphs[idx].codePoints.length;\n            curComps += lastNumComps;\n            idx++; // skip base glyph\n          }\n\n          // Adjust ligature components for any marks following\n          if (lastLigID && !isMarkLigature) {\n            for (let i = idx; i < this.glyphs.length; i++) {\n              if (this.glyphs[i].ligatureID === lastLigID) {\n                var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps);\n                this.glyphs[i].ligatureComponent = ligatureComponent;\n              } else {\n                break;\n              }\n            }\n          }\n\n          // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n          for (let i = matched.length - 1; i >= 0; i--) {\n            this.glyphs.splice(matched[i], 1);\n          }\n\n          this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n          return true;\n        }\n\n        return false;\n      }\n\n      case 5: // Contextual Substitution\n        return this.applyContext(table);\n\n      case 6: // Chaining Contextual Substitution\n        return this.applyChainingContext(table);\n\n      case 7: // Extension Substitution\n        return this.applyLookup(table.lookupType, table.extension);\n\n      default:\n        throw new Error(`GSUB lookupType ${lookupType} is not supported`);\n    }\n  }\n}\n","import OTProcessor from './OTProcessor';\n\nexport default class GPOSProcessor extends OTProcessor {\n  applyPositionValue(sequenceIndex, value) {\n    let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n    if (value.xAdvance != null) {\n      position.xAdvance += value.xAdvance;\n    }\n\n    if (value.yAdvance != null) {\n      position.yAdvance += value.yAdvance;\n    }\n\n    if (value.xPlacement != null) {\n      position.xOffset += value.xPlacement;\n    }\n\n    if (value.yPlacement != null) {\n      position.yOffset += value.yPlacement;\n    }\n\n    // Adjustments for font variations\n    let variationProcessor = this.font._variationProcessor;\n    let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (value.xPlaDevice) {\n        position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n      }\n\n      if (value.yPlaDevice) {\n        position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n      }\n\n      if (value.xAdvDevice) {\n        position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n      }\n\n      if (value.yAdvDevice) {\n        position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n      }\n    }\n\n    // TODO: device tables\n  }\n\n  applyLookup(lookupType, table) {\n    switch (lookupType) {\n      case 1: { // Single positioning value\n        let index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n\n        switch (table.version) {\n          case 1:\n            this.applyPositionValue(0, table.value);\n            break;\n\n          case 2:\n            this.applyPositionValue(0, table.values.get(index));\n            break;\n        }\n\n        return true;\n      }\n\n      case 2: { // Pair Adjustment Positioning\n        let nextGlyph = this.glyphIterator.peek();\n        if (!nextGlyph) {\n          return false;\n        }\n\n        let index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n\n        switch (table.version) {\n          case 1: // Adjustments for glyph pairs\n            let set = table.pairSets.get(index);\n\n            for (let pair of set) {\n              if (pair.secondGlyph === nextGlyph.id) {\n                this.applyPositionValue(0, pair.value1);\n                this.applyPositionValue(1, pair.value2);\n                return true;\n              }\n            }\n\n            return false;\n\n          case 2: // Class pair adjustment\n            let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n            let class2 = this.getClassID(nextGlyph.id, table.classDef2);\n            if (class1 === -1 || class2 === -1) {\n              return false;\n            }\n\n            var pair = table.classRecords.get(class1).get(class2);\n            this.applyPositionValue(0, pair.value1);\n            this.applyPositionValue(1, pair.value2);\n            return true;\n        }\n      }\n\n      case 3: { // Cursive Attachment Positioning\n        let nextIndex = this.glyphIterator.peekIndex();\n        let nextGlyph = this.glyphs[nextIndex];\n        if (!nextGlyph) {\n          return false;\n        }\n\n        let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n        if (!curRecord || !curRecord.exitAnchor) {\n          return false;\n        }\n\n        let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];\n        if (!nextRecord || !nextRecord.entryAnchor) {\n          return false;\n        }\n\n        let entry = this.getAnchor(nextRecord.entryAnchor);\n        let exit = this.getAnchor(curRecord.exitAnchor);\n\n        let cur = this.positions[this.glyphIterator.index];\n        let next = this.positions[nextIndex];\n        let d;\n\n        switch (this.direction) {\n          case 'ltr':\n            cur.xAdvance = exit.x + cur.xOffset;\n\n            d = entry.x + next.xOffset;\n            next.xAdvance -= d;\n            next.xOffset -= d;\n            break;\n\n          case 'rtl':\n            d = exit.x + cur.xOffset;\n            cur.xAdvance -= d;\n            cur.xOffset -= d;\n            next.xAdvance = entry.x + next.xOffset;\n            break;\n        }\n\n        if (this.glyphIterator.flags.rightToLeft) {\n          this.glyphIterator.cur.cursiveAttachment = nextIndex;\n          cur.yOffset = entry.y - exit.y;\n        } else {\n          nextGlyph.cursiveAttachment = this.glyphIterator.index;\n          cur.yOffset = exit.y - entry.y;\n        }\n\n        return true;\n      }\n\n      case 4: { // Mark to base positioning\n        let markIndex = this.coverageIndex(table.markCoverage);\n        if (markIndex === -1) {\n          return false;\n        }\n\n        // search backward for a base glyph\n        let baseGlyphIndex = this.glyphIterator.index;\n        while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));\n\n        if (baseGlyphIndex < 0) {\n          return false;\n        }\n\n        let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n        if (baseIndex === -1) {\n          return false;\n        }\n\n        let markRecord = table.markArray[markIndex];\n        let baseAnchor = table.baseArray[baseIndex][markRecord.class];\n        this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n        return true;\n      }\n\n      case 5: { // Mark to ligature positioning\n        let markIndex = this.coverageIndex(table.markCoverage);\n        if (markIndex === -1) {\n          return false;\n        }\n\n        // search backward for a base glyph\n        let baseGlyphIndex = this.glyphIterator.index;\n        while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);\n\n        if (baseGlyphIndex < 0) {\n          return false;\n        }\n\n        let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);\n        if (ligIndex === -1) {\n          return false;\n        }\n\n        let ligAttach = table.ligatureArray[ligIndex];\n        let markGlyph = this.glyphIterator.cur;\n        let ligGlyph = this.glyphs[baseGlyphIndex];\n        let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0)\n          ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1\n          : ligGlyph.codePoints.length - 1;\n\n        let markRecord = table.markArray[markIndex];\n        let baseAnchor = ligAttach[compIndex][markRecord.class];\n        this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n        return true;\n      }\n\n      case 6: { // Mark to mark positioning\n        let mark1Index = this.coverageIndex(table.mark1Coverage);\n        if (mark1Index === -1) {\n          return false;\n        }\n\n        // get the previous mark to attach to\n        let prevIndex = this.glyphIterator.peekIndex(-1);\n        let prev = this.glyphs[prevIndex];\n        if (!prev || !prev.isMark) {\n          return false;\n        }\n\n        let cur = this.glyphIterator.cur;\n\n        // The following logic was borrowed from Harfbuzz\n        let good = false;\n        if (cur.ligatureID === prev.ligatureID) {\n          if (!cur.ligatureID) { // Marks belonging to the same base\n            good = true;\n          } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component\n            good = true;\n          }\n        } else {\n          // If ligature ids don't match, it may be the case that one of the marks\n          // itself is a ligature, in which case match.\n          if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) {\n            good = true;\n          }\n        }\n\n        if (!good) {\n          return false;\n        }\n\n        let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n        if (mark2Index === -1) {\n          return false;\n        }\n\n        let markRecord = table.mark1Array[mark1Index];\n        let baseAnchor = table.mark2Array[mark2Index][markRecord.class];\n        this.applyAnchor(markRecord, baseAnchor, prevIndex);\n        return true;\n      }\n\n      case 7: // Contextual positioning\n        return this.applyContext(table);\n\n      case 8: // Chaining contextual positioning\n        return this.applyChainingContext(table);\n\n      case 9: // Extension positioning\n        return this.applyLookup(table.lookupType, table.extension);\n\n      default:\n        throw new Error(`Unsupported GPOS table: ${lookupType}`);\n    }\n  }\n\n  applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n    let baseCoords = this.getAnchor(baseAnchor);\n    let markCoords = this.getAnchor(markRecord.markAnchor);\n\n    let basePos = this.positions[baseGlyphIndex];\n    let markPos = this.positions[this.glyphIterator.index];\n\n    markPos.xOffset = baseCoords.x - markCoords.x;\n    markPos.yOffset = baseCoords.y - markCoords.y;\n    this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n  }\n\n  getAnchor(anchor) {\n    // TODO: contour point, device tables\n    let x = anchor.xCoordinate;\n    let y = anchor.yCoordinate;\n\n    // Adjustments for font variations\n    let variationProcessor = this.font._variationProcessor;\n    let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (anchor.xDeviceTable) {\n        x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n      }\n\n      if (anchor.yDeviceTable) {\n        y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n      }\n    }\n\n    return { x, y };\n  }\n\n  applyFeatures(userFeatures, glyphs, advances) {\n    super.applyFeatures(userFeatures, glyphs, advances);\n\n    for (var i = 0; i < this.glyphs.length; i++) {\n      this.fixCursiveAttachment(i);\n    }\n\n    this.fixMarkAttachment();\n  }\n\n  fixCursiveAttachment(i) {\n    let glyph = this.glyphs[i];\n    if (glyph.cursiveAttachment != null) {\n      let j = glyph.cursiveAttachment;\n\n      glyph.cursiveAttachment = null;\n      this.fixCursiveAttachment(j);\n\n      this.positions[i].yOffset += this.positions[j].yOffset;\n    }\n  }\n\n  fixMarkAttachment() {\n    for (let i = 0; i < this.glyphs.length; i++) {\n      let glyph = this.glyphs[i];\n      if (glyph.markAttachment != null) {\n        let j = glyph.markAttachment;\n\n        this.positions[i].xOffset += this.positions[j].xOffset;\n        this.positions[i].yOffset += this.positions[j].yOffset;\n\n        if (this.direction === 'ltr') {\n          for (let k = j; k < i; k++) {\n            this.positions[i].xOffset -= this.positions[k].xAdvance;\n            this.positions[i].yOffset -= this.positions[k].yAdvance;\n          }\n        } else {\n          for (let k = j + 1; k < i + 1; k++) {\n            this.positions[i].xOffset += this.positions[k].xAdvance;\n            this.positions[i].yOffset += this.positions[k].yAdvance;\n          }\n        }\n      }\n    }\n  }\n}\n","import Glyph from './Glyph';\nimport Path from './Path';\nimport BBox from './BBox';\nimport r from 'restructure';\n\n// The header for both simple and composite glyphs\nlet GlyfHeader = new r.Struct({\n  numberOfContours: r.int16, // if negative, this is a composite glyph\n  xMin:             r.int16,\n  yMin:             r.int16,\n  xMax:             r.int16,\n  yMax:             r.int16\n});\n\n// Flags for simple glyphs\nconst ON_CURVE        = 1 << 0;\nconst X_SHORT_VECTOR  = 1 << 1;\nconst Y_SHORT_VECTOR  = 1 << 2;\nconst REPEAT          = 1 << 3;\nconst SAME_X          = 1 << 4;\nconst SAME_Y          = 1 << 5;\n\n// Flags for composite glyphs\nconst ARG_1_AND_2_ARE_WORDS     = 1 << 0;\nconst ARGS_ARE_XY_VALUES        = 1 << 1;\nconst ROUND_XY_TO_GRID          = 1 << 2;\nconst WE_HAVE_A_SCALE           = 1 << 3;\nconst MORE_COMPONENTS           = 1 << 5;\nconst WE_HAVE_AN_X_AND_Y_SCALE  = 1 << 6;\nconst WE_HAVE_A_TWO_BY_TWO      = 1 << 7;\nconst WE_HAVE_INSTRUCTIONS      = 1 << 8;\nconst USE_MY_METRICS            = 1 << 9;\nconst OVERLAP_COMPOUND          = 1 << 10;\nconst SCALED_COMPONENT_OFFSET   = 1 << 11;\nconst UNSCALED_COMPONENT_OFFSET = 1 << 12;\n\n// Represents a point in a simple glyph\nexport class Point {\n  constructor(onCurve, endContour, x = 0, y = 0) {\n    this.onCurve = onCurve;\n    this.endContour = endContour;\n    this.x = x;\n    this.y = y;\n  }\n\n  copy() {\n    return new Point(this.onCurve, this.endContour, this.x, this.y);\n  }\n}\n\n// Represents a component in a composite glyph\nclass Component {\n  constructor(glyphID, dx, dy) {\n    this.glyphID = glyphID;\n    this.dx = dx;\n    this.dy = dy;\n    this.pos = 0;\n    this.scaleX = this.scaleY = 1;\n    this.scale01 = this.scale10 = 0;\n  }\n}\n\n/**\n * Represents a TrueType glyph.\n */\nexport default class TTFGlyph extends Glyph {\n  type = 'TTF';\n\n  // Parses just the glyph header and returns the bounding box\n  _getCBox(internal) {\n    // We need to decode the glyph if variation processing is requested,\n    // so it's easier just to recompute the path's cbox after decoding.\n    if (this._font._variationProcessor && !internal) {\n      return this.path.cbox;\n    }\n\n    let stream = this._font._getTableStream('glyf');\n    stream.pos += this._font.loca.offsets[this.id];\n    let glyph = GlyfHeader.decode(stream);\n\n    let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n    return Object.freeze(cbox);\n  }\n\n  // Parses a single glyph coordinate\n  _parseGlyphCoord(stream, prev, short, same) {\n    if (short) {\n      var val = stream.readUInt8();\n      if (!same) {\n        val = -val;\n      }\n\n      val += prev;\n    } else {\n      if (same) {\n        var val = prev;\n      } else {\n        var val = prev + stream.readInt16BE();\n      }\n    }\n\n    return val;\n  }\n\n  // Decodes the glyph data into points for simple glyphs,\n  // or components for composite glyphs\n  _decode() {\n    let glyfPos = this._font.loca.offsets[this.id];\n    let nextPos = this._font.loca.offsets[this.id + 1];\n\n    // Nothing to do if there is no data for this glyph\n    if (glyfPos === nextPos) { return null; }\n\n    let stream = this._font._getTableStream('glyf');\n    stream.pos += glyfPos;\n    let startPos = stream.pos;\n\n    let glyph = GlyfHeader.decode(stream);\n\n    if (glyph.numberOfContours > 0) {\n      this._decodeSimple(glyph, stream);\n\n    } else if (glyph.numberOfContours < 0) {\n      this._decodeComposite(glyph, stream, startPos);\n    }\n\n    return glyph;\n  }\n\n  _decodeSimple(glyph, stream) {\n    // this is a simple glyph\n    glyph.points = [];\n\n    let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n    glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n\n    let flags = [];\n    let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n\n    while (flags.length < numCoords) {\n      var flag = stream.readUInt8();\n      flags.push(flag);\n\n      // check for repeat flag\n      if (flag & REPEAT) {\n        let count = stream.readUInt8();\n        for (let j = 0; j < count; j++) {\n          flags.push(flag);\n        }\n      }\n    }\n\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n      glyph.points.push(point);\n    }\n\n    let px = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n    }\n\n    let py = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n    }\n\n    if (this._font._variationProcessor) {\n      let points = glyph.points.slice();\n      points.push(...this._getPhantomPoints(glyph));\n\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.slice(-4);\n    }\n\n    return;\n  }\n\n  _decodeComposite(glyph, stream, offset = 0) {\n    // this is a composite glyph\n    glyph.components = [];\n    let haveInstructions = false;\n    let flags = MORE_COMPONENTS;\n\n    while (flags & MORE_COMPONENTS) {\n      flags = stream.readUInt16BE();\n      let gPos = stream.pos - offset;\n      let glyphID = stream.readUInt16BE();\n      if (!haveInstructions) {\n        haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n      }\n\n      if (flags & ARG_1_AND_2_ARE_WORDS) {\n        var dx = stream.readInt16BE();\n        var dy = stream.readInt16BE();\n      } else {\n        var dx = stream.readInt8();\n        var dy = stream.readInt8();\n      }\n\n      var component = new Component(glyphID, dx, dy);\n      component.pos = gPos;\n\n      if (flags & WE_HAVE_A_SCALE) {\n        // fixed number with 14 bits of fraction\n        component.scaleX =\n        component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n        component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n      } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        component.scaleX  = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n        component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n        component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n        component.scaleY  = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n      }\n\n      glyph.components.push(component);\n    }\n\n    if (this._font._variationProcessor) {\n      let points = [];\n      for (let j = 0; j < glyph.components.length; j++) {\n        var component = glyph.components[j];\n        points.push(new Point(true, true, component.dx, component.dy));\n      }\n\n      points.push(...this._getPhantomPoints(glyph));\n\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.splice(-4, 4);\n\n      for (let i = 0; i < points.length; i++) {\n        let point = points[i];\n        glyph.components[i].dx = point.x;\n        glyph.components[i].dy = point.y;\n      }\n    }\n\n    return haveInstructions;\n  }\n\n  _getPhantomPoints(glyph) {\n    let cbox = this._getCBox(true);\n    if (this._metrics == null) {\n      this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n    }\n\n    let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics;\n\n    return [\n      new Point(false, true, glyph.xMin - leftBearing, 0),\n      new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0),\n      new Point(false, true, 0, glyph.yMax + topBearing),\n      new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)\n    ];\n  }\n\n  // Decodes font data, resolves composite glyphs, and returns an array of contours\n  _getContours() {\n    let glyph = this._decode();\n    if (!glyph) {\n      return [];\n    }\n\n    let points = [];\n\n    if (glyph.numberOfContours < 0) {\n      // resolve composite glyphs\n      for (let component of glyph.components) {\n        let contours = this._font.getGlyph(component.glyphID)._getContours();\n        for (let i = 0; i < contours.length; i++) {\n          let contour = contours[i];\n          for (let j = 0; j < contour.length; j++) {\n            let point = contour[j];\n            let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;\n            let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;\n            points.push(new Point(point.onCurve, point.endContour, x, y));\n          }\n        }\n      }\n    } else {\n      points = glyph.points || [];\n    }\n\n    // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n    if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n      this._metrics.advanceWidth  = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n      this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n      this._metrics.leftBearing   = glyph.xMin - glyph.phantomPoints[0].x;\n      this._metrics.topBearing    = glyph.phantomPoints[2].y - glyph.yMax;\n    }\n\n    let contours = [];\n    let cur = [];\n    for (let k = 0; k < points.length; k++) {\n      var point = points[k];\n      cur.push(point);\n      if (point.endContour) {\n        contours.push(cur);\n        cur = [];\n      }\n    }\n\n    return contours;\n  }\n\n  _getMetrics() {\n    if (this._metrics) {\n      return this._metrics;\n    }\n\n    let cbox = this._getCBox(true);\n    super._getMetrics(cbox);\n\n    if (this._font._variationProcessor && !this._font.HVAR) {\n      // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n      this.path;\n    }\n\n    return this._metrics;\n  }\n\n  // Converts contours to a Path object that can be rendered\n  _getPath() {\n    let contours = this._getContours();\n    let path = new Path;\n\n    for (let i = 0; i < contours.length; i++) {\n      let contour = contours[i];\n      let firstPt = contour[0];\n      let lastPt = contour[contour.length - 1];\n      let start = 0;\n\n      if (firstPt.onCurve) {\n        // The first point will be consumed by the moveTo command, so skip in the loop\n        var curvePt = null;\n        start = 1;\n      } else {\n        if (lastPt.onCurve) {\n          // Start at the last point if the first point is off curve and the last point is on curve\n          firstPt = lastPt;\n        } else {\n          // Start at the middle if both the first and last points are off curve\n          firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n        }\n\n        var curvePt = firstPt;\n      }\n\n      path.moveTo(firstPt.x, firstPt.y);\n\n      for (let j = start; j < contour.length; j++) {\n        let pt = contour[j];\n        let prevPt = j === 0 ? firstPt : contour[j - 1];\n\n        if (prevPt.onCurve && pt.onCurve) {\n          path.lineTo(pt.x, pt.y);\n\n        } else if (prevPt.onCurve && !pt.onCurve) {\n          var curvePt = pt;\n\n        } else if (!prevPt.onCurve && !pt.onCurve) {\n          let midX = (prevPt.x + pt.x) / 2;\n          let midY = (prevPt.y + pt.y) / 2;\n          path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n          var curvePt = pt;\n\n        } else if (!prevPt.onCurve && pt.onCurve) {\n          path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n          var curvePt = null;\n\n        } else {\n          throw new Error(\"Unknown TTF path state\");\n        }\n      }\n\n      // Connect the first and last points\n      if (curvePt) {\n        path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n      }\n\n      path.closePath();\n    }\n\n    return path;\n  }\n}\n","import { cache } from '../decorators';\nimport Path from './Path';\nimport unicode from 'unicode-properties';\nimport StandardNames from './StandardNames';\n\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\nexport default class Glyph {\n  constructor(id, codePoints, font) {\n    /**\n     * The glyph id in the font\n     * @type {number}\n     */\n    this.id = id;\n\n    /**\n     * An array of unicode code points that are represented by this glyph.\n     * There can be multiple code points in the case of ligatures and other glyphs\n     * that represent multiple visual characters.\n     * @type {number[]}\n     */\n    this.codePoints = codePoints;\n    this._font = font;\n\n    // TODO: get this info from GDEF if available\n    this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n    this.isLigature = this.codePoints.length > 1;\n  }\n\n  _getPath() {\n    return new Path();\n  }\n\n  _getCBox() {\n    return this.path.cbox;\n  }\n\n  _getBBox() {\n    return this.path.bbox;\n  }\n\n  _getTableMetrics(table) {\n    if (this.id < table.metrics.length) {\n      return table.metrics.get(this.id);\n    }\n\n    let metric = table.metrics.get(table.metrics.length - 1);\n    let res = {\n      advance: metric ? metric.advance : 0,\n      bearing: table.bearings.get(this.id - table.metrics.length) || 0\n    };\n\n    return res;\n  }\n\n  _getMetrics(cbox) {\n    if (this._metrics) { return this._metrics; }\n\n    let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx);\n\n    // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n    if (this._font.vmtx) {\n      var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx);\n\n    } else {\n      let os2;\n      if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); }\n\n      if ((os2 = this._font['OS/2']) && os2.version > 0) {\n        var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n        var topBearing = os2.typoAscender - cbox.maxY;\n\n      } else {\n        let { hhea } = this._font;\n        var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n        var topBearing = hhea.ascent - cbox.maxY;\n      }\n    }\n\n    if (this._font._variationProcessor && this._font.HVAR) {\n      advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n    }\n\n    return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing };\n  }\n\n  /**\n   * The glyph’s control box.\n   * This is often the same as the bounding box, but is faster to compute.\n   * Because of the way bezier curves are defined, some of the control points\n   * can be outside of the bounding box. Where `bbox` takes this into account,\n   * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n   * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n   * for a more detailed description.\n   *\n   * @type {BBox}\n   */\n  @cache\n  get cbox() {\n    return this._getCBox();\n  }\n\n  /**\n   * The glyph’s bounding box, i.e. the rectangle that encloses the\n   * glyph outline as tightly as possible.\n   * @type {BBox}\n   */\n  @cache\n  get bbox() {\n    return this._getBBox();\n  }\n\n  /**\n   * A vector Path object representing the glyph outline.\n   * @type {Path}\n   */\n  @cache\n  get path() {\n    // Cache the path so we only decode it once\n    // Decoding is actually performed by subclasses\n    return this._getPath();\n  }\n\n  /**\n   * Returns a path scaled to the given font size.\n   * @param {number} size\n   * @return {Path}\n   */\n  getScaledPath(size) {\n    let scale = 1 / this._font.unitsPerEm * size;\n    return this.path.scale(scale);\n  }\n\n  /**\n   * The glyph's advance width.\n   * @type {number}\n   */\n  @cache\n  get advanceWidth() {\n    return this._getMetrics().advanceWidth;\n  }\n\n  /**\n   * The glyph's advance height.\n   * @type {number}\n   */\n  @cache\n  get advanceHeight() {\n    return this._getMetrics().advanceHeight;\n  }\n\n  get ligatureCaretPositions() {}\n\n  _getName() {\n    let { post } = this._font;\n    if (!post) {\n      return null;\n    }\n\n    switch (post.version) {\n      case 1:\n        return StandardNames[this.id];\n\n      case 2:\n        let id = post.glyphNameIndex[this.id];\n        if (id < StandardNames.length) {\n          return StandardNames[id];\n        }\n\n        return post.names[id - StandardNames.length];\n\n      case 2.5:\n        return StandardNames[this.id + post.offsets[this.id]];\n\n      case 4:\n        return String.fromCharCode(post.map[this.id]);\n    }\n  }\n\n  /**\n   * The glyph's name\n   * @type {string}\n   */\n  @cache\n  get name() {\n    return this._getName();\n  }\n\n  /**\n   * Renders the glyph to the given graphics context, at the specified font size.\n   * @param {CanvasRenderingContext2d} ctx\n   * @param {number} size\n   */\n  render(ctx, size) {\n    ctx.save();\n\n    let scale = 1 / this._font.head.unitsPerEm * size;\n    ctx.scale(scale, scale);\n\n    let fn = this.path.toFunction();\n    fn(ctx);\n    ctx.fill();\n\n    ctx.restore();\n  }\n}\n","import BBox from './BBox';\n\nconst SVG_COMMANDS = {\n  moveTo: 'M',\n  lineTo: 'L',\n  quadraticCurveTo: 'Q',\n  bezierCurveTo: 'C',\n  closePath: 'Z'\n};\n\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nexport default class Path {\n  constructor() {\n    this.commands = [];\n    this._bbox = null;\n    this._cbox = null;\n  }\n\n  /**\n   * Compiles the path to a JavaScript function that can be applied with\n   * a graphics context in order to render the path.\n   * @return {string}\n   */\n  toFunction() {\n    return ctx => {\n      this.commands.forEach(c => {\n        return ctx[c.command].apply(ctx, c.args)\n      })\n    };\n  }\n\n  /**\n   * Converts the path to an SVG path data string\n   * @return {string}\n   */\n  toSVG() {\n    let cmds = this.commands.map(c => {\n      let args = c.args.map(arg => Math.round(arg * 100) / 100);\n      return `${SVG_COMMANDS[c.command]}${args.join(' ')}`;\n    });\n\n    return cmds.join('');\n  }\n\n  /**\n   * Gets the \"control box\" of a path.\n   * This is like the bounding box, but it includes all points including\n   * control points of bezier segments and is much faster to compute than\n   * the real bounding box.\n   * @type {BBox}\n   */\n  get cbox() {\n    if (!this._cbox) {\n      let cbox = new BBox;\n      for (let command of this.commands) {\n        for (let i = 0; i < command.args.length; i += 2) {\n          cbox.addPoint(command.args[i], command.args[i + 1]);\n        }\n      }\n\n      this._cbox = Object.freeze(cbox);\n    }\n\n    return this._cbox;\n  }\n\n  /**\n   * Gets the exact bounding box of the path by evaluating curve segments.\n   * Slower to compute than the control box, but more accurate.\n   * @type {BBox}\n   */\n  get bbox() {\n    if (this._bbox) {\n      return this._bbox;\n    }\n\n    let bbox = new BBox;\n    let cx = 0, cy = 0;\n\n    let f = t => (\n      Math.pow(1 - t, 3) * p0[i]\n        + 3 * Math.pow(1 - t, 2) * t * p1[i]\n        + 3 * (1 - t) * Math.pow(t, 2) * p2[i]\n        + Math.pow(t, 3) * p3[i]\n    );\n\n    for (let c of this.commands) {\n      switch (c.command) {\n        case 'moveTo':\n        case 'lineTo':\n          let [x, y] = c.args;\n          bbox.addPoint(x, y);\n          cx = x;\n          cy = y;\n          break;\n\n        case 'quadraticCurveTo':\n        case 'bezierCurveTo':\n          if (c.command === 'quadraticCurveTo') {\n            // http://fontforge.org/bezier.html\n            var [qp1x, qp1y, p3x, p3y] = c.args;\n            var cp1x = cx + 2 / 3 * (qp1x - cx);    // CP1 = QP0 + 2/3 * (QP1-QP0)\n            var cp1y = cy + 2 / 3 * (qp1y - cy);\n            var cp2x = p3x + 2 / 3 * (qp1x - p3x);  // CP2 = QP2 + 2/3 * (QP1-QP2)\n            var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n          } else {\n            var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;\n          }\n\n          // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n          bbox.addPoint(p3x, p3y);\n\n          var p0 = [cx, cy];\n          var p1 = [cp1x, cp1y];\n          var p2 = [cp2x, cp2y];\n          var p3 = [p3x, p3y];\n\n          for (var i = 0; i <= 1; i++) {\n            let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n            let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n            c = 3 * p1[i] - 3 * p0[i];\n\n            if (a === 0) {\n              if (b === 0) {\n                continue;\n              }\n\n              let t = -c / b;\n              if (0 < t && t < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t));\n                }\n              }\n\n              continue;\n            }\n\n            let b2ac = Math.pow(b, 2) - 4 * c * a;\n            if (b2ac < 0) {\n              continue;\n            }\n\n            let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n            if (0 < t1 && t1 < 1) {\n              if (i === 0) {\n                bbox.addPoint(f(t1), bbox.maxY);\n              } else if (i === 1) {\n                bbox.addPoint(bbox.maxX, f(t1));\n              }\n            }\n\n            let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n            if (0 < t2 && t2 < 1) {\n              if (i === 0) {\n                bbox.addPoint(f(t2), bbox.maxY);\n              } else if (i === 1) {\n                bbox.addPoint(bbox.maxX, f(t2));\n              }\n            }\n          }\n\n          cx = p3x;\n          cy = p3y;\n          break;\n      }\n    }\n\n    return this._bbox = Object.freeze(bbox);\n  }\n\n  /**\n   * Applies a mapping function to each point in the path.\n   * @param {function} fn\n   * @return {Path}\n   */\n  mapPoints(fn) {\n    let path = new Path;\n\n    for (let c of this.commands) {\n      let args = [];\n      for (let i = 0; i < c.args.length; i += 2) {\n        let [x, y] = fn(c.args[i], c.args[i + 1]);\n        args.push(x, y);\n      }\n\n      path[c.command](...args);\n    }\n\n    return path;\n  }\n\n  /**\n   * Transforms the path by the given matrix.\n   */\n  transform(m0, m1, m2, m3, m4, m5) {\n    return this.mapPoints((x, y) => {\n      const tx = m0 * x + m2 * y + m4;\n      const ty = m1 * x + m3 * y + m5;\n      return [tx, ty];\n    });\n  }\n\n  /**\n   * Translates the path by the given offset.\n   */\n  translate(x, y) {\n    return this.transform(1, 0, 0, 1, x, y);\n  }\n\n  /**\n   * Rotates the path by the given angle (in radians).\n   */\n  rotate(angle) {\n    let cos = Math.cos(angle);\n    let sin = Math.sin(angle);\n    return this.transform(cos, sin, -sin, cos, 0, 0);\n  }\n\n  /**\n   * Scales the path.\n   */\n  scale(scaleX, scaleY = scaleX) {\n    return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n  }\n}\n\nfor (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) {\n  Path.prototype[command] = function(...args) {\n    this._bbox = this._cbox = null;\n    this.commands.push({\n      command,\n      args\n    });\n\n    return this;\n  };\n}\n","export default [\n  '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\n  'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\n  'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\n  'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\n  'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n  'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\n  'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\n  'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\n  'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\n  'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\n  'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\n  'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\n  'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\n  'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\n  'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\n  'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\n  'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\n  'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\n  'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\n  'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\n  'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\n  'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\n  'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\n  'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'\n];\n","import Glyph from './Glyph';\nimport Path from './Path';\n\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nexport default class CFFGlyph extends Glyph {\n  type = 'CFF';\n\n  _getName() {\n    if (this._font.CFF2) {\n      return super._getName();\n    }\n\n    return this._font['CFF '].getGlyphName(this.id);\n  }\n\n  bias(s) {\n    if (s.length < 1240) {\n      return 107;\n    } else if (s.length < 33900) {\n      return 1131;\n    } else {\n      return 32768;\n    }\n  }\n\n  _getPath() {\n    let cff = this._font.CFF2 || this._font['CFF '];\n    let { stream } = cff;\n    let str = cff.topDict.CharStrings[this.id];\n    let end = str.offset + str.length;\n    stream.pos = str.offset;\n\n    let path = new Path;\n    let stack = [];\n    let trans = [];\n\n    let width = null;\n    let nStems = 0;\n    let x = 0, y = 0;\n    let usedGsubrs;\n    let usedSubrs;\n    let open = false;\n\n    this._usedGsubrs = usedGsubrs = {};\n    this._usedSubrs = usedSubrs = {};\n\n    let gsubrs = cff.globalSubrIndex || [];\n    let gsubrsBias = this.bias(gsubrs);\n\n    let privateDict = cff.privateDictForGlyph(this.id) || {};\n    let subrs = privateDict.Subrs || [];\n    let subrsBias = this.bias(subrs);\n\n    let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n    let vsindex = privateDict.vsindex;\n    let variationProcessor = this._font._variationProcessor;\n\n    function checkWidth() {\n      if (width == null) {\n        width = stack.shift() + privateDict.nominalWidthX;\n      }\n    }\n\n    function parseStems() {\n      if (stack.length % 2 !== 0) {\n        checkWidth();\n      }\n\n      nStems += stack.length >> 1;\n      return stack.length = 0;\n    }\n\n    function moveTo(x, y) {\n      if (open) {\n        path.closePath();\n      }\n\n      path.moveTo(x, y);\n      open = true;\n    }\n\n    let parse = function () {\n      while (stream.pos < end) {\n        let op = stream.readUInt8();\n        if (op < 32) {\n          let index, subr, phase;\n          switch (op) {\n            case 1:  // hstem\n            case 3:  // vstem\n            case 18: // hstemhm\n            case 23: // vstemhm\n              parseStems();\n              break;\n\n            case 4: // vmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n\n            case 5: // rlineto\n              while (stack.length >= 2) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              break;\n\n            case 6: // hlineto\n            case 7: // vlineto\n              phase = op === 6;\n              while (stack.length >= 1) {\n                if (phase) {\n                  x += stack.shift();\n                } else {\n                  y += stack.shift();\n                }\n\n                path.lineTo(x, y);\n                phase = !phase;\n              }\n              break;\n\n            case 8: // rrcurveto\n              while (stack.length > 0) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n\n            case 10: // callsubr\n              index = stack.pop() + subrsBias;\n              subr = subrs[index];\n              if (subr) {\n                usedSubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n\n            case 11: // return\n              if (cff.version >= 2) {\n                break;\n              }\n              return;\n\n            case 14: // endchar\n              if (cff.version >= 2) {\n                break;\n              }\n\n              if (stack.length > 0) {\n                checkWidth();\n              }\n\n              if (open) {\n                path.closePath();\n                open = false;\n              }\n              break;\n\n            case 15: { // vsindex\n              if (cff.version < 2) {\n                throw new Error('vsindex operator not supported in CFF v1');\n              }\n\n              vsindex = stack.pop();\n              break;\n            }\n\n            case 16: { // blend\n              if (cff.version < 2) {\n                throw new Error('blend operator not supported in CFF v1');\n              }\n\n              if (!variationProcessor) {\n                throw new Error('blend operator in non-variation font');\n              }\n\n              let blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n              let numBlends = stack.pop();\n              let numOperands = numBlends * blendVector.length;\n              let delta = stack.length - numOperands;\n              let base = delta - numBlends;\n\n              for (let i = 0; i < numBlends; i++) {\n                let sum = stack[base + i];\n                for (let j = 0; j < blendVector.length; j++) {\n                  sum += blendVector[j] * stack[delta++];\n                }\n\n                stack[base + i] = sum;\n              }\n\n              while (numOperands--) {\n                stack.pop();\n              }\n\n              break;\n            }\n\n            case 19: // hintmask\n            case 20: // cntrmask\n              parseStems();\n              stream.pos += (nStems + 7) >> 3;\n              break;\n\n            case 21: // rmoveto\n              if (stack.length > 2) {\n                checkWidth();\n              }\n\n              x += stack.shift();\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n\n            case 22: // hmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n\n              x += stack.shift();\n              moveTo(x, y);\n              break;\n\n            case 24: // rcurveline\n              while (stack.length >= 8) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n\n              x += stack.shift();\n              y += stack.shift();\n              path.lineTo(x, y);\n              break;\n\n            case 25: // rlinecurve\n              while (stack.length >= 8) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n\n              var c1x = x + stack.shift();\n              var c1y = y + stack.shift();\n              var c2x = c1x + stack.shift();\n              var c2y = c1y + stack.shift();\n              x = c2x + stack.shift();\n              y = c2y + stack.shift();\n              path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              break;\n\n            case 26: // vvcurveto\n              if (stack.length % 2) {\n                x += stack.shift();\n              }\n\n              while (stack.length >= 4) {\n                c1x = x;\n                c1y = y + stack.shift();\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x;\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n\n            case 27: // hhcurveto\n              if (stack.length % 2) {\n                y += stack.shift();\n              }\n\n              while (stack.length >= 4) {\n                c1x = x + stack.shift();\n                c1y = y;\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y;\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n\n            case 28: // shortint\n              stack.push(stream.readInt16BE());\n              break;\n\n            case 29: // callgsubr\n              index = stack.pop() + gsubrsBias;\n              subr = gsubrs[index];\n              if (subr) {\n                usedGsubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n\n            case 30: // vhcurveto\n            case 31: // hvcurveto\n              phase = op === 31;\n              while (stack.length >= 4) {\n                if (phase) {\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  y = c2y + stack.shift();\n                  x = c2x + (stack.length === 1 ? stack.shift() : 0);\n                } else {\n                  c1x = x;\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  x = c2x + stack.shift();\n                  y = c2y + (stack.length === 1 ? stack.shift() : 0);\n                }\n\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n                phase = !phase;\n              }\n              break;\n\n            case 12:\n              op = stream.readUInt8();\n              switch (op) {\n                case 3: // and\n                  let a = stack.pop();\n                  let b = stack.pop();\n                  stack.push(a && b ? 1 : 0);\n                  break;\n\n                case 4: // or\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a || b ? 1 : 0);\n                  break;\n\n                case 5: // not\n                  a = stack.pop();\n                  stack.push(a ? 0 : 1);\n                  break;\n\n                case 9: // abs\n                  a = stack.pop();\n                  stack.push(Math.abs(a));\n                  break;\n\n                case 10: // add\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a + b);\n                  break;\n\n                case 11: // sub\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a - b);\n                  break;\n\n                case 12: // div\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a / b);\n                  break;\n\n                case 14: // neg\n                  a = stack.pop();\n                  stack.push(-a);\n                  break;\n\n                case 15: // eq\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a === b ? 1 : 0);\n                  break;\n\n                case 18: // drop\n                  stack.pop();\n                  break;\n\n                case 20: // put\n                  let val = stack.pop();\n                  let idx = stack.pop();\n                  trans[idx] = val;\n                  break;\n\n                case 21: // get\n                  idx = stack.pop();\n                  stack.push(trans[idx] || 0);\n                  break;\n\n                case 22: // ifelse\n                  let s1 = stack.pop();\n                  let s2 = stack.pop();\n                  let v1 = stack.pop();\n                  let v2 = stack.pop();\n                  stack.push(v1 <= v2 ? s1 : s2);\n                  break;\n\n                case 23: // random\n                  stack.push(Math.random());\n                  break;\n\n                case 24: // mul\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a * b);\n                  break;\n\n                case 26: // sqrt\n                  a = stack.pop();\n                  stack.push(Math.sqrt(a));\n                  break;\n\n                case 27: // dup\n                  a = stack.pop();\n                  stack.push(a, a);\n                  break;\n\n                case 28: // exch\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(b, a);\n                  break;\n\n                case 29: // index\n                  idx = stack.pop();\n                  if (idx < 0) {\n                    idx = 0;\n                  } else if (idx > stack.length - 1) {\n                    idx = stack.length - 1;\n                  }\n\n                  stack.push(stack[idx]);\n                  break;\n\n                case 30: // roll\n                  let n = stack.pop();\n                  let j = stack.pop();\n\n                  if (j >= 0) {\n                    while (j > 0) {\n                      var t = stack[n - 1];\n                      for (let i = n - 2; i >= 0; i--) {\n                        stack[i + 1] = stack[i];\n                      }\n\n                      stack[0] = t;\n                      j--;\n                    }\n                  } else {\n                    while (j < 0) {\n                      var t = stack[0];\n                      for (let i = 0; i <= n; i++) {\n                        stack[i] = stack[i + 1];\n                      }\n\n                      stack[n - 1] = t;\n                      j++;\n                    }\n                  }\n                  break;\n\n                case 34: // hflex\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  let c3x = c2x + stack.shift();\n                  let c3y = c2y;\n                  let c4x = c3x + stack.shift();\n                  let c4y = c3y;\n                  let c5x = c4x + stack.shift();\n                  let c5y = c4y;\n                  let c6x = c5x + stack.shift();\n                  let c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n\n                case 35: // flex\n                  let pts = [];\n\n                  for (let i = 0; i <= 5; i++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n\n                  path.bezierCurveTo(...pts.slice(0, 6));\n                  path.bezierCurveTo(...pts.slice(6));\n                  stack.shift(); // fd\n                  break;\n\n                case 36: // hflex1\n                  c1x = x + stack.shift();\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  c3x = c2x + stack.shift();\n                  c3y = c2y;\n                  c4x = c3x + stack.shift();\n                  c4y = c3y;\n                  c5x = c4x + stack.shift();\n                  c5y = c4y + stack.shift();\n                  c6x = c5x + stack.shift();\n                  c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n\n                case 37: // flex1\n                  let startx = x;\n                  let starty = y;\n\n                  pts = [];\n                  for (let i = 0; i <= 4; i++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n\n                  if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal\n                    x += stack.shift();\n                    y = starty;\n                  } else {\n                    x = startx;\n                    y += stack.shift();\n                  }\n\n                  pts.push(x, y);\n                  path.bezierCurveTo(...pts.slice(0, 6));\n                  path.bezierCurveTo(...pts.slice(6));\n                  break;\n\n                default:\n                  throw new Error(`Unknown op: 12 ${op}`);\n              }\n              break;\n\n            default:\n              throw new Error(`Unknown op: ${op}`);\n          }\n\n        } else if (op < 247) {\n          stack.push(op - 139);\n        } else if (op < 251) {\n          var b1 = stream.readUInt8();\n          stack.push((op - 247) * 256 + b1 + 108);\n        } else if (op < 255) {\n          var b1 = stream.readUInt8();\n          stack.push(-(op - 251) * 256 - b1 - 108);\n        } else {\n          stack.push(stream.readInt32BE() / 65536);\n        }\n      }\n    };\n\n    parse();\n\n    if (open) {\n      path.closePath();\n    }\n\n    return path;\n  }\n}\n","import TTFGlyph from './TTFGlyph';\nimport r from 'restructure';\n\nlet SBIXImage = new r.Struct({\n  originX: r.uint16,\n  originY: r.uint16,\n  type: new r.String(4),\n  data: new r.Buffer(t => t.parent.buflen - t._currentOffset)\n});\n\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nexport default class SBIXGlyph extends TTFGlyph {\n  type = 'SBIX';\n\n  /**\n   * Returns an object representing a glyph image at the given point size.\n   * The object has a data property with a Buffer containing the actual image data,\n   * along with the image type, and origin.\n   *\n   * @param {number} size\n   * @return {object}\n   */\n  getImageForSize(size) {\n    for (let i = 0; i < this._font.sbix.imageTables.length; i++) {\n      var table = this._font.sbix.imageTables[i];\n      if (table.ppem >= size) { break; }\n    }\n\n    let offsets = table.imageOffsets;\n    let start = offsets[this.id];\n    let end = offsets[this.id + 1];\n\n    if (start === end) {\n      return null;\n    }\n\n    this._font.stream.pos = start;\n    return SBIXImage.decode(this._font.stream, {buflen: end - start});\n  }\n\n  render(ctx, size) {\n    let img = this.getImageForSize(size);\n    if (img != null) {\n      let scale = size / this._font.unitsPerEm;\n      ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale});\n    }\n\n    if (this._font.sbix.flags.renderOutlines) {\n      super.render(ctx, size);\n    }\n  }\n}\n","import Glyph from './Glyph';\nimport BBox from './BBox';\n\nclass COLRLayer {\n  constructor(glyph, color) {\n    this.glyph = glyph;\n    this.color = color;\n  }\n}\n\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which  is another vector glyph.\n */\nexport default class COLRGlyph extends Glyph {\n  type = 'COLR';\n\n  _getBBox() {\n    let bbox = new BBox;\n    for (let i = 0; i < this.layers.length; i++) {\n      let layer = this.layers[i];\n      let b = layer.glyph.bbox;\n      bbox.addPoint(b.minX, b.minY);\n      bbox.addPoint(b.maxX, b.maxY);\n    }\n\n    return bbox;\n  }\n\n  /**\n   * Returns an array of objects containing the glyph and color for\n   * each layer in the composite color glyph.\n   * @type {object[]}\n   */\n  get layers() {\n    let cpal = this._font.CPAL;\n    let colr = this._font.COLR;\n    let low = 0;\n    let high = colr.baseGlyphRecord.length - 1;\n\n    while (low <= high) {\n      let mid = (low + high) >> 1;\n      var rec = colr.baseGlyphRecord[mid];\n\n      if (this.id < rec.gid) {\n        high = mid - 1;\n      } else if (this.id > rec.gid) {\n        low = mid + 1;\n      } else {\n        var baseLayer = rec;\n        break;\n      }\n    }\n\n    // if base glyph not found in COLR table,\n    // default to normal glyph from glyf or CFF\n    if (baseLayer == null) {\n      var g = this._font._getBaseGlyph(this.id);\n      var color = {\n        red: 0,\n        green: 0,\n        blue: 0,\n        alpha: 255\n      };\n\n      return [new COLRLayer(g, color)];\n    }\n\n    // otherwise, return an array of all the layers\n    let layers = [];\n    for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n      var rec = colr.layerRecords[i];\n      var color = cpal.colorRecords[rec.paletteIndex];\n      var g = this._font._getBaseGlyph(rec.gid);\n      layers.push(new COLRLayer(g, color));\n    }\n\n    return layers;\n  }\n\n  render(ctx, size) {\n    for (let {glyph, color} of this.layers) {\n      ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n      glyph.render(ctx, size);\n    }\n\n    return;\n  }\n}\n","const TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nconst TUPLE_COUNT_MASK           = 0x0fff;\nconst EMBEDDED_TUPLE_COORD       = 0x8000;\nconst INTERMEDIATE_TUPLE         = 0x4000;\nconst PRIVATE_POINT_NUMBERS      = 0x2000;\nconst TUPLE_INDEX_MASK           = 0x0fff;\nconst POINTS_ARE_WORDS           = 0x80;\nconst POINT_RUN_COUNT_MASK       = 0x7f;\nconst DELTAS_ARE_ZERO            = 0x80;\nconst DELTAS_ARE_WORDS           = 0x40;\nconst DELTA_RUN_COUNT_MASK       = 0x3f;\n\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nexport default class GlyphVariationProcessor {\n  constructor(font, coords) {\n    this.font = font;\n    this.normalizedCoords = this.normalizeCoords(coords);\n    this.blendVectors = new Map;\n  }\n\n  normalizeCoords(coords) {\n    // the default mapping is linear along each axis, in two segments:\n    // from the minValue to defaultValue, and from defaultValue to maxValue.\n    let normalized = [];\n    for (var i = 0; i < this.font.fvar.axis.length; i++) {\n      let axis = this.font.fvar.axis[i];\n      if (coords[i] < axis.defaultValue) {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n      } else {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n      }\n    }\n\n    // if there is an avar table, the normalized value is calculated\n    // by interpolating between the two nearest mapped values.\n    if (this.font.avar) {\n      for (var i = 0; i < this.font.avar.segment.length; i++) {\n        let segment = this.font.avar.segment[i];\n        for (let j = 0; j < segment.correspondence.length; j++) {\n          let pair = segment.correspondence[j];\n          if (j >= 1 && normalized[i] < pair.fromCoord) {\n            let prev = segment.correspondence[j - 1];\n            normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) /\n              (pair.fromCoord - prev.fromCoord + Number.EPSILON) +\n              prev.toCoord;\n\n            break;\n          }\n        }\n      }\n    }\n\n    return normalized;\n  }\n\n  transformPoints(gid, glyphPoints) {\n    if (!this.font.fvar || !this.font.gvar) { return; }\n\n    let { gvar } = this.font;\n    if (gid >= gvar.glyphCount) { return; }\n\n    let offset = gvar.offsets[gid];\n    if (offset === gvar.offsets[gid + 1]) { return; }\n\n    // Read the gvar data for this glyph\n    let { stream } = this.font;\n    stream.pos = offset;\n    if (stream.pos >= stream.length) {\n      return;\n    }\n\n    let tupleCount = stream.readUInt16BE();\n    let offsetToData = offset + stream.readUInt16BE();\n\n    if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      var sharedPoints = this.decodePoints();\n      offsetToData = stream.pos;\n      stream.pos = here;\n    }\n\n    let origPoints = glyphPoints.map(pt => pt.copy());\n\n    tupleCount &= TUPLE_COUNT_MASK;\n    for (let i = 0; i < tupleCount; i++) {\n      let tupleDataSize = stream.readUInt16BE();\n      let tupleIndex = stream.readUInt16BE();\n\n      if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n        var tupleCoords = [];\n        for (let a = 0; a < gvar.axisCount; a++) {\n          tupleCoords.push(stream.readInt16BE() / 16384);\n        }\n\n      } else {\n        if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n          throw new Error('Invalid gvar table');\n        }\n\n        var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n      }\n\n      if (tupleIndex & INTERMEDIATE_TUPLE) {\n        var startCoords = [];\n        for (let a = 0; a < gvar.axisCount; a++) {\n          startCoords.push(stream.readInt16BE() / 16384);\n        }\n\n        var endCoords = [];\n        for (let a = 0; a < gvar.axisCount; a++) {\n          endCoords.push(stream.readInt16BE() / 16384);\n        }\n      }\n\n      // Get the factor at which to apply this tuple\n      let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n      if (factor === 0) {\n        offsetToData += tupleDataSize;\n        continue;\n      }\n\n      var here = stream.pos;\n      stream.pos = offsetToData;\n\n      if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n        var points = this.decodePoints();\n      } else {\n        var points = sharedPoints;\n      }\n\n      // points.length = 0 means there are deltas for all points\n      let nPoints = points.length === 0 ? glyphPoints.length : points.length;\n      let xDeltas = this.decodeDeltas(nPoints);\n      let yDeltas = this.decodeDeltas(nPoints);\n\n      if (points.length === 0) { // all points\n        for (let i = 0; i < glyphPoints.length; i++) {\n          var point = glyphPoints[i];\n          point.x += Math.round(xDeltas[i] * factor);\n          point.y += Math.round(yDeltas[i] * factor);\n        }\n      } else {\n        let outPoints = origPoints.map(pt => pt.copy());\n        let hasDelta = glyphPoints.map(() => false);\n\n        for (let i = 0; i < points.length; i++) {\n          let idx = points[i];\n          if (idx < glyphPoints.length) {\n            let point = outPoints[idx];\n            hasDelta[idx] = true;\n\n            point.x += Math.round(xDeltas[i] * factor);\n            point.y += Math.round(yDeltas[i] * factor);\n          }\n        }\n\n        this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n\n        for (let i = 0; i < glyphPoints.length; i++) {\n          let deltaX = outPoints[i].x - origPoints[i].x;\n          let deltaY = outPoints[i].y - origPoints[i].y;\n\n          glyphPoints[i].x += deltaX;\n          glyphPoints[i].y += deltaY;\n        }\n      }\n\n      offsetToData += tupleDataSize;\n      stream.pos = here;\n    }\n  }\n\n  decodePoints() {\n    let stream = this.font.stream;\n    let count = stream.readUInt8();\n\n    if (count & POINTS_ARE_WORDS) {\n      count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n    }\n\n    let points = new Uint16Array(count);\n    let i = 0;\n    let point = 0;\n    while (i < count) {\n      let run = stream.readUInt8();\n      let runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n      let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n\n      for (let j = 0; j < runCount && i < count; j++) {\n        point += fn.call(stream);\n        points[i++] = point;\n      }\n    }\n\n    return points;\n  }\n\n  decodeDeltas(count) {\n    let stream = this.font.stream;\n    let i = 0;\n    let deltas = new Int16Array(count);\n\n    while (i < count) {\n      let run = stream.readUInt8();\n      let runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n\n      if (run & DELTAS_ARE_ZERO) {\n        i += runCount;\n\n      } else {\n        let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n        for (let j = 0; j < runCount && i < count; j++) {\n          deltas[i++] = fn.call(stream);\n        }\n      }\n    }\n\n    return deltas;\n  }\n\n  tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n    let normalized = this.normalizedCoords;\n    let { gvar } = this.font;\n    let factor = 1;\n\n    for (let i = 0; i < gvar.axisCount; i++) {\n      if (tupleCoords[i] === 0) {\n        continue;\n      }\n\n      if (normalized[i] === 0) {\n        return 0;\n      }\n\n      if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n        if ((normalized[i] < Math.min(0, tupleCoords[i])) ||\n            (normalized[i] > Math.max(0, tupleCoords[i]))) {\n          return 0;\n        }\n\n        factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n      } else {\n        if ((normalized[i] < startCoords[i]) ||\n            (normalized[i] > endCoords[i])) {\n          return 0;\n\n        } else if (normalized[i] < tupleCoords[i]) {\n          factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n\n        } else {\n          factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n        }\n      }\n    }\n\n    return factor;\n  }\n\n  // Interpolates points without delta values.\n  // Needed for the Ø and Q glyphs in Skia.\n  // Algorithm from Freetype.\n  interpolateMissingDeltas(points, inPoints, hasDelta) {\n    if (points.length === 0) {\n      return;\n    }\n\n    let point = 0;\n    while (point < points.length) {\n      let firstPoint = point;\n\n      // find the end point of the contour\n      let endPoint = point;\n      let pt = points[endPoint];\n      while (!pt.endContour) {\n        pt = points[++endPoint];\n      }\n\n      // find the first point that has a delta\n      while (point <= endPoint && !hasDelta[point]) {\n        point++;\n      }\n\n      if (point > endPoint) {\n        continue;\n      }\n\n      let firstDelta = point;\n      let curDelta = point;\n      point++;\n\n      while (point <= endPoint) {\n        // find the next point with a delta, and interpolate intermediate points\n        if (hasDelta[point]) {\n          this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n          curDelta = point;\n        }\n\n        point++;\n      }\n\n      // shift contour if we only have a single delta\n      if (curDelta === firstDelta) {\n        this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n      } else {\n        // otherwise, handle the remaining points at the end and beginning of the contour\n        this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n\n        if (firstDelta > 0) {\n          this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n        }\n      }\n\n      point = endPoint + 1;\n    }\n  }\n\n  deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n    if (p1 > p2) {\n      return;\n    }\n\n    let iterable = ['x', 'y'];\n    for (let i = 0; i < iterable.length; i++) {\n      let k = iterable[i];\n      if (inPoints[ref1][k] > inPoints[ref2][k]) {\n        var p = ref1;\n        ref1 = ref2;\n        ref2 = p;\n      }\n\n      let in1 = inPoints[ref1][k];\n      let in2 = inPoints[ref2][k];\n      let out1 = outPoints[ref1][k];\n      let out2 = outPoints[ref2][k];\n\n      // If the reference points have the same coordinate but different\n      // delta, inferred delta is zero.  Otherwise interpolate.\n      if (in1 !== in2 || out1 === out2) {\n        let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n\n        for (let p = p1; p <= p2; p++) {\n          let out = inPoints[p][k];\n\n          if (out <= in1) {\n            out += out1 - in1;\n          } else if (out >= in2) {\n            out += out2 - in2;\n          } else {\n            out = out1 + (out - in1) * scale;\n          }\n\n          outPoints[p][k] = out;\n        }\n      }\n    }\n  }\n\n  deltaShift(p1, p2, ref, inPoints, outPoints) {\n    let deltaX = outPoints[ref].x - inPoints[ref].x;\n    let deltaY = outPoints[ref].y - inPoints[ref].y;\n\n    if (deltaX === 0 && deltaY === 0) {\n      return;\n    }\n\n    for (let p = p1; p <= p2; p++) {\n      if (p !== ref) {\n        outPoints[p].x += deltaX;\n        outPoints[p].y += deltaY;\n      }\n    }\n  }\n\n  getAdvanceAdjustment(gid, table) {\n    let outerIndex, innerIndex;\n\n    if (table.advanceWidthMapping) {\n      let idx = gid;\n      if (idx >= table.advanceWidthMapping.mapCount) {\n        idx = table.advanceWidthMapping.mapCount - 1;\n      }\n\n      let entryFormat = table.advanceWidthMapping.entryFormat;\n      ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]);\n    } else {\n      outerIndex = 0;\n      innerIndex = gid;\n    }\n\n    return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n  }\n\n  // See pseudo code from `Font Variations Overview'\n  // in the OpenType specification.\n  getDelta(itemStore, outerIndex, innerIndex) {\n    if (outerIndex >= itemStore.itemVariationData.length) {\n      return 0;\n    }\n\n    let varData = itemStore.itemVariationData[outerIndex];\n    if (innerIndex >= varData.deltaSets.length) {\n      return 0;\n    }\n\n    let deltaSet = varData.deltaSets[innerIndex];\n    let blendVector = this.getBlendVector(itemStore, outerIndex);\n    let netAdjustment = 0;\n\n    for (let master = 0; master < varData.regionIndexCount; master++) {\n      netAdjustment += deltaSet.deltas[master] * blendVector[master];\n    }\n\n    return netAdjustment;\n  }\n\n  getBlendVector(itemStore, outerIndex) {\n    let varData = itemStore.itemVariationData[outerIndex];\n    if (this.blendVectors.has(varData)) {\n      return this.blendVectors.get(varData);\n    }\n\n    let normalizedCoords = this.normalizedCoords;\n    let blendVector = [];\n\n    // outer loop steps through master designs to be blended\n    for (let master = 0; master < varData.regionIndexCount; master++) {\n      let scalar = 1;\n      let regionIndex = varData.regionIndexes[master];\n      let axes = itemStore.variationRegionList.variationRegions[regionIndex];\n\n      // inner loop steps through axes in this region\n      for (let j = 0; j < axes.length; j++) {\n        let axis = axes[j];\n        let axisScalar;\n\n        // compute the scalar contribution of this axis\n        // ignore invalid ranges\n        if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n          axisScalar = 1;\n\n        } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n          axisScalar = 1;\n\n        // peak of 0 means ignore this axis\n        } else if (axis.peakCoord === 0) {\n          axisScalar = 1;\n\n        // ignore this region if coords are out of range\n        } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n          axisScalar = 0;\n\n        // calculate a proportional factor\n        } else {\n          if (normalizedCoords[j] === axis.peakCoord) {\n            axisScalar = 1;\n          } else if (normalizedCoords[j] < axis.peakCoord) {\n            axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) /\n              (axis.peakCoord - axis.startCoord + Number.EPSILON);\n          } else {\n            axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) /\n              (axis.endCoord - axis.peakCoord + Number.EPSILON);\n          }\n        }\n\n        // take product of all the axis scalars\n        scalar *= axisScalar;\n      }\n\n      blendVector[master] = scalar;\n    }\n\n    this.blendVectors.set(varData, blendVector);\n    return blendVector;\n  }\n}\n","import cloneDeep from 'clone';\nimport Subset from './Subset';\nimport Directory from '../tables/directory';\nimport Tables from '../tables';\nimport TTFGlyphEncoder from '../glyph/TTFGlyphEncoder';\n\nexport default class TTFSubset extends Subset {\n  constructor(font) {\n    super(font);\n    this.glyphEncoder = new TTFGlyphEncoder;\n  }\n\n  _addGlyph(gid) {\n    let glyph = this.font.getGlyph(gid);\n    let glyf = glyph._decode();\n\n    // get the offset to the glyph from the loca table\n    let curOffset = this.font.loca.offsets[gid];\n    let nextOffset = this.font.loca.offsets[gid + 1];\n\n    let stream = this.font._getTableStream('glyf');\n    stream.pos += curOffset;\n\n    let buffer = stream.readBuffer(nextOffset - curOffset);\n\n    // if it is a compound glyph, include its components\n    if (glyf && glyf.numberOfContours < 0) {\n      buffer = Buffer.from(buffer);\n      for (let component of glyf.components) {\n        gid = this.includeGlyph(component.glyphID);\n        buffer.writeUInt16BE(gid, component.pos);\n      }\n    } else if (glyf && this.font._variationProcessor) {\n      // If this is a TrueType variation glyph, re-encode the path\n      buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n    }\n\n    this.glyf.push(buffer);\n    this.loca.offsets.push(this.offset);\n\n    this.hmtx.metrics.push({\n      advance: glyph.advanceWidth,\n      bearing: glyph._getMetrics().leftBearing\n    });\n\n    this.offset += buffer.length;\n    return this.glyf.length - 1;\n  }\n\n  encode(stream) {\n    // tables required by PDF spec:\n    //   head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n    //\n    // additional tables required for standalone fonts:\n    //   name, cmap, OS/2, post\n\n    this.glyf = [];\n    this.offset = 0;\n    this.loca = {\n      offsets: [],\n      version: this.font.loca.version\n    };\n\n    this.hmtx = {\n      metrics: [],\n      bearings: []\n    };\n\n    // include all the glyphs\n    // not using a for loop because we need to support adding more\n    // glyphs to the array as we go, and CoffeeScript caches the length.\n    let i = 0;\n    while (i < this.glyphs.length) {\n      this._addGlyph(this.glyphs[i++]);\n    }\n\n    let maxp = cloneDeep(this.font.maxp);\n    maxp.numGlyphs = this.glyf.length;\n\n    this.loca.offsets.push(this.offset);\n\n    let head = cloneDeep(this.font.head);\n    head.indexToLocFormat = this.loca.version;\n\n    let hhea = cloneDeep(this.font.hhea);\n    hhea.numberOfMetrics = this.hmtx.metrics.length;\n\n    // map = []\n    // for index in [0...256]\n    //     if index < @numGlyphs\n    //         map[index] = index\n    //     else\n    //         map[index] = 0\n    //\n    // cmapTable =\n    //     version: 0\n    //     length: 262\n    //     language: 0\n    //     codeMap: map\n    //\n    // cmap =\n    //     version: 0\n    //     numSubtables: 1\n    //     tables: [\n    //         platformID: 1\n    //         encodingID: 0\n    //         table: cmapTable\n    //     ]\n\n    // TODO: subset prep, cvt, fpgm?\n    Directory.encode(stream, {\n      tables: {\n        head,\n        hhea,\n        loca: this.loca,\n        maxp,\n        'cvt ': this.font['cvt '],\n        prep: this.font.prep,\n        glyf: this.glyf,\n        hmtx: this.hmtx,\n        fpgm: this.font.fpgm\n\n        // name: clone @font.name\n        // 'OS/2': clone @font['OS/2']\n        // post: clone @font.post\n        // cmap: cmap\n      }\n    });\n  }\n}\n","import r from 'restructure';\n\nconst resolved = Promise.resolve();\n\nexport default class Subset {\n  constructor(font) {\n    this.font = font;\n    this.glyphs = [];\n    this.mapping = {};\n\n    // always include the missing glyph\n    this.includeGlyph(0);\n  }\n\n  includeGlyph(glyph) {\n    if (typeof glyph === 'object') {\n      glyph = glyph.id;\n    }\n\n    if (this.mapping[glyph] == null) {\n      this.glyphs.push(glyph);\n      this.mapping[glyph] = this.glyphs.length - 1;\n    }\n\n    return this.mapping[glyph];\n  }\n\n  encodeStream() {\n    let s = new r.EncodeStream();\n\n    resolved.then(() => {\n      this.encode(s);\n      return s.end();\n    });\n\n    return s;\n  }\n}\n","import r from 'restructure';\n\n// Flags for simple glyphs\nconst ON_CURVE        = 1 << 0;\nconst X_SHORT_VECTOR  = 1 << 1;\nconst Y_SHORT_VECTOR  = 1 << 2;\nconst REPEAT          = 1 << 3;\nconst SAME_X          = 1 << 4;\nconst SAME_Y          = 1 << 5;\n\nclass Point {\n  static size(val) {\n    return val >= 0 && val <= 255 ? 1 : 2;\n  }\n  \n  static encode(stream, value) {\n    if (value >= 0 && value <= 255) {\n      stream.writeUInt8(value);\n    } else {\n      stream.writeInt16BE(value);\n    }\n  }\n}\n\nlet Glyf = new r.Struct({\n  numberOfContours: r.int16, // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16,\n  endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n  instructions: new r.Array(r.uint8, r.uint16),\n  flags: new r.Array(r.uint8, 0),\n  xPoints: new r.Array(Point, 0),\n  yPoints: new r.Array(Point, 0)\n});\n\n/**\n * Encodes TrueType glyph outlines\n */\nexport default class TTFGlyphEncoder {\n  encodeSimple(path, instructions = []) {\n    let endPtsOfContours = [];\n    let xPoints = [];\n    let yPoints = [];\n    let flags = [];\n    let same = 0;\n    let lastX = 0, lastY = 0, lastFlag = 0;\n    let pointCount = 0;\n    \n    for (let i = 0; i < path.commands.length; i++) {\n      let c = path.commands[i];\n      \n      for (let j = 0; j < c.args.length; j += 2) {\n        let x = c.args[j];\n        let y = c.args[j + 1];\n        let flag = 0;\n        \n        // If the ending point of a quadratic curve is the midpoint\n        // between the control point and the control point of the next\n        // quadratic curve, we can omit the ending point.\n        if (c.command === 'quadraticCurveTo' && j === 2) {\n          let next = path.commands[i + 1];\n          if (next && next.command === 'quadraticCurveTo') {\n            let midX = (lastX + next.args[0]) / 2;\n            let midY = (lastY + next.args[1]) / 2;\n            \n            if (x === midX && y === midY) {\n              continue;\n            }\n          }\n        }\n        \n        // All points except control points are on curve.\n        if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n          flag |= ON_CURVE;\n        }\n        \n        flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X);\n        flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y);\n        \n        if (flag === lastFlag && same < 255) {\n          flags[flags.length - 1] |= REPEAT;\n          same++;\n        } else {\n          if (same > 0) {\n            flags.push(same);\n            same = 0;\n          }\n      \n          flags.push(flag);\n          lastFlag = flag;\n        }\n        \n        lastX = x;\n        lastY = y;\n        pointCount++;\n      }\n  \n      if (c.command === 'closePath') {\n        endPtsOfContours.push(pointCount - 1);\n      }\n    }\n\n    // Close the path if the last command didn't already\n    if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n      endPtsOfContours.push(pointCount - 1);\n    }\n    \n    let bbox = path.bbox;\n    let glyf = {\n      numberOfContours: endPtsOfContours.length,\n      xMin: bbox.minX,\n      yMin: bbox.minY,\n      xMax: bbox.maxX,\n      yMax: bbox.maxY,\n      endPtsOfContours: endPtsOfContours,\n      instructions: instructions,\n      flags: flags,\n      xPoints: xPoints,\n      yPoints: yPoints\n    };\n    \n    let size = Glyf.size(glyf);\n    let tail = 4 - (size % 4);\n    \n    let stream = new r.EncodeStream(size + tail);\n    Glyf.encode(stream, glyf);\n    \n    // Align to 4-byte length\n    if (tail !== 0) {\n      stream.fill(0, tail);\n    }\n    \n    return stream.buffer;\n  }\n  \n  _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n    let diff = value - last;\n    \n    if (value === last) {\n      flag |= sameFlag;\n    } else {\n      if (-255 <= diff && diff <= 255) {\n        flag |= shortFlag;\n        if (diff < 0) {\n          diff = -diff;\n        } else {\n          flag |= sameFlag;\n        }\n      }\n      \n      points.push(diff);\n    }\n    \n    return flag;\n  }\n}\n","import Subset from './Subset';\nimport CFFTop from '../cff/CFFTop';\nimport CFFPrivateDict from '../cff/CFFPrivateDict';\nimport standardStrings from '../cff/CFFStandardStrings';\n\nexport default class CFFSubset extends Subset {\n  constructor(font) {\n    super(font);\n\n    this.cff = this.font['CFF '];\n    if (!this.cff) {\n      throw new Error('Not a CFF Font');\n    }\n  }\n\n  subsetCharstrings() {\n    this.charstrings = [];\n    let gsubrs = {};\n\n    for (let gid of this.glyphs) {\n      this.charstrings.push(this.cff.getCharString(gid));\n\n      let glyph = this.font.getGlyph(gid);\n      let path = glyph.path; // this causes the glyph to be parsed\n\n      for (let subr in glyph._usedGsubrs) {\n        gsubrs[subr] = true;\n      }\n    }\n\n    this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n  }\n\n  subsetSubrs(subrs, used) {\n    let res = [];\n    for (let i = 0; i < subrs.length; i++) {\n      let subr = subrs[i];\n      if (used[i]) {\n        this.cff.stream.pos = subr.offset;\n        res.push(this.cff.stream.readBuffer(subr.length));\n      } else {\n        res.push(Buffer.from([11])); // return\n      }\n    }\n\n    return res;\n  }\n\n  subsetFontdict(topDict) {\n    topDict.FDArray = [];\n    topDict.FDSelect = {\n      version: 0,\n      fds: []\n    };\n\n    let used_fds = {};\n    let used_subrs = [];\n    let fd_select = {};\n    for (let gid of this.glyphs) {\n      let fd = this.cff.fdForGlyph(gid);\n      if (fd == null) {\n        continue;\n      }\n\n      if (!used_fds[fd]) {\n        topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n        used_subrs.push({});\n        fd_select[fd] = topDict.FDArray.length - 1;\n      }\n\n      used_fds[fd] = true;\n      topDict.FDSelect.fds.push(fd_select[fd]);\n\n      let glyph = this.font.getGlyph(gid);\n      let path = glyph.path; // this causes the glyph to be parsed\n      for (let subr in glyph._usedSubrs) {\n        used_subrs[fd_select[fd]][subr] = true;\n      }\n    }\n\n    for (let i = 0; i < topDict.FDArray.length; i++) {\n      let dict = topDict.FDArray[i];\n      delete dict.FontName;\n      if (dict.Private && dict.Private.Subrs) {\n        dict.Private = Object.assign({}, dict.Private);\n        dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n      }\n    }\n\n    return;\n  }\n\n  createCIDFontdict(topDict) {\n    let used_subrs = {};\n    for (let gid of this.glyphs) {\n      let glyph = this.font.getGlyph(gid);\n      let path = glyph.path; // this causes the glyph to be parsed\n\n      for (let subr in glyph._usedSubrs) {\n        used_subrs[subr] = true;\n      }\n    }\n\n    let privateDict = Object.assign({}, this.cff.topDict.Private);\n    if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n      privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n    }\n\n    topDict.FDArray = [{ Private: privateDict }];\n    return topDict.FDSelect = {\n      version: 3,\n      nRanges: 1,\n      ranges: [{ first: 0, fd: 0 }],\n      sentinel: this.charstrings.length\n    };\n  }\n\n  addString(string) {\n    if (!string) {\n      return null;\n    }\n\n    if (!this.strings) {\n      this.strings = [];\n    }\n\n    this.strings.push(string);\n    return standardStrings.length + this.strings.length - 1;\n  }\n\n  encode(stream) {\n    this.subsetCharstrings();\n\n    let charset = {\n      version: this.charstrings.length > 255 ? 2 : 1,\n      ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]\n    };\n\n    let topDict = Object.assign({}, this.cff.topDict);\n    topDict.Private = null;\n    topDict.charset = charset;\n    topDict.Encoding = null;\n    topDict.CharStrings = this.charstrings;\n\n    for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) {\n      topDict[key] = this.addString(this.cff.string(topDict[key]));\n    }\n\n    topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n    topDict.CIDCount = this.charstrings.length;\n\n    if (this.cff.isCIDFont) {\n      this.subsetFontdict(topDict);\n    } else {\n      this.createCIDFontdict(topDict);\n    }\n\n    let top = {\n      version: 1,\n      hdrSize: this.cff.hdrSize,\n      offSize: 4,\n      header: this.cff.header,\n      nameIndex: [this.cff.postscriptName],\n      topDictIndex: [topDict],\n      stringIndex: this.strings,\n      globalSubrIndex: this.gsubrs\n    };\n\n    CFFTop.encode(stream, top);\n  }\n}\n","import TTFFont from './TTFFont';\nimport WOFFDirectory from './tables/WOFFDirectory';\nimport tables from './tables';\nimport inflate from 'tiny-inflate';\nimport r from 'restructure';\n\nexport default class WOFFFont extends TTFFont {\n  type = 'WOFF';\n\n  static probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOFF';\n  }\n\n  _decodeDirectory() {\n    this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });\n  }\n\n  _getTableStream(tag) {\n    let table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n\n      if (table.compLength < table.length) {\n        this.stream.pos += 2; // skip deflate header\n        let outBuffer = Buffer.alloc(table.length);\n        let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n        return new r.DecodeStream(buf);\n      } else {\n        return this.stream;\n      }\n    }\n\n    return null;\n  }\n}\n","import r from 'restructure';\nimport tables from './';\n\nlet WOFFDirectoryEntry = new r.Struct({\n  tag:          new r.String(4),\n  offset:       new r.Pointer(r.uint32, 'void', {type: 'global'}),\n  compLength:   r.uint32,\n  length:       r.uint32,\n  origChecksum: r.uint32\n});\n\nlet WOFFDirectory = new r.Struct({\n  tag:            new r.String(4), // should be 'wOFF'\n  flavor:         r.uint32,\n  length:         r.uint32,\n  numTables:      r.uint16,\n  reserved:       new r.Reserved(r.uint16),\n  totalSfntSize:  r.uint32,\n  majorVersion:   r.uint16,\n  minorVersion:   r.uint16,\n  metaOffset:     r.uint32,\n  metaLength:     r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset:     r.uint32,\n  privLength:     r.uint32,\n  tables:         new r.Array(WOFFDirectoryEntry, 'numTables')\n});\n\nWOFFDirectory.process = function() {\n  let tables = {};\n  for (let table of this.tables) {\n    tables[table.tag] = table;\n  }\n\n  this.tables = tables;\n};\n\nexport default WOFFDirectory;\n","import r from 'restructure';\nimport brotli from 'brotli/decompress.js';\nimport TTFFont from './TTFFont';\nimport TTFGlyph, { Point } from './glyph/TTFGlyph';\nimport WOFF2Glyph from './glyph/WOFF2Glyph';\nimport WOFF2Directory from './tables/WOFF2Directory';\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nexport default class WOFF2Font extends TTFFont {\n  type = 'WOFF2';\n\n  static probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOF2';\n  }\n\n  _decodeDirectory() {\n    this.directory = WOFF2Directory.decode(this.stream);\n    this._dataPos = this.stream.pos;\n  }\n\n  _decompress() {\n    // decompress data and setup table offsets if we haven't already\n    if (!this._decompressed) {\n      this.stream.pos = this._dataPos;\n      let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n\n      let decompressedSize = 0;\n      for (let tag in this.directory.tables) {\n        let entry = this.directory.tables[tag];\n        entry.offset = decompressedSize;\n        decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length;\n      }\n\n      let decompressed = brotli(buffer, decompressedSize);\n      if (!decompressed) {\n        throw new Error('Error decoding compressed data in WOFF2');\n      }\n\n      this.stream = new r.DecodeStream(Buffer.from(decompressed));\n      this._decompressed = true;\n    }\n  }\n\n  _decodeTable(table) {\n    this._decompress();\n    return super._decodeTable(table);\n  }\n\n  // Override this method to get a glyph and return our\n  // custom subclass if there is a glyf table.\n  _getBaseGlyph(glyph, characters = []) {\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n        if (!this._transformedGlyphs) { this._transformGlyfTable(); }\n        return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n\n      } else {\n        return super._getBaseGlyph(glyph, characters);\n      }\n    }\n  }\n\n  _transformGlyfTable() {\n    this._decompress();\n    this.stream.pos = this.directory.tables.glyf.offset;\n    let table = GlyfTable.decode(this.stream);\n    let glyphs = [];\n\n    for (let index = 0; index < table.numGlyphs; index++) {\n      let glyph = {};\n      let nContours = table.nContours.readInt16BE();\n      glyph.numberOfContours = nContours;\n\n      if (nContours > 0) { // simple glyph\n        let nPoints = [];\n        let totalPoints = 0;\n\n        for (let i = 0; i < nContours; i++) {\n          let r = read255UInt16(table.nPoints);\n          totalPoints += r;\n          nPoints.push(totalPoints);\n        }\n\n        glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n        for (let i = 0; i < nContours; i++) {\n          glyph.points[nPoints[i] - 1].endContour = true;\n        }\n\n        var instructionSize = read255UInt16(table.glyphs);\n\n      } else if (nContours < 0) { // composite glyph\n        let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);\n        if (haveInstructions) {\n          var instructionSize = read255UInt16(table.glyphs);\n        }\n      }\n\n      glyphs.push(glyph);\n    }\n\n    this._transformedGlyphs = glyphs;\n  }\n}\n\n// Special class that accepts a length and returns a sub-stream for that data\nclass Substream {\n  constructor(length) {\n    this.length = length;\n    this._buf = new r.Buffer(length);\n  }\n\n  decode(stream, parent) {\n    return new r.DecodeStream(this._buf.decode(stream, parent));\n  }\n}\n\n// This struct represents the entire glyf table\nlet GlyfTable = new r.Struct({\n  version: r.uint32,\n  numGlyphs: r.uint16,\n  indexFormat: r.uint16,\n  nContourStreamSize: r.uint32,\n  nPointsStreamSize: r.uint32,\n  flagStreamSize: r.uint32,\n  glyphStreamSize: r.uint32,\n  compositeStreamSize: r.uint32,\n  bboxStreamSize: r.uint32,\n  instructionStreamSize: r.uint32,\n  nContours: new Substream('nContourStreamSize'),\n  nPoints: new Substream('nPointsStreamSize'),\n  flags: new Substream('flagStreamSize'),\n  glyphs: new Substream('glyphStreamSize'),\n  composites: new Substream('compositeStreamSize'),\n  bboxes: new Substream('bboxStreamSize'),\n  instructions: new Substream('instructionStreamSize')\n});\n\nconst WORD_CODE = 253;\nconst ONE_MORE_BYTE_CODE2 = 254;\nconst ONE_MORE_BYTE_CODE1 = 255;\nconst LOWEST_U_CODE = 253;\n\nfunction read255UInt16(stream) {\n  let code = stream.readUInt8();\n\n  if (code === WORD_CODE) {\n    return stream.readUInt16BE();\n  }\n\n  if (code === ONE_MORE_BYTE_CODE1) {\n    return stream.readUInt8() + LOWEST_U_CODE;\n  }\n\n  if (code === ONE_MORE_BYTE_CODE2) {\n    return stream.readUInt8() + LOWEST_U_CODE * 2;\n  }\n\n  return code;\n}\n\nfunction withSign(flag, baseval) {\n  return flag & 1 ? baseval : -baseval;\n}\n\nfunction decodeTriplet(flags, glyphs, nPoints) {\n  let y;\n  let x = y = 0;\n  let res = [];\n\n  for (let i = 0; i < nPoints; i++) {\n    let dx = 0, dy = 0;\n    let flag = flags.readUInt8();\n    let onCurve = !(flag >> 7);\n    flag &= 0x7f;\n\n    if (flag < 10) {\n      dx = 0;\n      dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n\n    } else if (flag < 20) {\n      dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8());\n      dy = 0;\n\n    } else if (flag < 84) {\n      var b0 = flag - 20;\n      var b1 = glyphs.readUInt8();\n      dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n      dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n\n    } else if (flag < 120) {\n      var b0 = flag - 84;\n      dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8());\n      dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8());\n\n    } else if (flag < 124) {\n      var b1 = glyphs.readUInt8();\n      let b2 = glyphs.readUInt8();\n      dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n      dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n\n    } else {\n      dx = withSign(flag, glyphs.readUInt16BE());\n      dy = withSign(flag >> 1, glyphs.readUInt16BE());\n    }\n\n    x += dx;\n    y += dy;\n    res.push(new Point(onCurve, false, x, y));\n  }\n\n  return res;\n}\n","import TTFGlyph from './TTFGlyph';\n\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nexport default class WOFF2Glyph extends TTFGlyph {\n  type = 'WOFF2';\n\n  _decode() {\n    // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n    return this._font._transformedGlyphs[this.id];\n  }\n\n  _getCBox() {\n    return this.path.bbox;\n  }\n}\n","import r from 'restructure';\n\nconst Base128 = {\n  decode(stream) {\n    let result = 0;\n    let iterable = [0, 1, 2, 3, 4];\n    for (let j = 0; j < iterable.length; j++) {\n      let i = iterable[j];\n      let code = stream.readUInt8();\n\n      // If any of the top seven bits are set then we're about to overflow.\n      if (result & 0xe0000000) {\n        throw new Error('Overflow');\n      }\n\n      result = (result << 7) | (code & 0x7f);\n      if ((code & 0x80) === 0) {\n        return result;\n      }\n    }\n\n    throw new Error('Bad base 128 number');\n  }\n};\n\nlet knownTags = [\n  'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ',\n  'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp',\n  'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF',\n  'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL',\n  'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc',\n  'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx',\n  'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'\n];\n\nlet WOFF2DirectoryEntry = new r.Struct({\n  flags: r.uint8,\n  customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f),\n  tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n  length: Base128,\n  transformVersion: t => (t.flags >>> 6) & 0x03,\n  transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0,\n  transformLength: new r.Optional(Base128, t => t.transformed)\n});\n\nlet WOFF2Directory = new r.Struct({\n  tag: new r.String(4), // should be 'wOF2'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  totalCompressedSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\n\nWOFF2Directory.process = function() {\n  let tables = {};\n  for (let i = 0; i < this.tables.length; i++) {\n    let table = this.tables[i];\n    tables[table.tag] = table;\n  }\n\n  return this.tables = tables;\n};\n\nexport default WOFF2Directory;\n","import r from 'restructure';\nimport TTFFont from './TTFFont';\nimport Directory from './tables/directory';\nimport tables from './tables';\n\nlet TTCHeader = new r.VersionedStruct(r.uint32, {\n  0x00010000: {\n    numFonts:   r.uint32,\n    offsets:    new r.Array(r.uint32, 'numFonts')\n  },\n  0x00020000: {\n    numFonts:   r.uint32,\n    offsets:    new r.Array(r.uint32, 'numFonts'),\n    dsigTag:    r.uint32,\n    dsigLength: r.uint32,\n    dsigOffset: r.uint32\n  }\n});\n\nexport default class TrueTypeCollection {\n  type = 'TTC';\n\n  static probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'ttcf';\n  }\n\n  constructor(stream) {\n    this.stream = stream;\n    if (stream.readString(4) !== 'ttcf') {\n      throw new Error('Not a TrueType collection');\n    }\n\n    this.header = TTCHeader.decode(stream);\n  }\n\n  getFont(name) {\n    for (let offset of this.header.offsets) {\n      let stream = new r.DecodeStream(this.stream.buffer);\n      stream.pos = offset;\n      let font = new TTFFont(stream);\n      if ((Buffer.isBuffer(font.postscriptName) && font.postscriptName.equals(name)) || font.postscriptName === name)\n        return font;\n    }\n\n    return null;\n  }\n\n  get fonts() {\n    let fonts = [];\n    for (let offset of this.header.offsets) {\n      let stream = new r.DecodeStream(this.stream.buffer);\n      stream.pos = offset;\n      fonts.push(new TTFFont(stream));\n    }\n\n    return fonts;\n  }\n}\n","import r from 'restructure';\nimport TTFFont from './TTFFont';\n\nlet DFontName = new r.String(r.uint8);\nlet DFontData = new r.Struct({\n  len: r.uint32,\n  buf: new r.Buffer('len')\n});\n\nlet Ref = new r.Struct({\n  id: r.uint16,\n  nameOffset: r.int16,\n  attr: r.uint8,\n  dataOffset: r.uint24,\n  handle: r.uint32\n});\n\nlet Type = new r.Struct({\n  name: new r.String(4),\n  maxTypeIndex: r.uint16,\n  refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' })\n});\n\nlet TypeList = new r.Struct({\n  length: r.uint16,\n  types: new r.Array(Type, t => t.length + 1)\n});\n\nlet DFontMap = new r.Struct({\n  reserved: new r.Reserved(r.uint8, 24),\n  typeList: new r.Pointer(r.uint16, TypeList),\n  nameListOffset: new r.Pointer(r.uint16, 'void')\n});\n\nlet DFontHeader = new r.Struct({\n  dataOffset: r.uint32,\n  map: new r.Pointer(r.uint32, DFontMap),\n  dataLength: r.uint32,\n  mapLength: r.uint32\n});\n\nexport default class DFont {\n  type = 'DFont';\n\n  static probe(buffer) {\n    let stream = new r.DecodeStream(buffer);\n\n    try {\n      var header = DFontHeader.decode(stream);\n    } catch (e) {\n      return false;\n    }\n\n    for (let type of header.map.typeList.types) {\n      if (type.name === 'sfnt') {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  constructor(stream) {\n    this.stream = stream;\n    this.header = DFontHeader.decode(this.stream);\n\n    for (let type of this.header.map.typeList.types) {\n      for (let ref of type.refList) {\n        if (ref.nameOffset >= 0) {\n          this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n          ref.name = DFontName.decode(this.stream);\n        } else {\n          ref.name = null;\n        }\n      }\n\n      if (type.name === 'sfnt') {\n        this.sfnt = type;\n      }\n    }\n  }\n\n  getFont(name) {\n    if (!this.sfnt) {\n      return null;\n    }\n\n    for (let ref of this.sfnt.refList) {\n      let pos = this.header.dataOffset + ref.dataOffset + 4;\n      let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n      let font = new TTFFont(stream);\n      if ((Buffer.isBuffer(font.postscriptName) && font.postscriptName.equals(name)) || font.postscriptName === name)\n        return font;\n    }\n\n    return null;\n  }\n\n  get fonts() {\n    let fonts = [];\n    for (let ref of this.sfnt.refList) {\n      let pos = this.header.dataOffset + ref.dataOffset + 4;\n      let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n      fonts.push(new TTFFont(stream));\n    }\n\n    return fonts;\n  }\n}\n"],"names":[],"version":3,"file":"main.cjs.map"}